Enabling OpenCL Acceleration of Web Applications



Similar documents
WebCL for Hardware-Accelerated Web Applications. Won Jeon, Tasneem Brutch, and Simon Gibbs

Parallel Web Programming

Crosswalk: build world class hybrid mobile apps

Course materials. In addition to these slides, C++ API header files, a set of exercises, and solutions, the following are useful:

Press Briefing. GDC, March Neil Trevett Vice President Mobile Ecosystem, NVIDIA President Khronos. Copyright Khronos Group Page 1

Introducing PgOpenCL A New PostgreSQL Procedural Language Unlocking the Power of the GPU! By Tim Child

Performance Optimization and Debug Tools for mobile games with PlayCanvas

JavaFX Session Agenda

Introduction to WebGL

USING RUST TO BUILD THE NEXT GENERATION WEB BROWSER

PARALLEL JAVASCRIPT. Norm Rubin (NVIDIA) Jin Wang (Georgia School of Technology)


Geo-Scale Data Visualization in a Web Browser. Patrick Cozzi pcozzi@agi.com

Web Based 3D Visualization for COMSOL Multiphysics

Outline. 1.! Development Platforms for Multimedia Programming!

OpenGL Insights. Edited by. Patrick Cozzi and Christophe Riccio

Mobile App Infrastructure for Cross-Platform Deployment (N11-38)

Dashboard Skin Tutorial. For ETS2 HTML5 Mobile Dashboard v3.0.2

Making the Most of Existing Public Web Development Frameworks WEB04

SYCL for OpenCL. Andrew Richards, CEO Codeplay & Chair SYCL Working group GDC, March Copyright Khronos Group Page 1

Mobile Web Design with HTML5, CSS3, JavaScript and JQuery Mobile Training BSP-2256 Length: 5 days Price: $ 2,895.00

Lecture 3. Optimising OpenCL performance

Unlocking the Java EE Platform with HTML 5

Introduction to OpenCL Programming. Training Guide

Firefox for Android. Reviewer s Guide. Contact us: press@mozilla.com

Lecture 1 Introduction to Android

GPU Profiling with AMD CodeXL

Visualizing Data: Scalable Interactivity

Trends in HTML5. Matt Spencer UI & Browser Marketing Manager

The Most Popular UI/Apps Framework For IVI on Linux

Writing Applications for the GPU Using the RapidMind Development Platform

Maximize Application Performance On the Go and In the Cloud with OpenCL* on Intel Architecture

A little code goes a long way Cross-platform game development with Lua. Ivan Beliy, Software Engineer

Firefox, Opera, Safari for Windows BMP file handling information leak. September Discovered by: Mateusz j00ru Jurczyk, Hispasec Labs

How To Teach Computer Graphics

MASTERTAG DEVELOPER GUIDE

Experiences on using GPU accelerators for data analysis in ROOT/RooFit

Development Techniques for Native/Hybrid Tizen Apps. Presented by Kirill Kruchinkin

Why HTML5 Tests the Limits of Automated Testing Solutions

An Introduction to Android

Binary search tree with SIMD bandwidth optimization using SSE

AUTOMATED CONFERENCE CD-ROM BUILDER AN OPEN SOURCE APPROACH Stefan Karastanev

Designing for Mobile. Jonathan Wallace

OpenACC 2.0 and the PGI Accelerator Compilers

AMD GPU Architecture. OpenCL Tutorial, PPAM Dominik Behr September 13th, 2009

Extending Tizen Native Framework with Node.js

POSIX : Certified by IEEE and The Open Group a briefing.

