В here Роберт Кровелла сказал, что подпрограммы cublas можно вызывать из кода устройства. Хотя я использую динамический параллелизм и компилирую с возможностью вычисления 3.5, мне не удается вызвать подпрограммы Cublas из функции устройства. Я всегда получаю ошибку «вызова функции хоста из устройства/глобальная функция не допускается» Мой код содержит функции устройства, которые требуют CUBLAS процедуры, как cublsAlloc
, cublasGetVector
, cublasSetVector
и cublasDgemm
Можно ли вызвать функции cublas из функции устройства?
Мой сборник и связывающие команды:
nvcc -arch=sm_35 -I. -I/usr/local/cuda/include -c -O3 -dc GPUutil.cu -o ./build/GPUutil.o
nvcc -arch=sm_35 -I. -I/usr/local/cuda/include -c -O3 -dc DivideParalelo.cu -o ./build/DivideParalelo.o
nvcc -arch=sm_35 -I. -I/usr/local/cuda/include -dlink ./build/io.o ./build/GPUutil.o ./build/DivideParalelo.o -lcudadevrt -o ./build/link.o
icc -Wwrite-strings ./build/GPUutil.o ./build/DivideParalelo.o ./build/link.o -lcudadevrt -L/usr/local/cuda/lib64 -L~/Intel/composer_xe_2015.0.090/mkl/lib/intel64 -L~/Intel/composer_xe_2015.0.090/mkl/../compiler/lib/intel64 -Wl,--start-group ~/Intel/composer_xe_2015.0.090/mkl/lib/intel64/libmkl_intel_lp64.a ~/Intel/composer_xe_2015.0.090/mkl/lib/intel64/libmkl_sequential.a ~/Intel/composer_xe_2015.0.090/mkl/lib/intel64/libmkl_core.a ~/Intel/composer_xe_2015.0.090/mkl/../compiler/lib/intel64/libiomp5.a -Wl,--end-group -lpthread -lm -lcublas -lcudart -o DivideParalelo \t \t
Неправильные команды компиляции. Вы не связываетесь с '-lcublas_device', и есть другие проблемы. Возможно, вы захотите сослаться на [примеры кода cuda] (http://docs.nvidia.com/cuda/cuda-samples/index.html#simpledevlibcublas-gpu-device-api-library-functions--cuda-dynamic- параллелизм), которые показывают, как использовать cublas с устройства, и включают make-файлы, которые вы можете изучить. [Этот вопрос/ответ] (http://stackoverflow.com/questions/27094612/cublas-matrix-inversion-from-device) дает полностью обработанный пример, включая команды компиляции. –