2012-09-14 2 views
6

Если я скомпилирую программу CUDA с более низкой способностью вычислять, например 1.3 (флаг nvcc sm_13) и запустил ее на устройстве с Compute Capability 2.1, будет ли он использовать функции Compute 2.1 или нет?Автоматическое обновление возможностей приложений CUDA?

В этой ситуации будет ли устройство вычисления 2.1 вести себя как вычислительное устройство 1.3?

ответ

9

Нет, он не будет использовать какие-либо функции, необходимые для явной программы. Будут использоваться только те функции, которые являются прозрачными для пользователя (например, кеш или файлы большего размера).

Кроме того, вы должны убедиться, что ваш объектный файл содержит версию кода, скомпилированную на промежуточном языке PTX, который может быть динамически скомпилирован в целевую архитектуру или программа не будет работать.

Скомпилировать виртуальную архитектуру (nvcc -arch compute_13), чтобы обеспечить или создать жирный двоичный код с кодом для нескольких архитектур, используя опцию -gencode для nvcc.

С жирным двоичным кодом вы можете запрограммировать функции, доступные только при более высокой вычислительной способности, если вы завершите код внутри #if __CUDA_ARCH__ >= xyz условных препроцессоров.

+0

спасибо, что ответ. Я предпочитаю создавать живые двоичные файлы с кодом для всех вычислительных возможностей. – sgarizvi

+1

Обратите внимание, что лучший вариант - сделать оба (создать жирный бинарный файл, который также содержит версию PTX). Таким образом, программа всегда будет работать даже на будущих графических процессорах с разными наборами инструкций. – tera

+0

Вторая часть моего предыдущего комментария не форматировалась правильно. Вместо этого я перевел его на ответ. – tera

Смежные вопросы