2012-09-08 17 views
5

Jestem trochę zdezorientowany, jak działa CUDA, czy wątki wykonują każdą z tych samych instrukcji (SIMT), ale używając pojedynczych danych dostępnych z różnymi indeksami? Czy jest to uważane za "inne dane" (więc też SIMD)?Wątki CUDA, SMX, SP i bloki, jak działają?

Czy SMX jest całym układem GPU? SMX powinien składać się z kilku SP, z których każdy wykonuje jeden wątek na raz, jest blokiem wątków przypisanych do jednego SP?

Jestem teraz

Odpowiedz

12

szalupą siatki wynosi 1-3 wymiarowa uruchomienie bloków gwintu nieco zdezorientowany. Blok wątków to 1-3 wymiarowa grupa wątków. Dystrybutor roboczy CUDA dystrybuuje bloki gwintów do jednostek SMX. Niskie urządzenie końcowe może mieć 1 jednostkę SMX. Urządzenie wysokiej klasy może mieć> 10 jednostek SMX.

Jednostka SMX przerywa bloki wątków w grupach po 32 wątki zwane osnowami. Jednostka SMX może mieć najwyżej 64 osnów lub 16 bloków przydzielonych na czas. Ze względu na ograniczenia zasobów (bloki, odkształcenia, rejestry na wątek, pamięć dzieloną na blok lub bariery) liczba może być mniejsza.

Każda jednostka SMX ma 4 programy do szeregowania przeskoków odpowiedzialne za podzbiór osnów. W każdym cyklu program planujący wątek wybierze odpowiednią osnowę i wyda 1 lub 2 instrukcje. W celu podwójnego wydania dwie instrukcje muszą być niezależne i wykorzystywać różne jednostki wykonawcze. Na przykład jedna instrukcja może zostać wysłana do jednostki zmiennoprzecinkowej, a druga do modułu magazynu ładunków.

Oprócz podwójnego wydawania terminarz wątków może wydawać niezależne instrukcje osnowi. Gdy wykryta zostanie zależność, lub jednostka wykonawcza następnej instrukcji jest zajęta, lub osnowa nie ma instrukcji (czekającej na pobranie), wówczas program planujący zmiany wątku wybierze inną osnowę, jeśli się kwalifikuje.

Każdy wątek ma swój własny zestaw rejestrów ogólnego przeznaczenia, kodów warunków, kodów predykatów i pamięci lokalnej. Każdy wątek jest członkiem bloku wątków. Wszystkie wątki mogą uzyskać dostęp do zasobów bloku wątków, które obejmują pamięć współużytkowaną i bariery. Wszystkie wątki w uruchomieniu siatki mogą uzyskać dostęp do zasobów siatki, które obejmują stałą pamięć, wiązania tekstur i powiązania powierzchni. Wszystkie wątki mogą uzyskać dostęp do pamięci globalnej.

+0

Doskonałe podsumowanie. Zatem bariery są ograniczonym zasobem? Dlaczego? –

+0

Instrukcja paska PTX obsługuje 16 barier na blok wątku (CTA). Aby być wydajnym, są to ograniczone zasoby sprzętowe. Większość programów obliczeniowych używa 1 bariery (__syncthreads()). Korzyści z obsługi 16 dla MAX_BLOCKS_PER_SM są bardzo małe i prawdopodobnie nie zdarzają się przy użyciu CUDA C/C++. –