Свойства устройства 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 действительным, - это просто запустить ядро ​​и посмотреть, не возникнут ли какие-либо ошибки.

Другие вопросы по тегам