2009-07-11 9 views
5

Ich baue eine CD-Ripper-Anwendung in C++ und Qt. Ich möchte die Anwendung so parallelisieren, dass mehrere Spuren gleichzeitig codiert werden können. Daher habe ich die Anwendung so strukturiert, dass die Codierung eines Tracks eine "Aufgabe" ist, und ich arbeite an einem Mechanismus, um einige dieser Aufgaben gleichzeitig auszuführen. Ich könnte dies natürlich mithilfe von Threads erreichen und meine eigene Aufgabenwarteschlange oder Arbeitsmanager schreiben, aber ich dachte, dass die Threading Building Blocks (TBB) von Intel ein besseres Werkzeug für den Job sein könnten. Ich habe jedoch ein paar Fragen.Threading Building Blocks (TBB) für Qt-basierten CD-Ripper?

  1. Kodiert eine WAV-Datei in eine FLAC-, Ogg Vorbis- oder Mp3-Datei, die als tbb :: task funktionieren würde? Das Tutorial-Dokument besagt, dass "wenn Threads häufig blockieren, ein Leistungsverlust bei der Verwendung des Task-Schedulers auftritt". Ich glaube nicht, dass meine Codierungsaufgaben für Mutexe häufig blockieren würden, aber sie müssen relativ häufig auf die Festplatte zugreifen, da sie die WAV-Daten von der Festplatte lesen müssen, um zu verschlüsseln. Ist diese Ebene der Festplattenaktivität in dem im Lernprogramm beschriebenen Sinne problematisch?
  2. Funktioniert TBB gut mit Qt? Wenn Sie Qt-Threads verwenden, können Sie den Qt-Mechanismus für Signale/Slots transparent über Threads verwenden. Wäre das genauso, wenn ich tbb :: tasks anstelle von Qt threads verwenden würde? Gäbe es andere "Gotchas"?

Vielen Dank für Ihre Einsichten.

Antwort

1

TBB soll gut funktionieren, sogar transparent, mit anderen Threading-Mechanismen, so dass theoretisch nichts daran hindern sollte, QTs Thread-Klassen im selben Programm zu verwenden. Wenn es etwas gibt, das natürlicher mit QT-Threads funktioniert, wie die GUI, benutze sie und halte die TBB-Sachen so gut wie du kannst oder willst.

Ich sehe nicht, dass Sie die beste Nutzung von TBB machen, wie Sie Ihr Design gerade umrissen. Sie parallelisieren auf der gröbsten Ebene die Datei. Wie Sie vermuten, verbringen Sie möglicherweise mehr Zeit mit der Suche nach Daten aus mehreren Dateien, als Sie tatsächlich speichern, da die CD ein ziemlich langsames Gerät ist.

Der wahre Knall für das Geld mit TBB sollte die Auswertung von Daten und/oder Aufgabenparallelismus im Transformationsprozess beinhalten. Kann man zum Beispiel irgendeinen Block von Bytes aus dem Datenstrom ziehen und unabhängig von irgendeinem Teil des Datenstroms vor oder nach dem Datentransfer auf ihn anwenden? Gibt es mehrere Schritte zur Transformation, die parallelisiert werden können?