While GPUs have been originally designed to provide real-time rendered
images and support games, their programmability makes them appropriate
also for general purpose computations. Before the emergence of GPGPU
API-s, GPUs had to be programmed via shader APIs, which required the
transformation of the algorithm to an incremental image synthesis
method. The latest GPGPU APIs, like CUDA or OpenCL, do not expect the
programmer to carry out this conversion and present the graphics card as
a collection of multiprocessors where each is a SIMD vector processor.
The price of this general programming model is that we cannot access the
fixed function units. In this talk we review both the shader API and the
GPGPU interfaces and present solution techniques for image processing
applications, like linear and non-linear filtering, tone mapping, and
histogram generation. We also show that the same approach is also
appropriate for solving physical problems, including fluid and n-body
simulations.
|