Пишете полную игру на WGSL?

Цель состоит в том, чтобы получить оптимальную производительность, когда все основные вычисления выполняются на графическом процессоре, сделать возможным масштабное моделирование в браузере, добиться чего-то вроде пудровая игрушка или более продвинутая.

И поскольку WebGPU поставляется на Chrome, это уже может быть возможно. Но до сих пор я никогда не занимался программированием шейдеров, поэтому меня немного пугала связанная с этим сложность, но просмотр некоторых руководств создает впечатление, что это достаточно просто, и вызывает у меня большой энтузиазм по поводу возможностей наличия логики и графики. из стороны в сторону на графическом процессоре, без необходимости возвращаться к центральному процессору.

Так что, возможно, я что-то упускаю из виду.

Что я смог найти, так это то, что шейдерные программы обычно очень маленькие. Так что, может быть, это даже не сделало бы все намного быстрее, даже если бы я по каким-то техническим причинам реализовал всю логику моделирования и пользовательского интерфейса внутри WGSL? (при условии, что я не совершу серьезных ошибок, которые, как я знаю, легко сделать)

Так почему же я не нахожу никого, кто уже что-то сделал?

Ограничен ли размер кода, или слишком много элементов потока управления блокируют производительность, или просто отсутствуют инструменты, чтобы сделать это правильно?

Наверняка есть чему поучиться, например:

Затем я обнаружил, что размер рабочей группы (количество операций для вычислить в одном пакете) устанавливается в коде таким же большим, как матрица сторона. Он работает нормально до тех пор, пока сторона матрицы не станет меньше числа ALU на GPU (арифметико-логическое устройство), что отражено в WebGPU API как свойство maxWorkingGroupSize. https://pixelscommander.com/javascript/webgpu-computations-performance-in-comparison-to-webgl/

Но даже если он не оптимизирован, он все равно должен превосходить js и wasm? Если нет, то почему?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Короткий ответ, по-видимому, нет, это невозможно, потому что шейдеры вообще не могут работать в бесконечном цикле и будут считаться зависшими и уничтоженными ОС через несколько секунд, если они попытаются это сделать.

Таким образом, идея и цель их состоит в том, чтобы запускать их небольшими порциями за раз. Но если все сделано правильно, большая часть, если не вся тяжелая работа по моделированию действительно может выполняться на графическом процессоре (в виде кода WGSL) без необходимости пересылки большого количества данных туда и обратно между графическим процессором и процессором. Только нужные биты.

И были намеки, что WGSL оптимизирован для массового распараллеливания, но не для сложного ветвления конструкций if else, поэтому вся игровая логика в коде WGSL может привести к ухудшению производительности. Таким образом, небольшие модули WGSL, в которых данные моделирования, с которыми они работают, остаются в буфере на графическом процессоре, по-видимому, подходят для меня.

Другие вопросы по теме