c 프로그램으로 계산을 하고 있습니다.
cpu를 병열로 처리하도록 짜지는 않았습니다.
[i:e2b9scjo]알아서 멀티코어를 쓰는지 안쓰는지에 대해서는 잘 모르겠습니다.[/i:e2b9scjo]
계산 시간이 며칠씩 걸리는 것도 있고 해서
컴퓨터를 한대 더 마련해볼까하는데
CPU는 어떤 걸 선택하면 좋을지 궁금합니다.
멀티코어를 다 활용하지 못 한다면
클럭이 비슷한 구CPU를 써도 계산시간 차이가 많이 안날 것 같은데 어떤가요?
OS Ubuntu 에
Compiler는 intel C 를 쓰고 있습니다.
mpich라는 병렬처리 패키지가 있습니다.
근데 병령처리라는건 님이 생각하시는 멀티코어와는 좀 다른 개념입니다.
일단 성능을 위해서 멀티코어는 멀티채널일 필요가 있죠.
예를들어 듀얼코어일경우 메모리를 동일사양으로 두개를 구성합니다.
그러면 코어별로 메모리를 따로따로 사용하는것이 가능합니다.
이경우 듀얼채널로 구성했다라고 하는 것이죠.
하드웨어 가상화라는 기술이라는것이 있는데…
이는 어플리케이션이 cpu에 처리를 요구하면 어플리케이션 별로 다른 cpu에서 동작하게 하는 것입니다.
이렇게되면 해당어플리케이션은 하나의 cpu를 점유하는것 처럼 보입니다.
멀티프로세싱이라는것은 하나의 어플이 실행되다가 다른 자식프로세스를 만들어서 실행하는 경우이고 이때 프로세스는
메모리를 복제하여 실행됩니다.
멀티쓰레딩이라는것은 앞서와 비슷한데 메모리를 공유하는것을 말합니다.
이제 본론인 병렬처리를 설명해본다면…
하나의 어플을 여러 cpu나 컴퓨터에서 실행함을 말합니다.
이는 동시에 같은 프로그램을 실행한다 라는 개념이 아니라
하나의 프로그램의 일련의 순서를 각각의 cpu에서 분담처리함을 말합니다.
예를들어 집중도가 높은 작업을 어떤 cpu에서 처리하게하고,
그사이 다른 cpu는 다른 작업을 합니다.
그렇게 해서 전자의 cpu의 처리결과를 후자의 cpu가 받아서 계속하고,
이런식으로 분담처리 기법을 병렬처리라고 합니다.
job이라는 관점에서는 하나의 job을 여러cpu가 분담 처리하는 것이죠.
mpich를 설치하면, 알아서 병렬처리되는것이 아니라
각각의 컴퓨터가 일종의 노드가 되는것이고,
병렬처리할 명령을 mpich데몬에 요청합니다.
그러면 mpich데몬이 이를 각각의 노드에 분산처리하게 합니다.
이렇게해서 병렬처리를 구현하는 것이죠.
컴퓨터를 수백대 연결해서 슈퍼컴퓨터를 넘어서는 네트워크컴퓨터를 구현하는것도 이와 같은 원리입니다.
연산이 복잡해지면 연산의 일부를 다른 컴퓨터에 맡기죠
그런식으로 연산을 분산처리해서
동시실행하는것입니다.