Parallelverarbeitung von großen Daten



  • Hallo,

    ich schreibe im Rahmen eines Projektes ein kleines Tool, dass aus einer großen Menge an Klimadaten eine bestimmte Lösung berechnet. Also wie nachfolgend:

    Einlesen (zur Zeit 8 Dateien, zeilenweise um Speicher nicht voll zu schreiben) -> Verarbeiten (parallel) -> Ausgeben

    Jetzt zu meinen Fragen:
    1. Macht es sinn die Eingabe, Verarbeitung und Ausgabe gleichzeitig laufen zu lassen? Also ein Thread liest die Daten ein und bereitet sie auf, mehrere Threads verarbeiten die Daten und einer gibt aus. Beschleunige ich so den gesamten Ablauf?
    2. Kann mir jemand erklären, wie ich dies programmieren muss (kein Informatiker, nur selber beigebrachte "Grundlagen"). Sehe da Probleme die Daten in einen Vektor zu schreiben und gleichzeitig am Anfang zu löschen.



  • Ja, natürlich macht das Sinn.

    Für die Umsetzung gibt es mehrere Wege:

    [*]Die entsprechende Funktionalität der WinAPI, also Threads, Threadpools usw.

    [*]In C++11 gibt es jetzt auch standardmäßig Threadunterstützung, das meiste davon sollte in VS 2012 vorhanden sein.

    [*]Auf wesentlich höherer Abstraktionsebene bewegt sich die MS eigene Parallel Patterns Library, die gibt es ab VS2010

    [*]Wenn die PPL nicht reicht, kann man ab VS2012 auch die Grafikkarte(n) hinzunehmen mit C++ AMP

    [*]Sowas ähnliches wie die PPL gibt es auch von Intel, das sind dann die Threading Building Blocks TBB

    [*]Dann gibt es noch offene Standards für Berechnungen auf der Grafikkarte, wie OpenCL

    Zur PPL in Visual Studio gibt es diesen schön bebilderten Text:
    http://msdn.microsoft.com/en-us/library/gg675934.aspx
    Es gibt auch eine C# Version davon, beide kann man auch als EBook oder Papierausgabe erwerben.

    Auch für C++ AMP gibt es mittlerweile ein Buch:
    http://blogs.msdn.com/b/nativeconcurrency/archive/2012/10/11/c-amp-book-now-available.aspx

    Ich hoffe das war jetzt nicht zu erschlagend, aber diese Frage kann man nicht in ein paar Sätzen abhandeln.



  • Deine Frage kann man so nicht generell beantworten. Es hängt immer davon ab, ob die Vorgänge überhaupt parallelisierbar sind!
    Wenn, dann macht das natürlich Sinn.

    Für C** würde ich mich mal mit OpenMP oder PPL (siehe nn) beschäftigen.


Anmelden zum Antworten