近年来,出现了一些库/软件项目,它们提供了某种形式的通用数据驱动的共享内存并行性。
主要思想是,程序员无需编写显式的线程代码,而是将其算法实现为相互依赖的任务,然后由共享内存计算机上的通用中间件动态调度这些任务。
此类库的示例是:
Cilk:最初是一个基于MIT的项目,现在得到了Intel的支持,实现为C的语言/编译器扩展,用于Cilkchess计算机国际象棋软件以及FFTW中。
SMP superscalar:在巴塞罗那超级计算中心开发,基于
#pragma
扩展在很多方面类似于Cilk 。StarPU:基于类似库的“小代码”,可以针对几种不同的体系结构(包括GPU)进行编译和调度。
OpenMP任务:从3.0版开始,OpenMP引入了可以异步调度的“任务”(请参阅规范的2.7节)。
英特尔的线程构建基块:使用C ++类创建和启动异步任务,请参阅教程的第11节。
OpenCL:在多核上支持基于任务的并行性。
尽管有很多文献描述了这些库/语言扩展的内部工作方式以及它们在特定问题上的应用,但我仅遇到了很少的例子将它们用于科学计算应用中。
所以这是一个问题:是否有人知道使用这些库/语言扩展中的任何一个或类似的用于共享内存并行性的科学计算代码?