WebCL - WebCL

WebCL
WebCL Logo.svg
Desarrollador (es) Grupo de trabajo WebCL
Lanzamiento estable
1.0 / 19 de marzo de 2014 ; Hace 6 años  ( 19/03/2014 )
Sistema operativo Multiplataforma
Tipo API
Sitio web www .khronos .org / webcl /

WebCL ( Web Computing Language ) es un enlace de JavaScript a OpenCL para computación paralela heterogénea dentro de cualquier navegador web compatible sin el uso de complementos , anunciado por primera vez en marzo de 2011. Está desarrollado sobre bases similares a OpenCL y se considera una versión de navegador del último. Principalmente, WebCL permite que las aplicaciones web actualicen la velocidad con CPU y GPU de múltiples núcleos . Con la creciente popularidad de las aplicaciones que necesitan procesamiento paralelo, como la edición de imágenes, las aplicaciones de realidad aumentada y los juegos sofisticados, se ha vuelto más importante mejorar la velocidad computacional. Con estas razones de fondo, una organización sin fines de lucro Khronos Group diseñó y desarrolló WebCL, que es un enlace de Javascript a OpenCL con una programación de kernel portátil, que permite la computación paralela en navegadores web, en una amplia gama de dispositivos. En resumen, WebCL consta de dos partes, una es la programación del kernel, que se ejecuta en los procesadores (dispositivos) y la otra es JavaScript, que vincula la aplicación web a OpenCL. La especificación completada y ratificada para WebCL 1.0 se publicó el 19 de marzo de 2014.

Implementación

Actualmente, ningún explorador admite WebCL de forma nativa. Sin embargo, se utilizan complementos no nativos para implementar WebCL. Por ejemplo, Nokia desarrolló una extensión WebCL. Mozilla no planea implementar WebCL a favor de OpenGL ES 3.1 Compute Shaders .

Borrador de trabajo de WebCL

Ejemplo cCode

La unidad básica de un programa paralelo es el kernel . Un kernel es cualquier tarea paralelizable que se utiliza para realizar un trabajo específico. Más a menudo, las funciones se pueden realizar como núcleos. Un programa puede estar compuesto por uno o más núcleos. Para realizar un kernel, es esencial que una tarea sea paralelizable. Las dependencias de datos y el orden de ejecución juegan un papel vital en la producción de algoritmos eficientes en paralelo. Se puede pensar en un ejemplo simple del caso del desenrollado de bucles realizado por compiladores de C, donde una declaración como:

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

se puede desenrollar en:

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

Las declaraciones anteriores se pueden paralelizar y se pueden ejecutar simultáneamente. Un kernel sigue un enfoque similar en el que solo se captura la instantánea de la i- ésima iteración dentro del kernel. Reescribamos el código anterior usando un kernel:

__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];
}

La ejecución de una aplicación WebCL implica los siguientes pasos:

  1. Permitir el acceso a los dispositivos y brindar contexto
  2. Entregar el kernel a un dispositivo
  3. Hacer que el dispositivo ejecute el kernel
  4. Recuperar resultados del dispositivo
  5. Usa los datos dentro de JavaScript

Más detalles sobre el mismo se pueden encontrar en

Lista de excepciones

WebCL, al ser una implementación basada en JavaScript, no devuelve un código de error cuando ocurren errores. En su lugar, genera una excepción como OUT_OF_RESOURCES, OUT_OF_HOST_MEMORY o WEBCL_IMPLEMENTATION_FAILURE específico de WebCL. El objeto de excepción describe el nombre legible por máquina y el mensaje legible por humanos que describe el error. La sintaxis es la siguiente:

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
};

A partir del código anterior, se puede observar que el campo del mensaje puede ser un valor NULL.

Lista de algunas otras excepciones:

  1. INVALID_OPERATION: si la forma de bloqueo de esta función se llama desde un WebCLCallback
  2. INVALID_VALUE - si eventWaitList está vacío
  3. INVALID_CONTEXT: si los eventos especificados en eventWaitList no pertenecen al mismo contexto
  4. INVALID_DEVICE_TYPE: si se proporciona deviceType, pero no es uno de los valores enumerados válidos
  5. DEVICE_NOT_FOUND: si no hay ningún WebCLDevice disponible que coincida con el deviceType dado

Puede encontrar más información sobre excepciones en el documento de especificaciones.

Hay otra excepción que se genera al intentar llamar a un objeto que está 'liberado'. Al utilizar el método de liberación, el objeto no se elimina de forma permanente, pero libera los recursos asociados con ese objeto. Para evitar esta excepción, se puede utilizar el método 'releaseAll', que no solo libera los recursos sino que también elimina todos los objetos asociados creados.

Seguridad

WebCL, al ser un software de composición abierta desarrollado para aplicaciones web, también existe un gran margen para las vulnerabilidades en los campos de diseño y desarrollo. Esto obligó a los desarrolladores que trabajaban en WebCL a darle la máxima importancia a la seguridad. Algunas preocupaciones que se abordaron son:

  1. Acceso a la memoria fuera de los límites: esto ocurre al acceder a las ubicaciones de la memoria, fuera del espacio asignado. Un atacante puede volver a escribir o borrar todos los datos importantes almacenados en esas ubicaciones de memoria. Siempre que surja tal caso, se debe generar un error en el momento de la compilación y se debe devolver cero en el tiempo de ejecución, sin permitir que el programa anule la memoria. El Grupo Khronos (desarrolladores) inició un proyecto WebCL Validator para manejar esta vulnerabilidad.
  2. Inicialización de memoria: esto se hace para evitar que las aplicaciones accedan a las ubicaciones de memoria de aplicaciones anteriores. WebCL garantiza que esto no suceda al inicializar todos los búferes, las variables que se usan en cero antes de ejecutar la aplicación actual. OpenCL 1.2 tiene una extensión 'cl_khr_initialize_memory', que lo habilita.
  3. Denegación de servicio: WebCL o el navegador no pueden eliminar totalmente el ataque más común a las aplicaciones web. OpenCL se puede proporcionar con temporizadores de vigilancia y multitarea preventiva, que WebCL puede utilizar para detectar y terminar los contextos que están tardando demasiado o consumen muchos recursos. Existe una extensión de OpenCL 1.2 'cl_khr_terminate_context' como la anterior, que permite terminar el proceso que podría causar un ataque de denegación de servicio.

Errores de navegador relacionados

  • Error 664147 - [WebCL] agrega openCL en gecko , Mozilla
  • Error 115457: [Meta] Soporte WebCL para WebKit , WebKit Bugzilla

Ver también

Referencias

enlaces externos