이 간단한 스크립트는 pigz 병렬 압축기에 대한 다양한 zlib 압축 라이브러리를 벤치마킹합니다. 병렬 압축은 최신 컴퓨터에서 사용할 수 있는 여러 코어를 사용하여 데이터를 빠르게 압축할 수 있습니다. 이 기술은 최신 하드웨어의 다른 기능을 사용하여 압축을 가속화하는 CloudFlare zlib와 결합할 수 있습니다. 여기서는 NIfTI 형식 뇌 이미지의 .gz 압축을 평가하기 위해 스크립트를 조정했습니다. AFNI 및 FSL과 같은 도구에서는 gzip 압축(.nii.gz 파일)을 사용하여 NIfTI 이미지를 저장하는 것이 일반적입니다. 다중 대역과 같은 최신 MRI 방법은 거대한 데이터 세트를 생성하므로 이러한 이미지를 압축하는 데 상당한 시간이 소요됩니다.
아래 그래프는 기본 단일 스레드 pigz와 비교하여 pigz의 성능을 보여줍니다. 따라서 '1'은 동등한 성능을 나타냅니다. 성능은 3가지 압축 수준, 즉 빠름(3, 기준 35초), 기본값(6, 50초) 및 느림(9, 183초)으로 표시됩니다. 가로 축은 압축에 할당된 스레드 수를 나타냅니다. 낮은 압축 수준(1)에서는 모든 도구가 상대적으로 빠르며 디스크 읽기 및 쓰기가 속도 제한 요소가 됩니다. 더 높은 압축 수준에서는 여러 스레드와 CloudFlare 향상 기능의 조합으로 기본 gzip에 비해 성능이 크게 향상됩니다. 테스트 시스템은 24코어(48스레드) Intel Xeon Platinum 8260이었습니다.
다음 그래프는 인기 있는 Silesia 코퍼스를 압축하기 위해 4코어(8스레드) 컴퓨터에서 선호하는 스레드 수를 사용하는 각 도구를 보여줍니다. pigz의 모든 버전은 시스템의 단일 스레드 gzip보다 성능이 뛰어납니다. 최신 zstd 형식이 더 오래되고 단순한 gzip을 지배한다는 것을 알 수 있습니다. gzip은 많은 분야에서 널리 채택되었습니다(예: 뇌 영상 촬영에서는 NIfTI, NRRD 및 AFNI에 사용됨). gzip 형식의 단순성은 개발자가 도구에 지원을 포함하기 쉽다는 것을 의미합니다. 따라서 gzip은 커뮤니티에서 중요한 틈새 시장 역할을 합니다. 그러나 최신 하드웨어용으로 설계되고 새로운 기술을 활용하는 최신 형식에는 고유한 이점이 있습니다.
5decompress.sh
스크립트를 사용하면 압축 해제 속도를 비교할 수 있습니다. 압축 해제는 압축보다 빠릅니다. 그러나 gzip 압축 해제는 여러 스레드를 활용할 수 없으며 일반적으로 최신 압축 형식보다 속도가 느립니다. 이 테스트에서는 모든 gz 도구가 해당 데이터의 압축을 해제합니다. 대조적으로, bzip2 및 ztd는 더 작은 크기로 압축된 데이터를 압축 해제합니다. 초당 메가바이트 단위의 스핀은 압축 해제된 크기를 기준으로 계산됩니다. 더 컴팩트한 압축에서는 더 복잡한 알고리즘을 사용하는 것이 일반적이므로 이러한 형식 간 비교는 어렵습니다. 그럼에도 불구하고 gz 도구 중에서 zlib-ng는 뛰어난 압축 해제 성능을 보여줍니다.
속도(MB/초) | pigz-CF | pigz-ng | pigz-Sys | gzip | pbzip2 | pbzip2 |
---|---|---|---|---|---|---|
감압 | 278 | 300 | 274 | 244 | 122 | 236 |
다음과 같은 명령을 사용하여 벤치마크를 실행합니다.
1compile.sh
2test.sh
5decompress.sh
1compile.sh
다양한 zlib 변형(시스템, CloudFlare, ng)을 사용하여 pigz의 복사본을 다운로드하고 빌드합니다. 또한 압축을 테스트하기 위해 샘플 이미지, 특히 corpus
폴더에 복사되는 샘플 MRI 스캔을 다운로드합니다. 다른 스크립트를 실행하기 전에 먼저 이 스크립트를 한 번 실행 해야 합니다 . 다른 모든 스크립트는 서로 독립적으로 실행될 수 있습니다.2test.sh
다양한 버전의 pigz와 시스템의 단일 스레드 gzip의 속도를 비교합니다. corpus
폴더의 파일을 데이터 세트를 대표하는 파일로 바꿀 수 있습니다.3slowtest.sh
Silesia 코퍼스를 다운로드하고 압축 속도를 테스트합니다. 이 코퍼스는 인기가 있습니다: 벤치마크 1, 벤치마크 2, 벤치마크 3.4verify.sh
각 방법의 압축 및 압축 해제를 테스트하여 손실 없이 데이터를 저장할 수 있는지 확인합니다.5decompress.sh
압축 해제 속도를 평가합니다. 일반적으로 gzip 형식은 압축 속도는 느리지만 압축 해제 속도는 빠릅니다(특히 동시에 개발된 형식과 비교할 때). 그러나 gzip 압축 해제는 최신 zstd에 비해 느립니다. 또한 gzip 압축은 병렬 처리의 이점을 얻을 수 있지만 압축 해제는 그렇지 않습니다. 이 스크립트의 중요한 기능은 zlib의 각 변형이 압축 파일을 테스트 코퍼스에 제공한 다음 각 도구가 이 전체 코퍼스에서 테스트된다는 것입니다. 일부 zlib 압축 방법은 압축 해제 속도가 느린 파일을 생성하는 대신 더 작은 파일을 생성할 수 있으므로 이를 통해 유사한 작업을 비교할 수 있습니다.6speed_size.sh
Silesia 코퍼스를 압축하기 위해 pigz의 다양한 변형을 gzip, zstd 및 bzip2와 비교합니다. 각 도구는 다양한 압축 수준에서 테스트되지만 항상 선호하는 스레드 수를 사용합니다. blocksize
설정해야 합니다. 이 저장소에는 이 도구를 평가하기 위한 test_mgzip.py
스크립트가 포함되어 있습니다.