我是 SSE 新手,到目前为止,你已经设法从 unsigned char 数组加载,但我不知道如何存储结果。请帮助我。
void calculate_borders_parallel( unsigned char *src, unsigned char *dst, int width, int height )
{
// TO DO
__m128i sourceUp;
__m128i sourceDown;
__m128i destiny;
#pragma omp parallel for
for (int j = 1; j<height; j++)
{
for (int i = 0; i<width; i+=4)
{
sourceUp = _mm_loadu_si128( (const __m128i*)&src[(j-1)*width+i] );
sourceDown = _mm_loadu_si128( (const __m128i*)&src[(j+1)*width+i] );
destiny = _mm_subs_epu8(sourceDown, sourceUp);
_mm_store_si128( &dst[(j+0)*width+i], destiny ); // <----- ERROR HERE .. cannot convert from __m128i to unsigned char
}
}
最佳答案
你必须这样做:
*(__m128i *)&dst[idx]
取消引用已转换为 vector 数组的地址。
关于c++ - 如何将 _m128 SSE 寄存器数据存储在 "unsigned char"数组上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19979907/