<?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 No.  You can't manipulate in Software Archive</title>
    <link>https://community.intel.com/t5/Software-Archive/Change-pointer-value-inside-offload-region/m-p/956188#M20877</link>
    <description>&lt;P&gt;No.&amp;nbsp; You can't manipulate pointers like that with the hetrogeneous offload model.&amp;nbsp;&amp;nbsp;Your pointers p &amp;amp; q&amp;nbsp;have totally different addresses on host and coprocessor.&amp;nbsp; All your example does is swap pointers on the coprocessor without doing anything on the host.&lt;/P&gt;
&lt;P&gt;If you want to manipulate pointers, you would need to use the Cilk_shared offload model, which can maintain common virtual addresses of arbitrarily complex objects (including pointers) between host and coprocessor.&lt;/P&gt;
&lt;P&gt;On the other hand, if you just want to swap the data pointed to, you can use the hetrogeneous offload model.&amp;nbsp; The 'temp' pointer&amp;nbsp;is only known to&amp;nbsp;the coprocessor and&amp;nbsp;is created&amp;nbsp;just to swap the data:&lt;/P&gt;
&lt;P&gt;#include &amp;lt;iostream&amp;gt;&lt;BR /&gt;using namespace std;&lt;/P&gt;
&lt;P&gt;int * p=NULL;&lt;BR /&gt;int * q=NULL;&lt;/P&gt;
&lt;P&gt;int main()&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; p = new(int);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; q = new(int);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; *p = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; *q = 2;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; cout &amp;lt;&amp;lt; "\n before offload *q = " &amp;lt;&amp;lt; *q &amp;lt;&amp;lt; endl;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; #pragma offload target(mic) inout(p,q: length(8))&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int * temp = new(int);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *temp = *p;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *p = *q;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *q = *temp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; cout &amp;lt;&amp;lt; "\n after offload *q = " &amp;lt;&amp;lt; *q &amp;lt;&amp;lt; endl;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; return 0;&lt;BR /&gt;}&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="mailto:pbkenned@orcsle111:~/projects/ISN_Forums/U477910$"&gt;$&lt;/A&gt; icc -V&lt;BR /&gt;Intel(R) C Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 14.0.0.080 Build 20130728&lt;BR /&gt;Copyright (C) 1985-2013 Intel Corporation.&amp;nbsp; All rights reserved.&lt;/P&gt;
&lt;P&gt;&lt;A href="mailto:pbkenned@orcsle111:~/projects/ISN_Forums/U477910$"&gt;$&lt;/A&gt; icc U477910-pragma-offload.cpp -offload-attribute-target=mic&lt;BR /&gt;&lt;A href="mailto:pbkenned@orcsle111:~/projects/ISN_Forums/U477910$"&gt;$&lt;/A&gt; ./a.out&lt;/P&gt;
&lt;P&gt;&amp;nbsp;before offload *q = 2&lt;/P&gt;
&lt;P&gt;&amp;nbsp;after offload *q = 1&lt;BR /&gt;&lt;A href="mailto:pbkenned@orcsle111:~/projects/ISN_Forums/U477910$"&gt;$&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Tue, 15 Oct 2013 18:26:12 GMT</pubDate>
    <dc:creator>pbkenned1</dc:creator>
    <dc:date>2013-10-15T18:26:12Z</dc:date>
    <item>
      <title>Change pointer value inside offload region</title>
      <link>https://community.intel.com/t5/Software-Archive/Change-pointer-value-inside-offload-region/m-p/956187#M20876</link>
      <description>&lt;P&gt;What will happen if I change a pointer value inside the offload region like the code below?&lt;/P&gt;
&lt;P&gt;[cpp]#pragma offload inout(p,q: length(10))&lt;BR /&gt;{&lt;BR /&gt;int* temp = p;&lt;BR /&gt;p = q;&lt;BR /&gt;q = temp;&lt;BR /&gt;}[/cpp]&lt;/P&gt;
&lt;P&gt;Will the memory content of p and q on host exchange?&lt;/P&gt;
&lt;P&gt;Thanks.&lt;/P&gt;</description>
      <pubDate>Tue, 15 Oct 2013 06:58:35 GMT</pubDate>
      <guid>https://community.intel.com/t5/Software-Archive/Change-pointer-value-inside-offload-region/m-p/956187#M20876</guid>
      <dc:creator>Jun_Z_2</dc:creator>
      <dc:date>2013-10-15T06:58:35Z</dc:date>
    </item>
    <item>
      <title>No.  You can't manipulate</title>
      <link>https://community.intel.com/t5/Software-Archive/Change-pointer-value-inside-offload-region/m-p/956188#M20877</link>
      <description>&lt;P&gt;No.&amp;nbsp; You can't manipulate pointers like that with the hetrogeneous offload model.&amp;nbsp;&amp;nbsp;Your pointers p &amp;amp; q&amp;nbsp;have totally different addresses on host and coprocessor.&amp;nbsp; All your example does is swap pointers on the coprocessor without doing anything on the host.&lt;/P&gt;
&lt;P&gt;If you want to manipulate pointers, you would need to use the Cilk_shared offload model, which can maintain common virtual addresses of arbitrarily complex objects (including pointers) between host and coprocessor.&lt;/P&gt;
&lt;P&gt;On the other hand, if you just want to swap the data pointed to, you can use the hetrogeneous offload model.&amp;nbsp; The 'temp' pointer&amp;nbsp;is only known to&amp;nbsp;the coprocessor and&amp;nbsp;is created&amp;nbsp;just to swap the data:&lt;/P&gt;
&lt;P&gt;#include &amp;lt;iostream&amp;gt;&lt;BR /&gt;using namespace std;&lt;/P&gt;
&lt;P&gt;int * p=NULL;&lt;BR /&gt;int * q=NULL;&lt;/P&gt;
&lt;P&gt;int main()&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; p = new(int);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; q = new(int);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; *p = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; *q = 2;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; cout &amp;lt;&amp;lt; "\n before offload *q = " &amp;lt;&amp;lt; *q &amp;lt;&amp;lt; endl;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; #pragma offload target(mic) inout(p,q: length(8))&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int * temp = new(int);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *temp = *p;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *p = *q;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *q = *temp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; cout &amp;lt;&amp;lt; "\n after offload *q = " &amp;lt;&amp;lt; *q &amp;lt;&amp;lt; endl;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; return 0;&lt;BR /&gt;}&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="mailto:pbkenned@orcsle111:~/projects/ISN_Forums/U477910$"&gt;$&lt;/A&gt; icc -V&lt;BR /&gt;Intel(R) C Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 14.0.0.080 Build 20130728&lt;BR /&gt;Copyright (C) 1985-2013 Intel Corporation.&amp;nbsp; All rights reserved.&lt;/P&gt;
&lt;P&gt;&lt;A href="mailto:pbkenned@orcsle111:~/projects/ISN_Forums/U477910$"&gt;$&lt;/A&gt; icc U477910-pragma-offload.cpp -offload-attribute-target=mic&lt;BR /&gt;&lt;A href="mailto:pbkenned@orcsle111:~/projects/ISN_Forums/U477910$"&gt;$&lt;/A&gt; ./a.out&lt;/P&gt;
&lt;P&gt;&amp;nbsp;before offload *q = 2&lt;/P&gt;
&lt;P&gt;&amp;nbsp;after offload *q = 1&lt;BR /&gt;&lt;A href="mailto:pbkenned@orcsle111:~/projects/ISN_Forums/U477910$"&gt;$&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 15 Oct 2013 18:26:12 GMT</pubDate>
      <guid>https://community.intel.com/t5/Software-Archive/Change-pointer-value-inside-offload-region/m-p/956188#M20877</guid>
      <dc:creator>pbkenned1</dc:creator>
      <dc:date>2013-10-15T18:26:12Z</dc:date>
    </item>
    <item>
      <title>Then by extension, the</title>
      <link>https://community.intel.com/t5/Software-Archive/Change-pointer-value-inside-offload-region/m-p/956189#M20878</link>
      <description>&lt;P&gt;Then by extension, the following should the following work as well:&lt;/P&gt;
&lt;P&gt;[cpp]&lt;/P&gt;
&lt;P&gt;#include &amp;lt;iostream&amp;gt;&lt;BR /&gt;using namespace std;&lt;/P&gt;
&lt;P&gt;int * p=NULL;&lt;BR /&gt;int * q=NULL;&lt;/P&gt;
&lt;P&gt;int main()&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; p = new(int);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; q = new(int);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; *p = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; *q = 2;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; cout &amp;lt;&amp;lt; "\n before offload *q = " &amp;lt;&amp;lt; *q &amp;lt;&amp;lt; endl;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; int** pp = &amp;amp;p;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; int** pq = &amp;amp;q;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; #pragma offload target(mic) inout(pp,qq: length(8))&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int ** temp = pp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *pp = *pq;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *pq = temp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; cout &amp;lt;&amp;lt; "\n after offload *q = " &amp;lt;&amp;lt; *q &amp;lt;&amp;lt; endl;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; return 0;&lt;BR /&gt;}&lt;BR /&gt;[/cpp]&lt;/P&gt;
&lt;P&gt;Though I think you only need intent in&lt;/P&gt;
&lt;P&gt;Jim Dempsey&lt;/P&gt;</description>
      <pubDate>Tue, 15 Oct 2013 20:12:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Software-Archive/Change-pointer-value-inside-offload-region/m-p/956189#M20878</guid>
      <dc:creator>jimdempseyatthecove</dc:creator>
      <dc:date>2013-10-15T20:12:00Z</dc:date>
    </item>
    <item>
      <title>You would think double</title>
      <link>https://community.intel.com/t5/Software-Archive/Change-pointer-value-inside-offload-region/m-p/956190#M20879</link>
      <description>&lt;P&gt;You would think double indirection should work the same, but apparently that confuses the compiler.&amp;nbsp; I'm getting 'offload error: address range partially overlaps with existing allocation' with your example.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 15 Oct 2013 21:39:55 GMT</pubDate>
      <guid>https://community.intel.com/t5/Software-Archive/Change-pointer-value-inside-offload-region/m-p/956190#M20879</guid>
      <dc:creator>pbkenned1</dc:creator>
      <dc:date>2013-10-15T21:39:55Z</dc:date>
    </item>
    <item>
      <title>Thanks Patrick and jim. Does</title>
      <link>https://community.intel.com/t5/Software-Archive/Change-pointer-value-inside-offload-region/m-p/956191#M20880</link>
      <description>&lt;P&gt;Thanks Patrick and jim. Does this mean offload will only bind the memory address of host and MIC? No matter how I manipulating the pointer inside offload region, compiler will still copy in/out according to the address specified in the directive?&lt;/P&gt;</description>
      <pubDate>Wed, 16 Oct 2013 02:44:24 GMT</pubDate>
      <guid>https://community.intel.com/t5/Software-Archive/Change-pointer-value-inside-offload-region/m-p/956191#M20880</guid>
      <dc:creator>Jun_Z_2</dc:creator>
      <dc:date>2013-10-16T02:44:24Z</dc:date>
    </item>
    <item>
      <title>The "useless" case I was</title>
      <link>https://community.intel.com/t5/Software-Archive/Change-pointer-value-inside-offload-region/m-p/956192#M20881</link>
      <description>&lt;P&gt;The "useless" case I was illustrating was essentially passing intptr_t integers into and out of the offload region.&lt;/P&gt;
&lt;P&gt;Jim Dempsey&lt;/P&gt;</description>
      <pubDate>Wed, 16 Oct 2013 12:50:01 GMT</pubDate>
      <guid>https://community.intel.com/t5/Software-Archive/Change-pointer-value-inside-offload-region/m-p/956192#M20881</guid>
      <dc:creator>jimdempseyatthecove</dc:creator>
      <dc:date>2013-10-16T12:50:01Z</dc:date>
    </item>
  </channel>
</rss>

