当前位置: 首页 > 面试题库 >

自动并行化

鲁滨海
2023-03-14
问题内容

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

看下面的代码:

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实现此功能,则需要将其更多地编写为库,并让用户决定要并行化的内容(库功能和注释?大声思考)。功能语言更适合于此。

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



 类似资料:
  • MXNet后端会自动构建计算图。通过计算图,系统可以知道所有计算的依赖关系,并可以选择将没有依赖关系的多个任务并行执行来获得计算性能的提升。例如“异步计算”一节的第一个例子里依次执行了a = nd.ones((1, 2))和b = nd.ones((1, 2))。这两步计算之间并没有依赖关系,因此系统可以选择并行执行它们。 通常,一个运算符会用到所有CPU或单块GPU上全部的计算资源。例如,dot

  • 问题内容: “ group by”子句是否可以自动保证结果将由该键排序?换句话说,编写以下内容是否足够: 还是必须写 我知道例如在MySQL中我不必这样做,但是我想知道我是否可以在SQL实现中依靠它。可以保证吗? 问题答案: 不必对数据进行排序。DB旨在尽可能快地获取数据,并且仅在必要时才进行排序。 因此,如果您需要有保证的订单,请添加。

  • 那么有没有?或者javadoc有误导性(或者“动态”是什么意思)?如果没有,有没有这个功能的计划?

  • 我需要使用Access数据库表中的文本动态生成word文档。这里的警告是,来自数据库的一些文本需要修改为Mergefields。我目前使用Interop.Word(VBA宏)和VB.NET生成文档。 到目前为止,我的步骤是这样的: 拉标准.docx模板 使用表中预定义的填充文本填充模板 通过用实际的MergeFields替换填充器文本来添加MergeFields 附加数据源并执行邮件合并 添加VB

  • 通过Jenkins并行完成UI的自动化测试 原文链接 : Concurrent Android UI automation with Jenkins 原文作者 : Ha Duy Trung 译文出自 : 开发技术前线 www.devtf.cn 译者 : chaossss 校对者: tiiime 状态 : 完成 现在的 IT 公司会为了进入不同的市场开发相应的 App,来自同一家公司的 App 总会

  • 问题内容: 如何显示带有自动换行符的长字符串,网站地址,单词或符号集,以保持div宽度?我猜是一个自动换行。通常添加空格是可行的,但是是否有CSS解决方案,例如自动换行? 例如,它(非常讨厌)与div重叠,强制水平滚动等。 我可以在上面的字符串中添加什么以使其完全适合div中的几行或浏览器窗口? 问题答案: 长话短说: 就CSS解决方案而言,您必须:强制元素显示滚动条,并仅剪切掉任何多余的文本。有