개발 라이브러리 & 툴

[MPP] Introduction to Intel's Threading Building Block

하늘흐늘 2009. 12. 1. 18:31
반응형

 Intel's Threading Building Block은 멀티프로세서 프로그래밍을 지원하는 인텔의 C++ 템플릿 라이브러리로 멀티플랫폼을 지원합니다. 이 라이브러리는 Epic Games Unreal Engine3 에 포함되어 있습니다. 자세한 것은

정식 홈페이지

를 참고하여 주세요.   
 MPP에 대한 대부분의 것이 그러하듯 라이브러리 사용법은 그리 어렵지 않으나 배경지식으로 요구하는 것이 꽤 있고 난이도가 좀 있습니다. 뭐랄까 개인적으로는 멀티쓰레드 프로그래밍이 OS에 대한 개념을 많이 요구하는데 비하여 멀티프로세서 프로그래밍은 CPU, Cache, Memory와 같은 H/W 동작 앨고리듬에 대한 지식과 병렬처리에 대한 개념을 요구합니다.
 제가 읽은 것은

Tutorial

로 집중력과 끈기를 요하며 시간이 좀 걸리는 문서로 읽는 것 자체가 굉장히 많은 멀티프로세서 프로그래밍에 대한 배경 지식을 얻게 하여 줍니다. 인텔 라이브러리의 최대 장점은 멀티플랫폼을 지원한다는 것이고 CPU만드는 회사가 만든 라이브러리라 성능이 좋다는 것입니다.
 참고로 MPP의 기본은 CPU를 극대로 돌려서 성능을 극대화 하는 것에 있습니다. 이 목적을 이루기 위하여 캐쉬 처리, 쓰레드 문맥 변경 등을 굉장히 민감하게 프로그래밍 해야 합니다.
 
인상 깊은 지식은 아래와 같습니다.
- 병렬적으로 루프를 돌릴 때는 실험을 통하여 최적의 성능을 주는 사이즈로 돌려라.
- 쓰레드 스위칭에 따른 캐쉬<->메모리간 데이터 교환은 굉장히 비싼 작업이다.
- 락을 가진 쓰레드가 문맥 변경이 되었을 때 새로 액티브된 쓰레드가 해당 락을 얻기 위하여 문맥 시간만 허비할 수 있다.
 
대략적인 기능은 아래와 같습니다.
- 기본적인 병렬 루프 지원
- Scalable Memory Allocator 지원 (TLS방식인데 성능이 조금 궁금하기 하네요.)
- pipeline : pipe & filter를 적용하여 병렬처리 가능한 pipe에서 성능을 극대화 합니다.
- 별도의 병렬 STL  컨테이너 지원
- 다양한 mutex 지원
- C++ exception 지원
- atomic 동작 지원
- Task 프로그래밍 지원 (Task는 수행해야 하는 일종의 하나의 작업이라고 보시면 됩니다.)
 

반응형