【问题标题】:Intel Cilk Plus code example with cilk_for keyword带有 cilk_for 关键字的英特尔 Cilk Plus 代码示例
【发布时间】:2014-09-30 07:11:35
【问题描述】:

cilk_for是Intel Cilk Plus的关键字,我们可以这样使用:

cilk_for (int i = 0; i < 8; ++i)
{
    do_work(i);
}

我需要更多带有 cilk_for 关键字的 Intel Cilk Plus 示例代码。

【问题讨论】:

    标签: cilk-plus


    【解决方案1】:

    这几乎就是全部了。 cilk_for 循环是并行化代码的最简单方法之一。需要注意的事项:

    • 不要尝试根据内核数量调整循环大小。像这样调整代码本质上是脆弱的。相反,在 for 循环中公开您的全部数据,让 Cilk Plus 运行时担心安排循环迭代。
    • 当心种族!如果您没有使用像 CilkscreenIntel Inspector 这样的竞争检测器测试您的应用程序,那么您可能会遇到竞争(充其量)并产生异常结果。
    • cilk_for 循环 (examples) 使用分而治之算法实现,该算法递归地将范围分成两半,直到剩余的迭代次数小于“粒度”。运行时通过将范围除以 8P 或内核数的 8 倍来计算粒度。这通常是一个很好的价值——不要太多,所以会有多余的开销,不要太少,所以你渴望并行。您可以使用“#pragma cilk grainsize=value”形式的编译指示指定粒度,其中“value”可以是常数或表达式。但我们的经验是,在某些特殊的地方,正确的粒度为 1,而在大多数其他地方,您最好使用默认值。
    • 如果您的代码正在累积结果,请考虑使用减速器而不是锁。 Reducers 提供了由 Cilk Plus 运行时自动合并的数据的无锁“视图”,从而保留了顺序。

    Barry Tannenbaum,英特尔 Cilk Plus 开发人员

    【讨论】:

    • Tannenbaum,我的问题仍未得到解答,我正在寻找更多带有 cilk_for 关键字的 Intel Cilk Plus 示例代码。
    • @Ataulnasar 关于编辑的说明。如果要添加链接,则需要将其锚定到正文中的某些文本。 :)
    • 在 Cilk Plus 社区网站http://www.cilkplus.org 上有一堆示例。特别是,请查看下载页面上的贡献代码和代码示例。
    猜你喜欢
    • 2015-04-08
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 2016-10-22
    • 2020-01-03
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多