У меня есть проект Unity, в котором я пишу в AppendStructuredBuffer<Triangle>
через Append(triangle)
в вычислительном шейдере.
В этом случае я знаю теоретический предел для количества треугольников, которые могут существовать, поэтому очевидный правильный подход заключается в соответствующем изменении размера буфера. Однако, как хак, я экспериментирую с выделением радикально меньших буферов, чтобы они могли более эффективно обрабатываться другими частями системы (в частности, чтение обратно в ЦП). Можно представить себе другие ситуации, в которых конкретный предел может быть неизвестен или ошибочно принят.
Очевидно, это потенциально опасно. Я уверен, что есть более надежные подходы, которые можно использовать для моей текущей системы (или в более общем плане), не жертвуя при этом производительностью, но я (особенно) не спрашиваю совета по этому поводу.
Что я хочу знать, так это то, что ожидаемое поведение программы при вызове Append()
превышает возможности такого буфера. Я предполагаю, что он не определен и потенциально может повредить другие области VRAM, в некоторой степени зависящие от драйверов графического процессора / версии DirectX и т. Д. Может быть, это более формально определено, но я не смог выяснить это .
Конечно, даже если поведение определено , кажется, что он преднамеренно рискует. Тем не менее, я хотел бы знать:
- Возможно ли обнаружить, что такой буфер заполнен в контексте функции ядра (учитывая высокую многопоточность, это, вероятно, нецелесообразно).
- Как это повлияет на производительность, если это возможно.
- Каковы последствия переполнения (в данном случае я специально ожидаю этого, но ошибки случаются).
- Как все вышеперечисленное может отличаться для разных поставщиков оборудования, API и т. Д.
Возможно, это «безопасно», поскольку лишние данные будут просто потеряны в пустоте без затрат. В любом случае система может, например, периодически проверять заполненность буферов и выполнять любую дополнительную работу по дому, которая может потребоваться ... оставляя вопрос о том, насколько серьезными могут быть ошибки в настройке такой системы.