<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal" style="margin-bottom:12.0pt">int a;<br>
#pragma omp declare target to (a)<o:p></o:p></p>
<p class="MsoNormal" style="margin-bottom:12.0pt">int main() {<br>
     #pragma omp target<br>
           a = 10;<br>
      #pragma omp target update from(a)<br>
}<o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> Alexey Bataev [mailto:a.bataev@hotmail.com]
<br>
<b>Sent:</b> Thursday, August 8, 2019 7:29 PM<br>
<b>To:</b> Itaru Kitayama <itaru.kitayama@gmail.com><br>
<b>Cc:</b> Narayanaswamy, Ravi <ravi.narayanaswamy@intel.com>; Doerfert, Johannes <jdoerfert@anl.gov>; openmp-dev@lists.llvm.org<br>
<b>Subject:</b> Re: [Openmp-dev] Mapping of non-trivial type support<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-bottom:12.0pt">It is applied only to global vars in the file/namespace scope.<o:p></o:p></p>
<div id="AppleMailSignature">
<p class="MsoNormal">Best regards, <o:p></o:p></p>
<div>
<p class="MsoNormal">Alexey Bataev<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
8 авг. 2019 г., в 21:37, Itaru Kitayama <<a href="mailto:itaru.kitayama@gmail.com">itaru.kitayama@gmail.com</a>> написал(а):<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">$ cat test.cpp<br>
int main() {<br>
int a;<br>
#pragma omp declare target to (a)<o:p></o:p></p>
<div>
<p class="MsoNormal">}<o:p></o:p></p>
</div>
<p class="MsoNormal">$ clang++ -fopenmp -fopenmp-targets=nvptx64 test.cpp<br>
test.cpp:3:21: error: unexpected OpenMP directive '#pragma omp declare target'<br>
#pragma omp declare target to (a)<br>
                    ^<o:p></o:p></p>
<div>
<p class="MsoNormal">1 error generated.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Tested with the latest trunk Clang on POWER8.<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">On Fri, Aug 9, 2019 at 9:34 AM Alexey Bataev <<a href="mailto:a.bataev@hotmail.com">a.bataev@hotmail.com</a>> wrote:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<p class="MsoNormal">A a; <o:p></o:p></p>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">#pragma omp declare target to(a)<o:p></o:p></p>
<div id="gmail-m_7005959492949325783AppleMailSignature">
<p class="MsoNormal">Best regards, <o:p></o:p></p>
<div>
<p class="MsoNormal">Alexey Bataev<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
8 авг. 2019 г., в 20:31, Itaru Kitayama <<a href="mailto:itaru.kitayama@gmail.com" target="_blank">itaru.kitayama@gmail.com</a>> написал(а):<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal">Ravi, <o:p></o:p></p>
<div>
<p class="MsoNormal">Do you have a simple C++ code that does show how it is done? As I am still inserting a line<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">A a;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">#pragma omp target data map(alloc: a) <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">?<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">On Fri, Aug 9, 2019 at 8:28 AM Narayanaswamy, Ravi <<a href="mailto:ravi.narayanaswamy@intel.com" target="_blank">ravi.narayanaswamy@intel.com</a>> wrote:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<p class="MsoNormal">Correct.<br>
We are still working on supporting function pointers which should include support for virtual function.<br>
<br>
You can mark the class and object with declare target and use the object to invoke virtual function.<br>
Currently you cannot pass an object through the map clause and use virtual function with that object.<br>
<br>
-----Original Message-----<br>
From: Doerfert, Johannes [mailto:<a href="mailto:jdoerfert@anl.gov" target="_blank">jdoerfert@anl.gov</a>]
<br>
Sent: Thursday, August 8, 2019 4:24 PM<br>
To: Itaru Kitayama <<a href="mailto:itaru.kitayama@gmail.com" target="_blank">itaru.kitayama@gmail.com</a>><br>
Cc: Alexey Bataev <<a href="mailto:a.bataev@hotmail.com" target="_blank">a.bataev@hotmail.com</a>>;
<a href="mailto:openmp-dev@lists.llvm.org" target="_blank">openmp-dev@lists.llvm.org</a>; Narayanaswamy, Ravi <<a href="mailto:ravi.narayanaswamy@intel.com" target="_blank">ravi.narayanaswamy@intel.com</a>><br>
Subject: Re: [Openmp-dev] Mapping of non-trivial type support<br>
<br>
You mean, calling a virtual function of a mapped object?<br>
That is, as far as I know, not OpenMP 5.0. It might make it in 5.1 though.<br>
(Allocating the object on the device and then calling a virtual function should be fine though.)<br>
<br>
@Ravi Is this correct?<br>
<br>
________________________________________<br>
From: Itaru Kitayama <<a href="mailto:itaru.kitayama@gmail.com" target="_blank">itaru.kitayama@gmail.com</a>><br>
Sent: Thursday, August 8, 2019 18:15<br>
To: Doerfert, Johannes<br>
Cc: Alexey Bataev; <a href="mailto:openmp-dev@lists.llvm.org" target="_blank">openmp-dev@lists.llvm.org</a><br>
Subject: Re: [Openmp-dev] Mapping of non-trivial type support<br>
<br>
In which issue the virtual function offloading feature support being worked on? I am not certain still after going over the OpenMP 5.0 features list.<br>
<br>
<br>
On Fri, Aug 9, 2019 at 2:32 AM Doerfert, Johannes <<a href="mailto:jdoerfert@anl.gov" target="_blank">jdoerfert@anl.gov</a><mailto:<a href="mailto:jdoerfert@anl.gov" target="_blank">jdoerfert@anl.gov</a>>> wrote:<br>
Itaru, a webpage with implementation status details is in the works,<br>
  <a href="https://reviews.llvm.org/D64375" target="_blank">https://reviews.llvm.org/D64375</a><br>
