  Since the first idea of using GPU to general purpose computing, things have
evolved over the years and now there are several approaches to GPU programming.
GPU computing practically began with the introduction of CUDA (Compute Unified
Device Architecture) by NVIDIA and Stream by AMD. These are APIs designed by
the GPU vendors to be used together with the hardware that they provide. A new
emerging standard, OpenCL (Open Computing Language) tries to unify different
GPU general computing API implementations and provides a framework for writing
programs executed across heterogeneous platforms consisting of both CPUs and
GPUs. OpenCL provides parallel computing using task-based and data-based
parallelism. In this paper we will focus on the CUDA parallel computing
architecture and programming model introduced by NVIDIA. We will present the
benefits of the CUDA programming model. We will also compare the two main
approaches, CUDA and AMD APP (STREAM) and the new framwork, OpenCL that tries
to unify the GPGPU computing models.
