본문 바로가기
Computer Science/컴퓨터구조

Language of the Computer(A Case for MIPS) (1) 컴퓨터 아키텍처: MIPS 명령어 세트, 레지스터 관리 및 산술 연산 최적화

by 큌 2024. 4. 30.
반응형

1. Computer Systems Stack

2. 컴퓨터 아키텍처

  • 컴퓨터 아키텍처는 크게 명령어 집합 아키텍처(ISA)와 마이크로아키텍처로 나눌 수 있다.
  • 명령어 집합 아키텍처(ISA)는 하드웨어(HW)와 소프트웨어(SW) 간의 인터페이스를 정의.
    • 즉, 프로그래머가 사용할 수 있는 명령어, 명령어의 데이터 타입, 레지스터, 주소 모드, 입/출력 모델 등을 정의.
  • ISA는 하드웨어의 기능과 성능에 직접적인 영향을 미치며, 일단 정의되면 호환성 문제로 인해 변경하기 어렵다.
  • 다양한 칩 제조업체에서는 x86, ARM, SPARC 등 여러 종류의 ISA를 제공.
  • 마이크로아키텍처 마이크로아키텍처는 ISA를 구현하는 방법.
    • 즉, 프로세서(및 I/O 하위 시스템)의 구조와 조직을 포함.
  • 마이크로아키텍처의 설계는 프로세서의 성능, 에너지 효율성, 제조 비용 등에 영향을 미침.
  • 예를 들어, 파이프라인의 깊이, 캐시의 크기와 조직 등은 모두 마이크로아키텍처의 설계 결정 사항이다.
  • 파이프라인의 깊이는 명령어 처리 과정을 몇 단계로 나누어 병렬 처리할 것인지를 결정.
    • 이는 프로세서의 처리 속도를 크게 향상시킬 수 있다.
  • 한편, 캐시의 크기와 조직은 데이터 접근 속도에 큰 영향을 미치며, 이는 시스템의 전반적인 성능을 결정하는 중요한 요소.
  • 요약하자면, 명령어 집합 아키텍처(ISA)는 하드웨어와 소프트웨어 간의 인터페이스를 정의하는 반면, 마이크로아키텍처는 해당 인터페이스를 구현하는 구체적인 방법을 설명한다.
  • 이 두 구성 요소는 컴퓨터 시스템의 성능과 기능을 결정하는 데 중요한 역할.

3. Mainstream ISAs

Operations of Computer Hardware

4. Instruction Set

  • 명령어 집합은 컴퓨터가 이해하고 실행할 수 있는 명령어들의 집합.
  • 다양한 컴퓨터마다 그들만의 고유한 명령어 집합이 있지만, 많은 공통된 측면들도 있다.
  • 초기 컴퓨터들은 매우 단순화된 명령어 집합을 가지고 있었는데, 이는 구현을 단순화시키기 위함이었다.
  • 많은 현대 컴퓨터들 역시 단순화된 명령어 집합을 가지고 있다.
  • 명령어 집합의 단순화는 보다 빠른 실행 속도와 더 낮은 제조 비용을 가능하게 함.
    • 그러나, 보다 복잡하고 다양한 작업을 수행하기 위해서는, 명령어 집합도 더욱 복잡해질 필요가 있다.
  • 따라서, 컴퓨터 설계자들은 간단하고 효율적인 명령어 집합을 설계하는 것과, 컴퓨터가 수행할 수 있는 작업의 다양성 사이에서 균형을 맞추어야 함.
    • 이러한 명령어 집합의 예로는, 컴퓨터가 메모리에서 데이터를 읽고 쓰는 명령, 연산을 수행하는 명령(더하기, 빼기 등), 그리고 프로그램의 실행 흐름을 제어하는 명령(분기, 루프 등) 등이 있다.
  • 결국 명령어 집합은 컴퓨터의 뇌라고 할 수 있는 마이크로프로세서가 직접 인식하고 처리할 수 있는 기본적인 지시들의 모음.
  • 이러한 명령어들은 소프트웨어, 특히 저수준 프로그래밍 언어나 운영체제 등이 컴퓨터 하드웨어와 상호작용하는 기본적인 방법을 정의.

