블로그 이미지
smstock

카테고리

분류 전체보기 (54)
취미 (8)
공부 (32)
낙서장 (12)
Total
Today
Yesterday

달력

« » 2024.12
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

공지사항

태그목록

최근에 올라온 글


듀얼코어를 넘어 매니코어 CUP가 보편화 되면서 병렬 프로그램에 대한 관심이 높아지고 있습니다.

OpenMP는 공유 메모리 환경에서 프로그램을 병렬화하는 표준입니다. (http://en.wikipedia.org/wiki/OpenMP)

 

예를들어 1000번을 반복하는 연산이 있다고 하면

단일쓰레드 환경에서는 다음과 같습니다.

 

for( int i = 0 ; i < 1000 ; ++i )

    result[i] = srcA[i] * 256 + srcB[i] * 256;

 

하지만 2Core-CUP 환경에서는 다음과 같이 이루어 지는게 더 효과적일 것입니다.

 

Thread #1

    for( int i = 0 ; i < 500 ; ++i )

        result[i] = srcA[i] * 256 + srcB[i] * 256;

 

Thread #2

    for( int i = 500 ; i < 1000 ; ++i )

        result[i] = srcA[i] * 256 + srcB[i] * 256;

 

복잡도가 높은 반복 연산일 경우 병렬프로그래밍은 더욱 큰 효과를 나타냅니다.

 

우리가 사용하는 VS2005에서도 OpenMP를 사용할수 있습니다.

[프로젝트 속성 - C/C++ - 언어] 를 보시면 [OpenMP Support] 항목이 그것입니다.

 

#Include <omp.h>

 

int iCPU = omp_get_num_procs(); // cup 수를 얻어옵니다.
omp_set_num_threads(iCPU);  // cup 수만큼 병렬하는것이 최적이겠죠.

 

#pragma omp parallel for
for( int i = 0 ; i < 1000 ; ++i )

        result[i] = srcA[i] * 256 + srcB[i] * 256;

 

VS2008 에서 FeaturePack에서 TR1(차세대 C++ 표준 규격)을 지원하더니 VS2010 에서는 PPL(Parallel Partern Library)를 지원한다고 합니다.

OpenMP를 좀더 쉽고 편하게 사용할수 있게 되는다는군요.

Posted by smstock
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함