**4. GPUs: A computing short term alternative**

GPUs are the product of the gaming industry development that was born in the 50' and started a continuous growing market on 80'. Video-games require to execute intensive computing algorithms to display the images, but unlike other applications such as seismic migration, the interaction with the user requires the execution in a very short time. Therefore, since the 90' have been developed specialized processors for this purpose. These processors have been called GPU, and they have been widely commercialized in video-game consoles and PC video acceleration cards, [37].

GPUs are specific application processors that reach high performance on the task that they were designed for, in the same way that the assembly line would outperform itself if it were dedicated to assembly a little range of vehicle types. This is achieved because the unnecessary machines can be eliminated and the free area is optimized. Likewise improve the availability, storage and handling of the parts(See figure 7).

**Figure 7.** GPU analogy

The task of a GPU is an iterative process that generates an image pixel by pixel (point by point) from some data and input parameters. This allows to process in parallel each output pixel and therefore GPUs architecture is based on a set of processors that perform the same algorithm for different output pixels. It is very similar to the sum of the contributions made in Kirchhoff migration, so in that way this architecture is a good option to try to speed up a migration process.

The memory organization is another relevant feature of the GPU architecture. This allows all the processors to access common information to all pixels that are being calculated and in the same way each processor can access particular pixel information.

Like our assembly line, the GPU task can be segmented in several stages, elementary operations or specific graphics processing instructions. Initially GPUs could only be used in graphical applications and although their performance in these tasks was far superior than a CPU, its computing power could only be used to carry out this task. For this reason the GPU manufacturers made a first contribution in order to make them capable to execute any algorithm; they make their devices more flexible and have become General Purpose GPU (GPGPU).

This make possible to exploit the computing power of these devices in any algorithm, but it was not an easy task for programmers. Making an application required a deep understanding of the GPGPUs instructions and architecture, so programmers were not very captivated. Therefore, the second contribution that definitely facilitated the use of these devices was the development in 2006 of programming models that does not require advanced knowledge on GPUs such as Compute Unified Device Architecture (CUDA).

GPGPUs are definitely an evolved form of a CPU. Their memory management is highly efficient, which has reduced the memory wall; and because of the number of processing cores on a single chip, they have been forced to reduce the working speed and to operate at the limit of the power wall. Its growth rate seems to continue stable and it promises to be in a mid-term with the technology that drives the high performance computing. But these three barriers are still present and this technology soon will be faced them.
