sse

    6热度

    1回答

    我在执行未对齐的加载或存储在页面边界旁边(例如使用_mm_loadu_si128/_mm_storeu_si128内部函数)之前,应先检查整个向量(本例中为16字节)属于同一页面,如果不是,则切换到非矢量指令。我明白,如果下一页不属于进程,则需要这样做来防止coredump。 但是,如果两页都属于进程(例如它们是一个缓冲区的一部分,并且我知道该缓冲区的大小)呢?我写了一个小的测试程序,它执行跨越页

    2热度

    1回答

    我有一个8位无符号8位数的向量,范围为0 .. 12,位于xmm0。我想向量中的每个元素e上执行以下转换: if (e != 12) e = 11 - e; 即,数字0,1,...,11被改变为11,10,...,0而12保持不变。其他值不会发生,我不在乎他们会发生什么。 如何使用SSE4指令集有效地实现此操作?

    2热度

    1回答

    有没有更好的方法使用SSE将unsigned char数组加载到short?像 unsigned char foo1[16]; __m128i foo2 = _mm_loadu_si128((__m128i*)foo1); 我想foo2存储在short int数据类型的元素。

    2热度

    1回答

    我有两个SSE寄存器,我想用另一个的低半部分替换一个高半部分。像往常一样,最快的方法。 我估计是由8个字节移位寄存器中的一个,然后alignr来连接是可行的。 有没有单一指令的解决方案?在单个寄存器LO:

    0热度

    1回答

    我正在使用SIMD指令(SSE和AVX)进行多项操作。据我所知,SSE指令最适合16字节对齐的内存,而AVX指令最适合32字节对齐的内存。 为了与SSE和AVX最佳使用,始终分配对齐到32字节边界的内存是否安全? 是否有任何32字节对齐的内存不是16字节对齐的情况?

    2热度

    1回答

    我是SSE编程新手,所以我希望有人能帮助我。我最近使用GCC SSE内在函数实现了一个函数来计算32位整数数组的总和。下面给出了我的实现代码。 int ssum(const int *d, unsigned int len) { static const unsigned int BLOCKSIZE=4; unsigned int i,remainder; int

    0热度

    1回答

    使用英特尔SSE内在这样考虑一个代码段: void foo(double* in1ptr, double* in2ptr) { double result[8]; /* .. stuff .. */ __m128d in1 = _mm_loadu_pd(in1ptr); __m128d in2 = _mm_loadu_pd(in2ptr);

    2热度

    1回答

    我对使用SSE的图像中的像素执行按位非操作。 我有一些问题: 可以这样使用OpenMP进一步优化? 算法中是否有瓶颈可以优化? 这里是我的代码: unsigned int iSSE2Size = (SrcImage1.GetHeight() * (SrcImage1.GetStepBytes() >> 1)) >> 3; __m128i *m_ucSrcPtr = (__m128i *)SrcI

    6热度

    1回答

    我在内存中包含索引I0,I1,I2,I3的整数对齐数组。我的目标是让它们进入包含I0,I0 + 1,I1,I1 + 1,I2,I2 + 1,I3,I3 + 1的__m256i寄存器。最难的部分是将它们放入256位寄存器I0,I0 ,I1,I1,I2,I2,I3,I3,之后我可以添加一个包含0,1,0,1,0,1,0,1的寄存器。 我发现了固有的_mm256_castsi128_si256,它我可以

    0热度

    1回答

    我正在移植一些代码,这会大量使用SSE4内在函数。它有一个非SSE实现,但是我希望只有SSE2的CPU仍然能够使用更快的功能。 可能有人建议为_mm_insert_epi32的有效替代 - 我想,我得到了一切覆盖已经......其实,第二和函数的第三个参数是在我的情况下,零: foo = _mm_insert_epi32(vec, 0, 0);