循环未向量化,因为它包含对非向量内在函数的引用

问题描述

我正在编写一个性能至关重要的大型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 (将#修改为@)