Representative computing time#
The tables below give the computing time of each step of one PIANISTpy workflow, from a density profile to the
observables. The example truncates an isotropic NFW halo by Method I. Method II then builds a model with a constant velocity
anisotropy of 0.2 on the truncated density of that Method I model (Truncation in phase space). Each time in the tables is the time of a repeated
call. The first call of a session takes longer due to JAX compilation, as does the first aperture call on a
table (14.7 s on spock’s CPU). The times were measured with the default settings on two machines. The first machine
is the spock GPU cluster of
NTU CALab (PI: Hsi-Yu Schive),
with an AMD Ryzen Threadripper PRO 5975WX CPU (32 cores, Linux) and an NVIDIA GeForce RTX 3080 Ti GPU. The second
machine is a laptop with an Intel Core Ultra 9 185H CPU (16 cores, Windows 11). The steps that run in parallel
processes used 28 processes on spock and 12 processes on the laptop, set by set_cores().
Building a model#
Stage |
spock, CPU |
spock, CPU + GPU |
Laptop, CPU |
|---|---|---|---|
1. Untruncated DF: |
6.17 s |
5.43 s |
12.7 s |
2. Method I truncation \((\mathcal{K}_{\rm t} = 0.05)\) |
4.34 s |
no GPU acceleration |
11.2 s |
3. Method II model at constant \(\beta_{\rm c} = 0.2\)
(
compute_df, truncate) |
3.41 s |
no GPU acceleration |
10.1 s |
4. |
6.49 s |
0.897 s |
7.39 s |
5. Drawing \(10^7\) particles |
7.08 s |
1.91 s |
12.9 s |
6. |
13 min |
no GPU acceleration |
62 min |
Peak memory over the whole run
(main process, largest parallel process)
|
4.20 / 0.92 GiB |
3.49 / 0.93 GiB |
2.50 / 0.53 GiB |
† A LosTable is built once per model, and every later call given the same LosTable reads it without a
rebuild. Every observable in the table “Observables from the line-of-sight table” reads a LosTable. losvd and aperture_losvd called on a
model build a LosTable first. Each row of a LosTable is the line-of-sight velocity distribution at one
projected radius. The integral of each row agrees with the surface density, and the second moment of each row agrees
with the projected dispersion, each to a relative error of at most \(10^{-6}\). For a distribution read between
two rows, the estimated error is at most \(10^{-8}\) relative in the second moment, and at most
\(10^{-7}\) of the row’s largest value at each velocity. A GPU-accelerated build, and builds of
only the part of a LosTable that a call needs, are listed on the
Upcoming features page.
Observables from the distribution function#
Stage |
spock, CPU |
spock, CPU + GPU |
Laptop, CPU |
|---|---|---|---|
|
0.648 ms |
no GPU acceleration |
0.736 ms |
|
0.610 ms |
no GPU acceleration |
0.659 ms |
|
4.95 s |
no GPU acceleration |
8.09 s |
|
4.94 s |
no GPU acceleration |
7.68 s |
|
0.836 s |
no GPU acceleration |
1.69 s |
|
5.43 ms |
6.36 ms |
9.12 ms |
Observables from the line-of-sight table#
Stage |
spock, CPU |
spock, CPU + GPU |
Laptop, CPU |
|---|---|---|---|
losvd at \(R_{\rm 2D} = 1\), evaluated at201 line-of-sight velocities
|
2.69 ms |
no GPU acceleration |
3.57 ms |
aperture_losvd over a circle of radius 1,evaluated at 201 line-of-sight velocities
|
12.7 s |
no GPU acceleration |
32.8 s |
|
12.7 s |
no GPU acceleration |
29.5 s |
Gauss-Hermite moments evaluated at 10 projected radii |
55.2 ms |
no GPU acceleration |
77.4 ms |
