Разработчик (и) | Рабочая группа 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 года.
В настоящее время никакие браузеры не поддерживают WebCL. Однако для реализации WebCL используются неродные надстройки. Например, Nokia разработала расширение WebCL. Mozilla не планирует внедрять WebCL в пользу OpenGL ES 3.1 Compute Shaders.
Базовой единицей параллельной программы является ядро . Ядро - это любая параллелизируемая задача, используемая для выполнения определенного задания. Чаще всего функции могут быть реализованы в виде ядер. Программа может состоять из одного или нескольких ядер. Для реализации ядра важно, чтобы задачу можно было распараллеливать. Зависимости данных и порядок выполнения играют жизненно важную роль в создании эффективных параллельных алгоритмов. Простым примером может служить случай разворачивания цикла , выполняемого компиляторами 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 включает следующие шаги:
Дополнительные сведения о том же можно можно найти в
WebCL, будучи реализацией на основе JavaScript, не возвращает код ошибки при возникновении ошибок. Вместо этого он генерирует исключение, такое как OUT_OF_RESOURCES, OUT_OF_HOST_MEMORY или специфичное для WebCL WEBCL_IMPLEMENTATION_FAILURE. Объект исключения описывает машиночитаемое имя и удобочитаемое сообщение с описанием ошибки. Синтаксис следующий:
исключение WebCLException: DOMException {имя DOMString; // Строковое представление числового кода ошибки, например "INVALID_VALUE" DOMString? сообщение; // Зависящее от реализации описание причины исключения};
Из приведенного выше кода можно заметить, что поле сообщения может иметь значение NULL.
Список нескольких других исключений:
Дополнительную информацию об исключениях можно найти в документе со спецификациями.
Есть еще одно исключение, которое возникает при попытке вызвать объект, который «освобожден». При использовании метода release объект не удаляется окончательно, но освобождает ресурсы, связанные с этим объектом. Чтобы избежать этого исключения, можно использовать метод releaseAll, который не только освобождает ресурсы, но и удаляет все связанные созданные объекты.
WebCL, будучи открытым программным обеспечением, разработанным для веб-приложений, также существует множество уязвимостей в областях проектирования и разработки. Это заставило разработчиков, работающих над WebCL, придать безопасности первостепенное значение. Было решено несколько проблем: