In this new version of ZMCintegral, we have added the functionality of multi-function integrations, i.e. the ability to integrate more than 103 different functions on GPUs. The Python API remains the similar as the previous versions. For integrands less than 5 dimensions, it usually takes less than 10 minutes to finish the evaluation of 103 integrations on one Tesla v100 card. The performance scales linearly with the increasing of the GPUs. New version program summaryProgram Title: ZMCintegralCPC Library link to program files:https://doi.org/10.17632/p7wc7k6mpp.3Licensing provisions: Apache-2.0Programming language: PythonJournal reference of previous version: Hong-Zhong Wu, Jun-Jie Zhang, Long-Gang Pang, Qun Wang, Comput. Phys. Commun. 248 (2020) 106962 and Jun-Jie Zhang, Hong-Zhong Wu, Comput. Phys. Commun. 251 (2020) 107240Does the new version supersede the previous version?: YesReasons for the new version: When solving the Boltzmann equation with radiations [1], one encounters different collision integrals for different energy beams. In the relativistic QED plasma, the collision terms involve various Feynman graphs [2] and usually the contribution from each graph is of great interest. In these circumstances one needs to integrate many functions of different forms simultaneously. In our previous versions [3,4], we focused on single integration of high dimensions and functions with parameters. Therefore, it is necessary to include the functionality for integrating many functions which have different dimensions, forms and integration domains.Summary of revisions:• Multi-function integrationsSuppose we have a series of integrations defined as(1)fn(x)=ancos(kn⋅x)+bnsin(kn⋅x), where n=1,2,3,...,100. The above integration series can be treated as a set of Harmonic bases if one wishes to evaluate the contribution of each Harmonic mode. In our previous versions, these series cannot be manipulated in a convenient and efficient way. It is worth noting that the integration domains or dimensions can be different, for example(2)gn(x1,x2)=an|x1+x2|for 0<n<50gn(x1,x2,x3)=bn|x1+x2−x3|for 50≤n≤100. The support of multi-functions gives the users full flexibility to integrate as many different functions as possible.• Test on GPUsAs an illustrative example, we report the solution of Eq. (1) with x=(x1,x2,x3,x4), an=bn=1. The ranges for all components are taken to be [0,1] and kn=(n+502π,n+502π,n+502π,n+502π) such that the integration is highly fluctuating around the zero line. The hardware condition in this case is taken to be: Intel(R) Xeon(R) Silver 4110 CPU@2.10GHz CPU with 10 processors + one Nvidia Tesla V100 GPU. The results are shown in Fig. 1.Nature of problem: ZMCintegral is an easy to use Python package for doing high dimensional integrations on distributed GPU clusters. Using the Python libraries Numba [5] and Ray [6], as well as the NVIDIA CUDA [7] capability, ZMCintegral offers a succinct Python interface to evaluate numerical integrations for physical problems. In this updated version, we mainly focus on the problems where the users have various functions to integrate. These integrations can take different forms and domains.Solution method: This new version contains three Python classes. ZMCintegral_normal utilizes the stratified-sampling and heuristic-tree-search techniques, while ZMCintegral_functional and ZMCintegral_multifunctions use the direct-Monte Carlo method for each integrand which benefits mainly from the heavily distributed GPU clusters.Additional comments including restrictions and unusual features: If the integrations are high-dimensional (e.g. dimensionality of 8-12), users are encouraged to use ZMCintegral_normal. If the integrations are middle-dimensional (e.g. dimensionality of 1-7) but with a large parameter space, we suggest users to try ZMCintegral_functional. If the integrations contain many different integrands and domains (e.g. 104 different integrations), then ZMCintegral_multifunctions is suggested. The detailed instructions can be found here: [8].
Read full abstract