问题标签 [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.
linux - 如何在 linux 计算机上禁用 avx 指令?
或者更具体地说,如何确保 /proc/cpuinfo 和 CPUID 操作码不显示 AVX 已启用?
(就上下文而言,某些 Amazon EC2 实例存在一个错误,其中 AVX 被错误地报告为活动状态,这会导致动态使用 AVX 指令的程序因 SIGILL 而崩溃)。
我看过这个内核补丁:https ://patchwork.kernel.org/patch/1521191/ ,但我不确定这是否只影响内核的 avx 使用,或者也修补 CPUID 和 /proc/cpuinfo。无论如何,我希望找到适用于 linux 2.6.x 内核系列的解决方案。
assembly - AVX VMOVDQA 比两个 SSE MOVDQA 慢?
在我处理快速 ADD 循环(加速 x64 汇编器 ADD 循环)时,我正在使用 SSE 和 AVX 指令测试内存访问。要添加,我必须读取两个输入并产生一个输出。所以我写了一个虚拟例程,它将两个 x64 值读入寄存器并将一个写回内存而不做任何操作。这当然没用,我只是为了进行基准测试。
我使用一个展开的循环,每个循环处理 64 个字节。它由 8 个块组成,如下所示:
然后我将其升级到 SSE2。现在我使用 4 个这样的块:
后来我使用了 AVX(每个寄存器 256 位)。我有两个这样的块:
到目前为止,还没有那么壮观。有趣的是基准测试结果:当我对 1k+1k=1k 64 位字(即两次 8 kb 输入和一次 8kb 输出)运行三种不同的方法时,我得到了奇怪的结果。以下每个时序用于将两次 64 字节输入处理为 64 字节输出。
- x64 寄存器方法以大约 15 个周期/64 字节运行
- SSE2 方法以大约 8.5 个周期/64 字节运行
- AVX 方法以大约 9 个周期/64 字节运行
我的问题是:为什么 AVX 方法比 SSE2 方法慢(虽然不是很多)?我预计它至少会达到同等水平。使用 YMM 寄存器会花费这么多额外的时间吗?内存是对齐的(否则你会得到 GPF)。
有人对此有解释吗?
x86 - 为什么要两条按位或 AVX 指令?
在 AVX 中有两条指令来执行按位或 VORPD 和 VORPS。文档说:
和
这两个处理器操作之间有什么实际区别吗?如果不是:为什么有两条指令?如果不是:使用它们进行整数按位或是否安全?
d - D 中的显式 simd 代码
现在是否可以在开箱即用的 D 中做到这一点?如果有帮助,我正在使用 LDC2 编译器。我对使用 AVX 内在函数很感兴趣。
intrinsics - AVX 中的分散函数
我在 Intel Intrinsic Guide v2.7 中找不到它们。你知道 AVX 或 AVX2 指令集是否支持它们吗?
c++ - 支持 SIMD 的代码?
什么代码可以使用 SIMD 指令集的严格定义是什么?是否可以并行运行计算?
所以如果我有:
这可以利用 SIMD,因为我们可以运行:
?
它必须是浮点类型,还是可以是双精度和整数?
c++ - 使用 C/C++ 在同一个可执行文件中进行不同的优化(plain、SSE、AVX)
我正在为我的 3D 计算开发优化,现在我有:
plain
使用标准 C 语言库的 " " 版本,SSE
使用预处理器编译的优化版本#define USE_SSE
,AVX
使用预处理器编译的优化版本#define USE_AVX
是否可以在 3 个版本之间切换而无需编译不同的可执行文件(例如,拥有不同的库文件并动态加载“正确”的文件,不知道inline
函数是否“正确”)?我还会考虑在软件中使用这种开关的性能。
x86 - 如何在 256 位 AVX(YMM) 寄存器中交换中间两个 64 位
有什么方法可以交换 256 位 AVX(YMM) 寄存器中的中间两个 64 位吗?
我知道我们可以利用 VPERM2F128 交换低 128 位和高 128 位,而 vshufps 似乎只能在高 128 位和低 128 位内工作。
所以我想知道是否有任何有效的说明来处理这种典型情况?
提前致谢!
macos - gcc 不想在 mac 上使用 AVX
所以我有这个全新的带有英特尔酷睿 I7 处理器的 mac book sysctl machdep.cpu.features
pro
machdep.cpu.features:FPU VME DE PSE TSC MSR PAE MCE CX8 APIC SEP MTRR PGE MCA CMOV PAT PSE36 CLFSH DS ACPI MMX FXSR SSE SSE2 SS HTT TM PBE SSE3 PCLMULQDQ DTES64 MON DSCPL VMX SMX EST TM2 SSSE3 CX16 TPR PDCM SSE4.1 SSE4.2 xAPIC POPCNT AES PCID XSAVE OSXSAVE TSCTMR AVX1.0 RDRAND F16C
然而,当我运行 gcc (4.7.2 macports) 时,它没有 #define __AVX__
。怎么了?(Mac OS X 10.8.2)
x86 - 如何像 SSE movlps/movhps 一样将 AVX/AVX2(YMM) 寄存器中的较低或较高值存储到内存中?
是否有任何现有指令可以将 256 位 AVX/AVX2(YMM) 寄存器中的较低或较高值存储到内存地址,就像 SSE 指令 movlps/movhps 一样?
或者还有其他方法可以实现吗?
任何帮助将不胜感激,谢谢!