Отладка разгрузки расширения OpenMP Python C - PullRequest
0 голосов
/ 24 сентября 2019

Я использую набор инструментов для моделирования Anuga и настроил его для работы с поддержкой параллельный .Насколько мне известно, механизм заключается в том, что Numpy расширяется модулями в C, которые подвергаются OpenMP через

extra_args = ['-fopenmp']

Я разработал и протестировалскрипт для запуска через mpirun -np 4 python <myscript.py> и все работает.Поскольку модели становятся больше, мой интерес заключается в том, чтобы перенести некоторую обработку на графический процессор в физической форме графического процессора NVIDIA через OpenMP.Я читал об этом, называемом Разгрузкой.Я установил Quadro K2000 с

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.56       Driver Version: 418.56       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Quadro K2000        Off  | 00000000:01:00.0  On |                  N/A |
| 32%   48C    P8    N/A /  N/A |    403MiB /  1999MiB |      4%      Default |
+-------------------------------+----------------------+----------------------+

Итак, я

  1. установил gcc-offload-nvptx на мою Ubuntu 19.04, которая читает версию 8 gcc.Затем я

  2. изменил флаги компилятора на

extra_args = ['-fopenmp', '-fstack-protector']

и

скомпилировал установку через python setup.py build.Это возвращает следующее сообщение для целевого модуля cg_ext.c без дальнейших ошибок:

x86_64-linux-gnu-gcc -pthread -shared -Wl, -O1 -Wl, -Bsymbolic-функции -Wl, -Bsymbolic-функции -Wl, -z, relro -fno-строго-псевдонимы -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -Wdate-time -D_FORTIFY_SOURCE = 2 -g -fdebug-prefix-map = / сборки / python2.7-rzpqx3 / python2.7-2.7.16 =.-fstack-protector-strong -Wformat -Werror = format-security -Wl, -Bsymbolic-functions -Wl, -z, relro -Wdate-time -D_FORTIFY_SOURCE = 2 -g -fdebug-prefix-map = / build / python2.7-rzpqx3 / python2.7-2.7.16 =.-fstack-protector-strong -Wformat -Werror = формат безопасности безопасности build / temp.linux-x86_64-2.7 / anuga / utilities / cg_ext.o -Lbuild / temp.linux-x86_64-2.7 -o build / lib.linux-x86_64-2.7 / anuga / utilities / cg_ext.so -fopenmp -fstack-protector

Когда

Я проверяю скомпилированную библиотеку с помощью ldd Я получаю

build / lib.linux-x86_64-2.7 / anuga / utilities / cg_ext.so linux-vdso.so.1 (0x00007fff7a9fa000) libgomp.so.1 => /usr/lib/x86_64-linux-gnu/libgomp.so.1 (0x00007f0650502000)
libc.so.6 => / lib / x86_64-linux-gnu / libc.so.6 (0x00007f0650317000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f0650311000)
libpthread.so.0 => / lib / x86_64-linux-gnu / libpthread.so.0 (0x00007f06502f0000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0650606000)

, поэтому я предполагаю, что все настроено правильно.Теперь я перехожу к

изменив прагматические комментарии к одной подпрограмме следующим образом:

до:

void cg_daxpy(int N, double a, double *x, double *y)
{
  int i;
  #pragma omp parallel for private(i)
  for(i=0;i<N;i++)
  {
    y[i]=y[i]+a*x[i];
  }
}

после:

void cg_daxpy(int N, double a, double *x, double *y)
{
  int i;
  #pragma omp target device(0)
  {
  #pragma omp parallel for
  for(i=0;i<N;i++)
  {
    y[i]=y[i]+a*x[i];
  }
  }
}

Затем я перекомпилирую установку изапустите мой скрипт следующим образом в надежде получить информацию о профилировании:

nvprof --print-gpu-trace --profile-child-processes --profile-from-start off -fo %p.nvprof python -m cProfile runDamBreak.py

Это возвращает сообщение

==19444== Profiling application: orted --hnp --set-sid --report-uri 14 --singleton-died-pipe 15 -mca state_novm_select 1 -mca ess hnp -mca pmix ^s1,s2,cray,isolated
==19444== Profiling result:
No kernels were profiled.

Итак, в заключение я понимаю, что прагмы понятны компилятору, ноСегменты не отправляются в GPU.Будем очень благодарны за любые советы по дальнейшей отладке.

С наилучшими пожеланиями

Себастьян

...