압축 명령 집합

Compressed instruction set

압축 명령 집합 또는 단순 압축 명령어마이크로프로세서명령 집합 아키텍처(ISA)에 대한 변형으로서 명령을 보다 컴팩트한 형식으로 나타낼 수 있다.대부분의 실제 사례에서 압축 지침은 32비트 명령을 사용하지 않는 프로세서에서 16비트 길이로 되어 있다.16비트 ISA는 완전한 32비트 ISA의 하위 집합이지 별도의 지침 집합이 아니다.소형 포맷은 약간의 절충을 필요로 하는데, 일반적으로 사용 가능한 지침이 적고, 프로세서 레지스터를 더 적게 사용할 수 있다.

이 개념은 원래 히타치가 SH-5 버전에서 16비트에서 32비트 명령어로 이동하면서 SuperH RISC 프로세서 설계의 코드 밀도를 향상시키기 위한 방법으로 도입되었다.새 설계에는 두 가지 지침 집합이 있었는데, 하나는 새 설계의 전체 ISA에 접근할 수 있게 해 주었고, SHcompact로 알려진 더 작은 16비트 집합은 프로그램을 더 적은 양의 메인 메모리에서 실행할 수 있게 해주었다.가장 작은 시스템의 메모리도 이제 더 이상 크기가 주요 관심사가 아니다. 오늘날 이점은 메인 메모리에 대한 접근 횟수를 줄임으로써 모바일 장치의 에너지 사용을 줄인다는 것이다.

히타치의 특허는 Arm Ltd.에 의해 그들의 프로세서에 대한 허가를 받았는데, 그 곳에서 "썸"으로 알려져 있었다.유사한 시스템은 MIPS16e와 PowerPC VLE에서 찾을 수 있다.원천특허는 시효가 지났으며, 처음부터 이를 사용하기 위해 고안된 RISC-V 등 다수의 현대적 디자인에서 개념을 찾을 수 있다.64비트 컴퓨팅의 도입으로 더 이상 널리 사용되지 않게 되었다. 이러한 프로세서는 일반적으로 32비트 명령을 사용하고 기술적으로 압축된 ISA의 한 형태지만 대부분 동일한 프로세서 제품군의 32비트 버전에서 구형 ISA의 변형된 버전이기 때문에 실제 압축은 존재하지 않는다.

개념

마이크로프로세서는 일련의 비트로서 명령을 부호화하며, 일반적으로 8비트 바이트의 숫자로 나뉜다.예를 들어, MOS 6502에서는ADC명령은 피연산자 값과 축전지에 이미 저장되어 있는 값 사이의 이진 추가를 수행한다.프로세서가 피연산자를 찾을 수 있는 다양한 장소가 있다. 피연산자는 메인 메모리 또는 특수 제로 페이지에 위치하거나 "10"과 같은 명시적 상수일 수 있다.이러한 각각의 변화는 다른 8비트 명령 또는 opcode를 사용하였다. 만약 축전지에 상수 10을 추가하고 싶다면, 그 명령은 다음과 같이 메모리로 인코딩될 것이다.$69 $0A소수점 값 10에 대해 $0A가 16진수인 경우.대신 위치 $4400에서 메인 메모리에 저장된 값을 추가한다면,$6D $0044, 작은 엔디안 주소와 함께.[1]

두 번째 명령에는 메모리 주소가 16비트 길이기 때문에 3바이트가 필요하다는 점에 유의하십시오.지침에 따라 1바이트, 2바이트 또는 3바이트를 사용할 수 있다.[1]이 용어는 메인프레임미니컴퓨터를 포함한 대부분의 프로세서가 일반적으로 이 개념의 일부 변형을 사용했기 때문에 당시에는 일반적이지 않았지만, 현재는 가변 길이 명령 집합으로 알려져 있다.1970년대 후반에도 마이크로프로세서가 8비트 형식에서 16바이트로 이동하기 시작했을 때, 이 개념은 일반적이었습니다; 인텔 8088어드레싱 모드에 따라 0에서 6바이트의 추가 바이트가 뒤따를 수 있는 8비트 opcode를 계속 사용하였습니다.[2]

