SlideShare ist ein Scribd-Unternehmen logo
1 von 22
Downloaden Sie, um offline zu lesen
Samsung’s WebCL Prototype
Implementation: Overview of APIs

          Tasneem Brutch
        Samsung Electronics
Samsung WebCL Prototype Design
    Design Goals:
     To enable general purpose parallel programming across heterogeneous processing
      elements.
     Provide web application developers portable and efficient access to heterogeneous
      processing platforms from web content.
    Our Approach:
     Similar to WebGL’s approach.
    Design Choices:
     Samsung WebCL prototype used ECMAScript API for interacting with OpenCL.
     Attempted to stay as close as possible to OpenCL, to preserve developer
      familiarity, and facilitate adoption.
     As OpenCL and WebCL evolve, it will be easier to keep the two in sync if WebCL
      APIs closely resemble OpenCL APIs.
     To ensure portability, the prototype is not biased towards a specific solution space.
     Samsung’s WebCL prototype is not intended to be a higher level API to satisfy
2     everyone.
Samsung WebCL Prototype-Overview
    Functionality:
     WebCL compute contexts
     Platform queries (clGetPlatformIDs, clGetDeviceIDs etc)
     Creation of OpenCL Context, Queue and Buffer objects
     Kernel building
     Querying workgroup size (clGetKernelWorkGroupInfo)
     Reading, writing and copying OpenCL buffers
     Setting kernel arguments
     Scheduling a kernel for execution
     GL interoperability
        clCreateFromGLBuffer
        clEnqueueAcquireGLObjects
        clEnqueueReleaseGLObjects
     Synchronization (clFinish)
     Error handling
3
OpenCL to WebCL Mapping
      Samsung’s WebCL prototype implementation attempts to provide for nearly
       1:1 mapping with OpenCL.
      OpenCL APIs are accessed from JavaScript through the
       WebCLComputeContext class.
          Mapping OpenCL to WebCL: cl = new WebCLComputeContext ( )


                            OpenCL - WebCL API Syntax Examples
                 OpenCL API                              WebCL API                Calling WebCL APIs
                                                                                   from JavaScript
    cl_kernel clCreateKernel                   WebCLKernel createKernel           cl.createKernel (…)
    (cl_program program, const char            (WebCLProgram*, const
    *kernel_name, cl_int *errcode_ret);        String&);
    cl_mem clCreateBuffer                      WebCLBuffer createBuffer           cl.createBuffer (…)
    (cl_context context, cl_mem_flags flags,   (WebCLContext context,
    size_t size, void *host_ptr,               cl_mem_flags flags, size_t size,
    cl_int *errcode_ret);                      ArrayBuffer host_ptr);

4
Blocking and Non-Blocking APIs
    OpenCL provides APIs for reading/writing GPU memory, eg:
     clEnqueueWriteBuffer (queue, buffer, flag, offset, nbytes, data, …)
        Enqueues a command to write to a buffer object (buffer) from host memory (data)
        If flag is CL_TRUE the command is blocking and clEnqueueWriteBuffer will not
          return until data has been written.
     clFinish (queue)
        Blocks until all commands in queue have completed.


    Samsung WebCL Prototype Approach:
     Memory transfers may block/non block depending on the blocking flag.
     cl.finish does not block (evaluating implementation of a blocking form of cl.finish)
     Various enqueue APIs can take a list of events, which need to complete before the
       command is executed, however this does not change whether the API is blocking or not from
       caller’s perspective, for eg.
       cl.enqueueWriterBuffer (queue, buffer, blocking_write=false, event_wait_list != null)
       should return immediately even if the events in the event_wait_list have not yet occurred.
5
WebCL Class Hierarchy
         WebCLComputeContext
         + m_webclObjects
         ……                             WebCLContext
         + m_webcl_platform             + cl_context*
         + m_webcl_device
         + m_webcl_program              WebCLDevice
         + m_webcl_memObject            + cl_device_id*
         + m_webcl_sampler
         + m_webcl_commandQueue         WebCLPlatfom
         ……..
                                        + cl_platform_id*
         + getPlatformIDs()
         + getDeviceIDs()               WebCLProgram          WebCLKernel
         + createContext()              + cl_program*         + cl_kernel*
         + createCommandQueue()
         + getKernel()                                             WebCLBuffer
         + createProgramWithSource()
         + buildProgram()              WebCLMemObject
         + getProgramBuildInfo()       + cl_mem*                   WebCLImage
         + createKernel()
         + createBuffer()
         + enqueueWriteBuffer()         WebCLCommandQueue
         + enqueueReadBuffer()          + cl_command_queue*
         + setKernel()
         + getKernelWorkInfo()          WebCLEvent
         + enqueueNDRangeKernel()       + cl_event*
         + finish()
         + releaseMemObject()
         + releaseProgram()             WebCLSampler
         + releaseKernel()              + cl_sampler*
         + releaseCommandQueue()
         + releaseContext()
6
WebCL Interface
    (Sample Calls from HelloWorld App for Illustration-1/3)
    <html>
    <head>
    <title>WebCL Hello World</title>

    <script>
    function getKernel (id ) {
       var kernelScript = document.getElementById( id );
    }
    </script>
    <script id="square" type="x-kernel">
       __kernel void square(
          __global float* input,
          __global float* output)
       {
          int i = get_global_id(0);
          output[i] = input[i] * input[i];
       }
    </script>

    <script>
    var cl;
    var platform_ids, device_ids;
    var context, queue, program, kernel, input, output;
    var err;
    var data = new Float32Array(DATA_SIZE);
    var results = new Float32Array(DATA_SIZE);
7
WebCL Interface
    (Sample Calls from HelloWorld App for Illustration-2/3)
    function ExecuteCL( ) {
       cl = new WebCLComputeContext ( );
       platform_ids = cl.getPlatformIDs ( );
       device_ids = cl.getDeviceIDs (platform_ids[0], cl.DEVICE_TYPE_GPU );

       context = cl.createContext (null, device_ids[0], null, null);

       queue = cl.createCommandQueue (context, device_ids[0], null);

       var kernelSource = getKernel ("square");

       program = cl.createProgramWithSource (context, kernelSource);

       err = cl.buildProgram (program, null, null, null);
       var info = cl.getProgramBuildInfo (program, device_ids[0],
                                          cl.PROGRAM_BUILD_LOG);
       kernel = cl.createKernel (program, "square");

       input = cl.createBuffer (context, cl.MEM_READ_ONLY,
               Float32Array.BYTES_PER_ELEMENT * count, null);
       output = cl.createBuffer (context, cl.MEM_WRITE_ONLY,
                Float32Array.BYTES_PER_ELEMENT * count, null);



8
WebCL Interface
    (Sample Calls from HelloWorld App for Illustration-3/3)
       cl.enqueueWriteBuffer (queue, input, true, 0,
                             Float32Array.BYTES_PER_ELEMENT * count, data, null);
       err = cl.setKernelArgGlobal (kernel, 0, input);
       err = cl.setKernelArgGlobal (kernel, 1, output);

       var local = cl.getKernelWorkGroupInfo (kernel, device_id,
                           cl.KERNEL_WORK_GROUP_SIZE);

       cl.enqueueNDRangeKernel (queue, kernel, 1, 0, count, local, null);

       cl.finish (queue, null, function(userData) {
           cl.enqueueReadBuffer (queue, output, true, 0,
                          Float32Array.BYTES_PER_ELEMENT * count, results, null);
           cl.releaseMemObject    (input);
           cl.releaseMemObject    (output);
           cl.releaseProgram      (program);
           cl.releaseKernel       (kernel);
           cl.releaseCommandQueue (queue);
           cl.releaseContext      (context);
       });
    }
    </script>
    </head>


9
Samsung WebCL Prototype Demo
     N-Body 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




10
Samsung WebCL Prototype Demo
     Deform Demo:
      Calculates and renders transparent and reflective deformed spheres on top of photo
       background
      Performance comparison on Mac
        JS: ~1 FPS
        WebCL: 87-116 FPS




11
Appendix




12
Samsung WebCL Prototype APIs (1/10)
     OpenCL API                Samsung WebCL Prototype API
     clBuildProgram            1. void buildProgram (WebCLProgram program, DOMString opts,
                               WebCLBuildCallback notify, object userData)
                               2. void buildProgram (WebCLProgram program, WebCLDeviceID device,
                               DOMString opts, WebCLBuildCallback notify, object userData)
                               3.void buildProgram (WebCLProgram program, sequence<WebCLDeviceID>
                               device_list, DOMString opts, WebCLBuildCallback notify, object userData)
     clCreateBuffer            WebCLBuffer createBuffer (WebCLContext context, cl_mem_flags flags, size_t
                               size, ArrayBuffer host_ptr)
     clCreateSubBuffer         WebCLBuffer createSubBuffer (WebCLBuffer buffer, cl_mem_flags flags,
                               cl_buffer_create_type buffer_create_type, WebCLBufferCreateInfo
                               buffer_create_info)
     clCreateCommandQueue      WebCLQueue createCommandQueue (WebCLContext context,
                               WebCLDeviceID device, cl_command_queue_properties properties)
     clCreateContext           1.WebCLContext createContext (DOMString properties, WebCLDeviceID
                               device, WebCLContextCallback notify, object userData)
                                2.WebCLContext createContext (DOMString properties,
                               sequence<WebCLDeviceID> device_list, WebCLContextCallback notify, object
                               userData)
     clCreateContextFromType   WebCLContext createContextFromType ( DOMString properties,
                               cl_device_type device_type, WebCLContextCallback notify, object userData)
