![]() |
1
6
如果使用“英特尔Fortran编译器”,则可以使用命令行开关打开/增加编译器的详细级别以进行并行化/矢量化。这样,在编译/链接过程中,您将看到如下内容:
我承认,我上次使用它已经有几年了,所以编译器消息实际上看起来可能非常不同,但这是基本的想法。 |
![]() |
2
7
FORALL是赋值构造,而不是循环构造。FORALL的语义表示,FORALL中每个赋值的右侧(RHS)表达式在被赋值到左侧(LHS)之前都会被完全求值。无论右驾驶室的操作有多复杂,包括右驾驶室和左驾驶室重叠的情况,都必须这样做。 大多数编译器都致力于优化FORALL,这既是因为它很难优化,也是因为它不常用。最简单的实现是简单地为RHS分配一个临时变量,计算表达式并将其存储在临时变量中,然后将结果复制到LHS中。分配和取消分配这个临时文件可能会使您的代码运行非常缓慢。编译器很难在没有临时参数的情况下自动确定何时可以对RHS进行求值;大多数编译器都不会这样做。嵌套的DO循环更易于分析和优化。
gfortran-fopenmp blah.f90-o blah等等 请注意,并行评估RHS不需要兼容的OpenMP实现(至少包括gfortran的旧版本);可以接受实现评估RHS,就像它包含在OpenMP“single”指令中一样。还要注意,“工作共享”可能不会消除RHS分配的临时资源。例如,MacOSX上的旧版本IBMFortran编译器就是这样。 |
![]() |
3
3
最好的方法是测量计算的时钟时间。尝试使用和不使用并行代码。如果时钟时间减少,那么并行代码正在工作。在代码块前后调用的Fortran内部系统时钟将为您提供时钟时间。内在的cpu时间将为您提供cpu时间,当代码运行多线程时,由于开销,cpu时间可能会增加。
Fortran编译器在实现真正的并行处理的能力上各不相同,而无需显式指定,例如使用OpenMP或MPI。你用的是什么编译器?
|
![]() |
Fib · 查找R包中使用的Fortran文件 3 年前 |
![]() |
Holmz · 使用ifort 2020和OneAPI更改字符串行为? 3 年前 |
![]() |
imronuke · nvfortran编译器有用标志的建议 3 年前 |
![]() |
R. N · gfortran指针过程类型问题 7 年前 |
![]() |
ptb · 将Torvalds的“好品味”应用于Fortran链表 7 年前 |