Xavier Andrade edited Parallelization.tex  over 9 years ago

Commit id: dd06dd9d6f707aa9f2a12ef7a106a04e74f022c5

deletions | additions      

       

In the development of new theory, computational cost is also an important factor.  In many cases, a code can Real-space grids allows us to  provide developers of new method with  optimized and parallelized building blocks that developers they  can use to produce highly efficient code without caring about the details of the implementation. However, it is critical to expose an adequate level that hides the performance details while still giving enough flexibility to the developers. For example, we have found that the traditional picture of an state as the basic object is not adequate for optimal performance, as it does not expose enough data parallelism~\cite{Andrade_2012_gpus}. In Octopus we use a higher level interface where the basic object is a group of several states. The developers are exposed to a linear array that contains the values of the field for each grid point. Additional data structures provide information about each grid point and the structure of the grid. This level of abstraction makes it simple for developers to write code that works for different problem dimensionality, and different kinds and shapes of grids.  In terms of performance, this approach allows us to control how the grid points are stored in memory.  \ref{fig:gridmapping}  In order to numerically calculate physical observables we need to discretise  the problem. To this end, we use a mesh representation (e.g. which changes the charge