What it means

Not one fast machine,many ordinary ones

High-performance computing is mostly the discipline of splitting a problem so that hundreds of unremarkable cores can work on it at once.

Cores, not clock speed

Single-core performance stopped improving quickly. Everything since has been about doing more at once.

The network is the machine

In a cluster, interconnect latency and bandwidth decide performance more often than the processors do.

Moving data costs more than computing

A floating-point operation is nearly free. Fetching the operand from memory, or another node, is not.

Two kinds of parallel

Shared memory,and message passing

Almost every parallel program is one of these, or both stacked together. The distinction decides what your code can assume.

OpenMP — threadsInside one machine, sharing memory. Easy to add, and limited to the cores in that box.
MPI — ranksSeparate processes, possibly on separate machines, exchanging explicit messages. Scales past one node.
GPU offloadThousands of simple cores for the regular inner loops. A third axis, stacked under the other two.

Threads inside a machine share memory, so communication is free and correctness is hard. Ranks across machines share nothing, so correctness is easier and communication is the cost you spend the rest of your life optimising. Most real scientific codes do both: MPI between nodes, OpenMP inside each one, and increasingly a GPU underneath that.

Why it stops scaling

Amdahl's lawis not negotiable

The serial fraction of your program sets a hard ceiling on speedup, no matter how many cores you add.

20× max5% serialwith any number of cores
OverheadThencommunication makes it worse
MeasureSoscale your system, not a benchmark

If five per cent of the runtime is inherently serial, twenty times is the best you can ever do — with a thousand cores or a million. In practice communication overhead makes it worse than that, and past some point adding ranks makes a job slower. Measure the scaling curve for your actual system before requesting a large allocation; the answer is frequently that you should be running more small jobs rather than one large one.

The other model

A queue,or a machine you rent

Classical HPC means a scheduler and a wait. There is a second shape now, and which one suits depends on what you are running.

A shared cluster

Slurm, a queue, and a fair-share policy. Free at the point of use, and you pay in waiting.

A machine you rent

Yours in about a minute, no queue, billed by the hour. Right when the job fits on one node.

Often both

Develop and debug on a rented machine, then take the working input to the cluster for the production run.

A shared cluster is the right answer for a job that genuinely needs hundreds of nodes and tight interconnect, and it is free at the point of use in most institutions — you pay in queue time. A rented machine is the right answer when the job fits on one node, when you need it now, or when you would otherwise spend a week waiting to find out that the input file was wrong.

The status

Slurm isbeing built

The image and its definition are being verified. When they are done, it deploys by name like the rest.

Read it, then run itPrepaid and by the hour, on a machine that is yours about a minute after you ask.