Performance 当循环展开时,最后的迭代称为什么?

Performance 当循环展开时,最后的迭代称为什么?,performance,terminology,loop-unrolling,Performance,Terminology,Loop Unrolling,如果循环以N展开,复制主体N次,并将行程计数减少N倍,则在循环后可能需要0到N-1次“最终迭代”——如果原始行程计数不是N的倍数,则会出现非零情况 这些最终的迭代称为什么 例如,以下循环: int sum = 0; for (int i = 0; i < max; i++) { sum += i; } 1事实上,编译器在简化原始循环方面可能会做得更好,通常会完全删除它,并通过基于求和公式的乘法直接计算最终结果。毕竟,这只是一个例子。我将其称为“循环后处理任何剩余迭代的部分” 当循

如果循环以N展开,复制主体N次,并将行程计数减少N倍,则在循环后可能需要0到N-1次“最终迭代”——如果原始行程计数不是N的倍数,则会出现非零情况

这些最终的迭代称为什么


例如,以下循环:

int sum = 0;
for (int i = 0; i < max; i++) {
  sum += i;
}

1事实上,编译器在简化原始循环方面可能会做得更好,通常会完全删除它,并通过基于求和公式的乘法直接计算最终结果。毕竟,这只是一个例子。

我将其称为“循环后处理任何剩余迭代的部分”

当循环展开时,最后的迭代称为什么

问题是,该问题假设它有一个“标准”/“众所周知的名称”;但这将是愚蠢的(如果你给每一个小而普通的代码片段起一个名字,那么你会有太多的名字,以至于没有人会记住它们,这将破坏命名的任何目的)

当然(对于文档),这并不排除使用临时名称或临时短语来提高简洁性;由术语表定义、内联定义(见注释)或由上下文定义


注意:我通常以内联方式定义内容。例如,如果我反复提到“结束部分”(循环后处理任何剩余迭代的部分),那么我可能会解释一次,然后在以后每次出现时只说“结束部分”,并依靠读者记住我所说的“结束部分”的意思。

那么“剩余迭代如何?它很符合“余数”的定义,尽管我不知道它是否是一个公认的术语。

只有几点建议:

  • 作为一名数学家,我会称之为余数()

  • 这篇关于循环展开的文章称之为最终交互

  • 由于对齐可以通过循环剥离()实现,因此可以将其称为未对齐部分或展开循环的未对齐部分,或者以某种方式使用“剥离”一词


观点:它们仍然被称为“迭代”。你做10件事10次,而不是做100次。所以你仍然在迭代。@LasseVågsætherKarlsen-是的,我不想回避迭代这个词,但有一些简洁的方式来描述这些迭代,比如最终迭代(但不是它),或者“尾部”迭代,或者其他什么,但确切的术语是逃避我,我正在寻求社区的指导。尾声或尾声,但我通常称之为尾巴。
int sum = 0;
for (int i = 0; i + 3 < max; i += 4) {
  sum += i;
  sum += i + 1;
  sum += i + 2;
  sum += i + 3;
}

// "final iterations" handling here
// handle the final 0 to 3 iterations
for (; i < max; i++) {
  sum += i;
}