5. The MIPS Instruction Set

  • MIPS(마이크로 프로세서 없이 파이프라인된 명령어 세트).
  • MIPS는 스탠퍼드 대학에서 개발되었으며, 나중에 MIPS Technologies(www.mips.com)에 의해 상업화되었다.
  • MIPS는 임베디드 코어 시장에서 큰 점유율을 차지하고 있으며, 소비자 전자제품, 네트워크/저장 장비, 카메라, 프린터 등 여러 애플리케이션에서 활용되고 있다.
  • 2002년에는 거의 1억 개의 MIPS 프로세서가 제조되었으며, NEC, 닌텐도, 시스코, 실리콘 그래픽스, 소니 등 여러 회사에서 사용되고 있다.
  • MIPS 아키텍처는 간단하면서도 효율적인 명령어 세트를 제공.
    • 이를 통해 다양한 장치에서 높은 성능을 발휘할 수 있으며, 특히 임베디드 시스템과 관련된 제품에서 많이 사용.
  • MIPS 프로세서는 그 설계의 단순성 덕분에 낮은 전력 소모와 뛰어난 성능 비율을 제공하는 것으로 유명.

6. Arithmetic Operations

  • 산술 연산
    • 덧셈과 뺄셈에 대해, 세 개의 피연산자가 사용.
    • 두 개의 입력 값(소스)과 하나의 결과 값(목적지)이 있다.
  • 모든 산술 연산이 이 형식을 따름.
  • 설계 원칙 1:
    • 단순함이 규칙성을 선호.
    • 규칙성은 구현을 단순하게 만든다. 
    • 단순함은 더 높은 성능을 더 낮은 비용으로 가능하게 함.
  • 이러한 설계 원칙은 컴퓨터 아키텍처의 핵심을 이루며, 특히 처리기의 명령어 세트 설계에 있어서 중요한 기준점을 제공.
  • 단순하고 규칙적인 설계는 하드웨어의 구현을 용이하게 하며, 이는 곧 제조 비용을 절감하고 처리 속도를 향상시키는 결과를 가져옴.

Operands of Computer Hardware

7. Register Operands

  • 산술 명령어는 레지스터 피연산자를 사용.
  • MIPS는 32개의 32비트 레지스터 파일을 가지고 있으며, 자주 접근하는 데이터를 위해 사용.
    • 이 레지스터들은 0부터 31까지 번호가 매겨져 있으며, 32비트 데이터는 "워드"라고 불린다.
  • 어셈블러에서는 임시 값을 위해 $t0, $t1, ..., $t9로, 저장 변수를 위해 $s0, $s1, ..., $s7로 명명.
  • 설계 원칙 2는 "작은 것이 더 빠르다"는 것.
  • 이와 대조적으로 주 메모리는 수백만 개의 위치를 가지고 있다.
  • 레지스터는 메인 메모리보다 훨씬 빠르게 접근할 수 있기 때문에, 처리 속도를 향상시키고 성능을 높이기 위해 자주 사용되는 데이터를 레지스터에 저장하는 것이 좋다.
  • 따라서, 적은 수의 레지스터를 효율적으로 사용하는 것이 시스템의 전체적인 성능을 향상시킬 수 있는 중요한 전략 중 하나.

8. Register Operands: MIPS 32 Registers

9. MIPS Memory operands

  • MIPS 메모리 피연산자는 주로 복합 데이터, 예를 들어 배열, 구조체, 동적 데이터 등을 메인 메모리에 저장하는 데 사용.
  • 산술 연산을 적용하기 위해서는 메모리에서 레지스터로 값을 로드하고, 연산 결과를 레지스터에서 메모리로 저장해야 함.
  • 메모리는 바이트로 주소가 지정.
    • 즉, 각 주소는 8비트(바이트)를 식별.
  • 단어는 메모리에 정렬되어 있으며, 주소는 4의 배수여야 함.
  • MIPS는 빅 엔디언을 사용하며, 이는 단어의 가장 높은 순위 바이트가 단어의 가장 낮은 주소에 위치해 있음을 의미.
  • 이와 대조적으로, 리틀 엔디언은 가장 낮은 순위 바이트가 단어의 가장 낮은 주소에 위치.
  • 이러한 특징들은 메모리 관리 및 데이터 처리 방법에 중요한 영향을 미치며, 효율적인 프로그래밍과 시스템 설계에 핵심적인 역할.

