유명(?) 압축 알고리즘들의 간단한 성능 비교


지난 포스트에서 QuickLZ와 Snappy의 성능을 비교했다.
이에 추가적으로 안 빠른(그리고, 높은 압축률을 자랑하는) 알고리즘들의 성능을 비교한 결과를 간단히 포스팅한다.

0. 들어가기 전에

- 압축 대상 파일은 Video Converter for iPhone.exe 하나만을 대상으로 함

- 파일 단위에서 압축한 시간이 아니라, 파일을 메모리에 읽어온 뒤 메모리 내에서 압축/복원한 시간임

- 압축/복원은 각각 5000번씩 반복한 시간을 ms단위로 측정한 결과임

- QuickLZ는 1~3의 3가지 레벨이 있음
  1은 압축률이 높지 않으나 빠르고, 3은 압축률은 높으나 속도가 느림

- zlib는 10가지 레벨(1~9, -1)을 지원하는데, 여기서는 3가지 레벨만을 적용함
  1: BEST_SPEED(1), 2: DEFAULT(-1), 3: BEST_COMPRESSION(9)

- LZMA는 별도로 레벨을 지정하지 않고, 기본값만 사용함
  ※ LZMA2도 적용하려 했지만, 파일간 압축만 지원하고 메모리 내에서의 압축(One Call Interface)을 아직 지원하지 않음


1. zlib-DEFAULT

빠른 알고리즘(Snappy, QuickLZ 등)들이 제아무리 성능을 높게 올리려고 해도 한계는 명확하다.
zlib의 기본모드의 압축률을 따라오지 못한다.


하지만, 그만큼 느리다.

zlib의 BEST_SPEED에 비해 2배 이상 느리다는 것을 볼 수 있다.




2. zlib-BEST_COMPRESSION

zlib를 BEST_COMPRESSION 모드로 압축을 해도 압축파일의 크기는 별로 작아지지 않는다.
0.07%p라는 차이는 그리 매력적으로 느껴지지 않는다.


게다가, zlib-BEST_COMPRESSION을 돌려보면 zlib-DEFAULT가 느리다는 생각이 싹 사라진다.

정말로 엄청나게 느리다. zilb-DEFAULT에 비해 2.5배 정도 느리다는 것을 볼 수 있다.


1번의 그래프에 Zlib #3 하나만 추가했을 뿐인데…



3. LZMA

요즘 사용되는 압축 프로그램 중 압축률의 갑은 역시 7zip이다.
여기서 사용되는 알고리즘이 바로 LZMA이다.[각주:1]

역시 한차원 높은 압축률을 자랑한다.
zlib-BEST_COMPRESSION보다 무려 7.35%p 높은 압축률을 보여준다.


하지만, 이 극악의 느린 속도는 답이 없다.

zlib-BEST_COMPRESSION보다 2.3배 느리고, zlib-DEFAULT보다 5.7배 느리다.


역시 앞의 그래프에 LZMA 하나 추가했을 뿐인데… ㄷㄷㄷ



3. 그 외 참고사항…

- 위의 데이터는 Visual C++ 6.0(32비트)에서만 테스트한 결과임
- LZMA 알고리즘은 Visual C++ 2010 SR1에서 32비트/64비트 환경에서 각각 별도의 테스트를 했는데,
  ㆍ VC2010-x86이 VC6보다 2% 정도 빠르게 동작하고
  ㆍ VC2010-x64가 VC2010-x86보다 4% 정도 빠르게 동작함

  1. 정확히는 LZMA와 LZMA2를 지원하는데, 전술했듯, LZMA만 One Call Interface를 지원하기 때문에 LZMA만 테스트함 [본문으로]