【发布时间】:2010-12-28 15:11:35
【问题描述】:
这是我用来创建不同排序数组的代码:
const unsigned int height = 1536;
const unsigned int width = 2048;
uint32_t* buffer1 = (uint32_t*)malloc(width * height * BPP);
uint32_t* buffer2 = (uint32_t*)malloc(width * height * BPP);
int i = 0;
for (int x = 0; x < width; x++)
for (int y = 0; y < height; y++)
buffer1[x+y*width] = buffer2[i++];
谁能解释为什么使用以下作业:
buffer1[i++] = buffer2[x+y*width];
而不是我的代码中的那个需要两倍的时间?
【问题讨论】:
-
不同内存页之间跳转?与您在算法类中假设的不同,内存访问不是恒定时间操作,尽管您可能可以为给定架构设置上限。
-
几个问题:首先,您是在调试还是发布版本进行测试。第二,你是如何确定时机的?
-
代码段的汇编输出是什么?这听起来像是建筑废话,除非我遗漏了一些明显的东西。
-
尝试宽度和高度,例如 ... 100,看看是否有任何差异。
-
你用的是什么编译器?什么优化级别?你能把乘法从内部循环中取出来吗?
标签: c iphone optimization caching