GPU ускоряет математику в браузере - PullRequest
26 голосов
/ 17 мая 2011

Я запускаю проект для браузеров, который требует сложной обработки данных. Алгоритм, который я использую, ускоряется в 50-100 раз при использовании GPU.

Я мог бы использовать JavaScript, Flash или другие технологии с браузером. Есть ли способ получить доступ к графическому процессору, чтобы ускорить обработку моей математики?

Ответы [ 4 ]

25 голосов
/ 17 мая 2011

Вы можете начать экспериментировать с WebCL Хроноса, хотя это все еще в зачаточном состоянии. Крупные игроки, такие как Internet Explorer, Chrome и Opera, пока не имеют четких планов поддержки, а Microsoft даже не демонстрирует никаких планов поддержки WebGL.

Тем не менее, помимо подхода GPGPU на основе шейдеров WebGL, WebCL может быть вашим лучшим выбором для вычислений. По сути, WebCL представляет собой набор привязок JavaScript к OpenCL. Таким образом, события, скорее всего, будут тесно связаны с разработками OpenCL.

Хотя, как уже говорилось, поддержка WebCL на данный момент еще не является ни стандартной, ни широко распространенной, в настоящее время доступны следующие ресурсы:

Я только недавно начал играть с ним, но пока не могу дать никаких рекомендаций, кроме "довольно забавно".

4 голосов
/ 15 июля 2017

Поскольку этот старый вопрос был для меня самым популярным поиском по этой теме, я подумал, что упомяну, что некоторые дальнейшие исследования привели меня к gpu.js , который включает WebGL в служебные функции.

РЕДАКТИРОВАТЬ: ... и переход от вопросов к GitHub и т. Д. Оттуда привел меня к weblas .У меня пока нет сравнения этих двух, преобразование этого ответа в вики сообщества, если кто-то, имеющий опыт в любом из них, видит это и хочет что-то добавить.

0 голосов
/ 16 января 2012

Было бы интересно увидеть, как кто-то справится с Flash и Javascript. Все зависит от того, как часто вам приходилось делать вычисления.

Если вам нужно выполнить только одну итерацию вычислений (по сути, один проход «рендеринга» или один вызов отрисовки), вы можете настроить VertexShader3D и FragmentShader3D, как обычно для любого проекта Stage3D во Flash, а затем вернуть результаты из BitmapData этого рендера:

//You probably want this to be the same dimensions as your context3D dimensions:
_context3D.drawToBitmapData(yourBitmapDataDestination);

Тогда вы можете передать информацию в Javascript. Я не уверен, может ли BitmapData передаваться напрямую, но я уверен, что сначала вам нужно будет сериализовать данные (в виде массива, или строки, и т. Д.). Вам нужно будет посмотреть, как класс ExternalInterface используется для взаимодействия между Flash и Javascript.

Как только вы получите свои сжатые числа в JavaScript, делайте с этими значениями все, что вам нужно!

Этот обмен информацией между Flash, GPU и JavaScript может быть неоптимальным, если вы ищете решение для процесса, который должен выполняться «за кадр» (например, игровой цикл, обновляющий каждый n-кадр). ).

Примечание. Извините за неполный ответ, но в основном я просто хотел привести вас к возможному решению, если вы все еще рассматривали Flash в качестве точки доступа к графическому процессору.

0 голосов
/ 31 мая 2011

В зависимости от того, что вы хотите сделать, но я уверен, что будет гораздо проще выполнить вычисления на GPU сервера и вернуть их обратно клиенту браузера

...