有没有接近C / C ++但易于自动并行化的语言?

时间:2012-06-01 21:04:12

标签: c++ c parallel-processing fortran

这是the Wikipedia article on Automatic parallelization

  

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

     
      
  1. 依赖性分析对于使用间接寻址,指针的代码来说很难   递归和间接函数调用;

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

  4.   
  5. 访问全球资源很难协调   内存分配,I / O和共享变量。

  6.   

正如您所看到的,第1点的问题主要与编程语言有关。在C / C ++中,您遇到了第1点中提到的所有问题。所以我的问题是,我们是否有一种接近C / C ++但没有这些问题的语言。我知道Fortran填补了这个账单,但它甚至不像C / C ++那样远。

3 个答案:

答案 0 :(得分:3)

有几种标准在C和C ++中引入了并行化的语法。 一个例子是Unified Parallel C,另一个例子是openCL,两者的目的各不相同。

最适合您账单的是OpenMP。它扩展了C和C ++语言,因此您可以告诉编译器并行化代码(以及在何处执行)。

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

答案 1 :(得分:3)

FORTRAN有一些独特的功能(可能最好描述为缺乏功能),可以实现干净,自动的并行化;然而,由于最近对FORTRAN的所有新增内容,目前还不清楚语言的现代等价物是否保持这种区别。

就与C和C ++的比较而言,FORTRAN在逻辑结构方面并不遥远;然而,要做复杂的数据结构,FORTRAN的根源倾向于将结构存储在几个相关的数组中,然后使用特定的字段作为“下一个”索引。这避免了指针,但提供了类似的灵活性。

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

答案 2 :(得分:0)

如果您在GPU上寻找并行化

有微软的AMP

PGI编译器以及将来更多的编译器将支持像Open ACC

这样的openmp

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