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

optimization - 有效地将 YMM 寄存器的低 64 位设置为常数

如何在最少的时钟周期内将 YMM 寄存器的最低 64 位设置为某个常数?我知道可以使用 SSE 指令以及 AVX 指令执行此操作的各种方法VBROADCASTSD,但我不确定哪种方法会产生最佳结果。

编辑:设置 64 位部分后,我仍然需要使用完整的 YMM 寄存器。

谢谢你的帮助!

0 投票
3 回答
26330 浏览

x86 - 使用 AVX 指令进行水平向量求和的最快方法

我有四个 64 位浮点值的压缩向量。
我想得到向量元素的总和。

使用 SSE(并使用 32 位浮点数)我可以执行以下操作:

不幸的是,尽管 AVX 具有 _mm256_hadd_pd 指令,但它的结果与 SSE 版本不同。我相信这是因为大多数 AVX 指令分别作为每个低 128 位和高 128 位的 SSE 指令工作,而从未跨越 128 位边界。

理想情况下,我正在寻找的解决方案应遵循以下准则:
1)仅使用 AVX/AVX2 指令。(无 SSE)
2)在不超过 2-3 条指令中完成。

但是,任何有效/优雅的方法(即使不遵循上述准则)总是被广泛接受。

非常感谢您的帮助。

——路易吉·卡斯特利

0 投票
3 回答
9062 浏览

x86 - 如何在 256 位 AVX 向量中找到水平最大值

我有一个包含四个 64 位浮点值的 __m256d 向量。
我需要找到向量元素的水平最大值并将结果存储在双精度标量值中;

我的尝试最终都使用了大量的向量元素洗牌,使得代码不是很优雅也不是很高效。另外,我发现不可能只停留在 AVX 域中。在某些时候,我不得不使用 SSE 128 位指令来提取最终的 64 位值。但是,我想在最后一个陈述中被证明是错误的。

所以理想的解决方案是:
1)只使用 AVX 指令。
2)尽量减少指令数量。(我希望不超过 3-4 条指令)

话虽如此,任何优雅/高效的解决方案都将被接受,即使它不遵守上述准则。

谢谢你的帮助。

-路易吉

0 投票
5 回答
8908 浏览

gcc - 如何在 Mac OS X 上使用 AVX/pclmulqdq

我正在尝试编译一个使用新英特尔处理器中存在的 pclmulqdq 指令的程序。我已经使用 macports 安装了 GCC 4.6,但是当我编译我的程序(它使用内在的 _mm_clmulepi64_si128)时,我得到了

似乎 GCC 能够从内部生成正确的汇编代码,但汇编器无法识别该指令。

我已经使用 macports 安装了 binutils,但问题仍然存在。我怎么知道 gcc 正在使用哪个汇编程序?XCode 汇编器可能不支持它,但 binutils 汇编器应该。

0 投票
1 回答
2665 浏览

c++ - 为什么分配给 AVX-Vector-wrapper-class-object-array 的元素会引发访问冲突错误?

我正在尝试做一些向量的东西,并为 immintrin.h 中的 m256d 数据类型编写了一个包装器,以使用重载运算符。下面的例子应该给你一个基本的想法。

类定义

vwrap 对象数组

让我们想象一个动态分配的 vwrap 数组:

访问冲突错误

使用包含 mm256-set-function... 的 vwrap 对象的函数会引发访问冲突错误。

使用 mm256-set-function 分配 d 也会发生同样的事情(分配另一个 m256d-object 也不起作用):

从另一个对象复制数据也不起作用。

有效的东西

可以毫无问题地操作 m256d 对象:

在普通类实例的情况下,分配工作:

我不明白这个问题。在类数组的情况下,为什么我不能使用 _mm256 函数(或分配 m256d 对象)?我唯一的想法是避免使用 mm256 函数并直接操作双精度值。但这不是我故意想要做的。

0 投票
1 回答
1167 浏览

delphi - 如何探测英特尔® 高级矢量扩展的可用性?

如何使用 Delphi 2007 检查一个盒子是否支持 AVX。

我的问题仅限于查询 CPU 中的支持(假设操作系统正常/带有 SP1 的 Windows 7)。

由 Chris Lomont撰写的题为Intel® Advanced Vector Extensions 简介的 PDF 文档 解释了如何做到这一点,并提供了一个示例代码实现,但使用 c++。

它也可以在这个页面上找到

0 投票
3 回答
1771 浏览

sse - 我在哪里可以找到 AMD FMA 4 内在函数的参考资料?

我正在尝试修改一段使用 SSE(128 位)调用的代码,以使用 Bulldozer Opteron 上的 256 位 FMA 功能。我似乎无法找到这些调用的内在函数。

这个论坛上的一些问题使用了这些内在函数(例如: 如何在 256 位 AVX 向量中找到水平最大值

我发现了这个:http: //msdn.microsoft.com/en-us/library/gg445140.aspx
http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011/ compiler_c/index.htm#intref_cls/common/intref_avx_fmadd_ps.htm

但我似乎无法在 AMD 开发人员文档中找到任何内容。

0 投票
3 回答
15567 浏览

c++ - Intel AVX:用于双精度浮点变量的 256 位点积版本

英特尔高级矢量扩展 (AVX)在 256 位版本(YMM 寄存器)中不为双精度浮点变量提供点积。“为什么?” 这个问题已经在另一个论坛(这里)和 Stack Overflow(这里)上得到了非常简短的处理。但我面临的问题是如何以有效的方式用其他 AVX 指令替换这个缺失的指令?

单精度浮点变量存在 256 位版本中的点积(参考此处):

这个想法是为这个缺失的指令找到一个有效的等价物:

更具体地说,我想从__m128(四个浮点数)转换为__m256d(4个双精度数)的代码使用以下指令:

此代码的结果是一个包含四个浮点数的向量,其中包含和、和、和、和_m128之间的点积结果。val1val0val2val0val3val0val4val0

也许这可以为建议提供提示?

0 投票
2 回答
2556 浏览

c++ - 如何将单个 32 位浮点加载到 AVX ymm 寄存器中的所有八个位置?

如何将单个 32 位浮点数加载/转换为 AVX 256 ymm 寄存器,以便所有 8 个浮点数都来自单源浮点数?

以前我使用 AVX 128 xmm 寄存器将单个浮点数加载到 4 个压缩浮点数中。

0 投票
1 回答
1503 浏览

assembly - avx sqrt的三个操作数?

为什么 avx sqrt(非压缩)指令有三个操作数?

这是否意味着类似的东西xmm1=xmm2=sqrt(xmm3)

编辑:下面的详细答案,但简而言之,装配线意味着: