Vlasov-Ampere, CPU node vs GPU node: GPU node
← Vlasov-Ampere, CPU node vs GPU node · ‹ CPU node
Summary
Section titled “Summary”solve(in simulation) is the largest hotspot: 278 ms over 40 calls, 80.3% of the session.- The three largest hotspots account for 92% of the session.
Hotspots
Section titled “Hotspots”The leaves of the call tree with the most time: regions without nested regions, and the own time parents spend outside theirs. Shares are of the session. Click one to find it in the table.
Region statistics
Section titled “Region statistics”| region | % session | total [s] | gpu total [s] | gpu avg [s] | trend | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| scope_profiler.session (4x) | 100.00% | 0.345681 | - | - | |||||||||||||||||||||||||||||||
| └─ (own) | 4.63% | 0.016000 | |||||||||||||||||||||||||||||||||
Per rank
| |||||||||||||||||||||||||||||||||||
| └─ simulation (4x) | 95.37% | 0.329681 | - | - | |||||||||||||||||||||||||||||||
| │ └─ (own) | 0.00% | 0.000000 | |||||||||||||||||||||||||||||||||
Per rank
| |||||||||||||||||||||||||||||||||||
| │ └─ setup (4x) | 4.63% | 0.016000 | - | - | |||||||||||||||||||||||||||||||
Per rank
| |||||||||||||||||||||||||||||||||||
| │ └─ copy_to_device (4x) | 3.47% | 0.012000 | 0.010200 | 0.003 | |||||||||||||||||||||||||||||||
GPU total: 0.0102 s, GPU average: 0.00255 s Per rank
| |||||||||||||||||||||||||||||||||||
| │ └─ solve (40x) | 80.33% | 0.277681 | 0.258243 | 0.006 | |||||||||||||||||||||||||||||||
GPU total: 0.258243 s, GPU average: 0.00645608 s Per rank
| |||||||||||||||||||||||||||||||||||
| │ └─ exchange (40x) | 6.94% | 0.024000 | - | - | |||||||||||||||||||||||||||||||
Per rank
| |||||||||||||||||||||||||||||||||||
| No regions match the filter. | |||||||||||||||||||||||||||||||||||
Durations are in seconds. (own) rows show a region's time excluding its children. % session uses wall-clock coverage; overlapping recursive calls count once. Click a row for its call site and per-rank breakdown.
Load balance
Section titled “Load balance”Each region's own time per rank, excluding nested regions, so a parent does not repeat its children's imbalance. Excess is how much longer the slowest rank spends than the average rank: the most balancing that region could save. Regions are ordered by it.
| region | mean | min | max | slowest rank | imbalance | excess | min · mean · max |
|---|---|---|---|---|---|---|---|
| solve | 69.4 ms | 67.2 ms | 72.5 ms | 2 | +4% | 3.12 ms | |
| setup | 4 ms | 4 ms | 4 ms | 0 | +0% | 0 s | |
| copy_to_device | 3 ms | 3 ms | 3 ms | 0 | +0% | 0 s | |
| exchange | 6 ms | 6 ms | 6 ms | 0 | +0% | 0 s |
Rank comparison
Section titled “Rank comparison”Each cell compares one rank's time in a region with the region's mean over the ranks. Rank 2, in red in the header, spends the most time in regions overall. Hover a cell for its time.
faster than the meanslower
| region | mean | 0 | 1 | 2 | 3 |
|---|---|---|---|---|---|
| solve | 69.4 ms | −2.6% | +1.2% | +4.5% | −3.2% |
| exchange | 6 ms | 0% | 0% | 0% | 0% |
| setup | 4 ms | 0% | 0% | 0% | 0% |
| copy_to_device | 3 ms | 0% | 0% | 0% | 0% |
| all regions | 82.4 ms | −2.2% | +1.0% | +3.8% | −2.7% |
Charts
Section titled “Charts”Region durations
Each bar shows a region's total recorded duration, summed over the selected ranks, longest first.
Timeline: GPU node (rank 0)
Each bar is one recorded region call on rank 0. Its position and width show when the call started and how long it ran; colors identify regions.
Rank imbalance
Each line compares a region's total duration by rank; its dashed line marks the mean across ranks. Points far from the mean identify stragglers.
Rank heatmap
This heatmap uses exclusive timings. Exclusive duration is the time spent in a region itself, excluding time spent in nested child regions; this prevents the enclosing session region from dominating the heatmap.
Figures
Section titled “Figures”Download run.py (715 B)
"""Landau damping of a Langmuir wave with a Vlasov-Ampere solver: the script both runs use."""
import sys
import yamlfrom scope_profiler import ProfileManager
def main(parameter_file): with open(parameter_file) as handle: parameters = yaml.safe_load(handle) with ProfileManager.session(label=parameters["label"]): with ProfileManager.region("setup"): state = initialise(parameters) for _ in range(parameters["steps"]): with ProfileManager.region("solve"): state = advance(state, parameters["dt"]) with ProfileManager.region("exchange"): exchange_halos(state)
if __name__ == "__main__": main(sys.argv[1])Download gpu-node.yml (204 B)
# Landau damping of a Langmuir wave, k = 0.5, 1 percent perturbationlabel: gpu nodedevice: gpumpi_ranks: 4omp_threads: 1steps: 10dt: 0.05grid: cells: [128, 128, 128] particles_per_cell: 128000Metadata
Section titled “Metadata”| commit | 0000000 |
|---|---|
| system | synthetic |
| chip_information | synthetic 4-GPU node |
| mpi_size | 4 |
| num_nodes | 1 |
| omp_num_threads | 1 |
| platform | synthetic |
| scope_profiler_version | sample |
| timestamp | 2026-10-17T12:00:00Z |
| total_cores | 4 |