Forum: PC-Programmierung Parallele Programmiersprachen


von Hamza O. (lazooooo)


Lesenswert?

Hi Leute,

habt Ihr paar gängige Programmiersprachen für die parallele 
Programmierung parat?

Welche sind da am gängigsten und welche sind effizient?

Irgendwie finde ich keine eindeutige Liste über gängige parallele 
Programmiersprachen

Danke

von someone (Gast)


Lesenswert?

C/C++ mit OpenMP/OpenMPI,
OpenCl

von cc (Gast)


Lesenswert?

was meinst du mit paralleler programmierung? nen neuen thread und die 
abarbeitung von anderen Dingen darin kannst du in jeder 
Programmiersprache machen?!

von Rene S. (Firma: BfEHS) (rschube)


Lesenswert?

Hallo,

als "echte" parallele Programmiersprache habe ich mal mit Occam auf 
INMOS Transputern gearbeitet.

Heute wird das mit allen gängigen Programmiersprachen hauptsächlich C++ 
und den entsprechenden Erweiterungen OpenCL etc. gemacht.

Grüße aus Berlin

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

VHDL
Verilog

Die daraus synthetisierte Funktion ist bei der Ausführung in Hardware 
vollständig nebenläufig (~parallel), sofern man nicht explizit 
sequentielle Konstrukte einsetzt.

von Hamza O. (lazooooo)


Lesenswert?

Hi, danke für Eure Antworten.

Also kann man leztzendlich mit fast allen gängigen sequentiellen 
Programmiersprach auf paralleler Ebene programmieren.

OpenMP scheint das gängigste zu sein? Was ist zu empfehlen?

von abc (Gast)


Lesenswert?

Hamza Oktay schrieb:
> Welche sind da am gängigsten und welche sind effizient?

Erlang.

von anonym (Gast)


Lesenswert?

kommt darauf an wie "exotisch" die ausgangsprogrammiersprache sein soll 
;-)

someone schrieb:
> C/C++ mit OpenMP/OpenMPI,
funktioniert auch z.b. im cluster-betrieb (64 maschinen mit 256 cores 
und 512GB ram gesamt - und das war nur der teil der über nacht für eine 
lehrveranstaltung reserviert war) hervorragend, das originale MPI gibt 
es auch für fortran - von openmpi weiß ich das nicht (ohne 
nachzuschauen)

abc schrieb:
> Erlang.
als funktionale programmiersprache mit einer etwas höheren 
einstiegshürde, aber die programmiersprache ist explizit für parallele 
anwendungen mit (wirklich) light-weight-threads konzipiert.

von Mladen G. (Gast)


Lesenswert?

Java

von Yalu X. (yalu) (Moderator)


Lesenswert?


von Nase (Gast)


Lesenswert?

Andreas Schweigstill schrieb:
> VHDL
> Verilog
>
> Die daraus synthetisierte Funktion ist bei der Ausführung in Hardware
> vollständig nebenläufig (~parallel), sofern man nicht explizit
> sequentielle Konstrukte einsetzt.

Es sind bei diesem Anwendungsfall aber beides keine 
Programmiersprachen im üblichen Sinne.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Nase schrieb:
> Es sind bei diesem Anwendungsfall aber beides keine
> Programmiersprachen im üblichen Sinne.

Der Threadersteller hat überhaupt keinen Anwendungsfall beschrieben. Und 
Ansätze wie OpenMP parallelisieren nicht die Programmiersprache, sondern 
sind nur Mittel zur Verteilung in Mehrprozessorsystemen.

von (prx) A. K. (prx)


Lesenswert?

Nase schrieb:
> Es sind bei diesem Anwendungsfall aber beides keine
> Programmiersprachen im üblichen Sinne.

