This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Anderstand OpenCl / OpenGl Es

Hi 

I have a newbie question

What are the main differencies between OpenCl and OpenGl Es ?

In which case do you use the first or the second ?

 

May you explain me shortly ?

Thanks & regards,

  • OpenGL, including ES, is targeted at Graphics workloads, and contains a lot of domain-specific terminology and API entrypoints, to drive a conceptual graphics pipeline, as shown here (bit low res, sorry) http://3.bp.blogspot.com/-QA65xVes8nI/T_mDvwo6_8I/AAAAAAAABdw/mJjCdlJCR8I/s1600/pipeline1.png. OpenCL is far more generic, and is designed to allow more general-purpose computation to be performed on the same underlying hardware, without having to shoehorn your specific problem into the OpenGL pipeline.

    Hth,

    Chris

  • The two are really very similar in capability, although not identical. In general OpenCL has more "features", the main ones being:

    • 8-bit integer, 64-bit integer, and 64-bit float support.
    • Large "built-in function library" for all of the data types up to vec8 vector length (in general OpenGL ES caps out at vec4, and has a less rich function library).
    • Arbitrary pointers.
    • More complex memory model (not that it actually makes much difference on Mali - for us local and global memory are treated the same).
    • Multi-threaded client API, so more usable from parallelized CPU applications.

    Features are not always a good thing - pointers are hard to optimize for, for example, and some things which OpenGL ES compute does "for free" from the application point of view have to be explicitly coded and controlled by the application for OpenCL. Chris hit on the main difference though - OpenGL ES compute "just works" if you are trying to fit into a graphics application (you can interoperate OpenCL with OpenGL ES, but it's less transparent), and OpenCL means you're not restricted by OpenGL ES if you only want to do the compute part.

    HTH,
    Pete

  • To help lessen confusion, Chris mentioned the Graphics aspect of OpenGL ES, whereas Pete mentioned the fact that OpeGL ES also supports Compute functionality as of version 3.1.

    OpenCL is a much more comprehensive Compute API, but does not do Graphics.

    In summary, you use OpenGL ES for rendering graphics, and OpenCL to do a lot of Compute workloads, however with GLES 3.1, you can now do some compute workloads within the GLES API, although it is not as extensive.