concurrency - 为什么 DO CONCURRENT 语句会给出奇怪的结果?
问题描述
让我们编译以下 Fortran 程序:
program main
implicit none
integer::j
complex::y(2)
real::x(2)
x(1)=1.0
x(2)=2.0
do j=1,2
y(j)=FF(x(j))
enddo
write(6,*)
write(6,*) y,"by DO"
forall (integer::i=1:2)
y(i)=FF(x(i))
end forall
write(6,*)
write(6,*) y,"by FORALL"
do concurrent (integer::i=1:2)
y(i)=FF(x(i))
enddo
write(6,*)
write(6,*) y,"by DO CONCURRENT"
write(6,*)
contains
complex pure function FF(xx)
real,intent(in)::xx
FF=cmplx(xx)
end function
end program
ifort (ver. 19.0.4.243) 没有选项。然后,我们得到结果:
$ ./a.out
(1.000000,0.0000000E+00) (2.000000,0.0000000E+00) by DO
(1.000000,0.0000000E+00) (2.000000,0.0000000E+00) by FORALL
(2.000000,0.0000000E+00) (2.000000,0.0000000E+00) by DO CONCURRENT
第一个和第二个结果符合预期。为什么 DO CONCURRENT 不给出相同的结果?
解决方案
推荐阅读
- python - 从数据框创建多个箱线图
- excel - 如何将“For”循环中的值写入单元格
- javascript - 将全局对象作为参数传递给自执行函数有什么意义?
- django - 如何通过管理界面在一个页面上显示两个未关联的模型?
- android - 如何检测 android 应用程序内的当前发布轨道?(Google Play 控制台)
- python - Python 平衡列表/numpy 数组中的项目
- javascript - moment.localeData 不是函数错误消息
- javascript - 在for of循环中使用数组解构?
- microservices - 如何在开发环境中使用 consul
- json - jq - 将复杂的 JSON 解析为字符串