13
Samsung WebCL Prototype APIs (2/10)
     OpenCL API                  Samsung WebCL Prototype API
     clCreateUserEvent           WebCLEvent createUserEvent (WebCLContext context)
     clCreateImage2D             1.WebCLImage createImage2D (WebCLContext context, cl_mem_flags flags,
                                 HTMLCanvasElement canvas);
                                 2. WebCLImage createImage2D (WebCLContext context, cl_mem_flags flags,
                                 HTMLImageElement image);
                                 3. WebCLImage createImage2D (WebCLContext context, cl_mem_flags flags,
                                 HTMLVideoElement video)
                                 4. WebCLImage createImage2D (WebCLContext context, cl_mem_flags flags,
                                 ImageData data)
                                 5. WebCLImage createImage2D (WebCLContext context, cl_mem_flags flags,
                                 size_t image_width, size_t image_height, ArrayBuffer data)
     clCreateImage3D             WebCLImage createImage3D (WebCLContext context, cl_mem_flags flags,
                                 size_t image_width, size_t image_height, size_t image_depth, ArrayBuffer data);
     clCreateKernel              WebCLKernel createKernel (WebCLProgram program, DOMString
                                 kernel_name)
     clCreateKernelsInProgram    WebCLKernel[ ] createKernelsInProgram (WebCLProgram program)
     clCreateProgramWithBinary   WebCLProgram createProgramWithBinary (WebCLContext context,
                                 sequence<WebCLDeviceID> device_list, sequence<DOMString> binaries);
     clCreateProgramWithSource   WebCLProgram createProgramWithSource (WebCLContext context,
                                 DOMString kernelSource)
14
Samsung WebCL Prototype APIs (3/10)
     OpenCL API                   Samsung WebCL Prototype API
     clCreateSampler              WebCLSampler createSampler (WebCLContext context, cl_bool
                                  normalized_coords, cl_addressing_mode addressing_mode, cl_filter_mode
                                  filter_mode)
     clEnqueueCopyBuffer          WebCLEvent enqueueCopyBuffer (WebCLQueue queue, WebCLBuffer
                                  src_buffer, WebCLBuffer dst_buffer, size_t src_offset, size_t dst_offset, size_t
                                  buffer_size, sequence<WebCLEvent>? event_wait_list);
     clEnqueueCopyBufferToImage   WebCLEvent enqueueCopyBufferToImage (WebCLQueue queue,
                                  WebCLBuffer src_buffer, WebCLImage dst_image, size_t src_origin,
                                  sequence<size_t> dst_origin, sequence<size_t> region, size_t
                                  sequence<WebCLEvent>? event_wait_list)
     clEnqueueCopyBufferRect      WebCLEvent enqueueCopyBufferRect (WebCLQueue queue, WebCLBuffer
                                  src_buffer, WebCLBuffer dst_buffer, sequence<size_t> src_origin,
                                  sequence<size_t> dst_origin, sequence<size_t> region, size_t src_row_pitch,
                                  size_t src_slice_pitch, size_t dst_row_pitch, size_t dst_slice_pitch,
                                  sequence<WebCLEvent>? event_wait_list)
     clEnqueueCopyImage           WebCLEvent enqueueCopyImage (WebCLQueue queue, WebCLImage
                                  src_image, WebCLImage dst_image, sequence<size_t> src_origin,
                                  sequence<size_t> dst_origin, sequence<size_t> region, size_t
                                  sequence<WebCLEvent>? event_wait_list);
15
Samsung WebCL Prototype APIs (4/10)
     OpenCL API                   Samsung WebCL Prototype API
     clEnqueueCopyImageToBuffer   WebCLEvent enqueueCopyImageToBuffer (WebCLQueue queue, WebCLImage
                                  src_image, WebCLBuffer dst_buffer, sequence<size_t> src_origin,
                                  sequence<size_t> region, size_t dst_offset, size_t sequence<WebCLEvent>?
                                  event_wait_list)
     clEnqueueMapBuffer           WebCLEvent enqueueMapBuffer (WebCLQueue queue, WebCLBuffer buffer,
                                  cl_bool blocking_map, cl_map_flags map_flags, size_t offset, size_t buffer_size,
                                  ArrayBuffer data, sequence<WebCLEvent>? event_wait_list)
     clEnqueueMapImage            WebCLEvent enqueueMapImage (WebCLQueue queue, WebCLImage image,
                                  cl_bool blocking_map, cl_map_flags map_flags, sequence<size_t> origin,
                                  sequence<size_t> region, sequence<WebCLEvent>? event_wait_list)
     clEnqueueReadBuffer          WebCLEvent enqueueReadBuffer(WebCLQueue queue, ebCLBuffer buffer,
                                  cl_bool blocking_read, size_t offset, size_t buffer_size, ArrayBuffer data,
                                  sequence<WebCLEvent>? event_wait_list);
     clEnqueueReadBufferRect      WebCLEvent enqueueReadBufferRect (WebCLQueue queue, WebCLBuffer
                                  buffer, cl_bool blocking_read, sequence<size_t> buffer_origin, sequence<size_t>
                                  host_origin, sequence<size_t> region, size_t buffer_row_pitch, size_t
                                  buffer_slice_pitch, size_t host_row_pitch, size_t host_slice_pitch, ArrayBuffer data,
                                  sequence<WebCLEvent>? event_wait_list)
     clEnqueueReadImage           WebCLEvent enqueueReadImage (WebCLQueue queue, WebCLImage image,
                                  cl_bool blocking_read, sequence<size_t> origin, sequence<size_t> region,
16                                ImageData data, sequence<WebCLEvent>? event_wait_list)
Samsung WebCL Prototype APIs (5/10)
 OpenCL API                Samsung WebCL Prototype API
 clEnqueueNativeKernel     WebCLEvent enqueueNativeKernel (WebCLQueue queue, UserFunc
                           user_func, object args, /* TODO */ sequence<WebCLBuffer>
                           mem_objects, sequence<WebCLEvent>? event_wait_list);
 clEnqueueNDRangeKernel    1.WebCLEvent enqueueNDRangeKernel (WebCLQueue queue,
                           WebCLKernel kernel, cl_uint work_dim, size_t global_work_size, size_t
                           local_work_size, sequence<WebCLEvent>? event_wait_list);
                            2. WebCLEvent enqueueNDRangeKernel (WebCLQueue queue,
                           WebCLKernel kernel, cl_uint work_dim, sequence<size_t>
                           global_work_size, sequence<size_t> local_work_size,
                           sequence<WebCLEvent>? event_wait_list);
                            3. WebCLEvent enqueueNDRangeKernel (WebCLQueue queue,
                           WebCLKernel kernel, cl_uint work_dim, sequence<size_t>
                           global_work_offset, sequence<size_t> global_work_size, sequence<size_t>
                           local_work_size, sequence<WebCLEvent>? event_wait_list);
 clEnqueueTask             WebCLEvent enqueueTask (WebCLQueue queue, WebCLKernel kernel,
                           sequence<WebCLEvent>? event_wait_list)
 clEnqueueUnmapMemObject   WebCLEvent enqueueUnmapMemObject (WebCLQueue queue,
                           WebCLMemObject memobj, ArrayBuffer data, sequence<WebCLEvent>?
                           event_wait_list)
17
Samsung WebCL Prototype APIs (6/10)
 OpenCL API                 Samsung WebCL Prototype API
 clEnqueueWriteBuffer       WebCLEvent enqueueWriteBuffer (WebCLQueue queue,
                            WebCLBuffer buffer, cl_bool blocking_write, size_t offset, size_t
                            buffer_size, ArrayBuffer data, sequence<WebCLEvent>? event_wait_list)
 clEnqueueWriteBufferRect   WebCLEvent enqueueWriteBufferRect (WebCLQueue queue,
                            WebCLBuffer buffer, cl_bool blocking_write, sequence<size_t>
                            buffer_origin, sequence<size_t> host_origin, sequence<size_t> region,
                            size_t buffer_row_pitch, size_t buffer_slice_pitch, size_t host_row_pitch,
                            size_t host_slice_pitch, ArrayBuffer data, sequence<WebCLEvent>?
                            event_wait_list)
 clEnqueueWriteImage        WebCLEvent enqueueWriteImage (WebCLQueue queue,
                            WebCLImage image, cl_bool blocking_write, sequence<size_t> origin,
                            sequence<size_t> region, ImageData data, sequence<WebCLEvent>?
                            event_wait_list)
 clEnqueueBarrier           void enqueueBarrier (WebCLQueue queue, WebCLEvent event)
 clEnqueueMarker            void enqueueMarker (WebCLQueue queue, WebCLEvent event)
 clEnqueueWaitForEvents     void enqueueWaitForEvents (WebCLQueue queue,
                            sequence<WebCLEvent> event_list)
18
Samsung WebCL Prototype APIs (7/10)
     OpenCL API              Samsung WebCL Prototype APIs
     clFinish                void finish (WebCLQueue queue, WebCLFinishCallback notify, object userData)
     clFlush                 void flush (WebCLQueue queue)
     clGetError              GLenum getError ()
     clGetPlatformIDs        WebCLPlatformID[ ] getPlatformIDs ()
     clGetDeviceIDs          WebCLDeviceID[ ] getDeviceIDs (WebCLPlatformID platform,
                             cl_device_type device_type)
     clGetDeviceInfo         any getDeviceInfo (WebCLDeviceID device, cl_device_info param_name)
     clGetKernelInfo         any getKernelInfo (WebCLKernel kernel, cl_kernel_info param_name)
     clGetProgramInfo        any getProgramInfo (WebCLProgram program, cl_program_info
                             param_name)
     clGetCommandQueueInfo   any getCommandQueueInfo (WebCLQueue queue,
                             cl_command_queue_info param_name)
     clGetProgramBuildInfo   any getProgramBuildInfo (WebCLProgram program, WebCLDeviceID
                             device, cl_program_build_info param_name)
     clGetContextInfo        WebCLGetInfo getContextInfo (WebCLContext context, cl_context_info
                             param_name)

