Przejdź do treści

NVIDIA Nsight

logo NVIDIA

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.

pakiet NVIDIA Nsight

pakiet NVIDIA Nsight [źródło]

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).

Nsight workflow

typowy workflow z wykorzystaniem Nsight Systems i Nsight Compute [źródło]

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.

Nsight Systems - przykład

Nsight Systems – profil działania aplikacji z wieloma kernelami

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.

Nsight Compute - raport

Nsight Compute – raport z wykonania prostej aplikacji CUDA

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.

Nsight Compute - kod

Nsight Compute – widok kodu źródłowego [źródło]

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


Ostatnia aktualizacja: 15 listopada 2023