问题标签 [avx]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2913 浏览

c - 如何有效地结合 SSE 中的比较?

我正在尝试将以下代码转换为 SSE/AVX:

这里 N 是一个很小的常数,比如说 8。 if(...) 语句在大多数情况下的计算结果为 false。

第一次尝试:

这有效,并且相当快。问题是,有没有更有效的方法来做到这一点?特别是,如果有一个寄存器包含 SSE 或 AVX 比较浮点数(放置0xffff0x0000放入该插槽)的结果,那么所有比较的结果如何(例如)与 -ed 或 or-ed 在一起,一般来说? PMOVMSKB(或相应的内在)是_mm_movemask执行此操作的标准方法吗?

另外,如何在上面的代码中使用 AVX 256 位寄存器而不是 SSE?

编辑:

使用 VPTEST(来自 _mm_test* 内在)对版本进行测试和基准测试,如下所示。

这也有效,而且速度很快。对此(Intel i7-2630QM、Windows 7、cygwin 1.7、cygwin gcc 4.5.3 或 mingw x86_64 gcc 4.5.3、N=8)进行基准测试表明,这与 64 位上的上述代码速度相同(小于 0.1%) . 内部循环的任一版本平均运行大约 6.8 个时钟,这些数据都在缓存中,并且比较总是返回 false。

有趣的是,在 32 位上,_mm_test 版本的运行速度慢了大约 10%。事实证明,编译器在循环展开后会溢出掩码,并且必须重新读取它们;这可能是不必要的,并且可以在手动编码组装中避免。

选择哪种方法?似乎没有令人信服的理由更VPTEST喜欢VMOVMSKPS. 实际上,有一个更喜欢的理由VMOVMSKPS,即它释放了一个 xmm 寄存器,否则该寄存器会被掩码占用。

0 投票
4 回答
27673 浏览

intel - 英特尔 SSE 和 AVX 示例和教程

是否有任何好的 C/C++ 教程或示例来学习英特尔 SSE 和 AVX 指令?

我在 Microsoft MSDN 和 Intel 网站上发现很少,但从基础知识了解它会很棒..

0 投票
2 回答
2275 浏览

c++ - m256_f32 的 GCC 等效项

我有这样的 AVX C++ 代码,在 Visual Studio 2010 下编译得很好:

然而,GCC 给出了以下错误:

我做了一些研究,这似乎ymm0.m256_f32是 Microsoft 特定的指令,用于从长 AVX 寄存器中提取单个浮点数。但是我可以用什么来让 gcc/linux 做同样的事情呢?

0 投票
1 回答
527 浏览

c - AVX 中 SSE unpacklo_ps/unpackhi_ps 的等价物(双打)

在 SSE 中,如果我有一个包含 4 个浮点数的 128 位寄存器,即

那么如果我想要

我可以简单地做:

同样,如果我想要

我可以:

如果我有一个包含双精度的 AVX 寄存器,是否可以用一条指令来做同样的事情?

根据这些内在函数的工作方式,我知道我不能使用_mm256_unpacklo_pd(),_mm256_shuffle_pd()或. 除了这些我可以使用的任何指令还是我必须使用上述指令的组合?_mm256_permute2f128_pd()_mm256_blend_pd()

0 投票
1 回答
1234 浏览

c++ - SSE / AVX 对齐内存上的 valarray

有没有办法确保valarray使用对齐的内存,以便可以使用 SSE 和 AVX 对其进行矢量化?据我所知,STL 不能保证对齐,并且您不能将分配器传递给 valarray。还有另一种方法可以实现这一目标吗?

提前谢谢!

0 投票
2 回答
1064 浏览

gcc - gcc 选项同时使用 i87、AVX 但不使用 SSE

当为支持AVX扩展的处理器编译时(比如说适用),同时使用键-m64 -march=corei7-avx -mtune=corei7-avx是否有意义?-mfpmath=both -mavx这不是导致编译器同时使用三组指令(i87, SSE, AVX)吗?还是仅i87针对标量(在某种意义上)和AVX仅针对向量?

0 投票
1 回答
1117 浏览

gcc - MinGW(甚至 gcc)的 mfpmath 选项

带有命令行选项(甚至带有)的MinGW-march=corei7-avx -mtune=corei7-avx的or-march=corei7 -mtune=corei7 -mavx命令行选项是否可以将AVX指令用于数学例程?请注意,从这里开始不起作用(对于MinGW上的最新版本,这是“无法识别的选项” )。-mfpmath=sse-mfpmath=both--with-fpmath=avx

0 投票
2 回答
1424 浏览

sse - 如何将 __m256d 中的所有元素设置为另一个 __m256d 的第三个元素?

使用 4 个打包float( __m128),我可以使用 SSE 内在函数

将所有元素设置H为第三个元素X(这是最快的方法吗?)

现在,我想对 4 个打包double( __m256d) 做同样的事情。我天真地编码

但这不正确!相反,它设置 H={X[1],X[1],X[3],X[3]}。

那么,怎么做才对呢?

编辑

使用 Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz

0 投票
1 回答
1031 浏览

c - 使用 AVX 的有符号/无符号整数的最小值

我正在查看 AVX 指令指南,虽然有 32 位整数值的加载、存储和置换操作,但其他操作(例如确定最小值或最大值)或随机操作仅适用于浮点数和双精度数。

因此,如果我想将这些操作用于 32 位整数,我是否需要将其类型转换为浮点数,然后再将其类型转换回来,或者是否还有其他一些我遗漏的指令?

此外,如果我想在 32 位整数上使用它,洗牌掩码是否与浮点数一样?

0 投票
4 回答
3727 浏览

x86 - 8 个压缩的 32 位浮点数的水平总和

如果我有 8 个压缩的 32 位浮点数 ( __m256),那么提取所有 8 个元素的水平总和的最快方法是什么?同理,如何获得水平最大值和最小值?换句话说,以下 C++ 函数的最佳实现是什么?