Hartmut Kaiser

boost library 개발자 입니다. 이번 Meeting C++ 2014 세미나에서 오늘날 컴퓨팅에서 (순수)쓰레드는 GOTO와 같다. 라는 제목으로 강연하였습니다.

1968년 Edsger Dijkstra는 GOTO문이 유해하다는 것을 고려 해야 한다는 논문을 발표 했는데, 거의 시작부터 이를 인용하며 threads도 이와 같다고 설명하였습니다. 

그는 Concurrency와 Parallel을 언급하면서 이제는 Concurrency를 생각하면 안된다고 설명하고 있습니다.



Threads is SLOW.

"Threads is SLOW이다" 라고 설명하면서 요한계시록의 4 Hosemen을 인용하여 설명하고 있는데요. 쓰레드간의 경쟁으로 자원 소모, 레이턴시, context switching으로 인한 오버헤드와 공유자원에 의한 기다림이 문제라고 설명하고 있습니다.


멀티쓰레드 말하는거 확실하지?


Threads is SLOW.




HPX

쓰레드는 성능과 자원의 소모로 인해 유해하다고 설명을 하면서 그가 개발하고 있는 HPX 라이브러리를 소개 합니다.


HPX - General Purpose Runtime System.



HPX - The API.

HPX는 위와 같이 C++11의 표준 라이브러리를 대체 할 수 있습니다.

겉으로 보기에는 이게 Concurrency인지 Parallel인지는 분간할 수는 없습니다. HPX 설명에 있어 표준지향적인 API이며, 병렬과 분산 프로그래밍을 손쉽게 작성이 가능하고, 수백만 쓰레드를 이용한 완벽한 비동기 프로그래밍이 가능하다고 설명하고 있습니다.

전체적인 겉모양은 C++11 표준과 크게 다르지 않습니다. 그가 자랑하는 것도 이것입니다. 자세한 HPX 라이브러리에 대한 설명은 하지 않겠습니다.

한줄 요약하자면, "우리가 만든 HPX는 엄청난 양의 데이터를 병렬처리하는데 다른 병렬프로그래밍 라이브러리보다 성능이 뛰어나며, 표준API 지향적이여서 적응하기 쉽고, 프로그래밍하기 쉽다" 입니다.


그리고 가장 자랑스러워 하는 부분은 동기식 함수를 비동기식 처리로 변경할 수 있다는 것입니다. 사실 이기능은 병행/병렬 프로그래밍이 아닌 co-routine 기법이며, 수백만개의 co-routine 기법을 사용하여도 효율이 떨어지지 않는다고 설명합니다.


Resumable Function. await 키워드를 붙이는 것만으로 비동기식으로 작성할 수 있다. 이것은 co-routine 기법을 이용한 것이다.


이 이후에는 Parallel 알고리즘에 대한 설명과 예제를 보여주고, 성능이 얼마나 나오는지에 대해 다른 라이브러리와 비교를 하였습니다.

그는 마지막으로 더 이상 순수 thread를 사용하지 말라고 강연을 끝냈습니다.


세미나 PT 파일

 Plain_Threads_are_the_GOTO_of_Todays_Computing_MeetingCpp_2014.p


세미나 동영상




출처: http://devsw.tistory.com/184