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?
Author: einpoklum, 2012-03-27

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 FMAD pipe_A, a pierwszą połowę warp fmad_2 do fmad pipe_B.
  • w cyklu 136 pierwsza połowa warp fmad_1 przejdzie do następnego etapu w fmad pipe_A, podobnie pierwsza połowa warp fmad_2 przejdzie do następnego etapu etap w FMAD pipe_B. Harmonogram warp wysyła teraz drugą połowę warp fmad_1 do FMAD pipe_A, a drugą połowę warp fmad_2 do fmad pipe_B.
Więc potrzeba 2 cykli, aby wydać 2 instrukcje z tej samej warp. Ale jak wspomina OP, istnieją dwa schedulery warp, co oznacza, że cały proces może być wykonywany jednocześnie dla instrukcji z innego warp (zakładając, że są wystarczające jednostki funkcjonalne). Stąd maksymalna szybkość emisji wynosi 2 instrukcje warp na cykl. Uwaga, jest to abstrakcyjny widok z perspektywy programisty-rzeczywiste niskopoziomowe detale architektoniczne mogą być różne.

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.

 23
Author: harrism,
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