variables - 什么是减少变量?谁能给我一些例子?

标签 variables llvm reduction

什么是减少变量?
谁能给我一些例子?

最佳答案

这是一个类似 C 语言的计算数组总和的简单示例:

int x = 0;
for (int i = 0; i < n; i++) {
    x += a[i];
}
在这个例子中,
  • i是一个归纳变量 - 在每次迭代中它都会改变一些常数。可以是+1 (如上例所示)或 *2/3等等,但关键是在所有迭代中,数字都是相同的。
    换句话说,在每次迭代中 i_new = i_old op constant ,其中 op+ , *等,并且都不是 op也不是 constant迭代之间的变化。
  • x是一个归约变量——它从一次迭代到下一次累积数据。它总是有一些初始化(在本例中为 x = 0),虽然每次迭代中积累的数据可能不同,但操作符保持不变。
    换句话说,在每次迭代中 x_new = x_old op data , 和 op在所有迭代中保持不变(尽管 data 可能会改变)。

  • 多国语言 there's a special syntax for performing something like this - 通常称为“折叠”或“减少”或“累积”(还有其他名称)-但在 LLVM IR 的上下文中,归纳变量将由循环和它之前的初始化值。
    归约变量中的交换*操作(例如加法)对于优化编译器特别有趣,因为它们似乎显示出比实际情况更强的迭代之间的依赖性;例如,上面的示例可以重写为向量化形式——比如一次添加 4 个数字,然后是一个小循环,将最终向量相加为单个值。
    * 实际上,在应用这样的矢量化之前,reduce 变量必须满足更多条件,但这确实超出了此处的范围

    关于variables - 什么是减少变量?谁能给我一些例子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14955912/

    相关文章:

    java - 选择正确的枚举

    windows - 在 Windows 上使用 LLVM 作为编译器后端 - 需要外部工具吗?

    c - 想要通过遍历结构来减少函数

    llvm 用另一个函数替换一个函数

    lambda-calculus - 在 lambda 演算中按值调用

    python - 在宽大的 Pandas DataFrame 中将 3 个文本列折叠为 1 个

    java - 通过不同的方法更改和使用变量

    c - 有没有可以同时改变变量的CPU?

    bash - 如何将日期范围作为变量传递给 awk

    clang - Emscripten 和 Clang 在 WebAssembly 编译方面有什么区别