싱글코어와 듀얼코어에 대해서..
글쓴이: no1hacker / 작성시간: 금, 2008/02/22 - 4:21오후
질문이 있어서 글을 올려봅니다.
어떤 일을 처리하는 프로그램이 있습니다.
이 프로그램은 처음과 끝이 존재하는 프로그램입니다.
(즉 무한반복같은 작업이 아닌, 프로그램이 시작하면 끝이 있죠. 다소 시간이 걸리는 작업)
이때
이 프로그래밍을
싱글 코어에서
- 하나의 프로세스로 만들어서 실행시키는 것과
- 멀티 쓰레드를 만들어서 실행시키는 것과
차이가 있나요?
단, 이때 차이라 함은 시간적 차이를 말합니다.
(시간적외에 다른 차이가 있다면 그것도 말씀해주시면 감사하겠습니다.^^)
(듀얼코어에서는 분명히 차이가 있을 것 같은데요...)
Forums:
Re: 차이가 있을수도 있고, 없을수도 있습니다.
듀얼코어 시스템에서 멀티쓰레드(혹은 멀티프로세스) 작업으로 바꾼다고 해서 항상 시간상의 이득이 있는것은 아닙니다.
만약에 그 작업이 크게 A, B, C, D 로 나누어지며,
꼭 A->B->C->D 의 순서로 이루어져야 하는 경우 (그러니까...A 작업의 결과물을 B 에서 사용해야 한다던지 하는 경우)
이런 경우에는 시간상의 이득이 거의 없습니다.
하지만, C 작업이 B 의 결과물과는 상관없이 작업이 가능하다면,
A->B 를 수행하면서 다른 CPU 코에어서는 C 작업을 할 수 있으므로 이 경우에는 이득이 있게 되죠.
(A->B->C->D 를 수행하는 시간이 아니라 A->B->D (혹은 C->D. A->B 의 시간보다 C 의 시간이 큰 경우겠죠) 의 시간 정도만 걸리게 되죠)
(비약이 좀 심한 예인 듯 싶네요 =.= )
결국 시간상의 이득을 얻기 위해서는
시간이 오래 걸리는 작업을 동시에 수행할 수 있는 작업군과 동시에 수행할 수 없이 순차적으로 수행할 수 있는 작업군으로 나누는 것에 따라서
시간상의 이득을 많이 얻을수도 있고 적게, 혹은 아예 얻을수 없을 수도 있습니다.
.
아주 간단한 예로써.
인형눈 붙이기를 한명이 하는게 빠를까요? 둘이서 같이 붙이는게 빠를까요?
그럼 조금더 복잡하게 생각해서
인형눈을 만들고 만들어진 인형눈을 붙이는건 어떨까요?
한명은 인형눈 만들고 만들어진 눈을 다른 사람이 붙인다면 더 빠르겠죠?
첫번째 눈을 만드는 동안 두번째 사람은 놀아야 겠지만...
일단 첫번째 눈이 만들어지면 그걸 두번째 사람이 붙이는동안 첫번째 사람은 두번째 눈을 만들 수 있습니다.
듀얼코어 이상의 다중 코어를 사용할 경우 효율적인 작업은 SIMD 작업류라고 할 수 있습니다.
간단한(?) 작업을 수없이 반복하는 일의 경우 다중코어를 이용한 다중 쓰레드 기반으로 개발할 경우 매우 좋은 효율을 발휘할 수 있습니다.
댓글 달기