LINUX.ORG.RU

Как максимально эффективно использовать LDS в шейдерах?

 ,


0

2

Исходные данные: я уже писал что делаю игру. Для растеризации воксельных объектов которые могут быть изогнуты нужно растеризовать как переднюю «грань» ограничивающего объема так и заднюю. Аппаратный растеризатор такого делать не может, поэтому я нагуглил научные статьи на тему, и придумал алгоритм.

В нем есть недостаток: для каждого тайла 8х8 работать реально будут только несколько потоков. Хотелось бы их объединять с последующими. Это можно сделать если не сразу запускать вычисления а класть промежуточные данные в LDS.

то есть шейдер содержит в себе все стадии «конвейера» и переключается между ними по мере готовности. Для этого в LDS должен быть большой промежуточный буфер, с которым будут работать множество «warpов». Я туда буду паковать запросы а потом отрабатывать группами по 64.

Проблема в том, что требуемый объем LDS для эффективной балансировки - довольно большой. Значит(исходя из документации) требуется большой размер workgroup чтоб этот размер был 512 например. Эту цифру я нашел в доке по оптимизации от AMD. Но при этом мне надо, чтоб шейдерные потоки паралелились по 64 т.к. в пределах воркгруппы будут выполняться разные части конвейера.

Могу ли я, заспавнив workgroup размером 512 расчитывать на то, что в реальности это будет 8*64 потоков а не 512?

Для растеризации воксельных объектов которые могут быть изогнуты нужно растеризовать как переднюю «грань» ограничивающего объема так и заднюю. Аппаратный растеризатор такого делать не может

Для начала начнём с того что растеризаторы про воксели вообще ничего не знают, геометрия растеризуется как обычно если ты переводишь из в. А если у тебя чисто шейдеры без геометрии то никаких органичений нет и быть не может. Выразись яснее.

По остальному https://gpuopen.com/learn/optimizing-gpu-occupancy-resource-usage-large-thread-groups/

А так, взял бы да явно проверил.

anonymous ()
Ответ на: комментарий от anonymous

я просто хотел узнать, будут ли 512 потоков в группе вести себя как 8*64? это критично, т.к. если они будут делиться на независимые куски по 64 то я на коне, иначе я в яме.

salozar ()