SlideShare a Scribd company logo
1 of 46
Download to read offline
: Enabling OpenCL
Acceleration of Web Applications
Mikaël Bourges-Sévenier
Aptina Imaging, Inc.
WebCL WG Editor

Tasneem Brutch

Samsung Electronics
WebCL WG Chair
AMD Developer Summit
Nov. 12, 2013, San Jose, CA
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 execute in lock-step

# 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(

Data Parallel OpenCL
kernel void vectorMult(

const float* a,
const float* b,

global const float* a,
global const float* b,

float* c,

global float* c)

const unsigned int count)

{

{

int id = get_global_id(0);
for(int i=0; i<count; i++)
c[i] = a[i] * b[i];

}

c[id] = a[id] * b[id];
}
Executing OpenCL Programs
1.  Query host for OpenCL devices
Context	
  

2.  Create a context to associate OpenCL
devices
3.  Create programs for execution on one or
more associated devices
4.  Select kernels to execute from the
programs
5.  Create memory objects accessible from the
host and/or the device

Programs	
  

Kernels	
  

Memory	
  
Objects	
  

Kernel0	
  

Programs	
  

Command	
  
Queue	
  

Images	
  

Kernel1	
  
Kernel2	
  

Buffers	
  

In	
  order	
  &	
  	
  
out	
  of	
  order	
  

6.  Copy memory data to the device as needed
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
-  From
-  From
-  From

Uint8Array
<img>, <canvas>, or <video>
WebGL vertex buffer
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)
OpenCL C
{
(based on C99)
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>
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);
var glVertexBuffer = gl.createBuffer();
Web	
  
gl.bindBuffer(gl.ARRAY_BUFFER, glVertexBuffer);
GL	
  
gl.bufferData(gl.ARRAY_BUFFER, points, gl.DYNAMIC_DRAW);
var clVertexBuffer = context.createFromGLBuffer(WebCL.MEM_READ_WRITE,
glVertexBuffer);
Web	
  
kernel.setKernelArg(0, NPOINTS, WebCL.KERNEL_ARG_INT);
CL	
  
kernel.setKernelArg(1, clVertexBuffer);
</script>

• 

Vertex Buffer Update and Draw:

<script>
function DrawLoop() {
queue.enqueueAcquireGLObjects([clVertexBuffer]);
Web	
  
queue.enqueueNDRangeKernel(kernel, [NPOINTS], [workGroupSize], null);
CL	
  
queue.enqueueReleaseGLObjects([clVertexBuffer]);
gl.bindBuffer(gl.ARRAY_BUFFER, glVertexBuffer);
Web	
  
gl.clear(gl.COLOR_BUFFER_BIT);
GL	
  
gl.drawArrays(gl.POINTS, 0, NPOINTS);
gl.flush();
}
</script>
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>
Accelerated, Interactive Big Data Visualization
for the Web

Powered by WebCL
Interactive Big Data Visualization for Mobile
• Prevalence of big data increasing
-  Tools to explore and understand data are
lacking.

• Well designed visualizations,

Visualization
Hand-Written
JavaScript Framework
GPU Code

Productive

Efficient/
Performant

-  to help identify patterns and to form new
hypothesis.

• Need web-friendly tools for big data
-  Requirements: Scalability and interactivity,
with performance ≥ 10FPS
-  Main target: Productivity programmers

BIG DATA
Efficient/
Performant
Productive
INTERACTIVE

VISUALIZATIONS
shared
memory

JavaScript	
  
VM	
  

Opportunity: Deploy Parallel JS Libraries

Parsing	
  
Styling	
  
Layout	
  

Web	
  Workers	
  

Rendering	
  
22
Performance Comparison
•  Sunburst’ graph demo lays out 846,820 hierarchical data points
as arcs expanding out from the center, with following benchmarks:
Data=846,820	
  	
  

Frame	
  Rate	
  	
  

Layout	
  Time	
  	
  

Rendering	
  Time	
  	
  

Average	
  	
  

12.28	
  FPS	
  	
  

67.3	
  ms	
  	
  

14.3	
  	
  

Std.	
  DeviaUon	
  	
  

0.56	
  FPS	
  	
  

4.27	
  ms	
  	
  

0.46	
  	
  

•  Sunburst graph was compared to d3.js JavaScript interactive data
visualization tool to run ~10,000 data points at ≥10 FPS.
•  Polling data visualization: Data from every polling place in a
large country was downloaded, and interactively visualized as a
treemaps.
•  Benchmark: Sunburst Graph @ 10 FPS
D3.j: <10,000 Nodes; WebCL Visualization: ~1,000,000 Nodes
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
Platform layer

WebCLPlatform

WebCLDevice

+ webcl

HTMLWindow
or
WorkerUtils

WebCL
WebCLContext

•  Window and WorkerUtils
implements
WebCLEnvironment
-  Declares WebCL webcl
object (if not there, then
WebCL is not supported)
•  3 Layers: Platform,
Compiler, Runtime

*

WebCLProgram

WebCLKernel

Compiler layer

*
WebCLMemoryObject
{abstract}

WebCLBuffer

Runtime layer

*

WebCLCommandQueue

WebCLImage

*

WebCLEvent

*

