Implementation details
This commit is contained in:
parent
90408541b5
commit
1505062cbb
@ -176,7 +176,7 @@ multiplications,\cite{form_w_abc} which are among the most efficient operations
|
||||
executed on modern CPUs and
|
||||
accelerators.\cite{ma_2011,haidar_2015,dinapoli_2014,springer_2018}
|
||||
|
||||
In the algorithm proposed by Rendell\cite{rendell_1991}, for each given triplet $(abc)$, the sub-tensors $W_{ijk}(abc)$ and $V_{ijk}(abc)$ are computed and immediately utilized to calculate their contribution to $E_{ijk}(abc)$. Here, we propose a similar approach but introduce a semi-stochastic algorithm to randomly select the triplets $(abc)$, circumventing the need to compute all contributions.
|
||||
In the algorithm proposed by Rendell\cite{rendell_1991}, for each given triplet $(abc)$, the sub-tensors $W^{abc}$ and $V^{abc}$ are computed and immediately utilized to calculate their contribution to $E^{abc}$. Here, we propose a similar approach but introduce a semi-stochastic algorithm to randomly select the triplets $(abc)$, circumventing the need to compute all contributions.
|
||||
|
||||
%=================================================================%
|
||||
\section{Semi-Stochastic Algorithm}
|
||||
@ -206,6 +206,23 @@ In the algorithm proposed by Rendell\cite{rendell_1991}, for each given triplet
|
||||
|
||||
The algorithm was implemented in the \textsc{Quantum Package} software.
|
||||
\cite{garniron_2019}
|
||||
The stochastic algorithm is implemented using OpenMP tasks, where each task
|
||||
consists in the computation of a single component $E^{abc}$.
|
||||
The computation of the running average and statistical error is executed every second,
|
||||
for printing or for exiting when the statistical error gets below a given threshold.
|
||||
|
||||
The number of samples $N^{abc}$ of each triplet $(abc)$ is initialized to $-1$, to identify
|
||||
the contributions that have not been already computed.
|
||||
An outer \emph{for} loop runs over the maximum number of iteration, equal to
|
||||
$N_{abc}$, the number of different triplets $(abc)$.
|
||||
|
||||
Within a loop iteration, the index of the first non-computed triplet $(abc)$ is identified, and the task associated with its computation is sent to the task queue.
|
||||
As this triplet has never been drawn, $N^{abc}$ is set to zero.
|
||||
Then, a triplet $(abc)$ is drawn randomly.
|
||||
If the $E^{abc}$ has not been computed (identified by $N^{abc}=-1$), the number of samples is set to zero and the task for the computation of this contribution is enqueued.
|
||||
In any case, $N^{abc}$ is then incremented.
|
||||
|
||||
|
||||
|
||||
%a. Description of the computational framework and software used
|
||||
%b. Discussion of any specific optimizations or parallelization techniques employed
|
||||
|
Loading…
Reference in New Issue
Block a user