C/C++의 double형은 수치 해석 분야의 기본적인 자료형이다. float형은 정밀도가 떨어지므로 주로 이 자료형이 사용되며 GPU도 이 자료형의 계산을 고속으로 수행하도록 설계된 것으로 알려져 있다.
그런데 long long int 형은 8바이트 정수형 자료형인데 단순 곱셈의 경우 수행 속도에 시간 차가 많이 난다. 다음과 같은 간단한 c++ 프로그램을 내 노트북에서 실행시켜서 확인해 보았다.
#include <stdio.h>#include <time.h>#define ITER 100000000 //1억번int main() {clock_t clkStart, clkEnd;double dt1, dt2;clkStart = clock();double da = 10.1, db=11.2;for (long k=0; k<ITER; k++) {da*=db;}clkEnd = clock();printf("%.3f sec\n", dt1=((double)clkEnd-clkStart)/CLOCKS_PER_SEC);clkStart = clock();long long lla = 101, llb=112;for (long k=0; k<ITER; k++) {lla*=llb;}clkEnd = clock();printf("%.3f sec\n", dt2=((double)clkEnd-clkStart)/CLOCKS_PER_SEC);printf("%.2f percent", dt2/dt1*100);} |
이 프로그램은 단순히 double형 두 개를 곱셈 후 대입하는 동작 1억 번과 long long 형 덧셈 후 대입하는 동작 1억 번의 수행 시간을 구하는 것이다. 결과는 다음과 같이 후자가 전자 대비 3%의 시간밖에 걸리지 않았다.
문제는 GPU 기반의 라이브러리인 CUDA에서 정수형 연산도 실수형 만큼 효율적인가 하는 것이다. 하지만 그러지 않더라도 나름 의미가 있지 않을까.
'연구' 카테고리의 다른 글
자바(JAVA)로 고정 소숫점 연산과 부동 소숫점 연산 속도 (0) | 2015.07.07 |
---|---|
자바의 기본형과 wrapper 클래스의 성능 비교 (0) | 2015.07.03 |
수학적인 신경망의 뉴런(neuron)에 대한 기술 (1) | 2015.07.03 |
자바에서 단순 배열과 리스트의 요소 접근 속도 비교 (0) | 2015.07.02 |
C++과 JAVA성능 내 윈도 노트북에서의 비교 (0) | 2015.07.01 |