Показать все предупреждения NVCC в PyCUDA

[обновление] Как вывести предупреждающие сообщения от compiler.SourceModule(kernel_code)? С помощью @flipchart я смог передать нужные параметры в NVCC через PyCUDA, но я до сих пор не знаю, где получить доступ к предупреждениям компилятора.

[исходный вопрос]

Используя NVCC напрямую, можно использовать переключатель компилятора -Wall*. Как бы это заархивировать в pycuda?

Я пробовал mod = compiler.SourceModule(kernel_code,options=['-Wall']), но в сообщении об ошибке говорится:

pytools.prefork.ExecError: error invoking 'nvcc --cubin -Wall -arch sm_11 -I/usr/local/lib/python2.6/dist-packages/pycuda-0.94.2-py2.6-linux-x86_64.egg/pycuda/../include/pycuda kernel.cu': status 255 invoking 'nvcc --cubin -Wall -arch sm_11 -I/usr/local/lib/python2.6/dist-packages/pycuda-0.94.2-py2.6-linux-x86_64.egg/pycuda/../include/pycuda kernel.cu': nvcc fatal : Unknown option 'Wall'

Проблема источника в том, что я потратил целый день на отладку, потому что проглядел неявное преобразование из float в int.

*Предупреждения из системного заголовка с "--compiler-options -Wall", начиная с CUDA 3.0


person Framester    schedule 09.01.2012    source источник


Ответы (1)


Параметр -Wall не является параметром компилятора nvcc, а передается вспомогательному компилятору (g++ или cl.exe). Вам нужно передать параметр --compiler-options -Wall, чтобы указать nvcc, что этот параметр предназначен для поддерживающего компилятора. В вашем коде Python:

mod = compiler.SourceModule(kernel_code,options=['--compiler-options','-Wall'])

PyCuda, похоже, хочет, чтобы каждый параметр указывался как элемент списка, иначе он заключает все это в кавычки, что nvcc не нравится.

person flipchart    schedule 10.01.2012
comment
Я все еще получаю nvcc fatal: Unknown option '-compiler-options -Wall' И я заметил, что -Wall здесь нет: camolab.googlecode.com/svn-history/r18/trunk/mycode/cuda/ - person Framester; 10.01.2012
comment
Вам нужно 2 дефиса перед compiler-options: --compiler-options. -Wall не будет там указано, потому что это не вариант nvcc. Как я сказал в своем ответе. nvcc передает этот параметр вспомогательному компилятору - person flipchart; 10.01.2012
comment
Извините за неточность. Если я передам '--compiler-options -Wall', в сообщении об ошибке появится только 1 дефис. Чтобы получить два дефиса в сообщении об ошибке, я должен добавить третий в вызов функции. Я понятия не имею, почему это происходит. - person Framester; 10.01.2012
comment
Смотрите мой обновленный ответ. Я думаю, что вам нужно добавить каждый как отдельный элемент списка. - person flipchart; 10.01.2012
comment
Спасибо, это сработало до сих пор. Но как мне вывести возврат nvcc? Я попробовал print repr(mod), но он вернул только идентификатор. В dir(mod) тоже ничего полезного не нашел. В любом случае +1 - person Framester; 11.01.2012
comment
К сожалению, я ничего не знаю о pyCuda (только о CUDA и C++). Я бы посмотрел исходный код функции SourceModule, чтобы посмотреть, что она делает с выходными данными. Возможно, вы могли бы изменить его, чтобы вернуть вывод. Из документов не похоже, что это позволяет вам добраться до него в настоящее время. - person flipchart; 11.01.2012
comment
О, спасибо за попытку. Я добавляю +1 к вашим комментариям, так что вы получите здесь репутацию. - person Framester; 12.01.2012