ConsultancyHPC en parallelisatie

Rekenkracht die schaalt.

We versnellen simulaties, datapijplijnen en AI-training: van performance-analyse tot parallelisatie over duizenden cores en GPU's. Synchroon waar het moet, asynchroon waar het kan.

Synchroon of asynchroon: waar de tijd verdwijnt.

In een bulk-synchroon programma wacht elke processor bij iedere barrière op de traagste. Bij asynchrone uitvoering start een taak zodra haar eigen buren klaar zijn. Hoe groter de spreiding in rekentijd, hoe groter het verschil.

Dezelfde taken, twee uitvoeringsmodellen. Elke taak hangt af van haar buren in de vorige tijdstap.
  • Rekenen
  • Wachten
  • Barrière
0Doorlooptijd synchroon, als index
0Doorlooptijd asynchroon, synchroon = 100
0Benutting synchroon en asynchroon
0Versnelling door asynchrone uitvoering

De wet van Amdahl is onverbiddelijk.

Als 5% van een programma serieel blijft, is de maximale versnelling 20 keer, hoeveel cores u ook toevoegt. Daarom beginnen we altijd bij meten: waar zit het seriële deel, en hoe krijgen we het weg?

Gustafson laat de andere kant zien: wie met meer rekenkracht ook grotere problemen oplost, schaalt veel verder. Welke wet voor u telt, hangt af van uw vraag.

Versnelling tegen aantal cores, logaritmische assen
  • Amdahl
  • Gustafson
  • Ideaal
0Versnelling volgens Amdahl
0Versnelling volgens Gustafson
0Maximum bij oneindig veel cores

Van één node tot het hele cluster.

We werken op elk niveau van de stack: van de vectorinstructies in een binnenste lus tot de workload manager die duizenden jobs verdeelt.

Gedistribueerd geheugen

Domeindecompositie, niet-blokkerende en one-sided communicatie, en topologiebewuste plaatsing van processen.

  • MPI
  • UCX
  • Halo-uitwisseling
  • RMA

Gedeeld geheugen

Threading, NUMA-bewuste datalayout en vectorisatie, zodat elke core en elke SIMD-lane meedoet.

  • OpenMP
  • oneTBB
  • AVX-512
  • NEON en SVE

GPU-versnelling

Kernels herschrijven en tunen, geheugentransfers verbergen en schalen over meerdere GPU's en nodes.

  • CUDA
  • HIP en ROCm
  • SYCL
  • NCCL

Asynchrone runtimes

Taakgebaseerd parallellisme, futures en event loops die rekenen, communicatie en I/O laten overlappen.

  • HPX
  • Taskflow
  • asyncio
  • Ray
  • Dask

Performance engineering

Profiling, roofline-analyse en het meten van geheugenbandbreedte en cachegedrag, voordat we iets veranderen.

  • Nsight
  • VTune
  • perf
  • LIKWID

AI op schaal

Gedistribueerde training met data-, model- en pipelineparallellisme, en inferentie met hoge doorvoer.

  • PyTorch DDP en FSDP
  • DeepSpeed
  • Triton

Infrastructuur

Clusters, cloud bursting en containers, zo ingericht dat onderzoekers en engineers er zelf mee verder kunnen.

  • Slurm
  • Kubernetes
  • Apptainer
  • Spack

Eigen onderzoek: parallelle simulatie van tumorgroei.

In dit hoofdstuk analyseren we de parallelle efficiëntie van een framework dat de groei van maligne pleuramesothelioom simuleert: een Cellular Potts-model gekoppeld aan PDE’s voor zuurstof, voedingsstoffen en cytokines, in een driedimensionaal domein uit CT-data.

Een dynamische bounding box verkleint het domein waarop de PDE’s worden opgelost tot het gebied rond de tumor. De PDE’s worden met de eindige-volumemethode en een impliciet Euler-schema opgelost; de parallelisatie loopt via mpi4py met PETSc en een GMRES-solver. Resultaat: kortere rekentijd dan serieel, zuiniger geheugengebruik en een betere werkverdeling over de cores.

Titel
Multiscale Parallel Simulation of Malignant Pleural Mesothelioma via Adaptive Domain Partitioning – An Efficiency Analysis Study
Auteurs
Anton Dolganov, Valeria Krzhizhanovskaya, Stefano Trebeschi, Vivek M. Sheraton
Verschenen in
Computational Science – ICCS 2025 Workshops, Lecture Notes in Computer Science, deel 15911, Springer, 2025, p. 20–32
DOI
10.1007/978-3-031-97570-7_3
Adaptief rekendomeinSchematisch
0Tumorcellen in deze weergave
0%Deel van de doorsnede dat wordt doorgerekend
Schematische weergave van de aanpak, geen resultaten uit de studie. Alleen het omkaderde gebied wordt doorgerekend; de gestippelde lijnen verdelen het over vier processen op basis van het aantal cellen.

Communicatie verbergen achter rekenwerk.

Een klein verschil in code, een groot verschil op schaal. Door de uitwisseling met buren te starten vóór het rekenwerk aan de binnenkant van het domein, wacht alleen de rand nog op data.

Blokkerend

rekenen wacht op communicatie
for (int it = 0; it < iters; ++it) {
    exchange_halos(u);          /* MPI_Sendrecv */
    compute_interior(u, unew);
    compute_boundary(u, unew);
    swap(&u, &unew);
}

Overlappend

rekenen terwijl data onderweg is
for (int it = 0; it < iters; ++it) {
    MPI_Request req[8];
    post_halo_exchange(u, req);  /* MPI_Irecv, MPI_Isend */
    compute_interior(u, unew);   /* overlapt met transfer */
    MPI_Waitall(8, req, MPI_STATUSES_IGNORE);
    compute_boundary(u, unew);   /* alleen de rand wacht */
    swap(&u, &unew);
}

Eerst meten, dan versnellen.

Elke optimalisatie begint met een reproduceerbare meting en eindigt met een team dat de winst kan vasthouden.

  1. 01

    Meten

    Een reproduceerbare baseline en profiling op uw eigen hardware en datasets.

  2. 02

    Modelleren

    Roofline-analyse en een schaalbaarheidsmodel: waar zit de echte bottleneck?

  3. 03

    Paralleliseren

    De juiste strategie per knelpunt: vectoriseren, threads, MPI, GPU of asynchrone taken.

  4. 04

    Valideren

    Numerieke correctheid en reproduceerbaarheid, bewaakt met regressietests.

  5. 05

    Schalen

    Strong- en weak-scaling-metingen op de doelomgeving, van werkstation tot cluster.

  6. 06

    Overdragen

    Documentatie, benchmarks in CI en training, zodat uw team de winst vasthoudt.

Rekent uw software te langzaam?

Vertel ons wat er draait, waarop en hoe lang het duurt. We laten zien waar de winst zit.

Plan een gesprek