c++ - 如何将 _m128 SSE 寄存器数据存储在 "unsigned char"数组上?

标签 c++ stored-procedures sse

我是 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/

相关文章:

c++ - 尝试初始化 __m128 类成员变量时出现 EXC_BAD_ACCESS 信号

c++ - 如何访问兼容的 std::variant 变体?

c++ - 如何强制清除 STL 内存缓存?

java - 枚举外部驱动器

mysql - 事务或变量声明错误

MySQL - 游标在存储过程中不起作用

c++ - 有符号零的最小值和最大值

c++ - C 代码编译为 C++,但不是 C

c# - 如何从 Crystal 报表中调用存储过程?

x86 - load1 和广播内在函数之间的区别