32비트 시스템으로 이동하는 동안이었는데, 특히 RISC 개념이 프로세서 설계를 이어받기 시작하면서 그 가변 길이 지침이 사라지기 시작했다.예를 들어, MIPS 아키텍처에서 모든 지침은 단일 32비트 값이며, 가장 중요한 비트에 6비트 opcode가 있고, 나머지 26비트가 그것의 제한된 주소 지정 모드를 나타내는 다양한 방법으로 사용된다.대부분의 RISC 설계는 유사하다.고정 길이 명령 형식으로 이동하는 것은 초기 RISC 설계의 성능을 뒷받침하는 핵심 설계 개념 중 하나였다. 초기 시스템에서는 명령을 읽는 데 1~6개의 메모리 사이클이 걸릴 수 있으며, 프로세서가 데이터가 준비되기 전에 명령을 수행하려고 시도하지 않았는지 확인하기 위해 로직의 다양한 부분들 사이의 배선이 필요할 수 있다.RISC 설계에서 운영은 일반적으로 한 사이클을 수행하므로 디코딩을 크게 단순화한다.이러한 연동 회로의 절약은 대신 성능에 직접적인 영향을 미치는 추가적인 논리 또는 프로세서 레지스터 추가에 적용된다.[3]

코드 밀도

RISC 접근법의 단점은 많은 지침들이 단순히 4바이트를 요구하지 않는다는 것이다.예를 들어, Logical Shift Left 명령은 레지스터의 비트를 왼쪽으로 이동시키고, 명령 opcode와 레지스터 번호만 요구한다.산술 레지스터 A가 1개여서 등기번호조차 필요 없는 6502에서는, 이 6502에서, 이 5102는, 산술 레지스터 A가 필요 없다.ASL지시는 1바이트를 차지한다.[1]이론적으로, MIPS는 이 동일한 연산을 위해 6비트 opcode와 5비트 레지스터 번호만 필요하며 이론적으로 16비트 값으로 명령을 맞출 수 있다.그러나 대부분의 RISC 설계의 경우와 마찬가지로 이 지침은 여전히 전체 32비트를 차지한다.이러한 종류의 지침은 비교적 흔하기 때문에, RISC 프로그램은 일반적으로 가변 길이 프로세서에서 동일한 프로그램보다 더 많은 메모리를 차지한다.[4]

RISC 개념이 처음 등장하던 1980년대에는 이런 점이 공통적인 불만 포인트였다.지침서가 더 많은 공간을 차지했기 때문에, 시스템은 기억에서 지시사항을 읽는 데 더 많은 시간을 소비해야 할 것이다.이러한 추가 액세스가 실제로 프로그램을 느리게 할 수 있다는 제안이 있었다.광범위한 벤치마킹은 결국 거의 모든 경우에 RISC가 더 빠르다는 것을 증명했고, 이러한 주장은 희미해졌다.그러나 성능과 관계없이 메모리 사용이 문제로 남는 경우가 있으며, 이는 소형 시스템과 임베디드 애플리케이션에 해당된다.2000년대 초반만 해도 D램 가격은 비용에 민감한 기기의 메모리가 제한적일 정도로 가격이 높았다.히타치SuperH 디자인을 개발한 것은 이 시장을 위한 것이었다.[5]

SH-1에서 SH-4까지의 초기 SuperH 설계에서는 지침서가 항상 16비트를 차지한다.결과 명령 집합에는 실제 한계가 있다. 예를 들어, 양식의 두 연산자 및 산술만 수행할 수 있다.A = A + B시대의 대부분의 프로세서가 3-operand 형식을 사용한 반면,A = B + C. 피연산자 1명을 제거함으로써 4비트를 명령에서 제거한다(16개의 레지스터가 있고, 4비트가 필요함). 비록 이것은 수학코드를 쓰기 위해 다소 복잡하게 만드는 비용이다.SuperH가 표적으로 삼은 시장들에게 이것은 쉽게 바꿀 수 있는 트레이드오프였다.16비트 형식의 중요한 이점은 명령 캐시가 주어진 양의 SRAM에 대해 두 배의 지침을 보유하고 있다는 것이다.이는 시스템 속도를 높일 수 있게 해주지만, 그 중 일부는 단일 3-operand 지침에 의해 수행될 수 있는 작업을 수행하는 데 필요한 추가 지침의 사용으로 완화될 수 있다.[6]

