11강 / 20강

병렬성 — 코어를 늘리면 정말 빨라질까

멀티코어 · 하이퍼스레딩 · 암달의 법칙

병렬성 — 코어를 늘리면 정말 빨라질까
일꾼을 두 배로 늘려도 혼자 해야 하는 일이 남아 있으면 두 배가 되지 않습니다.

5강에서 봤듯이 CPU는 3GHz쯤에서 클럭을 못 올리게 됐습니다. 그래서 방향을 틀었어요 — 하나를 빠르게 대신 여럿을 나란히.

그런데 여기 함정이 있습니다. 코어를 두 배로 늘려도 두 배 빨라지지 않습니다. 왜 그런지, 그리고 그게 여러분의 워커 수 결정과 무슨 상관인지 봅시다.

물리 코어 6개, 코어당 스레드 2개 → 논리 CPU 12개.
bash 브라우저에서 실행

세 가지 '여러 개'

이름이 서버정체
소켓1메인보드에 꽂힌 CPU 칩의 개수
코어6진짜 계산 회로. 진짜 병렬
스레드(하이퍼스레딩)코어당 2 → 12계산 회로는 하나인데 차례를 두 벌 두는 것
1 → 6은 거의 6배. 6 → 12는 얼마나 늘까요?
bash 브라우저에서 실행

6에서 12로 갈 때 두 배가 안 되죠. 물리 코어가 6개뿐이니까요. 12는 '동시에 12가지 일을 시작할 수 있다'는 뜻이지 '6배 더 빠르다'는 뜻이 아닙니다.

암달의 법칙 — 병렬화의 천장

어떤 작업이든 혼자서만 해야 하는 부분이 남습니다. 요청 하나를 처리할 때도 파싱·세션 확인·로그 쓰기는 순서대로 해야 해요.

전체의 5%가 그런 부분이라면, 코어를 무한히 늘려도 최대 20배가 천장입니다.

암달의 법칙 계산기 — 병렬화 비율을 밀어 보고 천장이 어디인지 확인하세요.
불러오는 중…
코어를 1000개 줘도 천장을 못 넘습니다.
Python 브라우저에서 실행

SIMD — 한 명령으로 여러 개를

병렬성에는 다른 종류도 있습니다. 한 명령이 데이터 여러 개를 동시에 처리하는 거예요. CPU 안에 512비트짜리 넓은 레지스터를 두고, 32비트 정수 16개를 한 번에 더합니다.

avx512f 가 있으면 512비트 벡터 연산이 됩니다.
bash 브라우저에서 실행

관리자가 SIMD를 직접 쓸 일은 없지만, 이게 있느냐 없느냐가 라이브러리 속도를 가릅니다.

  • aes — HTTPS 암복호화가 5~10배 빨라집니다. 없으면 TLS가 CPU를 잡아먹어요
  • sha_ni — 비밀번호 해시·체크섬이 빨라집니다
  • avx2/avx512f — 이미지 리사이즈, 압축, 넘파이 연산

그래서 오래된 서버에서 이미지 썸네일 만들기가 유난히 느린 경우가 있습니다.

🤔 확인 문제
작업의 90%를 병렬화했습니다. 코어를 1000개 주면 몇 배까지 빨라질까요?
🤔 확인 문제
하이퍼스레딩으로 논리 CPU가 12개인 서버에서, 동영상 인코딩(계산만 빡빡한 작업)을 12스레드로 돌렸습니다. 6스레드 대비 얼마나 빨라질까요?