WebCL

редактировать
WebCL
WebCL Logo.svg
Разработчик (и) Рабочая группа WebCL
Стабильный выпуск 1.0 / 19 марта, 2014; 6 лет назад (19.03.2014)
Операционная система Кросс-платформенная
Тип API
Веб-сайтwww.khronos.org / webcl /

WebCL (язык веб-вычислений ) - это привязка JavaScript к OpenCL для гетерогенного параллельного вычисления в любом совместимом веб-браузере без использования подключаемых модулей, впервые анонсированных в марте 2011 года. Он разработан на тех же основаниях, что и OpenCL, и рассматривается как версия браузера последнего. Прежде всего, WebCL позволяет веб-приложениям повышать скорость с помощью многоядерных CPU и GPU. С ростом популярности приложений, требующих параллельной обработки, таких как редактирование изображений, приложений дополненной реальности и сложных игр, повышение скорости вычислений стало более важным. По этим причинам некоммерческая организация Khronos Group спроектировала и разработала WebCL, который представляет собой привязку Javascript к OpenCL с переносимым программированием ядра, что позволяет выполнять параллельные вычисления в веб-браузерах на широком спектре устройств. Короче говоря, WebCL состоит из двух частей: одна - это программирование ядра, которое выполняется на процессорах (устройствах), а другая - JavaScript, который связывает веб-приложение с OpenCL. Завершенная и утвержденная спецификация для WebCL 1.0 была выпущена 19 марта 2014 года.

Содержание
  • 1 Реализация
    • 1.1 Рабочий проект WebCL
    • 1.2 Пример cCode
  • 2 Список исключений
  • 3 Безопасность
  • 4 Связанные ошибки браузера
  • 5 См. Также
  • 6 Ссылки
  • 7 Внешние ссылки
Реализация

В настоящее время никакие браузеры не поддерживают WebCL. Однако для реализации WebCL используются неродные надстройки. Например, Nokia разработала расширение WebCL. Mozilla не планирует внедрять WebCL в пользу OpenGL ES 3.1 Compute Shaders.

Рабочий проект WebCL

Пример cCode

Базовой единицей параллельной программы является ядро ​​. Ядро - это любая параллелизируемая задача, используемая для выполнения определенного задания. Чаще всего функции могут быть реализованы в виде ядер. Программа может состоять из одного или нескольких ядер. Для реализации ядра важно, чтобы задачу можно было распараллеливать. Зависимости данных и порядок выполнения играют жизненно важную роль в создании эффективных параллельных алгоритмов. Простым примером может служить случай разворачивания цикла , выполняемого компиляторами C, где оператор вида:

for (i = 0; i < 3 ; i++) c[i] = a[i] + b[i];

может быть развернут в:

c [0] = a [0] + b [0]; c [1] = a [1] + b [1]; c [2] = a [2] + b [2];

Вышеуказанные утверждения могут распараллеливаться и запускаться одновременно. Ядро следует аналогичному подходу, при котором внутри ядра сохраняется только моментальный снимок итерации i. Давайте перепишем приведенный выше код, используя ядро:

__kernel add (__ global float * a, __global float * b, __global float * c) {int i = get_global_id (0); if (i <3) c[i] = a[i] + b[i]; }

Запуск приложения WebCL включает следующие шаги:

  1. Разрешить доступ к устройствам и предоставить контекст
  2. Рука через ядро ​​на устройство
  3. Заставить устройство выполнить ядро ​​
  4. Получить результаты с устройства
  5. Использовать данные внутри JavaScript

Дополнительные сведения о том же можно можно найти в

Список исключений

WebCL, будучи реализацией на основе JavaScript, не возвращает код ошибки при возникновении ошибок. Вместо этого он генерирует исключение, такое как OUT_OF_RESOURCES, OUT_OF_HOST_MEMORY или специфичное для WebCL WEBCL_IMPLEMENTATION_FAILURE. Объект исключения описывает машиночитаемое имя и удобочитаемое сообщение с описанием ошибки. Синтаксис следующий:

исключение WebCLException: DOMException {имя DOMString; // Строковое представление числового кода ошибки, например "INVALID_VALUE" DOMString? сообщение; // Зависящее от реализации описание причины исключения};

Из приведенного выше кода можно заметить, что поле сообщения может иметь значение NULL.

Список нескольких других исключений:

  1. INVALID_OPERATION - если блокирующая форма этой функции вызывается из WebCLCallback
  2. INVALID_VALUE - если eventWaitList пуст
  3. INVALID_CONTEXT - если события, указанные в eventWaitList, не принадлежат одному и тому же контексту
  4. INVALID_DEVICE_TYPE - если указан deviceType, но не является одним из допустимых перечисленных значений
  5. DEVICE_NOT_FOUND - если нет доступного WebCLDevice, соответствующего given deviceType

Дополнительную информацию об исключениях можно найти в документе со спецификациями.

Есть еще одно исключение, которое возникает при попытке вызвать объект, который «освобожден». При использовании метода release объект не удаляется окончательно, но освобождает ресурсы, связанные с этим объектом. Чтобы избежать этого исключения, можно использовать метод releaseAll, который не только освобождает ресурсы, но и удаляет все связанные созданные объекты.

Безопасность

WebCL, будучи открытым программным обеспечением, разработанным для веб-приложений, также существует множество уязвимостей в областях проектирования и разработки. Это заставило разработчиков, работающих над WebCL, придать безопасности первостепенное значение. Было решено несколько проблем:

  1. Доступ к памяти за пределами: Это происходит путем доступа к ячейкам памяти за пределами выделенного пространства. Злоумышленник может переписать или стереть все важные данные, хранящиеся в этих ячейках памяти. Всякий раз, когда возникает такой случай, во время компиляции должна генерироваться ошибка, а во время выполнения должен возвращаться ноль, не позволяя программе перекрывать память. Группа Khronos (разработчики) инициировала проект WebCL Validator по устранению этой уязвимости.
  2. Инициализация памяти: Это делается для предотвращения доступа приложений к участкам памяти предыдущих приложений. WebCL гарантирует, что этого не произойдет, инициализируя все буферы, переменные, используемые для обнуления, перед запуском текущего приложения. OpenCL 1.2 имеет расширение «cl_khr_initialize_memory», которое позволяет это.
  3. Отказ в обслуживании: Наиболее распространенная атака на веб-приложения не может быть полностью устранена с помощью WebCL или браузера. OpenCL может быть снабжен сторожевыми таймерами и упреждающей многозадачностью, которые могут использоваться WebCL для обнаружения и прерывания контекстов, которые занимают слишком много времени или потребляют много ресурсов. Существует расширение OpenCL 1.2 cl_khr_terminate_context, как и в предыдущем, которое позволяет завершить процесс, который может вызвать атаку отказа в обслуживании.
Связанные ошибки браузера
См. Также
Ссылки
Внешние ссылки
Последняя правка сделана 2021-06-20 10:27:19
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте