]> AND Private Git Repository - kahina_paper1.git/blobdiff - paper.tex
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
Merge branch 'master' of ssh://info.iut-bm.univ-fcomte.fr/kahina_paper1
[kahina_paper1.git] / paper.tex
index 276c50a9b3eb46e64687e1ceacbf25a4beeca9b6..43bbf1e887b8de02804ffa041ca2ba26c8c13005 100644 (file)
--- a/paper.tex
+++ b/paper.tex
@@ -312,8 +312,7 @@ The convergence condition determines the termination of the algorithm. It consis
 
 \begin{equation}
 \label{eq:Aberth-Conv-Cond}
 
 \begin{equation}
 \label{eq:Aberth-Conv-Cond}
-\forall i \in
-[1,n];\frac{z_{i}^{k}-z_{i}^{k-1}}{z_{i}^{k}}<\xi
+\forall i \in [1,n];\vert\frac{z_{i}^{k}-z_{i}^{k-1}}{z_{i}^{k}}\vert<\xi
 \end{equation}
 
 
 \end{equation}
 
 
@@ -348,7 +347,7 @@ Using the logarithm (eq.~\ref{deflncomplex}) and the exponential (eq.~\ref{defex
 manipulate lower absolute values and the roots for large polynomial's degrees can be looked for successfully~\cite{Karimall98}.
 
 Applying this solution for the Ehrlich-Aberth method we obtain the
 manipulate lower absolute values and the roots for large polynomial's degrees can be looked for successfully~\cite{Karimall98}.
 
 Applying this solution for the Ehrlich-Aberth method we obtain the
-iteration function with logarithm:
+iteration function with exponential and logarithm:
 %%$$ \exp \bigl(  \ln(p(z)_{k})-ln(\ln(p(z)_{k}^{'}))- \ln(1- \exp(\ln(p(z)_{k})-ln(\ln(p(z)_{k}^{'})+\ln\sum_{i\neq j}^{n}\frac{1}{z_{k}-z_{j}})$$
 \begin{equation}
 \label{Log_H2}
 %%$$ \exp \bigl(  \ln(p(z)_{k})-ln(\ln(p(z)_{k}^{'}))- \ln(1- \exp(\ln(p(z)_{k})-ln(\ln(p(z)_{k}^{'})+\ln\sum_{i\neq j}^{n}\frac{1}{z_{k}-z_{j}})$$
 \begin{equation}
 \label{Log_H2}
@@ -394,7 +393,7 @@ There are many schemes for the simultaneous approximation of all roots of a give
 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
 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
 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
@@ -413,21 +412,26 @@ Optoelectronic Transpose Interconnection System (OTIS).The
 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.
 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
 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 
 
 
 \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
 
 \subsection{Background on the GPU architecture}
 A GPU is viewed as an accelerator for the data-parallel and
@@ -494,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} :
 
 \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}
 \begin{algorithm}[H]
 \label{alg1-seq}
-%\LinesNumbered
+
 \caption{A sequential algorithm to find roots with the Ehrlich-Aberth method}
 
 \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}$\;
 
 \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$}{
  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$}{
 
 \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\;}
 }
 \If{$c > \Delta z_{max}$ }{
 $\Delta z_{max}$=c\;}
 }
+
 }
 \end{algorithm}
 
 }
 \end{algorithm}
 
@@ -556,8 +565,7 @@ Algorithm~\ref{alg2-cuda} shows a sketch of the Ehrlich-Aberth algorithm using C
 %\LinesNumbered
 \caption{CUDA Algorithm to find roots with the Ehrlich-Aberth method}
 
 %\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)}
 
 
 \KwOut {Z(The solution root's vector)}
 
@@ -566,12 +574,14 @@ tolerance threshold),P(Polynomial to solve)}
 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\;
 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$\;
 \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}
 ~\\ 
 }
 \end{algorithm}
 ~\\