Implizite Parallelität - Implicit parallelism

In der Informatik ist implizite Parallelität ein Merkmal einer Programmiersprache, die es einem Compiler oder Interpreter ermöglicht , die Parallelität der Berechnungen, die von einigen Konstrukten der Sprache ausgedrückt werden , automatisch auszunutzen . Eine reine implizit parallele Sprache benötigt keine speziellen Anweisungen, Operatoren oder Funktionen, um eine parallele Ausführung zu ermöglichen, im Gegensatz zu einer expliziten Parallelität .

Programmiersprachen mit impliziter Parallelität umfassen Axum , BMDFM , HPF , Id , LabVIEW , MATLAB-M-Code , NESL , SaC , SISAL , ZPL und pH.

Beispiel

Wenn ein bestimmtes Problem darin besteht, dieselbe Operation für eine Gruppe von Zahlen auszuführen (z. B. den Sinus oder den Logarithmus jeder Zahl nacheinander zu nehmen), kann eine Sprache, die implizite Parallelität bietet, dem Programmierer ermöglichen, die Anweisung folgendermaßen zu schreiben:

numbers = [0 1 2 3 4 5 6 7];
result = sin(numbers);

Der Compiler oder Interpreter kann den Sinus jedes Elements unabhängig berechnen und den Aufwand auf mehrere Prozessoren verteilen, sofern verfügbar.

Vorteile

Ein Programmierer, der implizit parallelen Code schreibt, muss sich nicht um die Aufgabenteilung oder Prozesskommunikation kümmern und sich stattdessen auf das Problem konzentrieren, das sein Programm lösen soll. Implizite Parallelität erleichtert im Allgemeinen die Gestaltung paralleler Programme und führt daher zu einer wesentlichen Verbesserung der Produktivität von Programmierern.

Viele der Konstrukte, die erforderlich sind, um dies zu unterstützen, tragen auch dann zur Einfachheit oder Klarheit bei, wenn keine tatsächliche Parallelität vorliegt. Das obige Beispiel des Listenverständnisses in der Funktion sin () ist an sich ein nützliches Merkmal. Durch die Verwendung impliziter Parallelität müssen Sprachen Benutzern solche nützlichen Konstrukte effektiv zur Verfügung stellen, um die erforderliche Funktionalität zu unterstützen (eine Sprache ohne eine anständige for () - Schleife wird beispielsweise nur von wenigen Programmierern verwendet).

Nachteile

Sprachen mit impliziter Parallelität verringern die Kontrolle, die der Programmierer über die parallele Ausführung des Programms hat, was manchmal zu einer nicht optimalen parallelen Effizienz führt . Die Macher der Programmiersprache Oz stellen außerdem fest, dass ihre frühen Experimente mit impliziter Parallelität gezeigt haben, dass implizite Parallelität das Debuggen erschwert und Objektmodelle unnötig umständlich macht.

Ein größeres Problem ist, dass jedes Programm eine parallele und eine serielle Logik hat. Binäre E / A erfordern beispielsweise Unterstützung für serielle Operationen wie Write () und Seek (). Wenn implizite Parallelität gewünscht wird, wird eine neue Anforderung an Konstrukte und Schlüsselwörter gestellt, um Code zu unterstützen, der nicht mit Threads versehen oder verteilt werden kann.

Anmerkungen