自动并行化

您对将尝试获取代码并将其自动拆分为线程的项目有何看法(可能是编译时,可能是在运行时)。

看下面的代码:

for(int i=0;i<100;i++)

sum1 += rand(100)

for(int j=0;j<100;j++)

sum2 += rand(100)/2

这种代码可以自动拆分为两个并行运行的线程。您是否认为有可能?从理论上讲,我感觉这是不可能的(这使我想起了停顿的问题),但是我不能证明这种想法是正确的。

您认为这是一个有用的项目吗?有没有类似的东西?

回答:

在一般情况下是否可以知道一段代码是否可以并行化并不重要,因为即使您的算法无法检测到所有可以并行化的情况,也可能可以检测到其中的一些情况。

这并不意味着它将有用。考虑以下:

  1. 首先,要在编译时执行此操作,必须检查您可能要并行化的构造内部可能到达的所有代码路径。除了简单的计算之外,这对于任何其他事情可能都是棘手的。
  2. 其次,您必须以某种方式决定什么是可并行化的,什么不是并行化的。例如,您不能轻易破坏将同一状态修改为多个线程的循环。这可能是一项非常艰巨的任务,并且在许多情况下,您最终可能不确定-两个变量实际上可能引用同一个对象。
  3. 即使您可以实现此目标,也最终会使用户感到困惑。很难解释为什么他的代码不可并行化以及应如何更改。

我认为,如果要使用Java实现此功能,则需要将其更多地编写为库,并让用户决定要并行化的内容(库功能和注释?大声思考)。功能语言更适合于此。

琐事:在并行编程过程中,我们必须检查代码并确定代码是否可并行化。我不记得具体细节(有关“至多一次”资产?有人来填补我的心吗?),但是故事的寓意是,即使是看似琐碎的案件,这也极其困难。

以上是 自动并行化 的全部内容, 来源链接: utcz.com/qa/402512.html

回到顶部