Маллок внутри ядра - PullRequest
       11

Маллок внутри ядра

1 голос
/ 11 ноября 2011

Я пытаюсь скомпилировать код, который имеет функцию malloc внутри ядра, и я получаю эту ошибку:

Error   5   error : calling a host function("malloc") from a __device__/__global__ function("bitapS") is not allowed    C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.0\C\src\str_bit\main.cu    36  1   str_bit

Моя командная строка:

Error   6   error MSB3721: The command ""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\bin\nvcc.exe" -gencode=arch=compute_10,code=\"sm_10,compute_10\" -gencode=arch=compute_20,code=\"sm_20,compute_20\" --use-local-env --cl-version 2010 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\x86_amd64" -I"../../common/inc" -I"../../../shared/inc" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\include"  -G0  --keep-dir "x64\Debug" -maxrregcount=0  --machine 64 --compile  -D_NEXUS_DEBUG -g    -Xcompiler "/EHsc /nologo /Od /Zi  /MTd " -o "x64/Debug/main.cu.obj" "C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.0\C\src\str_bit\main.cu"" exited with code 2.   C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA 4.0.targets  357 10  str_bit

Есть предложения?Я думал, что с включенным sm_20 вы могли бы выделить ... моя карта 460 GTX Спасибо!

Ответы [ 3 ]

3 голосов
/ 12 ноября 2011

Это правда, что вы не должны делать это, но если они включили это, вероятно, имеет некоторое использование.Код выдает ошибку, потому что вы компилируете для архитектуры 1.0 и 2.0.Для его компиляции вы можете удалить

-gencode=arch=compute_10,code=\"sm_10,compute_10\"

из командной строки, если вы собираетесь запускать код только на устройствах fermi или вы должны предоставить альтернативный код в исходном коде для старых устройств.Вы можете сделать это с помощью макроса препроцессора NVCC:

__CUDA_ARCH__

следующим образом:

#if (__CUDA_ARCH__ < 200)
/* code for 1.x arch */
#else
/* code for 2.x arch */
#endif

Кажется, вы используете Visual Studio, поэтому в свойствах проекта вы можете перейти к CUDAраздел и укажите там архитектуры, для которых вы не хотите строить.

1 голос
/ 12 ноября 2011

Я нашел это .... Вы должны указать sm_20, compute_20 также в свойствах вашего файла не только в атрибутах проекта!

В любом случае, спасибо!

0 голосов
/ 11 ноября 2011

Вы не должны выделять память внутри ядра. Когда-либо. Это явный признак того, что ядро ​​CUDA плохо спроектировано и будет иметь плохую производительность.

...