首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符和整数数组速度的差异?

字符和整数数组速度的差异?
EN

Stack Overflow用户
提问于 2008-09-26 08:08:34
回答 4查看 1.6K关注 0票数 5

目前,我正在处理一个视频处理软件,其中图片数据(8位签名和无符号)存储在由16对齐整数组成的数组中,这些整数分配为

代码语言:javascript
复制
__declspec(align(16)) int *pData = (__declspec(align(16)) int *)_mm_malloc(width*height*sizeof(int),16);

通常,如果使用像这样的有符号/无符号字符数组,难道就不能加快读写速度吗?

代码语言:javascript
复制
__declspec(align(16)) int *pData = (__declspec(align(16)) unsigned char *)_mm_malloc(width*height*sizeof(unsigned char),16);

我对缓存行大小和数据传输优化知之甚少,但至少我知道这是一个问题。除此之外,SSE将在未来使用,在这种情况下,char数组--与int数组不同--已经是打包格式的。那么哪个版本会更快呢?

EN

回答 4

Stack Overflow用户

发布于 2008-09-26 08:31:19

如果您计划使用SSE,那么将数据存储在其本机大小(8位)几乎肯定是一个更好的选择,因为无需解包就可以完成大量的操作,而且即使您需要为pmaddwd或其他类似的指令解压缩,它仍然更快,因为您必须加载更少的数据。

即使在标量代码中,加载8位或16位值也不会比加载32位慢,因为movzx/movsx在速度上与mov没有什么不同。所以你只需要保存记忆,这肯定不会伤害到你。

票数 5
EN

Stack Overflow用户

发布于 2008-09-26 08:53:28

它确实取决于您的目标CPU --您应该阅读它的规范并运行一些基准测试,就像每个人已经建议的那样。影响绩效的因素很多。我想到的第一个显而易见的问题是,您的ints数组比一个字符数组大2到4倍,因此,如果数组足够大,您将得到较少的数据缓存命中,这肯定会降低性能。

票数 1
EN

Stack Overflow用户

发布于 2008-09-26 08:28:42

相反,打包和解压缩是昂贵的CPU命令。

如果您想要进行大量的随机像素操作,那么让它成为一个int数组以使每个像素都有自己的地址会更快。

但是,如果您按顺序遍历您的图像,您希望生成一个chars数组,这样它的大小就很小,并且减少了发生页面错误的可能性(特别是对于大型图像)。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/138245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档