[Openmp-dev] CUDA error is: device kernel image is invalid
Itaru Kitayama via Openmp-dev
openmp-dev at lists.llvm.org
Sun Dec 13 01:12:09 PST 2020
Here's the backtrace of the app.
(gdb) r
Starting program: /p/project/cjzam11/kitayama1/a.out
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib64/libthread_db.so.1".
Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()
(gdb) where
#0 0x0000000000000000 in ?? ()
#1 0x00001555555380f9 in RTLsTy::LoadRTLs() ()
from /p/project/cjzam11/kitayama1/projects/spack/opt/spack/linux-centos8-zen2/gcc-9.3.0/llvm-master-wbxxqwlovyuijyspx4beh4yn7lsxkcfu/lib/libomptarget.so
#2 0x000015555547c269 in std::__1::__call_once(unsigned long
volatile&, void*, void (*)(void*)) ()
from /p/project/cjzam11/kitayama1/projects/spack/opt/spack/linux-centos8-zen2/gcc-9.3.0/llvm-master-wbxxqwlovyuijyspx4beh4yn7lsxkcfu/lib/libc++.so.1
#3 0x0000155555538f02 in RTLsTy::RegisterLib(__tgt_bin_desc*) ()
from /p/project/cjzam11/kitayama1/projects/spack/opt/spack/linux-centos8-zen2/gcc-9.3.0/llvm-master-wbxxqwlovyuijyspx4beh4yn7lsxkcfu/lib/libomptarget.so
#4 0x0000000000401120 in omp_offloading.descriptor_reg ()
#5 0x000000000040208d in __libc_csu_init ()
#6 0x000015555410a62e in __libc_start_main () from /usr/lib64/libc.so.6
#7 0x000000000040117e in _start ()
On Sun, Dec 13, 2020 at 5:52 PM Itaru Kitayama <itaru.kitayama at gmail.com> wrote:
>
> Hi,
> On JURECA-DC at JSC, I am seeing a run-time error like below:
>
> Libomptarget --> Init target library!
> Libomptarget --> Loading RTLs...
> Libomptarget --> Loading library 'libomptarget.rtl.ppc64.so'...
> Libomptarget --> Unable to load library 'libomptarget.rtl.ppc64.so':
> libomptarget.rtl.ppc64.so: cannot open shared object file: No such
> file or directory!
> Libomptarget --> Loading library 'libomptarget.rtl.x86_64.so'...
> Libomptarget --> Successfully loaded library 'libomptarget.rtl.x86_64.so'!
> Libomptarget --> Registering RTL libomptarget.rtl.x86_64.so supporting
> 4 devices!
> Libomptarget --> Loading library 'libomptarget.rtl.cuda.so'...
> Target CUDA RTL --> Start initializing CUDA
> Libomptarget --> Successfully loaded library 'libomptarget.rtl.cuda.so'!
> Libomptarget --> Registering RTL libomptarget.rtl.cuda.so supporting 4 devices!
> Libomptarget --> Loading library 'libomptarget.rtl.aarch64.so'...
> Libomptarget --> Unable to load library 'libomptarget.rtl.aarch64.so':
> libomptarget.rtl.aarch64.so: cannot open shared object file: No such
> file or directory!
> Libomptarget --> Loading library 'libomptarget.rtl.ve.so'...
> Libomptarget --> Unable to load library 'libomptarget.rtl.ve.so':
> libomptarget.rtl.ve.so: cannot open shared object file: No such file
> or directory!
> Libomptarget --> Loading library 'libomptarget.rtl.amdgpu.so'...
> Libomptarget --> Unable to load library 'libomptarget.rtl.amdgpu.so':
> libomptarget.rtl.amdgpu.so: cannot open shared object file: No such
> file or directory!
> Libomptarget --> RTLs loaded!
> Libomptarget --> Image 0x00000000004031e0 is NOT compatible with RTL
> libomptarget.rtl.x86_64.so!
> Libomptarget --> Image 0x00000000004031e0 is compatible with RTL
> libomptarget.rtl.cuda.so!
> Libomptarget --> RTL 0x00000000021f5910 has index 0!
> Libomptarget --> Registering image 0x00000000004031e0 with RTL
> libomptarget.rtl.cuda.so!
> Libomptarget --> Done registering entries!
> Libomptarget --> Call to omp_get_num_devices returning 4
> Libomptarget --> Default TARGET OFFLOAD policy is now mandatory
> (devices were found)
> Libomptarget --> Entering target region with entry point
> 0x0000000000403058 and device Id -1
> Libomptarget --> Checking whether device 0 is ready.
> Libomptarget --> Is the device 0 (local ID 0) initialized? 0
> Target CUDA RTL --> Init requires flags to 1
> Target CUDA RTL --> Getting device 0
> Target CUDA RTL --> The primary context is inactive, set its flags to
> CU_CTX_SCHED_BLOCKING_SYNC
> Target CUDA RTL --> Max CUDA blocks per grid 2147483647 exceeds the
> hard team limit 65536, capping at the hard limit
> Target CUDA RTL --> Using 1024 CUDA threads per block
> Target CUDA RTL --> Using warp size 32
> Target CUDA RTL --> Device supports up to 65536 CUDA blocks and 1024
> threads with a warp size of 32
> Target CUDA RTL --> Default number of teams set according to library's
> default 128
> Target CUDA RTL --> Default number of threads set according to
> library's default 128
> Libomptarget --> Device 0 is ready to use.
> Target CUDA RTL --> Load data from image 0x00000000004031e0
> Target CUDA RTL --> Error returned from cuModuleLoadDataEx
> Target CUDA RTL --> CUDA error is: device kernel image is invalid
> Libomptarget --> Unable to generate entries table for device id 0.
> Libomptarget --> Failed to init globals on device 0
> Libomptarget --> Failed to get device 0 ready
> Libomptarget error: run with env LIBOMPTARGET_INFO>1 to dump
> host-target pointer maps
> Libomptarget error: Build with debug information to provide more
> informationLibomptarget fatal error 1: failure of target construct
> while offloading is mandatory
> /var/spool/parastation/jobs/8813449: line 22: 22331 Aborted
> (core dumped) ./a.out
>
> Here's the sample code:
>
> #include <stdlib.h>
> #include <stdio.h>
> #include <unistd.h>
>
> #include <omp.h>
>
> static double inline calc_pi(size_t n)
> {
> double h = 1.0 / n;
> double sum = 0.0, x;
> size_t i;
>
> #pragma omp parallel for simd private(x) reduction(+:sum)
> for (i = 0; i < n; i++) {
> x = h * ((double) i + 0.5);
> sum += 4.0 / (1.0 + x * x);
> }
>
> return sum * h;
> }
> //#pragma omp declare target
> int t1(void) {
> printf("eeee\n");
> return 0;
> }
> //#pragma omp end declare target
> struct A {
>
> };
>
> const size_t N = 2000000000;
>
> int main()
> {
> double start, pi, end;
>
> #pragma omp target
> {}
>
> printf(">> host: start\n");
> start = omp_get_wtime();
> pi = calc_pi(N);
> end = omp_get_wtime();
> printf(">> host: pi = %f (%f ms)\n", pi, (end - start) * 1000);
>
> printf(">> target: start\n");
> start = omp_get_wtime();
>
> double h = 1.0 / N;
> double sum = 0.0, x;
> size_t i;
> #pragma omp target teams distribute parallel for simd
> private(x) map(sum) reduction(+:sum)
> for (i = 0; i < N; i++) {
> x = h * ((double) i + 0.5);
> sum += 4.0 / (1.0 + x * x);
> //t1();
> //struct A a;
> }
>
> pi = sum * h;
> end = omp_get_wtime();
> printf(">> target: pi = %f (%f ms)\n", pi, (end - start) * 1000);
>
> return EXIT_SUCCESS;
> }
More information about the Openmp-dev
mailing list