jueves, 2 de febrero de 2012

AMD APP and OpenCL

For this week I decided to do research on the Internet for other alternatives for GPU Computing. This is because I don't own any computer with a Nvidia graphics card, and of course, I can't run CUDA without it. The best I could do (and probably will do) is to compile code in my own computer, and ask somebody else of my team with a supported graphics card to run it. This would be somewhat problematic, so that is why searched for something similar to CUDA.

I own a laptop and a PC, and both of them have ATI graphics card, so my first idea was to look for something similar to CUDA from AMD. The first thing I found was ATI Stream which was upgraded to AMD APP (Accelerated Parallel Processing). The AMD APP SDK supports OpenCL, which is open and royalty-free programming framework for general-purpose computations on heterogeneous systems.

APP Technology

AMD APP technology is a set of advanced hardware and software technologies that enable AMD graphics processing cores (GPU), working in concert with the systems x86 cores (CPU), to accelerate many applications beyond just graphics. The AMD APP SDK allows you to develop your applications in a high-level language, OpenCL (Open Computing Language).

To see if your ATI graphics card is compatible with the SDK, you can check this link:

OpenCL


OpenCL is the first open and royalty-free programming standard for general-purpose computations on heterogeneous systems. OpenCL allows programmers to preserve their expensive source code investment and easily target both multi-core CPUs and the latest GPUs, such as those from AMD and Intel.
Developed in an open standards committee with representatives from major industry vendors, OpenCL gives users what they have been demanding: a cross-vendor, non-proprietary solution for accelerating their applications on their CPU and GPU cores.

Differences between CUDA and OpenCL:

Multiple comparisons have been drawn between CUDA and OpenCL since its inception. They both draw the same conclusions: if the OpenCL implementation is correctly tweaked to suit the target architecture, it performs no worse than CUDA. Since the key feature of OpenCL is portability (via its abstracted memory and execution model) the programmer is not able to directly use GPU specific technologies unlike CUDA. CUDA is more acutely aware of the platform upon which it will be executing, as it is limited to Nvidia hardware, and therefore provides more mature compiler optimisations and execution techniques (such as the use of texture memory which cannot be done in OpenCL). 
A list of some Pros and Cons between CUDA and OpenCL:

So I think I find CUDA be a better option in parallel computing, with the only bad drawback since it is only available to Nvidia GPUs, also the overall performance and documentation seems to be more complete in CUDA, because they just have to focus in their own devices. OpenCL in the other hand works with a more open variety, being Intel, Nvidia, and ATI devices supported.

References:
(For information about CUDA, Isaias made a good post about it)

1 comentario: