디지털·가전제품

멀티코어 프로세서는 왜 코어 수만큼 성능이 정비례해서 늘지 않나요?

CPU 코어가 여러 개면 성능이 좋아진다고 하는데, 코어 수를 두 배로 늘려도 성능이 정확히 두 배가 되지는 않는다고 들었어요. 왜 이런 한계가 있는지 궁금합니다.

2개의 답변이 있어요!

  • 이걸 설명하는 유명한 법칙이 있습니다. 암달의 법칙이라고 하는데 요지는 간단합니다. 어떤 일에서 나눠서 할 수 없는 부분이 조금이라도 있으면, 결국 그 부분이 전체 속도의 발목을 잡는다는 겁니다.

    비유하자면 이렇습니다. 열 명이 이사를 하는데 짐 나르는 건 나눠 하면 빨라집니다. 그런데 엘리베이터는 하나뿐이고 현관문은 한 사람씩만 지나갑니다. 사람을 스무 명으로 늘려도 그 병목은 그대로입니다.

    프로그램도 똑같습니다. 계산은 여러 코어에 나눠 줄 수 있지만, 파일을 여는 순간이나 결과를 하나로 합치는 순간은 결국 한 줄로 서야 합니다. 그 구간이 전체의 십 퍼센트만 되어도 코어를 아무리 늘려도 열 배 이상은 빨라지지 않습니다.

    나누는 데도 비용이 듭니다. 일을 쪼개 코어마다 배분하고, 끝나면 다시 모으고, 서로 겹치지 않게 순서를 맞추는 작업이 필요합니다. 코어가 많아질수록 이 관리 비용이 커져서 어느 지점부터는 오히려 손해가 납니다.

    메모리도 병목입니다. 코어는 여러 개인데 메모리로 가는 길은 함께 씁니다. 코어들이 동시에 데이터를 달라고 하면 줄을 서게 되고, 계산은 놀면서 기다리는 시간이 생깁니다.

    전력과 열도 한몫합니다. 코어를 전부 돌리면 열이 많이 나서 칩이 스스로 속도를 낮춥니다. 그래서 한 코어만 쓸 때는 높은 속도로 도는 칩이 전부 쓸 때는 낮은 속도로 돕니다.

    그래서 코어가 많아 유리한 건 영상 인코딩이나 렌더링처럼 애초에 잘게 나눠지는 작업입니다. 반대로 게임이나 일반 문서 작업은 나눠지지 않는 부분이 많아서, 코어 수보다 코어 하나의 속도가 더 중요합니다.

    채택된 답변
  • 코어 수가 늘어도 성능이 정비례하지 않는 가장 큰 이유는 모든 작업을 여로 코어가 동시에 처리할 수 없기 때문입니다. 프로그램에는 순차적으로 처리해야 하는 부분이 있고 코어끼리 데이터를 주고받는데에도 시간이 걸립니다. 또 메모리 대역폭이나 발열, 전력 제한도 영향을 줍니다.