Подтвердить что ты не робот

GPU ускорил математику в браузере

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

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

4b9b3361

Ответ 1

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

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

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

  • Группа Khronos имеет официальный сайт здесь.
  • Nokia Research сообщает о своих экспериментах на своем выделенном сайте, включая расширение WebCL для FireFox (версия 18 только на данный момент). Разработчик, работающий над этим расширением, также имеет Twitter в https://twitter.com/NokiaWebCL.
  • Эксперименты Samsung для WebKit, протестированные с помощью браузера Safari, доступны здесь.
  • В Motorola реализована версия OpenCL .
  • Сама Mozilla, похоже, стала активной со своими собственными разработками WebCL, хотя мне неизвестен текущий текущий статус.

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

Ответ 2

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

EDIT:... и прыжок через проблемы GitHub и т.д. оттуда привел меня к weblas также. У меня нет сравнения этих двух, преобразовывая этот ответ в вики сообщества, если кто-то с опытом в любом из них видит это и может что-то добавить.

Ответ 3

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

Ответ 4

Было бы интересно посмотреть, как кто-то выдержит это с помощью 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 может быть передан напрямую, но я уверен, что вам придется сначала сериализовать данные (как массив, или String и т.д.). Вам нужно будет посмотреть, как класс ExternalInterface используется для связи между Flash и Javascript.

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

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

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