我正在寻找一种最佳方法来计算 a __m256i
or中所有打包的 32 位整数的总和__m512i
。为了计算n 个元素的总和,我经常使用log2(n) vpaddd
和vpermd
函数,然后提取最终结果。但是,这不是我认为的最佳选择。
编辑:在速度/周期减少方面最佳/最佳。
我想使用该<complex.h>
库来加速某些计算,其中可能包括多达20个复杂元素和运算(+-* /)。但是,我的同事声明了一个结构:
struct complex {
double a;
double b;
};
Run Code Online (Sandbox Code Playgroud)
因此,complex
由于与上述结构冲突,无法使用来自库的宏。
事实是,由于对当前项目的巨大影响,我无法更改结构的名称。我尝试使用_Complex
宏来代替,并取出#include <complex.h>
头,它的工作,但_Imaginary_I
,_Complex_I
还是I
不起作用。
#include <stdio.h> /* Standard Library of Input and Output */
// #include <complex.h> /* I want to remove this */
int main() {
struct complex
{
double a;
double b;
};
double _Complex z1 = 1.0;// + 3.0 * _Complex_I;
double _Complex z2 = 1.0;// - 4.0 * _Complex_I;
// none of these …
Run Code Online (Sandbox Code Playgroud) 我正在寻找将压缩的 64 位整数饱和为 8 位整数的解决方案。看着_mm256_cvtepi64_epi8
但不是饱和,它截断了导致不需要的输出。
我的程序如下:
int main()
{
__m256i a, b, c;
__m128i d;
a = _mm256_set1_epi64x(127);
b = _mm256_set1_epi64x(1);
c = _mm256_add_epi64x(a, b);
d = _mm256_cvtepi64_epi8(c);
}
Run Code Online (Sandbox Code Playgroud)
我希望输出 (d) 包含四个127
(饱和),但是程序产生四个-128
元素(从 截断128
)。