Amdahl's Law, MIPS Arch

Seungyun Lee·2026년 2월 5일

Computer Architecture

목록 보기
8/17

1. Amdahl's Law concept

"전체 시스템 중 일부만 빠르게 개선한다고 해서, 전체 속도가 그만큼 빨라지는 것은 아니다. 개선하지 못한 부분(Serial Part)이 결국 발목을 잡는다."

Speedup=1(1f)+fnSpeedup = \frac{1}{(1 - f) + \frac{f}{n}}

  • ff (Fraction): 전체 작업 중 속도를 높일 수 있는 부분의 비율 (예: 40% = 0.4)
  • nn (Enhancement Factor): 그 부분을 몇 배나 빠르게 만들었는지 (예: 코어 2개면 2배, 10배 개선이면 10)
  • (1f)(1 - f): 속도를 높일 수 없는 나머지 부분 (개선이 안 되는 부분)
    아무리 nn을 무한대로 키워서 특정 부분을 0초 만에 끝낸다 해도, 개선되지 않은 부분 (1f)(1-f)가 남아있기 때문에 전체 속도는 11f\frac{1}{1-f} 이상 빨라질 수 없습니다.
  • 분자의 1은 주파수가 1이라는 소리다

주파수를 조절할수 있을때 공식:

Speedup=주파수(1f)+fnSpeedup = \frac{주파수}{(1-f) + \frac{f}{n}}

Time=WorkSpeedTime = \frac{Work}{Speed}

시간 = 일의 양 ÷ 처리 속도

1.1 Design Alternatives

이 예제는 "자주 쓰이는 걸 개선하는 게 낫다(Make the common case fast)"는 원칙을 보여줍니다.
상황: 그래픽 앱에서 FP(부동소수점) 연산이 전체의 50%를 차지함. 그중에서도 FPSQRT(제곱근)는 전체의 20%를 차지함.

Option A: FPSQRT(20%)만 10배 빠르게 만들기

  • f=0.2f = 0.2 (전체의 20% 해당)
  • n=10n = 10 (10배 개선)
  • SpeedupA=1(10.2)+0.210=10.8+0.02=10.821.22Speedup_A = \frac{1}{(1 - 0.2) + \frac{0.2}{10}} = \frac{1}{0.8 + 0.02} = \frac{1}{0.82} \approx \mathbf{1.22}

Option B: 모든 FP 연산(50%)을 1.6배 빠르게 만들기

  • f=0.5f = 0.5 (전체의 50% 해당)
  • n=1.6n = 1.6 (겨우 1.6배 개선)
  • SpeedupB=1(10.5)+0.51.6=10.5+0.3125=10.81251.23Speedup_B = \frac{1}{(1 - 0.5) + \frac{0.5}{1.6}} = \frac{1}{0.5 + 0.3125} = \frac{1}{0.8125} \approx \mathbf{1.23}

10배나 빨라지는 기술(A)보다, 개선 폭은 작아도 더 많은 부분에 적용되는 기술(B)이 전체 성능엔 더 좋습니다.

1.2 Practice

Dual Pentium 문제 (시험 단골 유형)

[전제 조건 분석]
Hardware: "Dual Pentium" → 코어가 2개이므로 병렬화 시 속도 향상 계수 n=2n = 2입니다.
Resource Split:

  • App 1: 전체 자원의 75% 사용
  • App 2: 전체 자원의 25% 사용

(a)App 1만 단독 실행 시 Speedup은?

  • 조건: App 1의 60%가 병렬화 가능 (f=0.6f = 0.6)
  • 하드웨어: 듀얼 코어 (n=2n = 2)
  • Speedup=1(10.6)+0.62=10.4+0.3=10.71.43Speedup = \frac{1}{(1 - 0.6) + \frac{0.6}{2}} = \frac{1}{0.4 + 0.3} = \frac{1}{0.7} \approx \mathbf{1.43}

(b) App 2만 단독 실행 시 Speedup은?

  • 조건: App 2의 95%가 병렬화 가능 (f=0.95f = 0.95)
  • 하드웨어: 듀얼 코어 (n=2n = 2)
  • Speedup=1(10.95)+0.952=10.05+0.475=10.5251.90Speedup = \frac{1}{(1 - 0.95) + \frac{0.95}{2}} = \frac{1}{0.05 + 0.475} = \frac{1}{0.525} \approx \mathbf{1.90}

(c) 전체 시스템 Speedup (App 1만 병렬화했을 때)

여기가 중요합니다. 전체 시스템 입장에서 ff를 다시 구해야 합니다.

  • 전체 시스템 관점에서의 ff 구하기:
  • App 1은 전체의 75%를 차지하고, 그중 60%가 빨라짐.
  • 시스템 전체 f=0.75×0.60=0.45f = 0.75 \times 0.60 = \mathbf{0.45} (전체의 45%가 빨라질 수 있음)
  • App 2는 건드리지 않음.

계산:

  • f=0.45f = 0.45, n=2n = 2
  • Speedup=1(10.45)+0.452=10.55+0.225=10.7751.29Speedup = \frac{1}{(1 - 0.45) + \frac{0.45}{2}} = \frac{1}{0.55 + 0.225} = \frac{1}{0.775} \approx \mathbf{1.29}

(d) 전체 시스템 Speedup (둘 다 병렬화했을 때)

이제 App 1과 App 2 모두 빨라집니다. 전체 시스템 입장에서 총 ff를 합산해야 합니다.
전체 시스템 관점에서의 ftotalf_{total} 구하기:

  • App 1 기여분: 0.75×0.60=0.450.75 \times 0.60 = 0.45
  • App 2 기여분: 0.25×0.95=0.23750.25 \times 0.95 = 0.2375
  • Total ff = 0.45+0.2375=0.68750.45 + 0.2375 = \mathbf{0.6875} (전체의 약 68.75%가 병렬화됨)

계산:

  • f=0.6875f = 0.6875, n=2n = 2
  • Speedup=1(10.6875)+0.68752Speedup = \frac{1}{(1 - 0.6875) + \frac{0.6875}{2}}
  • =10.3125+0.34375=10.656251.52= \frac{1}{0.3125 + 0.34375} = \frac{1}{0.65625} \approx \mathbf{1.52}

최종 요약 (문제 풀이 팁)
1. Isolation(단독) 문제: 해당 프로그램 내부의 ff만 보면 됩니다. (a, b번 유형)
2. Overall(전체) 문제: 각 프로그램이 차지하는 비중(Resource %)을 곱해서 '전체 시스템의 ff'를 새로 구해야 합니다. (c, d번 유형)
3.Dual Processor: 문제에서 nn값을 숫자로 안 주고 "Dual"이라고 숨겨뒀으니, n=2n=2임을 캐치하는 게 핵심입니다.

profile
RTL, FPGA Engineer

0개의 댓글