问题标签 [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 投票
6 回答
48526 浏览

c++ - 如何检查 CPU 是否支持 SSE3 指令集?

以下代码对检查 CPU 是否支持 SSE3 指令集有效吗?

使用该IsProcessorFeaturePresent()功能显然不适用于 Windows XP。

0 投票
10 回答
12044 浏览

c++ - 使用 const 非整数指数优化 pow()?

我的代码中有热点,我正在pow()占用大约 10-20% 的执行时间。

我的输入pow(x,y)非常具体,所以我想知道是否有办法以pow()更高的性能滚动两个近似值(每个指数一个):

  • 我有两个常数指数:2.4 和 1/2.4。
  • 当指数为 2.4 时,x将在 (0.090473935, 1.0] 范围内。
  • 当指数为 1/2.4 时,x将在 (0.0031308, 1.0] 范围内。
  • 我正在使用 SSE/AVXfloat向量。如果可以利用平台细节,那就对了!

大约 0.01% 的最大错误率是理想的,尽管我也对全精度 (for float) 算法感兴趣。

我已经在使用快速pow() 近似,但它没有考虑到这些约束。有没有可能做得更好?

0 投票
1 回答
1934 浏览

memory - 新的 Haswell AVX“聚集”指令有哪些对齐限制?

我正在查看AVX 编程参考。新的Haswell 指令包括一些期待已久的“收集”负载。但是,我无法弄清楚索引数据项的对齐限制是什么。参考的第 2.5 节“内存对齐”似乎应该列出VGATHER*表 2.4 或 2.5 之一中的各种指令......但它没有。

背景:虽然收集指令支持的数据大小为 4 和 8 字节,但我的应用程序可以受益于将相邻的 16 位数据值对收集加载到 DWORDS。具有 2 字节比例的奇数索引将产生 2 字节对齐的 4 字节负载,从手册中我不清楚这是否会出错或无法按预期工作(我宁愿怀疑我运气不好支持未对齐访问的指令中似乎有一个“U”)。

0 投票
2 回答
1399 浏览

intrinsics - 来自 AVX _m256_unpack*_ps unpack 内在的意外结果

我正在尝试使用 AVX 内在解包指令_m256_unpacklo_ps_m256_unpackhi_ps交错 16 个浮点值。我得到的结果很奇怪,要么是因为我不了解解包在 AVX 中应该如何工作,要么是因为某些东西没有按应有的方式工作。

我看到的是,例如,当我尝试将低阶浮点数从两个向量 v1 和 v2 解压缩到第三个向量 v3 中时,我看到以下内容:

如果 v1 是 [a b c d e f g h] 并且 v1 是[i j k l m n o p]

然后v3 = _m256_unpacklo_ps(v1, v2)导致 [a i b j e m f n]

当我期望 v3 会给[a i b j c k d l]

我的期望不正确还是我使用不正确?还是有其他问题?

一些测试代码是:

我正在使用 gcc 4.5.2 进行编译。

提前感谢您的帮助!- 贾斯汀

0 投票
3 回答
10178 浏览

x86 - 如何在 256 位 AVX (YMM) 寄存器中交换低 128 位和高 128 位

我正在移植 SSE SIMD 代码以使用 256 位 AVX 扩展,并且似乎找不到任何可以混合/混洗/移动高 128 位和低 128 位的指令。

背后的故事:

我真正想要的是VHADDPS/表现_mm256_hadd_ps得像HADDPS/ _mm_hadd_ps,只有 256 位字。不幸的是,它就像两个分别HADDPS对低位和高位单词进行操作的调用。

0 投票
9 回答
1846 浏览

c++ - 如何在 Sandy Bridge 上的一系列整数中快速将位计数到单独的 bin 中?

更新:请阅读代码,这与计算一个 int 中的位无关

是否可以使用一些聪明的汇编程序来提高以下代码的性能?

Count在我算法的最内层循环中。

更新: 架构:x86-64、Sandy Bridge,因此可以使用 SSE4.2、AVX1 和旧技术,但不能使用 AVX2 或 BMI1/2。

bits变量几乎具有随机位(接近半个零和半个)

0 投票
2 回答
30833 浏览

c++ - 使用 AVX CPU 指令:没有“/arch:AVX”时性能不佳

我的 C++ 代码使用 SSE,现在我想改进它以在可用时支持 AVX。因此,我检测 AVX 何时可用并调用使用 AVX 命令的函数。我使用 Win7 SP1 + VS2010 SP1 和带有 AVX 的 CPU。

要使用 AVX,必须包含以下内容:

然后你可以使用内在的 AVX 函数,比如_mm256_mul_ps_mm256_add_ps。问题是,默认情况下,VS2010 生成的代码运行速度非常慢并显示警告:

警告 C4752:找到 Intel(R) Advanced Vector Extensions;考虑使用 /arch:AVX

看起来 VS2010 实际上不使用 AVX 指令,而是模拟它们。我添加/arch:AVX了编译器选项并得到了很好的结果。但是这个选项告诉编译器尽可能在任何地方使用 AVX 命令。所以我的代码可能会在不支持 AVX 的 CPU 上崩溃!

所以问题是如何让 VS2010 编译器生成 AVX 代码,但只有当我直接指定 AVX 内部函数时。对于 SSE,它可以工作,我只使用 SSE 内在函数,它生成的 SSE 代码没有任何编译器选项,如/arch:SSE. 但是对于 AVX,由于某种原因它不起作用。

0 投票
1 回答
1669 浏览

c++ - VS2010 SP1 是否只支持部分 AVX 指令集?

微软表示 VS2010 支持全套 AVX 指令:

http://blogs.msdn.com/b/vcblog/archive/2009/11/02/visual-c-code-generation-in-visual-studio-2010.aspx

... 在 VS2010 版本中,所有 AVX 功能和指令都通过内在和/arch:AVX. ...

但我找不到任何用于融合乘加运算的内在函数

http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011/compiler_c/intref_cls/common/intref_bk_avx_fma.htm#intref_bk_avx_fma

我需要使用_mm256_fmadd_ps函数,但“immintrin.h”标题中缺少它。我真的很坚持。

0 投票
1 回答
946 浏览

c++ - 传递包含 SSE/AVX 值的类型

假设我有以下

在硬核循环中,以下哪一项通常更好(如果有,为什么)?

0 投票
1 回答
2299 浏览

x86 - 使用英特尔 AVX 存储压缩双精度向量中的单个双精度

我正在为英特尔的 AVX 指令使用 C 内在函数编写代码。如果我有一个打包的双向量(a __m256d),将它们中的每一个存储到内存中的不同位置(即我需要将它们分散到不同的位置,这样的最有效方式(即最少的操作数)是什么)他们不再包装)?伪代码:

使用 SSE,我可以使用使用和内在函数的__m128类型来做到这一点。我还没有找到任何与 AVX 类似的东西,可以让我将单独的 64 位片段存储到内存中。一个存在吗?_mm_storel_pi_mm_storeh_pi