gpt4 book ai didi

c++ - SIMD 与否 SIMD - 跨平台

转载 作者:IT老高 更新时间:2023-10-28 23:18:34 56 4
gpt4 key购买 nike

我需要了解如何编写一些可并行化问题的 C++ 跨平台实现,以便在可用的情况下利用 SIMD(SSE、SPU 等)。以及我希望能够在运行时在 SIMD 和非 SIMD 之间切换。

您建议我如何解决这个问题?(当然我不想针对所有可能的选项多次实现这个问题)

我知道这对于 C++ 来说可能不是一件容易的事,但我相信我遗漏了一些东西。到目前为止,我的想法看起来像这样......类 cStream 将是单个字段的数组。使用多个 cStreams 我可以实现 SoA(数组结构)。然后使用一些 Functor,我可以伪造需要在整个 cStream 上执行的 Lambda 函数。

// just for example I'm not expecting this code to compile
cStream a; // something like float[1024]
cStream b;
cStream c;

void Foo()
{
for_each(
AssignSIMD(c, MulSIMD(AddSIMD(a, b), a)));
}

for_each 将负责增加流的当前指针,以及用 SIMD 和不使用 SIMD 内联仿函数的主体。

类似这样的:

// just for example I'm not expecting this code to compile
for_each(functor<T> f)
{
#ifdef USE_SIMD
if (simdEnabled)
real_for_each(f<true>()); // true means use SIMD
else
#endif
real_for_each(f<false>());
}

请注意,如果 SIMD 已启用,则检查一次并且循环围绕主仿函数。

最佳答案

您可能想查看 MacSTL 库的源代码以了解这方面的一些想法:www.pixelglow.com/macstl/

关于c++ - SIMD 与否 SIMD - 跨平台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2122573/

56 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com