Разработчики) | Рабочая группа WebCL |
---|---|
Стабильный выпуск | 1.0 / 19 марта 2014 г . [1] |
Операционная система | Кроссплатформенность |
Тип | API |
Интернет сайт | www |
HTML |
---|
Сравнения |
WebCL (язык веб-вычислений ) - это привязка JavaScript к OpenCL для гетерогенных параллельных вычислений в любом совместимом веб-браузере без использования подключаемых модулей , впервые анонсированная в марте 2011 года. Он разработан на тех же основаниях, что и OpenCL, и считается версией браузера. последнего. Прежде всего, WebCL позволяет веб-приложениям повышать скорость с помощью многоядерных процессоров и графических процессоров . С ростом популярности приложений, требующих параллельной обработки, таких как редактирование изображений, дополненная реальностьприложений и сложных игр, стало более важным повысить скорость вычислений. По этим причинам некоммерческая организация Khronos Group [2] спроектировала и разработала WebCL, который представляет собой привязку Javascript к OpenCL с переносимым программированием ядра, что позволяет выполнять параллельные вычисления в веб-браузерах на широком спектре устройств. Короче говоря, WebCL состоит из двух частей: одна - это программирование ядра, которое выполняется на процессорах (устройствах), а другая - JavaScript, который связывает веб-приложение с OpenCL. Завершенная и утвержденная спецификация для WebCL 1.0 была выпущена 19 марта 2014 г. [2]
Реализация [ править ]
В настоящее время никакие браузеры не поддерживают WebCL. Однако для реализации WebCL используются неродные надстройки. Например, Nokia разработала расширение WebCL. [3] Mozilla не планирует внедрять WebCL в пользу вычислительных шейдеров OpenGL ES 3.1 .
- Mozilla (Firefox) - hg .mozilla .org / projects / webcl /
Рабочий проект WebCL [ править ]
- Samsung ( WebKit ) - github .com / SRA-SiliconValley / webkit-webcl (недоступно)
- Nokia (Firefox) - github .com / toaarnio / webcl-firefox (не работает с ноября 2014 г., последняя версия для FF 34)
- Intel (Crosswalk) - www .crosswalk-project .org [4]
Пример cCode [ править ]
Базовая единица параллельной программы - ядро . Ядро - это любая параллелизируемая задача, используемая для выполнения определенного задания. Чаще всего функции могут быть реализованы в виде ядер. Программа может состоять из одного или нескольких ядер. Чтобы реализовать ядро, важно, чтобы задачу можно было распараллеливать. Зависимости данных и порядок выполнения играют жизненно важную роль в создании эффективных параллельных алгоритмов. Простым примером может быть случай разворачивания цикла, выполняемый компиляторами C, где такой оператор, как:
для ( я = 0 ; я < 3 ; я ++ ) с [ я ] = а [ я ] + b [ я ];
можно развернуть в:
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 );если ( i < 3 ) c [ i ] = a [ i ] + b [ i ]; }
Запуск приложения WebCL включает следующие шаги:
- Разрешить доступ к устройствам и предоставить контекст
- Передать ядро устройству
- Заставить устройство запустить ядро
- Получить результаты с устройства
- Используйте данные внутри JavaScript
Более подробную информацию об этом можно найти в [5]
Список исключений [ править ]
WebCL, будучи реализацией на основе JavaScript, не возвращает код ошибки при возникновении ошибки. Вместо этого он генерирует исключение, такое как OUT_OF_RESOURCES, OUT_OF_HOST_MEMORY или специфичный для WebCL WEBCL_IMPLEMENTATION_FAILURE. [6] Объект исключения описывает машиночитаемое имя и удобочитаемое сообщение с описанием ошибки. Синтаксис следующий:
исключение WebCLException : DOMException { имя DOMString ; // Строковое представление числового кода ошибки, например "INVALID_VALUE" DOMString ? сообщение ; // Зависящее от реализации описание причины исключения };
Из приведенного выше кода можно заметить, что поле сообщения может иметь значение NULL.
Список нескольких других исключений:
- INVALID_OPERATION - если блокирующая форма этой функции вызывается из WebCLCallback
- INVALID_VALUE - если eventWaitList пуст
- INVALID_CONTEXT - если события, указанные в eventWaitList, не принадлежат одному контексту
- INVALID_DEVICE_TYPE - если deviceType задан, но не является одним из допустимых перечислимых значений
- DEVICE_NOT_FOUND - если нет доступного WebCLDevice, который соответствует данному deviceType
Более подробную информацию об исключениях можно найти в документе со спецификациями. [6]
Есть еще одно исключение, которое возникает при попытке вызвать «освобожденный» объект. При использовании метода release объект не удаляется окончательно, но освобождает ресурсы, связанные с этим объектом. Чтобы избежать этого исключения, можно использовать метод releaseAll, который не только освобождает ресурсы, но и удаляет все связанные созданные объекты.
Безопасность [ править ]
WebCL, будучи открытым программным обеспечением, разработанным для веб-приложений, также имеет множество уязвимостей в областях проектирования и разработки. Это заставило разработчиков, работающих над WebCL, придать безопасности первостепенное значение. Было решено несколько проблем:
- Доступ к памяти за пределами : Это происходит путем доступа к ячейкам памяти за пределами выделенного пространства. Злоумышленник может переписать или стереть все важные данные, хранящиеся в этих ячейках памяти. Всякий раз, когда возникает такой случай, во время компиляции должна генерироваться ошибка, а во время выполнения должен быть возвращен ноль, не позволяя программе замещать память. Компания Khronos Group (разработчики) инициировала проект WebCL Validator [7] по устранению этой уязвимости.
- Инициализация памяти: это делается для предотвращения доступа приложений к ячейкам памяти предыдущих приложений. WebCL гарантирует, что этого не произойдет, инициализируя все буферы, переменные, используемые обнулением, перед запуском текущего приложения. OpenCL 1.2 имеет расширение cl_khr_initialize_memory, которое позволяет это. [6]
- Отказ в обслуживании: наиболее частую атаку на веб-приложения невозможно полностью устранить с помощью WebCL или браузера. OpenCL может быть снабжен сторожевыми таймерами и упреждающей многозадачностью, которые могут использоваться WebCL для обнаружения и прерывания контекстов, которые занимают слишком много времени или потребляют много ресурсов. Существует расширение OpenCL 1.2 cl_khr_terminate_context, как и в предыдущем, которое позволяет завершить процесс, который может вызвать атаку отказа в обслуживании. [6]
Связанные ошибки браузера [ править ]
- Ошибка 664147 - [WebCL] добавить openCL в gecko , Mozilla
- Ошибка 115457: [Meta] Поддержка WebCL для WebKit , WebKit Bugzilla.
См. Также [ править ]
- WebGL
- HTML5
- OpenGL
- OpenCL
- ГПГПУ
- WebGPU
Ссылки [ править ]
- ^ "Khronos выпускает спецификацию WebCL 1.0" .
- ^ a b «Спецификация Khronos Releases WebCL 1.0» . Хронос Групп . Проверено 19 марта 2014 года .
- ^ "WebCL" . Nokia Research . Проверено 6 мая 2012 года .
- ^ "Crosswalk - Обзор WebCL" .
- ^ «Ускорение веб-приложений с помощью OpenCL» .
- ^ a b c d "Спецификация WebCL" . www.khronos.org . Проверено 14 сентября 2016 .
- ^ "KhronosGroup / webcl-валидатор" . GitHub . Проверено 14 сентября 2016 .
Внешние ссылки [ править ]
- Официальный веб-сайт
- Спецификация WebCL
- WebCL Wiki