Laden...

xeon phi & massiv parallel programming mit c#

Erstellt von numpsy vor 9 Jahren Letzter Beitrag vor 9 Jahren 3.148 Views
N
numpsy Themenstarter:in
231 Beiträge seit 2007
vor 9 Jahren
xeon phi & massiv parallel programming mit c#

hallo... hat irgendjemand schon erfahrungen damit gesammelt? also solche beschleunigerkarten sind ja zT erschwinglich... aber wie kann man die aus c# programmen ansprechen zB für berechnungen oder parallele abläufe aus zB console apps? wichtig ist ja auch der abruf der leistung... habe was von yeppp! gelesen, aber wollte mal hier fragen... & eigentl. muss doch das betriebssystem dafür sorgen, wenn wir thread-basiert entwickeln? lg

2.080 Beiträge seit 2012
vor 9 Jahren

Also mehrere Kerne werden glaube ich automatisch erkannt und auch für Threads verwendet, wenn sie denn zur Verfügung stehen.

Wie das bei mehreren Prozessoren oder Massively Parallel Processing aus sieht, kann ich dir nicht sagen, aber du kannst es ja mal ausprobieren.
Testweise auf einen Rechner mit zwei Prozessoren alle Kerne beider CPUs voll aus lasten, dann sieht man das ja im Task-Manager.

Ob es zuverlässigere Methoden gibt, weiß ich leider auch nicht.

Aber bei einem bin ich mir ziemlich sicher: Manuell die Kerne und CPUs ansprechen und ausnutzen, das geht rein mit C# nicht.
Was du aber machen kannst, ist in C entsprechende Funktionen schreiben und dann mit C# nutzen.

Ich habe das noch nie gemacht, ich habe bisher nur vereinzelt ein paar DLLs von Windows auf diese Weise verwendet, aber hier eine auf den ersten Blick ganz gute Anleitung:

P/Invoke Grundlagen

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

16.842 Beiträge seit 2008
vor 9 Jahren

Doch, man kann einen Prozess bzw. Thread problemlos an ein Kern verweisen.
Nennt sich ProcessorAffinity.

Massive Parallel Processing läuft aber ja nicht nur über eine CPU, sondern ein Netzwerk von Ressourcen und dafür hat .NET von Haus aus nichts. Das übernehmen ja generell eher spezialisierte Umgebungen oder eben Frameworks.
NET ist jetzt aber auch nicht unbedingt die Technologie, die dieses Vorhaben fokussiert.

Reden wir von paralleler Programmierung auf dem lokalen System reicht das Thread- und Task (TPL) von .NET völlig.

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo numpsy,

Wikipedia sagt in Xeon Phi:

The cores of Intel MIC are based on a modified version of P54C design, used in the original Pentium. The basis of the Intel MIC architecture is to leverage x86 legacy by creating a x86-compatible multiprocessor architecture that can utilize existing parallelization software tools. Programming tools include OpenMP, OpenCL, Cilk/Cilk Plus and specialised versions of Intel's Fortran, C++ and math libraries.

herbivore

PS: Interessant dass es jetzt sowas gibt. Die Frage, ob man Transistoren nicht effizienter nutzen kann, wenn man sie in viele Kerne einfache statt in immer komplexere Kerne steckt, habe ich mir bzw. einem Spezialisten schon August 2007 - der Zeit als gerade die ersten Intel Dual-Cores aufkamen - gestellt (ohne damals eine direkte Antwort zu erhalten). So wie ich es verstanden habe, ist diese Idee in Xeon Phi umgesetzt.

Wäre es nicht deutlich schneller, wenn man die steigende Anzahl von Transistoren stärker als bisher zur Parallelisierung nutzen würde?

Wenn ich das richtig sehe, kann man heute ca. 300 Mio Transistoren auf einem Die unterbringen. Ein 8086 benötigt ca. 30.000 Transistoren. Mithin könnte man "milchmädchengerechnet" ca. 10.000 8086-Kerne auf einem aktuellen Die unterbringen. Wäre das nicht - natürlich nur bei entsprechend parallelisierbaren Anwendungen - deutlich schneller?

8086 ist dabei nur ein Beispiel. Natürlich kann und sollte es wohl auch ein neuentwickelter Kern sein. Meine Frage ziel darauf, ob es nicht sinnvoller wäre, viele Kerne dieser relativ geringen Komplexität zu verwenden.

