Многие системные вызовы недоступны на устройстве.Хотя вы можете заменить «calloc» на «malloc», который есть в наличии, я бы настоятельно рекомендовал не размещать его внутри кода устройства.Помимо очень медленной, куча устройства довольно мала (~ 32 МБ).Вам будет лучше, если вы сможете реорганизовать свой алгоритм, чтобы динамически не распределять данные на устройстве.
Для «rand» вы захотите вызвать «cuRand».Если вы используете PGI, мы отправляем примеры того, как вызывать cuRand, в каталоге "$ PGI / 2018 / examples / CUDA-Libraries / curand".Обратите внимание, что 'rand' не является потокобезопасным, поэтому его не следует использовать в параллельном контексте, хосте или устройстве.