0

这来自关于自动并行化的维基百科文章

由于以下原因[2],编译器或工具的自动并行化非常困难:

  1. 使用间接寻址、指针、递归和间接函数调用的代码很难进行依赖性分析;

  2. 循环的迭代次数未知;

  3. 对全局资源的访问在内存分配、I/O 和共享变量方面很难协调。

如您所见,第一点的问题主要与编程语言有关。在 C/C++ 中,您会遇到第 1 点中提到的所有问题。所以我的问题是,我们是否有一种接近 C/C++ 但没有这些问题的语言。我知道 Fortran 可以满足要求,但它甚至不像 C/C++。

4

3 回答 3

3

有几个标准介绍了 C 和 C++ 中的并行化语法。一个例子是Unified Parallel C,另一个是openCL,两者的用途截然不同。

可能最符合您要求的是OpenMP。它扩展了 C 和 C++ 语言,因此您可以告诉编译器并行化您的代码(以及在哪里执行)。

函数式编程语言(例如 Lisp、Haskell 和 F#)本质上是高度可自动并行化的,但也与 C 和 C++ 等过程和 OOP 语言有很大不同

于 2012-06-01T21:10:26.827 回答
3

FORTRAN 有一些独特的功能(可能最好描述为缺乏功能),这些功能允许干净、自动的并行化;然而,随着最近对 FORTRAN 的所有添加,尚不清楚该语言的现代等价物是否保持这种区别。

就逻辑结构而言,与 C 和 C++ 相比,FORTRAN 并没有走得太远。然而,为了处理复杂的数据结构,FORTRAN 的根倾向于跨多个关联数组存储结构,然后使用特定字段作为“下一个”索引。这避免了指针,但提供了类似的灵活性。

当我更多地使用该语言时,我已经看到了哈希表、树和其他结构的 FORTRAN 实现;但是,它肯定不是为了简单地表示这样而编写的,而且我想这样的代码很难并行化。

于 2012-06-01T21:28:25.980 回答
0

如果您在 GPU 上寻找并行化

有微软的AMP

PGI 编译器和未来更多的编译器将支持 openmp,如Open ACC

Caps 还发布了另一个类似 openMP 的编译器,称为HMPP

于 2012-06-01T22:32:41.767 回答