2011년 10월 11일 화요일

대용량 Data에 대한 성능 향상 방안

  1. 압축 라이브러리 및 성능 비교

  2. 비교 사이트 : http://warp.povusers.org/ArchiverComparison/

    추천 라이브러리 : 7-Zip, bzip2

    7-Zip 라이브러리 for C++ : http://www.7-zip.org/sdk.html

    Bzip2 라이브러리 : http://www.bzip.org/downloads.html (compile 필요)

     

  3. 압축 라이브러리를 이용한 대용량 Data I/O

  4. DISK I/O, 메모리, CPU 에서의 Data 처리 속도는

    DISK <<<<<<<<< 메모리 <<<<<<<<<<<<<<<<<< CPU 입니다.

    즉 모든 Data 는 되도록 CPU 에서 처리하면 좋습니다. 다만 CPU는 Data 처리 공간이 제한되므로 되도록 메모리에서 처리할 수 있는 것이 가장 효과적입니다.

    이에, 대용량 DATA를 DISK <-> 메모리에 읽기/쓰기를 수행할 때, 압축을 통해 Disk 에 저장하고, 읽을 때 압축을 해제하여, Disk IO 작업을 최소화 하게 되면, 프로그램 성능을 상당히 높힐 수 있습니다.

     

  5. 비동기 IO를 사용한다.

  6. 현재 C++ 용 비동기 IO 라이브러리 또는 비동기 호출 문법이 있는지 모르겠지만, C#이나 Java에서도 제공되므로, 있을 것입니다.

    예제: http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/536dd521-99f9-4721-b10a-b80cb2147339/

     

  7. 병렬 프로그래밍 라이브러리를 활용한다.

  8. Visual C++ 용 Parallel Program Library (http://parallelpatternscpp.codeplex.com/) 를 이용하면, 멀티 코어 CPU에서 동시 작업 및 비동기 작업 (Background Thread 작업) 이 가능해지고, 대용량 Data 처리도 병렬로 가능해 지므로, 성능 향상에 기여합니다.

    ==> 이상적으로는 논리적 CPU 개수가 4개라면, 3~3.5배의 성능향상을 가져올 수 있습니다.

    참고 사이트 : http://blogs.msdn.com/b/nativeconcurrency/

댓글 없음: