2013-03-02 5 views
4

У меня есть код PTX, который не загружается. Я запускаю это на 650M, с OSX. Другие примеры CUDA работают нормально в системе, но при загрузке модуля всегда получается ошибка 209: CUDA_ERROR_NO_BINARY_FOR_GPUОшибка Cuda CUDA_ERROR_NO_BINARY_FOR_GPU

Что мне не хватает?

.version 3.1 
.target sm_20, texmode_independent 
.address_size 64 


    // .globl examples_2E_mandelbrot_2F_calc_2D_mandelbrot_2D_ptx 
.entry examples_2E_mandelbrot_2F_calc_2D_mandelbrot_2D_ptx(
    .param .u64 .ptr .global .align 8 examples_2E_mandelbrot_2F_calc_2D_mandelbrot_2D_ptx_param_0, 
    .param .f64 examples_2E_mandelbrot_2F_calc_2D_mandelbrot_2D_ptx_param_1, 
    .param .f64 examples_2E_mandelbrot_2F_calc_2D_mandelbrot_2D_ptx_param_2, 
    .param .f64 examples_2E_mandelbrot_2F_calc_2D_mandelbrot_2D_ptx_param_3 
) 
{ 
    .reg .pred %p<396>; 
    .reg .s16 %rc<396>; 
    .reg .s16 %rs<396>; 
    .reg .s32 %r<396>; 
    .reg .s64 %rl<396>; 
    .reg .f32 %f<396>; 
    .reg .f64 %fl<396>; 

    ld.param.u64 %rl0, [examples_2E_mandelbrot_2F_calc_2D_mandelbrot_2D_ptx_param_0]; 
    mov.b64 func_retval0, %rl0; 
    ret; 
} 
+0

GT650M - sm_30 gpu. Что произойдет, если вы измените '.target sm_20' на' .target sm_30'? Или, может быть, я должен спросить, как вы создали этот код ptx? –

+0

Код генерируется через llvm. Я сократил код до уровня, который вы видите выше. Я пробовал целевые модели sm_10, sm_13, sm_30 и sm_35. Все так же. Переключение с .entry на .func позволяет загружать модуль, но тогда (конечно) я не могу найти функцию. –

+0

, т. Е. CuModuleGetFunction возвращает CUDA_ERROR_NOT_FOUND –

ответ

6

Вы получаете сообщение об ошибке, потому что ваш PTX содержит синтаксическую ошибку и никогда не компилируется в результате. Линия

mov.b64 func_retval0, %rl0; 

ссылается ярлык func_retval0, но который не определен в PTX файл в любом месте. Вы можете проверить это, пытаясь самостоятельно скомпилировать PTX с помощью инструментальной цепочки:

$ ptxas -arch=sm_20 own.ptx 
ptxas own.ptx, line 24; error : Arguments mismatch for instruction 'mov' 
ptxas own.ptx, line 24; error : Unknown symbol 'func_retval0' 
ptxas own.ptx, line 24; error : Label expected for forward reference of 'func_retval0' 
ptxas fatal : Ptx assembly aborted due to errors 
+0

Да! Моя функция должна быть скомпилирована как возвращающая пустота. Изменение этого исправляло проблему. Благодаря! –

1

Отличный совет по запуску ptxas. Я получал ошибку 209: проблема оказалась __shared__ память была превышена. Раньше это было бы предупреждением о компиляции. У меня есть Cuda 5.5 и никаких предупреждений о компиляции сейчас - даже с подробным включением. спасибо