Свойства устройства CUDA и возможности вычислений при компиляции
Давайте предположим, что у меня есть код, который позволяет пользователю передать threads_per_block
вызвать ядро. Затем я хочу проверить, допустим ли ввод (например, <=512 для вычислительных возможностей CC <2.0 и 1024 для CC >=2.0).
Теперь мне интересно, что произойдет, если я скомпилирую код с nvcc -arch=sm_13
при наличии видеокарты на моем компьютере с CC2.0, когда пользователь проходит threads_per_block == 1024
? Это:
- допустимый ввод - поскольку карта, на которой я работаю, имеет CC2.0 или...
- недействительным, так как я скомпилировал его для CC1.3?
Или nvcc -arch=sm_13
просто означает, что CC1.3 по крайней мере необходим, но когда он работает на более высокой CC, эти более высокие функции можно использовать?
1 ответ
Из руководства nvcc:
-arch
Архитектура, заданная этим параметром, - это архитектура, которая предполагается цепочкой компиляции до этапа ptx,...
Это означает, что он определяет, какие функции PTX (например, специальные инструкции) может использовать компилятор. Максимальное количество потоков в блоке не определяется ISA PTX, поэтому этот параметр компилятора не имеет отношения к проблеме, которую вы пытаетесь решить.
Лучший способ проверить, является ли thread_per_block действительным, - это просто запустить ядро и посмотреть, не возникнут ли какие-либо ошибки.