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.