빠른 jpeg 라이브러리 x86 SIMD ext for IJG JPEG 컴파일 삽질기

Jpeg 파일을 프로그램에서 읽고 쓸 때 libjpeg 라이브러리를 많이 사용한다.
이 라이브러리는 안정적이고 널리 쓰이고 있지만, 속도가 다소 느린 편이다.

꿀뷰 등의 빠른 이미지 뷰어에서 사용되는 x86 SIMD ext for IJG JPEG 라이브러리가 있다.
이 라이브러리는 libjpeg 6b를 확장해서 일부를 어셈블러로 작성한 것인데, 속도가 상당히 빠르다.
(현재 libjpeg는 8b 까지 공개됨)

이 라이브러리를 컴파일해보고, 이것이 libjpeg 8b에 비해 얼마나 빠른가를 확인해봤다.

컴파일 시에 특별히 준비할 것은 없고, NASM을 사용할 수 있도록 설치하기만 하면 된다.
준비사항은 아래와 같다.

1. NASM 설치
2. 실행파일의 파일명을 nasm.exe에서 nasmw.exe로 변경

Visual Studio 6.0과 Visual Studio 2010에서 같은 코드를 실행시켜 성능을 비교해봤다.


비교는 위 실행화면처럼 연산을 20회 반복한 뒤에 평균시간을 쟀다.
대상은 VC++6에서 컴파일한 6b-SIMD8b 그리고, VC++10에서 컴파일한 8b.
(VC++10에선 6b-SIMD 컴파일 실패했음)


역시 6b-SIMD가 어셈블러로 되어있는지라 상당히 빠르다.

1. 6b-SIMD는 8b에 비해 3배 가까이 빠름
2. 8b도 VC++10에서 컴파일한 것이 10% 정도 빠름
3. VC++10에서 6b-SIMD 컴파일 실패. 성공한 고수님들 계시면 내공 전수 좀…