这是the Wikipedia article on Automatic parallelization
由于编译器或工具的自动并行化非常困难 以下原因[2]:
依赖性分析对于使用间接寻址,指针的代码来说很难 递归和间接函数调用;
循环具有未知的迭代次数;
- 醇>
访问全球资源很难协调 内存分配,I / O和共享变量。
正如您所看到的,第1点的问题主要与编程语言有关。在C / C ++中,您遇到了第1点中提到的所有问题。所以我的问题是,我们是否有一种接近C / C ++但没有这些问题的语言。我知道Fortran填补了这个账单,但它甚至不像C / C ++那样远。
答案 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)