7得票2回答
检查是否在运行时支持SSE技术

我希望在运行时检查是否支持SSE4或AVX,这样我的程序可以利用处理器特定指令而不必为每个处理器创建一个二进制文件。 如果我能够在运行时确定它,我可以使用接口并在不同的指令集之间切换。

15得票3回答
如何在ARM Cortex-a8中使用乘加内置函数?

如何使用GCC提供的乘加内置函数?float32x4_t vmlaq_f32 (float32x4_t , float32x4_t , float32x4_t); 有谁能够解释我需要传递给这个函数的三个参数是什么?我的意思是源寄存器、目标寄存器和函数返回值是什么? 救命啊!!!

8得票4回答
SSE2指令集-比较无符号整数

我对在添加无符号8位整数时识别溢出值并将结果夹紧到0xFF感兴趣: __m128i m1 = _mm_loadu_si128(/* 16 8-bit unsigned integers */); __m128i m2 = _mm_loadu_si128(/* 16 8-bit unsigne...

52得票8回答
如何确定内存是否对齐?

我是新手,关于使用SSE/SSE2指令优化代码的方面我还没有太多掌握。据我所知,一个常见的SSE优化函数长这样:void sse_func(const float* const ptr, int len){ if( ptr is aligned ) { for(...

10得票1回答
如何同时使用omp parallel for和omp simd?

我想测试一个简单的矩阵加法程序,使用#pragma omp parallel for和#pragma omp simd。当我分别使用它们时,没有出现错误,看起来很好。但是,我想测试同时使用它们可以获得多少性能提升。如果我在外部循环之前使用#pragma omp parallel for,并在内...

9得票1回答
向量化余数循环迭代回退几步

我正在手动向量化循环并每次处理4个项目。总项目数可能不是4的倍数,因此在主循环结束时会有一些剩余项目。我考虑如果计数大于4且重新处理一些项目是安全的话,可以使用相同的主向量化循环来处理余数项。例如,如果我需要处理10个项目,我可以在三次迭代中处理0123、4567和6789。我找不到任何关于这...

15得票3回答
我能使用AVX FMA单元进行精确的52位整数乘法吗?

AXV2不支持64位以上的整数乘法。它提供了32 x 32 -> 32和32 x 32 -> 64的乘法1,但没有64位源的乘法。 假设我需要使用大于32位但小于或等于52位的无符号乘法-我能否简单地使用浮点数DP乘法或FMA指令,并且当整数输入和结果可以用52位或更少的位(即在[0,2^5...

17得票3回答
如何在gdb中转储所有的XMM寄存器?

我可以使用以下命令在gdb中转储所有整数寄存器:info registers 对于xmm寄存器(英特尔),我需要一个类似于以下的文件:print $xmm0 print $xmm1 ... print $xmm15 然后引用那个文件。有没有更简单的方法?

17得票1回答
如何使用SIMD比较两个向量并得到单个布尔结果?

我有两个包含4个整数的向量,希望使用SIMD指令来比较它们(例如生成一个结果向量,其中每个条目根据比较结果为0或1)。 然后,我想将结果向量与一个包含4个零的向量进行比较,只有在它们相等时才执行某些操作。 您知道可以使用哪些SIMD指令来完成这项任务吗?

7得票1回答
没有AVX(2),最快的进行SIMD gather的方式是什么?

假设我拥有 SSE 到 SSE4.1,但没有 AVX(2),那么加载这样一个打包的内存布局的最快方法是什么(所有的 32 位整数): a0 b0 c0 d0 a1 b1 c1 d1 a2 b2 c2 d2 a3 b3 c3 d3 将四个向量分别命名为a,b,c,d? a: {a0, a...