32-битные CUDA/PTX и 64-битные
Компиляторы CUDA имеют опции для создания 32-битных или 64-битных PTX. В чем разница между этими? Это как для x86, графические процессоры NVidia на самом деле имеют 32-битные и 64-битные ISA? Или это связано только с кодом хоста?
1 ответ
Указатели, безусловно, самая очевидная разница. 64-битная модель машины позволяет использовать 64-битные указатели. 64-битные указатели позволяют выполнять различные функции, такие как адресные пространства размером более 4 ГБ и унифицированная виртуальная адресация. Унифицированная виртуальная адресация, в свою очередь, обеспечивает другие возможности, такие как GPUDirect Peer-to-Peer. API CUDA IPC также зависит от 64-битной модели машины.
X64 ISA не полностью отличается от x86 ISA, это в основном его расширение. Те, кто знаком с x86 ISA, найдут знакомый x64 ISA с естественными расширениями для 64-битных систем, где это необходимо. Аналогично, 64-битная модель машины является расширением возможностей PTX ISA до 64-битных. Большинство инструкций PTX работают точно так же.
32-битная модель машины может обрабатывать 64-битные типы данных (такие как double
а также long long
), поэтому часто нет необходимости вносить какие-либо изменения в правильно написанный исходный код CUDA C/C++ для компиляции для 32-битной модели машины или 64-битной модели машины. Если вы программируете непосредственно в PTX, вам, возможно, придется учитывать разницу размеров указателя, по крайней мере.