我想优化一段区域增长代码,该代码目前在其算法中使用两个二维数组。一个 2D 数组保存 2D 纹理中每个像素的访问状态,一个 2D 数组保存每个像素的“应该被屏蔽”布尔值。
我运行了 Intel VTune Amplifier XE 来分析该方法的性能。下面是 512x512 图像最重要的统计数据:
- 在 array2D[x][y] 中查找需要 ~10-15ms
- 写入 array2D[x][y] 需要 ~1-2ms
- 每个数组的创建和初始化大约需要 8-10 毫秒
此外,我执行的读取次数与写入次数大致相同。以最基本的方式创建二维数组:
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;
}
}
我正在寻找性能更好的结构来保存这些信息。欢迎代码示例以及一般想法(包括猜测)。