Parallel Thread Execution

Z Wikipedii, wolnej encyklopedii

Parallel Thread Execution (PTX) – niskopoziomowa maszyna wirtualna, język jej asemblera i model programowy procesora (ISA) dla kart graficznych firmy Nvidia obsługujących technologię obliczeniową CUDA. PTX stanowi uniwersalny, pośredni etap w translacji programów napisanych w językach wysokiego poziomu, np. C lub C++, na kod maszynowy zoptymalizowany dla konkretnych architektur GPU firmy Nvidia.

Do tłumaczenia programów z języków C i C++ na PTX wykorzystuje się specjalny kompilator (nvopencc), który opiera się na technologii Open64. Translacja kodów PTX na kod maszynowy może stanowić jedną z faz kompilacji (kompilator uruchamia specjalny translator, ptxas) lub zostać wykonany dopiero w chwili uruchomienia programu przez sterownik karty graficznej (tzw. kompilacja w locie, JIT). Efektem kompilacji programów w CUDA mogą być repozytoria kodów (ang. device code repositories) zawierające np. kod pośredni PTX w wersji 1.0 oraz jeden lub kilka kodów maszynowych przeznaczonych dla konkretnych procesorów. Dostępność kodu PTX w podstawowej wersji gwarantuje możliwość uruchomienia programu na dowolnym sprzęcie obsługującym PTX 1.0, a więc na wszystkich kartach graficznych obsługujących technologię CUDA, w tym na sprzęcie nowych, nieistniejących jeszcze generacji (producent gwarantuje zgodność wszystkich istniejących i przyszłych produktów z PTX 1.0). Z kolei dołączenie kodów maszynowych dla istniejących modeli kart graficznych eliminuje potrzebę kompilacji kodu PTX przez sterownik urządzenia i skraca w ten sposób czas uruchamiania programu.

Obecnie (sierpień 2011) najnowsza stabilna wersja PTX dla architektury Fermi ma numer 2.3 (PTX 2.3; 18 stycznia 2011); PTX dla wcześniejszych architektur ma numer 1.4 (PTX 1.4; 23 sierpnia 2010).

Cele PTX[edytuj | edytuj kod]

Według zapewnień producenta, PTX realizuje następujące cele:

  • Stanowi stabilny model programowy procesora (ISA) dla wielu generacji GPU.
  • Umożliwia w programach kompilowanych z języków wysokiego poziomu osiągnięcie wydajności porównywalnej z wydajnością uzyskiwaną w programach pisanych bezpośrednio dla konkretnych GPU.
  • Stanowi niezależny od sprzętu model programowy procesora (ISA) dla kompilatorów.
  • Stanowi platformę dystrybucyjną kodu dla twórców aplikacji i bibliotek.
  • Stanowi wspólny wyjściowy model programowy procesora (ISA) dla optymalizatorów generowanego kodu maszynowego
  • Ułatwia ręczne kodowanie wysokowydajnych bibliotek, kerneli i testów architektur GPU
  • Stanowi skalowalny model programowania obejmujący zarówno pojedyncze GPU, jak i ich działające równolegle klastry.

Bibliografia[edytuj | edytuj kod]