ВебCL
Разработчик(и) | Рабочая группа 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 в пользу WebGL вычислительных шейдеров , от которых, в свою очередь, отказались в пользу WebGPU .
- Mozilla (Firefox) – hg
.mozilla .org /проекты /webcl /
Рабочий проект WebCL
[ редактировать ]- Samsung ( WebKit ) — github
.с /SRA-SiliconValley /webkit-webcl (недоступно) - Нокиа (Firefox) — github
.с /тоаарнио /webcl-firefox (не работает с ноября 2014 г., последняя версия для FF 34) - Интел (Пешеходный переход) - www
.crosswalk-проект .org [4]
Пример кода C
[ редактировать ]Базовой единицей параллельной программы является ядро . Ядро — это любая распараллеливаемая задача, используемая для выполнения определенной работы. Чаще функции могут быть реализованы в виде ядер. Программа может состоять из одного или нескольких ядер. Для реализации ядра важно, чтобы задача была распараллеливаемой. Зависимости данных и порядок выполнения играют жизненно важную роль в создании эффективных распараллеленных алгоритмов. Простым примером можно считать случай развертывания цикла , выполняемого компилятором 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 включает в себя следующие шаги:
- Разрешить доступ к устройствам и предоставить контекст
- Передаем ядро устройству
- Заставить устройство выполнить ядро
- Получить результаты с устройства
- Используйте данные внутри JavaScript
Более подробную информацию об этом можно найти по адресу [5]
Список исключений
[ редактировать ]
WebCL, будучи реализацией на основе JavaScript, не возвращает код ошибки при возникновении ошибок. Вместо этого он выдает исключение, например OUT_OF_RESOURCES
, OUT_OF_HOST_MEMORY
или специфичный для WebCL WEBCL_IMPLEMENTATION_FAILURE
. [6] Объект исключения описывает машиночитаемое имя и человекочитаемое сообщение, описывающее ошибку. Синтаксис следующий:
exception WebCLException : DOMException {
DOMString name; // A string representation of the numeric error code, e.g. "INVALID_VALUE"
DOMString? message; // An implementation-specific description of what caused the exception
};
Из приведенного выше кода видно, что поле сообщения может иметь значение NULL. Другие исключения включают в себя:
INVALID_OPERATION
– если блокирующая форма этой функции вызывается изWebCLCallback
INVALID_VALUE
- еслиeventWaitList
пустоINVALID_CONTEXT
– если события, указанные вeventWaitList
не принадлежат к одному и тому же контекстуINVALID_DEVICE_TYPE
- еслиdeviceType
задано, но не является одним из допустимых перечислимых значенийDEVICE_NOT_FOUND
- если нетWebCLDevice
доступный, соответствующий заданномуdeviceType
Более подробную информацию об исключениях можно найти в документе со спецификациями. [6]
Существует еще одно исключение, которое возникает при попытке вызвать «освобожденный» объект. При использовании метода выпуска объект не удаляется навсегда, но освобождаются ресурсы, связанные с этим объектом. Чтобы избежать этого исключения, releaseAll
Можно использовать метод, который не только освобождает ресурсы, но и удаляет все созданные связанные объекты.
Безопасность
[ редактировать ]WebCL, будучи открытым программным обеспечением, разработанным для веб-приложений, также имеет множество уязвимостей в области проектирования и разработки. Это заставило разработчиков, работающих над WebCL, уделять безопасности первостепенное внимание. Немногие проблемы, которые были решены:
- Доступ к памяти за пределами выделенного пространства. Это происходит путем доступа к областям памяти за пределами выделенного пространства. Злоумышленник может переписать или стереть все важные данные, хранящиеся в этих ячейках памяти. Всякий раз, когда возникает такой случай, во время компиляции должна быть сгенерирована ошибка, а во время выполнения должен быть возвращен ноль, не позволяя программе перегружать память. Проект WebCL Validator, [7] был инициирован группой Khronos (разработчиками) по устранению этой уязвимости.
- Инициализация памяти: это делается для того, чтобы приложения не могли получить доступ к ячейкам памяти предыдущих приложений. 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: [Мета] Поддержка WebCL для WebKit , WebKit Bugzilla
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Хронос выпускает спецификацию WebCL 1.0» . 19 марта 2014 г.
- ^ Jump up to: а б «Хронос выпускает спецификацию WebCL 1.0» . Группа компаний «Хронос». 19 марта 2014 года . Проверено 19 марта 2014 г.
- ^ «ВебКЛ» . Исследования Нокиа . Проверено 6 мая 2012 г.
- ^ «Пешеходный переход — обзор WebCL» .
- ^ «Ускорение веб-приложений с помощью OpenCL» . ИБМ .
- ^ Jump up to: а б с д «Спецификация WebCL» . www.khronos.org . Проверено 14 сентября 2016 г.
- ^ «ХроносГруппа/webcl-валидатор» . Гитхаб . Проверено 14 сентября 2016 г.