본문 바로가기
Computer Science/Computer Architecture

1. Multicore

by Gofo 2021. 4. 10.

Amdahl's Law (Law of diminishing returns)

Law of diminishing returns 라고도 한다.

컴퓨터 시스템의 일부를 개선할 때 전체적으로 얼마만큼의 최대 성능 향상이 있는지 계산하는 데 사용된다.

 

$T_improved = \frac{T_affected}{improvement \; factor} + T_unaffected$

 

  • 성능을 개선하기 위해서는 많은 비율을 차지하는 것(common case)을 개선해야 한다.
  • 점점 더 발전함에 따라 발전을 이루는 속도가 더뎌진다.

 

예시

100s의 전체 execution time 중 80s가 multiply, 20s가 다른 작업이라고 하자.

 

Multiply 작업의 속도를

  • 2배 빠르게 할 경우 $total exec time = 40s + 20s = 60s$가 된다.
  • 4배 빠르게 한다면 total exec time = 80/4 + 20 = 40s가 된다.
  • 10배 빠르게 한다면 total exec time = 80/10 + 20 = 28s
  • 20배 빠르게 한다면 total exec time = 80/20 + 20 = 24s

점점 더 빨라지는 개선 폭이 줄어듬을 확인할 수 있다.

이는 multiply의 작업속도를 개선할 수록 전체 실행시간에서 multiply의 작업이 차지하는 비중이 작아지기 때문이다.

이 때는 가장 비중을 크게 차지하는 다른 작업을 개선해야 한다.

 

Supercomputer

Supercomputer에서 amdahl's law가 잘못 사용된다.

 

Supercomputer의 실행 코드는 serial code와 parallel code로 나눌 수 있다.

  • Serial code
    • 여러 프로세스에서 동시에 작업을 처리할 수 없는 코드
    • 예 : if
  • Parallel code
    • 여러 프로세스에서 동시에 처리할 수 있는 코드
    • 예 : loop(for, while)

 

Single processor에서 수행 했을 때 전체 100s의 실행시간을 가진 벤치마크에서 20s가 serial code의 실행시간이고, 80s가 parallel code의 실행시간이라 하자.

이때 프로세서의 수를

  • 4개로 늘린다면, 전체 실행시간 = 20s + 80/4s = 40s가 된다.
  • 16개로 늘린다면, 전체 실행시간 = 20s + 80/16s = 25s가 된다.
  • 64개로 늘린다면, 전체 실행시간 = 20s + 80/64s = 21.3s가 된다.

프로세서의 수가 늘어갈 수록 전체 실행시간이 줄어들지만 그 감소폭은 작아짐을 확인할 수 있다.

이 또한 amdahl's law가 적용된다고 생각할 수도 있지만, 실제로는 supercomputer에 적합하지 않은 벤치마크를 쓴 것일 뿐이다.

 


RISC

Best ISA을 찾는 것은 모든 instruction에 대해 테스트 할 수도 없기 때문에 논하기 힘든 문제이다.

그러나 상식 선에서 논리적으로 생각하였을 때에는 RISC style이 최선의 ISA 방식이다.

즉 RISC는 explainable design이다.

 

RISC and Amdahl's law

Amdahl's law는 RISC style가 공통되는 사상을 가지고 있다.

RISC architecture는 CISC에 비해 공통되는 instruction을 추려서 design 한 것이고, 그 instruction들의 성능을 개선시킴으로서 architecture의 성능을 높일 수 있다.

 

RISC에서의 common case는 simple operation이다.

이를 확인하기 위해서는 벤치마크 프로그램을 compile해서 어떤 machine instruction이 자주 사용되었는지를 확인하면 된다.

RISC을 분석하는 것이지만 comiler는 CISC compiler을 사용해야 한다.

CISC는 RISC에 비해 더 많은 종류의 instruction을 지원하기 때문에 자주 사용되는 instruction이 simple operation인지 확인하는 것에 적합하기 때문이다.

 

RISC style에서 성능을 개선하기 위해서는 IC, CPI, cct 각각을 감소시키면서, 최종적으로는 이들의 곱도 줄여야 한다.

각각을 줄이기 위해서 다음과 같은 기술을 사용하였다.

  • IC
    • smart compilers (optimizing compilers)
    • code density를 줄여야 한다.
  • CPI, cct
    • pipeline
    • cache memory

 

그러나 multimedeia application 등 새로운 application이 등장하였다.

범용 프로세서는 응용프로그램을 돌리기 위해 사용되므로 새로운 응용프로그램이 등장함에 따라 범용 프로세서 또한 새롭게 발전해야 했다.

발전 하더라도 과거의 응용프로그램에 대한 compatibility는 유지해야 한다.

 

점점 발전함에 따라 프로세서 성능 개선에 있어서 diminishing return과 한계까지의 power consumption의 증가로 인해 발전이 힘들어졌다.