Definiere "üblich". Immerhin handelt es sich eindeutig um Sprachen zur 
Programmierung. Einzig das Forum "PC-Programmierung" schränkt das Feld 
entsprechend ein, weil es sich auf Programmung des PCs bezieht. In 
"FPGA, VHDL & Co." wärs dann andersrum.

: Bearbeitet durch User
von Nase (Gast)


Lesenswert?

A. K. schrieb:
> Immerhin handelt es sich eindeutig um Sprachen zur
> Programmierung.
Das ist gar nicht ganz so eindeutig.
Man spricht gemeinhin ja auch nicht von einem Programm, das man z.B. 
ins FPGA lädt, sondern von einer Konfiguration. Vielleicht auch, weil 
man in erster Linie ja mit VHDL&Co. kein Steuerwerk mit einer Sequenz 
von Befehlen programmiert, welches dann etwa 'ein' Rechenwerk im 
Prozessor steuert. Sondern weil man mit VHDL eigentlich nur Schalter 
konfiguriert, um damit irgendwie geartete Logikzellen miteinander zu 
verbinden. Der Character einer Ablaufsteuerung entfällt also eigentlich 
komplett. Man müsste sich aus den Logikzellen quasi ein Steuer- und ein 
Rechenwerk zusammenkonfigurieren...

Üblicherweise bezeichnet man VHDL&Co. eher als Beschreibungssprache. 
HTML ist auch eine Beschreibungs- und keine Programmiersprache. Dass 
VHDL nebenbei noch Touring-vollständig ist, ist eher ein Nebeneffekt. In 
VHDL programmiert man letztlich ja auch nicht die Zielplattform (FPGA). 
Viel mehr programmiert (oder instruiert) man das Synthesewerkzeug. 
Schleifen in VHDL landen ja auch nicht im FPGA, sondern werden vom 
Synthesewerkzeug ausgerollt.

Wenn man die Definition 'Programmiersprache' am Ziel aufhängt, dann ist 
VHDL eigentlich keine.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Nase schrieb:
> Wenn man die Definition 'Programmiersprache' am Ziel aufhängt, dann ist
> VHDL eigentlich keine.

Doch. VHDL ist über die Simulation definiert, nicht über die 
Sythesefähigkeit für Hardware. Letztere ist nur ein (durchaus 
gewollter!) Nebeneffekt.

Außerdem habe ich die Sprachen VHDL und Verilog aufgeführt und nicht die 
daraus generierten Bitstreams.

: Bearbeitet durch User
von Nase (Gast)


Lesenswert?

Ja, und?
Macht das die beiden Sprachen nun mehr zur Programmiersprache?

Die Vereinbarung ist sicherlich unscharf und subjektiv gewachsen, aber 
sie ist allgemein akzeptiert. VHDL trägt sie sogar im Namen.
Es kann nun sinnvoll sein oder nicht, diese Vereinbarung zu kippen. 
Für den praktischen Einsatz der beiden Sprachen ist es meistens nicht 
sinnvoll.

Man mag nebenher bemerken, dass diejenigen, die VHDL 'programmieren', 
fast ausnahmslos erst einmal auf der Nase landen. Das ist ein ganz 
typisches Problem, auf welches man in der Lehre stößt...

von P. M. (o-o)


Lesenswert?

Hamza Oktay schrieb:
> habt Ihr paar gängige Programmiersprachen für die parallele
> Programmierung parat?

Was hast du ungefähr vor? Auf was für einer Hardware soll das laufen?

So etwas wie "gängige parallele Programmiersprachen" gibt es an sich 
nicht. Es gibt Spracherweiterungen für bestimmte 
Parallelrechner-Architekturen (z.B. CUDA für Nvidia-GPUs), Bibliotheken 
für die Interprozess(or)-Kommunikation (z.B. MPI) oder 
Spracherweiterungen zur vereinfachten Parallelisierung (z.B. OpenMP).

Was du davon verwendest, hängt von deiner Aufgabe und deinem 
Rechencluster ab. Eine gute Basis ist sicher, wenn man C kann.