but it seems hard to agree on an initial version.<br>
<br>
On 08/05, Itaru Kitayama via Openmp-dev wrote:<br>
> Alexey et al.,<br>
> What's the plan for OpenMP 5.0 API adoption in Clang? Would you point <br>
> me to a link to an appropriate web page?<br>
> Is there an OpenMP 5.0 API work-in-progress branch which I can give it <br>
> a try?<br>
><br>
> On Sun, Aug 4, 2019 at 8:57 PM Alexey Bataev <<a href="mailto:a.bataev@hotmail.com" target="_blank">a.bataev@hotmail.com</a><mailto:<a href="mailto:a.bataev@hotmail.com" target="_blank">a.bataev@hotmail.com</a>>> wrote:<br>
><br>
> > clang works in accordance with the standard. Standard says that <br>
> > mapping is performed as bitwise copy of the objects. You can perform <br>
> > the bitwise copy safely only for the trivial types.<br>
> > You cannot simply map a vector. You need to convert it to C/C++ <br>
> > array at first.<br>
> > OpenMP 5.0 introduced user-defined mappers to solve the problem of <br>
> > non-trivial types mapping, which are not supported by clang yet. <br>
> > We're working on this feature.<br>
> ><br>
> > Best regards,<br>
> > Alexey Bataev<br>
> ><br>
> > > 4 авг. 2019 г., в 1:16, Itaru Kitayama via Openmp-dev <<br>
> > <a href="mailto:openmp-dev@lists.llvm.org" target="_blank">openmp-dev@lists.llvm.org</a><mailto:<a href="mailto:openmp-dev@lists.llvm.org" target="_blank">openmp-dev@lists.llvm.org</a>>> написал(а):<br>
> > ><br>
> > > Hi,<br>
> > > This simple code:<br>
> > ><br>
> > > int main() {<br>
> > ><br>
> > > std::vector<int> v(100, 0);<br>
> > > #pragma omp target teams distribute parallel for map(tofrom: v)<br>
> > >    for (int i=0;i<100;i++) {<br>
> > >         v[i] =i;<br>
> > >    }<br>
> > > };<br>
> > ><br>
> > > causes Clang to warn a message like:<br>
> > ><br>
> > > vectormap.cpp:31:62: warning: Non-trivial type 'std::vector<int>' <br>
> > > is<br>
> > mapped, only trivial types are guaranteed to be mapped correctly <br>
> > [-Wopenmp-target]<br>
> > > #pragma omp target teams distribute parallel for map(tofrom: v)<br>
> > ><br>
> > >                                    ^<br>
> > > 1 warning generated.<br>
> > ><br>
> > > ... and encounters an issue at run time. How much non-trivial <br>
> > > types are supported in trunk Clang?<br>
> > > _______________________________________________<br>
> > > Openmp-dev mailing list<br>
> > > <a href="mailto:Openmp-dev@lists.llvm.org" target="_blank">Openmp-dev@lists.llvm.org</a><mailto:<a href="mailto:Openmp-dev@lists.llvm.org" target="_blank">Openmp-dev@lists.llvm.org</a>><br>
> > > <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/openmp-dev" target="_blank">
https://lists.llvm.org/cgi-bin/mailman/listinfo/openmp-dev</a><br>
> ><br>
<br>
> _______________________________________________<br>
> Openmp-dev mailing list<br>
> <a href="mailto:Openmp-dev@lists.llvm.org" target="_blank">Openmp-dev@lists.llvm.org</a><mailto:<a href="mailto:Openmp-dev@lists.llvm.org" target="_blank">Openmp-dev@lists.llvm.org</a>><br>
> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/openmp-dev" target="_blank">
https://lists.llvm.org/cgi-bin/mailman/listinfo/openmp-dev</a><br>
<br>
<br>
--<br>
<br>
Johannes Doerfert<br>
Researcher<br>
<br>
Argonne National Laboratory<br>
Lemont, IL 60439, USA<br>
<br>
<a href="mailto:jdoerfert@anl.gov" target="_blank">jdoerfert@anl.gov</a><mailto:<a href="mailto:jdoerfert@anl.gov" target="_blank">jdoerfert@anl.gov</a>><o:p></o:p></p>
</blockquote>
</div>
</div>
</blockquote>
</div>
</div>
</blockquote>
</div>
</div>
</blockquote>
</div>
</body>
</html>