19
Samsung WebCL Prototype APIs (8/10)
     OpenCL API                   Samsung WebCL Prototype APIs
     clGetKernelWorkGroupInfo     any getKernelWorkGroupInfo (WebCLKernel kernel, WebCLDeviceID
                                  device, cl_kernel_work_group_info param_name)
     clGetMemObjectInfo           any getMemObjectInfo (WebCLMemObject memobj,cl_mem_info
                                  param_name)
     clGetImageInfo               any getImageInfo (WebCLImage image, cl_image_info param_name)
     clGetSupportedImageFormats   WebCLImageFormat[ ] getSupportedImageFormats (WebCLContext
                                  context, cl_mem_flags flags, cl_mem_object_type image_type);
     clGetEventInfo               any getEventInfo (WebCLEvent event, cl_event_info param_name)
     clGetEventProfilingInfo      any getEventProfilingInfo (WebCLEvent event, cl_profiling_info
                                  param_name)
     clgetPlatformInfo            any getPlatformInfo (WebCLPlatformID platform, cl_platform_info
                                  param_name)
     clGetSamplerInfo             any getSamplerInfo (WebCLSampler sampler, cl_sampler_info
                                  param_name)
     clReleaseCommandQueue        void releaseCommandQueue (WebCLQueue queue)

20
Samsung WebCL Prototype APIs (9/10)
     OpenCL API             Samsung WebCL Prototype APIs
     clReleaseContext       void releaseContext (WebCLContext context)
     clReleaseEvent         void releaseEvent (WebCLEvent event)
     clReleaseKernel        void releaseKernel (WebCLKernel kernel)
     clReleaseMemObject     void releaseMemObject (WebCLMemObject memobj)
     clReleaseProgram       void releaseProgram (WebCLProgram program);
     clReleaseSampler       void releaseSampler (WebCLSamplerWebCLSampler)
     clRetainCommandQueue   void retainCommandQueue (WebCLQueue queue)
     clRetainContext        void retainContext (WebCLContext context)
     clRetainEvent          void retainEvent (WebCLEvent event)
     clRetainKernel         void retainKernel (WebCLKernel kernel)
     clRetainMemObject      void retainMemObject (WebCLMemObject memobj)
     clRetainProgram        void retainProgram (WebCLProgram program)
     clRetainSampler        void retainSampler (WebCLSampler sampler)
21
Samsung WebCL Prototype APIs (10/10)
     OpenCL API                         Samsung WebCL Prototype APIs
     clSetEventCallback                 void setEventCallback (WebCLEvent event, cl_int
                                        command_exec_callback_type,WebCLEventCallback notify,
                                        object userData)
     clSetKernelArg                     void setKernelArg (WebCLKernel kernel, cl_uint arg_index,
                                        object arg_value, cl_kernel_arg_type arg_type)
                                        void setKernelArgLocal(WebCLKernel kernel, cl_uint
                                        arg_index, size_t arg_size)
     clSetMemObjectDestructorCallback   void setMemObjectDestructorCallback
                                        (WebCLMemObject memobj, WebCLMemDestructorCallback
                                        notify, object userData)
     clSetUserEventStatus               void setUserEventStatus (WebCLEvent event, cl_int
                                        execution_status)
     clUnloadCompiler                   void unloadCompiler()
     clWaitForEvents                    void waitForEvents (sequence<WebCLEvent> event_list)
     clCreateFromGLBuffer               WebCLBuffer createFromGLBuffer (WebCLContext
                                        context, cl_mem_flags flags, WebGLBuffer glBuffer)
22

Weitere ähnliche Inhalte

Was ist angesagt?

React, Redux and es6/7
React, Redux and es6/7React, Redux and es6/7
React, Redux and es6/7Dongho Cho
 
OrientDB - The 2nd generation of (multi-model) NoSQL
OrientDB - The 2nd generation of  (multi-model) NoSQLOrientDB - The 2nd generation of  (multi-model) NoSQL
OrientDB - The 2nd generation of (multi-model) NoSQLRoberto Franchini
 
Solid principles in practice the clean architecture - Droidcon Italy
Solid principles in practice the clean architecture - Droidcon ItalySolid principles in practice the clean architecture - Droidcon Italy
Solid principles in practice the clean architecture - Droidcon ItalyFabio Collini
 
Job Queue in Golang
Job Queue in GolangJob Queue in Golang
Job Queue in GolangBo-Yi Wu
 
A evolução da persistência de dados (com sqlite) no android
A evolução da persistência de dados (com sqlite) no androidA evolução da persistência de dados (com sqlite) no android
A evolução da persistência de dados (com sqlite) no androidRodrigo de Souza Castro
 
Cascadia.js: Don't Cross the Streams
Cascadia.js: Don't Cross the StreamsCascadia.js: Don't Cross the Streams
Cascadia.js: Don't Cross the Streamsmattpodwysocki
 
How to build to do app using vue composition api and vuex 4 with typescript
How to build to do app using vue composition api and vuex 4 with typescriptHow to build to do app using vue composition api and vuex 4 with typescript
How to build to do app using vue composition api and vuex 4 with typescriptKaty Slemon
 
Managing user's data with Spring Session
Managing user's data with Spring SessionManaging user's data with Spring Session
Managing user's data with Spring SessionDavid Gómez García
 
Laporan multi client
Laporan multi clientLaporan multi client
Laporan multi clientichsanbarokah
 
Singletons in PHP - Why they are bad and how you can eliminate them from your...
Singletons in PHP - Why they are bad and how you can eliminate them from your...Singletons in PHP - Why they are bad and how you can eliminate them from your...
Singletons in PHP - Why they are bad and how you can eliminate them from your...go_oh
 
One Year of Clean Architecture - The Good, The Bad and The Bob
One Year of Clean Architecture - The Good, The Bad and The BobOne Year of Clean Architecture - The Good, The Bad and The Bob
One Year of Clean Architecture - The Good, The Bad and The BobOCTO Technology
 
Functional Reactive Programming with RxJS
Functional Reactive Programming with RxJSFunctional Reactive Programming with RxJS
Functional Reactive Programming with RxJSstefanmayer13
 
Reactive Access to MongoDB from Java 8
Reactive Access to MongoDB from Java 8Reactive Access to MongoDB from Java 8
Reactive Access to MongoDB from Java 8Hermann Hueck
 
用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構Bo-Yi Wu
 
Hiveminder - Everything but the Secret Sauce
Hiveminder - Everything but the Secret SauceHiveminder - Everything but the Secret Sauce
Hiveminder - Everything but the Secret SauceJesse Vincent
 
OpenCms Days 2014 - User Generated Content in OpenCms 9.5
OpenCms Days 2014 - User Generated Content in OpenCms 9.5OpenCms Days 2014 - User Generated Content in OpenCms 9.5
OpenCms Days 2014 - User Generated Content in OpenCms 9.5Alkacon Software GmbH & Co. KG
 

Was ist angesagt? (20)

React, Redux and es6/7
React, Redux and es6/7React, Redux and es6/7
React, Redux and es6/7
 
OrientDB - The 2nd generation of (multi-model) NoSQL
OrientDB - The 2nd generation of  (multi-model) NoSQLOrientDB - The 2nd generation of  (multi-model) NoSQL
OrientDB - The 2nd generation of (multi-model) NoSQL
 
Solid principles in practice the clean architecture - Droidcon Italy
Solid principles in practice the clean architecture - Droidcon ItalySolid principles in practice the clean architecture - Droidcon Italy
Solid principles in practice the clean architecture - Droidcon Italy
 
droidparts
droidpartsdroidparts
droidparts
 
Job Queue in Golang
Job Queue in GolangJob Queue in Golang
Job Queue in Golang
 
A evolução da persistência de dados (com sqlite) no android
A evolução da persistência de dados (com sqlite) no androidA evolução da persistência de dados (com sqlite) no android
A evolução da persistência de dados (com sqlite) no android
 
Cascadia.js: Don't Cross the Streams
Cascadia.js: Don't Cross the StreamsCascadia.js: Don't Cross the Streams
Cascadia.js: Don't Cross the Streams
 
How to build to do app using vue composition api and vuex 4 with typescript
How to build to do app using vue composition api and vuex 4 with typescriptHow to build to do app using vue composition api and vuex 4 with typescript
How to build to do app using vue composition api and vuex 4 with typescript
 
Managing user's data with Spring Session
Managing user's data with Spring SessionManaging user's data with Spring Session
Managing user's data with Spring Session
 
Laporan multi client
Laporan multi clientLaporan multi client
Laporan multi client
 
Codeofdatabase
CodeofdatabaseCodeofdatabase
Codeofdatabase
 
Singletons in PHP - Why they are bad and how you can eliminate them from your...
Singletons in PHP - Why they are bad and how you can eliminate them from your...Singletons in PHP - Why they are bad and how you can eliminate them from your...
Singletons in PHP - Why they are bad and how you can eliminate them from your...
 
One Year of Clean Architecture - The Good, The Bad and The Bob
One Year of Clean Architecture - The Good, The Bad and The BobOne Year of Clean Architecture - The Good, The Bad and The Bob
One Year of Clean Architecture - The Good, The Bad and The Bob
 
Functional Reactive Programming with RxJS
Functional Reactive Programming with RxJSFunctional Reactive Programming with RxJS
Functional Reactive Programming with RxJS
 
Reactive Access to MongoDB from Java 8
Reactive Access to MongoDB from Java 8Reactive Access to MongoDB from Java 8
Reactive Access to MongoDB from Java 8
 
用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構
 
Hiveminder - Everything but the Secret Sauce
Hiveminder - Everything but the Secret SauceHiveminder - Everything but the Secret Sauce
Hiveminder - Everything but the Secret Sauce
 
OpenCms Days 2014 - User Generated Content in OpenCms 9.5
OpenCms Days 2014 - User Generated Content in OpenCms 9.5OpenCms Days 2014 - User Generated Content in OpenCms 9.5
OpenCms Days 2014 - User Generated Content in OpenCms 9.5
 
NS2 Shadow Object Construction
NS2 Shadow Object ConstructionNS2 Shadow Object Construction
NS2 Shadow Object Construction
 
NS2 Object Construction
NS2 Object ConstructionNS2 Object Construction
NS2 Object Construction
 

