2012-12-04 6 views
5

Rozumiem, że w CUDA 32 sąsiednie wątki w tym samym bloku zostaną zaplanowane jako osnowa. Ale często znajduję kilka tutorialowych kodów CUDA, które mają wiele bloków z 1 wątkiem na blok. W tym modelu 32 wątki z 32 bloków będą zaplanowane jako osnowa? Jeśli nie, czy mogę powiedzieć, że ten model nie jest tak wydajny, jak zorganizowanie 32-nitek na blok? Dzięki!Czy 32 wątki z 32 bloków zostaną zaplanowane jako osnowa?

Odpowiedz

6

Nie, wątków z różnych bloków nie można zaplanować w tej samej osnowie. Jeśli tworzysz siatki z blokami wątków tylko z jednym wątkiem, zdecydowanie nie uzyskujesz pełnej wydajności z maszyny. Jest mniej wydajny niż 32 wątki (lub liczba całkowita 32) na blok. Fermi SM, na przykład, ma 32 pasy warp, które mogą być w użyciu. Jeśli planujesz bloki pojedynczego wątku, tylko 1 z tych 32 pasów może być w użyciu w danym momencie.

Wątki mają identyfikator wątku (zmienna wbudowana threadIdx), która jest zdefiniowana w (i unikatowy tylko do) pojedynczego bloku.

Sekcja Hardware wielowątkowość w przewodniku programowania C zawiera a formula which defines the total number of warps in a single block.

0

Jeszcze jeden punkt do dodania. Obliczanie w CUDA ZAWSZE dzieje się przez osnowy, więc nawet jeśli przydzielisz mniej niż 32 wątki na blok (1,2..8,16), obliczenia zostaną wykonane dla wątku (32 wątki), zasoby są zablokowane dla 32 wątków dla tego blok.

Jeśli dzielisz 32 bloki z jednym wątkiem, zatrzymujesz zasoby dla wątków 32X32. Unikaj tego, jeśli możesz.

Powiązane problemy