<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic problem using array arg on MIC in subroutine in Software Archive</title>
    <link>https://community.intel.com/t5/Software-Archive/problem-using-array-arg-on-MIC-in-subroutine/m-p/984558#M26834</link>
    <description>This example is a very shortened version of what I am trying to do
in real code. I am trying to put an array on MIC, then pass the array to
a routine on the host, then do a loop in the routine on the MIC. If I put
the MIC loop inline, it works. But if I put it in a subroutine, it fails.

Thank you

Gene W

genew@cy015:~/testdir&amp;gt; cat subargprob1.F
      program t
      implicit none
      real matrix(10000)
      integer i

      print *,'start'
      print *,'b4 offload_transfer'
!dir$ offload_transfer target(mic:0) nocopy(matrix:
     &amp;amp; alloc_if(.true.)  free_if(.false.)) 
      print *,'af offload_transfer'

!THE FOLLOWING CODE WORKS INLINE BUT FAILS IN SUBROUTINE
!dir$ offload target(mic:0) inout(matrix(1:10000):
     &amp;amp; alloc_if(.false.) free_if(.false.))
!$omp parallel do
      do i=1,10000
        matrix(i)=i
      end do

      print '(a,z)','GW b4 call t3s2 loc(matrix)=',loc(matrix)
!CODE FAILS INSIDE THIS SUBROUTINE
      call t3s2(matrix)
      end

      subroutine t3s2(matrix)
      implicit none
      real matrix(10000)
      integer i
      print *,'GW start t3s2'
      print '(a,z)','GW inside t3s2 loc(matrix)=',loc(matrix)
!THE FOLLOWING CODE WORKS INLINE BUT FAILS IN SUBROUTINE
!dir$ offload target(mic:0) inout(matrix(1:10000):
     &amp;amp; alloc_if(.false.) free_if(.false.))
!$omp parallel do
      do i=1,10000
        matrix(i)=i
      end do
      end

mpiifort -openmp subargprob1.F -o subargprob1 -list=subargprob1.list

./subargprob1 
 start
 b4 offload_transfer
[Offload] [MIC 0] [File]            subargprob1.F
[Offload] [MIC 0] [Line]            8
[Offload] [MIC 0] [Tag]             Tag 0
[Offload] [HOST]  [Tag 0] [CPU Time]        1.900814 (seconds)
[Offload] [MIC 0] [Tag 0] [MIC Time]        0.000000 (seconds)

 af offload_transfer
[Offload] [MIC 0] [File]            subargprob1.F
[Offload] [MIC 0] [Line]            13
[Offload] [MIC 0] [Tag]             Tag 1
[Offload] [HOST]  [Tag 1] [CPU Time]        0.659075 (seconds)
[Offload] [MIC 0] [Tag 1] [MIC Time]        0.323732 (seconds)

GW b4 call t3s2 loc(matrix)=           7FFFFFFF3890
 GW start t3s2
GW inside t3s2 loc(matrix)=           7FFFFFFF3890
[Offload] [MIC 0] [File]            subargprob1.F
[Offload] [MIC 0] [Line]            32
[Offload] [MIC 0] [Tag]             Tag 2
offload error: cannot find data associated with pointer variable 0x7fffffff3890</description>
    <pubDate>Thu, 14 Nov 2013 03:09:08 GMT</pubDate>
    <dc:creator>Gene_Wagenbreth</dc:creator>
    <dc:date>2013-11-14T03:09:08Z</dc:date>
    <item>
      <title>problem using array arg on MIC in subroutine</title>
      <link>https://community.intel.com/t5/Software-Archive/problem-using-array-arg-on-MIC-in-subroutine/m-p/984558#M26834</link>
      <description>This example is a very shortened version of what I am trying to do
in real code. I am trying to put an array on MIC, then pass the array to
a routine on the host, then do a loop in the routine on the MIC. If I put
the MIC loop inline, it works. But if I put it in a subroutine, it fails.

Thank you

Gene W

genew@cy015:~/testdir&amp;gt; cat subargprob1.F
      program t
      implicit none
      real matrix(10000)
      integer i

      print *,'start'
      print *,'b4 offload_transfer'
!dir$ offload_transfer target(mic:0) nocopy(matrix:
     &amp;amp; alloc_if(.true.)  free_if(.false.)) 
      print *,'af offload_transfer'

!THE FOLLOWING CODE WORKS INLINE BUT FAILS IN SUBROUTINE
!dir$ offload target(mic:0) inout(matrix(1:10000):
     &amp;amp; alloc_if(.false.) free_if(.false.))
!$omp parallel do
      do i=1,10000
        matrix(i)=i
      end do

      print '(a,z)','GW b4 call t3s2 loc(matrix)=',loc(matrix)