Ähnlich wie Samsung WebCL Prototype API

(DEV204) Building High-Performance Native Cloud Apps In C++
(DEV204) Building High-Performance Native Cloud Apps In C++(DEV204) Building High-Performance Native Cloud Apps In C++
(DEV204) Building High-Performance Native Cloud Apps In C++Amazon Web Services
 
Use Eclipse technologies to build a modern embedded IDE
Use Eclipse technologies to build a modern embedded IDEUse Eclipse technologies to build a modern embedded IDE
Use Eclipse technologies to build a modern embedded IDEBenjamin Cabé
 
Integration tests: use the containers, Luke!
Integration tests: use the containers, Luke!Integration tests: use the containers, Luke!
Integration tests: use the containers, Luke!Roberto Franchini
 
Architecting .NET solutions in a Docker ecosystem - .NET Fest Kyiv 2019
Architecting .NET solutions in a Docker ecosystem - .NET Fest Kyiv 2019Architecting .NET solutions in a Docker ecosystem - .NET Fest Kyiv 2019
Architecting .NET solutions in a Docker ecosystem - .NET Fest Kyiv 2019Alex Thissen
 
maxbox starter72 multilanguage coding
maxbox starter72 multilanguage codingmaxbox starter72 multilanguage coding
maxbox starter72 multilanguage codingMax Kleiner
 
ClojureScript: The Good Parts
ClojureScript: The Good PartsClojureScript: The Good Parts
ClojureScript: The Good PartsKent Ohashi
 
The OpenCL C++ Wrapper 1.2 Reference Card
The OpenCL C++ Wrapper 1.2 Reference CardThe OpenCL C++ Wrapper 1.2 Reference Card
The OpenCL C++ Wrapper 1.2 Reference CardThe Khronos Group Inc.
 
Hybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKitHybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKitAriya Hidayat
 
Developing your first application using FIWARE
Developing your first application using FIWAREDeveloping your first application using FIWARE
Developing your first application using FIWAREFIWARE
 
Deploying Cloud Native Red Team Infrastructure with Kubernetes, Istio and Envoy
Deploying Cloud Native Red Team Infrastructure with Kubernetes, Istio and Envoy Deploying Cloud Native Red Team Infrastructure with Kubernetes, Istio and Envoy
Deploying Cloud Native Red Team Infrastructure with Kubernetes, Istio and Envoy Jeffrey Holden
 
Implementing new WebAPIs
Implementing new WebAPIsImplementing new WebAPIs
Implementing new WebAPIsJulian Viereck
 
Hybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKitHybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKitAriya Hidayat
 
Hybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKitHybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKitAriya Hidayat
 
The Theory Of The Dom
The Theory Of The DomThe Theory Of The Dom
The Theory Of The Domkaven yan
 
Windows Remote Management - EN
Windows Remote Management - ENWindows Remote Management - EN
Windows Remote Management - ENKirill Nikolaev
 
using Mithril.js + postgREST to build and consume API's
using Mithril.js + postgREST to build and consume API'susing Mithril.js + postgREST to build and consume API's
using Mithril.js + postgREST to build and consume API'sAntônio Roberto Silva
 
Models, controllers and views
Models, controllers and viewsModels, controllers and views
Models, controllers and viewspriestc
 
.NET Fest 2019. Alex Thissen. Architecting .NET solutions in a Docker ecosystem
.NET Fest 2019. Alex Thissen. Architecting .NET solutions in a Docker ecosystem.NET Fest 2019. Alex Thissen. Architecting .NET solutions in a Docker ecosystem
.NET Fest 2019. Alex Thissen. Architecting .NET solutions in a Docker ecosystemNETFest
 

Ähnlich wie Samsung WebCL Prototype API (20)

(DEV204) Building High-Performance Native Cloud Apps In C++
(DEV204) Building High-Performance Native Cloud Apps In C++(DEV204) Building High-Performance Native Cloud Apps In C++
(DEV204) Building High-Performance Native Cloud Apps In C++
 
Use Eclipse technologies to build a modern embedded IDE
Use Eclipse technologies to build a modern embedded IDEUse Eclipse technologies to build a modern embedded IDE
Use Eclipse technologies to build a modern embedded IDE
 
Integration tests: use the containers, Luke!
Integration tests: use the containers, Luke!Integration tests: use the containers, Luke!
Integration tests: use the containers, Luke!
 
Architecting .NET solutions in a Docker ecosystem - .NET Fest Kyiv 2019
Architecting .NET solutions in a Docker ecosystem - .NET Fest Kyiv 2019Architecting .NET solutions in a Docker ecosystem - .NET Fest Kyiv 2019
Architecting .NET solutions in a Docker ecosystem - .NET Fest Kyiv 2019
 
maxbox starter72 multilanguage coding
maxbox starter72 multilanguage codingmaxbox starter72 multilanguage coding
maxbox starter72 multilanguage coding
 
ClojureScript: The Good Parts
ClojureScript: The Good PartsClojureScript: The Good Parts
ClojureScript: The Good Parts
 
The OpenCL C++ Wrapper 1.2 Reference Card
The OpenCL C++ Wrapper 1.2 Reference CardThe OpenCL C++ Wrapper 1.2 Reference Card
The OpenCL C++ Wrapper 1.2 Reference Card
 
Hybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKitHybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKit
 
Developing your first application using FIWARE
Developing your first application using FIWAREDeveloping your first application using FIWARE
Developing your first application using FIWARE
 
Deploying Cloud Native Red Team Infrastructure with Kubernetes, Istio and Envoy
Deploying Cloud Native Red Team Infrastructure with Kubernetes, Istio and Envoy Deploying Cloud Native Red Team Infrastructure with Kubernetes, Istio and Envoy
Deploying Cloud Native Red Team Infrastructure with Kubernetes, Istio and Envoy
 
Implementing New Web
Implementing New WebImplementing New Web
Implementing New Web
 
Implementing new WebAPIs
Implementing new WebAPIsImplementing new WebAPIs
Implementing new WebAPIs
 
Hybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKitHybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKit
 
Hybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKitHybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKit
 
The Theory Of The Dom
The Theory Of The DomThe Theory Of The Dom
The Theory Of The Dom
 
OpenCL 2.2 Reference Guide
OpenCL 2.2 Reference GuideOpenCL 2.2 Reference Guide
OpenCL 2.2 Reference Guide
 
Windows Remote Management - EN
Windows Remote Management - ENWindows Remote Management - EN
Windows Remote Management - EN
 
using Mithril.js + postgREST to build and consume API's
using Mithril.js + postgREST to build and consume API'susing Mithril.js + postgREST to build and consume API's
using Mithril.js + postgREST to build and consume API's
 
Models, controllers and views
Models, controllers and viewsModels, controllers and views
Models, controllers and views
 
.NET Fest 2019. Alex Thissen. Architecting .NET solutions in a Docker ecosystem
.NET Fest 2019. Alex Thissen. Architecting .NET solutions in a Docker ecosystem.NET Fest 2019. Alex Thissen. Architecting .NET solutions in a Docker ecosystem
.NET Fest 2019. Alex Thissen. Architecting .NET solutions in a Docker ecosystem
 

Mehr von Ryo Jin

Why is EFL used on Tizen?
Why is EFL used on Tizen?Why is EFL used on Tizen?
Why is EFL used on Tizen?Ryo Jin
 
Samsung Z4 User Manual
Samsung Z4 User ManualSamsung Z4 User Manual
Samsung Z4 User ManualRyo Jin
 
Samsung ARTIK 050 (ARTIK ZERO) Modules Data Sheet
Samsung ARTIK 050 (ARTIK ZERO) Modules Data SheetSamsung ARTIK 050 (ARTIK ZERO) Modules Data Sheet
Samsung ARTIK 050 (ARTIK ZERO) Modules Data SheetRyo Jin
 
Introduction to Watch Face Development with Tizen Studio
Introduction to Watch Face Development with Tizen StudioIntroduction to Watch Face Development with Tizen Studio
Introduction to Watch Face Development with Tizen StudioRyo Jin
 
Tizen 3.0's Window System Integration Layer of OpenGLES/EGL & Vulkan Driver
Tizen 3.0's Window System Integration Layer of OpenGLES/EGL & Vulkan DriverTizen 3.0's Window System Integration Layer of OpenGLES/EGL & Vulkan Driver
Tizen 3.0's Window System Integration Layer of OpenGLES/EGL & Vulkan DriverRyo Jin
 
Panduan Penggunaan Perangkat Wearable Tizen
Panduan Penggunaan Perangkat Wearable TizenPanduan Penggunaan Perangkat Wearable Tizen
Panduan Penggunaan Perangkat Wearable TizenRyo Jin
 
Cara Menggunakan Smartphone Tizen
Cara Menggunakan Smartphone TizenCara Menggunakan Smartphone Tizen
Cara Menggunakan Smartphone TizenRyo Jin
 
Gear Fit2 Watchface Design Guide
Gear Fit2 Watchface Design GuideGear Fit2 Watchface Design Guide
Gear Fit2 Watchface Design GuideRyo Jin
 
Samsung Indonesia: Tizen Store
Samsung Indonesia: Tizen StoreSamsung Indonesia: Tizen Store
Samsung Indonesia: Tizen StoreRyo Jin
 
Samsung Indonesia: Tizen Wearables
Samsung Indonesia: Tizen WearablesSamsung Indonesia: Tizen Wearables
Samsung Indonesia: Tizen WearablesRyo Jin
 
Samsung Indonesia: Tizen Web Apps
Samsung Indonesia: Tizen Web AppsSamsung Indonesia: Tizen Web Apps
Samsung Indonesia: Tizen Web AppsRyo Jin
 
Samsung Indonesia: Tizen Native App
Samsung Indonesia: Tizen Native AppSamsung Indonesia: Tizen Native App
Samsung Indonesia: Tizen Native AppRyo Jin
 
