Ошибка здесь возникает из-за того, что ядро CUDA должно быть скомпилировано таким образом, чтобы результирующий код (PTX или SASS) был совместим с графическим процессором, на котором оно выполняется. Это топи c с множеством нюансов, поэтому, пожалуйста, обратитесь к таким вопросам, как это (и ссылки там), чтобы получить дополнительную информацию.
Архитектура графического процессора, когда мы хотим Точность называется вычислительной способностью . Вы можете узнать о вычислительных возможностях вашего графического процессора либо с помощью поиска в Google, либо запустив deviceQuery
пример кода CUDA . Вычислительные возможности выражаются как (основные). (Второстепенные), поэтому что-то вроде вычислительных возможностей 5.2 или 7.0, и т. Д. c.
При компиляции кода необходимо указать вычислительные возможности (или, если нет, будет подразумеваться вычислительная мощность по умолчанию ). Если вы укажете вычислительные возможности при компиляции способом, который соответствует вашему графическому процессору, все должно быть в порядке. Однако код с более новыми / более высокими вычислительными возможностями обычно не работает на графических процессорах со старыми / более низкими вычислительными возможностями. В этом случае вы увидите ошибки, подобные описанным вами:
cudaErrorNoKernelImageForDevice
209
«нет двоичного кода для GPU»
или аналогичные. Вы также можете вообще не увидеть явной ошибки, если не выполняете правильную проверку ошибок CUDA . Решение состоит в том, чтобы сопоставить вычислительные возможности, указанные во время компиляции, с графическим процессором, на котором вы собираетесь работать. Способ сделать это будет зависеть от используемой инструментальной цепочки / IDE. Для базовых c nvcc
использование командной строки:
nvcc -arch=sm_XY ...
будет указывать вычислительную мощность XY
Для Eclipse / Nsight Eclipse / Nsight Visual Studio можно указать вычислительные возможности в свойствах проекта. В зависимости от инструмента это может быть выражено как значения переключателя (например, compute_XY
, sm_XY
) или может быть выражено численно как XY