Było wiele dyskusji o tym, jak wybrać blok blokowy #blocks &, ale nadal czegoś brakuje. Wielu moich obaw rozwiązania tego pytanie: How CUDA Blocks/Warps/Threads map onto CUDA Cores? (Dla uproszczenia dyskusji, nie jest wystarczająco perThread & pamięć perBlock limity pamięci nie są problemem tutaj..)bloki, wątki, warpSize
kernelA<<<nBlocks, nThreads>>>(varA,constB, nThreadsTotal);
1) Aby utrzymać SM tak zajęty, jak to możliwe, Powinienem ustawić nThreads
na wielokrotność warpSize
. Prawdziwe?
2) SM może wykonywać tylko jedno jądro naraz. To wszystko, że HWC tego SM wykonuje tylko jądro A. (Nie niektóre HWcores z jądrem A, podczas gdy inne działają z jądrem B.) Więc jeśli mam tylko jeden wątek do uruchomienia, "marnuję" inne HWcores. Prawdziwe?
3) Jeśli problemy z rozkładem wątku działają w jednostkach warpSize
(32 wątki), a każdy SM ma 32 HWcores, to SM będzie w pełni wykorzystany. Co się dzieje, gdy SM ma 48 HWcores? Jak mogę w pełni wykorzystać 48 rdzeni, gdy program planujący wydaje pracę w kawałkach 32? (Jeśli poprzedni akapit jest prawdziwy, czy nie byłoby lepiej, gdyby program planujący wydał pracę w jednostkach o rozmiarze HWcore?)
4) Wygląda na to, że program do szeregowania zadań kolejkuje do 2 zadań naraz. Tak więc, gdy aktualnie uruchomione jądro zawiesza się lub blokuje, drugie jądro jest zamieniane. (Nie jest jasne, ale domyślam się, że kolejka tutaj jest większa niż 2 jądra.) Czy to prawda?
5) Jeśli moja HW ma górny limit 512 wątków na blok (nThreadsMax), to nie znaczy, że jądro z 512 wątkami będzie działało najszybciej na jednym bloku. (Znowu mem nie jest problemem.) Jest duża szansa, że osiągnę lepszą wydajność, jeśli rozproszę jądro o długości 512 na wiele bloków, a nie tylko jeden. Blok jest wykonywany na jednym lub wielu SM. Prawdziwe?
5a) Myślę, że im mniej, tym lepiej, ale czy ma znaczenie, jak małe zrobię nBlocks
? Pytanie brzmi, jak wybrać wartość nBlocks
, która jest przyzwoita? (Niekoniecznie optymalny). Czy istnieje matematyczne podejście do wybierania numeru nBlocks
, czy jest to po prostu test-n-err.
Ten procesor graficzny ma 192 CudaCores. To będzie 4 SM, z 48 rdzeniami sprzętowymi (HWcores). 4 * 48 = 192 – Doug