Samsung Indonesia: Tizen Platform Overview and IoT
Samsung Indonesia: Tizen Platform Overview and IoTSamsung Indonesia: Tizen Platform Overview and IoT
Samsung Indonesia: Tizen Platform Overview and IoTRyo Jin
 
Russian Tizen Project
Russian Tizen ProjectRussian Tizen Project
Russian Tizen ProjectRyo Jin
 
Samsung SM-R360 Tizen User Manual
Samsung SM-R360 Tizen User ManualSamsung SM-R360 Tizen User Manual
Samsung SM-R360 Tizen User ManualRyo Jin
 
Tizen Micro Profile for IoT device
Tizen Micro Profile for IoT deviceTizen Micro Profile for IoT device
Tizen Micro Profile for IoT deviceRyo Jin
 
Panduan Dasar Pemrograman Tizen
Panduan Dasar Pemrograman TizenPanduan Dasar Pemrograman Tizen
Panduan Dasar Pemrograman TizenRyo Jin
 
The Story of Enlightenment, EFL, Tizen and Wayland
The Story of Enlightenment, EFL, Tizen and WaylandThe Story of Enlightenment, EFL, Tizen and Wayland
The Story of Enlightenment, EFL, Tizen and WaylandRyo Jin
 
Tizen PASS
Tizen PASSTizen PASS
Tizen PASSRyo Jin
 
Tizen PASS
Tizen PASSTizen PASS
Tizen PASSRyo Jin
 

Mehr von Ryo Jin (20)

Why is EFL used on Tizen?
Why is EFL used on Tizen?Why is EFL used on Tizen?
Why is EFL used on Tizen?
 
Samsung Z4 User Manual
Samsung Z4 User ManualSamsung Z4 User Manual
Samsung Z4 User Manual
 
Samsung ARTIK 050 (ARTIK ZERO) Modules Data Sheet
Samsung ARTIK 050 (ARTIK ZERO) Modules Data SheetSamsung ARTIK 050 (ARTIK ZERO) Modules Data Sheet
Samsung ARTIK 050 (ARTIK ZERO) Modules Data Sheet
 
Introduction to Watch Face Development with Tizen Studio
Introduction to Watch Face Development with Tizen StudioIntroduction to Watch Face Development with Tizen Studio
Introduction to Watch Face Development with Tizen Studio
 
Tizen 3.0's Window System Integration Layer of OpenGLES/EGL & Vulkan Driver
Tizen 3.0's Window System Integration Layer of OpenGLES/EGL & Vulkan DriverTizen 3.0's Window System Integration Layer of OpenGLES/EGL & Vulkan Driver
Tizen 3.0's Window System Integration Layer of OpenGLES/EGL & Vulkan Driver
 
Panduan Penggunaan Perangkat Wearable Tizen
Panduan Penggunaan Perangkat Wearable TizenPanduan Penggunaan Perangkat Wearable Tizen
Panduan Penggunaan Perangkat Wearable Tizen
 
Cara Menggunakan Smartphone Tizen
Cara Menggunakan Smartphone TizenCara Menggunakan Smartphone Tizen
Cara Menggunakan Smartphone Tizen
 
Gear Fit2 Watchface Design Guide
Gear Fit2 Watchface Design GuideGear Fit2 Watchface Design Guide
Gear Fit2 Watchface Design Guide
 
Samsung Indonesia: Tizen Store
Samsung Indonesia: Tizen StoreSamsung Indonesia: Tizen Store
Samsung Indonesia: Tizen Store
 
Samsung Indonesia: Tizen Wearables
Samsung Indonesia: Tizen WearablesSamsung Indonesia: Tizen Wearables
Samsung Indonesia: Tizen Wearables
 
Samsung Indonesia: Tizen Web Apps
Samsung Indonesia: Tizen Web AppsSamsung Indonesia: Tizen Web Apps
Samsung Indonesia: Tizen Web Apps
 
Samsung Indonesia: Tizen Native App
Samsung Indonesia: Tizen Native AppSamsung Indonesia: Tizen Native App
Samsung Indonesia: Tizen Native App
 
Samsung Indonesia: Tizen Platform Overview and IoT
Samsung Indonesia: Tizen Platform Overview and IoTSamsung Indonesia: Tizen Platform Overview and IoT
Samsung Indonesia: Tizen Platform Overview and IoT
 
Russian Tizen Project
Russian Tizen ProjectRussian Tizen Project
Russian Tizen Project
 
Samsung SM-R360 Tizen User Manual
Samsung SM-R360 Tizen User ManualSamsung SM-R360 Tizen User Manual
Samsung SM-R360 Tizen User Manual
 
Tizen Micro Profile for IoT device
Tizen Micro Profile for IoT deviceTizen Micro Profile for IoT device
Tizen Micro Profile for IoT device
 
Panduan Dasar Pemrograman Tizen
Panduan Dasar Pemrograman TizenPanduan Dasar Pemrograman Tizen
Panduan Dasar Pemrograman Tizen
 
The Story of Enlightenment, EFL, Tizen and Wayland
The Story of Enlightenment, EFL, Tizen and WaylandThe Story of Enlightenment, EFL, Tizen and Wayland
The Story of Enlightenment, EFL, Tizen and Wayland
 
Tizen PASS
Tizen PASSTizen PASS
Tizen PASS
 
Tizen PASS
Tizen PASSTizen PASS
Tizen PASS
 

Kürzlich hochgeladen

RBS学位证,鹿特丹商学院毕业证书1:1制作
RBS学位证,鹿特丹商学院毕业证书1:1制作RBS学位证,鹿特丹商学院毕业证书1:1制作
RBS学位证,鹿特丹商学院毕业证书1:1制作f3774p8b
 
NO1 Qualified Best Black Magic Specialist Near Me Spiritual Healer Powerful L...
NO1 Qualified Best Black Magic Specialist Near Me Spiritual Healer Powerful L...NO1 Qualified Best Black Magic Specialist Near Me Spiritual Healer Powerful L...
NO1 Qualified Best Black Magic Specialist Near Me Spiritual Healer Powerful L...Amil baba
 
专业一比一美国加州州立大学东湾分校毕业证成绩单pdf电子版制作修改#真实工艺展示#真实防伪#diploma#degree
专业一比一美国加州州立大学东湾分校毕业证成绩单pdf电子版制作修改#真实工艺展示#真实防伪#diploma#degree专业一比一美国加州州立大学东湾分校毕业证成绩单pdf电子版制作修改#真实工艺展示#真实防伪#diploma#degree
专业一比一美国加州州立大学东湾分校毕业证成绩单pdf电子版制作修改#真实工艺展示#真实防伪#diploma#degreeyuu sss
 
Vip Udupi Call Girls 7001305949 WhatsApp Number 24x7 Best Services
Vip Udupi Call Girls 7001305949 WhatsApp Number 24x7 Best ServicesVip Udupi Call Girls 7001305949 WhatsApp Number 24x7 Best Services
Vip Udupi Call Girls 7001305949 WhatsApp Number 24x7 Best Servicesnajka9823
 
(办理学位证)多伦多大学毕业证成绩单原版一比一
(办理学位证)多伦多大学毕业证成绩单原版一比一(办理学位证)多伦多大学毕业证成绩单原版一比一
(办理学位证)多伦多大学毕业证成绩单原版一比一C SSS
 
专业一比一美国旧金山艺术学院毕业证成绩单pdf电子版制作修改#真实工艺展示#真实防伪#diploma#degree
专业一比一美国旧金山艺术学院毕业证成绩单pdf电子版制作修改#真实工艺展示#真实防伪#diploma#degree专业一比一美国旧金山艺术学院毕业证成绩单pdf电子版制作修改#真实工艺展示#真实防伪#diploma#degree
专业一比一美国旧金山艺术学院毕业证成绩单pdf电子版制作修改#真实工艺展示#真实防伪#diploma#degreeyuu sss
 
vip Krishna Nagar Call Girls 9999965857 Call or WhatsApp Now Book
vip Krishna Nagar Call Girls 9999965857 Call or WhatsApp Now Bookvip Krishna Nagar Call Girls 9999965857 Call or WhatsApp Now Book
vip Krishna Nagar Call Girls 9999965857 Call or WhatsApp Now Bookmanojkuma9823
 
定制(Salford学位证)索尔福德大学毕业证成绩单原版一比一
定制(Salford学位证)索尔福德大学毕业证成绩单原版一比一定制(Salford学位证)索尔福德大学毕业证成绩单原版一比一
定制(Salford学位证)索尔福德大学毕业证成绩单原版一比一ss ss
 
定制(USF学位证)旧金山大学毕业证成绩单原版一比一
定制(USF学位证)旧金山大学毕业证成绩单原版一比一定制(USF学位证)旧金山大学毕业证成绩单原版一比一
定制(USF学位证)旧金山大学毕业证成绩单原版一比一ss ss
 
Slim Call Girls Service Badshah Nagar * 9548273370 Naughty Call Girls Service...
Slim Call Girls Service Badshah Nagar * 9548273370 Naughty Call Girls Service...Slim Call Girls Service Badshah Nagar * 9548273370 Naughty Call Girls Service...
Slim Call Girls Service Badshah Nagar * 9548273370 Naughty Call Girls Service...nagunakhan
 
NO1 WorldWide kala jadu Love Marriage Black Magic Punjab Powerful Black Magic...
NO1 WorldWide kala jadu Love Marriage Black Magic Punjab Powerful Black Magic...NO1 WorldWide kala jadu Love Marriage Black Magic Punjab Powerful Black Magic...
NO1 WorldWide kala jadu Love Marriage Black Magic Punjab Powerful Black Magic...Amil baba
 
威廉玛丽学院毕业证学位证成绩单-安全学历认证
威廉玛丽学院毕业证学位证成绩单-安全学历认证威廉玛丽学院毕业证学位证成绩单-安全学历认证
威廉玛丽学院毕业证学位证成绩单-安全学历认证kbdhl05e
 
