我正在尝试使用gfortran和Intel Xeon CPU对Fortran程序中的循环进行矢量化。
以前,矢量化是通过设定
来实现的!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:注意:=== vect_slp_analyze_bb === vect_test.f:18:0: 注意:=== vect_analyze_data_refs === vect_test.f:18:0:注意:不是 vectorized:基本块中没有足够的数据引用。
答案 0 :(得分:3)
你的程序没用,编译器会优化一切。如果你在最后打印数组的内容并使数组变大,它实际上会向循环进行矢量化:
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.
编译:
dismissViewControllerAnimated:completion: