From: Kahina Date: Mon, 2 Nov 2015 19:26:42 +0000 (+0100) Subject: Merge branch 'master' of ssh://info.iut-bm.univ-fcomte.fr/kahina_paper1 X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/kahina_paper1.git/commitdiff_plain/2b5ea4e0a2094ab312c8046da823ffe332c9577b?ds=sidebyside;hp=-c Merge branch 'master' of ssh://info.iut-bm.univ-fcomte.fr/kahina_paper1 --- 2b5ea4e0a2094ab312c8046da823ffe332c9577b diff --combined paper.tex index 4213238,cf8c180..43bbf1e --- a/paper.tex +++ b/paper.tex @@@ -393,7 -393,7 +393,7 @@@ There are many schemes for the simultan polynomial. Several works on different methods and issues of root finding have been reported in~\cite{Azad07, Gemignani07, Kalantari08, Skachek08, Zhancall08, Zhuall08}. However, Durand-Kerner and Ehrlich-Aberth methods are the most practical choices among them~\cite{Bini04}. These two methods have been extensively - studied for parallelization due to their intrinsics, i.e. the + studied for parallelization due to their intrinsics parallelism, i.e. the computations involved in both methods has some inherent parallelism that can be suitably exploited by SIMD machines. Moreover, they have fast rate of convergence (quadratic for the @@@ -412,21 -412,26 +412,26 @@@ Optoelectronic Transpose Interconnectio algorithms are mapped on an OTIS-2D torus using N processors. This solution needs N processors to compute N roots, which is not practical for solving polynomials with large degrees. - Until very recently, the literature doen not mention implementations able to compute the roots of - large degree polynomials (higher then 1000) and within small or at least tractable times. Finding polynomial roots rapidly and accurately is the main objective of our work. + %Until very recently, the literature did not mention implementations + %able to compute the roots of large degree polynomials (higher then + %1000) and within small or at least tractable times. + + Finding polynomial roots rapidly and accurately is the main objective of our work. With the advent of CUDA (Compute Unified Device Architecture), finding the roots of polynomials receives a new attention because of the new possibilities to solve higher degree polynomials in less time. In~\cite{Kahinall14} we already proposed the first implementation of a root finding method on GPUs, that of the Durand-Kerner method. The main result showed that a parallel CUDA implementation is 10 times as fast as the sequential implementation on a single CPU for high degree - polynomials of 48000. In this paper we present a parallel implementation of Ehlisch-Aberth method on - GPUs, which details are discussed in the sequel. + polynomials of 48000. + %In this paper we present a parallel implementation of Ehrlich-Aberth + %method on GPUs for sparse and full polynomials with high degree (up + %to $1,000,000$). \section {A CUDA parallel Ehrlich-Aberth method} In the following, we describe the parallel implementation of Ehrlich-Aberth method on GPU - for solving high degree polynomials. First, the hardware and software of the GPUs are presented. Then, a CUDA parallel Ehrlich-Aberth method are presented. + for solving high degree polynomials (up to $1,000,000$). First, the hardware and software of the GPUs are presented. Then, the CUDA parallel Ehrlich-Aberth method is presented. \subsection{Background on the GPU architecture} A GPU is viewed as an accelerator for the data-parallel and @@@ -493,37 -498,32 +498,37 @@@ read-only caches \subsection{A sequential Ehrlich-Aberth algorithm} The main steps of Ehrlich-Aberth method are shown in Algorithm.~\ref{alg1-seq} : - +%\LinesNumbered \begin{algorithm}[H] \label{alg1-seq} -%\LinesNumbered + \caption{A sequential algorithm to find roots with the Ehrlich-Aberth method} -\KwIn{$Z^{0}$(Initial root's vector),$\varepsilon$ (error tolerance threshold),P(Polynomial to solve)} -\KwOut {Z(The solution root's vector)} +\KwIn{$Z^{0}$(Initial root's vector),$\varepsilon$ (error tolerance threshold), P(Polynomial to solve),$\Delta z_{max}$ (maximum value of stop condition),k (number of iteration),n(Polynomial's degrees)} +\KwOut {Z (The solution root's vector),ZPrec (the previous solution root's vector)} \BlankLine Initialization of the coefficients of the polynomial to solve\; Initialization of the solution vector $Z^{0}$\; +$\Delta z_{max}=0$\; + k=0\; -\While {$\Delta z_{max}\succ \epsilon$}{ +\While {$\Delta z_{max} > \varepsilon$}{ Let $\Delta z_{max}=0$\; \For{$j \gets 0 $ \KwTo $n$}{ -$ZPrec\left[j\right]=Z\left[j\right]$\; -$Z\left[j\right]=H\left(j,Z\right)$\; +$ZPrec\left[j\right]=Z\left[j\right]$;// save Z at the iteration k.\ + +$Z\left[j\right]=H\left(j,Z\right)$;//update Z with the iterative function.\ } +k=k+1\; \For{$i \gets 0 $ \KwTo $n-1$}{ -$c=\frac{\left|Z\left[i\right]-ZPrec\left[i\right]\right|}{Z\left[i\right]}$\; +$c= testConverge(\Delta z_{max},ZPrec\left[j\right],Z\left[j\right])$\; \If{$c > \Delta z_{max}$ }{ $\Delta z_{max}$=c\;} } + } \end{algorithm} @@@ -560,7 -560,8 +565,7 @@@ Algorithm~\ref{alg2-cuda} shows a sketc %\LinesNumbered \caption{CUDA Algorithm to find roots with the Ehrlich-Aberth method} -\KwIn{$Z^{0}$(Initial root's vector),$\varepsilon$ (error -tolerance threshold),P(Polynomial to solve)} +\KwIn{$Z^{0}$(Initial root's vector),$\varepsilon$ (error tolerance threshold), P(Polynomial to solve), $\Delta z_{max}$ (maximum value of stop condition)} \KwOut {Z(The solution root's vector)} @@@ -569,14 -570,12 +574,14 @@@ Initialization of the coeffcients of the polynomial to solve\; Initialization of the solution vector $Z^{0}$\; Allocate and copy initial data to the GPU global memory\; - +k=0\; \While {$\Delta z_{max}\succ \epsilon$}{ Let $\Delta z_{max}=0$\; -$ kernel\_save(d\_z^{k-1})$\; -$ kernel\_update(d\_z^{k})$\; -$kernel\_testConverge(\Delta z_{max},d_z^{k},d_z^{k-1})$\; +$ kernel\_save(d\_Z^{k-1})$\; +k=k+1\; +$ kernel\_update(d\_Z^{k})$\; +$kernel\_testConverge(\Delta z_{max},d\_Z^{k},d\_Z^{k-1})$\; + } \end{algorithm} ~\\