Я вивчаю алгоритми ізоповерхневих процесорів на графічному процесорі для бакалаврського проекту (конкретно зосереджуючись лише на бінарних даних про вокселі, а не на полях реального значення). Таким чином, у мене є реалізація процесора старих хороших маршових кубів і запуску в OpenFrameworks, і тепер на стадії спроби перенести його на обчислювальні шейдери GLSL та розглянути підводні камені перед тим, як зануритися. Я лише написав шейдери верту та фрагменту. раніше, тому для мене все нове.
Перше моє питання - як ефективно використовувати таблицю пошуку в десятках чи сотнях потоків у робочій групі? Я розумію, що графічний процесор має різні типи пам’яті для різних завдань, але не повністю впевнений у тому, як кожен працює або який тип використовувати.
Класична таблиця copypasta Пола Бурка - це масив 256 * 16, тому, якщо використовувати скалярний тип байтів, це, ймовірно, може бути упаковано в 4kb текстуру або SSBO.
Питання в тому, як не допустити, щоб різні потоки не спрацьовували один одного? Багато кубів у кожній робочій групі потенційно можуть мати однакову конфігурацію, тому намагаються отримати доступ до одного і того ж місця в буфері одночасно. Чи існує рішення чи оптимізація для вирішення цього питання?