This chapter introduces the Graphics Processing Unit (GPU) architecture and all
the concepts needed to understand how GPUs work and can be used to speed up the
execution of some algorithms. First of all this chapter gives a brief history of
-the development of Graphics card until they can be used in order to make general
-purpose computation. Then the architecture of a GPU is illustrated. There are
-many fundamental differences between a GPU and a tradition processor. In order
-to benefit from the power of a GPU, a CUDA programmer needs to use threads. They
-have some particularities which enable the CUDA model to be efficient and
-scalable when some constraints are addressed.
+the development of Graphics card until they have been used in order to make
+general purpose computation. Then the architecture of a GPU is
+illustrated. There are many fundamental differences between a GPU and a
+tradition processor. In order to benefit from the power of a GPU, a CUDA
+programmer needs to use threads. They have some particularities which enable the
+CUDA model to be efficient and scalable when some constraints are addressed.
produce high quality graphics faster than classical Central Processing Units
(CPU) and to alleviate CPU from this task. In general, display tasks are very
repetitive and very specific. Hence, some manufacturers have produced more and
-more sofisticated video cards, providing 2D accelerations then 3D accelerations,
+more sophisticated video cards, providing 2D accelerations then 3D accelerations,
then some light transforms. Video cards own their own memory to perform their
-computation. For at least two dedaces, every personnal computer has had a video
+computation. For at least two decades, every personal computer has had a video
card which is simple for desktop computers or which provides many accelerations
for game and/or graphic oriented computers. In the latter case, graphic cards
may be more expensive than a CPU.
-Since 2000, video cards have allowed users to apply arithmetics operations
+Since 2000, video cards have allowed users to apply arithmetic operations
simultaneously on a sequence of pixels, also later called stream processing. In
this case, the information of the pixels (color, location and other information) are
combined in order to produce a pixel color that can be displayed on a screen.
have been proposed. The other well-known alternative is OpenCL which aims at
proposing an alternative to Cuda and which is multi-platform and portable. This
is a great advantage since it is even possible to execute OpenCL programs on
-traditionnal CPUs. The main drawback is that it is less tight with the hardware
+traditional CPUs. The main drawback is that it is less tight with the hardware
and consequently sometimes provides less efficient programs. Moreover, Cuda
benefits from more mature compilation and optimization procedures. Other less
known environments have been proposed, but most of them have been stopped, for
-example we can cite: FireStream by ATI which is not maintened anymore and
+example we can cite: FireStream by ATI which is not maintained anymore and
replaced by OpenCL, BrookGPU by Standford University~\cite{ch1:Buck:2004:BGS}.
Another environment based on pragma (insertion of pragma directives inside the
code to help the compiler to generate efficient code) is call OpenACC. For a
consists in executing a small part of code in advance even if later this work
reveals itself to be useless. On the contrary, GPUs do not have low latency
memory. In comparison GPUs have small cache memories. Nevertheless the
-architecture of GPUs is optimized for throughtput computation and it takes into
+architecture of GPUs is optimized for throughput computation and it takes into
account the memory latency.
\section{Kinds of parallelism}
-Many kinds of parallelism are avaible according to the type of hardware.
+Many kinds of parallelism are amiable according to the type of hardware.
Roughly speaking, there are three classes of parallelism: instruction-level
parallelism, data parallelism and task parallelism.
Multiple Data (SIMD) architecture. This is the kind of parallelism provided by
GPUs.
-Taks parallelism is the common parallism achieved out on clusters and grids and
+Task parallelism is the common parallelism achieved out on clusters and grids and
high performance architectures where different tasks are executed by different
computing units.
is no context switching as in CPUs and each thread has its own registers. In
practice, threads are executed by SM and are gathered into groups of 32
threads. Those groups are called ``warps''. Each SM alternatively executes
-``active warps'' and warps becoming temporarilly inactive due to waiting of data
+``active warps'' and warps becoming temporarily inactive due to waiting of data
(as shown in Figure~\ref{ch1:fig:latency_throughput}).
The key to scalability in the CUDA model is the use of a huge number of threads.