Jak NVIDIA CC 2.1 GPU warp?
Uwaga: to pytanie dotyczy urządzeń NVIDIA Compute Capability 2.1. Poniższe informacje pochodzą z CUDA Programming Guide v4. 1:
W compute capability 2.1 urządzenia, każdy SM ma 48 SP (rdzenie) dla operacji całkowitych i zmiennoprzecinkowych. Każda warp składa się z 32 kolejnych wątków. Każdy SM ma 2 WARP schedulers . Na każdym czas wydania instrukcji, jeden scheduler WARP wybiera gotowy warp z wątki i problemy 2 instrukcje {[5] } dla osnowy na rdzeniach.
Moje wątpliwości:
- jeden wątek zostanie uruchomiony na jednym rdzeniu. W jaki sposób urządzenie może wydać 2 instrukcje do wątku w jednym cyklu zegara lub jednej operacji wielocyklicznej?
- czy to oznacza, że 2 instrukcje powinny być niezależne od siebie?
- że 2 instrukcje mogą być wykonywane równolegle na rdzeniu, może dlatego, że używają różnych jednostek wykonawczych w rdzeniu? Czy oznacza to również, że warp będzie gotowy dopiero po wykonaniu 2 instrukcji, czy może po wykonaniu jednej z nich?
1 answers
To jest równoległość na poziomie instrukcji (ILP) . Instrukcje wydawane jednocześnie z osnowy muszą być niezależne od siebie. Są one wydawane przez scheduler instrukcji SM do oddzielnych jednostek funkcjonalnych w SM.
Na przykład, jeśli w strumieniu instrukcji warp znajdują się dwie niezależne instrukcje FMAD, które są gotowe do wydania, A SM ma dwa dostępne zestawy jednostek FMAD, na których można je wydać, obie mogą być wydane w tym samym cyklu. (Instrukcje mogą być wydawane razem w różnych kombinacjach, ale nie zapamiętałem ich, więc nie podam tutaj szczegółów.)
Jednostki wykonawcze FMAD/IMAD w SM 2.1 mają szerokość 16 SPs. Oznacza to, że wydanie instrukcji warp (32-nitkowej) jednej z 16-nitkowych jednostek wykonawczych zajmuje 2 cykle. Istnieje wiele (3) z tych 16-szerokich jednostek wykonawczych (łącznie 48 SPs) na SM, plus specjalne jednostki funkcyjne. Każdy planer warp może wydać dwa z nich na cykl.
Załóżmy wykonanie FMAD jednostki to pipe_A
, pipe_B
i pipe_C
. Powiedzmy, że w cyklu 135 istnieją dwie niezależne instrukcje fmad fmad_1
i fmad_2
, które czekają:
- w cyklu 135, harmonogram instrukcji wyda pierwszą połowę warp (16 wątków)
fmad_1
do FMADpipe_A
, a pierwszą połowę warpfmad_2
do fmadpipe_B
. - w cyklu 136 pierwsza połowa warp
fmad_1
przejdzie do następnego etapu w fmadpipe_A
, podobnie pierwsza połowa warpfmad_2
przejdzie do następnego etapu etap w FMADpipe_B
. Harmonogram warp wysyła teraz drugą połowę warpfmad_1
do FMADpipe_A
, a drugą połowę warpfmad_2
do fmadpipe_B
.
Jeśli chodzi o twoje pytanie, kiedy warp będzie gotowy, jeśli jest więcej instrukcji, które nie zależą od żadnych zaległych (już wydanych, ale nie wycofanych) instrukcji, to mogą być wydane w następnym cyklu. Ale gdy tylko dostępne instrukcje będą zależne od instrukcji w locie, warp nie będzie w stanie wydać. Jednak to tam, gdzie pojawiają się inne warpy-SM może wydawać instrukcje dla każdego WARP rezydenta, który ma dostępne (niezablokowane) instrukcje. To dowolne przełączanie między warpami zapewnia "ukrywanie opóźnień", od którego zależy wysoka przepustowość procesorów GPU.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-29 04:21:06