我想优化一段区域增长的代码,它目前在算法中使用了两个二维数组。一个2D数组保留2D纹理中每个像素的访问状态,而一个2D数组保存每个像素的“应该被屏蔽”的布尔值。
我运行英特尔VTune放大器XE来描述该方法的性能。下面是512x512图像最重要的统计数据:
此外,我的阅读量和我写的差不多。创建2D数组的方式是最基本的:
bool** array2D = new bool*[desc.Width];
for(unsigned int i = 0; i < desc.Width; ++i)
array2D[i] = new bool[desc.Height];
for(unsigned int x = 0; x < desc.Width; x++){
for(unsigned int y = 0; y < desc.Height; y++){
array2D[x][y] = false;
}
}我在寻找更好的结构来保存这些信息。代码示例,以及只是一般的想法(包括。是欢迎的。
发布于 2013-03-19 12:43:42
您可以尝试以牺牲可读性为代价来优化性能,方法是从2D数组切换到一维数组。您可以使用array2D[x][y]代替array[x*Height+y]或array[x+y*Width] (行-主要或列-主要顺序),这取决于您的访问模式。这将使您避免单独的分配。
如果数组很大,也可以尝试将布尔值打包成更大的整型。这将使访问代码稍微慢一些,但占用的空间要小得多,可以更好地利用缓存性能来弥补访问速度较慢的问题。
发布于 2013-03-19 12:42:55
将2d数组封装在一维数组中:
type* array = new type[width * height];
array[x + y * width] = data_at_x_y;https://stackoverflow.com/questions/15499722
复制相似问题