[CS] 2. Architecture

이재호·2025년 2월 18일

cs

목록 보기
2/3

문제 출처: https://docs.google.com/document/d/1ebOe9TvEFWVpae8cszHVoptYxwn8QACE/edit

  1. <ISA (Instruction set architecture)>

    1. CISC와 RISC의 차이점은 무엇인가?

      CISC는 Complex Instruction Set Computer의 약자로, 복잡한 명령어 집합을 가진 프로세서 설계 방식이다. 하나의 명령어가 여러 개의 연산을 할 수 있도록 설계되었다. 그리고 RISC는 Reduced Instruction Set Computer의 약자로, 명령어를 단순화하여 실행 속도를 빠르게 하는 프로세서 설계 방식이다. 한 번의 클록 사이클에 하나의 명령어를 실행하는 것을 목표로 한다. 둘의 대조적인 차이점으로, CISC의 경우 명령어의 수가 많고 명령어의 길이가 가변적이라는 점과 RISC의 경우 명령어의 수가 적고 명령어의 길이가 고정적이라는 점을 꼽을 수 있다. 또한, CISC는 메모리에서 직접 연산이 가능하지만 RISC는 메모리에서 직접 연산을 하지 않고 Load/Store 방식으로만 접근하며 연산은 프로세서에서 수행한다.

    2. Register File과 Cache의 차이는 무엇인가?

      Register File은 CPU 내부에 있는 소규모 저장소로, CPU가 직접 사용하는 데이터나 연산 결과를 저장하는 역할을 한다. Cache는 CPU 외부에 존재하며 CPU와 메모리(RAM) 사이에 존재하는 저장소이다. 자주 사용되는 데이터를 저장하는 역할을 한다. Register File이 비교적 더 빠르고 작은 사이즈를 가지며 데이터 보관 기간이 더 짧다. 또한, CPU의 입장에서 Register는 직접 접근이 가능하지만 Cache는 heat/miss에 따라 접근 속도가 달라진다.

    3. Intel과 AMD가 만드는 CPU의 공통점과 차이점은 무엇인가?

      공통점: x86 기반 아키텍처 사용, CISC(Complex Instruction Set Computing) 기반, SIMD(단일 명령어 다중 데이터) 명령어 지원, 멀티스레딩 기술 적용
      차이점: 명령어 디코딩 방식에서 Intel의 경우 CISC->RISC로 변환 최적화가 적용이 됨. 반면 AMD는 상대적으로 단순한 디코딩 방식 사용. Intel의 경우 강력한 branch 예측 기법이 적용되며 고급 명령어 확장 기술을 중점적으로 다루며, AMD의 경우 단순하고 효율적인 설계, 큰 L3 캐시를 중점적으로 다루며 가격 대비 성능을 극대화함.

  2. <Pipelined Architecture>

    1. 파이프라이닝은 왜 하는가?

      명령어를 수집하여 CPU에서 여러 개의 명령어를 동시에 수행하는, 일종의 병렬 처리를 함으로써 CPU의 명령어 처리 속도를 높이기 위해 필요하다.

    2. 파이프라인 해저드(Pipeline Hazard)란 무엇인가? 그리고 종류에는 무엇이 있는가?

      파이프라인 해저드란 명령어 간 충돌로 인해 정상적인 실행이 불가능한 경우를 의미한다. 그 종류에는 하드웨어 자원이 부족하여 명령어를 실행할 수 없는 구조적 해저드, 이전 명령어의 실행 결과가 다음 명령어에 필요한 경우에 해당하여 다음 명령어를 실행할 수 없는 데이터 해저드, 분기 명령어 실행 중 다음 명령어가 결정되지 않은 상태에 해당하는 제어 해저드가 있다.

    3. 파이프라이닝에서 Branch Prediction의 역할은 무엇인가?

      branch prediction은 제어 해저드를 방지하는 역할을 한다. CPU에서 분기 명령어가 나오지 않으면 CPU는 다음에 수행할 명령어를 결정하지 못한다. 대신에 branch prediction을 통해서 분기 여부를 예측함으로써 파이프라인이 멈추는 것을 방지할 수 있다.

  3. <Memory Hierarchy>

    1. 캐시가 필요한 이유는? Cache hit ratio 에 대해 설명하시오.

      캐시는 CPU와 메모리 사이의 속도 차이를 줄이기 위해서 필요하다. 보통 CPU의 동작 속도를 메인 메모리(RAM)가 따라가지 못하기 때문에 CPU에서 메모리로 직접 접근하면 병목 현상이 발생하여 전체 성능이 떨어진다. 따라서 이를 위해 캐시가 필요하다. Cache hit ratio는 CPU가 요청한 데이터가 캐시에 존재할 확률을 의미한다. 수식으로는 다음과 같다. Cachce_hit_ratio=Cache_Hits/Total_Memory_AccessCachce\_hit\_ratio = Cache\_Hits / Total\_Memory\_Access

    2. 메모리 접근하는데 x 사이클이 걸리고 캐시에 접근하는데 y 사이클이 걸리며 캐시 hit rate 가 h %일 때 effective access time은?

      EAT=(Cache Hit Rate×Cache Access Time)+(Cache Miss Rate×Total Memory Access Time)EAT=(Cache Hit Rate×Cache Access Time)+(Cache Miss Rate×Total Memory Access Time).
      따라서, EAT=(hy)+((1h)(x+y))EAT=(h*y)+((1-h)*(x+y))이다.

    3. 페이지 폴트는 언제 발생하는가? 페이지 폴트 비율과 cache miss 비율 중 큰 것은? 그 이유는?

      페이지 폴트는 CPU가 요청한 데이터가 캐시와 메인 메모리에 존재하지 않고 디스크에 존재하는 경우에 발생한다. cache miss 비율이 더 크다. 이유는 캐시는 작고 데이터 교체가 빈번히 일어나지만, 메인 메모리는 크고 한 번 로드된 페이지는 오랫동안 유지되기 때문이다.

  4. <Virtual Memory>

    1. 캐시 메모리와 메인 메모리의 주소 지정 방식의 차이점이 무엇인가?

      캐시 메모리는 CPU가 실행하는 물리적 주소를 기반으로 작동한다. 즉, 메인 메모리에서 특정 데이터가 캐시에 저장될 때, 그 데이터는 물리적 주소로 지정된다. 반면 메인 메모리의 경우, 가상 주소를 사용하여 데이터를 참조한다. 이때 CPU는 메모리의 가상 주소를 직접 참조하며 OS가 이를 물리 주소로 변환해주는 과정을 거친다.

  5. <ILP (Instruction Level Parallelism)>

    1. Superscalar와 Out-of-Order execution(OoO)은 모두 CPU의 성능을 높이기 위한 기법이다. 두 기법의 공통점과 차이점에 대해서 설명하시오.

      공통점: ILP를 활용하여 CPU의 성능을 향상, 하나의 명령어 스트림 내에서 여러 개의 명령어를 병렬로 실행
      차이점: 슈퍼스칼라의 경우, 여러 개의 실행 유닛 사용하여 한 사이클에 여러 개의 명령어를 수행하는 기법이지만, OoO는 명령어 간 데이터 의존성을 고려하여 명령어 실행 순서를 재정렬하는 식의 기법이다.

    2. 슈퍼스칼라와 VLIW(Very Long Instruction Word)의 차이점은 무엇인가?

      슈퍼스칼라의 경우, 하드웨어가 명령어 실행 순서를 동적으로 결정하지만, VLIW의 경우 컴파일러가 명령어 실행 순서를 정적으로 결정한다.

  6. <Cache>

    1. 캐시를 구성하는 컴포넌트에 무엇이 있는가? 각 컴포넌트는 어떤 역할을 하는가?
      1. 캐시 메모리: 데이터를 빠르게 읽을 수 있도록 하는 CPU와 메인 메모리 사이에 존재하는 작은 메모리.
      2. 캐시 컨트롤러: CPU와 캐시 메모리 간의 데이터 이동을 관리.
      3. 캐시 라인: 캐시 메모리에 저장되는 데이터의 최소 단위.
      4. 태그: 캐시 메모리에 저장된 데이터가 실제 메인 메모리의 어떤 위치에서 왔는지 저장하는 메타데이터.
      5. 인덱스: 캐시 라인을 찾아내는 데 사용.
      6. 오프셋: 캐시 라인 내 실제 데이터의 위치를 나타냄.
    2. 캐시에서 태그 매칭이 무엇이고 왜 필요한가?

      태그 매칭은 캐시로 요청한 데이터가 실제 캐시에 존재하는지를 확인하는 과정이다. CPU가 캐시에 요청한 데이터의 유무를 빠르게 확인하기 위해서 태그 매칭이 필요하다.

    3. 캐시에서 블록(라인) 크기를 크게 했을 때와 작게 했을 때 어떤 장단점이 있을까?

      블록 크기가 클 경우, 캐시 히트 확률이 높아질 수 있다는 장점이 있다. 인접한 데이터를 자주 사용할 때 유리하다. 즉, 공간 지역성에 유리하다. 하지만, 불필요한 데이터가 포함될 수 있으며, 오버헤드가 커질 수 있다는 단점이 있다. 반대로 블록 크기가 작을 경우, 캐시 히트 확률은 낮아진다는 단점이 있다. 하지만 그만큼 캐시 메모리 공간 낭비가 적어진다는 장점이 있다.

    4. Direct-mapped cache와 set-associative cache의 장단점은 무엇인가?

      Direct-mapped cache는 각 캐시 메모리의 주소가 하나의 캐시 라인에만 매핑되는 경우를 의미하는데, 이 경우 구현이 간단하고 빠르다는 장점이 있다. 또한, 캐시를 찾는 과정에서 비교할 태그가 적기 때문에 연산이 빠르다. 하지만 성능이 떨어지며, 동일한 캐시 인덱스를 갖는 두 개 이상의 캐시 메모리가 있을 경우 서로 충돌이 발생할 확률이 높다는 단점이 존재한다. 반면에 set-associative cache는 각 캐시 메모리의 주소가 여러 개의 캐시 라인 중 하나에 매핑되어, 캐시 충돌 적다는 장점이 있다. 하지만 구현이 복잡하고 비교할 태그가 늘어나 속도가 느려질 수 있으며, 비용이 비싸다는 단점이 있다.

    5. Write-through cache와 write-back cache에 대해서 설명해 보시오.

      Write-through cache는 캐시에 데이터가 쓰일 때, 메인 메모리에도 데이터가 write되는 것을 의미한다. 메인 메모리와 캐시가 동기화되어 일관성을 유지하는 장점이 있지만, 메인 메모리에도 write를 하는 만큼 속도가 느려질 수 있다는 단점이 있다. write-back cache는 캐시에서만 데이터를 write하고, 메인 메모리에는 나중에 한 번에 write 처리하는 것을 의미한다. 메모리와 캐시 간의 일관성이 떨어진다는 단점이 있지만, 효율적인 방식으로 속도가 비교적 빠르다는 장점이 있다.

    6. Write-through cache는 write buffer를 보통 사용하는데 이의 역할은 무엇인가?

      캐시에서 메인 메모리로 데이터를 write할 때 비동기적으로 처리할 수 있게끔 해주는 임시 저장소이다.

    7. Cache에서 사용하는 replacement policy에는 어떤 것이 있는가?

      가장 최근에 사용되지 않은 데이터를 교체하는 LRU(Least Recently Used), 가장 오래된 데이터를 교체하는 FIFO(First-In First-Out), 무작위로 데이터를 교체하는 Random Replacement, 가장 사용 빈도가 적은 데이터를 교체하는 LFU(Least Frequently Used) 방식 등이 있다.

  7. <Multiprocessor, Multi-core>

    1. 코어가 10개 있는 cpu에서 프로세스 하나를 균등하게 처리하면 이상적인 경우, 시간이 얼마나 줄어드는가? 그런데 프로세스에서 분할되지 않는 20%의 작업이 있다고 하면, 시간이 얼마나 줄어드는가? 이제 코어가 수백개, 혹은 무한개 있다고 하면 얼마나 줄어드는가?

      만약 전체 작업에 대해서, 모든 작업이 분할 가능하다고 가정하는 이상적인 경우에는, 코어의 수에 반비례하여 시간이 줄어든다. 즉, 1/10로 줄어든다. 하지만 20%가 분할되지 않는 작업인 경우, 시간=0.8/10+0.2/1=0.28시간 = 0.8/10 + 0.2/1 = 0.28로 줄어든다. 즉 기존 시간의 28%로 줄어든다. 코어가 무한 개가 있다고 하면 80%의 작업은 0으로 수렴하고, 20%의 작업은 분할이 되지 않기 때문에 걸리는 총 시간은 0.2로 수렴할 것이다. 따라서 기존 시간의 20%로 줄어든다. 시간=0.8/+0.2/1=0.2시간 = 0.8/\infty + 0.2/1 = 0.2

profile
천천히, 그리고 꾸준히.

0개의 댓글