问题标签 [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.

0 投票
0 回答
58 浏览

c++ - 简单的 Cilk 减速器不会加速 cilk_for

我正在尝试通过以下代码利用 openCilk(MIT 目前的 Cilk 发行版)减速器。

我正在使用openCilk 团队提供的Tapi/LLVM编译器进行编译。我已经尝试在有和没有-O3优化标志的情况下进行编译,但是并行循环并没有比简单的顺序更快for-loop(我没有把它放在这里,因为它非常微不足道,我不希望代码段太大)在任何案子。

我也尝试过从n数百到数百万的每一个范围,但顺序似乎总是更快。我知道这项任务相当微不足道,但应该有一个并行运行比顺序运行更快的范围。

为什么并行 cilk-for 的运行速度不比顺序对应的快?

注意#1:我平均每个运行100次n以标准化开销异常值。

注意#2:我使用 cilk-plus 标签代替了不存在的 openCilk 标签。

0 投票
0 回答
27 浏览

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 机器本身吗?