<div dir="ltr"><div dir="ltr"><div>Thanks, Ravi, Georgios.  I'll work on that.</div><div><br></div><div>Joel<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Mar 3, 2021 at 5:22 PM Rokos, Georgios <<a href="mailto:georgios.rokos@intel.com">georgios.rokos@intel.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div style="overflow-wrap: break-word;" lang="EN-US">
<div class="gmail-m_3881375980760791733WordSection1">
<p class="MsoNormal">Hi,<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">You’re right, CheckDeviceAndCtors should be called from __tgt_target_data_end_mapper as well, just like any other __tgt_* function. The reason it’s currently missing is that it was assumed (as you said) that an orphan “target exit data”
 directive would make no sense, in other words the device would have been initialized by some other __tgt_* function already. However, since the example you provided seems to be a valid OpenMP program, then we should add code to initialize the device even in
 __tgt_target_data_end_mapper.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">George<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div style="border-color:rgb(225,225,225) currentcolor currentcolor;border-style:solid none none;border-width:1pt medium medium;padding:3pt 0in 0in">
<p class="MsoNormal"><b>From:</b> Joel E. Denny <<a href="mailto:jdenny.ornl@gmail.com" target="_blank">jdenny.ornl@gmail.com</a>> <br>
<b>Sent:</b> Wednesday, 3 March, 2021 23:57<br>
<b>To:</b> <a href="mailto:openmp-dev@lists.llvm.org" target="_blank">openmp-dev@lists.llvm.org</a><br>
<b>Cc:</b> Rokos, Georgios <<a href="mailto:georgios.rokos@intel.com" target="_blank">georgios.rokos@intel.com</a>>; Narayanaswamy, Ravi <<a href="mailto:ravi.narayanaswamy@intel.com" target="_blank">ravi.narayanaswamy@intel.com</a>>; Johannes Doerfert <<a href="mailto:johannesdoerfert@gmail.com" target="_blank">johannesdoerfert@gmail.com</a>><br>
<b>Subject:</b> lone "omp target exit data" produces runtime error<u></u><u></u></p>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">Hi,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">The following program produces an OpenMP runtime error.  LIBOMPTARGET_DEBUG=1 reveals that the problem is that the device is uninitialized.  Is this behavior specified by OpenMP?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">```<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">int main() {<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">  int x;<u></u><u></u></p>
</div>
<p class="MsoNormal">  #pragma omp target exit data map(from:x)<br>
  return 0;<u></u><u></u></p>
<div>
<p class="MsoNormal">}<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">```<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I'm not sure how it's useful to have an "omp target exit data" before any other offloading code.  I've only run into this when writing toy test programs, and my solution has been to add an empty target region before it.  Also, in the call
 today I mentioned I'd like to encapsulate more code into <span class="gmail-m_3881375980760791733gmail-transaction-comment">
CheckDeviceAndCtors.  It looks like __tgt_target_data_end_mapper could benefit from that encapsulation except it doesn't currently call CheckDeviceAndCtors.  If it did call it, the above program would succeed.</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><span class="gmail-m_3881375980760791733gmail-transaction-comment">Thanks.</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><span class="gmail-m_3881375980760791733gmail-transaction-comment">Joel</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
</div>
</div>

</blockquote></div></div>