gpt4 book ai didi

c - C 中的嵌套循环展开

转载 作者:太空宇宙 更新时间:2023-11-04 01:51:49 28 4
gpt4 key购买 nike

我想通过展开循环来优化我的代码。我尝试申请展开,但我认为我做不到,而且我看不到我的问题。我想将展开循环应用于外循环。

这个循环做矩阵的转置。

这是我应用展开循环的循环:

void transpose(int dim, int *src, int *dst) {
for (i = 0; i < dim; i++)
for (j = 0; j < dim; j++)
dst[j * dim + i] = src[i * dim + j];
}

这是我的展开循环:

void transpose(int dim, int *src, int *dst) {
int i = 0, j = 0, dimi = 0, dimj = 0, tempi = 0;

for (i = 0; i < dim; i += 8) {
for (j = 0; j < dim; j++) {
dimj = j * dim + i;
dimi = i * dim + j;
dst[dimj] = src[dimi];

tempi = i + 1;
if (tempi < dim) {
dimj = j * dim + tempi;
dimi = tempi * dim + j;
dst[dimj] = src[dimi];

tempi += 1;
if (tempi < dim) {
dimj = j * dim + tempi;
dimi = tempi * dim + j;
dst[dimj] = src[dimi];

tempi += 1;
if (tempi < dim) {
dimj = j * dim + tempi;
dimi = tempi * dim + j;
dst[dimj] = src[dimi];

tempi += 1;
if (tempi < dim) {
dimj = j * dim + tempi;
dimi = tempi * dim + j;
dst[dimj] = src[dimi];

tempi += 1;
if (tempi < dim) {
dimj = j * dim + tempi;
dimi = tempi * dim + j;
dst[dimj] = src[dimi];

tempi += 1;
if (tempi < dim) {
dimj = j * dim + tempi;
dimi = tempi * dim + j;
dst[dimj] = src[dimi];

tempi += 1;
if (tempi < dim) {
dimj = j * dim + tempi;
dimi = tempi * dim + j;
dst[dimj] = src[dimi];
}
}
}
}
}
}
}
}
}
}

最佳答案

我不确定您当前代码中的错误是什么,但这是另一种方法。

void transpose(int dim, int *src, int *dst) {
int i, j;

for (i = 0; i <= dim-8; i += 8)
{
for (j = 0; j < dim; j++)
{
dst[j * dim + (i+0)] = src[(i+0) * dim + j];
dst[j * dim + (i+1)] = src[(i+1) * dim + j];
dst[j * dim + (i+2)] = src[(i+2) * dim + j];
dst[j * dim + (i+3)] = src[(i+3) * dim + j];
dst[j * dim + (i+4)] = src[(i+4) * dim + j];
dst[j * dim + (i+5)] = src[(i+5) * dim + j];
dst[j * dim + (i+6)] = src[(i+6) * dim + j];
dst[j * dim + (i+7)] = src[(i+7) * dim + j];
}
}

// Use the normal loop for any remaining elements
for (; i < dim; i++)
for (j = 0; j < dim; j++)
dst[j * dim + i] = src[i * dim + j];
}

注意:可以通过引入如下变量来减少乘法次数:

int jdim = j * dim + i;
dst[jdim + 0] = ...
dst[jdim + 1] = ...
...
dst[jdim + 7] = ...

RHS 也是如此。

关于c - C 中的嵌套循环展开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41815919/

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