Czy warto martwić się o lokalizację odniesienia GPU?

9

Czy lokalizacja odniesienia ma tak samo różnicę w wydajności GPU, jak w wydajności procesora?

Na przykład, jeśli wyślę 200 poleceń rysowania do GPU, czy zauważę (potencjalnie) zauważalną różnicę, jeśli dane dla każdego polecenia są ciągłe w pamięci zamiast przeskakiwać po buforach / mapach tekstur?

Pytanie poboczne: Zakładam, że GPU zapewnia ochronę przed fałszywymi problemami z udostępnianiem, ponieważ większość zasobów jest niezmienna. Ale w przypadku, gdy ich nie ma, to dlaczego nici zawsze wykonują pracę z czterema fragmentami?

Xenoprimate
źródło

Odpowiedzi:

10

Lokalizacja odniesienia ma znaczenie, ale nie musisz się tak bardzo martwić ... ponieważ nie masz absolutnej kontroli.

Podczas korzystania z OpenGL / DirectX zwykle masz ograniczoną kontrolę nad układem pamięci, sterownik zajmie się resztą. Na przykład możesz wypróbować wiele układów buforów wierzchołków, na przykład używając przeplatanych lub nieprzeplatanych danych wierzchołków i w zależności od wydajności danych / sterownika / GPU mogą się różnić. Profiluj i wybierz, co najlepiej pasuje do Twojej aplikacji.

Na przykład w optymalizacji GPU Gems Pipeline lokalizacja odniesienia jest wymieniona dwukrotnie , pierwsza:

Uzyskaj dostęp do danych wierzchołków w stosunkowo sekwencyjny sposób. Nowoczesne pamięci podręczne GPU uzyskują dostęp do pobierania wierzchołków. Podobnie jak w każdej hierarchii pamięci, przestrzenna lokalizacja odniesienia pomaga zmaksymalizować trafienia w pamięci podręcznej, zmniejszając w ten sposób wymagania dotyczące przepustowości.

I drugi

Zoptymalizuj pod kątem pamięci podręcznej wierzchołków po T i L. Nowoczesne procesory graficzne mają małą pamięć podręczną FIFO, która przechowuje wyniki ostatnio przekształconych wierzchołków; trafienie w tej pamięci podręcznej oszczędza całą pracę związaną z transformacją i oświetleniem, a także całą pracę wykonaną wcześniej w potoku. Aby skorzystać z tej pamięci podręcznej, musisz użyć indeksowanych operacji podstawowych i uporządkować wierzchołki, aby zmaksymalizować lokalizację odniesienia nad siatką. Dostępne są narzędzia - w tym D3DX i NVTriStrip (NVIDIA 2003) - które mogą pomóc w tym zadaniu.

Moim zdaniem zalecenia te są zgodne z tym, o czym mówię, i sugerują, że nie masz absolutnej kontroli nad układem pamięci, ale to, nad czym masz kontrolę, na przykład jak rozmieszczone są poszczególne wierzchołki VBO, może mieć wpływ na wydajność.

Jeśli twoja aplikacja ma obniżoną wydajność, powinieneś najpierw wykryć wąskie gardło, może to nie być problem z lokalizacją danych odniesienia, ale może to wynikać z faktu, że istnieje ogromna ilość danych bez możliwości wyrównywania, na przykład nie wykonuje się wyrównywania fragmentów. itp. Możesz sprawdzić moją odpowiedź tutaj na ten temat.

Myślę, że powinieneś bardziej martwić się o lokalizację odniesienia podczas korzystania z OpenCL / CUDA, jeśli często masz absolutną kontrolę nad układem pamięci.

concept3d
źródło
3

Początkowo procesory graficzne były używane tylko do aplikacji multimedialnych, które wykazują niewielkie ponowne wykorzystanie danych. Ponieważ procesory graficzne są coraz częściej wykorzystywane w aplikacjach ogólnego przeznaczenia (stąd termin GPGPU), obecnie są wyposażone w pamięci podręczne zarządzane sprzętowo dużych rozmiarów, na przykład procesor graficzny Fermi ma 768 KB pamięci podręcznej ostatniego poziomu, procesor graficzny Kepler ma 1536 KB pamięć podręczna ostatniego poziomu, a procesor graficzny Maxwell ma 2048 KB pamięci podręcznej ostatniego poziomu. To, wraz z dużą ilością badań dotyczących pamięci podręcznych GPU, pokazuje, że lokalizacja danych jest zdecydowanie ważna dla GPU. Zobacz mój artykuł ankietowy, aby uzyskać szczegółowe informacje i odniesienia do powyższych.

użytkownik984260
źródło