Подтвердить что ты не робот

CUDA: Как проверить правильную вычислительную способность?

Код CUDA, скомпилированный с более высокой вычислительной способностью, будет отлично работать в течение длительного времени на устройстве с более низкой вычислительной способностью, до того, как в один ядро ​​произойдет некорректный отказ в один день. Я потратил полдня на погоню за неуловимой ошибкой, только чтобы понять, что у правила сборки было sm_21, в то время как устройство (Tesla C2050) было 2.0.

Есть ли какой-нибудь код API CUDA, который я могу добавить, который может самоконтролироваться, если он работает на устройстве с совместимой вычислительной способностью? Мне нужно скомпилировать и работать с устройствами многих вычислительных возможностей. Есть ли какие-либо другие действия, которые я могу предпринять, чтобы такие ошибки не возникали?

4b9b3361

Ответ 1

В API-интерфейсе выполнения cudaGetDeviceProperties возвращает два поля major и minor, которые возвращают вычислительную способность любому заданному перечисляемому устройству CUDA. Вы можете использовать это для синтаксического анализа вычислительной способности любого графического процессора, прежде чем устанавливать для него контекст, чтобы убедиться, что он является правильной архитектурой для вашего кода. nvcc может генерировать объектный файл, содержащий несколько архитектур из одного вызова, используя параметр -gencode, например:

nvcc -c -gencode arch=compute_20,code=sm_20  \
        -gencode arch=compute_13,code=sm_13  \
        source.cu

создаст выходной файл объекта со встроенным жирным объектом, содержащим файлы кубинов для карт GT200 и GF100. API runtime автоматически обрабатывает обнаружение архитектуры и пытается загрузить подходящий код устройства из объекта fatbinary без дополнительного кода хоста.

Ответ 2

запустите запрос устройства. найти вычислительную способность для каждого устройства в системе. Затем выполните код на нужном устройстве с помощью SetDevice();