태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

스폰서 링크

멀티스레드 프로그램은 두 가지 방법에 의해 구현될 수 있다.

1. pthreads와 Windows 스레드와 같은 저 수준 스레드 라이블러리를 이용하는 방법
 스레드 생성 시 pthread_create, CreateThread 함수를 이용한다. 이 방법은 스레드를 미세하게 제어하는데 유리하지만 스레드에 대한 많은 이해를 필요로 한다. (Thread pool을 직접 구현해야 한다.)
 저 수준 스레드 라이블러리를 이용하는 방법은 UI등의 비동기 처리를 구현이나 예외 처리 구조를 구현하는데 적당하다.

2. OpenMP 를 이용하는 방법
 OpenMP는 Multi-threaded 어플리케이션을 개발하기 위한 API로 공유 메모리 환경에서 멀티스레드 병렬 프로그램을 작성할 수 있다.
스레드 생성시 #pragma omp parallel 키워드를 이용하게 되며 순차적으로 작성된 기존 코드를 점진적으로 병렬화하기 쉬운 방법이다.
이 방법은 내부적으로 Thread pool을 이용한 fork/join 모델을 사용한다.

OpenMP execution model

* OpenMP 공식 홈페이지 : http://www.openmp.org

Posted by cncdenny
스폰서 링크

멀티코어 프로세서가 대중화 됨에 따라 프로그래밍에 있어 스레드의 존재 가치가 한층 부각되고 있다.
스레드는 구현 방법에 따라 두가지 유형으로 분류된다.

1. 일반적인 스레딩 모델(General threading model)
 일반적인 스레딩 모델은 flexible하고 동적인 스레드 생성이 가능하고 불규칙하고 복잡한 프로그램을 parallelize하는데 적합나다. 프로그램이 실행되면 주 스레드가 main 함수를 실해하고, 주 스레드가 부 스레드를 생성한다. 부 스레드도 추가로 다른 스레드를 생성할 수 있다.

2. Fork/Join 스레딩 모델(Fork/Join threading model)
 주 스레드가 부 스레드를 fork하고 작업이 끝난후 부 스레드를 join하는 방식이다. 일반적인 스레딩 모델의 특수한 형태라고 볼 수 있겠다.
fork/join 모델은 큰 데이터셋을 처리하는 루프를 병렬적으로 실행하는데 주로 사용된다.
Fork/Join 모델은 주 스레드만 다른 스레드를 생성할 수 있으며 주 스레드만이 프로세스 실행에 대한 제어권을 갖기 때문에, 동기화 오버헤드가 최소화된다. 그리고 순차적인 프로그램을 병렬 프로그램 변환하는 incremental parallelization이 가능하다.  (incremental parallelization : 순차적인 프로그램의 실행 결과를 프로파일해서 실행 시간을 많이 소요하는 부분을 병렬화하는 방식이다.)
또한 Fork/Join 모델은 최소한의 코드로 프로그램을 병렬화 할 수 있는 장점을 가지고 있다.

Posted by cncdenny