gpt4 book ai didi

缓存友好矩阵移位函数

转载 作者:行者123 更新时间:2023-12-03 16:52:32 25 4
gpt4 key购买 nike

我想将二维方阵的第一行移动到最后一行。所以如果我有一个像 A 这样的矩阵,我想得到 B。

visual of process

我可以使用两个简单的 for 循环来做到这一点。例如

void shift(int M, int N, int A[M][N]){
int i, j,temp;
for (i = 1; i < M; i++){
for (j = 0; j < N; j++){
temp=A[i][j];
A[i][j]=A[i-1][j];
A[i-1][j]=temp;
}
}
}

但我希望尽可能少的缓存未命中。关于如何做到这一点的任何提示?

最佳答案

/* M is the number of rows; N is the number of columns. */
void matrix_shift(int M, int N, int A[M][N]) {
size_t rowbytes = N * sizeof(int);
int temprow[N];
memcpy(temprow, A, rowbytes); // store first row
memmove(A, A + 1, (M-1) * rowbytes); // shift up
memcpy(A + (M-1), temprow, rowbytes); // replace last row
}

这使它变得简单并且依赖于应该在任何通用平台上高度优化的例程。复制了一个额外的行,但这在方阵的上述情况下效率不高。

关于缓存友好矩阵移位函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37008823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com