带有cilk_for关键字的英特尔Cilk Plus代码示例

时间:2014-08-07 06:45:22

标签: cilk-plus

cilk_for是Intel Cilk Plus的关键字,我们可以按照以下方式使用它:

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

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

1 个答案:

答案 0 :(得分:2)

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

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

Barry Tannenbaum,英特尔Cilk Plus开发