SH-5의 경우, 히타치는 32비트 명령 형식으로 이동했다.이전 설계와의 역호환성을 제공하기 위해 두 번째 지침 집합인 SHcompact를 포함했다.SHcompact는 원래 16비트 명령어를 내부 32비트 명령어에 단방향으로 매핑했다. SHcompact는 이전의 마이크로 코드 프로세서에서처럼 다중 명령을 수행하지 않았고, 동일한 명령의 더 작은 형식이었다.이것은 원래의 소형 포맷 프로그램을 새로운 SH-5에 쉽게 포팅할 수 있게 해주었고, 명령 디코더의 복잡성은 거의 증가시키지 않았다.[7]

ARM은 지침 설계의 측면에 관한 히타치의 특허를 다수 허가했고, 이를 이용하여 엄지손가락 사용 설명서를 구현했다.이름에 "T"가 포함된 ARM 프로세서는 원래 32비트 버전 외에 이 명령 집합을 포함했으며, 를 사용하여 즉시 32비트 모드에서 16비트 모드로 전환할 수 있었다.BX명령하다엄지손가락 모드에서는 ARM의 일반 16개 레지스터 중 상위 8개 레지스터만 표시되지만, 32비트 모드와 동일한 레지스터여서 해당 레지스터를 사용하여 엄지손가락과 일반 코드 간에 데이터를 전달할 수 있다.모든 썸 명령은 32비트 버전의 상대적인 것이므로 썸은 원래 ISA의 엄격한 하위 집합이었다.[8]ARM 모델과 SuperH의 한 가지 중요한 차이점은 Summ이 보이는 레지스터 파일을 8개로 줄임으로써 달성한 16비트 형식의 일부 3-operand 명령을 유지한다는 것이다. 따라서 레지스터를 선택하는 데는 3비트만 필요하다.[9]

또한 MIPS 아키텍처는 MIPS16e에 유사한 압축 세트를 추가했는데, 이는 엄지손가락과 매우 유사하다.MIPS 설계는 레지스터 0을 제로 레지스터로 사용하기 때문에 대신 16비트 모드의 레지스터 0과 1을 MIPS32 레지스터 16과 17에 매핑한다.이 시스템의 다른 대부분의 세부 사항은 엄지손가락과 비슷하다.[10]마찬가지로, 파워 ISA의 최신 버전(이전의 파워PC)에는 본질적으로 동일한 "VLE" 지침이 포함되어 있다.이것들은 파워에 대한 관심이 대부분 임베디드 시장을 겨냥한 프리스케일 반도체의 요청에 따라 추가되었다.[11]

현대 용법

2015년경부터 많은 프로세서가 64비트 포맷으로 이동했다.이들은 일반적으로 32비트 명령 형식을 유지하면서 내부 레지스터를 64비트 형식으로 확장했다.원래 정의에 따르면, 이것들은 기본 데이터 워드 크기보다 작기 때문에 압축된 지시사항이다.그러나 이 용어는 이 맥락에서 사용되지 않으며, 압축된 지침에 대한 언급은 반드시 16비트 버전을 가리킨다.[12]

참조

인용구

  1. ^ a b c 버츠 2004.
  2. ^ "Understanding ARM Architectures". informIT. 23 August 2010.
  3. ^ Bacon, Jason. "MIPS Instruction Code Formats". Computer Science 315 Lecture Notes.
  4. ^ 위버 & 맥키 2009.
  5. ^ "Effects of 16-bit instructions". Renesas.
  6. ^ SuperH 1996.
  7. ^ SH-5 CPU Core, Volume 1: Architecture (PDF). p. 8.
  8. ^ 레미우시 2004.
  9. ^ "Thumb instruction summary". ARM7TDMI Technical Reference Manual.
  10. ^ MIPS16e2 Application-Specific Extension Technical Reference Manual. MIPS. 26 April 2016.
  11. ^ Power ISA V2.07. IBM.
  12. ^ Alpha Architecture Handbook (PDF). DEC. October 1996. p. 1.4.

참고 문헌 목록