現在、アルゴリズムで 2 つの 2D 配列を使用している領域拡張コードを最適化したいと考えています。1 つの 2D 配列は 2D テクスチャの各ピクセルの訪問済み状態を保持し、1 つの 2D 配列は各ピクセルの「マスクする必要がある」ブール値を保持します。
インテル® VTune™ Amplifier XE を実行して、メソッドのパフォーマンスをプロファイリングしました。512x512 画像の最も重要な統計の下:
- array2D[x][y] のルックアップには ~10 ~ 15 ミリ秒かかります
- array2D[x][y] の書き込みには 1 ~ 2 ミリ秒かかります
- 作成と初期化には、アレイごとに約 8 ~ 10 ミリ秒かかります
さらに、書き込みとほぼ同じ数の読み取りを実行しています。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;
}
}
この情報を保持するためのよりパフォーマンスの高い構造を探しています。コード例だけでなく、一般的なアイデア (guestimates を含む) も歓迎します。