问题描述
我正在编写一个性能至关重要的大型Fortran程序。我正在使用模块来存储常见的参数和变量。但是问题是哪里有模块变量用于某种数组操作,编译器就不会对其向量化。让我们以此为例,
module name
integer :: p
end module name
program name1
use name
real(kind=8) :: x(10,10),y(10)
integer :: i,j
p=9
do i=1,10
do j =1,10
x(i,j) = i+j
enddo
enddo
y = x(:,p)*x(:,p-1)
print *,y
end program name1
现在,当我使用Cray (XC50)
在ftn -eD file.f90
上进行编译时,将显示生成的.lst
文件,
9. program name1
10. ! implicit none
11. use name
12. real(kind=8) :: x(10,y(10)
13. integer :: i,j
14. do i=1,10
15. do j =1,10
16. x(i,j) = i+j
17. enddo
18. enddo
19.
20. y = x(:,p-1)
ftn-6263 ftn: VECTOR NAME1,File = test.f90,Line = 20
A loop starting at line 20 was not vectorized because it contains a reference to a non-vector intrinsic on line 20.
21. print *,y
22. end program name1
23.
24.
我一直认为,使用:
进行数组操作将使编译器对其向量化更加容易。但是,如果使用模块变量不利于矢量化,那么在性能至关重要的情况下使用模块是否也不利?我在这里有些困惑吗?如何提高这些情况下的性能?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)