问题标签 [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.

0 投票
3 回答
1094 浏览

c - 如何清除__m256值的高128位?

如何清除 m2 的高 128 位:

不起作用——英特尔的_mm256_castsi128_si256内在文档说“结果向量的高位是未定义的”。同时我可以很容易地在汇编中做到这一点:

当然,我不喜欢使用“和”或_mm256_insertf128_si256()等。

0 投票
5 回答
6807 浏览

c - 如何执行 _mm256_movemask_epi8 (VPMOVMSKB) 的逆运算?

内在:

创建一个掩码,其32位对应于 的每个字节的最高有效位s1。在使用位操作(BMI2例如)操作掩码后,我想执行 的逆操作_mm256_movemask_epi8,即创建一个__m256i向量,其中每个字节的最高有效位包含uint32_t mask.

做这个的最好方式是什么?

编辑:我需要执行相反的操作,因为内在函数_mm256_blendv_epi8只接受__m256i类型掩码而不是uint32_t. 因此,在生成的__m256i掩码中,我可以忽略每个字节的 MSB 以外的位。

0 投票
2 回答
7400 浏览

intel - AVX2 中的收集指令是如何实现的?

假设我正在使用 AVX2 的 VGATHERDPS - 这应该使用 8 个 DWORD 索引加载 8 个单精度浮点数。

当要加载的数据存在于不同的缓存行中时会发生什么?指令是否被实现为一个硬件循环,逐个获取缓存行?或者,它可以一次向多个缓存行发出负载吗?

我读了几篇陈述前者的论文(这对我来说更有意义),但我想对此了解更多。

一篇论文的链接:http: //arxiv.org/pdf/1401.7494.pdf

0 投票
2 回答
358 浏览

assembly - 一条 x86 指令将读取或写入 L1 缓存的最大数据量是多少?

我刚刚阅读了AVX (Wikipedia),它让我想到了这个问题。

0 投票
1 回答
1618 浏览

c++ - AVX2 的汇编错误

我试图用 gcc(g++) 编译一个 AVX2 程序。但它没有正常工作。

我的编译命令是(作为 Makefile 中的一行):

我也试过这个:

但错误信息是一样的:

汇编代码(添加行号):

我的 gcc(g++) 版本是 4.8.0。我的操作系统版本是 Centos6.5 X86_64。我已经确认我的 CPU 支持 AVX2 指令。那么谁能帮我找出错误呢?

0 投票
1 回答
727 浏览

assembly - 英特尔 AVX2 组装开发

我正在使用针对 64 位架构的英特尔程序集优化我的视频解码器。为了优化我使用 AVX2 指令集。

我的开发环境:-
操作系统:- Win 7(64 位)
IDE:- MSVS 2008(Prof)
CPU:- Core i5(最高支持 AVX)
汇编器:- YASM

我想知道是否有任何模拟器可以在不升级硬件的情况下运行和调试我的 AVX2 代码。
主要是希望在现有环境上运行和调试我的应用程序。有什么建议么?

0 投票
1 回答
1928 浏览

c++ - AVX 计算问题:我可以运行 avx2 代码吗?

我一直在使用 Intel 的 SSE 指令并获得良好的性能提升,最近,我尝试使用 AVX 指令。

问题是:我可以编译我的 avx 指令,但我无法运行它们。指令是:

我可以编译这些指令的唯一方法是使用 -mavx2 标志。没有这个标志,我无法编译代码,我收到了这个错误:

好的,在使用 -mavx2 编译并运行代码后,我收到了以下错误消息:

"Illegal Instruction”。

运行/proc/cpuinfo,我看到我的 Sandy Bridge CPU 只支持 AVX 指令,不支持 AVX2。

问题是:我的代码或我的 gcc 标志有什么问题吗?

我可以运行我在 Sandybridge 中放置的 avx 指令吗?

谢谢你的帮助。

0 投票
3 回答
6194 浏览

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%。我做错了什么还是这是正常行为?

0 投票
2 回答
4240 浏览

c++ - 在非 Haswell 处理器上禁用 AVX2 功能

我已经编写了一些在 Haswell i7 处理器上运行的 AVX2 代码。相同的代码库也用于非 Haswell 处理器,其中相同的代码应替换为其 SSE 等效项。我想知道编译器是否有办法忽略非 Haswell 处理器上的 AVX2 指令。我需要类似的东西:

现在我在编译之前注释掉相关代码,但必须有一些更有效的方法来做到这一点。我正在使用 Ubuntu 和 gcc。谢谢你的帮助。

0 投票
1 回答
3413 浏览

c++ - 如何将两个 SSE 寄存器加在一起

我有两个 SSE 寄存器(128 位是一个寄存器),我想把它们加起来。我知道如何在其中添加相应的字,例如,_mm_add_epi16如果我在寄存器中使用 16 位字,我可以做到这一点,但我想要的是_mm_add_epi128(不存在)之类的东西,它将寄存器用作一个大字。即使需要多条指令,有什么方法可以执行此操作?
我正在考虑使用_mm_add_epi64,检测右字中的溢出,然后在需要时向寄存器中的左字加 1,但我也希望这种方法适用于 256 位寄存器(AVX2),而且这种方法似乎太复杂了。