레이블이 SIMD인 게시물을 표시합니다. 모든 게시물 표시
레이블이 SIMD인 게시물을 표시합니다. 모든 게시물 표시

2010년 6월 26일 토요일

디카 메모리가 부족하다고 풍경을 마음에 담을 순 없다! (캐궁극 버전)

by BLUEnLIVE | 2009/10/14 04:17

이번에도 okto님의 꼬득임에 문득 넘어가버려 기능 추가. OTL (이번에도 너는 이미 뜯어고치고 있다!) 내가 킹크랩을 반드시 뺏어먹고야 말...


디카 사진의 크기를 줄여주는 프로그램에 jpeg SIMD extension 라이브러리를 적용했다.
덕분에 기존 버전에 비해 속도가 엄청나게 빨라졌음은 물론, 파일의 크기가 훨씬 작아졌다.

기존 버전도 120,832바이트라는 엄청나게 작은 크기를 보여줬지만, 이 버전은 단  98,304바이트밖에 되지 않는다!

이 프로그램은 정말 작기 때문에 여행을 갈 때 디카 메모리 한 구석에 넣어두고 쓰면 유사시에 큰 도움이 될 것이다!


물론, 실행 화면은 아래처럼 거의 바뀐 게 없다. ㅎㅎ


2010년 6월 22일 화요일

더 빠른 jpeg 라이브러리 jpeg-turbo 컴파일 삽질기

by BLUEnLIVE | 2010/06/21 07:49

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


VS 2008/2010에서 사용할 수 있는 빠른 jpeg 라이브러리를 찾다가 turbo-jpeg이란 라이브러리를 찾게 되었다.
x86 SIMD ext for IJG JPEG를 개선해서 만든 라이브러리답게, SIMD ext에 비해서 약간 빠르다.

ㅎㄷㄷ한 성능 향상. 아싸!


BUILDING.txt 파일에 컴파일하는 법이 나와있는데, 간략히 간추리면 이렇다.

1. GNU Make v3.7 이상 준비: MSYS나 Cygwin에 들어있음. (그렇다! nmake는 쓰지 않는다!)
2. Windows SDK for Windows Server 2008 and .NET Framework 3.5 준비
3. NASM v0.98 이상 준비: SIMD ext에서와 마찬가지로 어셈블러로 NASM을 사용.
4. make -f win/Makefile

VS 2008과 2010 모두에서 동일한 방법으로 컴파일 가능하며, 성능은 비슷하다.


덧1. 최근 몇 가지 이유로 컴파일러를 VC++ 6.0에서 VS 2008로 이전할 예정인데, 적절한 jpeg 라이브러리를 찾은 듯.
덧2. SIMD ext는 VC++ 6.0에서만 컴파일 가능하고, jpeg-turbo는 VC++ 2008 이상에서만 가능한 듯.
덧3. make는 GNU Make를 쓰지만, link는 VS 2008의 link를 써야 함. path에 지정했다 잠시 삽질 함.

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