2009-06-12 11 views
3

Ich habe eine Funktion, die ein mehrseitiges Tiff in einzelne Seiten aufteilt und es verwendet die Windows BitBlt-Funktion. Würde die Grafikkarte in Bezug auf die Leistung einen Einfluss auf die Aufteilung haben? Würde es sich lohnen, stattdessen eine direkte C/C++ - Bibliothek zu verwenden?BitBlt Leistung

+0

Rendern Sie das TIFF dann als ein riesiges Bild? – jjxtra

+0

@Jeff - Nein, ich rendern nicht die TIFF - Ich nehme nur ein mehrseitiges TIFF und teile es in Dateien mit jeder einzelnen Seite. –

+0

Welches Bildformat haben Ihre neuen Dateien? – jjxtra

Antwort

2

Die Grafikkarte nimmt nur dann an einer Aktivität teil, wenn sie die Ziel-HDC des BitBlt ist. Eine Bibliothek für Imaging-Funktionen sollte für diese Aufgabe besser geeignet sein, da Sie diese letztendlich auf die Festplatte schreiben werden.

Wenn Sie Änderungen an den Bilddaten vorgenommen haben, besteht die Möglichkeit, dass die Verwendung Ihrer Grafikkarte helfen könnte. aber nur, wenn Sie viele neue Bilddaten für die Ziel-TIFFs, insbesondere 3D-Szenen und dergleichen, rendern.

+0

Eines ist zu beachten: Ein kartenspezifischer Treiber ist immer darauf optimiert, so weit wie möglich zu beschleunigen, während CPU-basierter Code möglicherweise nicht optimiert wird. Oder die CPU unterstützt möglicherweise nicht die Optimierungen, auf die Code zugreifen kann. Beschleunigte Blitting-Unterstützung gibt es schon lange, und abhängig davon, wie die Speicherarchitektur angeordnet ist, können Sie Unterstützung für automatische DMA erhalten. Für Bulk-Durchsatz könnte es einen großen Unterschied machen. – Christopher

+1

Die Aufgabe besteht darin, TIFF-Bilder zu teilen. Eine Bibliothek, die mit Vorkenntnissen eines TIFF-Layouts erstellt wurde, muss nicht alle anderen Zwischenschritte zum Erstellen von HDCs und Unterstützungsobjekten ausführen. Da es sich bei TIFFs um ein Rasterformat handelt, müssen keine Transformationen durchgeführt werden, wie dies bei JPEGs und anderen verwandten Formaten der Fall wäre. – meklarian

2

Wenn BitBlt die Seiten in den Videospeicher abbilden kann, ist die Wahrscheinlichkeit sehr hoch, dass Ihre Grafikkarte viel schneller ist als die CPU. Dies ist aus ein paar Gründen:

  • Die Karte wird parallel mit Ihrer CPU ausgeführt, so dass Sie andere Arbeiten ausführen können, während es ausgeführt wird.
  • Die Grafikkarte ist für die Ausführung der Speicherkopien optimiert, sodass die CPU nicht jedes Wort von einem Ort zum anderen kopieren muss. Dies gibt Ihren CPU-Bus für andere Dinge frei.
  • Die Grafikkarte hat wahrscheinlich eine größere Wortgröße für Datenbewegungen, und wenn Sie blit irgendwelche Operationsflags haben, werden diese wahrscheinlich von der Hardware optimiert. Außerdem ist der Speicher auf den meisten Grafikkarten schneller als der Systemspeicher.

Beachten Sie, dass diese Dinge nicht immer wahr sind. Wenn Sie zum Beispiel Systemspeicher freigeben, hat sie keinen schnelleren Zugriff auf den Speicher als die CPU. Sie erhalten jedoch immer noch die parallele Unterstützung.

Schließlich gibt es die Möglichkeit, dass der Overhead der Übertragung des Bildes auf die Karte und zurück die Geschwindigkeitsverbesserung überwältigen wird, die Sie auf der Karte machen. Sie müssen also nur experimentieren.

Ich sollte hinzufügen - ich glaube, dass Sie angeben müssen, dass der Speicher auf der Karte im Gerätekontext ist. Ich denke nicht, dass das Erstellen eines Speicherkontextes irgendetwas Besonderes mit der Grafikkarte macht.