使用矢量处理器在 Fortran 中矢量化循环
Vectorize a loop in Fortran with vector processor
我正在尝试使用 gfortran 和 Intel Xeon CPU.
对 Fortran 程序中的循环进行矢量化
之前向量化是通过constating
实现的
!VOCL LOOP,NOVREC
!DIR$ IVDEP
这本可以在循环之前在富士通上运行。但是这些都不管用了。
有没有人知道如何向量化循环。
由于我是新手,如果你能给出一个例子来测试结果就完美了
这是我用来测试它是否有效的代码
PROGRAM VECT_TEST
IMPLICIT NONE
INTEGER :: L(10)
INTEGER :: I
DO I = 1, 10
L(I) = I
END DO
!VOCL LOOP,NOVREC
!DIR$ IVDEP
DO I = 1, 10
L(I)=L(I) + 1
END DO
END PROGRAM
用测试命令
gfortran vect_test.f -fopt-info-all -O3
我得到了这样的错误输出
vect_test.f:18:0: note: ===vect_slp_analyze_bb=== vect_test.f:18:0:
note: === vect_analyze_data_refs === vect_test.f:18:0: note: not
vectorized: not enough data-refs in basic block.
你的程序没用,编译器把一切都优化掉了。如果你在最后打印数组的内容并使数组变大,它实际上会向量化循环:
PROGRAM VECT_TEST
IMPLICIT NONE
INTEGER :: L(1024)
INTEGER :: I
DO I = 1, 1024
L(I) = I
END DO
DO I = 1, 1024
L(I)=L(I) + 1
END DO
PRINT *, L
END PROGRAM
编译:
gfortran vec.f90 -ftree-vectorizer-verbose=1 -O3
Analyzing loop at vec.f90:13
Vectorizing loop at vec.f90:13
vec.f90:13: note: LOOP VECTORIZED.
Analyzing loop at vec.f90:7
Vectorizing loop at vec.f90:7
vec.f90:7: note: LOOP VECTORIZED.
vec.f90:1: note: vectorized 2 loops in function.
我正在尝试使用 gfortran 和 Intel Xeon CPU.
对 Fortran 程序中的循环进行矢量化之前向量化是通过constating
实现的!VOCL LOOP,NOVREC
!DIR$ IVDEP
这本可以在循环之前在富士通上运行。但是这些都不管用了。
有没有人知道如何向量化循环。
由于我是新手,如果你能给出一个例子来测试结果就完美了
这是我用来测试它是否有效的代码
PROGRAM VECT_TEST
IMPLICIT NONE
INTEGER :: L(10)
INTEGER :: I
DO I = 1, 10
L(I) = I
END DO
!VOCL LOOP,NOVREC
!DIR$ IVDEP
DO I = 1, 10
L(I)=L(I) + 1
END DO
END PROGRAM
用测试命令
gfortran vect_test.f -fopt-info-all -O3
我得到了这样的错误输出
vect_test.f:18:0: note: ===vect_slp_analyze_bb=== vect_test.f:18:0: note: === vect_analyze_data_refs === vect_test.f:18:0: note: not vectorized: not enough data-refs in basic block.
你的程序没用,编译器把一切都优化掉了。如果你在最后打印数组的内容并使数组变大,它实际上会向量化循环:
PROGRAM VECT_TEST
IMPLICIT NONE
INTEGER :: L(1024)
INTEGER :: I
DO I = 1, 1024
L(I) = I
END DO
DO I = 1, 1024
L(I)=L(I) + 1
END DO
PRINT *, L
END PROGRAM
编译:
gfortran vec.f90 -ftree-vectorizer-verbose=1 -O3
Analyzing loop at vec.f90:13
Vectorizing loop at vec.f90:13
vec.f90:13: note: LOOP VECTORIZED.
Analyzing loop at vec.f90:7
Vectorizing loop at vec.f90:7
vec.f90:7: note: LOOP VECTORIZED.
vec.f90:1: note: vectorized 2 loops in function.