问题标签 [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.
c++ - 如何检查 CPU 是否支持 SSE3 指令集?
以下代码对检查 CPU 是否支持 SSE3 指令集有效吗?
使用该IsProcessorFeaturePresent()
功能显然不适用于 Windows XP。
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/AVX
float
向量。如果可以利用平台细节,那就对了!
大约 0.01% 的最大错误率是理想的,尽管我也对全精度 (for float
) 算法感兴趣。
我已经在使用快速pow()
近似,但它没有考虑到这些约束。有没有可能做得更好?
memory - 新的 Haswell AVX“聚集”指令有哪些对齐限制?
我正在查看AVX 编程参考。新的Haswell 指令包括一些期待已久的“收集”负载。但是,我无法弄清楚索引数据项的对齐限制是什么。参考的第 2.5 节“内存对齐”似乎应该列出VGATHER*
表 2.4 或 2.5 之一中的各种指令......但它没有。
背景:虽然收集指令支持的数据大小为 4 和 8 字节,但我的应用程序可以受益于将相邻的 16 位数据值对收集加载到 DWORDS。具有 2 字节比例的奇数索引将产生 2 字节对齐的 4 字节负载,从手册中我不清楚这是否会出错或无法按预期工作(我宁愿怀疑我运气不好支持未对齐访问的指令中似乎有一个“U”)。
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 进行编译。
提前感谢您的帮助!- 贾斯汀
x86 - 如何在 256 位 AVX (YMM) 寄存器中交换低 128 位和高 128 位
我正在移植 SSE SIMD 代码以使用 256 位 AVX 扩展,并且似乎找不到任何可以混合/混洗/移动高 128 位和低 128 位的指令。
背后的故事:
我真正想要的是VHADDPS
/表现_mm256_hadd_ps
得像HADDPS
/ _mm_hadd_ps
,只有 256 位字。不幸的是,它就像两个分别HADDPS
对低位和高位单词进行操作的调用。
c++ - 如何在 Sandy Bridge 上的一系列整数中快速将位计数到单独的 bin 中?
更新:请阅读代码,这与计算一个 int 中的位无关
是否可以使用一些聪明的汇编程序来提高以下代码的性能?
Count
在我算法的最内层循环中。
更新: 架构:x86-64、Sandy Bridge,因此可以使用 SSE4.2、AVX1 和旧技术,但不能使用 AVX2 或 BMI1/2。
bits
变量几乎具有随机位(接近半个零和半个)
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,由于某种原因它不起作用。
c++ - VS2010 SP1 是否只支持部分 AVX 指令集?
微软表示 VS2010 支持全套 AVX 指令:
... 在 VS2010 版本中,所有 AVX 功能和指令都通过内在和/arch:AVX
. ...
但我找不到任何用于融合乘加运算的内在函数
我需要使用_mm256_fmadd_ps
函数,但“immintrin.h”标题中缺少它。我真的很坚持。
c++ - 传递包含 SSE/AVX 值的类型
假设我有以下
在硬核循环中,以下哪一项通常更好(如果有,为什么)?
x86 - 使用英特尔 AVX 存储压缩双精度向量中的单个双精度
我正在为英特尔的 AVX 指令使用 C 内在函数编写代码。如果我有一个打包的双向量(a __m256d
),将它们中的每一个存储到内存中的不同位置(即我需要将它们分散到不同的位置,这样的最有效方式(即最少的操作数)是什么)他们不再包装)?伪代码:
使用 SSE,我可以使用使用和内在函数的__m128
类型来做到这一点。我还没有找到任何与 AVX 类似的东西,可以让我将单独的 64 位片段存储到内存中。一个存在吗?_mm_storel_pi
_mm_storeh_pi