2013-03-11 4 views
1

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

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

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

У кого-нибудь есть некоторые решения?

Спасибо!

+0

, что команда, которую вы используете, чтобы связать код? Какой язык и компилятор хоста вы используете? – talonmies

+0

$ cap capsmc --openacc-target CUDA --io-report -Xnvcc -arch = sm_13 -c --force gcc -std = c99 -L/usr/include/math.h compute_fluxes.c -o cf.13 – YuanZheCSYZ

+0

Код реализован в C, gcc – YuanZheCSYZ

ответ

0

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

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 фактически связывает со стандартной математической библиотеки)

1

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

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

#pragma acc routine(sqrt) seq