목록C++ (21)
Creative Motive
데브피아 김경진님 작성 (http://devmachine.blog.me/178941103) task 그룹 task 그룹은 여러개의 task를 그룹에 추가하여 실행하고 종료를 대기하거나 취소 작업을 가능하게 하는 객체입니다. 앞선 강좌에서 여러개의 task가 모두 종료될 때 까지 대기하기 위하여 각각의 task를 생성하여 실행하고 when_all 함수를 사용하여 대기하도록 구현하였습니다. 이와 같은 동작을 task 그룹을 이용하면 task 그룹의 wait 메서드를 통하여 구현할 수 있으며 여러개의 연관된 task의 취소 작업도 task 그룹의 cancel 메서드를 이용하여 구현이 가능합니다. task 그룹의 취소에 대해서는 PPL 강좌 후반부에서 자세히 설명하도록 하겠습니다. task_handle task..
데브피아 김경진님 작성 (http://devmachine.blog.me/178724927) 중첩된 task 지금까지 task의 then 메서드를 통한 task 연결 방법에 대하여 살펴보았습니다. 부모 task와 자식 task를 구성하는 방법, 즉 어떤 task를 먼저 실행하고 task가 종료되면 다음 task를 실행하는 방법에는 then 메서드를 이용한 방법 외에 또 한 가지 방법이 있습니다. 바로 중첩된 task(nested task)을 이용한 방법입니다. 중첩된 task란 task 내부에서(outer task) 또 다른 task를 생성하여(inner task) 생성한 task를 리턴하는 방식으로 inner task는 outer task가 종료되면 실행됩니다. 나머지는 예제를 통해서 자세히 알아보시죠...
데브피아 김경진님 작성 (http://devmachine.blog.me/178262872) task 클래스 task는 병렬 프로그래밍에서 하나의 작업 단위를 표현하는 템플릿 클래스 입니다. PPL에서 가장 기본이 되는 개념으로 사용자는 직접적 또는 간접적 방법에 의해 task를 사용하게 됩니다. 간접적 방법이라 언급한 것은 이후에 나오게 될 병렬 알고리즘 같은 경우 겉으로 드러나진 않지만 내부적으로는 task_handle을 이용하여 구현이 되어 있기때문에 사용자가 직접 task 클래스를 생성하여 사용하지 않아도 간접적으로 task를 이용하게 된다는 의미입니다. 결국 task를 빼놓고는 PPL을 설명할 수 없다는 얘기겠죠? ^^ 그럼 task를 어떻게 생성하고 사용할 수 있는지 간단한 예제를 통해 알아보겠..
데브피아 김경진님 작성 (http://devmachine.blog.me/178065882) 병렬 프로그래밍이란? 병렬 프로그래밍이란 서로 독립된 여러개의 작업을 여러개의 프로세스를 이용하여 동시에 처리하게 만드는 프로그래밍 기법을 말합니다. 하드웨어가 발전하면서 CPU 코어 개수는 점점 늘어나고 여러 작업을 동시에 처리할 수 있는 능력이 대폭 향상되었죠. 하지만 프로그래밍 레벨에서 이런 스펙을 최대한 이용하기란 쉽지 않은 일이었습니다. 여러개의 스레드를 직접 만들어서 관리하고 동기화와 리소스관리까지 한다는 것은 개발자에게는 큰 부담이고 여간 귀찮은 일이 아닐 수 없습니다. 이 강좌에서는 이런 병렬 프로그래밍의 개념에 대하여 정확히 이해하고 최소한의 코드를 이용하여 효율인 결과물을 얻을 수 있는 여러가지 ..
데브피아 김경진 님 작성 (http://devmachine.blog.me/177964797) 프롤로그 하드웨어가 점점 발전하여 CPU는 싱글 코어에서 멀티 코어로 진화했고 더불어 하이퍼스레딩이 적용되면서 개발자들은 어떻게 하면 CPU를 최대한 활용하여 프로그래밍할 수 있을까 고민하게 됩니다. 하지만 간단한 방법으로 이를 구현하기란 쉬운 일이 아니죠. 안타깝지만 아직도 많은 프로그램들이 주로 한 개의 코어만 활용하도록 구현되어있습니다. 어떻게 하면 스레드를 직접 다루지 않고도 쉽게 병렬 프로그래밍을 구현할 수 있을까요? 그동한 이러한 노력의 일환으로 OpenMP, TBB, PPL 등이 개발되어졌고, 이 중 PPL은 Visual C++(Visual Studio 2010 이상) 환경에서 템플릿 라이브러리 형태..