Diese einfachen Skripte vergleichen verschiedene zlib-Komprimierungsbibliotheken für den parallelen Pigz-Kompressor. Durch die parallele Komprimierung können mehrere Kerne moderner Computer genutzt werden, um Daten schnell zu komprimieren. Diese Technik kann mit der CloudFlare-Zlib kombiniert werden, die die Komprimierung mithilfe anderer Funktionen moderner Hardware beschleunigt. Hier habe ich das Skript angepasst, um die .gz-Komprimierung von Gehirnbildern im NIfTI-Format auszuwerten. Es ist üblich, dass Tools wie AFNI und FSL NIfTI-Bilder mithilfe der GZIP-Komprimierung (.nii.gz-Dateien) speichern. Moderne MRT-Methoden wie Multiband liefern riesige Datensätze, so dass viel Zeit für die Komprimierung dieser Bilder aufgewendet wird.
Die folgende Grafik zeigt die Leistung von Pigz im Vergleich zum standardmäßigen Single-Threaded Pigz, sodass „1“ eine gleichwertige Leistung anzeigt. Die Leistung wird für drei Komprimierungsstufen angezeigt: schnell (3, Grundlinie 35 Sekunden), Standard (6, 50 Sekunden) und langsam (9, 183 Sekunden). Die horizontale Achse zeigt die Anzahl der Threads, die der Komprimierung gewidmet sind. Bei niedrigeren Komprimierungsstufen (1) sind alle Tools relativ schnell, wobei das Lesen und Schreiben von der Festplatte der geschwindigkeitsbegrenzende Faktor ist. Bei höheren Komprimierungsstufen beschleunigt die Kombination aus mehreren Threads und CloudFlare-Verbesserungen die Leistung im Vergleich zum Standard-gzip erheblich. Das Testsystem war ein Intel Xeon Platinum 8260 mit 24 Kernen (48 Threads):
Die nächste Grafik zeigt, wie jedes Tool seine bevorzugte Anzahl von Threads auf einem 4-Core-Computer (8 Threads) verwendet, um den beliebten Silesia-Korpus zu komprimieren. Alle Versionen von Pigz übertreffen das Single-Threaded-GZIP des Systems. Man erkennt, dass das moderne zstd-Format das ältere und einfachere gzip dominiert. gzip ist in vielen Bereichen weit verbreitet (z. B. wird es in der Bildgebung des Gehirns für NIfTI, NRRD und AFNI verwendet). Durch die Einfachheit des gzip-Formats ist es für Entwickler einfach, Unterstützung in ihre Tools einzubinden. Daher spielt gzip eine wichtige Nische in der Community. Moderne Formate, die für moderne Hardware und die Nutzung neuer Techniken entwickelt wurden, bieten jedoch inhärente Vorteile.
Mit dem Skript 5decompress.sh
können wir die Dekomprimierungsgeschwindigkeit vergleichen. Die Dekomprimierung ist schneller als die Komprimierung. Die gzip-Dekomprimierung kann jedoch nicht mehrere Threads nutzen und ist im Allgemeinen langsamer als moderne Komprimierungsformate. In diesem Test dekomprimieren alle gz-Tools diese Daten. Im Gegensatz dazu dekomprimieren bzip2 und ztd Daten, die auf eine kleinere Größe komprimiert wurden. Die Geschwindigkeit in Megabyte pro Sekunde wird basierend auf der dekomprimierten Größe berechnet. Typischerweise werden bei einer kompakteren Komprimierung kompliziertere Algorithmen verwendet, sodass der Vergleich zwischen Formaten eine Herausforderung darstellt. Unabhängig davon zeigt zlib-ng unter den gz-Tools eine überlegene Dekomprimierungsleistung:
Geschwindigkeit (MB/s) | pigz-CF | pigz-ng | pigz-Sys | gzip | pbzip2 | pbzip2 |
---|---|---|---|---|---|---|
Dekompression | 278 | 300 | 274 | 244 | 122 | 236 |
Führen Sie den Benchmark mit einem Befehl wie dem folgenden aus:
1compile.sh
2test.sh
5decompress.sh
1compile.sh
lädt Kopien von pigz herunter und erstellt sie mit verschiedenen zlib-Varianten (System, CloudFlare, ng). Außerdem werden Beispielbilder heruntergeladen, um die Komprimierung zu testen, insbesondere die Beispiel-MRT-Scans, die in den Ordner corpus
kopiert werden. Sie müssen dieses Skript zuerst einmal ausführen, bevor Sie die anderen Skripte ausführen. Alle anderen Skripte können unabhängig voneinander ausgeführt werden.2test.sh
vergleicht die Geschwindigkeit der verschiedenen Versionen von Pigz sowie des Single-Threaded-GZIP des Systems. Sie können die Dateien im corpus
durch Dateien ersetzen, die für Ihren Datensatz repräsentativer sind.3slowtest.sh
lädt das Silesia-Korpus herunter und testet die Komprimierungsgeschwindigkeit. Dieses Korpus ist beliebt: Benchmark 1, Benchmark 2, Benchmark 3.4verify.sh
testet die Komprimierung und Dekomprimierung jeder Methode und stellt so sicher, dass Daten verlustfrei gespeichert werden können.5decompress.sh
wertet die Dekomprimierungsgeschwindigkeit aus. Im Allgemeinen lässt sich das gzip-Format langsam komprimieren, aber schnell dekomprimieren (insbesondere im Vergleich zu gleichzeitig entwickelten Formaten). Allerdings ist die Dekomprimierung von gzip im Vergleich zum modernen zstd langsam. Während die gzip-Komprimierung von der parallelen Verarbeitung profitieren kann, ist dies bei der Dekomprimierung nicht der Fall. Ein wichtiges Merkmal dieses Skripts besteht darin, dass jede Variante von zlib komprimierte Dateien zum Testkorpus beiträgt und dann jedes Tool auf diesem vollständigen Korpus getestet wird. Dies stellt sicher, dass wir ähnliche Aufgaben vergleichen, da einige zlib-Komprimierungsmethoden möglicherweise kleinere Dateien generieren, dafür aber Dateien erstellen, deren Dekomprimierung langsamer ist.6speed_size.sh
vergleicht verschiedene Varianten von pigz mit gzip, zstd und bzip2 zur Komprimierung des Silesia-Korpus. Jedes Tool wird mit unterschiedlichen Komprimierungsstufen getestet, jedoch immer mit der bevorzugten Anzahl an Threads. blocksize
einstellen, die der Anzahl der Threads für die Komprimierung entspricht. Dieses Repository enthält das Skript test_mgzip.py
zur Evaluierung dieses Tools.