我必须优化以下函数,使其运行得更快:注意(这是一个较低的三角形转置)
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];
}
}
}
}