von P. M. (o-o)


Lesenswert?

Nase schrieb:
> Üblicherweise bezeichnet man VHDL&Co. eher als Beschreibungssprache.
> HTML ist auch eine Beschreibungs- und keine Programmiersprache.

Das hängt primär davon ab, was für dich eine "Programmiersprache" ist. 
Letztlich ist jede Programmiersprache eine formale Sprache, mit der man 
das Verhalten eines Rechnersystems in allgemeiner (Turing-kompletter) 
Weise definieren kann. Und genau das kann man mit VHDL, nicht aber mit 
HTML.

von Nase (Gast)


Lesenswert?

P. M. schrieb:
> Das hängt primär davon ab, was für dich eine "Programmiersprache" ist.
> Letztlich ist jede Programmiersprache eine formale Sprache, mit der man
> das Verhalten eines Rechnersystems in allgemeiner (Turing-kompletter)
> Weise definieren kann. Und genau das kann man mit VHDL, nicht aber mit
> HTML.
Genau das habe ich aber oben auch geschrieben.

Und ich habe auch geschrieben, dass es gerade bei VHDL sowohl unüblich 
als auch unpraktisch ist, von einer Programmiersprache zu sprechen.

von P. M. (o-o)


Lesenswert?

Nase schrieb:
> Und ich habe auch geschrieben, dass es gerade bei VHDL sowohl unüblich
> als auch unpraktisch ist, von einer Programmiersprache zu sprechen.

Ich habe allerdings geschrieben, dass VHDL eben genau die typischen 
Eigenschaften einer Programmiersprache hat: Es ist eine formale Sprache, 
mit der man Turing-komplett Algorithmen beschreiben kann (und zwar ohne 
Verrenkungen). Nach welchem Paradigma dies geschieht und wie der 
Algorithmus dann in die Realität umgesetzt wird, spielt doch eigentlich 
keine Rolle.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Gerade an VHDL und Verilog sieht man doch sehr gut die intrinsische 
Nebenläufigkeit der Anweisungen. Und wenn man sich dessen nicht bewusst 
ist, entsteht doch ein Teil der Probleme, nämlich dass viele "reine 
Softwerker" von der bei den meisten Programmiersprachen vorliegenden 
sequentiellen Abarbeitung der Befehle ausgehen.

von (prx) A. K. (prx)


Lesenswert?

Ich sehe schon, niemand hier kennt die Programmiersprache "Prolog". Die 
ist weder prozedural oder funktional, sondern deklarativ. Es wird ein 
Sack voll Fakten und Regel definiert und es Übersetzer und 
Laufzeitsystem überlassen, wie es anschliessende Fragen auf Basis dieser 
Fakten und Regeln beantwortet.

Die Elemente klassischer Programmiertechnik sucht man darin vergebens, 
beispielsweise gibt es keine Schleifen. Ein Programm darin definiert im 
Grundkonzept der Sprache eben keine Anleitung für eine sequentielle 
(oder parallele) Lösung. Den Kriterien in
Beitrag "Re: Parallele Programmiersprachen"
folgend wäre das also keine Programmiersprache, sondern eine 
Beschreibungssprache.

: Bearbeitet durch User
von Yalu X. (yalu) (Moderator)


Lesenswert?

A. K. schrieb:
> Ich sehe schon, niemand hier kennt die Programmiersprache "Prolog".

Naja, viele kennen nur die imperative Programmierung, die dadurch
gekennzeichnet ist, dass ein Programm eine

Nase schrieb:
> Sequenz von Befehlen

ist.

Das Gegenstück zu den imperativen sind die deklarativen Sprachen. Diese
teilen sich u.a. auf in die funktionalen (z.B. Haskell), die logischen
(z.B. Prolog) und die datenflussorientierten (z.B. Lucid).

Da diese Sprachen weniger weit verbreitet sind als C, Java und Basic,
sind sie vielen nicht bekannt.

