次の関数を最適化して、より高速に実行する必要があります: 注(これは下三角転置です)
void trans(int ** source, int** destination)
{
for (int i = 0 ; i < sizee ; i ++)
{
for (int j = i +1 ; j < sizee ; j ++)
{
destination[i][j]= source[j][i];
}
}
}
列によってアクセスされているため、ソースへのアクセスに空間的局所性がないことは理解していますが、これをどのように実装するかわかりません。どんな助けでも大歓迎です。ありがとう。
編集:タイリングを試みましたが、ランタイムは改善されましたが、最適化された転置は間違った結果を生成しています:
#define b 2
for (int ii = 0 ; ii < sizee ; ii += b) {
for (int jj = ii +1 ; jj < sizee ; jj +=b) {
for(int i = ii; i < std::min(ii+b-1, sizee); i++)
{
for(int j = jj; j < std::min(jj+b-1, sizee); j++)
{
destination[i][j]= source[j][i];
}
}
}
}