the cOMPUTER SYSTEM - computer hardware servicing.pptx
the cOMPUTER SYSTEM - computer hardware servicing.pptxthe cOMPUTER SYSTEM - computer hardware servicing.pptx
the cOMPUTER SYSTEM - computer hardware servicing.pptxLeaMaePahinagGarciaV
 
定制(UI学位证)爱达荷大学毕业证成绩单原版一比一
定制(UI学位证)爱达荷大学毕业证成绩单原版一比一定制(UI学位证)爱达荷大学毕业证成绩单原版一比一
定制(UI学位证)爱达荷大学毕业证成绩单原版一比一ss ss
 
定制(RHUL学位证)伦敦大学皇家霍洛威学院毕业证成绩单原版一比一
定制(RHUL学位证)伦敦大学皇家霍洛威学院毕业证成绩单原版一比一定制(RHUL学位证)伦敦大学皇家霍洛威学院毕业证成绩单原版一比一
定制(RHUL学位证)伦敦大学皇家霍洛威学院毕业证成绩单原版一比一ss ss
 
萨斯喀彻温大学毕业证学位证成绩单-购买流程
萨斯喀彻温大学毕业证学位证成绩单-购买流程萨斯喀彻温大学毕业证学位证成绩单-购买流程
萨斯喀彻温大学毕业证学位证成绩单-购买流程1k98h0e1
 
Papular No 1 Online Istikhara Amil Baba Pakistan Amil Baba In Karachi Amil B...
Papular No 1 Online Istikhara Amil Baba Pakistan  Amil Baba In Karachi Amil B...Papular No 1 Online Istikhara Amil Baba Pakistan  Amil Baba In Karachi Amil B...
Papular No 1 Online Istikhara Amil Baba Pakistan Amil Baba In Karachi Amil B...Authentic No 1 Amil Baba In Pakistan
 

Kürzlich hochgeladen (20)

RBS学位证,鹿特丹商学院毕业证书1:1制作
RBS学位证,鹿特丹商学院毕业证书1:1制作RBS学位证,鹿特丹商学院毕业证书1:1制作
RBS学位证,鹿特丹商学院毕业证书1:1制作
 
young call girls in Khanpur,🔝 9953056974 🔝 escort Service
young call girls in  Khanpur,🔝 9953056974 🔝 escort Serviceyoung call girls in  Khanpur,🔝 9953056974 🔝 escort Service
young call girls in Khanpur,🔝 9953056974 🔝 escort Service
 
NO1 Qualified Best Black Magic Specialist Near Me Spiritual Healer Powerful L...
NO1 Qualified Best Black Magic Specialist Near Me Spiritual Healer Powerful L...NO1 Qualified Best Black Magic Specialist Near Me Spiritual Healer Powerful L...
NO1 Qualified Best Black Magic Specialist Near Me Spiritual Healer Powerful L...
 
专业一比一美国加州州立大学东湾分校毕业证成绩单pdf电子版制作修改#真实工艺展示#真实防伪#diploma#degree
专业一比一美国加州州立大学东湾分校毕业证成绩单pdf电子版制作修改#真实工艺展示#真实防伪#diploma#degree专业一比一美国加州州立大学东湾分校毕业证成绩单pdf电子版制作修改#真实工艺展示#真实防伪#diploma#degree
专业一比一美国加州州立大学东湾分校毕业证成绩单pdf电子版制作修改#真实工艺展示#真实防伪#diploma#degree
 
Vip Udupi Call Girls 7001305949 WhatsApp Number 24x7 Best Services
Vip Udupi Call Girls 7001305949 WhatsApp Number 24x7 Best ServicesVip Udupi Call Girls 7001305949 WhatsApp Number 24x7 Best Services
Vip Udupi Call Girls 7001305949 WhatsApp Number 24x7 Best Services
 
(办理学位证)多伦多大学毕业证成绩单原版一比一
(办理学位证)多伦多大学毕业证成绩单原版一比一(办理学位证)多伦多大学毕业证成绩单原版一比一
(办理学位证)多伦多大学毕业证成绩单原版一比一
 
专业一比一美国旧金山艺术学院毕业证成绩单pdf电子版制作修改#真实工艺展示#真实防伪#diploma#degree
专业一比一美国旧金山艺术学院毕业证成绩单pdf电子版制作修改#真实工艺展示#真实防伪#diploma#degree专业一比一美国旧金山艺术学院毕业证成绩单pdf电子版制作修改#真实工艺展示#真实防伪#diploma#degree
专业一比一美国旧金山艺术学院毕业证成绩单pdf电子版制作修改#真实工艺展示#真实防伪#diploma#degree
 
young call girls in Gtb Nagar,🔝 9953056974 🔝 escort Service
young call girls in Gtb Nagar,🔝 9953056974 🔝 escort Serviceyoung call girls in Gtb Nagar,🔝 9953056974 🔝 escort Service
young call girls in Gtb Nagar,🔝 9953056974 🔝 escort Service
 
vip Krishna Nagar Call Girls 9999965857 Call or WhatsApp Now Book
vip Krishna Nagar Call Girls 9999965857 Call or WhatsApp Now Bookvip Krishna Nagar Call Girls 9999965857 Call or WhatsApp Now Book
vip Krishna Nagar Call Girls 9999965857 Call or WhatsApp Now Book
 
定制(Salford学位证)索尔福德大学毕业证成绩单原版一比一
定制(Salford学位证)索尔福德大学毕业证成绩单原版一比一定制(Salford学位证)索尔福德大学毕业证成绩单原版一比一
定制(Salford学位证)索尔福德大学毕业证成绩单原版一比一
 
定制(USF学位证)旧金山大学毕业证成绩单原版一比一
定制(USF学位证)旧金山大学毕业证成绩单原版一比一定制(USF学位证)旧金山大学毕业证成绩单原版一比一
定制(USF学位证)旧金山大学毕业证成绩单原版一比一
 
Slim Call Girls Service Badshah Nagar * 9548273370 Naughty Call Girls Service...
Slim Call Girls Service Badshah Nagar * 9548273370 Naughty Call Girls Service...Slim Call Girls Service Badshah Nagar * 9548273370 Naughty Call Girls Service...
Slim Call Girls Service Badshah Nagar * 9548273370 Naughty Call Girls Service...
 
NO1 WorldWide kala jadu Love Marriage Black Magic Punjab Powerful Black Magic...
NO1 WorldWide kala jadu Love Marriage Black Magic Punjab Powerful Black Magic...NO1 WorldWide kala jadu Love Marriage Black Magic Punjab Powerful Black Magic...
NO1 WorldWide kala jadu Love Marriage Black Magic Punjab Powerful Black Magic...
 
9953330565 Low Rate Call Girls In Jahangirpuri Delhi NCR
9953330565 Low Rate Call Girls In Jahangirpuri  Delhi NCR9953330565 Low Rate Call Girls In Jahangirpuri  Delhi NCR
9953330565 Low Rate Call Girls In Jahangirpuri Delhi NCR
 
威廉玛丽学院毕业证学位证成绩单-安全学历认证
威廉玛丽学院毕业证学位证成绩单-安全学历认证威廉玛丽学院毕业证学位证成绩单-安全学历认证
威廉玛丽学院毕业证学位证成绩单-安全学历认证
 
the cOMPUTER SYSTEM - computer hardware servicing.pptx
the cOMPUTER SYSTEM - computer hardware servicing.pptxthe cOMPUTER SYSTEM - computer hardware servicing.pptx
the cOMPUTER SYSTEM - computer hardware servicing.pptx
 
定制(UI学位证)爱达荷大学毕业证成绩单原版一比一
定制(UI学位证)爱达荷大学毕业证成绩单原版一比一定制(UI学位证)爱达荷大学毕业证成绩单原版一比一
定制(UI学位证)爱达荷大学毕业证成绩单原版一比一
 
定制(RHUL学位证)伦敦大学皇家霍洛威学院毕业证成绩单原版一比一
定制(RHUL学位证)伦敦大学皇家霍洛威学院毕业证成绩单原版一比一定制(RHUL学位证)伦敦大学皇家霍洛威学院毕业证成绩单原版一比一
定制(RHUL学位证)伦敦大学皇家霍洛威学院毕业证成绩单原版一比一
 
萨斯喀彻温大学毕业证学位证成绩单-购买流程
萨斯喀彻温大学毕业证学位证成绩单-购买流程萨斯喀彻温大学毕业证学位证成绩单-购买流程
萨斯喀彻温大学毕业证学位证成绩单-购买流程
 
Papular No 1 Online Istikhara Amil Baba Pakistan Amil Baba In Karachi Amil B...
Papular No 1 Online Istikhara Amil Baba Pakistan  Amil Baba In Karachi Amil B...Papular No 1 Online Istikhara Amil Baba Pakistan  Amil Baba In Karachi Amil B...
Papular No 1 Online Istikhara Amil Baba Pakistan Amil Baba In Karachi Amil B...
 

