Неразрешенная внешняя функция OpenACC - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь оптимизировать проблему с помощью OpenACC, однако, есть некоторые основные функции, которые задаются как подпрограммы. Основная проблема, с которой я сталкиваюсь, связана с функцией calloc, в которой в конце отображается следующая ошибка:

ptxas fatal: Нерешенная внешняя функция 'calloc'

Используемая команда для компиляции:

pgcc acc.c -acc -Minfo=accel -ta=nvidia:cc60,nordc -o acc

Ранее я пытался без флага nordc, однако возникла эта ошибка:

Ошибка nvlink: неопределенная ссылка на 'calloc' в /tmp/pgccqWXdW9NTZXUL.o'

Ошибка nvlink: неопределенная ссылка на 'rand' в /tmp/pgccqWXdW9NTZXUL.o

1 Ответ

0 голосов
/ 13 апреля 2019

Многие системные вызовы недоступны на устройстве.Хотя вы можете заменить «calloc» на «malloc», который есть в наличии, я бы настоятельно рекомендовал не размещать его внутри кода устройства.Помимо очень медленной, куча устройства довольно мала (~ 32 МБ).Вам будет лучше, если вы сможете реорганизовать свой алгоритм, чтобы динамически не распределять данные на устройстве.

Для «rand» вы захотите вызвать «cuRand».Если вы используете PGI, мы отправляем примеры того, как вызывать cuRand, в каталоге "$ PGI / 2018 / examples / CUDA-Libraries / curand".Обратите внимание, что 'rand' не является потокобезопасным, поэтому его не следует использовать в параллельном контексте, хосте или устройстве.

...