gpt4 book ai didi

c++ - 从循环中移除数据依赖

转载 作者:太空宇宙 更新时间:2023-11-04 14:08:38 25 4
gpt4 key购买 nike

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

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

最佳答案

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

关于c++ - 从循环中移除数据依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15844632/

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