Trotzdem gibt es zumindest bei den datenflussorientierten Sprachen zwei,
die recht bekannt sind: LabView und Simulink. Da diese aber nicht – wie
klassische Programmierprachen – textuell, sondern grafisch sind, werden
sie von einigen vielleicht nicht als Programmiersprache akzeptiert.

Macht nichts: Es gibt nämlich auch unter den textuellen datenfluss-
orientierten Programmierprachen zwei, die ebenfalls recht bekannt sind.
Ich verrate jetzt aber nur soviel, dass beide mit V beginnen.

Wer meint, die Namen dieser beiden Programmierprachen gefunden zu haben,
kann seine Vermutung hier auf Richtigkeit prüfen:

  http://en.wikipedia.org/wiki/Dataflow_programming#Languages

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

A. K. schrieb:
> Ich sehe schon, niemand hier kennt die Programmiersprache "Prolog".

Doch, selbstverständlich kenne ich Prolog und habe gegen Ende der 80er 
Jahre kurzzeitig mit Turbo Prolog experimentiert.

Wie schon richtig beschrieben, ist Prolog eine deklarative Sprache. Sie 
weist aber keine explizit nebenläufigen Elemente auf.

von (prx) A. K. (prx)


Lesenswert?

Andreas Schweigstill schrieb:
> Wie schon richtig beschrieben, ist Prolog eine deklarative Sprache. Sie
> weist aber keine explizit nebenläufigen Elemente auf.

Sequentielle aber auch nicht, zumindest nicht dem Grundprinzip nach. Es 
wäre wohl schon offen für eine nebenläufige Implementierung.

Aber das war als Reaktion auf Nases recht enge Sicht auf 
Programmiersprachen gedacht, nicht als Empfehlung für parallele 
Programmierung im Sinn nebenläufiger Prozesse.

: Bearbeitet durch User
von Georg (Gast)


Lesenswert?

Hallo,

um auf die parallele Programmierung zurückzukommen - meiner Meinung nach 
gibt es eigentlich keine Sprache, die Parallelität ausschliesst. Was 
soll denn einen Basic-Compiler dran hindern, ein Programm im Rahmen der 
Optimierung auf unabhängige Abläufe zu untersuchen und diese auf 
geeigneter Hardware parallel auszuführen? Auf Prozessorebene ist das 
doch längst Stand der Technik. Nur bei Interpreter-Sprachen dürfte das 
auf Schwierigkeiten stossen, weil sie nicht weit genug bzw. garnicht 
vorausschauen können.

Man muss wohl unterscheiden zwischen Sprachen oder Spracherweiterungen, 
in denen man explizit parallel programmieren kann, und solchen, bei 
denen im Sourcecode garnichts davon drinsteht, die das aber hinter den 
Kulissen organisieren. Denen dürfte eine grosse Zukunft gehören, weil 
sich der Programmierer dann nicht drum kümmern muss, und weil sie die 
gigantischen Mengen vorhandener Software wenigstens teilparallelisieren 
können.

Georg

von (prx) A. K. (prx)


Lesenswert?

Georg schrieb:
> Nur bei Interpreter-Sprachen dürfte das
> auf Schwierigkeiten stossen, weil sie nicht weit genug bzw. garnicht
> vorausschauen können.

Gegenbeispiel: APL.

von Nase (Gast)


Lesenswert?

A. K. schrieb:
> Aber das war als Reaktion auf Nases recht enge Sicht auf
> Programmiersprachen gedacht, nicht als Empfehlung für parallele
> Programmierung im Sinn nebenläufiger Prozesse.
Das sollte auch nicht als enge Sicht herüberkommen.

Ich fühle mich bei "VHDL-Programmierung" immer getriggert, dass sich mir 
die Zehennägel aufrollen. Und zwar aus den oben geschilderten 
(praxisorientierten) Gründen, aus denen "VHDL-Programmierung" in der 
Praxis (letztlich: Synthese) eigentlich immer in die Hose geht.