결국 singlecore의 성능 개선은 한계에 다다랐고 성능 개선을 위해서 multicore processor가 등장하게 되었다.

 


Multicore

Yield

Proportion of good die

Yield = 정상 dies 수 / 전체 dies 수

 

트렌지스터가 작아졌지만, die의 크기는 커져갔다.

Die의 크기가 커질수록

  • 프로세스의 power consumption은 증가한다.
  • yield는 감소한다.
    • die의 크기를 제곱한 것에 비례해서 yield는 감소한다.
    • 줄어드는 yield를 막기 위해서 반도체 제조 기술에서의 상당한 발전이 요구되었다.

 

Single Processor Performance

시간이 흐름에 따라 컴퓨터의 발전 속도는 감소했다.(Amdahl's law)

  • ~1980s
    • 컴퓨터 초반에는 반도체 기술의 발전이 컴퓨터 성능을 증가시켰다.
    • 매년 25%의 성장을 이루었다.
  • 1980s ~ 2002
    • 반도체 기술의 발전과 함께 architecture의 변화, 즉 RISC style의 탄생이 컴퓨터 성능에 큰 영향을 끼쳤다.
    • 매년 52%의 성장을 이루었다.
  • 2002 ~
    • diminishing return on investment
      • 발전의 한계에 다달았다.
      • 캐시를 사용하더라도 메모리와 프로세서의 속도 간극은 심해졌다.
    • power limit
      • 여러 하드웨어가 추가되고 die의 크기가 커짐에 따라 power consumption은 증가했다.
      • 그에 따라 한정되어있는 power limit에 근접해갔다.

single processor performance

 

Pollack's Rule

die size가 2배가 되면

  • power consumption도 2배로 증가한다.
  • performance는 $\sqrt{2}$배 증가한다.

 

즉 power limit에 점점 근접해감에도 불구하고 기대만큼의 성능이 나오지 않는다.

 

프로세서의 power consumption이 130W가 넘어가면 방렬이 힘들어진다.

이는 더 고가의 냉각방식을 요구하게되는데 이는 너무 고가라서 보편화가 쉽지 않다.

따라서 프로세서는 130W의 power wall을 넘어서면 안된다.

 

Power limit을 넘어서지 않고 성능을 더 높이기 위해서 multicores가 개발되었다.

 

Multicores Processor

하나의 칩에 여러개의 프로세서(코어)를 올리는 것이다.

 

Single-core에서 크기를 증가시키며 성능을 높이는 것은 큰 발전을 기대하기 힘들다.

크기를 4배 늘려도 성능은 2배만 증가한다.(pollack's rule)

그러나 만약 프로세서를 4개의 multicore로 만든다면 die 크기도 4배가 되지만 성능 또한 4배가 된다.

 

그동안의 single core에서의 발전은 response time을 감소시킴으로써 이루어졌다.

그러나 멀티코어를 사용해서 성능을 높이는 것은 response time의 개선보다는 throughput의 개선을 이룬다.

현재의 프로그램은 singe-core에서 동작하도록 프로그래밍 되어있기 때문에 이를 multicore에서 parallel하게 수행하지 못하기 때문이다.

 

Shared Memory

Multicore는 shared-memroy architecture의 한 종류이다.

여러 개의 프로세서가 하나의 die에 존재하여 메모리를 공유한다.

 

 


Multicore and Parallel Programming

2006년까지는 single processor에서 single program의 response time을 줄이기 위해서 노력해왔다.

이는 하드웨어, architecture, compiler에서의 빠른 혁신 덕분에 가능했다.

 

그러나 single processor의 한계에 다다른 지금은 multicore processor을 이용해서 컴퓨터 성능을 높인다.

그러나 지금까지 single processor에서 single program을 돌리는 것을 목표로 하였기 때문에 현재는 multicore을 이용해서 throghput만을 높인다.

 

Response time을 개선하면 thorughput도 같이 개선되지만, throughput을 개선해도 response time은 개선되지 않는다.

따라서 repsonse time을 개선하는 것이 중요하다.

그러나 multicore을 통해서 response time을 개선하기 위해서는 프로그램을 다시 작성해야한다.

 

Parallel Programming

하나의 프로그램이 여러 프로세서를 이용해서 빠르게 작업하도록 프로그래밍 하는 것이다.

 

그러나 일반적인 프로그램에 대해 parallel programming은 어렵다.

  • performance programming
    • 작업을 어떻게 나누고, 공평하게 나눌 것인가
    • coordination
      • scheduling
      • synchronization : 프로세서에서 동시에 시작하고 끝내야 하는 경우가 발생한다.
    • communication overhead
      • 프로세스 간 통신 시 overhead가 발생한다.
  • serial code의 유무
    • 프로그램에 serial code가 존재한다면 멀티코어의 효과가 줄어든다.

 

Parallel programming 등을 통해서 멀티코어를 활용한 response time 개선이 현재 컴퓨터 산업의 목표이다.

 

 

댓글