상세 컨텐츠

본문 제목

병렬 프로그래밍

Maya API/C++

by hwano 2014. 4. 29. 11:13

본문

참고 및 가져온 사이트들

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

http://blog.daum.net/pg365/205

http://blog.naver.com/leemino?Redirect=Log&logNo=80137766894

http://bestskp.tistory.com/96

http://blog.naver.com/cyu0070?Redirect=Log&logNo=140038848735

http://kindtis.tistory.com/345

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

 

기본적인 c++프로그래밍으로 프로그램 혹은 플러그인을 제작하면 이는 단일 프로세서만을 활용하도록 짜여진다. 이는 CPU자원을 낭비하는

프로그램밍을 하고 있었다는 뜻이다. 하지만 점점 그래픽의 발달로 인해 실시간의 쏟아지는 대량 데이터들을 처리해야 하는 일이 많아진다.

예를 들어 키넥트같은 3D스태너에서 대량으로 들어오는 정보량은 멀티코어나 GPU를 적극적으로 활용해야만 한다.

 

 

강좌에서 openMP로 작업을 해서 이를 찾아보다보디 병렬 프로그래밍은 PPL, openMP, TBB 등 여러 가지 방법이 나와있는거 같다.

대략 인터넷글들을 읽어보면 openMP가 많이 쓰였지만 TBB( Intel Threading Building Blocks )라는 방법을 인텔이 직접 지원하기 때문에

여러가지면에서 TBB가 더 이득이 있는 것 같다. 더 읽어 봐야겠지만 위 링크의 소개글에서 openMP의 보다 TBB가 더 자동화되어

작동하기 때문에 코딩시 고려해야할 사항이 더 적은거 같다.

 

 

 

 

 

TBB (  Intel Threading Building Blocks  )

 

 

이거 먼저 살펴볼려는 이유는 cup들은 죄다 인텔이고,  막연히 당연히 제조회사에서 제공하는 방식이 가장 뛰어날 수 밖에 없을 거 같아서..

그런 단순한 이유임.

 

먼저 계속 해서 나오는 scalability라는 단어가 있다. 사전에서 찾아보면 범용성, 확장성 등으로 해석되고 책에서는 조정성으로 해석했다.

TBB에서 scalability는 CPU갯수가 늘어남에 따라 사용자가 이를 신경쓰지 않아도 TBB자체에서 CPU갯수가 늘어남에 따라 자동으로 성능이

향상되도록 지원해 준다. TBB는 프로세서의 종류나 운영체제에 관계없이 거의 모든 C++ 컴파일러에서 사용할 수 있다.

 

기본적인 개념들에 대해 알아 보자.

 

 

 

 

Thread( 쓰레드 )는 우리나라 말로 실을 의미한다. 포르세스는 현제 메인 메모리에 저장되어 실행되는 프로그램으로

운영 시스템 내에서는 작업의 단위가 된다. 메인 메모리에 프로세스가 생성될 때 운영 시스템은 효율적인 프로세스의 관리를 위해

프로세스 제어 블록을 같이 생성하게 되는데 이것이 thread가 된다. 

 

운영 시스템이 어떠한 프로세스를 수행 하던 도중 다른 프로세스를 수행하게 되면 수행 도중이었던 프로세스의 정보를

쓰레드가 가지고 있게 된다. 이때 쓰레드를 여러개 만들수 있다면 동시에 실행해되서 빠르게 프로세스들을 처리할 수 있게 된다.  

 

이런 개념으로 인터넷을 하면서 음악을 듣고 파일을 다운로드 할 수 있다.

 

Task( 태스크 )는 thread와 혼동되는 개념이다. 예전 DOS의 경우 한번에 한가지 프로그램 밖에 실행하지 못하는 단일 태스크시스템이었다.

한가지 프로세스의 처리가 끝나야 다음 프로세스를 실행 할 수 있는 시스템이었다.

 

이에 반해 윈도우의 멀티 캐스트 시스템은  여러개의 프로세스를

동시에 메인 메모리에 생성하고 각 프로세스들을 CPU에 분할 할당하여 처리하게 되었다. CPU에 분할하는 과정을 시분할 이라고 하는데

각 프로세스들이 일정 할당된 시간동안만 자신의 작업을 처리하게 되기 때문이다.

 

이때 각 프로세스들의 할당된 시간 간격이 매우 짧기 때문에 우리가 보기에 동시에 처리되는 것으로 보인다.  

자신에게 할당된 시간동안 자신의 작업을 처리하고 다음 프로세서로 넘어가야하는데 이때 필요한 것이 쓰레드 이다.

 

정리하면 '멀티 태스크를 위해 멀티 쓰레드가 필요하다' 정도로 우선 이해해도 좋다.

 

 

 

데이터 병렬처리와 태스크 병렬처리에 대해 알아보자.

한가지 데이터는 A, B, C, D, E의 단계를 거친다고 해보자.  데이터 병렬처리는 무조건 데이터를 나눠서 A, B, C, D, E의

간계를 나누어 진행한다. 태스크 명렬처리는 작업량이  작업에는 자원을 더욱 많이 적은 작업에는 적은 량의 자원을 할당한다.

 

 

 

TBB 설치

https://www.threadingbuildingblocks.org/download  에서 라이브러리 다운로드

다운받은 라이브러리를 적당한 곳에 풀어놓는다.

 

VS속성에서 VC++디렉터리에서 포함 디렉토리에 include 폴더를 선택

라이브러리 디렉토리에 lib 폴더의 ia32/vc10( 버젼에 맞게 )를 선택

 

링커/입력에서 추가 종속성에서 tbb.lib라고 추가해서 적어준다. 끗 인듯

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

관련글 더보기