参考上面的链接可以初步了解Cilk技术:
“英特尔® C++ 编译器的新功能 Cilk 语言扩展技术(以下简称 “Cilk 技术”)为 C/C++ 语言增加了细粒度任务支持,使其为新的和现有的软件增加并行性来充分发掘多处理器能力变得更加容易。”
“Cilk 技术的设计特别适合但不限于 “divide 和 conquer” 的算法。它将问题分解成可以独立完成的子问题(任务),然后再将这些执行结果合并起来。”
1. Cilk为Intel编译器的语言扩展,通过提供一些关键字、环境变量、函数库等方便进行并行编程。由于是语言扩展,所以不需要对编译器增加额外的选项。当然,编译器提供了选项将cilk程序进行串行化。
2. Cilk的特点之一是"简单",极大的简化了将串行程序进行并行的难度,其核心内容是三个关键字和其工作原理的理解。
3. Cilk的历史:(http://www.oschina.net/p/cilk)
“Cilk多线程编程技术最早由MIT开 发,是一个基于Gcc编译器的开源项目。后来开发者创建了一个创业公司,推出改进的私有版本,整合到Windows下的多种编译器中。之后它被英特尔公司 收购,整合进英特尔的编译器中。现在,它再次成为一个开源项目,成为Gcc 4.7下的一个分支。Cilk Plus允许C和C++程序员能高效利用多核处理器的并行处理能力。"说明:在未来的gcc 4.7中,就可以使用cilk扩展语法写多线程并行程序了。
4. 通常,Cilk程序会查询操作系统信息,尽可能多地使用多核处理器。
缺省地, 工作线程的数量被设定等同于运行系统的核的总数。 这样的缺省值设定, 能够满足大多数情况下的要求。通过程序逻辑控制, 或者环境变量(CILK_NWORKERS), 你可以增加或者减少工作线程的数量。
5. 如何使用 Cilk 技术?
下面描述了使用 Cilk 技术创建一个并行程序的操作步骤:说明:对于cilk程序的调试,一般先调试保证串行化的cilk程序的正确性,再考虑并行程序的错误(是否有数据竞争等).
6.
1. worker:术语worker表示在一个Cilk程序里,一个用于执行任务的操作系统线程。
2. 串行化
Cilk语言扩展设计为具有串行语义。 也就是说, 每一个Cilk程序对应于一个等价的C/C++程序。这样的C/C++程序被称作Cilk程序的串行化(Serialization)。 这种串行化对于Cilk程序的调试特别有帮助。方法二:使用/Qcilk_serialize选项编译。当然,方法一也可以通过选项-include cilk/cilk_stub.h(linux)或/FI cilk/cilk_stub.h(win)达到同样效果。
3.