在Intel Xeon Phi卸载指令中使用带有“into”的指针

时间:2013-11-19 14:32:31

标签: fortran intel intel-mic

根据“Intel Xeon Phi Coprocessor高性能编程”一书,我们可以将数据从一个变量移动到另一个变量。我试着按照这个例子,发现它有效:

代码:

program example 
real , target :: a(5),b(10)

a(1)=1
a(2)=2
a(3)=3
a(4)=4
a(5)=5

print *,'*************************'
print *,'a:'
print *, a


!dir$ offload begin target (mic:0) in(a(1:5): into(b(1:5)) alloc_if(.true.) free_if(.false.) )
print *, 'b on the phi'
print *, b(1:5)
b=b+10
!dir$ end offload

!dir$offload_transfer target(mic:0) out(b(1:5) : into(a(1:5)) alloc_if(.false.))


print *,'*************************'
print *,'a:'
print *, a
end program example

我在主机上有一个数组A,然后将它们复制到Xeon Phi上的数组B.我将B中的所有元素添加10,然后将Xeon Phi中B中的元素卸载到主机上的A中。结果是:

result1

但是如果我使用指针,则会出现错误。

代码2:

program example 
real , target :: a(5),b(10)
real , pointer :: a_p(:),b_p(:)

a(1)=1
a(2)=2
a(3)=3
a(4)=4
a(5)=5

a_p=>a
b_p=>b
print *,'*************************'
print *,'a:'
print *, a


!dir$ offload begin target (mic:0) in(a_p(1:5): into(b_p(1:5)) alloc_if(.true.) free_if(.false.) )
print *, 'b on the phi'
print *, b_p(1:5)
b_p=b_p+10
!dir$ end offload

!dir$offload_transfer target(mic:0) out(b_p(1:5) : into(a_p(1:5)) alloc_if(.false.))


print *,'*************************'
print *,'a:'
print *, a
end program example

结果2: result2

当我尝试复制东西时看起来有些不对劲。

是否支持指针?我们需要在实际项目中指向数组。

0 个答案:

没有答案
相关问题