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개 주면 몇 배까지 빨라질까요?
해설 암달의 법칙: 1 / (0.1 + 0.9/1000) ≈ 9.99배. 직렬 10%가 천장을 10배로 못 박습니다. 코어를 6개에서 12개로 늘리면 5.3배 → 5.9배, 겨우 11% 이득이에요. 돈이 두 배 드는데요.
🤔 확인 문제
하이퍼스레딩으로 논리 CPU가 12개인 서버에서, 동영상 인코딩(계산만 빡빡한 작업)을 12스레드로 돌렸습니다. 6스레드 대비 얼마나 빨라질까요?
해설 하이퍼스레딩은 '기다리는 시간'을 메워 주는 기술입니다. 인코딩처럼 ALU를 쉼 없이 쓰는 작업은 기다리는 시간이 없어서 나눠 줄 게 없어요. 반대로 웹 서버·DB처럼 기다림이 많은 작업에서는 실제로 이득이 납니다.