Badam algorytmy izosurface na GPU dla projektu licencjata (w szczególności koncentrując się na binarnych danych wokseli we / wy, a nie na polach o wartości rzeczywistej). Mam więc implementację procesora starych, dobrych, marszowych kostek uruchomioną w OpenFrameworks, a teraz na etapie próby przeniesienia jej do shaderów obliczeniowych GLSL i rozważenia pułapek przed zanurzeniem się. Napisałem tylko shadery vert i frag wcześniej, więc jest to dla mnie zupełnie nowe.
Mój pierwszy problem polega na tym, jak efektywnie korzystać z tabeli odnośników w kilkudziesięciu lub setkach wątków w grupie roboczej? Rozumiem, że procesor graficzny ma różne rodzaje pamięci do różnych zadań, ale nie jestem całkowicie pewien, jak działa każdy z nich lub jakiego typu użyć.
Klasyczna tabela Copypasta Paula Bourke'a to tablica 256 * 16, więc jeśli używasz bajtu skalarnego, prawdopodobnie można go zapakować w teksturę 4kb lub SSBO.
Pytanie brzmi: jak powstrzymać potknięcia się różnych wątków? Wiele kostek w każdej grupie roboczej może potencjalnie mieć tę samą konfigurację, dlatego też próbuje uzyskać dostęp do tej samej lokalizacji w buforze w tym samym czasie. Czy istnieje obejście lub optymalizacja, aby sobie z tym poradzić?
Odpowiedzi:
Najlepsze miejsce na tablicę przeglądową dla modułu cieniującego GPU zależy od wielkości tablicy przeglądowej oraz częstotliwości / spójności dostępu. W twoim przypadku (wspominałeś 4kb) współużytkowana pamięć lokalna byłaby prawdopodobnie najlepsza (zakładając, że nie potrzebujesz tej pamięci do innych celów w tym samym jądrze). Ta pamięć ma różne nazwy w różnych interfejsach API, ale jest to ta sama architektura i jest zgodna z tymi samymi wytycznymi dotyczącymi wydajności:
Przechowywanie tabeli odnośników w pamięci globalnej jako bufora tylko do odczytu może działać równie dobrze, w zależności od wielkości pamięci podręcznej konkretnego procesora graficznego, na którym pracujesz.
Zauważ, że przypuszczam, że jest to tabela odnośników tylko do odczytu. Tablica przeglądowa do odczytu i zapisu to zupełnie inna bestia i nie ma tam żadnych dobrych opcji.
źródło