|
|
1
13
正如我在回答另一个问题时所说的那样,人们普遍认为福拉尔在被介绍到语言中时并没有像人们所希望的那样有用。正如在其他答案中已经解释过的,它有限制性的要求和有限的作用,编译器已经非常擅长于优化常规循环。编译器的性能不断提高,不同的编译器的性能也不尽相同。另一个线索是Fortran 2008正在重新尝试。。。除了在语言中添加显式并行化(前面已经提到了co数组),还有一个“do concurrent”,这是一种新的循环形式,它需要一些限制,这些限制应该更好地允许编译器执行自动并行化优化,但是应该足够通用,以便有用——请参见 ftp://ftp.nag.co.uk/sc22wg5/N1701-N1750/N1729.pdf .
|
|
2
6
我对此做了一些浅显的研究,遗憾的是,通常发现显式地编写循环会比编写并行结构更快地生成程序。即使是简单的整个数组赋值,比如
我仍然使用并行结构,特别是整个数组操作,当它们是最自然的方式来表达我试图实现的目标时。我从未在OpenMP工作共享构造中测试过这些构造。我真的应该。 |
|
|
3
3
FORALL是一个通用的屏蔽赋值语句(如WHERE)。它不是循环构造。
OpenMP和MPI在较粗粒度级别上更有用。 |
|
|
4
0
理论上,使用这样的赋值可以让编译器知道您想要做什么,并且应该允许它更好地优化它。在实践中,看马克的答案。。。我还认为,如果代码看起来更干净的话,这是很有用的。我用过诸如
|
|
|
5
0
*这应该是一个评论,而不是一个答案,但它不适合那个小盒子,所以我把它放在这里。别跟我作对:-)不管怎样,继续听@steabert对他的回答的评论。OpenMP和MPI是两个不同的东西;很少有人能在两者之间做出选择,因为它更多地取决于您的体系结构而不是个人选择。就学习并行性的概念而言,我建议您随时使用OpenMP;它比较简单,而且以后可以很容易地继续转换到MPI。 但是,那不是我想说的。这是-几天后,英特尔宣布它已经开始支持 共阵列 ,以前仅由g95支持的F2008功能。他们并不打算放弃g95,但事实上英特尔编译器在生产代码中的应用更为广泛,所以这绝对是一个有趣的developemnt产品线。他们还更改了Visual Fortran编译器中的一些内容(首先是名称:-) 链接后的更多信息: http://software.intel.com/en-us/articles/intel-compilers/ |