!CODE FAILS INSIDE THIS SUBROUTINE
      call t3s2(matrix)
      end

      subroutine t3s2(matrix)
      implicit none
      real matrix(10000)
      integer i
      print *,'GW start t3s2'
      print '(a,z)','GW inside t3s2 loc(matrix)=',loc(matrix)
!THE FOLLOWING CODE WORKS INLINE BUT FAILS IN SUBROUTINE
!dir$ offload target(mic:0) inout(matrix(1:10000):
     &amp;amp; alloc_if(.false.) free_if(.false.))
!$omp parallel do
      do i=1,10000
        matrix(i)=i
      end do
      end

mpiifort -openmp subargprob1.F -o subargprob1 -list=subargprob1.list

./subargprob1 
 start
 b4 offload_transfer
[Offload] [MIC 0] [File]            subargprob1.F
[Offload] [MIC 0] [Line]            8
[Offload] [MIC 0] [Tag]             Tag 0
[Offload] [HOST]  [Tag 0] [CPU Time]        1.900814 (seconds)
[Offload] [MIC 0] [Tag 0] [MIC Time]        0.000000 (seconds)

 af offload_transfer
[Offload] [MIC 0] [File]            subargprob1.F
[Offload] [MIC 0] [Line]            13
[Offload] [MIC 0] [Tag]             Tag 1
[Offload] [HOST]  [Tag 1] [CPU Time]        0.659075 (seconds)
[Offload] [MIC 0] [Tag 1] [MIC Time]        0.323732 (seconds)

GW b4 call t3s2 loc(matrix)=           7FFFFFFF3890
 GW start t3s2
GW inside t3s2 loc(matrix)=           7FFFFFFF3890
[Offload] [MIC 0] [File]            subargprob1.F
[Offload] [MIC 0] [Line]            32
[Offload] [MIC 0] [Tag]             Tag 2
offload error: cannot find data associated with pointer variable 0x7fffffff3890</description>
      <pubDate>Thu, 14 Nov 2013 03:09:08 GMT</pubDate>
      <guid>https://community.intel.com/t5/Software-Archive/problem-using-array-arg-on-MIC-in-subroutine/m-p/984558#M26834</guid>
      <dc:creator>Gene_Wagenbreth</dc:creator>
      <dc:date>2013-11-14T03:09:08Z</dc:date>
    </item>
    <item>
      <title>I modified your example a bit</title>
      <link>https://community.intel.com/t5/Software-Archive/problem-using-array-arg-on-MIC-in-subroutine/m-p/984559#M26835</link>
      <description>&lt;P&gt;The modified version below demonstrates using an allocatable array passed as an argument with data persistence.&lt;/P&gt;
