Single (32-bit)
Double (64-bit)
Quadruple (128-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
일단 첫 번째 라이브러리만 테스트를 해봤는데 쓸만하다.

comments
comments rss (+댓글 쓰러가기)AMD에서 2010년쯤에 새로 나온다는 CPU(이름이 불도져였나??)에서는 half precision 변환을 수행하는 기능이 들어간다고하니 그때쯤 사용해볼만하려나..
암튼 좀 오래된 글이지만 다시 생각나서 기록해둔다.