Da die Daten für alle CPUs zugänglich im gemeinsamen Speicher liegen, kann die Rechenarbeit leicht aufgeteilt werden: Jede CPU bearbeitet einen Teil der Daten. Gewisse Vorsicht ist geboten, wenn mehrere CPUs auf den gleichen Datensatz zugreifen, oder wenn die Ergebnisse vieler CPUs zusammengefaßt werden.
Als Programmier-Modell werden vom Betriebsystem sogenannte Threads ("Fäden") zur Verfügung gestellt. Dabei handelt es sich um gleichzeitig abgearbeitete Programmteile innerhalb eines Prozesses. Ein verbreiteter Standard für Threads sind POSIX-Threads. Ein gute Einführung findet sich auf den Seiten von LLNL.
Noch einfacher wird die Programmierung von SMP-Rechnern durch OpenMP. Damit wird die Erzeugung und Verwaltung von threads mittels #pragma-Direktiven im normalen C-Code (oder speziellen Kommentaren in Fortran) automatisiert. Entsprechende Programme sind auch auf sequentiellen Rechnern lauffähig, der Compiler ignoriert dann einfach die #pragma's. Als Einführung eignen sich wieder die Seiten von LLNL.