&lt;P&gt;[cpp] program example2&lt;BR /&gt;implicit none&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;integer, parameter :: SZ = 10000&lt;BR /&gt;real, allocatable,dimension(:) :: matrix&lt;BR /&gt;integer i&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;allocate(matrix(SZ))&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;! Allocate memory on coprocessor only&lt;BR /&gt;!dir$ offload_transfer target(mic:0) in(matrix : length(SZ) &amp;amp;&lt;BR /&gt;&amp;nbsp; alloc_if(.true.) free_if(.false.))&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;! Initialize values on the host&lt;BR /&gt;!$omp parallel do private(i)&lt;BR /&gt;&amp;nbsp;do i=1,SZ&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; matrix(i)=99.0&lt;BR /&gt;&amp;nbsp;end do&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;print *,'start'&lt;BR /&gt;print *,'b4 offload_transfer'&lt;BR /&gt;print '(a,f6.2)','matrix(1)= ',matrix(1)&lt;BR /&gt;print '(a,f6.2)','matrix(2)= ',matrix(2)&lt;BR /&gt;print '(a,I0,a,f6.2)','matrix(',SZ,')= ',matrix(SZ)&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;! Send current values to coprocessor only and reuse previous allocation&lt;BR /&gt;!dir$ offload_transfer target(mic:0) in(matrix : length(SZ) &amp;amp;&lt;BR /&gt;&amp;nbsp; alloc_if(.false.) free_if(.false.))&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;print *,'af offload_transfer'&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;! change this element on the host only to demonstate values on&lt;BR /&gt;! coprocessor are used&lt;BR /&gt;matrix(1) = 0.0&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;print '(a,z)','GW b4 call t3s2 loc(matrix)=',loc(matrix)&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;call t3s2(matrix,SZ)&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;! Transfer current values on coprocessor to host and free allocation&lt;BR /&gt;!dir$ offload_transfer target(mic:0) out(matrix : length(SZ) &amp;amp;&lt;BR /&gt;&amp;nbsp; alloc_if(.false.) free_if(.true.))&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; print '(a)','Expected values are 99.0, 100.0, 98.0'&lt;BR /&gt;&amp;nbsp; print '(a,f6.2)','matrix(1)= ',matrix(1)&lt;BR /&gt;&amp;nbsp; print '(a,f6.2)','matrix(2)= ',matrix(2)&lt;BR /&gt;&amp;nbsp; print '(a,I0,a,f6.2)','matrix(',SZ,')= ',matrix(SZ)&lt;BR /&gt;end program example2&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;subroutine t3s2(matA,siz)&lt;BR /&gt;implicit none&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;integer, intent(in) :: siz&lt;BR /&gt;real, dimension(*), intent(inout) :: matA&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;integer i&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;print *,'GW start t3s2'&lt;BR /&gt;print '(a,z)','GW inside t3s2 loc(matA)=',loc(matA)&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;! With length(0), no data is transferred to the coprocessor&lt;BR /&gt;! With IN and no allocation set, the pointer value for this&lt;BR /&gt;! offload is only initialized to the value created in the calling&lt;BR /&gt;! scope for the associated actual argument in the caller;&lt;BR /&gt;! therefore, this re-uses the previous allocation on the coprocessor&lt;BR /&gt;! for the associated actual argument&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;! Modify one existing value (i.e. 99.0) on the coprocessor and&lt;BR /&gt;! leave value on coprocessor&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;!dir$ offload begin target(mic:0) in(siz) in(matA : length(0) &amp;amp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; alloc_if(.false.) free_if(.false.))&lt;BR /&gt;&amp;nbsp; matA(siz)= matA(siz) - 1&lt;BR /&gt;!dir$ end offload&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;! Re-use values on coprocessor, update some elements of array,&lt;BR /&gt;! leave values on coprocessor&lt;BR /&gt;!dir$ offload target(mic:0) in(siz) nocopy (matA : length(0) &amp;amp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; alloc_if(.false.) free_if(.false.))&lt;BR /&gt;!$omp parallel do private(i)&lt;BR /&gt;&amp;nbsp;do i=2,(siz-1)&lt;BR /&gt;&amp;nbsp; matA(i)=100.0&lt;BR /&gt;&amp;nbsp;end do&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;end subroutine t3s2 [/cpp]&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;[plain]$ ./a.out&lt;BR /&gt;[Offload] [MIC 0] [File]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; example2.F90&lt;BR /&gt;[Offload] [MIC 0] [Line]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 11&lt;BR /&gt;[Offload] [MIC 0] [Tag]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tag 0&lt;BR /&gt;[Offload] [HOST]&amp;nbsp; [Tag 0] [CPU Time]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.005746(seconds)&lt;BR /&gt;[Offload] [MIC 0] [Tag 0] [CPU-&amp;gt;MIC Data]&amp;nbsp;&amp;nbsp; 40064 (bytes)&lt;BR /&gt;[Offload] [MIC 0] [Tag 0] [MIC Time]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000188(seconds)&lt;BR /&gt;[Offload] [MIC 0] [Tag 0] [MIC-&amp;gt;CPU Data]&amp;nbsp;&amp;nbsp; 0 (bytes)&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;start&lt;BR /&gt;&amp;nbsp;b4 offload_transfer&lt;BR /&gt;matrix(1)=&amp;nbsp; 99.00&lt;BR /&gt;matrix(2)=&amp;nbsp; 99.00&lt;BR /&gt;matrix(10000)=&amp;nbsp; 99.00&lt;BR /&gt;[Offload] [MIC 0] [File]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; example2.F90&lt;BR /&gt;[Offload] [MIC 0] [Line]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 27&lt;BR /&gt;[Offload] [MIC 0] [Tag]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tag 1&lt;BR /&gt;[Offload] [HOST]&amp;nbsp; [Tag 1] [CPU Time]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000265(seconds)&lt;BR /&gt;[Offload] [MIC 0] [Tag 1] [CPU-&amp;gt;MIC Data]&amp;nbsp;&amp;nbsp; 40072 (bytes)&lt;BR /&gt;[Offload] [MIC 0] [Tag 1] [MIC Time]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000014(seconds)&lt;BR /&gt;[Offload] [MIC 0] [Tag 1] [MIC-&amp;gt;CPU Data]&amp;nbsp;&amp;nbsp; 0 (bytes)&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;af offload_transfer&lt;BR /&gt;GW b4 call t3s2 loc(matrix)=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1CAA690&lt;BR /&gt;&amp;nbsp;GW start t3s2&lt;BR /&gt;GW inside t3s2 loc(matA)=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1CAA690&lt;BR /&gt;[Offload] [MIC 0] [File]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; example2.F90&lt;BR /&gt;[Offload] [MIC 0] [Line]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 71&lt;BR /&gt;[Offload] [MIC 0] [Tag]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tag 2&lt;BR /&gt;[Offload] [HOST]&amp;nbsp; [Tag 2] [CPU Time]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.004952(seconds)&lt;BR /&gt;[Offload] [MIC 0] [Tag 2] [CPU-&amp;gt;MIC Data]&amp;nbsp;&amp;nbsp; 12 (bytes)&lt;BR /&gt;[Offload] [MIC 0] [Tag 2] [MIC Time]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000058(seconds)&lt;BR /&gt;[Offload] [MIC 0] [Tag 2] [MIC-&amp;gt;CPU Data]&amp;nbsp;&amp;nbsp; 8 (bytes)&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;[Offload] [MIC 0] [File]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; example2.F90&lt;BR /&gt;[Offload] [MIC 0] [Line]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 78&lt;BR /&gt;[Offload] [MIC 0] [Tag]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tag 3&lt;BR /&gt;[Offload] [HOST]&amp;nbsp; [Tag 3] [CPU Time]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.236283(seconds)&lt;BR /&gt;[Offload] [MIC 0] [Tag 3] [CPU-&amp;gt;MIC Data]&amp;nbsp;&amp;nbsp; 16 (bytes)&lt;BR /&gt;[Offload] [MIC 0] [Tag 3] [MIC Time]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.227425(seconds)&lt;BR /&gt;[Offload] [MIC 0] [Tag 3] [MIC-&amp;gt;CPU Data]&amp;nbsp;&amp;nbsp; 4 (bytes)&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;[Offload] [MIC 0] [File]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; example2.F90&lt;BR /&gt;[Offload] [MIC 0] [Line]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 41&lt;BR /&gt;[Offload] [MIC 0] [Tag]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tag 4&lt;BR /&gt;[Offload] [HOST]&amp;nbsp; [Tag 4] [CPU Time]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.028915(seconds)&lt;BR /&gt;[Offload] [MIC 0] [Tag 4] [CPU-&amp;gt;MIC Data]&amp;nbsp;&amp;nbsp; 72 (bytes)&lt;BR /&gt;[Offload] [MIC 0] [Tag 4] [MIC Time]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000257(seconds)&lt;BR /&gt;[Offload] [MIC 0] [Tag 4] [MIC-&amp;gt;CPU Data]&amp;nbsp;&amp;nbsp; 40000 (bytes)&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;Expected values are 99.0, 100.0, 98.0&lt;BR /&gt;matrix(1)=&amp;nbsp; 99.00&lt;BR /&gt;matrix(2)= 100.00&lt;BR /&gt;matrix(10000)=&amp;nbsp; 98.00[/plain]&lt;/P&gt;</description>
      <pubDate>Thu, 14 Nov 2013 19:33:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Software-Archive/problem-using-array-arg-on-MIC-in-subroutine/m-p/984559#M26835</guid>
      <dc:creator>Kevin_D_Intel</dc:creator>
      <dc:date>2013-11-14T19:33:00Z</dc:date>
    </item>
    <item>
      <title>Kevin Davis</title>
      <link>https://community.intel.com/t5/Software-Archive/problem-using-array-arg-on-MIC-in-subroutine/m-p/984560#M26836</link>
      <description>Kevin Davis

