From ecfe62744ebf64c0cf361f37a3662eb08492a4ea Mon Sep 17 00:00:00 2001 From: couturie Date: Mon, 5 Nov 2012 06:36:18 +0100 Subject: [PATCH 1/1] chapitre 11 with embedded fonts --- BookGPU/Chapters/chapter11/ch11.tex | 19 ++++++++++++------ BookGPU/Chapters/chapter11/gregory1_plot1.pdf | Bin 13461 -> 16570 bytes .../Chapters/chapter11/gregory1_plot2_b.pdf | Bin 11921 -> 15485 bytes 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/BookGPU/Chapters/chapter11/ch11.tex b/BookGPU/Chapters/chapter11/ch11.tex index 8007138..b5fff14 100644 --- a/BookGPU/Chapters/chapter11/ch11.tex +++ b/BookGPU/Chapters/chapter11/ch11.tex @@ -7,21 +7,22 @@ \section{Introduction} \label{ch11:Introduction} -Monotonicity preserving interpolation and approximation have received substantial attention in the last thirty years because of their numerous applications in computer aided design, statistics and machine learning \cite{Dierckx1995_book,Kvasov2000_book,deboor2001_book}. Constrained splines are particularly popular because of their flexibility in modelling different geometrical shapes, sound theoretical properties and availability of numerically stable algorithms \cite{Dierckx1995_book,Schumaker1981_book,deboor2001_book}. +Monotonicity preserving interpolation and approximation have received substantial attention in the last thirty years because of their numerous applications in computer aided design, statistics and machine learning \cite{Dierckx1995_book,Kvasov2000_book,deboor2001_book}. Constrained splines \index{spline} \index{constrained splines} \index{monotonicity} are particularly popular because of their flexibility in modelling different geometrical shapes, sound theoretical properties and availability of numerically stable algorithms \cite{Dierckx1995_book,Schumaker1981_book,deboor2001_book}. % It is surprising though that few parallel spline algorithms are available. In this work we examine parallelisation and adaptation for GPUs of a few algorithms of monotone spline interpolation and data smoothing, which arose in the context of estimating probability distributions. Estimating cumulative probability distribution functions (cdf) from data is quite common in data analysis. In our particular case we faced this problem in the context of partitioning univariate data with the purpose of efficient sorting. It was required to partition large data sets into chunks of approximately equal size, so that these chunks could be sorted independently and subsequently concatenated. In order to do that, empirical cdf of the data was used to find the quantiles, which served to partition the data. Cdf was estimated from the data based on a number of pairs $(x_i,y_i), i=1,\ldots,n$, where $y_i$ was the proportion of data no larger than $x_i$. As data could come from a variety of distributions, a distribution-free nonparametric fitting procedure was required to interpolate the above pairs. Needless to say that the whole process was aimed at GPU, and hence the use of CPU for invoking serial algorithms had to be minimised. -The above mentioned application is one of many examples (e.g. mass spectrography \cite{Kearsley_2006}, global warming data \cite{Yohai} and so on) where univariate data needs to be fitted by monotonicity preserving interpolants. Of course, cdf is a monotone increasing function, whose inverse, called quantile function, can be used to calculate the quantiles. Spline interpolation would be the most suitable nonparametric method to fit the cdf, except that polynomial splines do not preserve monotonicity of the data, as illustrated on Figure \ref{ch11:fig1}. +The above mentioned application is one of many examples (e.g. mass spectrography \cite{Kearsley_2006}, global warming data \cite{Yohai} and so on) where univariate data needs to be fitted by monotonicity preserving interpolants. Of course, cdf is a monotone increasing function, whose inverse, called quantile function, can be used to calculate the quantiles. Spline interpolation would be the most suitable nonparametric method to fit the cdf, except that polynomial splines do not preserve monotonicity of the data, as illustrated on Figure \ref{ch11:fig1}. The failure of splines to preserve monotonicity has prompted fundamental research in this area since 1960s. One of the first methods to remedy this problem were splines in tension by Schweikert \cite{Sch}, where a tension parameter controlled the shape of exponential splines \cite{Spath1969}. Later on several monotonicity preserving polynomial spline algorithms were proposed \cite{Schumaker1983,PasRoul1977,AndElf1987,Andersson1991_JAT,McAllister1981_ACM,PasRoul1977}. These algorithms typically rely on introducing additional spline knots between the abscissae of the data. Algorithmic developments are active to this day, see for example \cite{Kvasov2000_book,Abbas2011}. -When in addition to the pairs $(x_i, y_i)$ the slopes of the function are available, i.e., the data comes in triples $(x_i, y_i, p_i)$, the interpolation problem is called Hermite, and the Hermite splines are used. However, even when the sequence $y_i$ is increasing and the slopes $p_i$ are non-negative, cubic Hermite splines may still fail to be monotone, as illustrated in Figure \ref{ch11:fig2}. Thus monotone Hermite splines are needed \cite{Gregory1982}. +When in addition to the pairs $(x_i, y_i)$ the slopes of the function are available, i.e., the data comes in triples $(x_i, y_i, p_i)$, the interpolation problem is called Hermite, and the Hermite splines are used. However, even when the sequence $y_i$ is increasing and the slopes $p_i$ are non-negative, cubic Hermite splines may still fail to be monotone, as illustrated in Figure \ref{ch11:fig2}. Thus monotone Hermite splines are needed \cite{Gregory1982}. \index{Hermite spline} Another issue with monotone approximation is noisy data. In this case, inaccuracies in the data make the input sequence $y_i$ itself non-monotone, and hence monotone spline interpolation algorithms will fail. Monotone spline smoothing algorithms are available, e.g. \cite{Andersson1991_JAT,Elfving1989_NM}. Such algorithms are based on solving a quadratic (or another convex) programming problem numerically, and have not been yet adapted to parallel processing. In this work we examined several monotone spline fitting algorithms, and selected the ones that we believe are most suitable for parallelisation on GPUs. We paid attention to numerical efficiency in terms of numerical calculations and memory access pattern, and favoured one-pass algorithms. We also looked at smoothing noisy data, and developed a parallel version of the Minimum Lower Sets algorithm for isotonic regression problem \cite{Best1990, Robertson_book}. +\index{isotone regression} The rest of the chapter is organised as follows. Section \ref{ch11:splines} discusses monotone spline interpolation methods and presents two parallel algorithms. Section \ref{ch11:smoothing} deals with smoothing problem. It presents isotonic regression problem and discusses the Pool Adjacent Violators (PAV) and Minimum Lower Sets (MLS) algorithms. Combined with monotone spline interpolation, the parallel MLS method makes it possible to build a monotone spline approximation to noisy data entirely on GPU. Section \ref{ch11:conc} concludes. @@ -41,6 +42,7 @@ The rest of the chapter is organised as follows. Section \ref{ch11:splines} disc \section{Monotone splines} \label{ch11:splines} +\index{constrained splines} \index{monotonicity} Splines are piecewise continuous functions very popular in numerical approximation and computer aided design \cite{deboor2001_book,Dierckx1995_book}. An example of a spline is broken line interpolation. Typically polynomial splines are used, and the first (and often second) derivatives of the polynomial pieces are required to match at the knots. The knots of the splines are usually the abscissae of the input data, although this condition is not always required (e.g., splines with free knots \cite{Jupp_1978,Dierckx1995_book,Beliakov2003_amc}). Polynomial splines are often represented in the B-spline basis, in which case their coefficients are computed from the input data by solving a banded system of linear equations \cite{Lyche1973, Dierckx1995_book, deboor2001_book}. Tridiagonal systems arise in cubic spline interpolation, while pentadiagonal systems arise in cubic spline smoothing \cite{Lyche1973}. Spline possess important extremal properties \cite{Holladay1957,Lyche1973}, in particular splines of degree $2m-1$ are the most ``smooth" functions that interpolate (or approximate, in the least squares sense) the data. The smoothness term is Tihkonov regularisation functional, the $L_2$ norm of the $m$-th derivative of the interpolant \cite{Lyche1973}. @@ -105,7 +107,7 @@ It is almost straightforward to parallelise 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 bisection algorithm presented in Figure \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 Figure \ref{ch11:algeval}. -\lstinputlisting[label=ch11:algcoef,caption=Implementation of the kernel for calcuating spline knots and coefficients. Function fmax is used to avoid division by zero for data with coinciding abscissae.]{Chapters/chapter11/code1.cu} +\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] @@ -287,7 +289,7 @@ The bisection algorithm could be implemented using texture memory (to cache the \lstinputlisting[label=ch11:algeval,caption=Implementation of the spline evaluation algorithm for GPU.]{Chapters/chapter11/code3.cu} \subsection{Monotone Hermite splines} - +\index{Hermite splines} \index{monotonicity} In this section, in addition to the points $(x_i,y_i)$ we have the slopes $p_i$, and hence we consider monotone Hermite interpolation. In our motivating application of cdf estimation, the values $p_i$ are easily obtained together with $y_i$, and their use may help to build a more accurate interpolant. Of course, for monotone non-decreasing functions we must have $p_i\geq 0$. However this does not guarantee that the spline interpolant is monotone, as can be seen in Figure \ref{ch11:fig2}. Fritsch and Carlson \cite{Fritsch1980} show that non-negative $p_i$ is not a sufficient condition to guarantee monotonicity, and design a process for modification of derivatives, so that the necessary and sufficient conditions for monotonicity of a piecewise cubic are met. Hence the values $p_i$ are not matched exactly. In contrast, Gregory and Delbourgo \cite{Gregory1982} design piecewise rational quadratic spline, for which the non-negativity of $p_i$ is both necessary and sufficient condition. @@ -323,16 +325,21 @@ It is clear that Gregory and Delbourgo's Hermite interpolant is trivially paral \section{Smoothing noisy data via parallel isotone regression} \label{ch11:smoothing} + Inaccuracies in the data are common in practice, and need to be accounted for during spline approximation process. Smoothing polynomial splines were presented in \cite{Lyche1973}, where the data are fitted in the least squares sense while also minimising the $L_2$ norm of the $m-$th derivative of the spline. Monotone smoothing splines were dealt with in several works, in particular we mention \cite{Andersson1991_JAT,Elfving1989_NM}. The presented algorithms rely on solving quadratic programming problems. Monotone approximating splines with fixed knots distinct form the data have been presented in \cite{Beliakov2000_ata}, where an instance of a quadrating programming problem is solved as well. +\index{isotone regression} \index{monotonicity} Another approach consists in monotonising the data, so that the sequence $y_i$ becomes monotone. This approach is known as isotone regression \cite{Best1990, Robertson_book}. It is different from monotone spline smoothing, as the regularisation term controlling the $L_2$ norm of the $m-$the derivative is not taken into account. Usually the data is monotonised by minimising the squared differences to the inputs. It becomes a quadratic programming problem, usually solved by active sets methods \cite{Best1990}. A popular PAV algorithm (PAVA) is one method that provides efficient numerical solution. +\index{PAV algorithm} PAVA consists of the following steps. The sequence ${y_i}$ is processed form the start. If violation of monotonicity $y_i>y_{i+1}$ is found, both values $y_i$ and $y_{i+1}$ are replaced with their average $y'_i$, and both values form a block. Since the new value $y'_i$ is smaller than $y_i$, monotonicity may become violated with respect to the datum $y_{i-1}$. If this is the case, the $i-1$st, $i$th and $i+1$st data are merged into a block and their values are replaced with their average. We continue back-average as needed to get monotonicity. Various serial implementations of the PAVA exist. It is noted \cite{Kearsley_2006} that in PAVA, which is based on the ideas from convex analysis, a decomposition theorem holds, namely performing PAVA separately on two contiguous subsets of data, and then performing PAVA on the result produces isotonic regression on the whole data set. Thus isotonic regression is parallelisable, and divide-and-conquer approach, decomposing the original problem into two smaller subproblems, can be implemented on multiple processors. However, to our knowledge, no parallel PAVA for many-core systems such as GPUs exist. -Another approach to isotonic regression is called the Minimum Lower Sets algorithm (MLS) \cite{Best1990, Robertson_book}. It provides the same solution as the PAVA, but works differently. For each datum (or block), MLS selects the largest contiguous block of subsequent data with the smallest average. If this average is smaller than that of the preceding block, the blocks are merged, and the data in the block are replaced with their average. MLS is also an active set method \cite{Best1990}, but its complexity is $O(n^2)$ as opposed to $O(n)$ of the PAVA, and of another active set algorithm proposed in \cite{Best1990} under the name Algorithm A. +\index{MLS algorithm} \index{Minimum Lower Sets} +Another approach to isotonic regression is called the Minimum Lower Sets algorithm (MLS) +\cite{Best1990, Robertson_book}. It provides the same solution as the PAVA, but works differently. For each datum (or block), MLS selects the largest contiguous block of subsequent data with the smallest average. If this average is smaller than that of the preceding block, the blocks are merged, and the data in the block are replaced with their average. MLS is also an active set method \cite{Best1990}, but its complexity is $O(n^2)$ as opposed to $O(n)$ of the PAVA, and of another active set algorithm proposed in \cite{Best1990} under the name Algorithm A. In terms of GPU parallelisation, neither PAVA nor Algorithm A appear to be suitable, as the techniques that achieve $O(n)$ complexity are inheritably serial. In this work we focused on parallelising MLS. First, we precompute the values diff --git a/BookGPU/Chapters/chapter11/gregory1_plot1.pdf b/BookGPU/Chapters/chapter11/gregory1_plot1.pdf index 92fe92bce17b01730176a541a098c4e5ea6b1f29..e39b1d65dc69197fb31c18f426c0a0f3a6aeec25 100644 GIT binary patch literal 16570 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 literal 13461 zcmb8WbySpH_djeQH=zg!BT9F7hbRm&G((KU&>;dt%}^4Gq`(M6NQVp{AR)~lA_$B~ zw-QQsC`i}u8lO9!=l-tuk9XFZv#$NwarWM4pS8|)t$jH3z^Vcwg5sncPiLRbJ?(os zWbR2S!Ys_}X7h+tUY=A)+0)({>Ewn0TO;k6xxuoc!Xly~!Xi?@C?z7vLn@^0X7~Te zGju|_09sIHHBW2zhfcO$%(^I~I|>P?>3O=@p=|9v30zS@5eY#N0Q^0f8v)}Xy?d9` z9$`mtL-cQVn1u}e-0hi#l&z80E^dy@LVDJY_Fl|lfB=;F9|fuZqd<@&NPF5NkbjB` zDZ3$%0O`dn{aalKYVYNS^0Wo)iT}$ULEx`^XxSqikq?<=BqXJng;bqfkU$7RsxClw z!1lIocJ>6ny^uiCTuFU1HZryQP zZv5C@S!n)5A3#q*LKOUK~TwZi7p zMwtKU$HJ4Ng~QvMgU+2@-92Zv+XXR|x!>s<|r`v*V2Bi7(SCw2R0)V1#t1?5ihL66aj)?Ln@ zw@~jDz8&KO8ew0zGZq``n11dy%*Q3Y{pNJ`qr9%te!{tI>y$01X}8SL&*Xd4Qt!f# z!px1TCbQX^Ukir~yVLl!Dz`xL+y49uLl}*dl!E{Z=jYkf*?r~NJC?zBUuNcI9`{In zA82q3@+$jfd2_RIdy)7+aoX!`!Ouqq9aq2lLAGJ=d~X=zDLb+{vp06Rp-pBC52EXc3FZDN{K0#-l`_;br zCoqR`#j*lCe*|r=twiSL7gevA$W6;&TRba4;V!@{;zG5WD%hwny$y$1*7x?lvkIQc7_e9na z8mHcf-uIjFv&Pwh4CC_0vMRUxvZT+0)8gw#$g0Pc9W7s~v#E_A=en9{r|G62udmS- zjj10yc{xrz8uT5XRJnR~uT;%6x94`W+4cv=2ExoSVbP6nq? z$)%bRgRNagK(MOZ3;Uj}z4Y#}KNzqm!$B9ywijUi)DZSC)driXLGt>TMI{}-HJGhEIG9QXBZ^*){uE?vg zz`yK;@zu%$BwK9&TB)I8fy~jxZwfB0W^GBo0b4>wJb@E#(-2(Z{zazt z@UZ)aEl9)f66Gx_k?iB{8&M%F)I`eMi(c6vsJ?qg^5brm7D*v6DDv6Bvb0TC!p!o6 z{V*7ac4y#i9a(&wV;j|EjJlfl{hwMwH!$c=chuV0MZ~xmz7knkLuE%%ER~oCbjj%T zkQuaq6z2=JO9@|6Q_wJwtk@0~J#BR&%__k_ncn6E7Y4gify6#h4y*vaPT;JhmAV8( zBI)C^(R|ebh+LcQ@Lia1rR^W>zC(rO#m^&^{Lq)z$l|tL&oCr$gJH;^IloX^WnH z61)Y_69jskNUc&`!VW}ESMP+66?;sJ;^KA!YVvRXKSF3#%9Gx;rn@U#1* z-UC+Ub$>vh0j`2qM>U|2y##8ElcbDajg)6as1~!aO00AWQ#Vcn9)lSv#n>dYSy@LY z;mouEZ#(hYta8i>aHoVp(`f($faY+%$nW9rh*FE^3A0O!{jn}9gSlEU$InGsFsQduWe?) zOCY&y85@qW-GW*+&Y&`PhRj0|R+^Xd_W|42m0MC-$2?fJBc)xE(;^itKbaI?*K^D= z9}Qz8k8wnFn-sG+79|1b=8~AnBL7I7-*8k$K4~(6K;2lP)?Ls_{>X16to8GXGWIi7 zfM2Vr@FY#5AzcxAqd|=dj7={7a;vEFcKN5q5FId<*2T+_QHB*th7-P3WKTH|Rv8sJ z{Mp!5NjSYY#Oz!aJ11 zAJ^kp86zmo3QhN(=|;z^l~MtV5orj&A^0b5#>M&~G80$|b=UFlVkW8}dO+Y)UU-uT z;9jKRY^C5W*53=)qrO1l`g>V?IlCeakuyNvQs|1l+#x0`Z^&k+n2DfuU02l@RfQvkt^f_la);sK(J4~~@?tzU!U4Bn~C^V10E zrsqq}{sCG~Whh*F4;SW-CG8ddl+h{r63O>gQOY*tnC@v;D!);_Mm>WBEx;KklhU9I;5r=*pvkz25Npsis+n35=`piNV5jf3k-t{p7ePAqLo# z%&p1mI<9md7YTX3^_0Tfm5%MarBuMVEfEME=Oun{C8G9?zJ;j+2+FE~^=1rvhEap> zMOh7~kF<;DfFHd?T*@cQY&_LU=77ri9Jc^|iI0dw8`;S!oV)UFKkmnn+37iw>@h9Y|m*(~xwzGW#WKDyNHg>o}b1ny&`*U#l zXj)ruzXJ%dH1$C&U>bYBr67LX_tSL^&@Yzj?oM6Q-#60KVnMz4qlP;!`xA^Yrbi0K zK+J*E_>9fiOIX+wb3oIvm))Jar0II?=-{_frO8U}U8!5t|4<-T=r)^1k<}@Rn~qev zZ8IuQ`ei%JOHmQY*|i>G&D5vLIJvRXn#wR3tGhss^i^%WC8mEmkP zogP=NyVAkFrZVJ_c~P1HMb*-fm0-QxlRM4s?dr$HihEMEsg=yv+o_V_Uu!F@n6OZt zJ#=g}RHfiJJ6OeVc{r6HWUdw_{Y$phH7n6S9A}v<{wSb$XiiO>@m80iezbyd#hv$= zA1CVzcNp^v4C+e94+#k~1)BonTM&8sSwY?E%udnmhcH$)8nc=W{T1ep#*hXX&2|T% zs0)1mD1VlcKTDca_<3AZ^{U^SH$FrMQ~CDfDf*yC2EymE^*%aZ#PtXH-S$42fPfq_c}x3ghIv1;A0mJzmP_DXO;J=-2Rc(DhB? z(M9PfNV1lT)K74+JgHz?l>%{m^Wcy`WTXE|*Uh$zaMPVC>hjZk8ZSAIn@N_#$uA{2 zTpjLbI1GMrlJUZS4z>)D&e{Ip_lJ#G@42+==iuSwKD)z=SYpZm;y#tPVs)!INS2+! zxWZl_2rIw!Hv+bCGF5ZbMP@HVE1bHz?j{M^U1u}9?BQr3ZB~A_d+jM#ySIZWP`n$U zS7hK!5SfFGZf+3|-Tp~jGC7GcYvYsat1?w$6m`P_kGiCrD9Y9!=Y6(a-Z<8{0e={N zr;#D}jojq*=hMTPdC|ha%2hG;*F?hm=o!4O^aa1no1`h3rySLN;)ummUH>8umFm6L zVtjIi)?9j`&Sp%0ydFlGs1C0Wy8(>qOa7c)MnVs~_1wZ2JUa>#4Bjgk4T`>;$d8HpNeVuP&6-SlwiuP$fP#09OG!o^L(IljqR*x<-qumB<@=V;l zSbbToXuWeEHVn+Ga7ou#QQa}Ao?f0m7Hsq4wqFRK?z<)Js!LlcgE88N$iw3#{Bn#L zV%yJX1>`WhC))DFrpCuVl}&xcUGTJ-(&RcHiTd`)bu^s^#`9V}(8v=zlONk=cB8HD z6!DSgnFZIJJw#5BD^%u9^bW+_c{4yQ?>PK$PucXD_fLN%|dADAcnm~XMNnWR@a9#J=b8$k*$Uwg3AHHGuM^Aw-pH3 zb{CnZiu2-e#rcptYY~HrH3a^LQH`{dJFP*9F<0kKkw%99J(PBVq=4@2ceXd><7KZd zB16pjGSIpb%pKD+h%||3Yw9&lepHC!r%TNg-)@o!Donhk)As4A(9d`B8=T*Wm|j`Y zifkXRmUnX4%qZBA@OzCtZU9)|!!nyOo0X9$&4^2x&cg)@5GajFR3Vwy5AY-ZY?%fn z4&SrJ$#{oZx}rr%uphKiQPmGxTcDR^xE=uvu41)4P*l3y=LDBJA3ohykyUP8Q+g?X z2kdOjhH2Kk{IMrgU)4{p@#8h}kVnJrakx<~ zNG{!-Ap?H4wlEaWJ+fBO!(I==CyK5T-q)CeO=Z~h)0orLwh>Iffu#8LF5W#w+Q zIS*{&rSe)5_T3d9A!V{;tST7hy4pWs%=7C@Qh;pP?k#`%h*5qB4Nd6MQpdMkdrhcpjzVpp%5E`f%FZw6t;ILj z!fAz8s25a{&!$_-E0Tp)cD}0Kb_*I$ZL-2Os&47%1;rJPZ(?3^;6 zYT-IxH8*c^=iH(sMf9^)*sewbv5AZ2TFSg1b#K6x5_yi+@4BUSmoewe4+H|R>$sQr=dUzHzyWF_zrQ{(f??U9PX{qASFx z<3lBSW7*V)>*^*F7FKZcxDj*uts=6ZN_M$BCg4z1j>%AY_cQ zI#^RP)9$JD?QAkLW0L;t{B|AOjSHjUNYC$|mLg=VL8Ja$sVG}5OVc0hJL|65+15s! zUDB3s0|a)g&4o0bv+SVhR3=ANWPOU{2cib;*M z-|&25r&>B59OTO6qTRmn_9MpD`DcR88SNqY8__A{b%a1LhAvYuez{j+Zu~HDPUKHiq=VsKnva~u1N?&;cckL zyINx~$=rd9Koo}L=DEez1}Z45uZCOW*4)@=F}JlsmVlEufee9>0u3gUW{`~8NmR4IOD|psR;02Xn*rcQ{W-P!1!!_BTZ9P#~ z^8NEe-7%;Tg3i2?dSmV2%iz7>tG!$^=)K*dxF4#=lZr>&`p06OVtLJ)ez}SaOVREh z&(b=atDI(|EScv1ZBZ(1zyf7>zPr`tmm@L)?v! z<}oGSnE`+s^Rt0QAb)Ues$S4OBU>f9D0JZas}aN2wDMMfNs7(J z!}qCX)!+TGFOjDhyW}>a#K#~MD^;eL8B$X$)$89Rv_0*ce_Uw%%kj&SscZh4UKs!3 z%hbZsM@>om3aB~34L9_Qnq0++@gYcUnUHqne0JougZFpM2PCi>cm2vrR8!wscg`Ld zW^#Xm>ZRLtHrx2=)og2w`ncbP2{d6i=rcn4`r^zekmDyKYAg5C>)(!|bPL|geEIg3q zL)fk8E_umYckcAAwvATPs}!V42d5|7b&6B^O;&Si7We@qt$n9>?CDrBf2zaGk&C|- zGA*$avn2L)zeZTIfa77av%PWqGx>@~h33RJZB4gzS9PUKwgWuifGg&R=o&@1n^uX! z0(G){9hXVz+N;!Ww8oY5hl|BY74wI+$4|>7Oh-mRp>l>Z*4b{9`FHRoWxDDd9r0Um zO+NPU!$7!D`~$n-8fdf#(OqJw&9jNT8dK32+kiD$N{ls)-(-!cW<-P5-OK6ZeEw&F zi_p!I<=7UM<%V-Lq`B?c>K|jN0K>SVpU==XdKBf z_E6pxhjt$J$I^_y@hE}gCB}2L0bz%SRhDM1fRXF2X=rD0rSu(wVr)p@oNSr?ci|n&J#&9-*1QJhtm0YxM-?@jKun)5HkTm`7B>oNR62 z%yWSkjbsILRN8oy%V8^>nS~EX3y+EsELp2Zi`_00;IG5dg zCZ}rG??J=FFeW^&-S6>KW)UEta&X%Bdt6gCz6!wJGXow^1vqs9Sb@_4fMG6vZ3iT> zWxyA&zD6>!tBwHnxC!uOe=3Y&NNl-2oJH{&nyecJVq_QtU`_IYoViPDBVlTIi5S0M z0H3XPa!c^nt%Cb_BJ{1o`*?|WIAPmYR~bO{W$J-Q^N%HD$Ipk=@J1)!f!KDR8v+Tm z#p2LwzNlQw_*EbUF$AbwFoq8b2LdEOb0c9Wm0}=1k>3#9o#AClxx6RCn272>C?F{K z7Ea)O`4^9)mtcyctdVSuFkRF!VSGx+y*i3u2^hyjyjxJ__!PCj&@W{K-k0Az;A3e$ z>j=QURRpjt;16H~e{Zo7pfA7*G1xK!>)!oe=x@Q_E9(LScz??N2PN2*-V*HoJ3K*; z@9-}KWip^v{)vbq`M1}jC1eDj{*JaSh>(dkkKg%#ffi{1pQy$NBjA}ZU|*e%xG0gtE!LYcMQ-dP?1>er=#knS-LeDdQMU`095 zjbv=9t9f%&j=xDD-+aGG9|DPrA;^l%|83SLD*k90u*C-0Wv~UA<5BAyt-q)8MOnA~ z|LNdA_>OG;~&W)K71istw(b##;??0^l@phfajpszSuCPqVE8O z34EGmWE(+FK4F0ZTPDK??_#skxp59q z;r>Q{3lc2K?(q?L=zsChYn!b&)+8X9TSdbj*ZxNjy|DV1%|GWLSVNyaCyaBOKv5|!f%y@|DaeX{@Sg^dw{duZ2uVghX;gb@jI43w;&K69N#X- z0IUu9mURGfk_t81xqnj+pBZpUjGBZrr^#;4mvFqE8;|w`24^*3(1ZZP9j(`MIQ_}5 zVYH}8zqNYmg`9#powSKz4<51dwA|#S(ra)wchz>)17_~5RC-znEJIucGFaT zvfpD&bO7e;OUpM`G>5ai#sIsKo(pgaE|#DhX?^67lQjGu)mQlo92{s^-IreL@ur8%n6oshohtC4y978@qW!fx#pM&G*oIQ%{BdQq)?#UWz&1)nO^95FKsfyIP-)xPUS* zUMZMM+f-rjN#`JA7?Zyaz?)2{$sS%8;Axf*HL1PyM0T@a8qDA`B%Fh8?BUT~zqHz1 zG?(^X8BnqzW$@YgLkXWm<$v(Hcy1HCdqH+nM?R%SEH{v3V%osV>UXk^)=FEL&wczl6r)@=9x0ykMG;e``L6gne8&_go4}_IvmQg-(zYyWMC!+W8{W?~!kgKba^Nm~)9h zJG-&wpqEW7Do&#S2jl-W=!L_Pk5(o?$$rkK&;^-Yp+KCvEeQ zXZL&7$T}zN>sj3IP9o($Ycl3_dP<9hG31MxzohW;%I74zEIe;+Z7yBm6;}5ZmsfH# z`aUQK(E;6wAi+UXl44;{)$^QXQn$IgM#c7z6Omjy{p|4f#T^_|yXy74D~POd&K1O3 zxhC$DOahXcq8x(zTKf`%DA;qwAZC*6Fo?Wgst~D(8ZZQ=@ru_3Ys}*%$^&Dca=EAr zflZRDzllS(moD3#g65AtveslhO$erd)O|U<%rRw}LYjyyX{vdGK`=}*0gqG5dV{We z@Bh%i^?cL152@3(px|8L+yiDSA7x~R^AHI;0frGi&_raPgB~UfE9X+5iB3)v?n^lAo(~96Oa+7j2!Sr6)e__%(B!PFc9a0*%alW z#UQ#kiIfMEM$}xGIHs&IB0#bN1Tl#HE#<)t&K85gjR1)pOK4(q(c21smO&cX5( zI&qX>oy#MHA!C<1*{3>BoiSyuKt8=s1G2H{+BW%EGwz0Ttn=1)K!WufJG{$D1DAlw zgy4p-Pz@aS%X4>#k4{1W%Zdi%9$Pe)Z%OWM1a{30m4lV5gVe+!UpC#ex<3d{tk4=v zn!3R;HKaX%nFAiIPr)%|U#FaiT!;!{eUUpTazqBKz#Vd)724qZ8=EoFO*^revNw`; z37*H$jzcmCjP@4yMQ7_o;ruTlXIhIq>{FHNNq6IrC=%BAG2;&3%Mh3`1NVUBFZ?(E z%aFQ*HWEykaG9GruAPgl-hg-SOjrZg?$*t+LTdXi6l->J^){xg%qS%>y~s5mQ(*WeA6jYgbd4BLW~Wid5!wG@;#?s$z>RqF2)YNPV9nMAlK@3ut?kVhzqBE+ zm-k{E^+_@Y%V@P}8l`}2tuH2G5N{g|G;pnn7B%h~Fzx;_{XpUWZFQsJ*Je_U}d$By$?&yLy9SLpPH9U8ejsX zsW+TdlFC3T5Gjr<#YCh*Xph@lYNh+ z?8&fCStnB zuzYWyA756-QAPK%t{iDHa03G`_sZgZNGb-g2*p5f9I02xA$9KWT`*<*bvDOb>{Goz zfpzYBoPazuoIU1%zit>)WP4Kyd3<`M1a2Ap^Jsmj-!W12dFEz7k!C%5+f5=kd%J6k z1%CSY!+COWf|>E_=O+n^k9NA6g-&*Y50Af}E$;Rx2A=Gd2nBsm?CYb7^dW;0=cCm}3O_{0CJlZ?;__E+Z@(6MG~V2@-r69RhX zfEnz4k#JHWRiKNESzaFK0TW>sAy|O|kD|;XgdV!zJ!wKJzDP9#B%yr{5CgiyfazV_ zJPq8fZGR&|UQjh9W{JPV|LI~QK!mx?gdobwO4eTXcFd9lDfnM~aRlnGc<&P$(GY}5 zguwRRPPX<0qe41Buba@H9c!WzGLnF6|F>g};M3n7YnjPDh6Z10Bl?=8n)EO?o+tJ@ zKZIUVzt*H4FUTuGazo=o+yz!iu%SCxKfd4(QSRv{dCKu`S)Yep)PK8ng$_LI;ePW@ zGQ_Tw?)y8xt)BGnO#4C3*-d>@j$47FxC?P7&xl&J9*{gC&wX%nW~n_gHrmmO_#*j_ z3zuCkOuJWADbXINUP`?b@Fm72mHGhGguBjsc+5Mb7}Ij$JUg+$gjM8%UP{c;_Q6+k zI#8#y0xW~0PPa3qR$RMRSfiKKBt+CW!E2k}EMPCyoS_z*IcX& z)%%!uD>~599|sMh?>TLsAtB-SI^5>p(go;9Uf{+|3NCsX*trPUVz@;^1m^rMOsjWV z{umT`(A`JfMbX~dZ7N8`UKmNoX>Jf6n?M~s)7PiH6y4q}d|fJ*ZC2zmR`$WqgjJ8z+i`G-=_pYa%m|hZRzMyjN^6I@i%a^G?T&ev) zS$~0I`tqgw+>uv2tVE_mZpK{%GlOnEsmZyO7*cA*_4+C*hf@5Rr28%8Q`>2AX=1^r zT~=2nFG7W{XFcKhLE3%qMrhcl8#K@eB(w4-`pU2ead+k~6Dd>b(I@`Fp{%5SiRRu~ z4)isBarkPk!?M{jH}W>_!Zqc(9Q}t>M>PJ#Y{Dc3Ev6NeE<{yUy3&83LqRQ_KSZUO z1VidRB)MM>xUm_k`|;&8r7CG(2)iS;sH-yJp@=6*!FOR25u{HkZ5 zcliR6UzRR2T2K|1lits;T(wO3OZtfB>a$$i7!mZXU@dx1nyO1xbX9kT&@y3k9WmAg zZy&so9i?A;ey!cJ!p23Umh|zB$5fArvQ1EL2^I*IFPK)2}M6S+D7PpPgzqQm4)R z)sy=02M~F%ye>V*dk%ed2X;xGr|c}QEE`;ztW&H_%n6;Ub`+lSCR*Q=5S-a8-?^Ig zb9f){Ug7?6)0l6V8_8>~?^_TF6F2;2X#OUp{6VfS*hBqi5tT)!dQ@qfzG=Q;9@20n ze6U*7=&P!Xp^UO$m1p!e(Sq7d{`SaO1)bj z1w{Q&r~GQShtH~cXr4dM)Tq|T(un=+LBqq4duQPC^2#sKBkLp7k(`l$k*?AERn8H~ z5x(N`k;T`3uYZnc43Cef4u2~W8x9;E8m=qyDf&Ki&nd+z)Or5V`haxFPvmu1bQk?* z21X`gX>v4FqDP!f9QJT?h`v8#bZ~Tg=<{Ilplsf*VS3p{Zf0?l@^R=M_PP;XTP>$b zc?sKV8&3K$A-?yu-7k>>qy*{|#ev(!J;RClclhi3hxu>#@Bbn>;y-0SWjJa&GPo*x zmE|hY)zYhV*M5fcf4un-9)22L9vc&D6C-&GMW-NYEOuSER|+BV-dRb~L(0Tq(8{yt zrtN1@ZLuj=|F7hdRZ^NFB_el3BYGIRi544sA_V$rb!e5MuSVa|q8ds_{pezkHXRgr zCO{_8$e(RO_n_U(wQ9BQ=%K4yCSvMgAU@oN`k}$YA={mj(o})5+K#<(^KJ9*4JAw7 zeSru^1io&<)@LZ|5tB`G%lomjXV3DUeah{z9vt`}GVpfv=hf&AQd?JtOdlmVKbcZ* z*~MR@Ut3Jp1HK%BKn0pIH)hukWxvsjqb- zKA-!(xrKe_39b%~JC{7abJ6tTR0J`mUv%$B3|9L)CSgJ@q8$fx($W5oy(g`pDhF(@lQ6m%eUOkm7Y0b zom26P7UUm&kn#TDfU2D%gF}sKAW9@kAZkk{H{)vWufZqzHJXL>E}Mdz)LF!C#BP|a z&q7PO>Pfc6k17S#InMn>y54ECpjewp z)0YFJS*ppW@!f3^@%|vG2bN?RIF6~dujtNo=`-#&o*7-6n5<*qh6(lwF-n4Mb_|s>i~#AD2386pW8G`ZboX|NJs! zTxbL{-A9yLZT0v!AN5|%3x6J%5-4-bD5)y77u<7%Yk=exRj+&unh9EY8hJUe2i?;n zkS1VX>Ry6HZCkarbba>?9-8WKDRC>Td&zhyf<1yUIQ?K__v8JD$1f_-)q#!&a984* zJS_F9`8S!7q(P1i^cv&c+rHIx`251T$6Z_dOhXFBUgitFUrAb{UQuW3EM{liO+u}% ztjrJDHfj2AWke}>l?uIc`{C06b!RD{FLPyoUD5B`?#WxSUJ%;C4!(|?cQ5k#5R@}V ze9R09_Jv%=j~1=$}~Ezjg^C*N`@+MoXldbiAS zXx$##3*KRyP{VTuatSF~9Qd9_dmBkejmAo3{W=6-JYP#fs?;IkOO8R2*SY)c-{K_ZUl96LoyR?^!(137t-1j`8!)8Vj|+Aq#PV7x~ioA E4}MC3Z2$lO diff --git a/BookGPU/Chapters/chapter11/gregory1_plot2_b.pdf b/BookGPU/Chapters/chapter11/gregory1_plot2_b.pdf index 55147a11cf68c1dedd6ff6ac84db067c8b8e48b7..3ef14039b47ca933174358f869d7b6d319c9f3a7 100644 GIT binary patch literal 15485 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 NA!O|A@|p@{{|}f|R6_s& literal 11921 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