Samsung WebCL Prototype API

  • 1. Samsung’s WebCL Prototype Implementation: Overview of APIs Tasneem Brutch Samsung Electronics
  • 2. Samsung WebCL Prototype Design Design Goals:  To enable general purpose parallel programming across heterogeneous processing elements.  Provide web application developers portable and efficient access to heterogeneous processing platforms from web content. Our Approach:  Similar to WebGL’s approach. Design Choices:  Samsung WebCL prototype used ECMAScript API for interacting with OpenCL.  Attempted to stay as close as possible to OpenCL, to preserve developer familiarity, and facilitate adoption.  As OpenCL and WebCL evolve, it will be easier to keep the two in sync if WebCL APIs closely resemble OpenCL APIs.  To ensure portability, the prototype is not biased towards a specific solution space.  Samsung’s WebCL prototype is not intended to be a higher level API to satisfy 2 everyone.
  • 3. Samsung WebCL Prototype-Overview Functionality:  WebCL compute contexts  Platform queries (clGetPlatformIDs, clGetDeviceIDs etc)  Creation of OpenCL Context, Queue and Buffer objects  Kernel building  Querying workgroup size (clGetKernelWorkGroupInfo)  Reading, writing and copying OpenCL buffers  Setting kernel arguments  Scheduling a kernel for execution  GL interoperability  clCreateFromGLBuffer  clEnqueueAcquireGLObjects  clEnqueueReleaseGLObjects  Synchronization (clFinish)  Error handling 3
  • 4. OpenCL to WebCL Mapping  Samsung’s WebCL prototype implementation attempts to provide for nearly 1:1 mapping with OpenCL.  OpenCL APIs are accessed from JavaScript through the WebCLComputeContext class.  Mapping OpenCL to WebCL: cl = new WebCLComputeContext ( ) OpenCL - WebCL API Syntax Examples OpenCL API WebCL API Calling WebCL APIs from JavaScript cl_kernel clCreateKernel WebCLKernel createKernel cl.createKernel (…) (cl_program program, const char (WebCLProgram*, const *kernel_name, cl_int *errcode_ret); String&); cl_mem clCreateBuffer WebCLBuffer createBuffer cl.createBuffer (…) (cl_context context, cl_mem_flags flags, (WebCLContext context, size_t size, void *host_ptr, cl_mem_flags flags, size_t size, cl_int *errcode_ret); ArrayBuffer host_ptr); 4
  • 5. Blocking and Non-Blocking APIs OpenCL provides APIs for reading/writing GPU memory, eg:  clEnqueueWriteBuffer (queue, buffer, flag, offset, nbytes, data, …)  Enqueues a command to write to a buffer object (buffer) from host memory (data)  If flag is CL_TRUE the command is blocking and clEnqueueWriteBuffer will not return until data has been written.  clFinish (queue)  Blocks until all commands in queue have completed. Samsung WebCL Prototype Approach:  Memory transfers may block/non block depending on the blocking flag.  cl.finish does not block (evaluating implementation of a blocking form of cl.finish)  Various enqueue APIs can take a list of events, which need to complete before the command is executed, however this does not change whether the API is blocking or not from caller’s perspective, for eg. cl.enqueueWriterBuffer (queue, buffer, blocking_write=false, event_wait_list != null) should return immediately even if the events in the event_wait_list have not yet occurred. 5
  • 6. WebCL Class Hierarchy WebCLComputeContext + m_webclObjects …… WebCLContext + m_webcl_platform + cl_context* + m_webcl_device + m_webcl_program WebCLDevice + m_webcl_memObject + cl_device_id* + m_webcl_sampler + m_webcl_commandQueue WebCLPlatfom …….. + cl_platform_id* + getPlatformIDs() + getDeviceIDs() WebCLProgram WebCLKernel + createContext() + cl_program* + cl_kernel* + createCommandQueue() + getKernel() WebCLBuffer + createProgramWithSource() + buildProgram() WebCLMemObject + getProgramBuildInfo() + cl_mem* WebCLImage + createKernel() + createBuffer() + enqueueWriteBuffer() WebCLCommandQueue + enqueueReadBuffer() + cl_command_queue* + setKernel() + getKernelWorkInfo() WebCLEvent + enqueueNDRangeKernel() + cl_event* + finish() + releaseMemObject() + releaseProgram() WebCLSampler + releaseKernel() + cl_sampler* + releaseCommandQueue() + releaseContext() 6
  • 7. WebCL Interface (Sample Calls from HelloWorld App for Illustration-1/3) <html> <head> <title>WebCL Hello World</title> <script> function getKernel (id ) { var kernelScript = document.getElementById( id ); } </script> <script id="square" type="x-kernel"> __kernel void square( __global float* input, __global float* output) { int i = get_global_id(0); output[i] = input[i] * input[i]; } </script> <script> var cl; var platform_ids, device_ids; var context, queue, program, kernel, input, output; var err; var data = new Float32Array(DATA_SIZE); var results = new Float32Array(DATA_SIZE); 7
  • 8. WebCL Interface (Sample Calls from HelloWorld App for Illustration-2/3) function ExecuteCL( ) { cl = new WebCLComputeContext ( ); platform_ids = cl.getPlatformIDs ( ); device_ids = cl.getDeviceIDs (platform_ids[0], cl.DEVICE_TYPE_GPU ); context = cl.createContext (null, device_ids[0], null, null); queue = cl.createCommandQueue (context, device_ids[0], null); var kernelSource = getKernel ("square"); program = cl.createProgramWithSource (context, kernelSource); err = cl.buildProgram (program, null, null, null); var info = cl.getProgramBuildInfo (program, device_ids[0], cl.PROGRAM_BUILD_LOG); kernel = cl.createKernel (program, "square"); input = cl.createBuffer (context, cl.MEM_READ_ONLY, Float32Array.BYTES_PER_ELEMENT * count, null); output = cl.createBuffer (context, cl.MEM_WRITE_ONLY, Float32Array.BYTES_PER_ELEMENT * count, null); 8
  • 9. WebCL Interface (Sample Calls from HelloWorld App for Illustration-3/3) cl.enqueueWriteBuffer (queue, input, true, 0, Float32Array.BYTES_PER_ELEMENT * count, data, null); err = cl.setKernelArgGlobal (kernel, 0, input); err = cl.setKernelArgGlobal (kernel, 1, output); var local = cl.getKernelWorkGroupInfo (kernel, device_id, cl.KERNEL_WORK_GROUP_SIZE); cl.enqueueNDRangeKernel (queue, kernel, 1, 0, count, local, null); cl.finish (queue, null, function(userData) { cl.enqueueReadBuffer (queue, output, true, 0, Float32Array.BYTES_PER_ELEMENT * count, results, null); cl.releaseMemObject (input); cl.releaseMemObject (output); cl.releaseProgram (program); cl.releaseKernel (kernel); cl.releaseCommandQueue (queue); cl.releaseContext (context); }); } </script> </head> 9
  • 10. Samsung WebCL Prototype Demo N-Body 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 10
  • 11. Samsung WebCL Prototype Demo Deform Demo:  Calculates and renders transparent and reflective deformed spheres on top of photo background  Performance comparison on Mac  JS: ~1 FPS  WebCL: 87-116 FPS 11
  • 13. Samsung WebCL Prototype APIs (1/10) OpenCL API Samsung WebCL Prototype API clBuildProgram 1. void buildProgram (WebCLProgram program, DOMString opts, WebCLBuildCallback notify, object userData) 2. void buildProgram (WebCLProgram program, WebCLDeviceID device, DOMString opts, WebCLBuildCallback notify, object userData) 3.void buildProgram (WebCLProgram program, sequence<WebCLDeviceID> device_list, DOMString opts, WebCLBuildCallback notify, object userData) clCreateBuffer WebCLBuffer createBuffer (WebCLContext context, cl_mem_flags flags, size_t size, ArrayBuffer host_ptr) clCreateSubBuffer WebCLBuffer createSubBuffer (WebCLBuffer buffer, cl_mem_flags flags, cl_buffer_create_type buffer_create_type, WebCLBufferCreateInfo buffer_create_info) clCreateCommandQueue WebCLQueue createCommandQueue (WebCLContext context, WebCLDeviceID device, cl_command_queue_properties properties) clCreateContext 1.WebCLContext createContext (DOMString properties, WebCLDeviceID device, WebCLContextCallback notify, object userData) 2.WebCLContext createContext (DOMString properties, sequence<WebCLDeviceID> device_list, WebCLContextCallback notify, object userData) clCreateContextFromType WebCLContext createContextFromType ( DOMString properties, cl_device_type device_type, WebCLContextCallback notify, object userData) 13
  • 14. Samsung WebCL Prototype APIs (2/10) OpenCL API Samsung WebCL Prototype API clCreateUserEvent WebCLEvent createUserEvent (WebCLContext context) clCreateImage2D 1.WebCLImage createImage2D (WebCLContext context, cl_mem_flags flags, HTMLCanvasElement canvas); 2. WebCLImage createImage2D (WebCLContext context, cl_mem_flags flags, HTMLImageElement image); 3. WebCLImage createImage2D (WebCLContext context, cl_mem_flags flags, HTMLVideoElement video) 4. WebCLImage createImage2D (WebCLContext context, cl_mem_flags flags, ImageData data) 5. WebCLImage createImage2D (WebCLContext context, cl_mem_flags flags, size_t image_width, size_t image_height, ArrayBuffer data) clCreateImage3D WebCLImage createImage3D (WebCLContext context, cl_mem_flags flags, size_t image_width, size_t image_height, size_t image_depth, ArrayBuffer data); clCreateKernel WebCLKernel createKernel (WebCLProgram program, DOMString kernel_name) clCreateKernelsInProgram WebCLKernel[ ] createKernelsInProgram (WebCLProgram program) clCreateProgramWithBinary WebCLProgram createProgramWithBinary (WebCLContext context, sequence<WebCLDeviceID> device_list, sequence<DOMString> binaries); clCreateProgramWithSource WebCLProgram createProgramWithSource (WebCLContext context, DOMString kernelSource) 14
  • 15. Samsung WebCL Prototype APIs (3/10) OpenCL API Samsung WebCL Prototype API clCreateSampler WebCLSampler createSampler (WebCLContext context, cl_bool normalized_coords, cl_addressing_mode addressing_mode, cl_filter_mode filter_mode) clEnqueueCopyBuffer WebCLEvent enqueueCopyBuffer (WebCLQueue queue, WebCLBuffer src_buffer, WebCLBuffer dst_buffer, size_t src_offset, size_t dst_offset, size_t buffer_size, sequence<WebCLEvent>? event_wait_list); clEnqueueCopyBufferToImage WebCLEvent enqueueCopyBufferToImage (WebCLQueue queue, WebCLBuffer src_buffer, WebCLImage dst_image, size_t src_origin, sequence<size_t> dst_origin, sequence<size_t> region, size_t sequence<WebCLEvent>? event_wait_list) clEnqueueCopyBufferRect WebCLEvent enqueueCopyBufferRect (WebCLQueue queue, WebCLBuffer src_buffer, WebCLBuffer dst_buffer, sequence<size_t> src_origin, sequence<size_t> dst_origin, sequence<size_t> region, size_t src_row_pitch, size_t src_slice_pitch, size_t dst_row_pitch, size_t dst_slice_pitch, sequence<WebCLEvent>? event_wait_list) clEnqueueCopyImage WebCLEvent enqueueCopyImage (WebCLQueue queue, WebCLImage src_image, WebCLImage dst_image, sequence<size_t> src_origin, sequence<size_t> dst_origin, sequence<size_t> region, size_t sequence<WebCLEvent>? event_wait_list); 15
  • 16. Samsung WebCL Prototype APIs (4/10) OpenCL API Samsung WebCL Prototype API clEnqueueCopyImageToBuffer WebCLEvent enqueueCopyImageToBuffer (WebCLQueue queue, WebCLImage src_image, WebCLBuffer dst_buffer, sequence<size_t> src_origin, sequence<size_t> region, size_t dst_offset, size_t sequence<WebCLEvent>? event_wait_list) clEnqueueMapBuffer WebCLEvent enqueueMapBuffer (WebCLQueue queue, WebCLBuffer buffer, cl_bool blocking_map, cl_map_flags map_flags, size_t offset, size_t buffer_size, ArrayBuffer data, sequence<WebCLEvent>? event_wait_list) clEnqueueMapImage WebCLEvent enqueueMapImage (WebCLQueue queue, WebCLImage image, cl_bool blocking_map, cl_map_flags map_flags, sequence<size_t> origin, sequence<size_t> region, sequence<WebCLEvent>? event_wait_list) clEnqueueReadBuffer WebCLEvent enqueueReadBuffer(WebCLQueue queue, ebCLBuffer buffer, cl_bool blocking_read, size_t offset, size_t buffer_size, ArrayBuffer data, sequence<WebCLEvent>? event_wait_list); clEnqueueReadBufferRect WebCLEvent enqueueReadBufferRect (WebCLQueue queue, WebCLBuffer buffer, cl_bool blocking_read, sequence<size_t> buffer_origin, sequence<size_t> host_origin, sequence<size_t> region, size_t buffer_row_pitch, size_t buffer_slice_pitch, size_t host_row_pitch, size_t host_slice_pitch, ArrayBuffer data, sequence<WebCLEvent>? event_wait_list) clEnqueueReadImage WebCLEvent enqueueReadImage (WebCLQueue queue, WebCLImage image, cl_bool blocking_read, sequence<size_t> origin, sequence<size_t> region, 16 ImageData data, sequence<WebCLEvent>? event_wait_list)
  • 17. Samsung WebCL Prototype APIs (5/10) OpenCL API Samsung WebCL Prototype API clEnqueueNativeKernel WebCLEvent enqueueNativeKernel (WebCLQueue queue, UserFunc user_func, object args, /* TODO */ sequence<WebCLBuffer> mem_objects, sequence<WebCLEvent>? event_wait_list); clEnqueueNDRangeKernel 1.WebCLEvent enqueueNDRangeKernel (WebCLQueue queue, WebCLKernel kernel, cl_uint work_dim, size_t global_work_size, size_t local_work_size, sequence<WebCLEvent>? event_wait_list); 2. WebCLEvent enqueueNDRangeKernel (WebCLQueue queue, WebCLKernel kernel, cl_uint work_dim, sequence<size_t> global_work_size, sequence<size_t> local_work_size, sequence<WebCLEvent>? event_wait_list); 3. WebCLEvent enqueueNDRangeKernel (WebCLQueue queue, WebCLKernel kernel, cl_uint work_dim, sequence<size_t> global_work_offset, sequence<size_t> global_work_size, sequence<size_t> local_work_size, sequence<WebCLEvent>? event_wait_list); clEnqueueTask WebCLEvent enqueueTask (WebCLQueue queue, WebCLKernel kernel, sequence<WebCLEvent>? event_wait_list) clEnqueueUnmapMemObject WebCLEvent enqueueUnmapMemObject (WebCLQueue queue, WebCLMemObject memobj, ArrayBuffer data, sequence<WebCLEvent>? event_wait_list) 17
  • 18. Samsung WebCL Prototype APIs (6/10) OpenCL API Samsung WebCL Prototype API clEnqueueWriteBuffer WebCLEvent enqueueWriteBuffer (WebCLQueue queue, WebCLBuffer buffer, cl_bool blocking_write, size_t offset, size_t buffer_size, ArrayBuffer data, sequence<WebCLEvent>? event_wait_list) clEnqueueWriteBufferRect WebCLEvent enqueueWriteBufferRect (WebCLQueue queue, WebCLBuffer buffer, cl_bool blocking_write, sequence<size_t> buffer_origin, sequence<size_t> host_origin, sequence<size_t> region, size_t buffer_row_pitch, size_t buffer_slice_pitch, size_t host_row_pitch, size_t host_slice_pitch, ArrayBuffer data, sequence<WebCLEvent>? event_wait_list) clEnqueueWriteImage WebCLEvent enqueueWriteImage (WebCLQueue queue, WebCLImage image, cl_bool blocking_write, sequence<size_t> origin, sequence<size_t> region, ImageData data, sequence<WebCLEvent>? event_wait_list) clEnqueueBarrier void enqueueBarrier (WebCLQueue queue, WebCLEvent event) clEnqueueMarker void enqueueMarker (WebCLQueue queue, WebCLEvent event) clEnqueueWaitForEvents void enqueueWaitForEvents (WebCLQueue queue, sequence<WebCLEvent> event_list) 18
  • 19. Samsung WebCL Prototype APIs (7/10) OpenCL API Samsung WebCL Prototype APIs clFinish void finish (WebCLQueue queue, WebCLFinishCallback notify, object userData) clFlush void flush (WebCLQueue queue) clGetError GLenum getError () clGetPlatformIDs WebCLPlatformID[ ] getPlatformIDs () clGetDeviceIDs WebCLDeviceID[ ] getDeviceIDs (WebCLPlatformID platform, cl_device_type device_type) clGetDeviceInfo any getDeviceInfo (WebCLDeviceID device, cl_device_info param_name) clGetKernelInfo any getKernelInfo (WebCLKernel kernel, cl_kernel_info param_name) clGetProgramInfo any getProgramInfo (WebCLProgram program, cl_program_info param_name) clGetCommandQueueInfo any getCommandQueueInfo (WebCLQueue queue, cl_command_queue_info param_name) clGetProgramBuildInfo any getProgramBuildInfo (WebCLProgram program, WebCLDeviceID device, cl_program_build_info param_name) clGetContextInfo WebCLGetInfo getContextInfo (WebCLContext context, cl_context_info param_name) 19
  • 20. Samsung WebCL Prototype APIs (8/10) OpenCL API Samsung WebCL Prototype APIs clGetKernelWorkGroupInfo any getKernelWorkGroupInfo (WebCLKernel kernel, WebCLDeviceID device, cl_kernel_work_group_info param_name) clGetMemObjectInfo any getMemObjectInfo (WebCLMemObject memobj,cl_mem_info param_name) clGetImageInfo any getImageInfo (WebCLImage image, cl_image_info param_name) clGetSupportedImageFormats WebCLImageFormat[ ] getSupportedImageFormats (WebCLContext context, cl_mem_flags flags, cl_mem_object_type image_type); clGetEventInfo any getEventInfo (WebCLEvent event, cl_event_info param_name) clGetEventProfilingInfo any getEventProfilingInfo (WebCLEvent event, cl_profiling_info param_name) clgetPlatformInfo any getPlatformInfo (WebCLPlatformID platform, cl_platform_info param_name) clGetSamplerInfo any getSamplerInfo (WebCLSampler sampler, cl_sampler_info param_name) clReleaseCommandQueue void releaseCommandQueue (WebCLQueue queue) 20
  • 21. Samsung WebCL Prototype APIs (9/10) OpenCL API Samsung WebCL Prototype APIs clReleaseContext void releaseContext (WebCLContext context) clReleaseEvent void releaseEvent (WebCLEvent event) clReleaseKernel void releaseKernel (WebCLKernel kernel) clReleaseMemObject void releaseMemObject (WebCLMemObject memobj) clReleaseProgram void releaseProgram (WebCLProgram program); clReleaseSampler void releaseSampler (WebCLSamplerWebCLSampler) clRetainCommandQueue void retainCommandQueue (WebCLQueue queue) clRetainContext void retainContext (WebCLContext context) clRetainEvent void retainEvent (WebCLEvent event) clRetainKernel void retainKernel (WebCLKernel kernel) clRetainMemObject void retainMemObject (WebCLMemObject memobj) clRetainProgram void retainProgram (WebCLProgram program) clRetainSampler void retainSampler (WebCLSampler sampler) 21
  • 22. Samsung WebCL Prototype APIs (10/10) OpenCL API Samsung WebCL Prototype APIs clSetEventCallback void setEventCallback (WebCLEvent event, cl_int command_exec_callback_type,WebCLEventCallback notify, object userData) clSetKernelArg void setKernelArg (WebCLKernel kernel, cl_uint arg_index, object arg_value, cl_kernel_arg_type arg_type) void setKernelArgLocal(WebCLKernel kernel, cl_uint arg_index, size_t arg_size) clSetMemObjectDestructorCallback void setMemObjectDestructorCallback (WebCLMemObject memobj, WebCLMemDestructorCallback notify, object userData) clSetUserEventStatus void setUserEventStatus (WebCLEvent event, cl_int execution_status) clUnloadCompiler void unloadCompiler() clWaitForEvents void waitForEvents (sequence<WebCLEvent> event_list) clCreateFromGLBuffer WebCLBuffer createFromGLBuffer (WebCLContext context, cl_mem_flags flags, WebGLBuffer glBuffer) 22