Multithreading in der Praxis

Teil 2: Programmieren für den Multi-Core-Prozessor

Parallelverarbeitung in der Praxis

Eine Erhöhung dieses Gesamtdurchsatzes ist aber nur dann zu erzielen, wenn die anstehenden Aufträge, also die Programme auch wirklich parallel, wie die Kunden im Supermarkt, bedient werden können und auch unabhängig voneinander sind.

Denn, so viele Kerne (Kassen) man auch bereitstellt, für das einzelne Programm (Kunde), der genau von einem Kern bedient und somit abgearbeitet wird, ändert das erstmal nichts. Hier hilft nur die Erhöhung der Abfertigungsgeschwindigkeit, also eine höhere Taktung oder ILP. Um dennoch einen höheren Gesamtdurchsatz zu erzielen, muss das Programm auf die verschiedenen Cores verteilt werden, wie die Kunden auf mehrere Kassen im Supermarkt. Ein Unterfangen, das jedoch nicht ganz einfach ist.

Verteilt: Der Rechenaufwand soll auf die verschiedenen Cores in der CPU verteilt werden.
Verteilt: Der Rechenaufwand soll auf die verschiedenen Cores in der CPU verteilt werden.

Betrachtet man ein Programm aus der Sicht seiner Erstellung im Prozess der Software-Entwicklung, so stellt man zwar fest, dass es bereits bei der Programmierung in eine Vielzahl von Programmstücken zerlegt wird, diese Zerlegung aber mit der späteren Laufzeit wenig zu tun hat. Die Modularisierung der Programme bei der Entwicklung dient nämlich einem anderen Zweck: einer vereinfachten Entwicklung und der Wiederverwendbarkeit des Codes.