diff --git a/fluiddyn_meta/fluiddyn_metapaper.tex b/fluiddyn_meta/fluiddyn_metapaper.tex index 6460967bd66733720f01b53621f51c3cf299b834_Zmx1aWRkeW5fbWV0YS9mbHVpZGR5bl9tZXRhcGFwZXIudGV4..7bb05b960b5b2e5051c304b6704046ec27f8250c_Zmx1aWRkeW5fbWV0YS9mbHVpZGR5bl9tZXRhcGFwZXIudGV4 100644 --- a/fluiddyn_meta/fluiddyn_metapaper.tex +++ b/fluiddyn_meta/fluiddyn_metapaper.tex @@ -533,8 +533,8 @@ \item[Persistent identifier:] https://pypi.org/project/fluiddyn \item[Licence:] CeCILL-B, a BSD compatible French licence. \item[Publisher:] Pierre Augier -\item[Version published:] 0.2.3 -\item[Date published:] 02/05/2018 +\item[Version published:] 0.2.4 +\item[Date published:] 02/07/2018 \end{description} {\bf Code repository} diff --git a/fluidfft/fluidfft_paper.tex b/fluidfft/fluidfft_paper.tex index 6460967bd66733720f01b53621f51c3cf299b834_Zmx1aWRmZnQvZmx1aWRmZnRfcGFwZXIudGV4..7bb05b960b5b2e5051c304b6704046ec27f8250c_Zmx1aWRmZnQvZmx1aWRmZnRfcGFwZXIudGV4 100644 --- a/fluidfft/fluidfft_paper.tex +++ b/fluidfft/fluidfft_paper.tex @@ -107,9 +107,9 @@ to solve big problems faster and when the arrays do not fit in the memory of single computational node. % -A problem is that for one-dimensional FFT, all the data have to be located in -the memory of the process that perform the FFT, so a lot of communication -between processes are needed for 2D and 3D FFT. +A problem is that for one-dimensional FFT, all the data have to be located in the +memory of the process that perform the FFT, so a lot of communications between +processes are needed for 2D and 3D FFT. There are two strategies to distribute an array in the memory, the 1D (or \emph{slab}) decomposition and the 2D (or \emph{pencil}) decomposition. The 1D @@ -117,16 +117,17 @@ from an important limitation in terms of number of MPI processes that can be used. Utilizing 2D decomposition overcomes this limitation. -Some of the well-known libraries are written in C, C++ and Fortran. \libpack{FFTW} -supports MPI using 1D decomposition and hybrid parallelism using MPI and OpenMP. -Other libraries, now implement the 2D decomposition: \libpack{PFFT} -\citep{pippig_pfft2013}, \libpack{P3DFFT} \citep{pekurovsky2012p3dfft}, -\libpack{2decomp\&FFT} and so on. These libraries rely on MPI for the -communications between processes, are optimized for supercomputers and scales well -to hundreds of thousands of cores. However, since there is no common API, it is -not simple to write applications that are able to use these libraries and to -compare their performances. As a result, developers are met with a hard -decision, which is to choose a library before the code is implemented. +Some of the well-known libraries are written in C, C++ and Fortran. The classical +\libpack{FFTW} library supports MPI using 1D decomposition and hybrid parallelism +using MPI and OpenMP. Other libraries, now implement the 2D decomposition: +\libpack{PFFT} \citep{pippig_pfft2013}, \libpack{P3DFFT} +\citep{pekurovsky2012p3dfft}, \libpack{2decomp\&FFT} and so on. These libraries +rely on MPI for the communications between processes, are optimized for +supercomputers and scales well to hundreds of thousands of cores. However, since +there is no common API, it is not simple to write applications that are able to +use these libraries and to compare their performances. As a result, developers are +met with a hard decision, which is to choose a library before the code is +implemented. Apart from CPU-based parallelism, General Purpose computing on Graphical Processing Units (GPGPU) is also gaining traction in scientific computing. @@ -136,7 +137,7 @@ % As explained in the companion paper \citet{fluiddyn}, Python can easily link these libraries through compiled extensions. For a Python -developer, the following packages leverage this approach to perform FFT. +developer, the following packages leverage this approach to perform FFT: \begin{outline} \1 sequential FFT, using: @@ -359,7 +360,7 @@ nx = ny = 100 lx = ly = 2 * pi - oper = OperatorsPseudoSpectral2D(nx, ny, lx, ly, fft='fft2d.with_fftw2d') + oper = OperatorsPseudoSpectral2D(nx, ny, lx, ly, fft="fft2d.with_fftw2d") u = sin(oper.XX + oper.YY) u_fft = oper.fft(u) @@ -371,8 +372,10 @@ A parallelized version of the code above will work out of the box, simply by replacing the FFT class with an MPI-based FFT class, for instance -\codeinline{fft2d.with\_fftwmpi2d}. Even if one finds the methods in the operator -class to be lacking, one can inherit the class and easily create a new method, -for instance using the wavenumber arrays, \codeinline{oper.KX} and +\codeinline{fft2d.with\_fftwmpi2d}. One can also let \fluidpack{fft} automatically +choose an appropriate FFT class by instantiating the operator class with +\codeinline{fft=None} or \codeinline{fft="default"}. Even if one finds the methods +in the operator class to be lacking, one can inherit the class and easily create a +new method, for instance using the wavenumber arrays, \codeinline{oper.KX} and \codeinline{oper.KY}. Arguably, a similar implementation with other available packages would require the know-how on how FFT arrays are allocated in the memory, @@ -377,6 +380,11 @@ \codeinline{oper.KY}. Arguably, a similar implementation with other available packages would require the know-how on how FFT arrays are allocated in the memory, -normalized, decomposed in parallel and so on. A more detailed introduction on how +normalized, decomposed in parallel and so on. +% +Moreover, the FFT and the operator classes contain objects describing the shapes +of the real and complex arrays and how the data is shared between processes. +% +A more detailed introduction on how to use \fluidpack{fft} and available functions can be found in the tutorials\footnote{% \url{https://fluidfft.readthedocs.io/en/latest/tutorials.html}.}. @@ -615,7 +623,7 @@ that \codeinline{fftw1d} is not the fastest of the four classes in this machine. One can only speculate that this could be a consequence of the differences in MPI library and hardware which has been employed. This also emphasises the need to -perform benchmarks while using an entirely new configuration. +perform benchmarks when using an entirely new configuration. % @@ -990,8 +998,8 @@ and French legal matters, in the spirit of and retaining compatibility with the GNU General Public License (GPL). \item[Publisher:] Pierre Augier -\item[Version published:] 0.2.3 -\item[Date published:] 04/05/2018 +\item[Version published:] 0.2.4 +\item[Date published:] 02/07/2018 \end{description} {\bf Code repository} @@ -1065,8 +1073,8 @@ agreement No 647018-WATU and Euhit consortium) and the Swedish Research Council (Vetenskapsr{\aa}det): 2013--5191. % -We have also been able to use supercomputers of CIMENT/GRICAD, CINES/GENCI and -the Swedish National Infrastructure for Computing (SNIC). +We have also been able to use supercomputers of CIMENT/GRICAD, CINES/GENCI (Grant +2018-A0040107567) and the Swedish National Infrastructure for Computing (SNIC). \section*{Competing interests} diff --git a/fluidfft/python/makefile_figures.py b/fluidfft/python/makefile_figures.py index 6460967bd66733720f01b53621f51c3cf299b834_Zmx1aWRmZnQvcHl0aG9uL21ha2VmaWxlX2ZpZ3VyZXMucHk=..7bb05b960b5b2e5051c304b6704046ec27f8250c_Zmx1aWRmZnQvcHl0aG9uL21ha2VmaWxlX2ZpZ3VyZXMucHk= 100644 --- a/fluidfft/python/makefile_figures.py +++ b/fluidfft/python/makefile_figures.py @@ -51,6 +51,10 @@ print('make fig', path_fig) fig = plot_scaling(path_dir, None, dim, n0, n1, n2, show=False, for_latex=True) + + for ax in fig.axes: + ax.set_xlabel(r"number of processes $n_p$") + ax.set_ylabel(r"speedup $S_\alpha(n_p)$") fig.set_size_inches(10, 5) fig.suptitle('') fig.tight_layout( diff --git a/fluidsim/fluidsim_paper.tex b/fluidsim/fluidsim_paper.tex index 6460967bd66733720f01b53621f51c3cf299b834_Zmx1aWRzaW0vZmx1aWRzaW1fcGFwZXIudGV4..7bb05b960b5b2e5051c304b6704046ec27f8250c_Zmx1aWRzaW0vZmx1aWRzaW1fcGFwZXIudGV4 100644 --- a/fluidsim/fluidsim_paper.tex +++ b/fluidsim/fluidsim_paper.tex @@ -1153,8 +1153,8 @@ and French legal matters, in the spirit of and retaining compatibility with the GNU General Public License (GPL). \item[Publisher:] Pierre Augier -\item[Version published:] 0.2.1 -\item[Date published:] 24/05/2018 +\item[Version published:] 0.2.2 +\item[Date published:] 02/07/2018 \end{description} {\bf Code repository}