쓰레드를 이용하여 소트 하기...
글쓴이: xroot / 작성시간: 월, 2008/05/05 - 10:46오후
학교에서 쓰레드에 관해서 배우고 있습니다..
멀티 태스킹환경에서 쓰레드를 이용하여 속도를 빨리한다.
뭐 이정도로 감잡고 있는데요.
소트하는 경우도 쓰레드를 이용하면 그렇지 않은 경우보다 더 빨리 정렬을 완료 하나요?
프로그램을 못짜서인지 쓰레드를 사용하면 쓰레드 갯수배만큼 느려지네요..
아 정렬 방식은 버블소트를 이용하였고 A라는 행령을 쓰레드의 인수로 넘겼습니다
그리고 각 쓰레드는 대소비교후 하나씩 뒤로 넘겨 결국 가장 큰 숫자가 가장 뒤로 가도록 하였고.
이때 mutex는 대소비교와 교환하는 부분을 통째로 묶었습니다.
프로그램의 IO하는 시간에 다른 작업을 수행시켜 CPU의 노는 시간을 줄이자 그런 취지 인것 같은데 뮤텍스로 통때로 묶어버리면 쓰레드를 사용하는 의미가 있나요?
Forums:
통째로 묶어버리면
통째로 묶어버리면 thread 사용하는 의미가 없죠.
대부분 O(n^2) 형태의 sorting 방식은 작업 대상을 전체 set을 보고 하기 때문에 thread 여러 개를 둔다는 것 자체가 큰 의미가 없습니다. 보통은 set을 나누어 sorting하는 방식에서 thread를 쓰는 것을 생각해볼만 하지만, CPU가 단지 하나인 경우, thread를 쓰는 것은 overhead만 커질 가능성이 높습니다. (주의: 이 때 CPU란 thread 처리를 위해 특별한 기능이 없는 CPU를 말함) CPU가 여러 개이고, 각자 RAM에 독립적으로 접근할 수 있다면, thread를 쓰는 것이 의미가 있겠지요.
좀 더 자세한 내용은 직접 찾아보기 바랍니다. :)
"parallel sort"로 google 해 보세요.
참고로 "alpha sort"에 대해서도 알아보기 바랍니다.
AlphaSort: A Cache-Sensitive Parallel External Sort
Multithreaded Architectures and The Sort Benchmark
--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
순차적인 처리를
순차적인 처리를 해야 하는 프로그래밍 로직이 있을 수 있고, 동시에 처리할 수 있는 프로그래밍 로직이 있을 수 있습니다.
쓰레드를 적용하기 위해서는 동시성(병렬성)을 문제에서 찾아서 이 부분을 쓰레드로 처리해야 하는 것 입니다.
소팅방법은 아주 다양한데, 이중 동시성을 가지는 알고리즘을 찾아보세요.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
댓글 달기