NVIDIA Nsight
Wprowadzenie¶
NVIDIA Nsight to zestaw narzędzi deweloperskich przeznaczonych do pracy z urządzeniami GPU NVIDIA oraz wspomagających tworzenie oprogramowania wykorzystującego CUDA, a także OpenMP oraz OpenACC. Z punktu widzenia programisty aplikacji GPU najważniejszymi narzędziami są Nsight Systems oraz Nsight Compute służące do analizy wydajności aplikacji, profilowania jej działania, oraz mierzenia wykorzystania zasobów sprzętowych.
Pod marką Nsight rozwijane są także inne narzędzia deweloperskie NVIDIA, takie jak debugger, sanitizer, biblioteki wspierające analizę działania aplikacji czy rozszerzenia do środowisk deweloperskich (IDE).
Starsze narzędzia
Narzędzia NVIDIA Nsight, a przede wszystkim Nsight Systems oraz Nsight Compute zastępują poprzednie profilery: NVIDIA Visual Profiler i nvprof. Narzędzia te nie są już rozwijane i w przyszłości zostaną usunięte z pakietu CUDA Toolkit.
Szczegółowy opis typowego schematu użycia powyższych narzędzi wraz z przykładem można znaleźć w naszym tutorialu.
Dostępność¶
Nsight Systems oraz Nsight Compute wchodzą w skład pakietów CUDA Toolkit oraz NVIDIA HPC Toolkit (informacje o pakietach - patrz CUDA > Informacje o standardzie). Można je także pobrać z centrum pobierania NVIDIA.
Szczegóły¶
Narzędzia Nsight Systems i Nsight Compute pozwalają na analizę aplikacji korzystających z akceleracji GPU, a także ich interakcji z hostem (CPU). Ich możliwości uzupełniają się i często są używane razem w procesie profilowania aplikacji. Testowane programy mogą korzystać ze wszystkich modeli programistycznych wspieranych przez NVIDIA z wyjątkiem OpenCL:
Możliwe jest też profilowanie aplikacji korzystających z technologii do pracy w systemie rozproszonym (MPI).
Zarówno Nsight Systems jak i Nsight Compute udostępniają interfejs graficzny (GUI, graphical user interface) do analizy danych zawierających zapis działania (profil) aplikacji użytkownika. Samo uruchomienie wybranej aplikacji użytkownika oraz rejestracja jej działania (profilowanie) może odbywać się zarówno z poziomu GUI jak i interfejsu wiersza poleceń (CLI, command line interface). Dzięki temu drugiemu rozwiązaniu możliwe jest zbieranie danych na systemach bez dostępnego środowiska graficznego, na przykład na platformach HPC. W takiej sytuacji analizę działania aplikacji można przeprowadzić później na innym urządzeniu, np. swoim komputerze, poprzez pobranie zapisanego profilu wykonania aplikacji.
Nsight Systems¶
Podstawową rolą Nsight Systems jest całościowa analiza działania aplikacji i wizualizacja jej działania na osi czasu (timeline). Przykładowymi wielkościami jakie można zbadać korzystając z Nsight Systems są:
- czasy wykonywania kerneli,
- czasy transferów i alokacji pamięci,
- równoległość wykonywania zadań przez poszczególne strumienie (streams).
Pozwala to zidentyfikować newralgiczne elementy programu potencjalne wymagające optymalizacji.
Podstawowe funkcjonalności:
- wizualizacja działania aplikacji na osi czasu,
- wizualizacja wykorzystaniu zasobów sprzętowych,
- przedstawienie podstawowych statystyk i informacji o działaniu aplikacji w formie numerycznej.
Interfejs graficzny Nsight Systems
Centralnym elementem interfejsu graficznego Nsight Systems jest wspomniana wyżej oś czasu (timeline) przedstawiająca przebieg aplikacji z podziałem na elementy takie jak:
- procesy i wątki po stronie hosta,
- strumienie CUDA,
- użyte karty GPU.
W dolnej części wyświetlane są w formie tekstowej i tabelarycznej bardziej precyzyjne informacje takie jak statystyki czasu wykonania kolejnych etapów programu i poszczególnych funkcji, czy drzewo wywołań funkcji.
Nsight Compute¶
Nsight Compute pozwala na bardziej szczegółowe spojrzenie na poszczególne kernele. Narzędzie przedstawia wyniki w kontekście możliwości obliczeniowych wykorzystanego układu GPU i konkretnego compute capability. Potrafi wskazać miejsca, w których zasoby sprzętowe wykorzystywane są nieoptymalnie oraz zasugerować poprawki. Między innymi, można wykryć następujące czynniki ograniczające wydajność:
- nieodpowiednia konfiguracja zrównoleglenia,
- niepełne wykorzystanie jednostek obliczeniowych GPU,
- niesekwencyjny sposób dostępu do pamięci.
Oprócz tego Nsight Compute umożliwia identyfikację najcięższych obliczeniowo fragmentów kodu kerneli, poprzez wyświetlanie statystyk wykonania dla pojedynczych linii kodu źródłowego.
Podstawowe funkcjonalności:
- analiza wydajności poszczególnych kerneli,
- tworzenie szczegółowych raportów o efektywności wykorzystania zasobów sprzętowych,
- wsparcie użytkownika w procesie optymalizacji, sugerowanie poprawek.
Interfejs graficzny Nsight Compute – podsumowanie uruchomienia
Podstawowym widokiem w Nsight Compute jest szczegółowe podsumowanie wybranego uruchomienia aplikacji. Podzielone jest ono na trzy sekcje:
- GPU Throughput – pokazuje różne metryki szybkości przetwarzania danych przez GPU w odniesieniu ich do maksymalnych teoretycznych wartości,
- Launch Statistics – przedstawia analizę gridu obliczeniowego, tj. konfiguracji zrównoleglenia obliczeń,
- Occupancy – skupia się na stopniu wykorzystania (obłożeniu) dostępnych w GPU jednostek obliczeniowych, mierzony jako liczba jednocześnie wykonywanych warpów w stosunku do maksymalnej możliwej liczby jaką może naraz obsłużyć multiprocesor
Pod każdą z sekcji Nsight Compute może umieścić zalecenia do optymalizacji analizowanego programu. Jednocześnie można mieć otwarte kilka raportów w osobnych zakładkach.
Interfejs graficzny Nsight Compute – widok kodu źródłowego
W widoku kodu źródłowego możliwe jest sprawdzenie wpływu poszczególnych fragmentów kodu akcelerowanego na wydajność aplikacji. Przy każdej operacji (linii kodu) wskazana jest liczba przypadających na dany region próbek - co daje mniej więcej ogląd ile statystycznie czasu zostało spędzone na wykonywaniu danego fragmentu kodu.
Oprócz tego, możliwe jest skorelowanie elementów kodu źródłowego z odpowiadającymi im fragmentami postaci binarnej tj. kodu SASS (patrz CUDA > szczegóły postaci binarnej). Jednakże aby było to możliwe, konieczne jest skompilowanie aplikacji z użyciem specjalnych flag nvcc: -lineinfo
lub --generate-line-info
.
Linki¶
- strona Nsight Systems
- strona Nsight Compute
- narzędzia deweloperskie NVIDIA
- dokumentacja
- materiały