gpt4 book ai didi

C++ SSE 过滤器实现

转载 作者:行者123 更新时间:2023-11-28 07:20:48 29 4
gpt4 key购买 nike

我尝试使用 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...谢谢。

最佳答案

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

请注意,对于每 16 个像素的加载,您将需要处理 4 个 4 x float block ,即您的 16 x 8 位像素 vector 将变成 4 x 个 4 x float vector 。

所需内在函数的总结:

_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

关于C++ SSE 过滤器实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19491626/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com