标签: vector-processing

如何使用gcc进行矢量化?

gcc编译器的v4系列可以在一些现代CPU上使用SIMD处理器自动矢量化循环,例如AMD Athlon或Intel Pentium/Core芯片.这是怎么做到的?

gcc loops simd vector-processing

17
推荐指数
2
解决办法
3万
查看次数

使用AVX指令进行水平矢量和的最快方法

我有一个四个64位浮点值的打包向量.
我想得到向量元素的总和.

使用SSE(并使用32位浮点数),我可以执行以下操作:

v_sum = _mm_hadd_ps(v_sum, v_sum);
v_sum = _mm_hadd_ps(v_sum, v_sum);
Run Code Online (Sandbox Code Playgroud)

不幸的是,即使AVX具有_mm256_hadd_pd指令,它的结果也与SSE版本不同.我相信这是因为大多数AVX指令分别用作每个低128位和高128位的SSE指令,而不会跨越128位边界.

理想情况下,我要寻找的解决方案应遵循以下准则:
1)仅使用AVX/AVX2指令.(没有SSE)
2)不超过2-3条指令.

但是,任何有效/优雅的方式(即使不遵循上述指导原则)总是被广泛接受.

非常感谢您的帮助.

-Luigi Castelli

x86 sse simd vector-processing avx

15
推荐指数
1
解决办法
2万
查看次数

如何在256位AVX向量中找到水平最大值

我有一个__m256d向量,包含四个64位浮点值.
我需要找到向量元素的水平最大值,并将结果存储在双精度标量值中;

我的尝试最终都使用了很多矢量元素的改组,使得代码不是很优雅也没有效率.此外,我发现不可能只留在AVX域.在某些时候,我不得不使用SSE 128位指令来提取最终的64位值.但是,我想在最后的声明中被证明是错误的.

因此理想的解决方案将:
1)仅使用AVX指令.
2)最小化指令数量.(我希望不超过3-4条说明)

话虽如此,任何优雅/高效的解决方案都将被接受,即使它不符合上述指导原则.

谢谢你的帮助.

-Luigi

x86 simd vector-processing avx avx2

14
推荐指数
2
解决办法
6709
查看次数

除gcc之外的哪些编译器可以矢量化代码?

当指定了某些选项并给出了合适的条件时,GCC可以自动向量化循环.是否有广泛可用的其他编译器可以做同样的事情?

compiler-construction gcc loops simd vector-processing

4
推荐指数
2
解决办法
2073
查看次数

实际使用自动矢量化?

有没有人利用gcc可以做的自动矢量化?在现实世界中(与示例代码相对)?是否需要重组现有代码才能占用优势?在任何可以通过这种方式进行矢量化的生产代码中是否存在大量案例?

gcc loops simd vector-processing

4
推荐指数
1
解决办法
2087
查看次数

手动自动矢量化与矢量化代码

在某种意义上,使用显式编译指示或依赖或使用自动矢量化来手动矢量化代码是否更好?为了使用自动矢量化获得最佳性能,必须监视编译器输出以确保循环被矢量化或修改它们直到它们是可矢量化的.

使用手动编码,可以确定正在发出所需的指令,但现在代码可能不可移植(无论是其他架构还是其他编译器).

optimization gcc loops vector-processing

4
推荐指数
2
解决办法
2668
查看次数