멀티 코어 프로그래밍(?)
글쓴이: 익명 사용자 / 작성시간: 화, 2011/10/11 - 2:27오후
프로그램이 돌아가는 서버의 코어를 올린다고 해도
프로그램( 1 프로세서) 가 사용하는 코어는 1개 라고 들었습니다.
그렇다면 일반적으로 프로세서 나 쓰레드를 여러개 사용하여 돌아가는 프로그램 을
여러 코어의 시스템에서 돌린다고 하여도 실질적으로는 1개의 코어만 사용 하는거인가요? 그래서 성능적인 면에서 이점을 못받는건가요?
찾아보니 여러 코어를 사용하려고 open MP를 사용하는것 같은데
동일한 처리를 반복적으로 해야되서 쓰레드로 처리한 부분 같은경우를 병렬처리로 변경을 하는건가요?
병렬처리를 하게되면 한코어를 이용하고 다른 처리를 할때는 알아서 다른 코어를 이용해서 처리가 되는건가요?
장비를 이용하여 퍼포먼스를 대량 향상 시키려고 하고 있습니다.
시스템 개발만 하다가 이쪽으로 하려다보니 지식이 없어서 무작정 질문만 올리네요
고수님들의 답변좀 부탁드리겠습니다.
Forums:
core 가 8개 달리고 OS 가
core 가 8개 달리고 OS 가 리눅스일때..(다른OS도 마찬가지일 듯 합니다.)
fork()로 8개의 차일드 프로세스를 만들어서 돌리면..
core 1개당 1개의 프로세서가 잡고 돕니다.
성능상의 이점이 확실히 있습니다.
멀티쓰레드도 마찬가지 입니다. ( 리눅스에서 멀티쓰레드는 멀티프로세스와 비슷하게 구현되어 있다고 하네요. )
OS가 알아서 처리를 해주고 있어서
필요한 만큼 fork() 하시면 됩니다.
멀티 코어를 활용한 프로그래밍 방법에도 여러가지가
멀티 코어를 활용한 프로그래밍 방법에도 여러가지가 있습니다.
* OpenMP : 시간이 많이 걸리는 루프 등의 코드 블록에 간단히 #pragma를 다는 정도로 손쉽게 멀티 코어 CPU를 활용한 코드를 생산 가능합니다.
* OpenCL : 멀티 코어 CPU, GPU, 혹은 그 외의 범용 연산이 가능한 가속기를 활용 가능하나, OpenMP와 같이 컴파일러가 알아서 자동 병렬화를 해주는 게 아니라, 프로그래머가 명시적으로 병렬화를 해 주어야 합니다.
* MPI : 처리할 내용을 메세지에 담아 여러 컴퓨팅 노드에 분산시키기 위한 기술로, OpenMP나 OpenCL등과 같이 사용하여 그 효과를 극대화 할 수 있습니다.
* 기타 등등
기본적으로 CPU, GPU 따지지 않고 멀티 코어의 효과를 최대한 높이기 위해서는, 처리해야 할 데이터의 양이 어느 정도 많아야 합니다.
또한, 처리해야 할 데이터가 서로 의존관계를 가지면 가질수록 병렬화의 장애가 됩니다.
* 암달의 법칙 [ http://ko.wikipedia.org/wiki/%EC%95%94%EB%8B%AC%EC%9D%98_%EB%B2%95%EC%B9%99 ]
어떤 업무에 멀티코어를 활용하려고 하시는 지 모르겠지만, 만약 처리해야할 데이터가 무수히 많고 각 데이터에 대해서 동일한 처리를 하고자 한다면, GPU를 활용하는 게 좋을 듯 합니다. 그러나, GPU라고 해서 다 같은건 아니고 처리해야 할 데이터 타입이나 GPU 세대별로 특징이 있으니 플랫폼 선정에는 신중을 기하시는 게 좋습니다.
생산적인 댓글을 달자
...
요즘 OS에선 보통 하나의 프로세스 안에서도 쓰레드를 여러 개 만들면 쓰레드마다 core 하나씩 잘 쓸 수 있습니다.
* 그런데 일단 프로그램의 병목이 어디인지를 알아야 합니다. CPU가 모자라다면 이렇게 해서 성능이 향상되겠지만 I/O가 병목이라면 별반 차이가 없겠죠.
댓글 달기