1

我有以下 C++ 循环:

for (i = LEN_MAX - 1; i >= 0; i--) {
            int j = i - LEN_MAX + len;      
            if (j < 0)
                break;
            int ind = a.getElem(j);
            short t = ind;
            ind = --c[ind];
            b.setElem(ind, t);
}

我想做的是从中删除迭代之间的所有依赖关系。例如,在上面的循环中,该行ind = --c[ind]具有迭代间依赖关系,因为要减少,我需要具有上一次迭代的值。这是我正在寻找的转换示例:

从:

        for (i = 1; i < RADIX_MAX; i++) {
            if (i == radix)
                break;
            c[i] += c[i - 1];
            c[i] += temp;       
        }

到:

        short temp = c[0];
        for (i = 1; i < RADIX_MAX; i++) {
            if (i == radix)
                break;
            c[i] += temp;     //this loop no longer depends on last iteration 
            temp = c[i];
        }

我想将相同的技术应用于我发布的第一个循环,但我不确定如何。我想这样做的原因是因为它是优化我正在使用的工具的性能所必需的。有人有想法么?

4

1 回答 1

0

您提供的循环没有简单的转换来删除迭代间依赖项(并且您给出的第二个示例实际上并没有删除迭代间依赖项)。每次迭代都取决于上一次c迭代发生了什么,而当前的实现无法解决这个问题。如果您对算法和/或存储在其中的值和/或其中的值有所了解ca您可以重新编写代码以删除订单依赖性,鉴于您提供的一小段代码,我们无法做到这一点.

于 2013-04-05T22:50:59.193 回答