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

Есть ли язык ассемблера для CUDA?

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

Кроме того, я предполагаю, что с языком ассемблера было бы проще имитировать указатели на функции. Если сборка на графическом процессоре полностью отличается от сборки на процессоре.

4b9b3361

Ответ 1

Возможно, вы захотите взглянуть на PTX. NVIDIA предоставляет документ, описывающий его в документации CUDA 4.0.

http://developer.nvidia.com/nvidia-gpu-computing-documentation

NVIDIA описывает PTX как "виртуальную станцию ​​с минимальным уровнем параллельной нити на основе низкоуровневого потока (ISA). PTX предоставляет GPU в качестве параллельного вычислительного устройства". Не совсем похоже на сборку x86, но вам может показаться интересным чтение.

Ответ 2

На самом деле существуют два разных языка ассемблера CUDA.

PTX - независимый от машины язык ассемблера, который скомпилирован до SASS, фактические коды операций, выполненные в определенном семействе GPU. Если вы создадите .cubins, вы имеете дело с SASS. Большинство приложений времени исполнения CUDA используют PTX, так как это позволяет запускать их на графических процессорах, выпущенных после исходного приложения.

Кроме того, указатели на функции были в CUDA некоторое время, если вы нацеливаете sm_20 (серия Fermi/GTX 400).

Ответ 3

Да, сборка на GPU полностью отличается от сборки процессора. Одно из отличий заключается в том, что набор команд для графического процессора не стандартизирован. NVidia (и AMD и другие производители графических процессоров) могут и могут изменить свой набор команд от одной модели графического процессора до следующей.

Таким образом, CUDA не предоставляет язык ассемблера. Не было бы смысла. (И ограничения в диалоге CUDA C и любые другие языки, которые они поддерживают, существуют из-за ограничений в оборудовании GPU, а не только потому, что Nvidia ненавидит вас и хочет вас раздражать. Поэтому, даже если у вас был прямой доступ к базовому набору инструкций и язык ассемблера, вы не сможете магически делать то, что вы не можете сделать сейчас.

(Обратите внимание, что NVidia определяет "виртуальный" набор команд, который вы можете использовать и вставлять в свой код. Но это не набор команд, и он не отображается непосредственно на аппаратные инструкции. Это немного больше, чем более простой язык программирования, который "похож" на диалект сборки