<div dir="ltr"><div>2. Yes. I forgot that I changed the static array to dynamic. So my mapping is wrong. I just changed it to the format like x[:N], but the error still occurred.</div><div><br></div><div>I'll search more to see if it's due to cuda 10.2. Thanks!<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Alexey.Bataev <<a href="mailto:a.bataev@outlook.com">a.bataev@outlook.com</a>> 于2020年3月5日周四 下午2:31写道:<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>
<p>There are several issues with your code.</p>
<p>1. There are some issues with cuda 10.2, clang does not support
it in full yet. There were discussions about how to support it,
you can search the list.</p>
<p>2. Seems to me, the example is not correct. You need to map array
sections, like map(x[:N], y[:n], z[:N]), otherwise the memory
allocated for the arrays won't be mapped correctly, only pointers
are mapped.<br>
</p>
<pre cols="72">-------------
Best regards,
Alexey Bataev</pre>
<div>05.03.2020 3:22 PM, G Zhao пишет:<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div>Yeah, the example code is below:</div>
<div><br>
</div>
<div> int N = 1<<20;<br>
<br>
float *x = new float[N];<br>
float *y = new float[N];<br>
<br>
for (int i = 0; i < N; i++) {<br>
x[i] = 1.0f;<br>
y[i] = 2.0f;<br>
}<br>
<br>
float *z = new float[N];<br>
int i;<br>
#pragma omp target map(x, y, z)<br>
#pragma omp parallel for<br>
for (i=0; i < N; i++) {<br>
z[i] = x[i] + y[i];<br>
}</div>
<div><br>
</div>
<div>I just grab a piece of code from <a href="https://www.openmp.org/wp-content/uploads/openmp-examples-4.5.0.pdf" target="_blank">https://www.openmp.org/wp-content/uploads/openmp-examples-4.5.0.pdf</a>
for testing. I also tested other examples in that document,
but none worked. Initially, I was working on a piece of code
from a legacy project.</div>
<div><br>
</div>
<div>BTW, when I compiled the example code, I got some warnings:</div>
<div><br>
</div>
<div>clang-11: warning: Unknown CUDA version 10.2. Assuming the
latest supported version 10.1 [-Wunknown-cuda-version]<br>
clang-11: warning: Unknown CUDA version 10.2. Assuming the
latest supported version 10.1 [-Wunknown-cuda-version]<br>
clang-11: warning: No library 'libomptarget-nvptx-sm_35.bc'
found in the default clang lib directory or in LIBRARY_PATH.
Expect degraded performance due to no inlining of runtime
functions on target devices. [-Wopenmp-target]</div>
<div><br>
</div>
<div>I am not sure if the error is caused by the newer CUDA
version (I thought 10.2 should be compatible with 10.1)</div>
<div><br>
</div>
<div>Thanks!</div>
<div><br>
</div>
<div>Gang Zhao<br>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">Alexey.Bataev <<a href="mailto:a.bataev@outlook.com" target="_blank">a.bataev@outlook.com</a>>
于2020年3月5日周四 下午12:59写道:<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>
<p>Could you provide an example how do you map the data in
the target region?<br>
</p>
<pre cols="72">-------------
Best regards,
Alexey Bataev</pre>
<div>05.03.2020 1:45 PM, G Zhao пишет:<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div>Thanks! I didn't notice this. The code is from a
legacy project and I just checked all the target
regions. It did use STL vectors. I just replaced all
those vectors with arrays. Now it can successfully
compile. But When I run it, there is another error:</div>
<div><br>
</div>
<div>Libomptarget fatal error 1: failure of target
construct while offloading is mandatory</div>
<div><br>
</div>
<div>I tried it on a simple vector add example, and got
the same error.</div>
<div><br>
</div>
<div>Below is the debug information with
LIBOMPTARGET_DEBUG=1:</div>
<div><br>
</div>
<div>Libomptarget --> Loading RTLs...<br>
Libomptarget --> Loading library '<a href="http://libomptarget.rtl.ppc64.so" target="_blank">libomptarget.rtl.ppc64.so</a>'...<br>
Libomptarget --> Unable to load library '<a href="http://libomptarget.rtl.ppc64.so" target="_blank">libomptarget.rtl.ppc64.so</a>':
<a href="http://libomptarget.rtl.ppc64.so" target="_blank">libomptarget.rtl.ppc64.so</a>:
cannot open shared object file: No such file or
directory!<br>
Libomptarget --> Loading library '<a href="http://libomptarget.rtl.x86_64.so" target="_blank">libomptarget.rtl.x86_64.so</a>'...<br>
Libomptarget --> Successfully loaded library '<a href="http://libomptarget.rtl.x86_64.so" target="_blank">libomptarget.rtl.x86_64.so</a>'!<br>
Libomptarget --> Registering RTL <a href="http://libomptarget.rtl.x86_64.so" target="_blank">libomptarget.rtl.x86_64.so</a>
supporting 4 devices!<br>
Libomptarget --> Loading library '<a href="http://libomptarget.rtl.cuda.so" target="_blank">libomptarget.rtl.cuda.so</a>'...<br>
Target CUDA RTL --> Start initializing CUDA<br>
Libomptarget --> Successfully loaded library '<a href="http://libomptarget.rtl.cuda.so" target="_blank">libomptarget.rtl.cuda.so</a>'!<br>
Libomptarget --> Registering RTL <a href="http://libomptarget.rtl.cuda.so" target="_blank">libomptarget.rtl.cuda.so</a>
supporting 1 devices!<br>
Libomptarget --> Loading library '<a href="http://libomptarget.rtl.aarch64.so" target="_blank">libomptarget.rtl.aarch64.so</a>'...<br>
Libomptarget --> Unable to load library '<a href="http://libomptarget.rtl.aarch64.so" target="_blank">libomptarget.rtl.aarch64.so</a>':
<a href="http://libomptarget.rtl.aarch64.so" target="_blank">libomptarget.rtl.aarch64.so</a>:
cannot open shared object file: No such file or
directory!<br>
Libomptarget --> RTLs loaded!<br>
Libomptarget --> Image 0x000000000041ad20 is NOT
compatible with RTL <a href="http://libomptarget.rtl.x86_64.so" target="_blank">libomptarget.rtl.x86_64.so</a>!<br>
Libomptarget --> Image 0x000000000041ad20 is
compatible with RTL <a href="http://libomptarget.rtl.cuda.so" target="_blank">libomptarget.rtl.cuda.so</a>!<br>
Libomptarget --> RTL 0x00000000015b3c40 has index
0!<br>
Libomptarget --> Registering image
0x000000000041ad20 with RTL <a href="http://libomptarget.rtl.cuda.so" target="_blank">libomptarget.rtl.cuda.so</a>!<br>
Libomptarget --> Done registering entries!<br>
Libomptarget --> Call to omp_get_num_devices
returning 1<br>
Libomptarget --> Default TARGET OFFLOAD policy is
now mandatory (devices were found)<br>
Libomptarget --> Checking whether device 0 is
ready.<br>
Libomptarget --> Is the device 0 (local ID 0)
initialized? 0<br>
Target CUDA RTL --> Init requires flags to 1<br>
Target CUDA RTL --> Getting device 0<br>
Target CUDA RTL --> Max CUDA blocks per grid
2147483647 exceeds the hard team limit 65536, capping
at the hard limit<br>
Target CUDA RTL --> Using 1024 CUDA threads per
block<br>
Target CUDA RTL --> Max number of CUDA blocks
65536, threads 1024 & warp size 32<br>
Target CUDA RTL --> Default number of teams set
according to library's default 128<br>
Target CUDA RTL --> Default number of threads set
according to library's default 128<br>
Libomptarget --> Device 0 is ready to use.<br>
Target CUDA RTL --> Load data from image
0x000000000041ad20<br>
Target CUDA RTL --> Error when loading CUDA module<br>
Target CUDA RTL --> CUDA error is: device kernel
image is invalid<br>
Libomptarget --> Unable to generate entries table
for device id 0.<br>
Libomptarget --> Failed to init globals on device 0<br>
Libomptarget --> Failed to get device 0 ready<br>
Libomptarget fatal error 1: failure of target
construct while offloading is mandatory<br>
Libomptarget --> Unloading target library!<br>
Libomptarget --> Image 0x000000000041ad20 is
compatible with RTL 0x00000000015b3c40!<br>
Libomptarget --> Unregistered image
0x000000000041ad20 from RTL 0x00000000015b3c40!<br>
Libomptarget --> Done unregistering images!<br>
Libomptarget --> Removing translation table for
descriptor 0x0000000000440810<br>
Libomptarget --> Done unregistering library!<br>
Libomptarget --> Deinit target library!<br>
</div>
<div><br>
</div>
<div>Any hints about this? <br>
</div>
<div><br>
</div>
<div>Regards,</div>
<div>Gang Zhao<br>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">Alexey Bataev <<a href="mailto:a.bataev@hotmail.com" target="_blank">a.bataev@hotmail.com</a>>
于2020年3月5日周四 上午5:44写道:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Neither libc++,
nor libstdc++ cannot be linked with nvlink. NVidia
does not provide implementations for either libc++,
or libstdc++. You must exclude the use of the
standard c++ library from target regions.<br>
<br>
Best regards,<br>
Alexey Bataev<br>
<br>
> 5 марта 2020 г., в 00:25, G Zhao via Openmp-dev
<<a href="mailto:openmp-dev@lists.llvm.org" target="_blank">openmp-dev@lists.llvm.org</a>>
написал(а):<br>
> <br>
> <br>
> Hi,<br>
> <br>
> I just compiled LLVM and enable NVPTX by
-DLLVM_TARGETS_TO_BUILD="X86;NVPTX". But when I
compiled my code using the below command:<br>
> <br>
> clang++ main.cpp -fopenmp
-fopenmp-targets=nvptx64-nvidia-cuda -o a_gpu.exe<br>
> <br>
> I got the below error:<br>
> <br>
>
/usr/lib64/gcc/x86_64-pc-linux-gnu/9.2.1/../../../../include/c++/9.2.1/bits/std_abs.h:75:3:
error: declaration conflicts with target of using
declaration already in scope<br>
> abs(float __x)<br>
> <br>
> I think the reason is I am using GCC-9. I did a
bit search and someone said using libc++ can address
this. So I compiled libcxx and libcxxabi, and used
the below command to compile my code again:<br>
> <br>
> clang++ stdlib=libc++ main.cpp -fopenmp
-fopenmp-targets=nvptx64-nvidia-cuda -o a_gpu.exe<br>
> <br>
> I got different errors:<br>
> <br>
> nvlink error : Undefined reference to
'_ZNKSt3__120__vector_base_commonILb1EE20__throw_length_errorEv'
in '/tmp/main-42e0a6.cubin'<br>
> nvlink error : Undefined reference to 'abort'
in '/tmp/main-42e0a6.cubin'<br>
> <br>
> I think the reason here is nvlink don't know we
should link libc++ with those cubin files together.
But I don't know how to solve this.<br>
> <br>
> Any one know a workaround to this?<br>
> <br>
> Thanks!<br>
> <br>
> <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><br>
> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/openmp-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/openmp-dev</a><br>
</blockquote>
</div>
</div>
</blockquote>
</div>
</blockquote>
</div>
</blockquote>
</div>
</blockquote></div>