WebCLSampler
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
-  ~95% 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
38
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)
Motorola Mobility Node-WebCL
•  Uses Node.js JavaScript runtime
-  Implements WebCL, WebGL, DOM elements (<canvas>, <image>)
-  Cross-platform (Mac, Linux, Windows)
•  Debugging tool to develop WebCL & WebGL scenes
•  Can be extended with Node.js modules for server-side applications

Based on Iñigo Quilez, Shader Toy

Based on Apple QJulia

Based on Iñigo Quilez, Shader Toy
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!

More Related Content

What's hot

A Study of Virtual Machine Placement Optimization in Data Centers (CLOSER'2017)
A Study of Virtual Machine Placement Optimization in Data Centers (CLOSER'2017)A Study of Virtual Machine Placement Optimization in Data Centers (CLOSER'2017)
A Study of Virtual Machine Placement Optimization in Data Centers (CLOSER'2017)Stéphanie Challita
 
Unit i introduction to grid computing
Unit i   introduction to grid computingUnit i   introduction to grid computing
Unit i introduction to grid computingsudha kar
 
Mobile Network Layer
Mobile Network LayerMobile Network Layer
Mobile Network LayerRahul Hada
 
الوحدة الاولى - درس شبكات الحاسب
الوحدة الاولى - درس شبكات الحاسبالوحدة الاولى - درس شبكات الحاسب
الوحدة الاولى - درس شبكات الحاسبfofotayeb
 
Introduction to Network Function Virtualization (NFV)
Introduction to Network Function Virtualization (NFV)Introduction to Network Function Virtualization (NFV)
Introduction to Network Function Virtualization (NFV)rjain51
 
Deep Learning - RNN and CNN
Deep Learning - RNN and CNNDeep Learning - RNN and CNN
Deep Learning - RNN and CNNPradnya Saval
 
internetworking operation
internetworking operationinternetworking operation
internetworking operationSrinivasa Rao
 
Mobile Computing UNIT-7
Mobile Computing UNIT-7Mobile Computing UNIT-7
Mobile Computing UNIT-7Ramesh Babu
 
Horovod - Distributed TensorFlow Made Easy
Horovod - Distributed TensorFlow Made EasyHorovod - Distributed TensorFlow Made Easy
Horovod - Distributed TensorFlow Made EasyAlexander Sergeev
 
Chord Algorithm
Chord AlgorithmChord Algorithm
Chord AlgorithmSijia Lyu
 
Deep Learning
Deep LearningDeep Learning
Deep LearningJun Wang
 

What's hot (20)

A Study of Virtual Machine Placement Optimization in Data Centers (CLOSER'2017)
A Study of Virtual Machine Placement Optimization in Data Centers (CLOSER'2017)A Study of Virtual Machine Placement Optimization in Data Centers (CLOSER'2017)
A Study of Virtual Machine Placement Optimization in Data Centers (CLOSER'2017)
 
Unit i introduction to grid computing
Unit i   introduction to grid computingUnit i   introduction to grid computing
Unit i introduction to grid computing
 
Unit 2
Unit 2Unit 2
Unit 2
 
Mobile Network Layer
Mobile Network LayerMobile Network Layer
Mobile Network Layer
 
الوحدة الاولى - درس شبكات الحاسب
الوحدة الاولى - درس شبكات الحاسبالوحدة الاولى - درس شبكات الحاسب
الوحدة الاولى - درس شبكات الحاسب
 
Introduction to Network Function Virtualization (NFV)
Introduction to Network Function Virtualization (NFV)Introduction to Network Function Virtualization (NFV)
Introduction to Network Function Virtualization (NFV)
 
Frame relay
Frame relayFrame relay
Frame relay
 
Alternative metrics
Alternative metricsAlternative metrics
Alternative metrics
 
Deep Learning - RNN and CNN
Deep Learning - RNN and CNNDeep Learning - RNN and CNN
Deep Learning - RNN and CNN
 
internetworking operation
internetworking operationinternetworking operation
internetworking operation
 
Mobile Computing UNIT-7
Mobile Computing UNIT-7Mobile Computing UNIT-7
Mobile Computing UNIT-7
 
Cognitive radio
Cognitive radioCognitive radio
Cognitive radio
 
Gsm radio-interface
Gsm radio-interfaceGsm radio-interface
Gsm radio-interface
 
Horovod - Distributed TensorFlow Made Easy
Horovod - Distributed TensorFlow Made EasyHorovod - Distributed TensorFlow Made Easy
Horovod - Distributed TensorFlow Made Easy
 
WAN Technologies slide show
WAN Technologies slide showWAN Technologies slide show
WAN Technologies slide show
 
Chord Algorithm
Chord AlgorithmChord Algorithm
Chord Algorithm
 
Ch2
Ch2Ch2
Ch2
 
Deep Learning
Deep LearningDeep Learning
Deep Learning
 
Mac layer
Mac  layerMac  layer
Mac layer
 
OSI model (Tamil)
OSI model (Tamil)OSI model (Tamil)
OSI model (Tamil)
 

Viewers also liked

Boosting your HTML Apps – Overview of OpenCL and Hello World of WebCL
Boosting your HTML Apps – Overview of OpenCL and Hello World of WebCLBoosting your HTML Apps – Overview of OpenCL and Hello World of WebCL
Boosting your HTML Apps – Overview of OpenCL and Hello World of WebCLJanakiRam Raghumandala
 
Gpu with cuda architecture
Gpu with cuda architectureGpu with cuda architecture
Gpu with cuda architectureDhaval Kaneria
 
Introduction to OpenCL, 2010
Introduction to OpenCL, 2010Introduction to OpenCL, 2010
Introduction to OpenCL, 2010Tomasz Bednarz
 
An Introduction to OpenCL™ Programming with AMD GPUs - AMD & Acceleware Webinar
An Introduction to OpenCL™ Programming with AMD GPUs - AMD & Acceleware WebinarAn Introduction to OpenCL™ Programming with AMD GPUs - AMD & Acceleware Webinar
An Introduction to OpenCL™ Programming with AMD GPUs - AMD & Acceleware WebinarAMD Developer Central
 

Viewers also liked (6)

Boosting your HTML Apps – Overview of OpenCL and Hello World of WebCL
Boosting your HTML Apps – Overview of OpenCL and Hello World of WebCLBoosting your HTML Apps – Overview of OpenCL and Hello World of WebCL
Boosting your HTML Apps – Overview of OpenCL and Hello World of WebCL
 
Mobile gpu cloud computing
Mobile gpu cloud computing Mobile gpu cloud computing
Mobile gpu cloud computing
 
Gpu with cuda architecture
Gpu with cuda architectureGpu with cuda architecture
Gpu with cuda architecture
 
Introduction to OpenCL, 2010
Introduction to OpenCL, 2010Introduction to OpenCL, 2010
Introduction to OpenCL, 2010
 
Hands on OpenCL
Hands on OpenCLHands on OpenCL
Hands on OpenCL
 
An Introduction to OpenCL™ Programming with AMD GPUs - AMD & Acceleware Webinar
An Introduction to OpenCL™ Programming with AMD GPUs - AMD & Acceleware WebinarAn Introduction to OpenCL™ Programming with AMD GPUs - AMD & Acceleware Webinar
An Introduction to OpenCL™ Programming with AMD GPUs - AMD & Acceleware Webinar
 

Similar to WT-4069, WebCL: Enabling OpenCL Acceleration of Web Applications, by Mikael Sevenier

Simulating Networks Using Cisco Modeling Labs (TechWiseTV Workshop)
Simulating Networks Using Cisco Modeling Labs (TechWiseTV Workshop)Simulating Networks Using Cisco Modeling Labs (TechWiseTV Workshop)
Simulating Networks Using Cisco Modeling Labs (TechWiseTV Workshop)Robb Boyd
 
How to Puppetize Google Cloud Platform - PuppetConf 2014
How to Puppetize Google Cloud Platform - PuppetConf 2014How to Puppetize Google Cloud Platform - PuppetConf 2014
How to Puppetize Google Cloud Platform - PuppetConf 2014Puppet
 
Ansible- Durham Meetup: Using Ansible for Cisco ACI deployment
Ansible- Durham Meetup: Using Ansible for Cisco ACI deploymentAnsible- Durham Meetup: Using Ansible for Cisco ACI deployment
Ansible- Durham Meetup: Using Ansible for Cisco ACI deploymentJoel W. King
 
Using Deep Learning Toolkits with Kubernetes clusters
Using Deep Learning Toolkits with Kubernetes clustersUsing Deep Learning Toolkits with Kubernetes clusters
Using Deep Learning Toolkits with Kubernetes clustersJoy Qiao
 
Productionizing Machine Learning - Bigdata meetup 5-06-2019
Productionizing Machine Learning - Bigdata meetup 5-06-2019Productionizing Machine Learning - Bigdata meetup 5-06-2019
Productionizing Machine Learning - Bigdata meetup 5-06-2019Iulian Pintoiu
 
The Rise of Parallel Computing
The Rise of Parallel ComputingThe Rise of Parallel Computing
The Rise of Parallel Computingbakers84
 
Docker & ECS: Secure Nearline Execution
Docker & ECS: Secure Nearline ExecutionDocker & ECS: Secure Nearline Execution
Docker & ECS: Secure Nearline ExecutionBrennan Saeta
 
Ansible benelux meetup - Amsterdam 27-5-2015
Ansible benelux meetup - Amsterdam 27-5-2015Ansible benelux meetup - Amsterdam 27-5-2015
Ansible benelux meetup - Amsterdam 27-5-2015Pavel Chunyayev
 
Monitoring Docker at Scale - Docker San Francisco Meetup - August 11, 2015
Monitoring Docker at Scale - Docker San Francisco Meetup - August 11, 2015Monitoring Docker at Scale - Docker San Francisco Meetup - August 11, 2015
Monitoring Docker at Scale - Docker San Francisco Meetup - August 11, 2015Datadog
 
OpenCL Programming 101
OpenCL Programming 101OpenCL Programming 101
OpenCL Programming 101Yoss Cohen
 
Back to the 90s' - Revenge of the static website
Back to the 90s' - Revenge of the static websiteBack to the 90s' - Revenge of the static website
Back to the 90s' - Revenge of the static websiteYves Goeleven
 
Get you Java application ready for Kubernetes !
Get you Java application ready for Kubernetes !Get you Java application ready for Kubernetes !
Get you Java application ready for Kubernetes !Anthony Dahanne
 
Webinar: Começando seus trabalhos com Machine Learning utilizando ferramentas...
Webinar: Começando seus trabalhos com Machine Learning utilizando ferramentas...Webinar: Começando seus trabalhos com Machine Learning utilizando ferramentas...
Webinar: Começando seus trabalhos com Machine Learning utilizando ferramentas...Embarcados
 
Microservices with containers in the cloud
Microservices with containers in the cloudMicroservices with containers in the cloud
Microservices with containers in the cloudEugene Fedorenko
 
Why Kubernetes as a container orchestrator is a right choice for running spar...
Why Kubernetes as a container orchestrator is a right choice for running spar...Why Kubernetes as a container orchestrator is a right choice for running spar...
Why Kubernetes as a container orchestrator is a right choice for running spar...DataWorks Summit
 
OOW 2013: Where did my CPU go
OOW 2013: Where did my CPU goOOW 2013: Where did my CPU go
OOW 2013: Where did my CPU goKristofferson A
 
Commit to excellence - Java in containers
Commit to excellence - Java in containersCommit to excellence - Java in containers
Commit to excellence - Java in containersRed Hat Developers
 
KSCOPE 2013: Exadata Consolidation Success Story
KSCOPE 2013: Exadata Consolidation Success StoryKSCOPE 2013: Exadata Consolidation Success Story
KSCOPE 2013: Exadata Consolidation Success StoryKristofferson A
 
AWS as platform for scalable applications
AWS as platform for scalable applicationsAWS as platform for scalable applications
AWS as platform for scalable applicationsRoman Gomolko
 

Similar to WT-4069, WebCL: Enabling OpenCL Acceleration of Web Applications, by Mikael Sevenier (20)

Introduction to OpenCL
Introduction to OpenCLIntroduction to OpenCL
Introduction to OpenCL
 
Simulating Networks Using Cisco Modeling Labs (TechWiseTV Workshop)
Simulating Networks Using Cisco Modeling Labs (TechWiseTV Workshop)Simulating Networks Using Cisco Modeling Labs (TechWiseTV Workshop)
Simulating Networks Using Cisco Modeling Labs (TechWiseTV Workshop)
 
How to Puppetize Google Cloud Platform - PuppetConf 2014
How to Puppetize Google Cloud Platform - PuppetConf 2014How to Puppetize Google Cloud Platform - PuppetConf 2014
How to Puppetize Google Cloud Platform - PuppetConf 2014
 
Ansible- Durham Meetup: Using Ansible for Cisco ACI deployment
Ansible- Durham Meetup: Using Ansible for Cisco ACI deploymentAnsible- Durham Meetup: Using Ansible for Cisco ACI deployment
Ansible- Durham Meetup: Using Ansible for Cisco ACI deployment
 
Using Deep Learning Toolkits with Kubernetes clusters
Using Deep Learning Toolkits with Kubernetes clustersUsing Deep Learning Toolkits with Kubernetes clusters
Using Deep Learning Toolkits with Kubernetes clusters
 
Productionizing Machine Learning - Bigdata meetup 5-06-2019
Productionizing Machine Learning - Bigdata meetup 5-06-2019Productionizing Machine Learning - Bigdata meetup 5-06-2019
Productionizing Machine Learning - Bigdata meetup 5-06-2019
 
The Rise of Parallel Computing
The Rise of Parallel ComputingThe Rise of Parallel Computing
The Rise of Parallel Computing
 
Docker & ECS: Secure Nearline Execution
Docker & ECS: Secure Nearline ExecutionDocker & ECS: Secure Nearline Execution
Docker & ECS: Secure Nearline Execution
 
Ansible benelux meetup - Amsterdam 27-5-2015
Ansible benelux meetup - Amsterdam 27-5-2015Ansible benelux meetup - Amsterdam 27-5-2015
Ansible benelux meetup - Amsterdam 27-5-2015
 
Monitoring Docker at Scale - Docker San Francisco Meetup - August 11, 2015
Monitoring Docker at Scale - Docker San Francisco Meetup - August 11, 2015Monitoring Docker at Scale - Docker San Francisco Meetup - August 11, 2015
Monitoring Docker at Scale - Docker San Francisco Meetup - August 11, 2015
 
OpenCL Programming 101
OpenCL Programming 101OpenCL Programming 101
OpenCL Programming 101
 
Back to the 90s' - Revenge of the static website
Back to the 90s' - Revenge of the static websiteBack to the 90s' - Revenge of the static website
Back to the 90s' - Revenge of the static website
 
Get you Java application ready for Kubernetes !
Get you Java application ready for Kubernetes !Get you Java application ready for Kubernetes !
Get you Java application ready for Kubernetes !
 
Webinar: Começando seus trabalhos com Machine Learning utilizando ferramentas...
Webinar: Começando seus trabalhos com Machine Learning utilizando ferramentas...Webinar: Começando seus trabalhos com Machine Learning utilizando ferramentas...
Webinar: Começando seus trabalhos com Machine Learning utilizando ferramentas...
 
Microservices with containers in the cloud
Microservices with containers in the cloudMicroservices with containers in the cloud
Microservices with containers in the cloud
 
Why Kubernetes as a container orchestrator is a right choice for running spar...
Why Kubernetes as a container orchestrator is a right choice for running spar...Why Kubernetes as a container orchestrator is a right choice for running spar...
Why Kubernetes as a container orchestrator is a right choice for running spar...
 
OOW 2013: Where did my CPU go
OOW 2013: Where did my CPU goOOW 2013: Where did my CPU go
OOW 2013: Where did my CPU go
 
Commit to excellence - Java in containers
Commit to excellence - Java in containersCommit to excellence - Java in containers
Commit to excellence - Java in containers
 
KSCOPE 2013: Exadata Consolidation Success Story
KSCOPE 2013: Exadata Consolidation Success StoryKSCOPE 2013: Exadata Consolidation Success Story
KSCOPE 2013: Exadata Consolidation Success Story
 
AWS as platform for scalable applications
AWS as platform for scalable applicationsAWS as platform for scalable applications
AWS as platform for scalable applications
 

More from AMD Developer Central

DX12 & Vulkan: Dawn of a New Generation of Graphics APIs
DX12 & Vulkan: Dawn of a New Generation of Graphics APIsDX12 & Vulkan: Dawn of a New Generation of Graphics APIs
DX12 & Vulkan: Dawn of a New Generation of Graphics APIsAMD Developer Central
 
Leverage the Speed of OpenCL™ with AMD Math Libraries
Leverage the Speed of OpenCL™ with AMD Math LibrariesLeverage the Speed of OpenCL™ with AMD Math Libraries
Leverage the Speed of OpenCL™ with AMD Math LibrariesAMD Developer Central
 
Webinar: Whats New in Java 8 with Develop Intelligence
Webinar: Whats New in Java 8 with Develop IntelligenceWebinar: Whats New in Java 8 with Develop Intelligence
Webinar: Whats New in Java 8 with Develop IntelligenceAMD Developer Central
 
The Small Batch (and other) solutions in Mantle API, by Guennadi Riguer, Mant...
The Small Batch (and other) solutions in Mantle API, by Guennadi Riguer, Mant...The Small Batch (and other) solutions in Mantle API, by Guennadi Riguer, Mant...
The Small Batch (and other) solutions in Mantle API, by Guennadi Riguer, Mant...AMD Developer Central
 
TressFX The Fast and The Furry by Nicolas Thibieroz
TressFX The Fast and The Furry by Nicolas ThibierozTressFX The Fast and The Furry by Nicolas Thibieroz
TressFX The Fast and The Furry by Nicolas ThibierozAMD Developer Central
 
Rendering Battlefield 4 with Mantle by Yuriy ODonnell
Rendering Battlefield 4 with Mantle by Yuriy ODonnellRendering Battlefield 4 with Mantle by Yuriy ODonnell
Rendering Battlefield 4 with Mantle by Yuriy ODonnellAMD Developer Central
 
Low-level Shader Optimization for Next-Gen and DX11 by Emil Persson
Low-level Shader Optimization for Next-Gen and DX11 by Emil PerssonLow-level Shader Optimization for Next-Gen and DX11 by Emil Persson
Low-level Shader Optimization for Next-Gen and DX11 by Emil PerssonAMD Developer Central
 
Direct3D12 and the Future of Graphics APIs by Dave Oldcorn
Direct3D12 and the Future of Graphics APIs by Dave OldcornDirect3D12 and the Future of Graphics APIs by Dave Oldcorn
Direct3D12 and the Future of Graphics APIs by Dave OldcornAMD Developer Central
 
Introduction to Direct 3D 12 by Ivan Nevraev
Introduction to Direct 3D 12 by Ivan NevraevIntroduction to Direct 3D 12 by Ivan Nevraev
Introduction to Direct 3D 12 by Ivan NevraevAMD Developer Central
 
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth Thomas
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth ThomasHoly smoke! Faster Particle Rendering using Direct Compute by Gareth Thomas
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth ThomasAMD Developer Central
 
Computer Vision Powered by Heterogeneous System Architecture (HSA) by Dr. Ha...
Computer Vision Powered by Heterogeneous System Architecture (HSA) by  Dr. Ha...Computer Vision Powered by Heterogeneous System Architecture (HSA) by  Dr. Ha...
Computer Vision Powered by Heterogeneous System Architecture (HSA) by Dr. Ha...AMD Developer Central
 
Productive OpenCL Programming An Introduction to OpenCL Libraries with Array...
Productive OpenCL Programming An Introduction to OpenCL Libraries  with Array...Productive OpenCL Programming An Introduction to OpenCL Libraries  with Array...
Productive OpenCL Programming An Introduction to OpenCL Libraries with Array...AMD Developer Central
 
Rendering Battlefield 4 with Mantle by Johan Andersson - AMD at GDC14
Rendering Battlefield 4 with Mantle by Johan Andersson - AMD at GDC14Rendering Battlefield 4 with Mantle by Johan Andersson - AMD at GDC14
Rendering Battlefield 4 with Mantle by Johan Andersson - AMD at GDC14AMD Developer Central
 
RapidFire - the Easy Route to low Latency Cloud Gaming Solutions - AMD at GDC14
RapidFire - the Easy Route to low Latency Cloud Gaming Solutions - AMD at GDC14RapidFire - the Easy Route to low Latency Cloud Gaming Solutions - AMD at GDC14
RapidFire - the Easy Route to low Latency Cloud Gaming Solutions - AMD at GDC14AMD Developer Central
 

More from AMD Developer Central (20)

DX12 & Vulkan: Dawn of a New Generation of Graphics APIs
DX12 & Vulkan: Dawn of a New Generation of Graphics APIsDX12 & Vulkan: Dawn of a New Generation of Graphics APIs
DX12 & Vulkan: Dawn of a New Generation of Graphics APIs
 
Leverage the Speed of OpenCL™ with AMD Math Libraries
Leverage the Speed of OpenCL™ with AMD Math LibrariesLeverage the Speed of OpenCL™ with AMD Math Libraries
Leverage the Speed of OpenCL™ with AMD Math Libraries
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.js
 
Media SDK Webinar 2014
Media SDK Webinar 2014Media SDK Webinar 2014
Media SDK Webinar 2014
 
DirectGMA on AMD’S FirePro™ GPUS
DirectGMA on AMD’S  FirePro™ GPUSDirectGMA on AMD’S  FirePro™ GPUS
DirectGMA on AMD’S FirePro™ GPUS
 
Webinar: Whats New in Java 8 with Develop Intelligence
Webinar: Whats New in Java 8 with Develop IntelligenceWebinar: Whats New in Java 8 with Develop Intelligence
Webinar: Whats New in Java 8 with Develop Intelligence
 
The Small Batch (and other) solutions in Mantle API, by Guennadi Riguer, Mant...
The Small Batch (and other) solutions in Mantle API, by Guennadi Riguer, Mant...The Small Batch (and other) solutions in Mantle API, by Guennadi Riguer, Mant...
The Small Batch (and other) solutions in Mantle API, by Guennadi Riguer, Mant...
 
Inside XBox- One, by Martin Fuller
Inside XBox- One, by Martin FullerInside XBox- One, by Martin Fuller
Inside XBox- One, by Martin Fuller
 
TressFX The Fast and The Furry by Nicolas Thibieroz
TressFX The Fast and The Furry by Nicolas ThibierozTressFX The Fast and The Furry by Nicolas Thibieroz
TressFX The Fast and The Furry by Nicolas Thibieroz
 
Rendering Battlefield 4 with Mantle by Yuriy ODonnell
Rendering Battlefield 4 with Mantle by Yuriy ODonnellRendering Battlefield 4 with Mantle by Yuriy ODonnell
Rendering Battlefield 4 with Mantle by Yuriy ODonnell
 
Low-level Shader Optimization for Next-Gen and DX11 by Emil Persson
Low-level Shader Optimization for Next-Gen and DX11 by Emil PerssonLow-level Shader Optimization for Next-Gen and DX11 by Emil Persson
Low-level Shader Optimization for Next-Gen and DX11 by Emil Persson
 
Gcn performance ftw by stephan hodes
Gcn performance ftw by stephan hodesGcn performance ftw by stephan hodes
Gcn performance ftw by stephan hodes
 
Inside XBOX ONE by Martin Fuller
Inside XBOX ONE by Martin FullerInside XBOX ONE by Martin Fuller
Inside XBOX ONE by Martin Fuller
 
Direct3D12 and the Future of Graphics APIs by Dave Oldcorn
Direct3D12 and the Future of Graphics APIs by Dave OldcornDirect3D12 and the Future of Graphics APIs by Dave Oldcorn
Direct3D12 and the Future of Graphics APIs by Dave Oldcorn
 
Introduction to Direct 3D 12 by Ivan Nevraev
Introduction to Direct 3D 12 by Ivan NevraevIntroduction to Direct 3D 12 by Ivan Nevraev
Introduction to Direct 3D 12 by Ivan Nevraev
 
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth Thomas
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth ThomasHoly smoke! Faster Particle Rendering using Direct Compute by Gareth Thomas
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth Thomas
 
Computer Vision Powered by Heterogeneous System Architecture (HSA) by Dr. Ha...
Computer Vision Powered by Heterogeneous System Architecture (HSA) by  Dr. Ha...Computer Vision Powered by Heterogeneous System Architecture (HSA) by  Dr. Ha...
Computer Vision Powered by Heterogeneous System Architecture (HSA) by Dr. Ha...
 
Productive OpenCL Programming An Introduction to OpenCL Libraries with Array...
Productive OpenCL Programming An Introduction to OpenCL Libraries  with Array...Productive OpenCL Programming An Introduction to OpenCL Libraries  with Array...
Productive OpenCL Programming An Introduction to OpenCL Libraries with Array...
 
Rendering Battlefield 4 with Mantle by Johan Andersson - AMD at GDC14
Rendering Battlefield 4 with Mantle by Johan Andersson - AMD at GDC14Rendering Battlefield 4 with Mantle by Johan Andersson - AMD at GDC14
Rendering Battlefield 4 with Mantle by Johan Andersson - AMD at GDC14
 
RapidFire - the Easy Route to low Latency Cloud Gaming Solutions - AMD at GDC14
RapidFire - the Easy Route to low Latency Cloud Gaming Solutions - AMD at GDC14RapidFire - the Easy Route to low Latency Cloud Gaming Solutions - AMD at GDC14
RapidFire - the Easy Route to low Latency Cloud Gaming Solutions - AMD at GDC14
 

Recently uploaded

GenAI and AI GCC State of AI_Object Automation Inc
GenAI and AI GCC State of AI_Object Automation IncGenAI and AI GCC State of AI_Object Automation Inc
GenAI and AI GCC State of AI_Object Automation IncObject Automation
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAshyamraj55
 
Digital magic. A small project for controlling smart light bulbs.
Digital magic. A small project for controlling smart light bulbs.Digital magic. A small project for controlling smart light bulbs.
Digital magic. A small project for controlling smart light bulbs.francesco barbera
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8DianaGray10
 
Cloud Revolution: Exploring the New Wave of Serverless Spatial Data
Cloud Revolution: Exploring the New Wave of Serverless Spatial DataCloud Revolution: Exploring the New Wave of Serverless Spatial Data
Cloud Revolution: Exploring the New Wave of Serverless Spatial DataSafe Software
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...DianaGray10
 
Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.YounusS2
 
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostKubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostMatt Ray
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfDaniel Santiago Silva Capera
 
OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureEric D. Schabell
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1DianaGray10
 
Things you didn't know you can use in your Salesforce
Things you didn't know you can use in your SalesforceThings you didn't know you can use in your Salesforce
Things you didn't know you can use in your SalesforceMartin Humpolec
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...Aggregage
 
Introduction to Quantum Computing
Introduction to Quantum ComputingIntroduction to Quantum Computing
Introduction to Quantum ComputingGDSC PJATK
 
Machine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfMachine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfAijun Zhang
 
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019IES VE
 
Do we need a new standard for visualizing the invisible?
Do we need a new standard for visualizing the invisible?Do we need a new standard for visualizing the invisible?
Do we need a new standard for visualizing the invisible?SANGHEE SHIN
 
PicPay - GenAI Finance Assistant - ChatGPT for Customer Service
PicPay - GenAI Finance Assistant - ChatGPT for Customer ServicePicPay - GenAI Finance Assistant - ChatGPT for Customer Service
PicPay - GenAI Finance Assistant - ChatGPT for Customer ServiceRenan Moreira de Oliveira
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Will Schroeder
 

Recently uploaded (20)

GenAI and AI GCC State of AI_Object Automation Inc
GenAI and AI GCC State of AI_Object Automation IncGenAI and AI GCC State of AI_Object Automation Inc
GenAI and AI GCC State of AI_Object Automation Inc
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
 
Digital magic. A small project for controlling smart light bulbs.
Digital magic. A small project for controlling smart light bulbs.Digital magic. A small project for controlling smart light bulbs.
Digital magic. A small project for controlling smart light bulbs.
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8
 
Cloud Revolution: Exploring the New Wave of Serverless Spatial Data
Cloud Revolution: Exploring the New Wave of Serverless Spatial DataCloud Revolution: Exploring the New Wave of Serverless Spatial Data
Cloud Revolution: Exploring the New Wave of Serverless Spatial Data
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
 
Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.
 
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostKubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
 
OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability Adventure
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
 
Things you didn't know you can use in your Salesforce
Things you didn't know you can use in your SalesforceThings you didn't know you can use in your Salesforce
Things you didn't know you can use in your Salesforce
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
 
Introduction to Quantum Computing
Introduction to Quantum ComputingIntroduction to Quantum Computing
Introduction to Quantum Computing
 
Machine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfMachine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdf
 
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
 
Do we need a new standard for visualizing the invisible?
Do we need a new standard for visualizing the invisible?Do we need a new standard for visualizing the invisible?
Do we need a new standard for visualizing the invisible?
 
PicPay - GenAI Finance Assistant - ChatGPT for Customer Service
PicPay - GenAI Finance Assistant - ChatGPT for Customer ServicePicPay - GenAI Finance Assistant - ChatGPT for Customer Service
PicPay - GenAI Finance Assistant - ChatGPT for Customer Service
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
 

WT-4069, WebCL: Enabling OpenCL Acceleration of Web Applications, by Mikael Sevenier

  • 1. : Enabling OpenCL Acceleration of Web Applications Mikaël Bourges-Sévenier Aptina Imaging, Inc. WebCL WG Editor Tasneem Brutch Samsung Electronics WebCL WG Chair AMD Developer Summit Nov. 12, 2013, San Jose, CA
  • 2. 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
  • 3. 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
  • 4. 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
  • 5. 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)
  • 6. 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
  • 7. 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 execute in lock-step # work-items = # pixels # work-groups = # tiles work-group size = tile width * tile height
  • 8. 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
  • 9. 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( Data Parallel OpenCL kernel void vectorMult( const float* a, const float* b, global const float* a, global const float* b, float* c, global float* c) const unsigned int count) { { int id = get_global_id(0); for(int i=0; i<count; i++) c[i] = a[i] * b[i]; } c[id] = a[id] * b[id]; }
  • 10. Executing OpenCL Programs 1.  Query host for OpenCL devices Context   2.  Create a context to associate OpenCL devices 3.  Create programs for execution on one or more associated devices 4.  Select kernels to execute from the programs 5.  Create memory objects accessible from the host and/or the device Programs   Kernels   Memory   Objects   Kernel0   Programs   Command   Queue   Images   Kernel1   Kernel2   Buffers   In  order  &     out  of  order   6.  Copy memory data to the device as needed 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
  • 11. Programming WebCL • Initialization • Creating kernel • Running kernel • WebCL image object creation -  From -  From -  From -  From Uint8Array <img>, <canvas>, or <video> WebGL vertex buffer WebGL texture • WebGL vertex animation • WebGL texture animation 11
  • 12. 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
  • 13. 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
  • 14. 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
  • 15. Creating WebCL Kernel <script id="squareProgram" type="x-kernel"> __kernel square(__global float* input, __global float* output, const unsigned int count) OpenCL C { (based on C99) 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>
  • 16. 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>
  • 17. 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>
  • 18. WebCL: Vertex Animation •  Vertex Buffer Initialization: <script> var points = new Float32Array(NPOINTS * 3); var glVertexBuffer = gl.createBuffer(); Web   gl.bindBuffer(gl.ARRAY_BUFFER, glVertexBuffer); GL   gl.bufferData(gl.ARRAY_BUFFER, points, gl.DYNAMIC_DRAW); var clVertexBuffer = context.createFromGLBuffer(WebCL.MEM_READ_WRITE, glVertexBuffer); Web   kernel.setKernelArg(0, NPOINTS, WebCL.KERNEL_ARG_INT); CL   kernel.setKernelArg(1, clVertexBuffer); </script> •  Vertex Buffer Update and Draw: <script> function DrawLoop() { queue.enqueueAcquireGLObjects([clVertexBuffer]); Web   queue.enqueueNDRangeKernel(kernel, [NPOINTS], [workGroupSize], null); CL   queue.enqueueReleaseGLObjects([clVertexBuffer]); gl.bindBuffer(gl.ARRAY_BUFFER, glVertexBuffer); Web   gl.clear(gl.COLOR_BUFFER_BIT); GL   gl.drawArrays(gl.POINTS, 0, NPOINTS); gl.flush(); } </script>
  • 19. 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>
  • 20. Accelerated, Interactive Big Data Visualization for the Web Powered by WebCL
  • 21. Interactive Big Data Visualization for Mobile • Prevalence of big data increasing -  Tools to explore and understand data are lacking. • Well designed visualizations, Visualization Hand-Written JavaScript Framework GPU Code Productive Efficient/ Performant -  to help identify patterns and to form new hypothesis. • Need web-friendly tools for big data -  Requirements: Scalability and interactivity, with performance ≥ 10FPS -  Main target: Productivity programmers BIG DATA Efficient/ Performant Productive INTERACTIVE VISUALIZATIONS
  • 22. shared memory JavaScript   VM   Opportunity: Deploy Parallel JS Libraries Parsing   Styling   Layout   Web  Workers   Rendering   22
  • 23. Performance Comparison •  Sunburst’ graph demo lays out 846,820 hierarchical data points as arcs expanding out from the center, with following benchmarks: Data=846,820     Frame  Rate     Layout  Time     Rendering  Time     Average     12.28  FPS     67.3  ms     14.3     Std.  DeviaUon     0.56  FPS     4.27  ms     0.46     •  Sunburst graph was compared to d3.js JavaScript interactive data visualization tool to run ~10,000 data points at ≥10 FPS. •  Polling data visualization: Data from every polling place in a large country was downloaded, and interactively visualized as a treemaps. •  Benchmark: Sunburst Graph @ 10 FPS D3.j: <10,000 Nodes; WebCL Visualization: ~1,000,000 Nodes
  • 24. 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.
  • 26. 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
  • 27. 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.
  • 28. WebCL API WebCLExtension Platform layer WebCLPlatform WebCLDevice + webcl HTMLWindow or WorkerUtils WebCL WebCLContext •  Window and WorkerUtils implements WebCLEnvironment -  Declares WebCL webcl object (if not there, then WebCL is not supported) •  3 Layers: Platform, Compiler, Runtime * WebCLProgram WebCLKernel Compiler layer * WebCLMemoryObject {abstract} WebCLBuffer Runtime layer * WebCLCommandQueue WebCLImage * WebCLEvent * WebCLSampler
  • 29. 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
  • 30. 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
  • 31. 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
  • 32. 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 -  ~95% 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
  • 34. 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
  • 35. 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
  • 36. 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
  • 37. OpenCL to WebCL Translator Utility
  • 38. 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 38
  • 39. WebCL Prototypes & Experimental Integration into Browser Engines
  • 40. 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
  • 41. 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/
  • 42. 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)
  • 43. Motorola Mobility Node-WebCL •  Uses Node.js JavaScript runtime -  Implements WebCL, WebGL, DOM elements (<canvas>, <image>) -  Cross-platform (Mac, Linux, Windows) •  Debugging tool to develop WebCL & WebGL scenes •  Can be extended with Node.js modules for server-side applications Based on Iñigo Quilez, Shader Toy Based on Apple QJulia Based on Iñigo Quilez, Shader Toy
  • 44. 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.
  • 45. 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