Quantcast
Channel: Intel® C++ Compiler
Viewing all articles
Browse latest Browse all 1616

OpenMP map(alloc) not working for arrays (SIGSEGV)

$
0
0

I'm trying to use local arrays in an OMP target region. If its size is dependent on a variable, the device will crash with a SIGSEGV "offload error: process on the device 0 was terminated by signal 11 (SIGSEGV)"

Code: 

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[]) {
  {
    int size=argc*100000;
    int ar[size];
    int ar2[100000];
    printf("Size host %lld %lld\n",sizeof(ar),sizeof(ar2));
    #pragma omp target map(alloc:ar,ar2)
      printf("Size device %lld %lld\n",sizeof(ar),sizeof(ar2));
    printf("Size worked\n");

    #pragma omp target map(alloc:ar2)
      ar2[size-1]=55;
    printf("Static worked\n");

    #pragma omp target map(alloc:ar)
      ar[size-1]=55;
    printf("Dynamic worked\n");
  }

  return EXIT_SUCCESS;
}

If you run this you get the output:

Size host 400000 400000
Size worked
Static worked
offload error: process on the device 0 was terminated by signal 11 (SIGSEGV)

Strangely: You can access lower entries (e.g. ar[0], ar[1]...) without problems (not sure if they are valid though) and using "10000" as the size does work (at least without a crash). Also doubling the size of ar2 works. Is this a compiler bug or do I have to use this as an array section? If so, can you point me to the OMP spec where this is explained?


Viewing all articles
Browse latest Browse all 1616

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>