OpenACC использует библиотеку math.h

Привет, я использовал компиляторы CAPS OpenACC, но, похоже, компилятор не может связать функции со стандартным math.h.

На самом деле, в моем случае, функция sqrt используется в моем коде в цикле ускорения. Когда я компилирую код, выдается ошибка ниже:

/tmp/cc8L0aKZ.o:compute_fluxes_XrxAnW.translated.i:function _flux_function_central: error: undefined reference to 'sqrt'

Кто-нибудь получить какие-то решения?

Спасибо!

3 ответа

Весь код акселератора должен быть помечен как таковой с помощью обычной директивы. В противном случае компилятор не сгенерирует код устройства для него. У PGI есть статья, объясняющая, как с этим бороться.

Вы можете прочитать статью или просто попробовать добавить следующее с другими объявлениями верхнего уровня в вашем коде:

#pragma acc routine(sqrt) seq

Пожалуйста, повторите с

caps capsmc --openacc-target CUDA --io-report -Xnvcc -arch=sm_13 -c --force gcc -std=c99 -L/usr/include/math.h **-lm** compute_fluxes.c -o cf.13

(-lm собственно ссылки со стандартной математической библиотекой)

Приведенная ниже простая программа компилируется и отлично работает на последней версии Nvidia HPC SDK 22.7 без каких-либо дополнительных настроек.routineдирективы или дополнительные флаги компиляции.

      $ pgc++ -acc -gpu=managed -Minfo=all sqrt-acc.cpp -o sqrt-acc.out && ./sqrt-acc.out

Программа сsqrt

      #include <math.h>
#include <iostream>
using namespace std;
int main(int argc, char* argv[]){
  int n = 100000;
  double* d = (double*) malloc (sizeof(double) *n);
  double* s = (double*) malloc (sizeof(double) *n);
  
  #pragma acc data create(d[:n], s[:n]) copyout(s[0:n])  
  {
    #pragma acc parallel loop 
    for (unsigned i = 0; i < n; ++i) {
      d[i] = i;
    }
      
    
    #pragma acc parallel loop 
    for (unsigned i = 1; i < n; ++i) {
      s[i] = sqrt(d[i]);
    }
  }
  
  for (unsigned i = 0; i < 10; ++i) {
    std::cout<< i << ": " << s[i] << '\n';
  }
  return 0;
}

Выход.

      0: 0
1: 1
2: 1.41421
3: 1.73205
4: 2
5: 2.23607
6: 2.44949
7: 2.64575
8: 2.82843
9: 3

Другие вопросы по тегам