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

Posted

技术标签:

【中文标题】什么是减少变量?谁能给我一些例子?【英文标题】:What is reduction variable? Could anyone give me some examples? 【发布时间】:2013-02-04 00:59:19 【问题描述】:

什么是归约变量? 谁能给我一些例子?

【问题讨论】:

【参考方案1】:

这是一个用类 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+* 等,并且opconstant 在迭代之间都不会改变。

x 是一个归约变量 - 它从一次迭代到下一次迭代累积数据。它总是有一些初始化(在这种情况下为x = 0),虽然每次迭代累积的数据可能不同,但操作符保持不变。

换句话说,在每次迭代中x_new = x_old op dataop 在所有迭代中都保持不变(尽管data 可能会改变)。

在许多语言中 there's a special syntax for performing something like this - 通常称为“折叠”或“减少”或“累积”(它还有其他名称) - 但在 LLVM IR 的上下文中,归纳变量将由 phi 节点表示在循环内部的二元运算和它之前的初始化值之间的循环中。

归约变量(例如加法)中的交换*操作对于优化编译器来说特别有趣,因为它们似乎在迭代之间显示出比实际情况更强的依赖性;例如,可以将上面的示例重写为矢量化形式 - 例如,一次添加 4 个数字,然后执行一个小循环以将最终矢量求和为单个值。

* 实际上,在应用这样的矢量化之前,归约变量必须满足更多条件,但这确实超出了这里的范围

【讨论】:

谢谢你的帮助,奥克~

以上是关于什么是减少变量?谁能给我一些例子?的主要内容,如果未能解决你的问题,请参考以下文章

谁能给我一个在 WIX 中修改 windows 环境系统变量的例子吗?

谁能给我一个xsl中模板“模式”的例子吗?

有谁能给我讲讲linux到底是啥,它怎么使用?

谁能给我一个关于“啥使对象有状态”的这种情况的好例子?

谁能给我多发点后缀名啊,平时有好多后缀我都不知道是啥文件,谁能给我发一些?顺便都告诉是啥文件。

谁能给我简单的答案(代码)<一些简单的东西[关闭]