Разгрузка OpenMP в динамической библиотеке не компилируется

Я хочу скомпилировать код C с разгрузкой OpenMP и создать динамическую библиотеку libtest.so. Когда я использую следующую команду:

gcc -fPIC -shared -fopenmp -foffload=nvptx-none="-fPIC" test.c -o libtest.so

Я получаю эту ошибку:

/usr/bin/ld: /tmp/ccWnqb5o.target.o: relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
collect2: error: ld returned 1 exit status

Версия GCC 10.2.0. Я не уверен, что я делаю неправильно, так как -fPIC включен в команду. Интересно, возможно ли вообще делать то, что я хочу?

Мой источник test.c просто проверяет, работает ли разгрузка:

#include <omp.h>
#include <stdio.h>

void test()
{
  #pragma omp target teams
  {
    if (omp_is_initial_device())
      printf("on host\n");
    else
      printf("on target device\n");
  }
}

person Benjamin Maier    schedule 11.01.2021    source источник
comment
Это было случай и для Intel MIC. Я предполагаю, что аналогичная проблема существует в библиотеке разгрузки PTX.   -  person Hristo Iliev    schedule 11.01.2021


Ответы (1)


Я говорил с разработчиками GCC, и это похоже на ошибку. Кажется, они решили эту проблему для GCC 11, но исправление не было перенесено. См. https://gcc.gnu.org/g:a8b522311beef5e02de15427e924752ea02def2a для получения дополнительной информации.

person Michael Klemm    schedule 12.01.2021
comment
Спасибо за информацию и ссылку. Я смог применить изменения к локальной сборке GCC 10.2 на наших вычислительных серверах, что сейчас подходит для моих целей. Так что я просто подожду релиза GCC 11. - person Benjamin Maier; 13.01.2021