2010년 6월 21일 월요일

빠른 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 컴파일 실패. 성공한 고수님들 계시면 내공 전수 좀…


댓글 3개:

  1. 원래 기본 시간이 짧으니 3배라고 해도 생각만큼 차이가 안나네요 흐음..

    집에서AMD 칩에서도 벤치해볼가요? ㅋ

    답글삭제
  2. @구차니 - 2010/06/21 11:26
    1. 그럴수도 있지만, 이미지 읽을 때 찰나의 딜레이 문제라 은근 민감하죠.

    2. 6b-SIMD VC++2010 컴파일 방법 급매!

    답글삭제
  3. @BLUEnLIVE - 2010/06/21 13:06
    VC 2010이 먼가요!

    지금은 곤란하다 기다려달라 카운터!





    음.. 그러고 보니.. VC 2010도 어둠의 경로로 구해봐야 하는건가요 ^^;

    답글삭제