본문 바로가기
C++ 200제/코딩 IT 정보

RISC 명령어 집합, 코드 크기, 병목 현상에 대해서 [컴퓨터구조]

by vicddory 2018. 3. 23.

RISC 명령어 집합, 코드 크기, 병목 현상에 대해서 [컴퓨터구조]


RISC 명령어 집합과 인코딩


압축 코드의 두 가지 기능 수행을 도움


첫 번째,

- 같은 양의 컴파일 된 프로그램의 유지를 위해 작은 메모리 장치를 갖는 컴퓨터 시스템을 허용

- 여기서, 메모리 장치란, 디스크, 메인 메모리, (명령어) 캐시를 의미

- RISC 메모리 장치는 작고, 빠르며 저렴하게 사용할 수 있음

- 같은 크기의 메모리 장치는 컴파일된 코드를 더 많이 저장할 수 있음

두 번째,

- 기계 코드를 압축할 때, CPU가 원하는 속도(비용)로 명령어 fetch를 하기 위해 적당한 대역폭이 필요함

- 이때 RISC에서 사용하는 버스들은 저렴

- 같은 대역폭(Bandwidth)은 컴파일된 프로그램의 명령어 사이클(instruction cycle)을 더 빠르게 수행. (완료되는 시간을 줄임)


버스의 크기 = 대역폭(Bandwidth)


명령어 사이클 = Fetch Cycle + Execution Cycle


세 번째

- 코드를 압축하는 기존의 다른 방법보다 더 큰 비용이 필요할 가능성도 있음


RISC 명령어 집합, 코드 크기, 병목 현상에 대해서 [컴퓨터구조]


RISC 평균 코드 크기 감소


Fetch가 필요한 명령어의 수를 줄임


첫 번째

- Huffman 인코딩 방식과 비슷한 명령어 형식을 이용

- 변수가 명령어 안의 필드 수를 보유

- 명령어 사용량의 상대 빈도와 필드 타입에 따라 선택


두 번째

- 자주 사용되는 기본 연산과 관련된 과정은 하나의 명령어로 만들 수 있음

- 그 명령어에 중간 결과를 명시하는 필드를 배제하고, 복합 필드에 공통적인 연산 대상을 명시하는 것이 가능


회로 (circuitry)


RISC, 피해야 할 부정적 영향


- CPU의 성능과 비용에 대한 명령어 압축, 결합을 신중하게 결정

- 명령어 해독(decode), 실행 제어(control) 때문에 크기가 커질 수 있음

- 명령어 encoding 과정이 복잡해 큰 비용이 필요함

- 명령어를 병렬이 아닌 직렬로 디코딩할 때 성능이 심각하게 저하

명령어 순서가 변할 때 제어(Control)가 필요(동작)


병렬 프로세서 : 프로세서들이 하나의 큰 작업을 나누어 병렬로 처리하는 것


 - 중요한 명령어의 필드를 추출해 해석할 때, 다른 필드의 decode에 의지하면 안 됨

 - 명령어는 데이터 경로 안에 많은 중간 결과를 요구할지도 모름

 - 이럴 경우, 전류의 양이 증가해 실행 속도가 느려지고, 인터럽트 핸들링이 힘들어짐


기계 코드 압축으로 성능 개선 (improve performance by compacting the machine code)


RISC 명령어 fetch 시 병목 현상 완화


- 기계 코드 압축으로 인한 성능 개선엔 한계점이 있음


Fetch는 execution과 일부 중첩되어 fetch 시간을 감소해도 성과는 없음


- 정교하지 않은 기계에선 fetch 사이클의 전체 버스가 계속 필요한 제한점

  : 명령어는 줄지만, 버스는 유지되어 그만큼의 공간이 낭비

  : 버스 사용이 늘면 버스 병목현상 발생


- Integer 명령어는 fetch 사이클의 추가를 요구해 명령어들은 워드의 경계(word boundary)에 정렬되지 않음


- 버스와 메모리 장치를 늘리는 데 비해 버퍼링 된 명령어를 편리하게 사용하면 기계 장치에 대한 비용을 낮출 수 있음


RISC 명령어들


간단한 명령어들이지만 코드 사이즈를 낭비하는 점에 대한 해결책


- 명령어들은 항상 1 word로 구성

- 하나의 사이클은 하나의 명령어를 fetch 하는 데 필요

- Execute 사이클은 가능한 많은 작업을 수행하도록 정의

- 디코딩과 필드 추출을 담당하는 칩의 면적은 1~2%에 불과

- 또 다른, 간단한 해결책


메모리 가격은 하락함


메모리 낭비는 흔히 있는 일 (심각한 수준의 낭비가 아니면….)


RISC 코드 크기


- RISC도 명령어 집합(set)과 형식(format)이 있음


- 다른 프로세서들에 비해 조금 크다

- 압축된 VAX-11 코드 크기의 150%를 넘진 않음

- 당시에 초당 백만 개의 명령을 수행


RISC 코드의 크기.


Garrison과 VanDyke


- Instruction set, variable-length field, instruction들을 인코딩하여 크기를 얼마나 줄일 수 있는지 연구


- 나중에 저장될 명령어를 가리키는(지시하는) 것이 가능

- 다른 프로세서 코드와 같은 범위에서의 RISC 코드 크기를 의미


Instruction Set and Code Compactness


RISC 명령어 집합, 코드 크기, 병목 현상에 대해서 [컴퓨터구조]

댓글