Thank you for taking the time to look at my problem.

Your code runs. If I change "OUT" at line 38 to "NOCOPY", I get a seg fault on
the MIC. Why is this ?

NOCOPY is what I really want to do. In my actual code, I want to allocate an
array on the MIC. Then I call subroutines, passing the array as an argument,
which have loops that read and set the array. I want to leave a lot of the
code on the host, but execute the loops on the MIC. I want to initialize the
array on the host, alllocate it on the MIC and transfer it to the MIC, then
leave the array on the MIC executing lots of loops in subroutines on the MIC,
but executing scalar code on the host. I was told by someone else that
transfers of dummy arguments is not allowed. Your example shows that it works
sometimes. But experiments I have run indicate that it does not always work.
The seg fault when line 38 of your example is changed  from OUT ot NOCOPY is
one example. I am experimenting with passing the array in COMMON rather that
as a subroutine argument, but that is not a very general solution.

Thanks again

Gene W</description>
      <pubDate>Thu, 14 Nov 2013 20:45:21 GMT</pubDate>
      <guid>https://community.intel.com/t5/Software-Archive/problem-using-array-arg-on-MIC-in-subroutine/m-p/984560#M26836</guid>
      <dc:creator>Gene_Wagenbreth</dc:creator>
      <dc:date>2013-11-14T20:45:21Z</dc:date>
    </item>
  </channel>
</rss>

