W przypadku układów GPU 100% wykorzystania oznacza, że wszystkie rdzenie wykonują instrukcje. Działa z najwyższą wydajnością, gdy wszystkie te instrukcje są operacjami łączenia, dodawania i mnożenia: a = a + b * c
co większość obecnych GPU może wykonać przy użyciu tylko jednej instrukcji.
Pisząc program, który wykonuje obliczenia na GPU (za pomocą CUDA lub OpenCL), rozprowadzasz pracę w tak zwanych siatkach bloków wątków (terminologia CUDA). GPU musi zaplanować wszystkie te wątki (w „warps” 32 wątków), aby wszystkie rdzenie GPU były zajęte. Nie wiem, jak dobrze znasz ten temat, ale to wprowadzenie może być interesującą lekturą.
Przykład wyjaśnia, w jaki sposób odnosi się to do wykorzystania. Załóżmy, że procesor graficzny jest bezczynny, a następnie uruchamiasz aplikację, która uruchamia jądro tylko dla jednego bloku wątków, ale z wystarczającymi obliczeniami w tym bloku. GPU planuje włączenie bloku wątków w wieloprocesorach przesyłania strumieniowego (SMs = grupa 128 rdzeni) na GPU. Na przykład w przypadku Nvidii GTX 1080, która ma 20 SM, spowodowałoby to wykorzystanie tylko (1/20 * 100%) = 5%.
Biorąc pod uwagę tę podstawową wiedzę na temat obliczeń na GPU, możesz uruchomić go za pomocą Nvidia Visual Profiler (dla aplikacji CUDA) lub przez CodeXL dla (aplikacji OpenCL), aby zobaczyć te konfiguracje wątków dla dowolnego jądra, którego aplikacja używa do uzasadnienia wykorzystania GPU . Ale to nie wszystko, to narzędzie jest nieocenione, aby zobaczyć dokładnie, jakie operacje (i jak wydajne) wykonuje GPU.
nvidia-smi
, daje procent całkowitego czasu twoi jeden lub więcej wieloczynnościowe są używane. Nie oznacza to procentowej liczby rdzeni w użyciu.