在新发布的Intel Fortran Composer XE 2015中英特尔编译器加入了许多针对至强融核™ 协处理器编程的新特性,其中之一就是在Fortran编译器中加入了offload非连续数组片段的支持。
在使用Intel Fortran Composer XE 2015之前版本的编译器时,使用offload指令在CPU和协处理器之间传递数组片段时必须使用内存连续存放的片段。考虑下面的例子:
subroutine foo(a,b,c,n)
real::a(n,n),b(2*n,2*n),c(2*n,2*n)
integer::i,j
!dir$ offload begin target(mic) in(b(1:n,1:2*n:2),c(1:n,2:2*n:2)) out(a)
do i=1,n
do j =1,n
a(j,i) = b(j,2*i-1)*c(j,2*i)
end do
end do
!dir$ end offload
end subroutine
这段代码将数组“b”的所有奇数行的前半部分和数组“c”的所有偶数行的前半部分对应位置上的元素相乘,然后将结果存放到数组“a”中。该代码在使用Intel Fortran Composer XE 2015之前版本的编译器进行编译时将会得到下面的语法错误信息:
error #8617: An array section used in IN/OUT/INOUT clause of an OFFLOAD directive must be contiguous.
由于Intel Fortran Composer XE 2015支持offload非连续数组片段,我们可以在offload指令中直接将两个不连续的数组片段传递到协处理器上进行进行计算。这段代码可以顺利的进行编译和执行。
更多关于如何通过英特尔编译器开发至强融核协处理器程序的信息请参见英特尔编译器用户参考手册的相关内容。