Die Bezeichnung "Beschreibungssprache" finde ich aber eigentlich sehr 
passend, ganz besonders bei nebenläufigen Sprachen. Es drückt eine 
Abgrenzung zur klassischen Ablaufsteuerung/Sequenz aus: Man programmiert 
nicht mehr schrittweise einen Ablauf, sondern beschreibt das gewünschte 
Verhalten. Eigentlich tut man nämlich genau das in VHDL. Und in Prolog.

von (prx) A. K. (prx)


Lesenswert?

Nase schrieb:
> Die Bezeichnung "Beschreibungssprache" finde ich aber eigentlich sehr
> passend,

Nur assoziierst du offenbar intuitiv den Begriff "Programmiersprache" 
mit imperativen Sprachen, während die Informatik darin nur eine 
Untermenge des von ihr deutlich weiter gefassten Verständnisses von 
Programmiersprachen sieht. Und da die Informatik in dieser Frage mehr 
Deutungshoheit hat als deine Zehennägel...

> (praxisorientierten) Gründen, aus denen "VHDL-Programmierung" in der
> Praxis (letztlich: Synthese) eigentlich immer in die Hose geht.

Eine solche Klassifizierung von Sprachen davon abhängig zu machen, ob 
Anfänger schnell mit ihr klar kommen? Das würde ich ein eher schwaches 
und insbesondere sehr subjektives Kriterium nennen.

Diese Klassifizierung zufolge wäre INTERCAL auch keine 
Programmiersprache, denn auch da geht ein Versuch, in ihr zu 
programmieren, eigentlich immer in die Hose. Unabhängig von der 
Vorbildung. ;-)

: Bearbeitet durch User
von Yalu X. (yalu) (Moderator)


Lesenswert?

Nase schrieb:
> Ich fühle mich bei "VHDL-Programmierung" immer getriggert, dass sich mir
> die Zehennägel aufrollen.

Meinen Zehennägeln geht es ähnlich, wenn mir ein Web-Designer etwas von
"HTML-Programmierung" erzählt (zumindest dann, wenn es dabei um
HTML-Versionen von vor HTML5 geht) ;-)

> Die Bezeichnung "Beschreibungssprache" finde ich aber eigentlich sehr
> passend, ganz besonders bei nebenläufigen Sprachen.

Der Begriff ist ja auch vollkommen richtig. Nur denke ich (und viele
andere sicher auch) bei "Beschreibungssprache" erst einmal an Sprachen
wie Schnittstellenbeschreibungssprachen (z.B. OMG IDL) oder Seiten-
beschreibungssprachen (z.B. PCL).

Verilog und VHDL sind aber sehr viel mehr: Im Gegensatz zu OMG IDL und
PCL erlauben sie nämlich auch die Implementierung komplexer Algorithmen
(die auch synthetisierbar sind) und werden dazu auch tatsächlich in
großem Umfang genutzt, wie bspw. die inzwischen gängige Umsetzung von
Audio- und Videokomprimier- und Bildverarbeitungsverfahren auf FPGAs
oder ASICs zeigt. Die Implementierung von Algorithmen wird aber
üblicherweise mit dem Begriff "Programmierung" in Verbindung gebracht.

Ganz ähnlich verhält es sich mit der Sprache Postscript. Eigentlich ist
es – wie auch PCL – eine Seitenbeschreibungssprache für Drucker. Es ist
aber gleichzeitig auch eine echte Programmiersprache (ähnlich wie
Forth), mit der man bspw. ein Schachprogramm realisieren kann. Den
Begriff "Beschreibung" finde ich ganz treffend, solange die Postscript-
Datei lediglich dazu dient, Buchstaben und Grafikelemente an fixe
Positionen zu platzieren. Sobald aber Konstrukte wie Verzweigungen,
Schleifen oder gar Rekursionen verwendet werden, würde ich lieber von
"Programmierung" sprechen.

