요즘 C++Builder XE3의 LLVM기반 64bit 컴파일러의 성능(실행)을 좀 체크해 보고 있습니다.
마침 카메라 영상의 비네팅 보정 알고리즘을 만들고 있는 것이 있어서 VC++ 2010과 실행성능을 대충 비교해 보았는데요,
결론은 VC++ 2010대비
BCC32: 실수 연산 속도 안습
BCC64: 실수 연산 속도 굿!
비네팅 보정은 두가지 버전으로 준비했습니다.
1. 속도 최적화를 위해 인텐시티 값을 양자화 하여 이중 룩업테이블로 구현하여 적용시에는 단순히 룩업 테이블 연산만 하는 버전
2. 인텐시티 값을 실수 형태의 단일 룩업 테이블로 구성하고 적용시에 실수 연산과 클램핑을 하는 버전
당연히 2가 오래 걸립니다.
인텔 i7 2.0GHz CPU에서 테스트했고 640x480 이미지에 대해 30번씩 수행해서 평균 소요시간을 멀티미디어 타이머로 측정하는 방법을 사용했습니다. 싱글코어용으로 만들어진 코드입니다.
BCC32:
1번: 1.9msec, 2번: 32msec
VC 2010 (32bit):
1번 0.97msec, 2번: 4.5msec
BCC64:
1번: 1.7msec, 2번: 3.3msec
VC++ 가 2005 이후로 최적화가 매우 좋아졌다는 말만 듣고 실제로 체감하지는 못했는데 확실히 좋아진게 맞군요. 예전엔 분명 빌더나 VC나 큰 차이가 나지 않았거든요.
BCC32는 XE로도 테스트 해 봤지만 XE3나 XE나 별 차이 없습니다.
32bit 어플을 32bit OS와 64bit OS에서 동작 시킨 결과도 별 차이 없습니다.
VC 64bit는 귀차니즘 발동으로 테스트 하지 않았습니다. 제가 만든 코드가 uint8, float만 사용하고 있기 때문에 32bit나 별 차이 없을 것 같긴 한데...
기존 프로젝트를 64bit로 컴파일할 때 큰 문제는 보이지 않습니다만 여전히 SSE, MMX 사용을 위한 C헤더는 BCC64에도 포함되어 있지 않습니다. 퀄리티 센트럴에 이슈가 올라와 있긴 한데 특별한 이유도 없이 그냥 Resolved 처리가 되어 있네요.
엠바카데로에서 64bit 컴파일러 지원을 빨리 안정화, 마무리 하고 32bit 컴파일러도 좀 신경을 써 주면 좋겠습니다.
|