Java 7 Recipes. Freddy Guime. vk» (,\['«** g!p#« Carl Dea. Josh Juneau. John O'Conner

ANDROID PROGRAMMING - INTRODUCTION. Roberto Beraldi

Experiences with 2-D and 3-D Mathematical Plots on the Java Platform

GPU Architectures. A CPU Perspective. Data Parallelism: What is it, and how to exploit it? Workload characteristics

Issues of Hybrid Mobile Application Development with PhoneGap: a Case Study of Insurance Mobile Application

GPU Parallel Computing Architecture and CUDA Programming Model

<Insert Picture Here> Java, the language for the future

RIA DEVELOPMENT OPTIONS - AIR VS. SILVERLIGHT

Responsive Web Design Creative License

Manjrasoft Market Oriented Cloud Computing Platform

AN INTRODUCTION TO MAPBOX TOOLS AND SOFTWARE. Matt Gregory 24 July 2013

Programming 3D Applications with HTML5 and WebGL

Vector Web Mapping Past, Present and Future. Jing Wang MRF Geosystems Corporation

APPLICATIONS OF LINUX-BASED QT-CUDA PARALLEL ARCHITECTURE

Introduction to TIZEN SDK

IBM Tivoli Composite Application Manager for Microsoft Applications: Microsoft Internet Information Services Agent Version Fix Pack 2.

HTML5 / NATIVE / HYBRID

Dynamic Web Programming BUILDING WEB APPLICATIONS USING ASP.NET, AJAX AND JAVASCRIPT

Sisense. Product Highlights.

IE Class Web Design Curriculum

A Hybrid Visualization System for Molecular Models

OpenGL & Delphi. Max Kleiner. 1/22

Introduction GPU Hardware GPU Computing Today GPU Computing Example Outlook Summary. GPU Computing. Numerical Simulation - from Models to Software

CIS 467/602-01: Data Visualization

ORACLE ADF MOBILE DATA SHEET

ELEC 377. Operating Systems. Week 1 Class 3

Getting Started with Telerik Data Access. Contents

Mobile Operating Systems. Week I

Art of Code Front-end Web Development Training Program

4/25/2016 C. M. Boyd, Practical Data Visualization with JavaScript Talk Handout

SAP BusinessObjects Design Studio Deep Dive. Ian Mayor and David Stocker SAP Session 0112

Texture Cache Approximation on GPUs

Research on HTML5 in Web Development

Web Browser. Fetches/displays documents from web servers. Mosaic 1993

Accelerating Business Value by

Mitglied der Helmholtz-Gemeinschaft. OpenCL Basics. Parallel Computing on GPU and CPU. Willi Homberg. 23. März 2011

maximizing IT productivity

Finger Paint: Cross-platform Augmented Reality

Topics. Introduction. Java History CS 146. Introduction to Programming and Algorithms Module 1. Module Objectives

An evaluation of JavaFX as 2D game creation tool

ns-3 development overview ns-3 GENI Eng. Conf., Nov

NVPRO-PIPELINE A RESEARCH RENDERING PIPELINE MARKUS TAVENRATH MATAVENRATH@NVIDIA.COM SENIOR DEVELOPER TECHNOLOGY ENGINEER, NVIDIA

Front-End Performance Testing and Optimization

Business Application Development Platform

HYBRID APPLICATION DEVELOPMENT IN PHONEGAP USING UI TOOLKITS

OpenGL ES Safety-Critical Profile Philosophy

Enterprise Mobile Solutions

Computer Graphics on Mobile Devices VL SS ECTS

Sandy. The Malicious Exploit Analysis. Static Analysis and Dynamic exploit analysis. Garage4Hackers

Transcription:

Enabling OpenCL Acceleration of Web Applications Tasneem Brutch Samsung Electronics Khronos WebCL Working Group Chair LinuxCon Sept. 17, 2013, New Orleans, LA

Outline WebCL tutorial, demos and coding examples WebCL use case: Big Data Visualization (presentation and demo) WebCL open API standardization: Status and roadmap Security requirements and provisions & WebCL Kernel Validator OpenCL to WebCL translator utility Questions and Answers

WebCL Overview High performance: - Enables acceleration of compute-intensive web applications, through high performance parallel processing. Platform independent: - Portable and efficient access, to heterogeneous multicore devices. - Provides single and coherent standard across desktop and mobile devices. WebCL (Web Computing Language) is a JavaScript binding to OpenCL Being standardized by the Khronos standards organization

Motivation Enable new mobile apps with high compute demands: - Big Data Visualization - Augmented Reality - Video Processing - Computational Photography - 3D Games Popularity of web-centric platforms

OpenCL Features Overview C-based cross-platform programming interface Kernels: Subset of ISO C99 with language extensions Run-time or build-time compilation of kernels Well-defined numerical accuracy: IEEE 754 rounding with specified max. error Rich set of built-in functions: cross, dot, sin, cos, pow, log, Accelerated mathematical operations (fast-math)

OpenCL Platform Model A host is connected to one or more OpenCL devices OpenCL device: - A collection of one or more compute units - (~ cores) - A compute unit is composed of one or more processing elements - (~ threads) - Processing element code execution: - As SIMD or SPMD Host........................... Compute Device Compute Unit........................... Processing Element

OpenCL Execution Model Kernel: - Basic unit of executable code, similar to a C function - Data-parallel or task-parallel Work-group Example Program: - Collection of kernels, and functions called by OpenCL kernels - Analogous to a dynamic library (run-time linking) Command Queue: - Applications queue kernels and data transfers - Performed in-order or out-of-order Work-item: - An execution of kernel by a processing element (~ thread) Work-group: - Collection of related work-items executing on a single compute unit (~ core) # work-items = # pixels # work-groups = # tiles work-group size = tile width * tile height

OpenCL Memory Model Memory types: - Private memory (blue) - Per work-item - Local memory (green) - At least 32KB split into blocks - Available to a work-item in a given work-group - Global/Constant memory (orange) - Not synchronized - Host memory (red) - On the CPU Memory management is explicit: - Application must move data from host à global à local and back

OpenCL Kernels OpenCL kernel - Defined on an N-dimensional computation domain - Executes a kernel at each point of the computation domain Traditional Loop void vectormult( const float* a, const float* b, float* c, const unsigned int count) { for(int i=0; i<count; i++) c[i] = a[i] * b[i]; } Data Parallel OpenCL kernel void vectormult( global const float* a, global const float* b, global float* c) { int id = get_global_id(0); c[id] = a[id] * b[id]; }

Executing OpenCL Programs 1. Query host for OpenCL devices 2. Create a context to associate OpenCL devices Context 3. Create programs for execution on one or more associated devices Programs Kernels Memory Objects Command Queue 4. Select kernels to execute from the programs 5. Create memory objects accessible from the host and/or the device 6. Copy memory data to the device as needed Programs Kernel0 Kernel1 Kernel2 Images Buffers In order & out of order 7. Provide kernels to command queue for execution Compile Create data & arguments Send for execution 8. Copy results from the device to the host 10

Programming WebCL Initialization Creating kernel Running kernel WebCL image object creation - From Uint8Array - From <img>, <canvas>, or <video> - From WebGL vertex buffer - From WebGL texture WebGL vertex animation WebGL texture animation 11

Nbody Simulation Calculates the positions and velocities of N particles and animates them Two simulation modes: - JavaScript and WebCL Two drawing modes: - JavaScript and WebGL with 2D/3D rendering option For 1024 particles, WebCL gets 20~40x faster simulation time on Mac. http://www.youtube.com/watch?v=f7ysqxz3j7o

Deform Calculates and renders transparent and reflective deformed spheres in skybox scene. Performance comparison on Mac: - JS: ~1 FPS - WebCL: 87-116 FPS http://www.youtube.com/watch?v=9ttux1a-nuc

WebCL Initialization <script> var platforms = webcl.getplatforms(); var devices = platforms[0].getdevices(webcl.device_type_gpu); var context = webcl.createcontext({ WebCLDevice: devices[0]}); var queue = context.createcommandqueue(); </script> 14

Creating WebCL Kernel <script id="squareprogram" type="x-kernel"> kernel square( global float* input, global float* output, const unsigned int count) { int i = get_global_id(0); if(i < count) output[i] = input[i] * input[i]; } </script> <script> var programsource = getprogramsource("squareprogram");//javascript function using DOM APIs var program = context.createprogram(programsource); program.build(); var kernel = program.createkernel("square"); </script> OpenCL C (based on C99)

Running WebCL Kernels <script> var numbytes = Float32Array.BYTES_PER_ELEMENT * count; var inputbuf = context.createbuffer(webcl.mem_read_only, numbytes); var outputbuf = context.createbuffer(webcl.mem_write_only, numbytes); var data = new Float32Array(count); // populate data //Second arg indicates blocking API queue.enqueuewritebuffer(inputbuf, true, bufferoffset = 0, numbytes, data); kernel.setkernelarg(0, inputbuf); kernel.setkernelarg(1, outputbuf); kernel.setkernelarg(2, count, WebCL.KERNEL_ARG_INT); var workgroupsize = kernel.getworkgroupinfo(devices[0], WebCL.KERNEL_WORK_GROUP_SIZE); var localworkgroupsize = NULL;//automatically determine how to breakup global-work-items queue.enqueuendrangekernel(kernel, [count], [workgroupsize], localworkgroupsize); queue.finish(); //This API blocks queue.enqueuereadbuffer(outputbuf, true, offset=0, numbytes, data);//second arg indicates blocking API </script>

WebCL Image Object Creation From Uint8Array () <script> var bpp = 4; // bytes per pixel var pixels = new Uint8Array(width * height * bpp); var pitch = width * bpp; var climage = context.createimage(webcl.mem_read_only, {channelorder:webcl.rgba, channeltype:webcl.unorm_int8, width:width, height:height, pitch:pitch } ); </script> From <img> or <canvas> or <video> <script> var canvas = document.getelementbyid("acanvas"); var climage = context.createimage(webcl.mem_read_only, canvas); // format, size from element </script>

WebCL: Vertex Animation Vertex Buffer Initialization: <script> var points = new Float32Array(NPOINTS * 3); Web GL Web CL var glvertexbuffer = gl.createbuffer(); gl.bindbuffer(gl.array_buffer, glvertexbuffer); gl.bufferdata(gl.array_buffer, points, gl.dynamic_draw); var clvertexbuffer = context.createfromglbuffer(webcl.mem_read_write, glvertexbuffer); kernel.setkernelarg(0, NPOINTS, WebCL.KERNEL_ARG_INT); kernel.setkernelarg(1, clvertexbuffer); </script> Vertex Buffer Update and Draw: <script> function DrawLoop() { Web CL Web GL } </script> queue.enqueueacquireglobjects([clvertexbuffer]); queue.enqueuendrangekernel(kernel, [NPOINTS], [workgroupsize], null); queue.enqueuereleaseglobjects([clvertexbuffer]); gl.bindbuffer(gl.array_buffer, glvertexbuffer); gl.clear(gl.color_buffer_bit); gl.drawarrays(gl.points, 0, NPOINTS); gl.flush();

WebCL: Texture Animation Texture Initialization: <script> var gltexture = gl.createtexture(); gl.bindtexture(gl.texture_2d, gltexture); gl.teximage2d(gl.texture_2d, 0, gl.rgba, gl.rgba, gl.unsigned_byte, image); var cltexture = context.createfromgltexture2d(webcl.mem_read_write, gl.texture_2d, gltexture); kernel.setkernelarg(0, NWIDTH, WebCL.KERNEL_ARG_INT); kernel.setkernelarg(1, NHEIGHT, WebCL.KERNEL_ARG_INT); kernel.setkernelarg(2, cltexture); </script> Texture Update and Draw: <script> function DrawLoop() { queue.enqueueacquireglobjects([cltexture]); queue.enqueuendrangekernel(kernel, [NWIDTH*NHEIGHT], [workgroupsize], null); queue.enqueuereleaseglobjects([cltexture]); gl.clear(gl.color_buffer_bit); gl.activetexture(gl.texture0); gl.bindtexture(gl.texture_2d, gltexture); gl.flush(); } </script>

Interactive Big Data Visualization Powered by WebCL To enable interactive exploration of big data! Leo Meyerovich, Matthew Torok, Eric Atkinson, Rastislav Bodik UC Berkeley Parallel Computing Lab

Interactive Big Data Visualization BIG DATA INTERACTIVE Efficient Productive VISUALIZATIONS

DEMO: D3.js

DEMO: Superconductor

Demos Automatic parallelization Superconductor on three data sets: - 10,000 nodes: 71 fps - 100,000 nodes: 61 fps - 1,000,000 nodes: 11 fps JavaScript: 1,000 nodes at 27 fps - 100x difference

Four Tasks of Visualization Layout Render Data Focus of WebCL use case development Stylize Challenge: Scalable language support for each one? 25 25

Web Programming for Big Data Visualization Data => JSON (JavaScript Object Notation) Custom styling => CSS selectors Simple scripting => JavaScript Layout: - HTML (paragraph, table, ) with JavaScript (calendar, ): too slow - New Domain Specific Language (DSL) for custom layouts - Simple but optimizable

Opportunity: Deploy Parallel JS Libraries shared memory JavaScript VM Web Workers Parsing Styling Layout Rendering 27

Parallel Runtime Architecture data, styling, widgets, scripts, multithreaded Parser.js Selectors (CL) Layout (CL) JavaScript VM Renderer (GL) GPU superconductor.js

Layout DSL: Offline Compiler custom layouts Compiler Parser.js Selectors (CL) Layout (CL) Renderer (GL) superconductor.js JavaScript VM Custom layout widget definition 10px 5px class HBox: w := left.w + right.w 1. Local, single-assignment 2. Compiler automatically parallelizes

Layout Compiler: Scheduling + Code Generation COMPILER custom layouts 1. stajc scheduler traversals over data Parser.js Selectors (CL) Layout (CL) Renderer (GL) JavaScript VM 2. FlaMening superconductor.js

Layout Scheduler Finds Parallel Breadth-First Traversals Breadth- first, bomom- up w,h w,h w,h w,h w,h w,h Breadth- first, top- down x,y data tree Traversal sequence valid for any data set: Output as WebCL

Code Generated Tree Traversal for WebCL level n w h x y Array per attribute level n + m Tree Data Nodes in arrays Parallel for loop Compiler handles these low-level optimizations.

WebCL Big Data Vis. Use Case: Summary Big data visualization language Orders-of-magnitude speedup over plain JavaScript Approach: - GPU compiler - GPU rendering library Parallel Schedule Synthesis for Attribute Grammers, ACM Principles and Practice of Parallel Programming, L. Meyerovich, M. Torok, E. Atkinson, R. Bodik, Feb. 2013, Shenzen, China.

WebCL Standardization, Implementation & Conformance Testing

WebCL API Standardization Standardized, portable and efficient access to heterogeneous multicore devices from web content Define ECMAScript API for interaction with OpenCL Designed for security and robustness WebCL 1.0 based on OpenCL 1.1 Embedded Profile: - Implementations may utilize OpenCL 1.1 or 1.2 Interoperability between WebCL and WebGL through a WebCL extension Initialization simplified for portability WebCL kernel validation

WebCL 1.0 Kernels Kernels do not support structures as arguments Kernels name must be less than 256 characters Mapping of CL memory objects into host memory space is not supported Binary kernels are not supported in WebCL 1.0 Support for OpenCL extensions: - OpenCL Extension dependent functions may not be supported, or may require translation to WebCL specific extension. No 3D image support in WebCL 1.0: - May change in future WebCL versions Enhanced portability and simplified initialization: - Some device attributes may not be visible. - Code strongly bound to these attributes may not be translated Parameter mapping: - Certain OpenCL parameters may not directly carry over to WebCL, or a subset of OpenCL parameters may be available in WebCL.

WebCL API WebCLExtension Window and WorkerUtils implements Platform layer WebCLEnvironment WebCLPlatform WebCLDevice - Declares WebCL webcl HTMLWindow or WorkerUtils + webcl WebCL WebCLContext object (if not there, then WebCL is not supported) * * * * * 3 Layers: Platform, Compiler, Runtime WebCLProgram WebCLMemoryObject {abstract} WebCLCommandQueue WebCLEvent WebCLSampler WebCLKernel WebCLBuffer WebCLImage Compiler layer Runtime layer

WebCL API API mimic object-oriented nature of OpenCL 1.1 in JavaScript WebCL object defines all WebCL constants WebCL may support the following extensions - GL_SHARING interoperability with WebGL - KHR_FP16 16-bit float support in kernels - KHR_FP64 64-bit float support in kernels HTML data interoperability - <canvas>, <image>, and ImageData sources can be bound to WebCLBuffer and WebCLImage - <video> tag can be bound to a WebCLImage

WebCL 1.0 API: Current Status WebCL 1.0 API definition: - Working Draft released since Apr. 2012. - Working Draft Publicly available at www.khronos.org/webcl - Expected WebCL1.0 specification release: 1H, 2014 Strong interest in WebCL API: - Participation by Browser vendors, OpenCL hardware/driver vendors, application developers - Non-Khronos members engaged through public mailing list: public_webcl@khronos.org

WebCL Conformance Testing WebCL Conformance Framework and Test Suite (WiP) Scope - Full API coverage - Input/output validation - Error handling checks for all methods in the API - Security and robustness related tests - Two OpenCL 1.2 robustness and security extensions ratified in 2012 - Context termination: clcreatecontext() with CL_CONTEXT_MEMORY_INITIALIZE_KHR - Memory initialization: clabortcontextkhr (cl_context) - Conformance tests related to WebCL Validator completed - Kernel validator enforces prevention against out of bounds memory accesses - WebCL requires a conformant underlying OpenCL on the host system - Tests will not re-run OpenCL conformance test suite in JavaScript Conformance tests for OpenCL 1.2 security and robustness extensions - Contributed by Samsung and reviewed by WebCL members

WebCL Conformance Testing: Status Clean up of existing tests - Defined and deployed coding style guide - Removed code duplication - Consolidated redundant tests - Shared kernel sources between tests where appropriate possible - Compiled common routines into helper files (e.g. webcl-utils.js) Improved conformance framework structure - Aligned test framework with WebGL conformance test suite Completion of API unit tests/conformance tests - ~80% WebCL APIs are covered today (WiP) Redesigned start page - Support for running the test suite on any OpenCL platforms/devices available on the host machine Available on GitHub: https://github.com/khronosgroup/webcl-conformance/ Tracked by a meta bug on Khronos public bugzilla: - https://www.khronos.org/bugzilla/show_bug.cgi?id=793

WebCL API Security and Robustness

Security and Robustness Security threats addressed: Prevention of information leakage from out of bounds memory access Prevent denial of service from long running kernels Security requirements: Prevent out of range memory accesses - Prevent out of bounds memory accesses - Prevent out of bounds (OOB) memory writes - Return a pre-defined value for out of bound reads - Implementation of WebCL Kernel Validator Memory initialization to prevent information leakage - Initialization of private and local memory objects Prevent potential Denial of Service from long running kernels - Ability to terminate contexts with long running kernels Prevent security vulnerabilities from undefined behavior - Undefined OpenCL behavior to be defined by WebCL - Robustness through comprehensive conformance testing

WebCL API Security: Current Status Cross-working group security initiative - Engaged with OpenCL, WebGL, OpenGL, and OpenGL-ES WGs Ratification of OpenCL 1.2 robustness/security extensions - Announced in Siggraph Asia, Dec. 2012 - OpenCL Context Termination extension - OpenCL Memory Initialization extension WebCL Kernel Validator - Open source WebCL kernel validator development Phase-I completed: - Accessible from https://github.com/khronosgroup/webcl-validator - Tracked by a meta bug on Khronos public bugzilla: - http://www.khronos.org/bugzilla/show_bug.cgi?id=875

WebCL Kernel Validator Protection against out of bounds memory accesses: - The memory allocated in the program has to be initialized (prevent access to data from other programs) - Untrusted code must not access invalid memory Memory initialization: - Initializes local and private memory (in case underlying OpenCL implementation does not implement memory initialization extension) Validator implementation: - Keeps track of memory allocations (also in runtime if platform supports dynamic allocation) - Traces valid ranges for reads and writes - Validates them efficiently while compiling or at run-time

OpenCL to WebCL Translator Utility

OpenCL to WebCL Translator Utility OpenCL to WebCL Kernel Translator - Input: An OpenCL kernel - Output: WebCL kernel, and a log file, that details the translation process. - Tracked by a meta bug on Khronos public bugzilla: - http://www.khronos.org/bugzilla/show_bug.cgi?id=785 Host API translation (WiP) - Accepts an OpenCL host API calls and produces the WebCL host API calls that will eventually be wrapped in JS. - Provides verbose translation log file, detailing the process and any constraints. - Tracked by a meta bug on Khronos public bugzilla: - http://www.khronos.org/bugzilla/show_bug.cgi?id=913 47

WebCL Prototypes & Experimental Integration into Browser Engines

WebCL Prototype Implementations Nokia s prototype: - Firefox extension, open sourced May 2011 (Mozilla Public License 2.0) - https://github.com/toaarnio/webcl-firefox Samsung s prototype: - Uses WebKit, open sourced June 2011 (BSD) - https://github.com/sra-siliconvalley/webkit-webcl Motorola Mobility s prototype: - Uses Node.js, open sourced April 2012 (BSD) - https://github.com/motorola-mobility/node-webcl

WebCL on Firefox Firefox add-on - Binaries for Windows, Linux, Mac: http://webcl.nokiaresearch.com - Android should be doable with reasonable effort any volunteers? - Source code: https://github.com/toaarnio/webcl-firefox - Main limitation: Cannot share textures/buffers with WebGL Special Firefox build with integrated WebCL - Browser internal APIs allow WebGL resource sharing - Currently Work-in-progress http://webcl.nokiaresearch.com/smallpt/webcl-smallpt.html http://fract.ured.me/

Samsung s WebCL Implementation Samsung provided an open-source version of their first prototype WebCL implementation for WebKit in July 2011 (BSD license). Since Q4 of 2012 the prototype has been through a major refinement effort, including: - Addition of a general purpose abstraction layer for Compute languages, called ComputeContext. - Class redesign and clean up - Layout tests support - Kept in sync with the latest spec Project currently being hosted on GitHub - https://github.com/sra-siliconvalley/webkit-webcl - (https://code.google.com/p/webcl/ is obsolete)

WebCL API Summary WebCL is a JavaScript binding to OpenCL, allowing web applications to leverage heterogeneous computing resources. WebCL enables significant acceleration of compute-intensive web applications. WebCL API is designed for security.

Resources and Contacts WebCL Resources: - WebCL working draft: https://cvs.khronos.org/svn/repos/registry/trunk/public/webcl/spec/latest/index.html - WebCL distribution lists: public_webcl@khronos.org, webcl@khronos.org - Nokia WebCL prototype: http://webcl.nokiaresearch.com/ - Samsung WebCL prototype: https://github.com/sra-siliconvalley/webkit-webcl - Motorola WebCL prototype: https://github.com/motorola-mobility/node-webcl Contacts: - Tasneem Brutch (t.brutch@samsung.com), WebCL Working Group Chair - Tomi Aarnio (tomi.aarnio@nokia.com), WebCL Specification Editor - Mikael Bourges-Sevenier (msevenier@aptina.com), WebCL Specification Editor

Questions and Answers Thank You!