从循环中删除数据依赖性

时间:2013-04-05 22:25:15

标签: c++ loops

我有以下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];
        }

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

1 个答案:

答案 0 :(得分:0)

您提供的循环没有简单的转换来消除迭代间依赖关系(并且您提供的第二个示例实际上并未删除迭代间依赖关系)。每次迭代都取决于前一次迭代c发生的事情,并且没有办法解决那个与当前的实现。如果您对c中存储的算法和/或值以及/或a中的值有所了解,您可以重新编写代码以删除订单依赖项,我们就是不能给出您提供的短代码段。

相关问题