10. MIPS Memory Operand Example

11. Register vs Memory

  • 레지스터는 메모리에 비해 접근 속도가 빠름.
  • 메모리 데이터를 작업하려면 로드 및 스토어가 필요하기 때문에 실행해야 하는 명령어 수가 늘어납니다.
    • 따라서 컴파일러는 가능한 한 변수를 레지스터에 할당해야 하며, 덜 자주 사용되는 변수들에 대해서만 메모리로 내보낼(스플) 필요가 있다.
  • 레지스터의 최적화는 중요한 작업.
  • 레지스터와 메모리 사이의 이러한 차이점은, 제한된 수의 레지스터를 효율적으로 사용하여 프로그램의 성능을 향상시키기 위한 다양한 전략이 필요하다는 것을 의미.
  • 레지스터는 CPU와 직접적으로 상호 작용하기 때문에 데이터에 매우 빠르게 접근할 수 있으며, 이는 메모리에 비해 상대적으로 느린 접근 시간을 가짐.
  • 따라서 성능을 최적화하기 위해 자주 사용되는 변수들이 가능한 한 레지스터에 남아 있도록 프로그래밍하는 것이 중요.

12. Memory Hierarchy 

13. MIPS Immediate Instructions

  • 레지스터는 메모리에 비해 접근 속도가 빠름.
  • 메모리 데이터를 작업하려면 로드 및 스토어가 필요하기 때문에 실행해야 하는 명령어 수가 늘어남.
    • 따라서 컴파일러는 가능한 한 변수를 레지스터에 할당해야 하며, 덜 자주 사용되는 변수들에 대해서만 메모리로 내보낼(스플) 필요가 있다.
  • 레지스터의 최적화는 중요한 작업.
  • 레지스터와 메모리 사이의 이러한 차이점은, 제한된 수의 레지스터를 효율적으로 사용하여 프로그램의 성능을 향상시키기 위한 다양한 전략이 필요하다는 것을 의미.
  • 레지스터는 CPU와 직접적으로 상호 작용하기 때문에 데이터에 매우 빠르게 접근할 수 있으며, 이는 메모리에 비해 상대적으로 느린 접근 시간을 가짐.
    • 따라서 성능을 최적화하기 위해 자주 사용되는 변수들이 가능한 한 레지스터에 남아 있도록 프로그래밍하는 것이 중요.

14. MIPS Constant

  • MIPS에서는 상수 0을 표현하기 위해 레지스터 0($zero)가 사용.
    • 이 레지스터는 오버라이트될 수 없으며 상수 0으로 고정되어 있다.
    • 이 기능은 일반적인 연산에서 유용하게 사용.
  • 예를 들어, 레지스터 간에 값을 이동시킬 때 $zero 레지스터를 활용할 수 있다.
  • 이러한 설계는 프로그래밍 시 상수 0이 필요할 때 매번 값을 불러오는 대신 바로 $zero 레지스터를 사용하여 효율성을 높이고 실행 속도를 개선할 수 있게 함.

15. 정리: MIPS 설계 원칙

  • MIPS 설계 원칙은 세 가지 기본 원칙에 기초:
    • 단순함이 규칙성을 선호한다.
      • 고정된 크기의 명령어
      • 명령어 형식의 갯수가 적음
      • 연산자 코드가 항상 첫 번째 6비트에 위치함
    • 더 작은 것이 더 빠르다.
      • 제한된 명령어 세트
      • 제한된 수의 레지스터
      • 제한된 수의 주소 지정 모드
    • 일반적인 경우를 빠르게 만들어라.
      • 산술 연산자는 레지스터 파일에서 가져옴
      • 명령어가 즉시 피연산자를 포함할 수 있음
  • 이 원칙들은 MIPS 아키텍처를 효율적으로 설계하는 데 기여하며, 프로그램의 실행을 최적화하기 위한 지침을 제공.
  • 단순성과 규칙성은 설계와 구현을 용이하게 하며, 소규모 구성은 처리 속도를 높이고, 일반적인 작업에 집중하는 것은 전체적인 성능을 향상시킴.
반응형