Es wäre ja auch ein Kompromiss denkbar aus einem aktuellen komplexen Kern und 5.000 einfachen Kernen.

Der Xeon Phi ist eine Antwort darauf.

N
numpsy Themenstarter:in
231 Beiträge seit 2007
vor 9 Jahren

Hallo,

also das mit ProcessorAffinity ist ja eine tolle Sache...

Die Bibliotheken hatte ich auch gefunden, aber mir ging es ja ohne viel Aufwand aus unserem geliebten C# die volle Power nutzen zu können... da fehlt hier aber leider die Erfahrung... Schade...

LG

16.842 Beiträge seit 2008
vor 9 Jahren

Volle Power von was? Der CPU des lokalen Systems? Die Kerne des lokalen Systems? Remote-Ressources?

Nicht alles ist parallelisierbar und nicht alles wird mit paralleler Berechnung schneller; manches kann auch durchaus langsamer werden.
Beschreib Doch mal was Du vor hast und was Du erreichen willst; dann kann man Dir den einfachsten Weg mit C# nennen, oder, ob was anderes sinnvoller ist.
Mit ~8 Zeilen C# Code ist es problemlos möglich die CPU und alle Kerne des lokalen Systems zum Vollanschlag zu bringen.

Vielleicht träumst Du von einer Umgebung, die vielleicht nicht nötig oder machbar ist.
Oder vielleicht redest Du von einfachster paralleler Berechnung.

Zudem wirst Du Grundlagen von Threads beherrschen müssen.
[Artikel] Multi-Threaded Programmierung

W
872 Beiträge seit 2005
vor 9 Jahren

Die Karten mit dem Xeon Phi scheinen ein Linux System intern zu fahren.
Entwickeln musst Du mit dem Intel C++ Compiler - da funktionierst nichts mit Interop.

N
numpsy Themenstarter:in
231 Beiträge seit 2007
vor 9 Jahren

... schade... & einen wrapper gibt es dann wohl nicht... aber wenn http://www.yeppp.info/ das kann, muss es doch auch anders gehen?!

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo numpsy,

wenn man mit dem C++-Compiler eine Bibliothek geschrieben hat, dann kann man für diese natürlich anschließend einen C# Wrapper schreiben.

Das ändert aber nichts daran, dass die eigentliche Arbeit in C++ (und nicht per Interop) erfolgen muss. Ich denke, so war die Aussage von weismat gemeint.

Es sei denn, man findet eine fertige Bibliothek, die die eigenen Anforderungen erfüllt und vielleicht sogar einen fertigen C# Wrapper dafür. Ist aber fraglich, ob es da wirklich (schon) was passendes für gibt.

herbivore

W
872 Beiträge seit 2005
vor 9 Jahren

Ich meinte schon, was ich schrieb.
Yeppp schreibt selber bei Supported architectures "Linux on k1om architecture (Xeon Phi)" - entweder läuft nun der eigene C#-Code unter Mono auf Linix oder es ist etwas mit Inter Process Communication.

16.842 Beiträge seit 2008
vor 9 Jahren

Ich find immer noch, dass am Kern des Threads vorbei geredet wird.
Wieso reden wir über solche Karten, wenn nicht mal der Zweck klar ist? Es stellt sich doch erst mal die Frage, was überhaupt parallelisiert verarbeitet werden soll.
Vielleicht ist gar nicht die CPU der Flaschenhals, sondern zB die Festplatte. Dann kannst Du so viele Karten wie Du willst ansprechen: schneller wirds nicht.

N
numpsy Themenstarter:in
231 Beiträge seit 2007
vor 9 Jahren

habe grad noch etwas gefunden:

Zitat von: Using Windows Instead of Linux as a Host for Xeon Phi Coprocessor
The Xeon Phi has been supported on Windows since Intel released drivers for it last year. But the Xeon Phi’s own OS is still Linux, and you need to use an SSH tool (such as Putty) to connect to it. When you do, you can proceed with building code for it just as if you’re using Linux, and utilize familiar tools such as Intel Parallel Studio XE.

also muss man tatsächlich versuchen iwie die Aufgaben an den Co Prozessor bzw das dort laufende Linux zu übergeben...

es gibt auch Ansätze von "Mono für Xeon Phi"... sehr spannend...

Hinweis von gfoidl vor 9 Jahren

Bitte bei solchen Zitaten auch die Quelle angeben. Am besten per [[nop][/nop]quote3]-Tags.