Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OpenGL vs. OpenCL, which to choose and why?

What features make OpenCL unique to choose over OpenGL with GLSL for calculations? Despite the graphic related terminology and inpractical datatypes, is there any real caveat to OpenGL?

For example, parallel function evaluation can be done by rendering a to a texture using other textures. Reducing operations can be done by iteratively render to smaller and smaller textures. On the other hand, random write access is not possible in any efficient manner (the only way to do is rendering triangles by texture driven vertex data). Is this possible with OpenCL? What else is possible not possible with OpenGL?

like image 964
dronus Avatar asked Oct 26 '11 18:10

dronus


People also ask

Is OpenCL and OpenGL the same?

Key difference between OpenGL vs OpenCLOpenGL enables programming to do graphical operations and OpenCL allows programming to do the computation in multiple processors. Applications: OpenGL is applied to make UI animations to manage embedded video or used to build vector graphics.

What is special about using OpenCL OpenGL interoperability?

What is the advantage of using OpenCL / OpenGL interoperability? It is fast. You take advantage of GPU parallelism and the data never leaves GPU memory. A sphere is able to be represented as 4 numbers.

Is OpenCL or CUDA better?

The general consensus is that if your app of choice supports both CUDA and OpenCL, go with CUDA as it will generate better performance results. The main reason for this is that Nvidia provide top quality support to app developers who choose to use CUDA acceleration, therefore the integration is always fantastic.

Is CUDA faster than OpenGL?

If you have an Nvidia card, then use CUDA. It's considered faster than OpenCL much of the time.


2 Answers

OpenCL is created specifically for computing. When you do scientific computing using OpenGL you always have to think about how to map your computing problem to the graphics context (i.e. talk in terms of textures and geometric primitives like triangles etc.) in order to get your computation going.

In OpenCL you just formulate you computation with a calculation kernel on a memory buffer and you are good to go. This is actually a BIG win (saying that from a perspective of having thought through and implemented both variants).

The memory access patterns are though the same (your calculation still is happening on a GPU - but GPUs are getting more and more flexible these days).

But what else would you expect than using more than a dozen parallel "CPUs" without breaking your head about how to translate - e.g. (silly example) Fourier to Triangles and Quads...?

like image 196
cli_hlt Avatar answered Oct 31 '22 06:10

cli_hlt


Something that hasn't been mentioned in any answers so far has been speed of execution. If your algorithm can be expressed in OpenGL graphics (e.g. no scattered writes, no local memory, no workgroups, etc.) it will very often run faster than an OpenCL counterpart. My specific experience of this has been doing image filter (gather) kernels across AMD, nVidia, IMG and Qualcomm GPUs. The OpenGL implementations invariably run faster even after hardcore OpenCL kernel optimization. (aside: I suspect this is due to years of hardware and drivers being specifically tuned to graphics orientated workloads.)

My advice would be that if your compute program feels like it maps nicely to the graphics domain then use OpenGL. If not, OpenCL is more general and simpler to express compute problems.

Another point to mention (or to ask) is whether you are writing as a hobbyist (i.e. for yourself) or commercially (i.e. for distribution to others). While OpenGL is supported pretty much everywhere, OpenCL is totally lacking support on mobile devices and, imho, is highly unlikely to appear on Android or iOS in the next few years. If wide cross platform compatibility from a single code base is a goal then OpenGL may be forced upon you.

like image 25
user2746401 Avatar answered Oct 31 '22 08:10

user2746401