]> AND Private Git Repository - book_gpu.git/commitdiff
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
new
authorcouturie <couturie@extinction>
Fri, 9 Aug 2013 06:27:54 +0000 (08:27 +0200)
committercouturie <couturie@extinction>
Fri, 9 Aug 2013 06:27:54 +0000 (08:27 +0200)
BookGPU/Chapters/chapter1/ch1.tex
BookGPU/Chapters/chapter10/ch10.tex
BookGPU/Chapters/chapter11/ch11.tex
BookGPU/Chapters/chapter2/ch2.tex
BookGPU/Chapters/chapter5/ch5.tex
BookGPU/Chapters/chapter6/PartieAsync.tex

index e3cbd81fd7cecfc0e2044fe4f54492739abc7ce9..36820fd978b2221f032eafa6ebb2f14a49d5c61e 100755 (executable)
@@ -5,7 +5,6 @@
 \label{chapter1}
 
 \section{Introduction}\label{ch1:intro}
-``test"  "test" ``test''
 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
index 0dd8d21a782b1bda36ace90f3c278d7eeb0fe1c1..37a8ba17bc8ccbdee779eba59480327f14f44e63 100644 (file)
@@ -297,7 +297,7 @@ and $\bs\beta = \mbf{N^T} \mbf{(B^{-1})^T} \mbf{d}$
 
 \subsubsection*{Choice of the leaving variable}
 The stability and robustness of the algorithm depend considerably on the choice of the leaving variable. With respect to this, the \textit{expand} method~\cite{GILL1989} proves to be very useful in the sense that it helps to avoid cycles and reduces the risks of encountering numerical instabilities. This method consists of two steps of complexity $\mathcal{O}(m)$. In the first step, a small perturbation is applied to the bounds of the variables to prevent stalling of the objective value, thus avoiding cycles. These perturbed bounds are then used to determine the greatest gain on the entering variable imposed by the most constraining basic variable. The second phase uses the original bounds to define the basic variable offering the gain closest to the one of the first phase. This variable will then be selected for leaving the basis.
-
+\pagebreak
 \section{Branch-and-bound\index{branch-and-bound} algorithm}
 \label{chXXX:sec:bnb}
 \subsection{Integer linear programming\index{integer linear programming}}
index a374345980f69bce60bbf41b5eb879c0ace6d4e5..0aa6e8cc8aec787a1721a3fdd4e4b66db81ba197 100644 (file)
@@ -116,8 +116,8 @@ It is almost straightforward to parallelize this scheme for GPUs, by processing
 At the spline evaluation stage we need to compute $s(z_k)$ for a sequence of query values ${z_k}, k=1,\ldots,K$. For each $z_k$ we locate the interval $[t_i,t_{i+1}]$ containing $z_k$, using the bisection algorithm presented in Listing \ref{ch11:algeval}, and then apply the appropriate coefficients of the quadratic function. This is also  done in parallel.
 The bisection algorithm could be implemented using texture memory (to cache the array \texttt{z}), but this is not shown in Listing \ref{ch11:algeval}.
 
-%\pagebreak
-\lstinputlisting[label=ch11:algcoef,caption=Implementation of the kernel for calculating spline knots and coefficients; function fmax is used to avoid division by zero for data with coinciding abscissae.]{Chapters/chapter11/code1.cu}
+\pagebreak
+\lstinputlisting[label=ch11:algcoef,caption=implementation of the kernel for calculating spline knots and coefficients; function fmax is used to avoid division by zero for data with coinciding abscissae.]{Chapters/chapter11/code1.cu}
 
 
 %% \begin{figure}[!hp]
index 68c309a5be21610517eea9c11f5b45b26ac209a0..75be84bc7e690206142d347d57a3eacdca84f642 100755 (executable)
@@ -26,7 +26,7 @@ As GPUs have  their own memory, the first step consists  of allocating memory on
 the   GPU.   A   call   to  \texttt{cudaMalloc}\index{CUDA functions!cudaMalloc}
 allocates memory  on the GPU.  The  second parameter represents the  size of the
 allocated variables, this size is expressed in bits.
-
+\pagebreak
 \lstinputlisting[label=ch2:lst:ex1,caption=simple example]{Chapters/chapter2/ex1.cu}
 
 
index bdfad6aed804e87a6cd4f6ac19831b4695207566..49cc9c2c30e6c11bceb6e580b9919995e11efea2 100644 (file)
@@ -144,7 +144,7 @@ c_{20} & c_{21} & c_{22} \\
 Matrix components precompute these compact stencil coefficients and provides member functions that computes the finite difference approximation of input vectors. Unit scaled coefficients (assuming grid spacing is one) are computed and stored to be accessible via both CPU and GPU memory. On the GPU, the constant memory space is used for faster memory access~\cite{ch5:cudaguide}. In order to apply a stencil on a non unit-spaced grid, with grid space $\Delta x$, the scale factor $1/(\Delta x)^q$ will have to be multiplied by the finite difference sum, i.e., $(c_{00}u_0 + c_{01}u_1 + c_{02}u_2)/(\Delta x)^q \approx u^{(q)}_0$ as in the first row of \eqref{ch5:eq:stencilmatrix}.
 
 Setting up a two-dimensional grid of size $N_x \times N_y$ in the unit square and computing the first derivative hereof is illustrated in Listing~\ref{ch5:lst:stencil}. The grid is a vector component, derived from the vector class. It is by default treated as a device object and memory is automatically allocated on the device to fit the grid size. The finite difference approximation as in \eqref{ch5:eq:fdstencil}, is performed via a CUDA kernel behind the scenes during the calls to \texttt{mult} and \texttt{diff\_x}, utilizing the memory hierarchy as the CUDA guidelines prescribe~\cite{ch5:cudaguide,ch5:cudapractice}. To increase developer productivity, kernel launch configurations have default settings, based on CUDA guidelines, principles, and experiences from performance testings, such that the user does not have to explicitly specify them. For problem-specific finite difference approximations, where the built-in stencil operators are insufficient, a pointer to the coefficient matrix \eqref{ch5:eq:stencilcoeffs} can be accessed as demonstrated in Listing \ref{ch5:lst:stencil} and passed to customized kernels.
-
+\pagebreak
 \lstinputlisting[label=ch5:lst:stencil,caption={two-dimensional finite difference stencil example: computing the first derivative using five points ($\alpha=\beta=2$) per dimension, a total nine-point stencil}]{Chapters/chapter5/code/ex2.cu}
 
 In the following sections we demonstrate how to go from an initial value problem (IVP) or a boundary value problem (BVP) to a working application solver by combining existing library components along with new custom-tailored components. We also demonstrate how to apply spatial and temporal domain decomposition strategies that can make existing solvers take advantage of systems equipped with multiple GPUs. Next section demonstrates how to rapidly assemble a PDE solver using library components.
index 3f4a5394d1774fe52f4086dc4955e9590a8aba50..1623f8c721bbdaa824950c04b7257ccc65ad74e3 100644 (file)
@@ -648,7 +648,7 @@ while(!Finished){
       case tagState: // Management of local state messages
        // Actual reception of the message
        MPI_Recv(&recvdState, 1, MPI_CHAR, status.MPI_SOURCE, tagState, MPI_COMM_WORLD, &status); 
-       // Updates of numbers of stabilized nodes and received state msgs 
+       // Updates of numbers of stabilized nodes and recvd state msgs 
        nbOtherCVs += recvdState;
        nbStateMsg++;
        // Unlocking of the computing thread when states of all other