Superkkt Blog

IEEE 754 floating point precision에는 아래와 같이 3가지 타입이 있다.

Single (32-bit)
Double (64-bit)
Quadruple (128-bit)

Half precision은 16-bit 데이터 구조로 아직은 IEEE 표준이 아니지만 현재 proposal 단계에 있다고 한다. 이것의 구조는 아래 사이트를 참조한다.

http://en.wikipedia.org/wiki/Half_precision

Half precision은 single precision에 비해서 표현할 수 있는 값의 min, max 범위가 작아지고, single precision -> half precision -> single precision 변환을 했을 때 오차가 발생하는 문제가 있다. 내가 실험한 바로는 오차 범위는 +- 0.001 이하였다.

하지만 사용하는 single precision 데이터 값의 범위가 크지 않고 약간의 오차를 견딜 수 있다면 half precision을 사용할 수 있다.

내가 지금 개발하는 프로그램은 single precision으로 vector를 표현하고 있는데 데이터 파일의 크기가 조만간 테라바이트에 도달할것 같다. 그래서 디스크 입출력이 가장 큰 병목지점으로 작용하고 있는데 이를 줄이기 위해서 half precision의 사용을 시도해 보려고 한다.

디스크 입출력 크기가 절반으로 줄어서 얻는 이득이 single precision <-> half precision 변환에 들어가는 CPU 계산 시간보다 커야 실질적인 속도 향상이 있겠지만 충분히 가능할 것으로 생각한다.

Half precision을 사용하기 위한 몇 개의 라이브러리가 있다.

http://www.cellperformance.com/articles/2006/07/branchfree_implementation_of_h_1.html
http://www.openexr.com/index.html

일단 첫 번째 라이브러리만 테스트를 해봤는데 쓸만하다.
2009/06/20 17:07 2009/06/20 17:07

trackbacks

trackbacks rss

이 글에는 트랙백을 보낼 수 없습니다

  1. 김기태 2009/12/15 20:50
    M/D R
    x86 CPU에서는 아직 half precision을 지원하지 않기 때문에 소프트웨어로 구현을 해야 한다. 그런데 첫번째 라이브러리를 써본 결과 변환 과정의 cost가 상당히 높아서 실제로 사용하지는 못했다.

    AMD에서 2010년쯤에 새로 나온다는 CPU(이름이 불도져였나??)에서는 half precision 변환을 수행하는 기능이 들어간다고하니 그때쯤 사용해볼만하려나..

    암튼 좀 오래된 글이지만 다시 생각나서 기록해둔다.

Leave a Comment