From d6c0eb8af968b2b5d3562240345777b17776520b Mon Sep 17 00:00:00 2001 From: couturie Date: Wed, 24 Apr 2013 16:05:47 +0200 Subject: [PATCH] correction embedded fonts --- BookGPU/BookGPU.tex | 14 +- .../Chapters/chapter1/figures/scalability.pdf | Bin 22220 -> 9876 bytes BookGPU/Chapters/chapter10/biblio.bib | 22 +-- BookGPU/Chapters/chapter12/ch12.aux | 150 +++++++++--------- BookGPU/Chapters/chapter16/ch16.aux | 132 +++++++-------- BookGPU/Chapters/chapter17/ch17.aux | 140 ++++++++-------- BookGPU/Chapters/chapter18/ch18.aux | 78 ++++----- BookGPU/Chapters/chapter7/ch7.tex | 6 +- .../figures/PararealScaletestGTX590_conv.pdf | Bin 0 -> 10537 bytes .../figures/PararealSpeedupGTX590_conv.pdf | Bin 0 -> 7983 bytes BookGPU/Chapters/chapter8/ch8.tex | 4 +- 11 files changed, 274 insertions(+), 272 deletions(-) create mode 100644 BookGPU/Chapters/chapter7/figures/PararealScaletestGTX590_conv.pdf create mode 100644 BookGPU/Chapters/chapter7/figures/PararealSpeedupGTX590_conv.pdf diff --git a/BookGPU/BookGPU.tex b/BookGPU/BookGPU.tex index 5895e6e..23267c5 100755 --- a/BookGPU/BookGPU.tex +++ b/BookGPU/BookGPU.tex @@ -147,7 +147,7 @@ \makeindex -% \includeonly{Chapters/chapter10/ch10} +% \includeonly{Chapters/chapter7/ch7} \begin{document} @@ -166,7 +166,7 @@ \frontmatter %\include{frontmatter/Foreword} -%\include{frontmatter/preface} +\include{frontmatter/preface} \listoffigures \listoftables @@ -183,23 +183,23 @@ \part{Image processing} \include{Chapters/chapter3/ch3} \part{Software development} -\include{Chapters/chapter5/ch5} +\include{Chapters/chapter5/ch5}% HeatSolution0.049307.pdf HeatSolution0.pdf ... \include{Chapters/chapter6/ch6} \part{Optimization} \include{Chapters/chapter8/ch8} \include{Chapters/chapter9/ch9} -\include{Chapters/chapter10/ch10} +\include{Chapters/chapter10/ch10} %pb fonts tree2.pdf \part{Numerical applications} -\include{Chapters/chapter7/ch7} %pb fonts +\include{Chapters/chapter7/ch7} \include{Chapters/chapter11/ch11} \include{Chapters/chapter12/ch12} \include{Chapters/chapter13/ch13} -\include{Chapters/chapter14/ch14} +\include{Chapters/chapter14/ch14} %index \include{Chapters/chapter15/ch15} \include{Chapters/chapter16/ch16} \part{Other} -\include{Chapters/chapter17/ch17} +\include{Chapters/chapter17/ch17} %index \include{Chapters/chapter18/ch18} \include{Chapters/chapter19/ch19} diff --git a/BookGPU/Chapters/chapter1/figures/scalability.pdf b/BookGPU/Chapters/chapter1/figures/scalability.pdf index e484f598014cc7f21ee3fbda7de5f8db6347ce61..43ee85632b1f3689661c45538b9cf4966572927e 100644 GIT binary patch delta 8691 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 literal 22220 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 G^S=Pe=zNL* diff --git a/BookGPU/Chapters/chapter10/biblio.bib b/BookGPU/Chapters/chapter10/biblio.bib index 380d5f6..f5bc1eb 100644 --- a/BookGPU/Chapters/chapter10/biblio.bib +++ b/BookGPU/Chapters/chapter10/biblio.bib @@ -89,20 +89,20 @@ year = {2010}, } @Book{WRIGHT, -author = {S.J. Wright}, +author = {S. J. Wright}, title = {Primal-dual interior-point methods}, publisher = {SIAM}, year = {1998} } @Misc{THOMAD, -author = {M.E. Thomadakis and J.-C. Liu}, +author = {M. E. Thomadakis and J.-C. Liu}, title = {An efficient steepest-edge simplex algorithm for {SIMD} computers}, year = {1996} } @Misc{HALL, -author = {J.A.J. Hall}, +author = {J. A. J. Hall}, title = {Towards a practical parallelisation of the simplex method}, year = {2007} } @@ -134,7 +134,7 @@ year = {2011} } @TechReport{DANTZIG80, -author = {G.B. Dantzig}, +author = {G. B. Dantzig}, title = {Expected number of steps of the simplex method for a linear program with a convexity constraint}, institution = {Stanford {U}niversity}, year = {1980} @@ -148,7 +148,7 @@ year = {2011}, } @Article{LALAMI11, -author = {M.E. Lalami{,} D. El-Baz and V. Boyer}, +author = {M. E. Lalami{,} D. El-Baz and V. Boyer}, title = {Multi GPU Implementation of the Simplex Algorithm}, journal = {IEEE International Conference on High Performance Computing and Communications}, year = {2011}, @@ -175,7 +175,7 @@ volume = {19} @book{dantzig1953product, title={The Product Form for the Inverse in the Simplex Method}, - author={DANTZIG, G.B. and Orchard-Hays, W. and RAND CORP SANTA MONICA CALIF.}, + author={Dantzig, G. B. and Orchard-Hays, W. and RAND Corp. Santa Monica Calif.}, url={http://books.google.ch/books?id=XLuttgAACAAJ}, year={1953}, publisher={Defense Technical Information Center} @@ -204,14 +204,14 @@ volume = {19} } @PhdThesis{WOLTER06, -author = {Kati Wolter}, +author = {K. Wolter}, title = {Implementation of cutting plane separators for mixed integer programs}, school = {TU Berlin}, year = {2006} } @PhdThesis{ACHTERBERG07, -author = {Tobias Achterberg}, +author = {T. Achterberg}, title = {Constraint integer programming}, school = {TU Berlin}, year = {2007} @@ -227,7 +227,7 @@ doi={10.1007/BF02025534}, title={A fast LU update for linear programming}, url={http://dx.doi.org/10.1007/BF02025534}, publisher={Baltzer Science Publishers, Baarn/Kluwer Academic Publishers}, -author={Suhl, LeenaM. and Suhl, UweH.}, +author={Suhl, L. M. and Suhl, U. H.}, pages={33-47}, language={English} } @@ -254,13 +254,13 @@ doi={10.1007/BF01584074}, title={Experiments in mixed-integer linear programming}, url={http://dx.doi.org/10.1007/BF01584074}, publisher={Springer-Verlag}, -author={Benichou, M. and Gauthier, J.M. and Girodet, P. and Hentges, G. and Ribiere, G. and Vincent, O.}, +author={Benichou, M. and Gauthier, J. M. and Girodet, P. and Hentges, G. and Ribiere, G. and Vincent, O.}, pages={76-94}, language={English} } @article{Achterberg05, - author = {Achterberg, Tobias and Koch, Thorsten and Martin, Alexander}, + author = {Achterberg, T. and Koch, T. and Martin, A.}, title = {Branching rules revisited}, journal = {Oper. Res. Lett.}, issue_date = {January, 2005}, diff --git a/BookGPU/Chapters/chapter12/ch12.aux b/BookGPU/Chapters/chapter12/ch12.aux index 65b67a8..5841c60 100644 --- a/BookGPU/Chapters/chapter12/ch12.aux +++ b/BookGPU/Chapters/chapter12/ch12.aux @@ -3,81 +3,81 @@ \@writefile{toc}{\author{Rapha\IeC {\"e}l Couturier}{}} \@writefile{toc}{\author{Jacques Bahi}{}} \@writefile{loa}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {chapter}{\numberline {12}Solving sparse linear systems with GMRES and CG methods on GPU clusters}{291}} +\@writefile{toc}{\contentsline {chapter}{\numberline {12}Solving sparse linear systems with GMRES and CG methods on GPU clusters}{293}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} -\newlabel{ch12}{{12}{291}} -\@writefile{toc}{\contentsline {section}{\numberline {12.1}Introduction}{291}} -\newlabel{ch12:sec:01}{{12.1}{291}} -\@writefile{toc}{\contentsline {section}{\numberline {12.2}Krylov iterative methods}{292}} -\newlabel{ch12:sec:02}{{12.2}{292}} -\newlabel{ch12:eq:01}{{12.1}{292}} -\newlabel{ch12:eq:02}{{12.2}{292}} -\newlabel{ch12:eq:03}{{12.3}{292}} -\newlabel{ch12:eq:11}{{12.4}{293}} -\@writefile{toc}{\contentsline {subsection}{\numberline {12.2.1}CG method}{293}} -\newlabel{ch12:sec:02.01}{{12.2.1}{293}} -\newlabel{ch12:eq:04}{{12.5}{293}} -\newlabel{ch12:eq:05}{{12.6}{293}} -\newlabel{ch12:eq:06}{{12.7}{293}} -\newlabel{ch12:eq:07}{{12.8}{293}} -\newlabel{ch12:eq:08}{{12.9}{293}} -\newlabel{ch12:eq:09}{{12.10}{293}} -\@writefile{loa}{\contentsline {algocf}{\numberline {12}{\ignorespaces Left-preconditioned CG method\relax }}{294}} -\newlabel{ch12:alg:01}{{12}{294}} -\newlabel{ch12:eq:10}{{12.11}{294}} -\@writefile{toc}{\contentsline {subsection}{\numberline {12.2.2}GMRES method}{295}} -\newlabel{ch12:sec:02.02}{{12.2.2}{295}} -\newlabel{ch12:eq:12}{{12.12}{295}} -\newlabel{ch12:eq:13}{{12.13}{295}} -\newlabel{ch12:eq:14}{{12.14}{295}} -\newlabel{ch12:eq:15}{{12.15}{295}} -\newlabel{ch12:eq:16}{{12.16}{295}} -\newlabel{ch12:eq:17}{{12.17}{295}} -\newlabel{ch12:eq:18}{{12.18}{295}} -\newlabel{ch12:eq:19}{{12.19}{295}} -\@writefile{loa}{\contentsline {algocf}{\numberline {13}{\ignorespaces Left-preconditioned GMRES method with restarts\relax }}{296}} -\newlabel{ch12:alg:02}{{13}{296}} -\@writefile{toc}{\contentsline {section}{\numberline {12.3}Parallel implementation on a GPU cluster}{297}} -\newlabel{ch12:sec:03}{{12.3}{297}} -\@writefile{toc}{\contentsline {subsection}{\numberline {12.3.1}Data partitioning}{297}} -\newlabel{ch12:sec:03.01}{{12.3.1}{297}} -\@writefile{lof}{\contentsline {figure}{\numberline {12.1}{\ignorespaces A data partitioning of the sparse matrix $A$, the solution vector $x$ and the right-hand side $b$ into four portions.\relax }}{298}} -\newlabel{ch12:fig:01}{{12.1}{298}} -\@writefile{toc}{\contentsline {subsection}{\numberline {12.3.2}GPU computing}{298}} -\newlabel{ch12:sec:03.02}{{12.3.2}{298}} -\@writefile{toc}{\contentsline {subsection}{\numberline {12.3.3}Data communications}{299}} -\newlabel{ch12:sec:03.03}{{12.3.3}{299}} -\@writefile{lof}{\contentsline {figure}{\numberline {12.2}{\ignorespaces Data exchanges between \textit {Node 1} and its neighbors \textit {Node 0}, \textit {Node 2} and \textit {Node 3}.\relax }}{300}} -\newlabel{ch12:fig:02}{{12.2}{300}} -\@writefile{lof}{\contentsline {figure}{\numberline {12.3}{\ignorespaces Columns reordering of a sparse sub-matrix.\relax }}{301}} -\newlabel{ch12:fig:03}{{12.3}{301}} -\@writefile{toc}{\contentsline {section}{\numberline {12.4}Experimental results}{302}} -\newlabel{ch12:sec:04}{{12.4}{302}} -\@writefile{lof}{\contentsline {figure}{\numberline {12.4}{\ignorespaces General scheme of the GPU cluster of tests composed of six machines, each with two GPUs.\relax }}{302}} -\newlabel{ch12:fig:04}{{12.4}{302}} -\@writefile{lof}{\contentsline {figure}{\numberline {12.5}{\ignorespaces Sketches of sparse matrices chosen from the Davis collection.\relax }}{303}} -\newlabel{ch12:fig:05}{{12.5}{303}} -\@writefile{lot}{\contentsline {table}{\numberline {12.1}{\ignorespaces Main characteristics of sparse matrices chosen from the Davis collection.\relax }}{303}} -\newlabel{ch12:tab:01}{{12.1}{303}} -\@writefile{lot}{\contentsline {table}{\numberline {12.2}{\ignorespaces Performances of the parallel CG method on a cluster of 24 CPU cores vs. on a cluster of 12 GPUs.\relax }}{304}} -\newlabel{ch12:tab:02}{{12.2}{304}} -\@writefile{lot}{\contentsline {table}{\numberline {12.3}{\ignorespaces Performances of the parallel GMRES method on a cluster 24 CPU cores vs. on cluster of 12 GPUs.\relax }}{304}} -\newlabel{ch12:tab:03}{{12.3}{304}} -\newlabel{ch12:eq:20}{{12.20}{305}} -\@writefile{lof}{\contentsline {figure}{\numberline {12.6}{\ignorespaces Parallel generation of a large sparse matrix by four computing nodes.\relax }}{306}} -\newlabel{ch12:fig:06}{{12.6}{306}} -\@writefile{lot}{\contentsline {table}{\numberline {12.4}{\ignorespaces Main characteristics of sparse banded matrices generated from those of the Davis collection.\relax }}{306}} -\newlabel{ch12:tab:04}{{12.4}{306}} -\@writefile{lot}{\contentsline {table}{\numberline {12.5}{\ignorespaces Performances of the parallel CG method for solving linear systems associated to sparse banded matrices on a cluster of 24 CPU cores vs. on a cluster of 12 GPUs.\relax }}{307}} -\newlabel{ch12:tab:05}{{12.5}{307}} -\@writefile{toc}{\contentsline {section}{\numberline {12.5}Conclusion}{307}} -\newlabel{ch12:sec:05}{{12.5}{307}} -\@writefile{lot}{\contentsline {table}{\numberline {12.6}{\ignorespaces Performances of the parallel GMRES method for solving linear systems associated to sparse banded matrices on a cluster of 24 CPU cores vs. on a cluster of 12 GPUs.\relax }}{308}} -\newlabel{ch12:tab:06}{{12.6}{308}} -\@writefile{toc}{\contentsline {section}{Bibliography}{308}} +\newlabel{ch12}{{12}{293}} +\@writefile{toc}{\contentsline {section}{\numberline {12.1}Introduction}{293}} +\newlabel{ch12:sec:01}{{12.1}{293}} +\@writefile{toc}{\contentsline {section}{\numberline {12.2}Krylov iterative methods}{294}} +\newlabel{ch12:sec:02}{{12.2}{294}} +\newlabel{ch12:eq:01}{{12.1}{294}} +\newlabel{ch12:eq:02}{{12.2}{294}} +\newlabel{ch12:eq:03}{{12.3}{294}} +\newlabel{ch12:eq:11}{{12.4}{295}} +\@writefile{toc}{\contentsline {subsection}{\numberline {12.2.1}CG method}{295}} +\newlabel{ch12:sec:02.01}{{12.2.1}{295}} +\newlabel{ch12:eq:04}{{12.5}{295}} +\newlabel{ch12:eq:05}{{12.6}{295}} +\newlabel{ch12:eq:06}{{12.7}{295}} +\newlabel{ch12:eq:07}{{12.8}{295}} +\newlabel{ch12:eq:08}{{12.9}{295}} +\newlabel{ch12:eq:09}{{12.10}{295}} +\@writefile{loa}{\contentsline {algocf}{\numberline {14}{\ignorespaces Left-preconditioned CG method\relax }}{296}} +\newlabel{ch12:alg:01}{{14}{296}} +\newlabel{ch12:eq:10}{{12.11}{296}} +\@writefile{toc}{\contentsline {subsection}{\numberline {12.2.2}GMRES method}{297}} +\newlabel{ch12:sec:02.02}{{12.2.2}{297}} +\newlabel{ch12:eq:12}{{12.12}{297}} +\newlabel{ch12:eq:13}{{12.13}{297}} +\newlabel{ch12:eq:14}{{12.14}{297}} +\newlabel{ch12:eq:15}{{12.15}{297}} +\newlabel{ch12:eq:16}{{12.16}{297}} +\newlabel{ch12:eq:17}{{12.17}{297}} +\newlabel{ch12:eq:18}{{12.18}{297}} +\newlabel{ch12:eq:19}{{12.19}{297}} +\@writefile{loa}{\contentsline {algocf}{\numberline {15}{\ignorespaces Left-preconditioned GMRES method with restarts\relax }}{298}} +\newlabel{ch12:alg:02}{{15}{298}} +\@writefile{toc}{\contentsline {section}{\numberline {12.3}Parallel implementation on a GPU cluster}{299}} +\newlabel{ch12:sec:03}{{12.3}{299}} +\@writefile{toc}{\contentsline {subsection}{\numberline {12.3.1}Data partitioning}{299}} +\newlabel{ch12:sec:03.01}{{12.3.1}{299}} +\@writefile{lof}{\contentsline {figure}{\numberline {12.1}{\ignorespaces A data partitioning of the sparse matrix $A$, the solution vector $x$ and the right-hand side $b$ into four portions.\relax }}{300}} +\newlabel{ch12:fig:01}{{12.1}{300}} +\@writefile{toc}{\contentsline {subsection}{\numberline {12.3.2}GPU computing}{300}} +\newlabel{ch12:sec:03.02}{{12.3.2}{300}} +\@writefile{toc}{\contentsline {subsection}{\numberline {12.3.3}Data communications}{301}} +\newlabel{ch12:sec:03.03}{{12.3.3}{301}} +\@writefile{lof}{\contentsline {figure}{\numberline {12.2}{\ignorespaces Data exchanges between \textit {Node 1} and its neighbors \textit {Node 0}, \textit {Node 2} and \textit {Node 3}.\relax }}{302}} +\newlabel{ch12:fig:02}{{12.2}{302}} +\@writefile{lof}{\contentsline {figure}{\numberline {12.3}{\ignorespaces Columns reordering of a sparse sub-matrix.\relax }}{303}} +\newlabel{ch12:fig:03}{{12.3}{303}} +\@writefile{toc}{\contentsline {section}{\numberline {12.4}Experimental results}{304}} +\newlabel{ch12:sec:04}{{12.4}{304}} +\@writefile{lof}{\contentsline {figure}{\numberline {12.4}{\ignorespaces General scheme of the GPU cluster of tests composed of six machines, each with two GPUs.\relax }}{304}} +\newlabel{ch12:fig:04}{{12.4}{304}} +\@writefile{lof}{\contentsline {figure}{\numberline {12.5}{\ignorespaces Sketches of sparse matrices chosen from the Davis collection.\relax }}{305}} +\newlabel{ch12:fig:05}{{12.5}{305}} +\@writefile{lot}{\contentsline {table}{\numberline {12.1}{\ignorespaces Main characteristics of sparse matrices chosen from the Davis collection.\relax }}{305}} +\newlabel{ch12:tab:01}{{12.1}{305}} +\@writefile{lot}{\contentsline {table}{\numberline {12.2}{\ignorespaces Performances of the parallel CG method on a cluster of 24 CPU cores vs. on a cluster of 12 GPUs.\relax }}{306}} +\newlabel{ch12:tab:02}{{12.2}{306}} +\@writefile{lot}{\contentsline {table}{\numberline {12.3}{\ignorespaces Performances of the parallel GMRES method on a cluster 24 CPU cores vs. on cluster of 12 GPUs.\relax }}{306}} +\newlabel{ch12:tab:03}{{12.3}{306}} +\newlabel{ch12:eq:20}{{12.20}{307}} +\@writefile{lof}{\contentsline {figure}{\numberline {12.6}{\ignorespaces Parallel generation of a large sparse matrix by four computing nodes.\relax }}{308}} +\newlabel{ch12:fig:06}{{12.6}{308}} +\@writefile{lot}{\contentsline {table}{\numberline {12.4}{\ignorespaces Main characteristics of sparse banded matrices generated from those of the Davis collection.\relax }}{308}} +\newlabel{ch12:tab:04}{{12.4}{308}} +\@writefile{lot}{\contentsline {table}{\numberline {12.5}{\ignorespaces Performances of the parallel CG method for solving linear systems associated to sparse banded matrices on a cluster of 24 CPU cores vs. on a cluster of 12 GPUs.\relax }}{309}} +\newlabel{ch12:tab:05}{{12.5}{309}} +\@writefile{toc}{\contentsline {section}{\numberline {12.5}Conclusion}{309}} +\newlabel{ch12:sec:05}{{12.5}{309}} +\@writefile{lot}{\contentsline {table}{\numberline {12.6}{\ignorespaces Performances of the parallel GMRES method for solving linear systems associated to sparse banded matrices on a cluster of 24 CPU cores vs. on a cluster of 12 GPUs.\relax }}{310}} +\newlabel{ch12:tab:06}{{12.6}{310}} +\@writefile{toc}{\contentsline {section}{Bibliography}{310}} \@setckpt{Chapters/chapter12/ch12}{ -\setcounter{page}{310} +\setcounter{page}{312} \setcounter{equation}{22} \setcounter{enumi}{2} \setcounter{enumii}{0} @@ -103,9 +103,9 @@ \setcounter{lstnumber}{50} \setcounter{ContinuedFloat}{0} \setcounter{AlgoLine}{29} -\setcounter{algocfline}{13} -\setcounter{algocfproc}{13} -\setcounter{algocf}{13} +\setcounter{algocfline}{15} +\setcounter{algocfproc}{15} +\setcounter{algocf}{15} \setcounter{nprt@mantissa@digitsbefore}{0} \setcounter{nprt@mantissa@digitsafter}{0} \setcounter{nprt@exponent@digitsbefore}{0} diff --git a/BookGPU/Chapters/chapter16/ch16.aux b/BookGPU/Chapters/chapter16/ch16.aux index 75d0256..3a5b76e 100644 --- a/BookGPU/Chapters/chapter16/ch16.aux +++ b/BookGPU/Chapters/chapter16/ch16.aux @@ -4,72 +4,72 @@ \@writefile{toc}{\author{H. Wang}{}} \@writefile{toc}{\author{H. Yu}{}} \@writefile{loa}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {chapter}{\numberline {16}GPU-Accelerated Envelope-Following Method}{375}} +\@writefile{toc}{\contentsline {chapter}{\numberline {16}GPU-Accelerated Envelope-Following Method}{377}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {section}{\numberline {16.1}Introduction}{375}} -\newlabel{fig:ef1}{{16.1(a)}{377}} -\newlabel{sub@fig:ef1}{{(a)}{377}} -\newlabel{fig:ef2}{{16.1(b)}{377}} -\newlabel{sub@fig:ef2}{{(b)}{377}} -\@writefile{lof}{\contentsline {figure}{\numberline {16.1}{\ignorespaces Transient envelope-following analysis. (Both two figures reflect backward-Euler style envelope-following.)\relax }}{377}} -\@writefile{lof}{\contentsline {subfigure}{\numberline{(a)}{\ignorespaces {Illustration of one envelope skip.}}}{377}} -\@writefile{lof}{\contentsline {subfigure}{\numberline{(b)}{\ignorespaces {The envelope changes in a slow time scale.}}}{377}} -\newlabel{fig:ef_intro}{{16.1}{377}} -\@writefile{toc}{\contentsline {section}{\numberline {16.2}The envelope-following method in a nutshell}{378}} -\newlabel{sec:ef}{{16.2}{378}} -\newlabel{eq:dae}{{16.1}{378}} -\newlabel{eq:Newton}{{16.2}{379}} -\newlabel{eq:A}{{16.3}{379}} -\@writefile{toc}{\contentsline {section}{\numberline {16.3}New parallel envelope-following method}{380}} -\newlabel{sec:gmres}{{16.3}{380}} -\@writefile{toc}{\contentsline {subsection}{\numberline {16.3.1}GMRES solver for Newton update equation}{380}} -\@writefile{lof}{\contentsline {figure}{\numberline {16.2}{\ignorespaces The flow of envelope-following method.\relax }}{381}} -\newlabel{fig:ef_flow}{{16.2}{381}} -\@writefile{loa}{\contentsline {algocf}{\numberline {17}{\ignorespaces Standard GMRES algorithm.\relax }}{382}} -\newlabel{alg:GMRES}{{17}{382}} -\newlabel{line:mvp}{{5}{382}} -\newlabel{line:newnorm}{{11}{382}} -\@writefile{toc}{\contentsline {subsection}{\numberline {16.3.2}Parallelization on GPU platforms}{382}} -\newlabel{sec:gpu}{{16.3.2}{382}} -\@writefile{lof}{\contentsline {figure}{\numberline {16.3}{\ignorespaces GPU parallel solver for envelope-following update.\relax }}{383}} -\newlabel{fig:gmres}{{16.3}{383}} -\@writefile{toc}{\contentsline {subsection}{\numberline {16.3.3}Gear-2 based sensitivity calculation}{384}} -\newlabel{sec:gear}{{16.3.3}{384}} -\newlabel{eq:BE}{{16.4}{384}} -\newlabel{eq:sens1}{{16.5}{384}} -\newlabel{eq:Gear_t2}{{16.6}{385}} -\newlabel{eq:sens2}{{16.7}{385}} -\newlabel{eq:Gear_t3}{{16.8}{385}} -\newlabel{eq:sensM}{{16.9}{385}} -\@writefile{loa}{\contentsline {algocf}{\numberline {18}{\ignorespaces The matrix-free method for Krylov subspace construction.\relax }}{386}} -\newlabel{alg:mf_Gear}{{18}{386}} -\newlabel{line:mf_Gear_loop}{{4}{386}} -\newlabel{line:shift}{{8}{386}} -\@writefile{toc}{\contentsline {section}{\numberline {16.4}Numerical examples}{386}} -\newlabel{sec:exp}{{16.4}{386}} -\@writefile{lof}{\contentsline {figure}{\numberline {16.4}{\ignorespaces Diagram of a zero-voltage quasi-resonant flyback converter.\relax }}{387}} -\newlabel{fig:flyback}{{16.4}{387}} -\@writefile{lof}{\contentsline {figure}{\numberline {16.5}{\ignorespaces Illustration of power/ground network model.\relax }}{387}} -\newlabel{fig:pg}{{16.5}{387}} -\newlabel{fig:flybackWhole}{{16.6(a)}{388}} -\newlabel{sub@fig:flybackWhole}{{(a)}{388}} -\newlabel{fig:flybackZoom}{{16.6(b)}{388}} -\newlabel{sub@fig:flybackZoom}{{(b)}{388}} -\@writefile{lof}{\contentsline {figure}{\numberline {16.6}{\ignorespaces Flyback converter solution calculated by envelope-following. The red curve is traditional SPICE simulation result, and the back curve is the envelope-following output with simulation points marked.\relax }}{388}} -\@writefile{lof}{\contentsline {subfigure}{\numberline{(a)}{\ignorespaces {The whole plot}}}{388}} -\@writefile{lof}{\contentsline {subfigure}{\numberline{(b)}{\ignorespaces {Detail of one EF simulation period}}}{388}} -\newlabel{fig:flyback_wave}{{16.6}{388}} -\@writefile{lof}{\contentsline {figure}{\numberline {16.7}{\ignorespaces Buck converter solution calculated by envelope-following.\relax }}{389}} -\newlabel{fig:buck_wave}{{16.7}{389}} -\@writefile{lot}{\contentsline {table}{\numberline {16.1}{\ignorespaces CPU and GPU time comparisons (in seconds) for solving Newton update equation with the proposed Gear-2 sensitivity. \relax }}{389}} -\newlabel{table:circuit}{{16.1}{389}} -\@writefile{toc}{\contentsline {section}{\numberline {16.5}Summary}{390}} -\newlabel{sec:summary}{{16.5}{390}} -\@writefile{toc}{\contentsline {section}{\numberline {16.6}Glossary}{390}} -\@writefile{toc}{\contentsline {section}{Bibliography}{390}} +\@writefile{toc}{\contentsline {section}{\numberline {16.1}Introduction}{377}} +\newlabel{fig:ef1}{{16.1(a)}{379}} +\newlabel{sub@fig:ef1}{{(a)}{379}} +\newlabel{fig:ef2}{{16.1(b)}{379}} +\newlabel{sub@fig:ef2}{{(b)}{379}} +\@writefile{lof}{\contentsline {figure}{\numberline {16.1}{\ignorespaces Transient envelope-following analysis. (Both two figures reflect backward-Euler style envelope-following.)\relax }}{379}} +\@writefile{lof}{\contentsline {subfigure}{\numberline{(a)}{\ignorespaces {Illustration of one envelope skip.}}}{379}} +\@writefile{lof}{\contentsline {subfigure}{\numberline{(b)}{\ignorespaces {The envelope changes in a slow time scale.}}}{379}} +\newlabel{fig:ef_intro}{{16.1}{379}} +\@writefile{toc}{\contentsline {section}{\numberline {16.2}The envelope-following method in a nutshell}{380}} +\newlabel{sec:ef}{{16.2}{380}} +\newlabel{eq:dae}{{16.1}{380}} +\newlabel{eq:Newton}{{16.2}{381}} +\newlabel{eq:A}{{16.3}{381}} +\@writefile{toc}{\contentsline {section}{\numberline {16.3}New parallel envelope-following method}{382}} +\newlabel{sec:gmres}{{16.3}{382}} +\@writefile{toc}{\contentsline {subsection}{\numberline {16.3.1}GMRES solver for Newton update equation}{382}} +\@writefile{lof}{\contentsline {figure}{\numberline {16.2}{\ignorespaces The flow of envelope-following method.\relax }}{383}} +\newlabel{fig:ef_flow}{{16.2}{383}} +\@writefile{loa}{\contentsline {algocf}{\numberline {19}{\ignorespaces Standard GMRES algorithm.\relax }}{384}} +\newlabel{alg:GMRES}{{19}{384}} +\newlabel{line:mvp}{{5}{384}} +\newlabel{line:newnorm}{{11}{384}} +\@writefile{toc}{\contentsline {subsection}{\numberline {16.3.2}Parallelization on GPU platforms}{384}} +\newlabel{sec:gpu}{{16.3.2}{384}} +\@writefile{lof}{\contentsline {figure}{\numberline {16.3}{\ignorespaces GPU parallel solver for envelope-following update.\relax }}{385}} +\newlabel{fig:gmres}{{16.3}{385}} +\@writefile{toc}{\contentsline {subsection}{\numberline {16.3.3}Gear-2 based sensitivity calculation}{386}} +\newlabel{sec:gear}{{16.3.3}{386}} +\newlabel{eq:BE}{{16.4}{386}} +\newlabel{eq:sens1}{{16.5}{386}} +\newlabel{eq:Gear_t2}{{16.6}{387}} +\newlabel{eq:sens2}{{16.7}{387}} +\newlabel{eq:Gear_t3}{{16.8}{387}} +\newlabel{eq:sensM}{{16.9}{387}} +\@writefile{loa}{\contentsline {algocf}{\numberline {20}{\ignorespaces The matrix-free method for Krylov subspace construction.\relax }}{388}} +\newlabel{alg:mf_Gear}{{20}{388}} +\newlabel{line:mf_Gear_loop}{{4}{388}} +\newlabel{line:shift}{{8}{388}} +\@writefile{toc}{\contentsline {section}{\numberline {16.4}Numerical examples}{388}} +\newlabel{sec:exp}{{16.4}{388}} +\@writefile{lof}{\contentsline {figure}{\numberline {16.4}{\ignorespaces Diagram of a zero-voltage quasi-resonant flyback converter.\relax }}{389}} +\newlabel{fig:flyback}{{16.4}{389}} +\@writefile{lof}{\contentsline {figure}{\numberline {16.5}{\ignorespaces Illustration of power/ground network model.\relax }}{389}} +\newlabel{fig:pg}{{16.5}{389}} +\newlabel{fig:flybackWhole}{{16.6(a)}{390}} +\newlabel{sub@fig:flybackWhole}{{(a)}{390}} +\newlabel{fig:flybackZoom}{{16.6(b)}{390}} +\newlabel{sub@fig:flybackZoom}{{(b)}{390}} +\@writefile{lof}{\contentsline {figure}{\numberline {16.6}{\ignorespaces Flyback converter solution calculated by envelope-following. The red curve is traditional SPICE simulation result, and the back curve is the envelope-following output with simulation points marked.\relax }}{390}} +\@writefile{lof}{\contentsline {subfigure}{\numberline{(a)}{\ignorespaces {The whole plot}}}{390}} +\@writefile{lof}{\contentsline {subfigure}{\numberline{(b)}{\ignorespaces {Detail of one EF simulation period}}}{390}} +\newlabel{fig:flyback_wave}{{16.6}{390}} +\@writefile{lof}{\contentsline {figure}{\numberline {16.7}{\ignorespaces Buck converter solution calculated by envelope-following.\relax }}{391}} +\newlabel{fig:buck_wave}{{16.7}{391}} +\@writefile{lot}{\contentsline {table}{\numberline {16.1}{\ignorespaces CPU and GPU time comparisons (in seconds) for solving Newton update equation with the proposed Gear-2 sensitivity. \relax }}{391}} +\newlabel{table:circuit}{{16.1}{391}} +\@writefile{toc}{\contentsline {section}{\numberline {16.5}Summary}{392}} +\newlabel{sec:summary}{{16.5}{392}} +\@writefile{toc}{\contentsline {section}{\numberline {16.6}Glossary}{392}} +\@writefile{toc}{\contentsline {section}{Bibliography}{392}} \@setckpt{Chapters/chapter16/ch16}{ -\setcounter{page}{392} +\setcounter{page}{394} \setcounter{equation}{9} \setcounter{enumi}{2} \setcounter{enumii}{0} @@ -95,9 +95,9 @@ \setcounter{lstnumber}{9} \setcounter{ContinuedFloat}{0} \setcounter{AlgoLine}{8} -\setcounter{algocfline}{18} -\setcounter{algocfproc}{18} -\setcounter{algocf}{18} +\setcounter{algocfline}{20} +\setcounter{algocfproc}{20} +\setcounter{algocf}{20} \setcounter{nprt@mantissa@digitsbefore}{0} \setcounter{nprt@mantissa@digitsafter}{0} \setcounter{nprt@exponent@digitsbefore}{0} diff --git a/BookGPU/Chapters/chapter17/ch17.aux b/BookGPU/Chapters/chapter17/ch17.aux index 005df6d..1745216 100644 --- a/BookGPU/Chapters/chapter17/ch17.aux +++ b/BookGPU/Chapters/chapter17/ch17.aux @@ -6,76 +6,76 @@ \@writefile{toc}{\author{B\IeC {\'e}n\IeC {\'e}dicte Herrmann}{}} \@writefile{toc}{\author{Laurent Philippe}{}} \@writefile{loa}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {chapter}{\numberline {17}Implementing Multi-Agent Systems on GPU}{395}} +\@writefile{toc}{\contentsline {chapter}{\numberline {17}Implementing Multi-Agent Systems on GPU}{397}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} -\newlabel{chapter17}{{17}{396}} -\@writefile{toc}{\contentsline {section}{\numberline {17.1}Introduction}{396}} -\newlabel{ch17:intro}{{17.1}{396}} -\@writefile{toc}{\contentsline {section}{\numberline {17.2}Running Agent-Based Simulations}{397}} -\newlabel{ch17:ABM}{{17.2}{397}} -\@writefile{toc}{\contentsline {subsection}{\numberline {17.2.1}Multi-agent systems and parallelism}{397}} -\@writefile{toc}{\contentsline {subsection}{\numberline {17.2.2}MAS Implementation on GPU}{399}} -\newlabel{ch17:subsec:gpu}{{17.2.2}{399}} -\@writefile{toc}{\contentsline {section}{\numberline {17.3}A first practical example}{400}} -\newlabel{ch17:sec:1stmodel}{{17.3}{400}} -\@writefile{toc}{\contentsline {subsection}{\numberline {17.3.1}The Collembola model}{400}} -\newlabel{ch17:subsec:collembolamodel}{{17.3.1}{400}} -\@writefile{lof}{\contentsline {figure}{\numberline {17.1}{\ignorespaces Evolution algorithm of Collembola model\relax }}{401}} -\newlabel{ch17:fig:collem_algorithm}{{17.1}{401}} -\@writefile{toc}{\contentsline {subsection}{\numberline {17.3.2}Collembola Implementation}{401}} -\newlabel{ch17:listing:collembola-diffuse}{{17.1}{402}} -\@writefile{lol}{\contentsline {lstlisting}{\numberline {17.1}Collembola OpenCL Diffusion kernel}{402}} -\newlabel{ch17:listing:collembola-reduc}{{17.2}{402}} -\@writefile{lol}{\contentsline {lstlisting}{\numberline {17.2}Collembola OpenCL reduction kernel}{402}} -\@writefile{toc}{\contentsline {subsection}{\numberline {17.3.3}Collembola performance}{403}} -\@writefile{lof}{\contentsline {figure}{\numberline {17.2}{\ignorespaces Performance of the Collembola model on CPU and GPU\relax }}{404}} -\newlabel{ch17:fig:mior_perfs_collem}{{17.2}{404}} -\@writefile{toc}{\contentsline {section}{\numberline {17.4}Second example}{404}} -\newlabel{ch17:sec:2ndmodel}{{17.4}{404}} -\@writefile{toc}{\contentsline {subsection}{\numberline {17.4.1}The MIOR model}{404}} -\newlabel{ch17:subsec:miormodel}{{17.4.1}{404}} -\@writefile{loa}{\contentsline {algocf}{\numberline {19}{\ignorespaces Evolution step of each Meta-Mior (microbial colony) agent\relax }}{405}} -\newlabel{ch17:seqalgo}{{19}{405}} -\@writefile{toc}{\contentsline {subsection}{\numberline {17.4.2}MIOR Implementation}{405}} -\@writefile{lof}{\contentsline {figure}{\numberline {17.3}{\ignorespaces Execution distribution retained on GPU\relax }}{406}} -\newlabel{ch17:fig:gpu_distribution}{{17.3}{406}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {17.4.2.1}Execution mapping on GPU}{406}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {17.4.2.2}Data structures translation}{407}} -\newlabel{ch17:subsec:datastructures}{{17.4.2.2}{407}} -\newlabel{ch17:listing:mior_data_structures}{{17.3}{407}} -\@writefile{lol}{\contentsline {lstlisting}{\numberline {17.3}Main data structures used in a MIOR simulation}{407}} -\@writefile{lof}{\contentsline {figure}{\numberline {17.4}{\ignorespaces Compact representation of the topology of a MIOR simulation\relax }}{408}} -\newlabel{ch17:fig:csr_representation}{{17.4}{408}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {17.4.2.3}Critical resources access management}{408}} -\newlabel{ch17:subsec:concurrency}{{17.4.2.3}{408}} -\newlabel{ch17:listing:mior_kernels}{{17.4}{409}} -\@writefile{lol}{\contentsline {lstlisting}{\numberline {17.4}Main MIOR kernel}{409}} -\newlabel{ch17:fig:mior_launcher}{{17.5}{410}} -\@writefile{lol}{\contentsline {lstlisting}{\numberline {17.5}MIOR simulation launcher}{410}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {17.4.2.4}Termination detection}{410}} -\@writefile{toc}{\contentsline {subsection}{\numberline {17.4.3}Performance of MIOR implementations}{411}} -\newlabel{ch17:subsec:miorexperiments}{{17.4.3}{411}} -\@writefile{lof}{\contentsline {figure}{\numberline {17.5}{\ignorespaces CPU and GPU performance on a Tesla C1060 node\relax }}{412}} -\newlabel{ch17:fig:mior_perfs_tesla}{{17.5}{412}} -\@writefile{lof}{\contentsline {figure}{\numberline {17.6}{\ignorespaces CPU and GPU performance on a personal computer with a Geforce 8800GT\relax }}{413}} -\newlabel{ch17:fig:mior_perfs_8800gt}{{17.6}{413}} -\@writefile{toc}{\contentsline {section}{\numberline {17.5}Analysis and recommendations}{413}} -\newlabel{ch17:analysis}{{17.5}{413}} -\@writefile{lof}{\contentsline {figure}{\numberline {17.7}{\ignorespaces Execution time of one multi-simulation kernel on the Tesla platform\relax }}{414}} -\newlabel{ch17:fig:monokernel_graph}{{17.7}{414}} -\@writefile{lof}{\contentsline {figure}{\numberline {17.8}{\ignorespaces Total execution time for 1000 simulations on the Tesla platform, while varying the number of simulations for each kernel\relax }}{414}} -\newlabel{ch17:fig:multikernel_graph}{{17.8}{414}} -\@writefile{toc}{\contentsline {subsection}{\numberline {17.5.1}Analysis}{414}} -\@writefile{toc}{\contentsline {subsection}{\numberline {17.5.2}MAS execution workflow}{415}} -\@writefile{toc}{\contentsline {subsection}{\numberline {17.5.3}Implementation challenges}{416}} -\@writefile{toc}{\contentsline {subsection}{\numberline {17.5.4}MCSMA}{416}} -\newlabel{ch17:Mcsma}{{17.5.4}{416}} -\@writefile{toc}{\contentsline {section}{\numberline {17.6}Conclusion}{417}} -\newlabel{ch17:conclusion}{{17.6}{417}} -\@writefile{toc}{\contentsline {section}{Bibliography}{418}} +\newlabel{chapter17}{{17}{398}} +\@writefile{toc}{\contentsline {section}{\numberline {17.1}Introduction}{398}} +\newlabel{ch17:intro}{{17.1}{398}} +\@writefile{toc}{\contentsline {section}{\numberline {17.2}Running Agent-Based Simulations}{399}} +\newlabel{ch17:ABM}{{17.2}{399}} +\@writefile{toc}{\contentsline {subsection}{\numberline {17.2.1}Multi-agent systems and parallelism}{399}} +\@writefile{toc}{\contentsline {subsection}{\numberline {17.2.2}MAS Implementation on GPU}{401}} +\newlabel{ch17:subsec:gpu}{{17.2.2}{401}} +\@writefile{toc}{\contentsline {section}{\numberline {17.3}A first practical example}{402}} +\newlabel{ch17:sec:1stmodel}{{17.3}{402}} +\@writefile{toc}{\contentsline {subsection}{\numberline {17.3.1}The Collembola model}{402}} +\newlabel{ch17:subsec:collembolamodel}{{17.3.1}{402}} +\@writefile{lof}{\contentsline {figure}{\numberline {17.1}{\ignorespaces Evolution algorithm of Collembola model\relax }}{403}} +\newlabel{ch17:fig:collem_algorithm}{{17.1}{403}} +\@writefile{toc}{\contentsline {subsection}{\numberline {17.3.2}Collembola Implementation}{403}} +\newlabel{ch17:listing:collembola-diffuse}{{17.1}{404}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {17.1}Collembola OpenCL Diffusion kernel}{404}} +\newlabel{ch17:listing:collembola-reduc}{{17.2}{404}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {17.2}Collembola OpenCL reduction kernel}{404}} +\@writefile{toc}{\contentsline {subsection}{\numberline {17.3.3}Collembola performance}{405}} +\@writefile{lof}{\contentsline {figure}{\numberline {17.2}{\ignorespaces Performance of the Collembola model on CPU and GPU\relax }}{406}} +\newlabel{ch17:fig:mior_perfs_collem}{{17.2}{406}} +\@writefile{toc}{\contentsline {section}{\numberline {17.4}Second example}{406}} +\newlabel{ch17:sec:2ndmodel}{{17.4}{406}} +\@writefile{toc}{\contentsline {subsection}{\numberline {17.4.1}The MIOR model}{406}} +\newlabel{ch17:subsec:miormodel}{{17.4.1}{406}} +\@writefile{loa}{\contentsline {algocf}{\numberline {21}{\ignorespaces Evolution step of each Meta-Mior (microbial colony) agent\relax }}{407}} +\newlabel{ch17:seqalgo}{{21}{407}} +\@writefile{toc}{\contentsline {subsection}{\numberline {17.4.2}MIOR Implementation}{407}} +\@writefile{lof}{\contentsline {figure}{\numberline {17.3}{\ignorespaces Execution distribution retained on GPU\relax }}{408}} +\newlabel{ch17:fig:gpu_distribution}{{17.3}{408}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {17.4.2.1}Execution mapping on GPU}{408}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {17.4.2.2}Data structures translation}{409}} +\newlabel{ch17:subsec:datastructures}{{17.4.2.2}{409}} +\newlabel{ch17:listing:mior_data_structures}{{17.3}{409}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {17.3}Main data structures used in a MIOR simulation}{409}} +\@writefile{lof}{\contentsline {figure}{\numberline {17.4}{\ignorespaces Compact representation of the topology of a MIOR simulation\relax }}{410}} +\newlabel{ch17:fig:csr_representation}{{17.4}{410}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {17.4.2.3}Critical resources access management}{410}} +\newlabel{ch17:subsec:concurrency}{{17.4.2.3}{410}} +\newlabel{ch17:listing:mior_kernels}{{17.4}{411}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {17.4}Main MIOR kernel}{411}} +\newlabel{ch17:fig:mior_launcher}{{17.5}{412}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {17.5}MIOR simulation launcher}{412}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {17.4.2.4}Termination detection}{412}} +\@writefile{toc}{\contentsline {subsection}{\numberline {17.4.3}Performance of MIOR implementations}{413}} +\newlabel{ch17:subsec:miorexperiments}{{17.4.3}{413}} +\@writefile{lof}{\contentsline {figure}{\numberline {17.5}{\ignorespaces CPU and GPU performance on a Tesla C1060 node\relax }}{414}} +\newlabel{ch17:fig:mior_perfs_tesla}{{17.5}{414}} +\@writefile{lof}{\contentsline {figure}{\numberline {17.6}{\ignorespaces CPU and GPU performance on a personal computer with a Geforce 8800GT\relax }}{415}} +\newlabel{ch17:fig:mior_perfs_8800gt}{{17.6}{415}} +\@writefile{toc}{\contentsline {section}{\numberline {17.5}Analysis and recommendations}{415}} +\newlabel{ch17:analysis}{{17.5}{415}} +\@writefile{lof}{\contentsline {figure}{\numberline {17.7}{\ignorespaces Execution time of one multi-simulation kernel on the Tesla platform\relax }}{416}} +\newlabel{ch17:fig:monokernel_graph}{{17.7}{416}} +\@writefile{lof}{\contentsline {figure}{\numberline {17.8}{\ignorespaces Total execution time for 1000 simulations on the Tesla platform, while varying the number of simulations for each kernel\relax }}{416}} +\newlabel{ch17:fig:multikernel_graph}{{17.8}{416}} +\@writefile{toc}{\contentsline {subsection}{\numberline {17.5.1}Analysis}{416}} +\@writefile{toc}{\contentsline {subsection}{\numberline {17.5.2}MAS execution workflow}{417}} +\@writefile{toc}{\contentsline {subsection}{\numberline {17.5.3}Implementation challenges}{418}} +\@writefile{toc}{\contentsline {subsection}{\numberline {17.5.4}MCSMA}{418}} +\newlabel{ch17:Mcsma}{{17.5.4}{418}} +\@writefile{toc}{\contentsline {section}{\numberline {17.6}Conclusion}{419}} +\newlabel{ch17:conclusion}{{17.6}{419}} +\@writefile{toc}{\contentsline {section}{Bibliography}{420}} \@setckpt{Chapters/chapter17/ch17}{ -\setcounter{page}{422} +\setcounter{page}{424} \setcounter{equation}{0} \setcounter{enumi}{3} \setcounter{enumii}{0} @@ -101,9 +101,9 @@ \setcounter{lstnumber}{21} \setcounter{ContinuedFloat}{0} \setcounter{AlgoLine}{17} -\setcounter{algocfline}{19} -\setcounter{algocfproc}{19} -\setcounter{algocf}{19} +\setcounter{algocfline}{21} +\setcounter{algocfproc}{21} +\setcounter{algocf}{21} \setcounter{nprt@mantissa@digitsbefore}{0} \setcounter{nprt@mantissa@digitsafter}{0} \setcounter{nprt@exponent@digitsbefore}{0} diff --git a/BookGPU/Chapters/chapter18/ch18.aux b/BookGPU/Chapters/chapter18/ch18.aux index 884902a..4420c4d 100644 --- a/BookGPU/Chapters/chapter18/ch18.aux +++ b/BookGPU/Chapters/chapter18/ch18.aux @@ -2,45 +2,45 @@ \@writefile{toc}{\author{Rapha\IeC {\"e}l Couturier}{}} \@writefile{toc}{\author{Christophe Guyeux}{}} \@writefile{loa}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {chapter}{\numberline {18}Pseudorandom Number Generator on GPU}{423}} +\@writefile{toc}{\contentsline {chapter}{\numberline {18}Pseudorandom Number Generator on GPU}{425}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} -\newlabel{chapter18}{{18}{423}} -\@writefile{toc}{\contentsline {section}{\numberline {18.1}Introduction}{423}} -\@writefile{toc}{\contentsline {section}{\numberline {18.2}Basic Remindees}{425}} -\newlabel{section:BASIC RECALLS}{{18.2}{425}} -\@writefile{toc}{\contentsline {subsection}{\numberline {18.2.1}A Short Presentation of Chaos}{425}} -\@writefile{toc}{\contentsline {subsection}{\numberline {18.2.2}On Devaney's Definition of Chaos}{425}} -\newlabel{sec:dev}{{18.2.2}{425}} -\newlabel{Devaney}{{18.1}{425}} -\@writefile{toc}{\contentsline {subsection}{\numberline {18.2.3}Chaotic iterations}{426}} -\newlabel{subsection:Chaotic iterations}{{18.2.3}{426}} -\newlabel{Chaotic iterations}{{2}{426}} -\newlabel{eq:generalIC}{{18.4}{427}} -\newlabel{equation Oplus}{{18.5}{427}} -\@writefile{toc}{\contentsline {section}{\numberline {18.3}Toward Efficiency and Improvement for CI PRNG}{427}} -\newlabel{sec:efficient PRNG}{{18.3}{427}} -\@writefile{toc}{\contentsline {subsection}{\numberline {18.3.1}First Efficient Implementation of a PRNG based on Chaotic Iterations}{427}} -\newlabel{algo:seqCIPRNG}{{18.1}{427}} -\@writefile{lol}{\contentsline {lstlisting}{\numberline {18.1}C code of the sequential PRNG based on chaotic iterations}{427}} -\@writefile{toc}{\contentsline {subsection}{\numberline {18.3.2}Efficient PRNGs based on Chaotic Iterations on GPU}{428}} -\newlabel{sec:efficient PRNG gpu}{{18.3.2}{428}} -\@writefile{toc}{\contentsline {subsection}{\numberline {18.3.3}Naive Version for GPU}{428}} -\@writefile{loa}{\contentsline {algocf}{\numberline {20}{\ignorespaces Main kernel of the GPU ``naive'' version of the PRNG based on chaotic iterations\relax }}{429}} -\newlabel{algo:gpu_kernel}{{20}{429}} -\@writefile{toc}{\contentsline {subsection}{\numberline {18.3.4}Improved Version for GPU}{429}} -\newlabel{IR}{{21}{430}} -\@writefile{loa}{\contentsline {algocf}{\numberline {21}{\ignorespaces Main kernel for the chaotic iterations based PRNG GPU efficient version\relax }}{430}} -\newlabel{algo:gpu_kernel2}{{21}{430}} -\@writefile{toc}{\contentsline {subsection}{\numberline {18.3.5}Chaos Evaluation of the Improved Version}{430}} -\@writefile{toc}{\contentsline {section}{\numberline {18.4}Experiments}{431}} -\newlabel{sec:experiments}{{18.4}{431}} -\@writefile{toc}{\contentsline {section}{\numberline {18.5}Summary}{431}} -\@writefile{lof}{\contentsline {figure}{\numberline {18.1}{\ignorespaces Quantity of pseudorandom numbers generated per second with the xorlike-based PRNG\relax }}{432}} -\newlabel{fig:time_xorlike_gpu}{{18.1}{432}} -\@writefile{toc}{\contentsline {section}{Bibliography}{433}} +\newlabel{chapter18}{{18}{425}} +\@writefile{toc}{\contentsline {section}{\numberline {18.1}Introduction}{425}} +\@writefile{toc}{\contentsline {section}{\numberline {18.2}Basic Remindees}{427}} +\newlabel{section:BASIC RECALLS}{{18.2}{427}} +\@writefile{toc}{\contentsline {subsection}{\numberline {18.2.1}A Short Presentation of Chaos}{427}} +\@writefile{toc}{\contentsline {subsection}{\numberline {18.2.2}On Devaney's Definition of Chaos}{427}} +\newlabel{sec:dev}{{18.2.2}{427}} +\newlabel{Devaney}{{18.1}{427}} +\@writefile{toc}{\contentsline {subsection}{\numberline {18.2.3}Chaotic iterations}{428}} +\newlabel{subsection:Chaotic iterations}{{18.2.3}{428}} +\newlabel{Chaotic iterations}{{2}{428}} +\newlabel{eq:generalIC}{{18.4}{429}} +\newlabel{equation Oplus}{{18.5}{429}} +\@writefile{toc}{\contentsline {section}{\numberline {18.3}Toward Efficiency and Improvement for CI PRNG}{429}} +\newlabel{sec:efficient PRNG}{{18.3}{429}} +\@writefile{toc}{\contentsline {subsection}{\numberline {18.3.1}First Efficient Implementation of a PRNG based on Chaotic Iterations}{429}} +\newlabel{algo:seqCIPRNG}{{18.1}{429}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {18.1}C code of the sequential PRNG based on chaotic iterations}{429}} +\@writefile{toc}{\contentsline {subsection}{\numberline {18.3.2}Efficient PRNGs based on Chaotic Iterations on GPU}{430}} +\newlabel{sec:efficient PRNG gpu}{{18.3.2}{430}} +\@writefile{toc}{\contentsline {subsection}{\numberline {18.3.3}Naive Version for GPU}{430}} +\@writefile{loa}{\contentsline {algocf}{\numberline {22}{\ignorespaces Main kernel of the GPU ``naive'' version of the PRNG based on chaotic iterations\relax }}{431}} +\newlabel{algo:gpu_kernel}{{22}{431}} +\@writefile{toc}{\contentsline {subsection}{\numberline {18.3.4}Improved Version for GPU}{431}} +\newlabel{IR}{{23}{432}} +\@writefile{loa}{\contentsline {algocf}{\numberline {23}{\ignorespaces Main kernel for the chaotic iterations based PRNG GPU efficient version\relax }}{432}} +\newlabel{algo:gpu_kernel2}{{23}{432}} +\@writefile{toc}{\contentsline {subsection}{\numberline {18.3.5}Chaos Evaluation of the Improved Version}{432}} +\@writefile{toc}{\contentsline {section}{\numberline {18.4}Experiments}{433}} +\newlabel{sec:experiments}{{18.4}{433}} +\@writefile{toc}{\contentsline {section}{\numberline {18.5}Summary}{433}} +\@writefile{lof}{\contentsline {figure}{\numberline {18.1}{\ignorespaces Quantity of pseudorandom numbers generated per second with the xorlike-based PRNG\relax }}{434}} +\newlabel{fig:time_xorlike_gpu}{{18.1}{434}} +\@writefile{toc}{\contentsline {section}{Bibliography}{435}} \@setckpt{Chapters/chapter18/ch18}{ -\setcounter{page}{435} +\setcounter{page}{437} \setcounter{equation}{5} \setcounter{enumi}{3} \setcounter{enumii}{0} @@ -66,9 +66,9 @@ \setcounter{lstnumber}{15} \setcounter{ContinuedFloat}{0} \setcounter{AlgoLine}{14} -\setcounter{algocfline}{21} -\setcounter{algocfproc}{21} -\setcounter{algocf}{21} +\setcounter{algocfline}{23} +\setcounter{algocfproc}{23} +\setcounter{algocf}{23} \setcounter{nprt@mantissa@digitsbefore}{0} \setcounter{nprt@mantissa@digitsafter}{0} \setcounter{nprt@exponent@digitsbefore}{0} diff --git a/BookGPU/Chapters/chapter7/ch7.tex b/BookGPU/Chapters/chapter7/ch7.tex index e4ffb0a..c18d417 100644 --- a/BookGPU/Chapters/chapter7/ch7.tex +++ b/BookGPU/Chapters/chapter7/ch7.tex @@ -819,10 +819,12 @@ Ideally, the ratio $\mathcal{C}_\mathcal{G}/\mathcal{C}_\mathcal{F}$ is small an \setlength\figureheight{0.35\textwidth} \setlength\figurewidth{0.37\textwidth} \subfigure[Performance scaling]{ - {\small\input{Chapters/chapter7/figures/PararealScaletestGTX590.tikz}} +% {\small\input{Chapters/chapter7/figures/PararealScaletestGTX590.tikz}} + \includegraphics[width=0.5\textwidth]{Chapters/chapter7/figures/PararealScaletestGTX590_conv.pdf} } \subfigure[Speedup]{ - {\small\input{Chapters/chapter7/figures/PararealSpeedupGTX590.tikz}} + % {\small\input{Chapters/chapter7/figures/PararealSpeedupGTX590.tikz}} + \includegraphics[width=0.5\textwidth]{Chapters/chapter7/figures/PararealSpeedupGTX590_conv.pdf} } \end{center} \caption{(a) Parareal absolute timings for an increasingly number of water waves traveling one wave length, each wave resolution is ($33\times 9$). (b) Parareal speedup for two to sixteen compute nodes compared to the purely sequential single GPU solver. Notice how insensitive the parareal scheme is to the size of the problem solved. Test environment 2.}\label{ch7:fig:DDPA_SPEEDUP} diff --git a/BookGPU/Chapters/chapter7/figures/PararealScaletestGTX590_conv.pdf b/BookGPU/Chapters/chapter7/figures/PararealScaletestGTX590_conv.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1da9279a4f65c19c2db63315e4a7e507eca824d6 GIT binary patch literal 10537 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 literal 0 HcmV?d00001 diff --git a/BookGPU/Chapters/chapter8/ch8.tex b/BookGPU/Chapters/chapter8/ch8.tex index 9352b56..101a552 100644 --- a/BookGPU/Chapters/chapter8/ch8.tex +++ b/BookGPU/Chapters/chapter8/ch8.tex @@ -3,7 +3,7 @@ \chapterauthor{Nouredine Melab}{Universit\'e Lille 1 CNRS/LIFL, INRIA Lille Nord Europe, Cit\'e scientifique - 59655, Villeneuve d'Ascq cedex, France\\} \chapter{GPU-accelerated Tree-based Exact Optimization Methods} - +\label{ch8:GPU-accelerated-tree-based-exact-optimization-methods} \section{Introduction} \label{ch8:introduction} @@ -858,4 +858,4 @@ Experiments show also that the proposed refactoring approach improves the parall In the near future, we plan to extend this work to a cluster of GPU-accelerated multi-core processors. From the application point of view, the objective is to optimally solve challenging and unsolved Flow-Shop instances as we did it for one 50$\times$20 problem instance with grid computing \cite{ch8:Mezmaz_2007}. Finally, we plan to investigate other lower bound functions to deal with other combinatorial optimization problems. -\putbib[Chapters/chapter8/biblio8] \ No newline at end of file +\putbib[Chapters/chapter8/biblio8] -- 2.39.5