2010/01/05 02:05
크리에이티브 커먼즈 라이선스
Creative Commons License

어쩌면 대단히 중요한 일

처음 목표는 GA 의 연산과정중 Evaluation 만을 CUDA 로 수정하여 속도를 가속화시키는 것

그러나

이를 실제 코드로 구현하여 수행해 보았더니 생각보다 빠른 속도가 안나온다

그 이유인즉 CPU -> GPU 간 Memory Copy 연산 및 GPU 상의 Memory Allocation 때문인데, 다른 여러 논문에서 GPU 로 GA 를 수행할 때 속도가 증가되었다고 했던 것들을 검토해 보았더니 전부 GPU 상에서 모든 유전 연산을 수행하고 있었다.

분명 단일 연산만을 놓고 보았을 때는 GPU 상에서 Evaluation 을 한번 처리한 것이 가장 빠르지만, 유전 연산을 CPU 상에서 하게되면, 결국 Memory 할당과 복사를 반복하게 되어 속도가 느려지는 것이다. Evaluation 연산을 하기 위해서는 반드시 GPU 상의 메모리에 CPU 의 현재 상태를 복사해야 하니까 결국 이것때문에 반복적인 메모리 복사가 수행될 수 밖에 없는 것.

그렇다면 결론은 GPU 상에서 모든 연산을 처리하는 것인가?

뭐 중요한 요소중에 하나는 내 GPU 가 Geforce G105M 256M 이기 때문에 큰 메모리 할당도 어려울 뿐아니라, Stream Processor 수도 부족해서 제 속도 나오긴 어려울 수 밖에 없다는 건데...

동일한 실험 조건
static const int POPSIZE = 5000;
static const int MAXGENS = 100;
static const int ITERATION = 200;
static const int NVARS = 10;

GPU 상의 실험 결과(Geforce G105M 256MB)
Durations : 14118.000000 ms

CPU 상의 실험 결과(Intel Core2Duo P8600@2.4Ghz, 4 GB ram)
Durations : 10998 ms

다음엔 Geforce GTX270 876MB 에서 테스트 해볼 예정.
과연 어느정도 시점에서 Evaluation 작업만을 수행할 때 GPU 사용 작업이 속도가 대폭 상승할 수 있을 것인가?

저작자 표시 비영리 동일 조건 변경 허락
Posted by SHHyun