티스토리 뷰
암달의 법칙(Amdahl's Law)이란?
암달의 법칙(Amdahl’s Law)은 병렬 컴퓨팅에서 성능 향상의 한계를 설명하는 법칙으로, 병렬화할 수 없는 작업이 존재할 경우 시스템 전체의 성능 개선에 한계가 있음을 나타냅니다.
이는 1967년 컴퓨터 과학자 진 암달(Gene Amdahl)이 제안한 법칙으로, 프로세서 개수를 증가시켜도 병렬화가 불가능한 부분이 존재하는 한 성능 향상에는 한계가 있다는 사실을 강조합니다.
1. 암달의 법칙의 수식
암달의 법칙은 다음 수식으로 표현됩니다.
S=1(1−P)+PNS = \frac{1}{(1 - P) + \frac{P}{N}}
여기서,
- S = 병렬화 후의 성능 향상 배율 (Speedup)
- P = 병렬화 가능한 부분의 비율 (Parallelizable fraction)
- 1 - P = 병렬화 불가능한 부분의 비율 (Sequential fraction)
- N = 사용할 프로세서(코어)의 개수
즉, 프로세서 수(N)를 늘려도 병렬화되지 않는 부분(1 - P)이 존재하면 성능 향상에는 한계가 생긴다는 의미입니다.
2. 암달의 법칙의 의미
- 병렬 처리의 이론적 한계
- 병렬화할 수 없는 작업이 존재하는 경우, 아무리 많은 프로세서를 추가해도 성능 향상은 제한됨.
- 예를 들어, 병렬화 가능한 부분이 90%(P = 0.9)라고 해도, 나머지 10%는 순차적으로 실행해야 하므로 무한한 속도 향상은 불가능함.
- 프로세서 증가에 따른 성능 향상 그래프
- 프로세서 개수를 늘려도 일정 수준 이상에서는 성능 향상이 둔화됨.
- 예를 들어, 병렬화 가능한 비율이 75%(P = 0.75)일 경우, 4개의 코어를 사용하면 속도 향상은 약 2.3배 수준에서 한계가 발생함.
3. 예제: 암달의 법칙 적용
예제 1: 병렬화 비율이 80%일 때 성능 향상
만약 P = 0.8 (80% 병렬화 가능)이고, 프로세서를 N = 4개로 증가시켰다면:
S=1(1−0.8)+0.84S = \frac{1}{(1 - 0.8) + \frac{0.8}{4}} S=10.2+0.2=10.4=2.5S = \frac{1}{0.2 + 0.2} = \frac{1}{0.4} = 2.5
즉, 프로세서를 4배로 늘려도 성능 향상은 2.5배 수준에서 제한됩니다.
4. 병렬화 성능 향상의 한계
암달의 법칙에 따르면 병렬화할 수 없는 작업의 비율이 작을수록 성능 향상이 커지지만, 100% 병렬화는 불가능하므로 항상 한계가 존재합니다.
예를 들어,
- 병렬화 비율이 90%라면 프로세서를 무한대로 늘려도 최대 10배 속도 향상이 한계입니다.
- 병렬화 비율이 95%라면 최대 속도 향상은 약 20배 수준입니다.
이처럼, 병렬 처리가 가능한 비율이 높아야 성능 개선 효과가 크지만, 순차적으로 실행해야 하는 부분이 존재하는 한 무한한 속도 향상은 불가능합니다.
5. 암달의 법칙의 실무 적용 사례
1) 데이터베이스 및 서버 확장
- 서버의 개수를 늘려도 병렬 처리할 수 없는 작업(예: 트랜잭션 처리, 동기화 작업)이 많으면 성능 향상이 제한됨.
- 특정 작업을 병렬로 처리할 수 있도록 데이터베이스 샤딩(DB Sharding)이나 캐싱을 적용해야 효과적임.
2) 멀티스레딩 및 병렬 프로그래밍
- Java의 ForkJoinPool이나 Python의 multiprocessing을 이용한 병렬 처리를 할 때, 병렬화되지 않은 부분이 많다면 성능 향상이 크지 않음.
- 예를 들어, 싱글스레드로 수행해야 하는 I/O 작업(파일 읽기/쓰기, 네트워크 통신 등)이 많다면 프로세서 개수를 늘려도 효과가 미미함.
3) 병렬 컴퓨팅 (HPC, High Performance Computing)
- 슈퍼컴퓨터나 클러스터 환경에서 병렬 연산을 수행할 때도, 순차적으로 실행해야 하는 코드가 많으면 성능 향상의 한계가 존재함.
- 대규모 행렬 연산 같은 완전히 병렬적인 작업은 성능 향상이 크지만, 연산 결과를 합쳐야 하는 과정이 많으면 한계가 생김.
6. 암달의 법칙의 한계를 극복하는 방법
암달의 법칙이 성능 향상의 한계를 설명하는 법칙이긴 하지만, 이를 극복하기 위한 방법들도 있습니다.
- 구스타프슨의 법칙(Gustafson’s Law)
- 암달의 법칙은 고정된 작업량을 기준으로 속도 향상을 계산하지만, 실제로는 문제 크기(Problem Size)를 증가시킬 수 있음.
- 구스타프슨의 법칙에서는 병렬화 가능한 작업의 비율이 클수록, 성능 향상도 커질 수 있음을 강조함.
- 비병렬 코드 최소화
- 순차적으로 실행해야 하는 부분(예: I/O, 동기화, 데이터 종속성 문제 등)을 최소화하고, 최대한 병렬 처리를 적용하는 것이 중요함.
- 예: 비동기 프로그래밍(Async/Await) 활용, I/O 작업을 병렬로 수행하는 방식 적용.
- 워크로드 최적화
- CPU 중심 작업인지, I/O 중심 작업인지에 따라 적절한 확장 방식 선택.
- 예: CPU 중심 연산(머신러닝, 데이터 분석 등)은 병렬 프로세싱을 활용, I/O 중심 작업은 비동기 처리를 적용.
7. 결론
- 암달의 법칙은 병렬화할 수 없는 부분이 존재하는 한, 프로세서 수를 무한히 늘려도 성능 향상에는 한계가 있다는 점을 설명합니다.
- 병렬화가 가능한 비율(P)이 높아질수록 성능 향상이 크지만, 순차적으로 실행해야 하는 부분(1 - P)이 남아 있다면 무한한 성능 향상은 불가능합니다.
- 이를 극복하기 위해 비병렬 코드 최소화, 구스타프슨의 법칙 활용, 워크로드 최적화 등의 방법을 고려해야 합니다.
암달의 법칙은 멀티스레딩, 분산 시스템, 병렬 컴퓨팅 등 다양한 분야에서 성능 개선을 평가하는 중요한 기준이므로, 시스템 설계 시 이를 고려하는 것이 중요합니다.