<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body bgcolor="#FFFFFF" text="#000000">
Hi,<br>
Most probably you forget to enclose definition of 'foo()' function in 'pragma omp declare target' region. You can do it like this:<br>
<br>
#pragma omp declare target<br>
void foo() {<br>
...<br>
}<br>
#pragma omp end declare target<br>
<br>
<br>
<pre class="moz-signature" cols="72">Best regards,
Alexey Bataev
=============
Software Engineer
Intel Compiler Team</pre>
<br>
<div class="moz-cite-prefix">11.03.2016 21:10, Ahmed ElTantawy via llvm-dev пишет:<br>
</div>
<blockquote cite="mid:%3CCANPV2MM9XL_hx7uHT+s++We4xu4nMp2V9wcv-icKkN6CgnhjuQ@mail.gmail.com%3E" type="cite">
<div dir="ltr">
<div>
<div>
<div>Hi,<br>
<br>
</div>
Using the flow described here: <a moz-do-not-send="true" href="https://parallel-computing.pro/index.php/9-cuda/43-openmp-4-0-on-nvidia-cuda-gpus">
https://parallel-computing.pro/index.php/9-cuda/43-openmp-4-0-on-nvidia-cuda-gpus</a>, I can compile and run OpenMP code on GPUs when the parallel region is self-contained (i.e., does not include calls to functions).<br>
<br>
<br>
</div>
When the parallel region includes a call to a function (e.g., foo()), I get this error.<br>
<br>
nvlink error   : Undefined reference to 'foo' in '/tmp/test.o-e8741d.cubin'<br>
<br>
<br>
</div>
<div>"foo" is indeed declared and defined in the same file before the main function, but clang driver does not include it in the final PTX file (test.s.tgt-nvptx64sm_30-nvidia-linux).
<br>
<br>
</div>
<div><br>
<br>
Using CUDA terminology, Is having "device functions" not supported yet in OpenMP ?<br>
<br>
<br>
</div>
<div>Thanks.<br>
</div>
<div>
<div><br>
<br>
</div>
</div>
</div>
</blockquote>
<br>
</body>
</html>