Auf Verilog und VHDL übertragen würde dies bedeuten: "Geradeaus-Logik"
(die durchaus nicht trivial sein muss) mit ein paar Puffern und etwas
Synchronisation mit anderen Komponenten ist für mich "Beschreibung",
während ich eine Logik mit vielfach verschachtelten Rückkopplungen, die
vielleicht sogar numerische Berechnungen ausführt, durchaus als
"Programmierung" ansehen würde.

> Es drückt eine Abgrenzung zur klassischen Ablaufsteuerung/Sequenz aus:

Wie gesagt, "Programmierung" hat schon lange nicht mehr notwendigerweise
etwas mit fest vorgegebenen sequentiellen Abläufen zu tun. Das war nur
früher so, als Computer noch größtenteils in Assembler prigrammiert
wurden.


Das Ganze ist aber sicher einfach nur eine Frage der Sichtweise:

Jemand der aus der Algorithmenecke kommt, und in einem FPGA eine
hochparallelisierte Rechneinheit sieht, wird dieses "programmieren".

Jemand, der jahrelang digitale Schaltungen aus Einzel-ICs entwickelt
hat, wird für seine Anwendung eine "Hardwarebeschreibung" anfertigen,
früher in Form eines Schaltplans, heute im FPGA-Zeitalter als
Verilog/VHDL-Text.

Insofern lohnt es sich nicht, hier um Begrifflichkeiten zu streiten :)

: Bearbeitet durch Moderator
von (prx) A. K. (prx)


Lesenswert?

Yalu X. schrieb:
> Meinen Zehennägeln geht es ähnlich, wenn mir ein Web-Designer etwas von
> "HTML-Programmierung" erzählt

... und oft PHP- oder JavaScript-Programmierung meint. Bei dem was da 
oft rauskommt können sich zwar auch die Zehennägel aufrollen, aber 
immerhin stimmt der Begriff der "Programmierung". (Diese Spezies sollte 
man nur mit UMTS und 10-Zoll Bildschirm auf Atom-V1-Rechnern arbeiten 
lassen - statt dessen entwicken die lokal auf der Büchse bis es schön 
aussieht und der Termin überschritten ist, gehen dann quasi ungetestet 
live und wundern sich, wieso die Kunden fluchen).

: Bearbeitet durch User
von Nase (Gast)


Lesenswert?

Nunja. Richtig Schwung in die "VHDL-Programmierung" kommt ja jetzt mit 
der High Level Synthesis u.a. bei Xilinx :-}

von Erwin M. (nobodyy)


Lesenswert?

Hamza Oktay schrieb:

> OpenMP scheint das gängigste zu sein? Was ist zu empfehlen?

Es gibt auch noch Posix Threads: 
http://en.wikipedia.org/wiki/POSIX_Threads

und auch Fork: http://en.wikipedia.org/wiki/Fork_%28system_call%29

Ich bevorzuge Posix Threads.
Fork ist ganz gut für Fork-Bomben und Zombie-Bomben; gut zum Testen ob 
die Prozesstabelle richtig limitiert ist.

Allerdings sind die für ganz verschiedene Bereiche: OpenMP 
parallelisiert Programme auf der Ebene von Schleifen, eingesetzt z. B. 
um Matrizenmultiplikation zu parallelisieren. Bei MPI und Posix Threads 
werden ganze Prozesse parallel laufen gelassen und die wirken durch 
Nachrichtenaustausch, z. B. Posix Signale, zusammen.
Beim Systemaufruf Fork erzeugt der aktuelle Prozess eine Kopie von sich 
selbst, welche dann als Kindprozess des erzeugenden Programmes läuft.

Also was eingesetzt wird, hängt vom Anwendungsbereich ab.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.