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ć?