5 c memory arrays sse alignment
目前我正在处理一个视频处理软件,其中图像数据(8位有符号和无符号)存储在16对齐的整数数组中,分配为
__declspec(align(16)) int *pData = (__declspec(align(16)) int *)_mm_malloc(width*height*sizeof(int),16);
Run Code Online (Sandbox Code Playgroud)
一般情况下,如果使用像这样的有符号/无符号字符数组,它是否会实现更快的读写?
__declspec(align(16)) int *pData = (__declspec(align(16)) unsigned char *)_mm_malloc(width*height*sizeof(unsigned char),16);
Run Code Online (Sandbox Code Playgroud)
我对缓存行大小和数据传输优化知之甚少,但至少我知道这是一个问题.除此之外,SSE将在未来使用,在这种情况下,char数组 - 与int数组不同 - 已经是打包格式.那么哪个版本会更快?
如果您计划使用SSE,那么以原始大小(8位)存储数据几乎肯定是更好的选择,因为可以在不解包的情况下完成大量操作,即使您需要为pmaddwd或其他类似方法解压缩说明,它仍然更快,因为你必须加载更少的数据.
即使在标量代码中,加载8位或16位值也不比加载32位慢,因为movzx/movsx的速度与mov没有区别.所以你只需要节省内存,这肯定不会伤害.
aki*_*iva -1
相反,打包和拆包是 CPU 命令的昂贵消耗。
如果你想进行大量随机像素操作 - 将其设为 int 数组会更快,这样每个像素都有自己的地址。
但是如果您顺序遍历图像,您需要创建一个字符数组,使其尺寸较小并减少出现页面错误的机会(特别是对于大图像)
| 归档时间: |
|
| 查看次数: |
1440 次 |
| 最近记录: |