问题标签 [cilk]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 简单的 Cilk 减速器不会加速 cilk_for
我正在尝试通过以下代码利用 openCilk(MIT 目前的 Cilk 发行版)减速器。
我正在使用openCilk 团队提供的Tapi/LLVM编译器进行编译。我已经尝试在有和没有-O3
优化标志的情况下进行编译,但是并行循环并没有比简单的顺序更快for-loop
(我没有把它放在这里,因为它非常微不足道,我不希望代码段太大)在任何案子。
我也尝试过从n
数百到数百万的每一个范围,但顺序似乎总是更快。我知道这项任务相当微不足道,但应该有一个并行运行比顺序运行更快的范围。
为什么并行 cilk-for 的运行速度不比顺序对应的快?
注意#1:我平均每个运行100次n
以标准化开销异常值。
注意#2:我使用 cilk-plus 标签代替了不存在的 openCilk 标签。
amazon-web-services - 为什么 AWS 上相同 Cilk 程序的执行时间不同?
我有一个使用 Cilk 计算斐波那契数的并行程序。我知道还有其他方法可以计算斐波那契数,但由于我使用的是 Cilk,所以我选择使用递归来解决这个问题。
代码是从此答案中复制的。
我编译了程序并在aws上运行它。有8个核心,我指定的worker数是8个。
通过上述设置,我执行了计算第 40 个斐波那契数的程序。我所做的是用来$ time
查看执行需要多长时间。但是,有两种可能的输出:
和
我添加了函数__cilkrts_get_nworkers()
并main()
注意到在输出不同的两种情况下,工人的数量都是 8。
尽管使用 Cilk 存在开销,但我对导致两种不同输出的原因感到困惑。程序没有变化,工人数量相同,请问差异是否是由 Cilk 运行时调度程序引起的?因为每当它进入不完整的步骤时,处理器窃取的工作并不一定会将未执行的DAG的跨度减少1。所以我得到更好结果的原因是因为我很幸运,即在每次窃取中,被盗的工作减少了未执行的 DAG 减 1。
请问我的理解是否正确?还有其他原因导致这种情况吗?例如,是因为 AWS 机器本身吗?