问题标签 [avx2]
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 - 如何清除__m256值的高128位?
如何清除 m2 的高 128 位:
不起作用——英特尔的_mm256_castsi128_si256
内在文档说“结果向量的高位是未定义的”。同时我可以很容易地在汇编中做到这一点:
当然,我不喜欢使用“和”或_mm256_insertf128_si256()
等。
c - 如何执行 _mm256_movemask_epi8 (VPMOVMSKB) 的逆运算?
内在:
创建一个掩码,其32
位对应于 的每个字节的最高有效位s1
。在使用位操作(BMI2
例如)操作掩码后,我想执行 的逆操作_mm256_movemask_epi8
,即创建一个__m256i
向量,其中每个字节的最高有效位包含uint32_t mask
.
做这个的最好方式是什么?
编辑:我需要执行相反的操作,因为内在函数_mm256_blendv_epi8
只接受__m256i
类型掩码而不是uint32_t
. 因此,在生成的__m256i
掩码中,我可以忽略每个字节的 MSB 以外的位。
intel - AVX2 中的收集指令是如何实现的?
假设我正在使用 AVX2 的 VGATHERDPS - 这应该使用 8 个 DWORD 索引加载 8 个单精度浮点数。
当要加载的数据存在于不同的缓存行中时会发生什么?指令是否被实现为一个硬件循环,逐个获取缓存行?或者,它可以一次向多个缓存行发出负载吗?
我读了几篇陈述前者的论文(这对我来说更有意义),但我想对此了解更多。
一篇论文的链接:http: //arxiv.org/pdf/1401.7494.pdf
assembly - 一条 x86 指令将读取或写入 L1 缓存的最大数据量是多少?
我刚刚阅读了AVX (Wikipedia),它让我想到了这个问题。
c++ - AVX2 的汇编错误
我试图用 gcc(g++) 编译一个 AVX2 程序。但它没有正常工作。
我的编译命令是(作为 Makefile 中的一行):
我也试过这个:
但错误信息是一样的:
汇编代码(添加行号):
我的 gcc(g++) 版本是 4.8.0。我的操作系统版本是 Centos6.5 X86_64。我已经确认我的 CPU 支持 AVX2 指令。那么谁能帮我找出错误呢?
assembly - 英特尔 AVX2 组装开发
我正在使用针对 64 位架构的英特尔程序集优化我的视频解码器。为了优化我使用 AVX2 指令集。
我的开发环境:-
操作系统:- Win 7(64 位)
IDE:- MSVS 2008(Prof)
CPU:- Core i5(最高支持 AVX)
汇编器:- YASM
我想知道是否有任何模拟器可以在不升级硬件的情况下运行和调试我的 AVX2 代码。
主要是希望在现有环境上运行和调试我的应用程序。有什么建议么?
c++ - AVX 计算问题:我可以运行 avx2 代码吗?
我一直在使用 Intel 的 SSE 指令并获得良好的性能提升,最近,我尝试使用 AVX 指令。
问题是:我可以编译我的 avx 指令,但我无法运行它们。指令是:
我可以编译这些指令的唯一方法是使用 -mavx2 标志。没有这个标志,我无法编译代码,我收到了这个错误:
好的,在使用 -mavx2 编译并运行代码后,我收到了以下错误消息:
"Illegal Instruction
”。
运行/proc/cpuinfo
,我看到我的 Sandy Bridge CPU 只支持 AVX 指令,不支持 AVX2。
问题是:我的代码或我的 gcc 标志有什么问题吗?
我可以运行我在 Sandybridge 中放置的 avx 指令吗?
谢谢你的帮助。
c++ - AVX2 在 Haswell 上比 SSE 慢
我有以下代码(正常、SSE 和 AVX):
所有这些功能都使用以下代码进行测试:
在哪里
和
是使用https://gist.github.com/donny-dont/1471329的 AlignedAllocator 的对齐向量
我有一个 intel-i7 haswell 4771,以及最新的 Ubuntu 14.04 64bit 和 gcc 4.8.2。一切都是最新的。我用 -march=native -mtune=native -O3 -m64 编译。
结果是:
这表明在 AVX2 上完全相同的代码比 SSE 慢 22%。我做错了什么还是这是正常行为?
c++ - 在非 Haswell 处理器上禁用 AVX2 功能
我已经编写了一些在 Haswell i7 处理器上运行的 AVX2 代码。相同的代码库也用于非 Haswell 处理器,其中相同的代码应替换为其 SSE 等效项。我想知道编译器是否有办法忽略非 Haswell 处理器上的 AVX2 指令。我需要类似的东西:
现在我在编译之前注释掉相关代码,但必须有一些更有效的方法来做到这一点。我正在使用 Ubuntu 和 gcc。谢谢你的帮助。
c++ - 如何将两个 SSE 寄存器加在一起
我有两个 SSE 寄存器(128 位是一个寄存器),我想把它们加起来。我知道如何在其中添加相应的字,例如,_mm_add_epi16
如果我在寄存器中使用 16 位字,我可以做到这一点,但我想要的是_mm_add_epi128
(不存在)之类的东西,它将寄存器用作一个大字。即使需要多条指令,有什么方法可以执行此操作?
我正在考虑使用_mm_add_epi64
,检测右字中的溢出,然后在需要时向寄存器中的左字加 1,但我也希望这种方法适用于 256 位寄存器(AVX2),而且这种方法似乎太复杂了。