1

我尝试使用 SSE 进行 4 像素操作。我在将图像数据加载到 __m128 时遇到问题。我的图像数据是一个字符缓冲区。假设我的图像是 1024 x1024。我的过滤器是 16x16。

__m128 IMG_VALUES, FIL_VALUES, NEW_VALUES;
//ok:
IMG_VALUES=_mm_load_ps(&pInput[0]);
//hang below:
IMG_VALUES=_mm_load_ps(&pInput[1]);

我不知道如何处理索引 1,2,3 ...谢谢。

4

1 回答 1

2

如果您真的需要使用浮点而不是整数/定点来执行此操作,那么您将需要加载 8 位数据,解压缩为 32 位(需要两个操作:8 位到 16 位,然后是 16 位到 32 位),然后转换为浮动。但是,这非常低效,您应该考虑使用例如 16 位定点操作来执行此操作。

请注意,对于每个 16 像素的负载,您将需要处理 4 个 4 x 浮点数的块,即您的 16 x 8 位像素的向量将变为 4 x 4 x 浮点数的向量。

所需内在函数的摘要:

_mm_load_si128(...)       // load 16 x 8 bit values

_mm_unpacklo_epi8(...)    // unpack 8 bit -> 16 bit
_mm_unpackhi_epi8(...)

_mm_unpacklo_epi16(...)   // unpack 16 bit -> 32 bit
_mm_unpackhi_epi16(...)

_mm_cvtepi32_ps(...)      // convert 32 bit int -> float
于 2013-10-21T10:29:27.550 回答