问题标签 [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++ - 使用 __m256d 寄存器
你怎么用__m256d
?
假设我想在具有 3-64 位精度组件(、、和)_mm256_add_pd
的简单类上使用英特尔 AVX 指令。使用它的正确方法是什么?Vector3
double
x
y
z
由于x
和是该类的成员y
, _我可以用变量声明它们吗?z
Vector3
union
__m256d
那我可以去吗:
这行得通吗?还是我需要申报临时工,
编辑
我想出了这个例子,
我想现在的问题是,是否会 自动_mm256_add_pd
执行加载操作,或者如果我不将我的寄存器声明为接近使用它们的地方的本地人,会不会出现问题?(我怕酒店房间/书桌抽屉类型问题)__m256d
编辑2:
我尝试__m256
在我相当大的项目中添加一个寄存器,我得到了一大堆
错误 C2719:“值”:带有 __declspec(align('32')) 的形式参数将不会对齐
错误,它让我相信你不能在一个类中保留__m256
寄存器,而是应该将它们声明为本地人?
c++ - 击败编译器
我正在尝试使用英特尔内在函数来击败编译器优化代码。有时我能做到,有时我做不到。
我想问题是,为什么有时我可以击败编译器,但有时却不行?使用 Intel 内在函数时,我得到了 0.006 秒的时间operator+=
(相对于使用纯 C++ 时的 0.009 秒),但operator+
使用内在函数的时间为 0.07 秒,而纯 C++ 只有 0.03 秒。
编辑
我为什么要这样做?VS 2012 分析器告诉我我的向量算术运算可以使用一些调整。
c - 如何访问 256 位 ps 向量的组件
如何高效访问 256 位向量的元素?例如,我计算了点积
那么如何访问c中的值呢?我需要同时获得高位和低位,我是否正确理解我首先需要像这样提取 128 位部分:
然后才提取浮点数:
c++ - __m128、__m128d、__m256 等是 C++ 中的内置类型吗?
C++ 标准区分内置类型和struct
或class
类型。对于后者,如果语言提供了适当的运算符,则允许重载运算符,例如+
,*=
或&
,但对于内置类型则不允许。AFAIK,标准中没有提到 SSE/AVX 类型(但请纠正我),所以应该能够声明这些运算符。GCC 不允许这样做,但 ICC 允许。哪一个是正确的?
我真的很想拥有按位操作(如&=
),但令人讨厌的是,GCC 不提供它们(for __m128
),也不允许我声明它们。
c - 与 __m256 和两个 __m128 的数组联合
我能有这样的工会吗
即时访问 256 位寄存器的两个 128 位部分?
编辑:我想了解这种方法对性能的影响。
vectorization - _mm_broadcast_ss 是否比 _mm_set1_ps 快?
这是代码吗
总是比这段代码快
?
如果a
定义为static const float a = ...
而不是float a = ...
呢?
sse - 如何水平求和 __m256?
我想__m256
使用 AVX 指令对向量的分量进行水平求和。在 SSE 我可以使用
在向量的第一个分量处得到结果,但这不能与 256 位版本的函数 ( _mm256_hadd_ps
) 一起缩放。
计算__m256
向量水平和的最佳方法是什么?
xcode - 启用 AVX 时,Clang 会产生较慢的代码?
我将 Xcode 4.5.2 与“Apple LLVM Compiler 4.1”(Clang)一起使用。
我试图编译一个严重依赖于启用了 AVX 的 SSE 内在函数的代码(没有 _mm256* 函数和没有 __m256 变量)并且得到的代码比仅启用 SSE 4.2 时得到的代码要慢。
对此有什么合理的解释吗?
c - 使用单个 AVX 内在函数反转包含双精度的 AVX 寄存器
如果我有一个 AVX 寄存器,其中有 4 个双精度数,并且我想将其反转存储在另一个寄存器中,是否可以使用单个内部命令来执行此操作?
例如:如果我在 SSE 寄存器中有 4 个浮点数,我可以使用:
我可以这样做_mm256_permute2f128_pd()
吗?我认为您不能使用上述内在函数来解决每个单独的双重问题。