병렬 Process를 적용 하자.

 

a) for문 구성을 간단하게 Multi Thread와 같은 형태로 변환해준다.(병렬 프로그래밍)

- 8Thread CPU에서 4개를 사용할 경우에 속도 향상이 가장 좋아 4개로 기준 한다.(여러가지 요건에 의해 바뀔 수 있음)

b) 임의로 분리 수를 조절 할 수 있다.

c) 아주 간단하게 반복문의 정보 처리를 빠르게 할 수 있다.

 

* Window 자원요소등에 접근해야 할 경우 주의를 요한다.(로컬 변수 형태로 Object를 관리해줘야 한다)

 (직접 작성 코드에 대한 병렬화에 매우 좋은 효과를 기대 할 수 있다)

* GPU가 아닌 CPU자원을 사용하는 것이다 *^^;;

 

1) 설정.

Open MP를 사용하기 위한 설정

 

 

2) 기본 코드

		int nThAllCht =  OMP_TH_CNT;//(4)// omp_get_num_threads();
		omp_set_num_threads(nThAllCht);
#pragma omp parallel//윈도우즈용 비주얼 스튜디오는 알아서 컴파일 해준다.
		{
            //이하 코드는 For문을 각 Thread에게 공통적으로 분배 해주는 역할을 한다.
            // 1003개의 Data를 4개의 Thread가 처리 한다면.
            //1번 250개, 2번 250개, 3번 250개, 4번 250 + 3(나머지)를 처리 한다.
			int nListCnt = nReadFileCnt;//for문을 돌릴 총 수
			int nThCnt = omp_get_max_threads();
			int nThNum = omp_get_thread_num();

			int nJump = nListCnt / nThCnt;
			int nJumpN = nListCnt % nThCnt;

			int nStartIndex = (nThNum*nJump);
			int nTailAddCnt = 0;
			if (nThCnt == (nThNum + 1))//nThNum이 Zero Index임으로.
				nTailAddCnt = nJumpN;

			for (int iF = nStartIndex; iF < (nStartIndex + nJump + nTailAddCnt); iF++)
			//for (int iF = 0; iF < nReadFileCnt; iF++)//원본 For문
			{
            ...//반복 수행 코드.
            }
  #pragma omp barrier //모든 Thread가 여기에 도착 하도록 기다린다.
		}

+ Recent posts