gpt4 book ai didi

fortran - Fortran 95构造(例如WHERE,FORALL和SPREAD)通常会导致更快的并行代码吗?

转载 作者:行者123 更新时间:2023-12-03 20:21:50 24 4
gpt4 key购买 nike

我已经阅读了梅特卡夫(Metcalf),里德(Reid)和科恩(Cohen)撰写的《 Fortran 95》一书,以及《 Fortran 90》中的数值食谱。他们建议使用WHERE,FORALL和SPREAD等方法,以避免不必要的程序序列化。

但是,我偶然发现this answer,它声称FORALL在理论上是好的,但在实践中却毫无意义-您最好编写循环,因为它们也可以并行化,并且可以使用OpenMP(或某些编译器的自动功能,例如作为英特尔)。

谁能从经验中验证他们是否普遍发现这些结构比显式循环具有更多优势,并且是否具有并行性能方面的陈述?

并且该语言是否还有其他平行特征在原则上不错,但在实践中却不值得?

我很欣赏这些问题的答案在某种程度上取决于实现,因此我对gfortran,Intel CPU和SMP并行性最感兴趣。

最佳答案

正如我在回答另一个问题时所说的那样,人们普遍认为,FORALL并没有像引入语言时所希望的那样有用。正如在其他答案中已经解释的那样,它具有严格的要求和有限的作用,并且编译器已经非常擅长优化常规循环。编译器不断完善,其功能因编译器而异。另一个线索是,Fortran 2008正在再次尝试...除了在语言中添加显式并行化(已提到的协数组)外,还存在“并发”,这是一种新的循环形式,需要限制条件,以更好地允许编译器来执行自动并行优化,但应该足够通用才有用-参见ftp://ftp.nag.co.uk/sc22wg5/N1701-N1750/N1729.pdf

在获得速度方面,大多数情况下,我会选择良好的算法和程序来提高可读性和可维护性。仅当程序太慢时,我才能找到瓶颈并重新编码或实现多线程(OpenMP)。在极少数情况下,FORALL或WHERE与显式的do循环会产生有意义的速度差异-我将更加关注它们阐明程序意图的方式。

关于fortran - Fortran 95构造(例如WHERE,FORALL和SPREAD)通常会导致更快的并行代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4122099/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com