KR20030017982A - 브이.엘.아이.더블유. 프로세서에서 부분적으로파이프라인으로 연결된 명령을 동기시키는 방법 - Google Patents

브이.엘.아이.더블유. 프로세서에서 부분적으로파이프라인으로 연결된 명령을 동기시키는 방법 Download PDF

Info

Publication number
KR20030017982A
KR20030017982A KR1020027016180A KR20027016180A KR20030017982A KR 20030017982 A KR20030017982 A KR 20030017982A KR 1020027016180 A KR1020027016180 A KR 1020027016180A KR 20027016180 A KR20027016180 A KR 20027016180A KR 20030017982 A KR20030017982 A KR 20030017982A
Authority
KR
South Korea
Prior art keywords
pipeline
subcommand
instruction
subcommands
stage
Prior art date
Application number
KR1020027016180A
Other languages
English (en)
Inventor
트렘블레이마르크
옐루리샤라다
챈제프리멩와
Original Assignee
선 마이크로시스템즈 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 선 마이크로시스템즈 인코포레이티드 filed Critical 선 마이크로시스템즈 인코포레이티드
Publication of KR20030017982A publication Critical patent/KR20030017982A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

VLIW 프로세서는 VLIW 명령의 부명령들을 병렬로 실행하기 위한 다수의 파이프라인(410, 425)을 갖는다. 각각의 파이프라인은 적어도 1개의 실행 스테이지(412, 414)와 트랩 스테이지(422, 430)를 갖는다. 적어도 한 개의 파이프라인은 제 1 및 제 2 워드 길이를 갖는 피연산자들에 대해 연산을 수행할 수 있으며, 이때 제 2 워드 길이는 제 1 워드 길이보다 길고, 제 1 워드 길이는 파이프라인(410, 425)의 데이터 경로 폭과 동일하다. 제 2 워드 길이를 갖는 피연산자들에 대한 연산의 실행은 파이프라인의 적어도 1개의 실행 스테이지(412, 414)에서 다수의 사이클을 필요로 한다. 명령 디코더(404)는, VLIW 명령의 시퀀스의 부명령들을 파이프라인 부명령으로 디코딩하고, 이들을 제 1 및 제 2 파이프라인(410, 425)에 배정하며, VLIW 명령의 제 1 부명령이 제 2 워드 길이를 갖는 피연산자에 대해 동작할 때, 명령 디코더(404)는 적어도 1개의 헬퍼 부명령을 제 1 파이프라인(410)에 끼워넣는다. 또한, 명령 디코더는, 동일한 VLIW 명령의 제 1 부명령과 관련되고 제 2 파이프라인(425)에 배정되어 제 2 파이프라인(425)의 트랩 스테이지(430)에 도달하는 정보와 동기되어, 제 1 부명령과 관련된 정보가 제 1 파이프라인(410)의 트랩 스테이지(422)에 들어가도록 보장하는 것이 필요할 때, 제 2 파이프라인(425) 내부에 비연산 헬퍼 부명령들을 끼워넣는다. 이들 비연산 헬퍼 부명령들은, 제 1 부명령이 제 2 워드 길이를 갖는 피연산자에 대해 동작하고, 제 2 부명령이 제 1 워드 길이를 갖는 피연산자에 대해 동작하더라도, 트랩 스테이지(422, 425)에 정보가 동기를 이루어 도달하도록 유지한다.

Description

브이.엘.아이.더블유. 프로세서에서 부분적으로 파이프라인으로 연결된 명령을 동기시키는 방법{SYNCHRONIZING PARTIALLY PIPELINED INSTRUCTIONS IN VLIW PROCESSORS}
오늘날 제조된 모든 고성능 장치를 포함하는 대부분의 장치들은 적어도 어느 정도는 파이프라인으로 연결된다. 파이프라인은 일반적으로 다단계의 실행을 제공하는 하드웨어 실행장치로서, 각각의 실행 스테이지는 1개 이상의 클록 사이클을 점유한다. 더구나, 다수의 실행 스테이지들의 서로 다른 스테이지에서 그 각각이 동시에 실행되는 다수의 명령이 존재할 수 있다.
현재의 컴퓨팅 장치들은 종종 2개 이상의 실행장치 파이프라인들을 갖는다. 예를 들면, 프로세서는 정수 부명령을 실행하는 정수 실행 파이프라인과 부동소수점 부명령을 실행하는 부동소수점 실행 파이프라인을 가질 수 있다. 때때로, 장치의 정수 실행 파이프라인과 부동소수점 실행 파이프라인이 한 개 이상의 스테이지의 부명령을 동시에 실행하는 것도 가능하다.
통상적인 실행 파이프라인에서 자주 발견되는 마지막 스테이지는 "트랩(trap)" 스테이지이다. 트랩 스테이지는, (IEEE 754 사양서에 있는 트랩 조건 모두를 포함하는) 프로세서 예외가 발생하는지, 또는 현재 실행되는 명령 시퀀스의 실행을 일시중지하기 위해 인터럽트가 발생하는지 여부를 결정하기 위한 장소이다.
트랩이나 인터럽트가 발생하였을 때에는, 트랩이나 인터럽트가 발생하였을 때에 프로세서의 상태를 판정하는 것이 종종 필요하다. 트랩들이 쉽게 원인 규명되고 가능한 정정이 수행되며, 실행이 재개될 수 있도록, 이와 같은 트랩들은 정확히 처리하는 것이 바람직하다. 트랩들을 정확히 처리하려면, 현재의 명령을 실행하는 모든 파이프라인들이 트랩이 필요한지 여부를 결정할 수 있는 트랩 스테이지에 도달하기 전에, 이전의 상태가 현재 또는 나중의 명령에 의해 오버라이트되지 않도록 하는 것이 바람직하다.
대부분의 기술자들은, 명령들이 디코딩되고, 피연산자들이 페치(fetch)되며, 이들 피연산자들이 병렬로 고속으로 파이프라인들에 공급될 수 있다면, 병렬로 실행할 수 있는 다수의 파이프라인을 갖는 프로세서가 더 적은 파이프라인들을 갖는 프로세서보다 더 우수한 전체적인 성능을 제공할 수 있다고 생각하고 있다.
그러나, 불행하게도, 수많은 프로세서들은 고유의 병렬처리를 갖지 않는 이진 명령 언어를 처리한다. 이들 이진 언어를 실행하는 프로세서들이 명령을 병렬로 실행하도록 하기 위해서는, 프로세서들이 그들의 명령 시퀀스를 파싱하여, 어떤 명령이 병렬로 실행될 수 있는지를 파악해야만 하는데, 이것은 복잡한 작업이다. 더구나, 이와 같은 잠정적인 병렬처리를 위한 파싱은 실행시간에 수행되므로, 매우 복잡한 하드웨어에 의해 신속하게 행해져야만 한다.
VLIW 프로세서들은 보통 명시적인 병렬처리를 갖는 이진 명령 언어를 실행하며, 이때 각각의 명령은 병렬로의 동시 실행을 위한 부명령들을 별도의 파이프라인들에 포함시킬 수 있다. 각각의 부명령이 명령어에 있어서 비트 필드를 필요로 하기 때문에, 이것은 일반적으로 종래의 프로세서에서 필요한 것보다 이진 명령어당 더 많은 비트들을 필요로 하므로, 이들 명령어들은 매우 길이가 길어져, 매우 긴 명령어라는 용어를 갖게 되었다.
VLIW 프로세서들은 잠정적인 병렬처리에 대한 파싱과 실행을 분리하는 것을 허용하므로, 이러한 파싱은 별도의 명령 번역부에서 발생되거나 컴파일 시간에 수행될 수 있다. 컴파일 시간에서의 잠정적인 병렬처리에 대한 파싱은, 동일한 높은 성능을 위해 필요한 다른 것보다 더 간단한 하드웨어의 사용을 허용할 수 있다는 이점을 갖는다.
많은 프로세서들은 모든 명령들을 정확히 동일한 수의 클록 사이클로 실행하지 않는 파이프라인들을 갖는다. 나눗셈은 일반적으로 곱셈보다 더 많은 클록 사이클을 필요로 한다는 것이 알려져 있다. 더구나, 정수 연산이 부동소수점 연산에 비해 실행하기가 훨씬 간단하므로, 부동소수점 파이프라인들은 가산을 수행하는데 정수 파이프라인들보다 훨씬 더 많은 클록 사이클을 필요로 한다. 명령을 실행하기 위해 파이프라인이 치하는 클록 사이클의 수는 파이프라인의 대기시간(latency)이다. 정수 파이프라인들이 동일한 장치의 부동소수점 파이프라인과 동일한 대기시간을 갖도록 추가적인 스테이지들이 정수 파이프라인들에 추가되고, 모든 명령들이 동일한 대기시간을 갖도록 추가적인 스테이지들이 부동소수점 파이프라인에 추가될 수 있지만, 이것은 비효율적인 것으로 밝혀졌다. 부명령이 다른 파이프라인이 실행을 완료하는 것을 기다려야 하는 종속관계가 필요하지 않으면, 한 파이프라인에서 실행되는 부명령들이 가능한한 빨리 완료되는 것이 바람직하다.
VLIW 프로세서들을 포함하는 수많은 현대의 프로세서들은 32 비트 데이터의 실행을 위해 최적화되어 있다.
또한, IEEE-754 부동소수점 사양서에 기재된 것과 같은 배정도 부동소수점 명령 등과 같은 64 비트의 피연산자 명령들은 32 비트 실행 하드웨어와 상당히 닮은 하드웨어에서 실행될 수 있지만, 32 비트 데이터에 대해 필요한 것보다 많은 클록 사이클들이 보통 64 비트 데이터에 필요하다는 것도 알려져 있다. 예를 들면, 64 비트 곱셈은 어레이 승산기를 4번 통과시킴으로써 정수 파이프라인의 32 비트 어레이 승산기 스테이지에서 실행될 수 있는 한편, 32 비트 곱셈은 단지 한번의 어레이 승산기의 통과를 필요로 한다.
파이프라인에서의 64 비트의 명령의 실행은, 기본 명령을 파이프라인 내부로 통과시킨 후, 헬퍼(helper) 명령을 통과시킴으로써 제어될 수 있다는 것이 알려져 있다. 기본 명령은, 예를 들면, 64 비트 가산의 하위 절반부를 처리하고, 가산으로부터 얻어진 자리올림(carry) 출력을 기억할 수 있다. 그후, 파이프라인에 대한 다음의 헬퍼 명령은 64 비트 가산의 상위 절반부를 처리하고, 가산 중에 기억된 자리올림을 끼워넣을 수 있다.
VLIW 프로세서들은 다수의, 종종 서로 다른 파이프라인에서 명령의 부명령들의 병렬 실행을 제공한다. 이들 부명령들은, 특히 일부가 32 비트이고 일부가 64 비트이며 파이프라인들이 32 비트 데이터에 대해 최적화된 경우에는, 약간 다른 시간에 완료하는 경향이 있다. 더욱 심하게는, 일정한 파이프라인이 일부 명령들을 다른 것보다 신속하게 완료할 수도 있다. 따라서, 일정한 파이프라인이 명령마다 변하는 대기시간을 가질 수 있다.
트랩들을 정확하게 처리하기 위해서는, 특정한 VLIW 명령들의 모든 부명령들이 파이프라인의 트랩 스테이지에 동시에 도달하는 것이 바람직하다. 효율적인 고속 동작을 유지하기 위해서는, 어떤 부명령도 동일한 명령의 다른 부명령의 실제적인 대기시간보다 길게 대기하지 않는 것이 바람직하다. 따라서, 먼저 그들의 명령의 부명령을 완료하는 파이프라인들을 지연(stall)시키거나, 이들 파이프라인에 제어된 최소의 지연값을 도입하여, 이들이 마지막에 그들의 명령의 부명령을 완료하는 파이프라인들과 동시에 트랩 스테이지에 도달하도록 하는 것이 바람직하다.
(발명의 요약)
먼저 명령의 부명령들을 완료한 VLIW 프로세서들을 지연시켜, 이들 더 빠른 파이프라인들이 마지막에 명령의 부명령들을 완료하는 더 느린 파이프라인 등과 동시에 트랩 스테이지에 도달하도록 하기 위한 하드웨어가 설명된다. 이와 같은 하드웨어는, 지연(stall) 헬퍼 명령들을 발생한 후, 지연을 필요로 하는 파이프라인 스테이지들에 끼워넣어, 각각의 파이프라인의 유효한 결과값들이 더 느리게 명령의 부명령들을 실행하는 파이프라인들과 동시에 트랩 스테이지에 도달하도록 하기 위한 명령의 디코딩에 의존한다.
본 발명의 상기한 발명내용은 첨부도면에 도시된 본 발명의 이하의 바람직한 실시예로부터 더욱 더 명확해질 것이다.
본 발명은, 매우 긴 명령어(very-long instruction word: VLIW) 프로세서 아키텍처에 관한 것이다. 특히, 본 발명은 VLIW 장치의 파이프라인들에서의 부명령의 동기화에 관한 것이다.
도 1은 VLIW 프로세서를 갖는 컴퓨터 시스템의 블록도이고,
도 2는 정확한 트랩들을 실시하지 않는 다수의 파이프라인들을 갖는 종래의 VLIW 프로세서의 블록도이며,
도 3은 지연이 끼워넣어지지 않는 경우에, 부명령들이 서로 다른 시간에 트랩 스테이지에 도달하게 되는 상태를 나타낸, VLIW 프로세서의 파이프라인에서의 데이터 흐름의 타이밍도이고,
도 4는 본 발명을 구체화한 VLIW 프로세서의 블록도이며,
도 5는 명령의 실행 후에 다수의 파이프라인들의 트랩 스테이지들을 정렬하는데 필요한 지연 스테이지들을 나타낸, 본 발명의 VLIW 프로세서의 바람직한 실시예의 파이프라인들에서의 데이터 흐름의 타이밍도이고,
도 6은 명령의 실행중에 다수의 파이프라인들의 트랩 스테이지들을 정렬하는데 필요한 지연 상태를 나타낸, 본 발명의 VLIW 프로세서의 파이프라인들에서의 데이터 흐름의 타이밍도이다.
컴퓨터 시스템은, 내부 1차 레벨 캐시를 갖는 적어도 1개의 프로세서(100)를 갖는다(도 1). 또한, 이 시스템은 2차 레벨 캐시(101)를 가지며, 3차 레벨 캐시(102)를 가질 수 있지만, 반드시 가질 필요는 없다. 그 자신의 2차 레벨 및 임의의 3차 레벨 캐시(미도시)를 갖는 추가적인 프로세서(105)가 존재할 수 있지만, 반드시 존재할 필요는 없다. 캐시로부터 충족되지 않는 프로세서(100)에 의한 참조값들은, 고속 로컬 버스(106)를 통해 주 메모리(107)로 향하거나, 버스 브리지(108)를 통해, 바람직하게는 PCI 버스인 시스템 버스(109)로 향한다.
PCI에는, 1개 이상의 저장 서브시스템(116)에 접속하기 위한, 통상적으로는 울트라 와이드 SCSI 형태를 갖는 저장장치 제어기(115)가 부착된다. 저장 서브시스템(116)은 보통 CD 판독장치 및/또는 기록장치와 디스크 드라이브를 포함하며, 다른 주변장치와 같이, RAID 저장 시스템 및 테이프 드라이브 등의 다수의 디스크 드라이브들이 사용될 수 있다. 또한, 다수의 컴퓨터 시스템들은, 비디오 디스플레이 서브시스템(118), 네트워크 인터페이스(120), USB(universal serial bus) 인터페이스(122)와, 키보드, 마우스, 직렬, 프린터 및 플로피 디스크 포트들(124)을 갖는다.
프로세서(100)의 1차 레벨 캐시는 별개의 명령 캐시(126)와 데이터 캐시(128)로 구현될 수 있으며, 이와 달리 이들은 한 개의 빠른 결합된 캐시로 일체화될 수도 있다.
컴퓨터 시스템의 프로세서(100)는 VLIW 프로세서일 수 있다. VLIW 프로세서에서는, 명령 캐시(126)로부터의 명령들이 명령 정렬기(aligner)(200)(도 2)에 의해 정렬되어, 명령 버퍼(202)에 버퍼링된다. 그후, 명령들은 명령 디코더 및 디스패처(dispatcher)(204)에 의해 처리되어, 프로세서의 다양한 실행 파이프라인(206, 208, 210)으로 배정된다. 간략을 기하기 위해, 도 2에는 장치의 3개의 파이프라인을 도시하였지만, 이 장치는 3개보다 많은 파이프라인을 가질 수도 있다. 도시된 파이프라인들은, 레지스터 파일(218)에 접속되어 피연산자들을 페치할 수 있는 피연산자 페치 스테이지들(212, 214, 216)과, 레지스터 파일(218)에 접속되어 이 레지스터 파일에 결과값을 기억하는 피연산자 기억 스테이지들(220, 222, 224)을 갖는다. 또한, 프로세서는, 데이터 캐시(128)와 레지스터 파일(218) 사이에서 전달하기 위한 로드(load)/기억부(226)를 갖는다.
VLIW 명령이 32 비트 감산 부명령을 한 개의 파이프라인에 배정하고, 64 비트의 가산 부명령을 다른 파이프라인에 배정한다고 가정하자. 더구나, 본 발명의 바람직한 실시예에서와 같이, 64 비트의 연산이 32 비트의 부연산(sub-operation)의 시퀀스의 실행을 통해 수행된다고 가정하자. 도 3에 도시된 것과 같이, 64 비트의 부명령은, 그것이 실행하는 대상인 파이프라인의 페치 스테이지에서 한 사이클을 취하며 피연산자를 페치하기 위한 한쌍의 페치 연산(300)과, 한쌍의 연산 사이틀(301)을 필요로 하는 한편, 32 비트의 피연산자는 파이프라인의 디스패치 폭과 일치하기 때문에, 32 비트의 부명령은 피연산자를 페치하고 피연산자에 대해 연산을 수행(303)하는데 더 작은 사이클을 필요로 하게 된다. 이때, 트랩 스테이지는 64 비트 연산이 완료될 때까지 시작할 수 없는 것으로 가정하였으므로, 트랩 스테이지에는 가산의 제 2의 헬퍼 사이클(302) 후까지 들어갈 수 없으며, 이것을 보장하기 위해 파이프라인의 지연 스테이지가 사용된다. 지연 스테이지가 더 길이가 긴 피연산자, 중간 및 최종 결과를 위해 재순환(recycle) 버퍼 내부에 적절한 기억장치를 갖는다고 가정하면, 지연 스테이지(307)는 파이프라인의 한 개의 스테이지 내부에 연산의 재순환의 형태를 가질 수 있다. 따라서, 32 비트 부명령 내부에 지연이 끼워넣어지지 않으면, 32 비트의 부명령이 그것의 트랩 사이틀(306)에 도달한 후에, 64 비트 부명령이 그것의 트랩 사이틀(305)에 도달하게 된다.
본 발명에 따른 프로세서에서는, 명령이 명령 캐시(126)로부터 명령 정렬기(400)(도 4) 및 명령 버퍼(402)로 수신되어, 명령 디코더 및 디스패처(404)에 의해 처리된다. 명령 디코더 및 디스패처(404)의 일부일 수 있는 헬퍼 부명령 삽입기(406)는, 64 비트의 적절한 실행에 필요한 헬퍼 부명령 또는 추가적인 실행 시간을 필요로 하는 다른 부명령을 삽입한다.
64 비트 가산이 32 비트 데이터 경로에 기반을 두고 있는 프로세서의 제 1 파이프라인(410)에서 실행되는 경우를 고려하자. 따라서, 파이프라인의 페치 스테이지(412)는 사이클 500(도 5)에 피연산자들의 하위 절반부를 페치하고, 페치 스테이지(412)는 다음의 사이클(501)에 피연산자들의 상위 절반부를 페치하는 한편, 연산 스테이지(414)는 피연산자들(502)의 하위 절반에 대해 가산을 실행한다. 다음 사이클에서는, 헬퍼 부명령이 연산 스테이지(414)에서 실행(504)되고 있는 동안, 피연산자들의 하위 절반부의 결과값이 연산 스테이지의 재순환 버퍼(416) 또는 파이프라인의 지연 스테이지에 유지(506)된다. 다음의 사이클(510)에서는, 트랩 상태가 해소되고, 다음 사이클 512 및 514에서는, 연산의 결과값들이 파이프라인의 기억 스테이지(418)에 의해 레지스터 파일(420) 내부에 기억된다.
트랩 스테이지 전에, 동일한 VLIW 명령어로부터 32 비트의 부명령의 타이밍을 초과하여 1 사이클의 연산을 필요로 하는 64 비트 부명령이 처리될 때, 헬퍼 부명령 삽입기(406)는, 제 2 파이프라인(425)으로의 명령 스트림 흐름 내부에 NOP, 즉 비연산(nonoperation) 헬퍼 부명령을 삽입하며, 이 제 2 파이프라인 내부에서 32 비트 부명령이 실행되고, 부명령을 지연값을 갖는 것으로 표시한다. 헬퍼 지연 부명령으로도 알려진 각각의 NOP 헬퍼 부명령은, 부명령이 파이프라인에 배정된 후에 삽입되어, 관련된 파이프라인의 트랩 스테이지 이전의 스테이지에 있는 데이터가 1 사이클 동안 변경되지 않은 상태로 유지되도록 하거나 재순환되도록 한다. 이와 같은 구성은, 트랩 스테이지 앞의 스테이지에 있는 데이터가 헬퍼 지연 부명령의 모든 시퀀스의 최종부분이 완료될 때까지 변경되지 않은 상태가 되도록 한다. 이와 같은 NOP 헬퍼 부명령은, 제 1 파이프라인(410)이 제 2 파이프라인(425)에 대해 의도된 것과 유사한 타이밍을 갖는 32 비트 부명령을 수신한 경우에는 끼워넣어지지 않는다. 따라서, 이 32 비트 부명령은 페치 스테이지에서 제 1 사이클(530)에서 페치와 제 2 사이클(532)에서 NOP를 사용하여 실행된다. 제 2 사이클에서는, 연산 스테이지가 연산(534)을 실행하고, 데 3 사이클에서, 연산 스테이지는 NOP(536)를 실행한다. 부명령이 지연값을 갖는 것으로 표시되기 때문에, 연산의 결과값이 유지되어(538), 이들 결과값이, 그것의 트랩 스테이지(422)에 도달하는 제 1 파이프라인(410)에서 실행되는 64 비트의 부명령의 결과와 동시에, 트랩 사이클(540)또는 제 2 파이프라인(425)의 트랩 스테이지(430)로 들어간다. 이에 따라, 길이가 긴 64 비트 연산과 길이가 짧은 32 비트 연산의 결과값들이 트랩 스테이지에서 동기가 맞추어진다.
또 다른 실시예에서는, 트랩 스테이지 이전에, 동일한 VLIW 명령어로부터의 32 비트 부명령의 타이밍을 초과하여 1 사이클의 연산을 필요로 하는 64 비트 부명령이 처리될 때, 헬퍼 부명령 삽입기(406)는, 32 비트 부명령이 실행되는 제 2 파이프라인으로의 명령 스트림 흐름에 NOP, 즉 비연산 헬퍼 부명령을 삽입한다. 도 6에 도시된 것과 같이, 관련된 32 비트 명령의 앞에 헬퍼 지연 부명령으로도 알려진 각각의 NOP 헬퍼 부명령이 배정된다. 제 1 파이프라인(410)이 제 2 파이프라인(425)에 대해 의도된 것과 유사한 타이밍을 갖는 32 비트 부명령을 수신하면, 이와 같은 NOP 헬퍼 부명령이 끼워넣어지지 않는다. 본 실시예에서의 64 비트 부명령의 실행은 도 5에 도시된 것과 같다.
따라서, 32 비트 부명령은 페치 스테이지에서 제 2 사이클(63))에 있는 페치와 제 1 사이클(632)에 있는 NOP를 사용하여 실행된다. 제 3 사이클에서는 연산 스테이지가 연산(534)을 실행하고, 제 2 사이클에서는 연산 스테이지가 NOP(536)를 수행한다. 따라서, 부명령과 관련된 데이터가, 512에서 그것의 트랩 스테이지(422)에 도달하는 제 1 파이프라인(410)에서 실행되는 64 비트 부명령의 결과값과 동시에, 제 2 파이프라인(425)의 트랩 사이클(640) 또는 트랩 스테이지(430)로 들어간다. 따라서, 길이가 긴 64 비트의 연산과 길이가 짧은 32 비트 연산의 결과값들이 트랩 스테이지에서 동기가 맞추어진다.
다수의 NOP 헬퍼 부명령들이 파이프라인 내부로 들어가, 트랩 스테이지에서 64 비트 부명령의 결과값들이 32 비트의 부명령의 결과값들과 동기화되도록 보장해야만 하는 부명령들이 존재한다. 바람직한 실시예에서는, 54 비트의 곱셈 연산이 32 비트의 어레이 승산기에서 수행된다. 32 비트 승산기 내부에서 한쌍의 64 비트 피연산자를 곱하여, 128 비트의 결과를 발생하는 것은 4회의 승산기의 통과를 필요로 한다. 따라서, VLIW 명령어가 디코딩되어, 64 비트 승산 부명령을 수신하는 파이프라인에 대한 명령 스트림에 3개의 헬퍼 부명령을 삽입한다. 이와 같은 승산 부명령을 갖는 VLIW 명령어는 디코딩되어, 64 비트 가산이 실행될 때 필요한 연산 대신에, 각각의 동시에 실행되는 32 비트 가산 또는 감산 연산 다음에 3개의 NOP 헬퍼 부명령을 끼워넣는다. 마찬가지로, 임의의 동시에 실행되는 64 비트 가산은 2개의 NOP 헬퍼 부명령을 수신하여, 그것의 결과값들이 실행 스테이지의 재순환 버퍼들 내부에 유지되거나, 64 비트의 곱셈 부명령의 결과값들과 동시에 트랩 스테이지로 들어간다.
본 발명을 그것의 바람직한 실시예를 참조하여 특별히 도시하여 설명하였지만, 본 발명의 사상 및 범주를 벗어나지 않으면서 구성과 상세내용에 있어서의 다양한 다른 변화가 이루어질 수 있다는 것은 본 발명이 속한 기술분야의 당업자에게 있어서 자명하다. 특히, 파이프라인 스테이지의 구는 전술한 것과 다를 수 있으며, 가산 및 감산 이외의 다른 연산이 실행될 수 있다는 것은 자명하다. 또한, 본 발명은, 본 명세서에 개시된 32 비트 하드웨어 상에서 동작하는 32 비트 및 64 비트 길이 이외의 다른 길이를 갖는 워드의 데이터를 처리하는 장치에 적용가능하며, 파이프라인이 하드웨어의 폭보다 더 길이가 긴 데이터 워드에 대해 실행될 수 있는 다수의 파이프라인들을 갖는 장치에도 적용될 수 있다는 것은 자명하다.
또한, 32 비트 부명령 뒤에 오르는 것으로 본 명세서에서 설명한 비연산 헬퍼 부명령은 이 대신에 32 비트 부명령의 앞에 끼워넣어져, 32 비트 부명령의 결과값들이 64 비트 부명령의 결과값들과 동시에 트랩 스테이지에 도달할 수 있다는 것은 자명하다.

Claims (9)

  1. 부명령들을 실행하고, 적어도 1개의 실행 스테이지와 트랩 스테이지를 갖는 제 1 파이프라인과,
    부명령들을 실행하며, 적어도 1개의 실행 스테이지와 트랩 스테이지를 가지며, 제 1 파이프라인과 병렬로 동작가능하되, 제 1 파이프라인은 제 1 워드 길이와 제 2 워드 길이를 갖는 피연산자에 대해 연산가능하고, 제 2 워드 길이는 제 1 워드 길이보다 크며, 제 1 워드 길이는 제 1 파이프라인의 데이터 경로 폭과 동일하고, 제 2 워드 길이를 갖는 피연산자에 대한 연산의 실행이 제 1 파이프라인의 적어도 1개의 실행 스테이지에서 다수의 사이클을 필요로 하는, 제 2 파이프라인과,
    VLIW 명령들의 시퀀스의 부명령들을 파이프라인 부명령들로 디코딩하고, 이들을 제 1 및 제 2 파이프라인에 배정하며, VLIW 명령들의 제 1 부명령이 제 2 워드 길이를 갖는 피연산자에 대한 연산 명령이고 제 1 파이프라인에 배정되었을 때, 적어도 1개의 헬퍼 부명령을 제 1 파이프라인으로 끼워넣는 명령 디코더를 구비하고,
    상기 명령 디코더는, 제 1 부명령과 관련된 정보가 동일한 VLIW 명령의 제 2 부명령과 관련되며 제 2 파이프라인에 배정되어 제 2 파이프라인의 트랩 스테이지에 도달하는 정보와 동시에, 제 1 파이프라인의 트랩 스테이지에 들어가도록 보장할 필요가 있을 때, 제 2 파이프라인 내부에 비연산 헬퍼 부명령들을 끼워넣을 수 있으며,
    비연산 헬퍼 부명령의 끼워넣음은 제 1 부명령과 제 2 부명령에 좌우되는 것을 특징으로 하는 VLIW 프로세서.
  2. 제 1항에 있어서,
    제 1 파이프라인의 트랩 스테이지에 들어가는 제 1 부명령과 관련된 정보는, 제 1 파이프라인에서의 제 1 파이프라인 부명령과 헬퍼 부명령의 실행에 의해 생성된 제 2 워드 길이를 갖는 피연산자에 대해 실행된 산술 연산의 결과값이고, 제 2 파이프라인의 트랩 스테이지에 들어가는 제 2 부명령과 관련된 정보는 제 1 워드 길이를 갖는 피연산자에 대해 실행되는 산술 연산의 결과값인 것을 특징으로 하는 VLIW 프로세서.
  3. 제 1항에 있어서,
    제 1 워드 길이는 32 비트이고 제 2 워드 길이는 64 비트인 것을 특징으로 하는 VLIW 프로세서.
  4. 프로세서의 복수의 파이프라인들 내부에서의 데이터의 도달을 복수의 파이프라인들의 트랩 스테이지들에 동기화시키는 방법에 있어서,
    프로세서의 명령을, 프로세서의 파이프라인 상에서 실행을 위해 각각 의도된 적어도 1개의 부명령으로 디코딩하여, 프로세서의 가능한 명령들의 집합 중에서 적어도 일부가 복수의 부명령으로 디코딩되는 명령들이 되도록 하는 단계와,
    적어도 1개의 부명령을 프로세서의 파이프라인들에 배정하는 단계와,
    각각의 부명령과 관련되고, 부명령을 수신하는 각각의 파이프라인 내부로 끼워넣기 위해 음이 아닌 정수의 집합으로 구성된 그룹으로부터 선택되며, 일정한 명령으로부터 디코딩된 각각의 부명령의 실행과 관련된 정보가 동일한 명령으로부터 디코딩된 다른 부명령의 실행과 관련된 정보와 동시에 이 부명령이 배정되는 파이프라인의 트랩 스테이지를 실행하도록 결정되는 헬퍼 지연 부명령들의 수를 결정하는 단계와,
    헬퍼 지연 부명령들의 결정된 수를 명령의 부명령이 배정되는 각각의 파이프라인 내부에 끼워넣는 단계를 포함하는 것을 특징으로 하는 동기화방법.
  5. 제 4항에 있어서,
    헬퍼 지연 부명령의 수의 결정단계는, 명령과 명령으로부터 디코딩된 부명령들의 집합으로 구성된 그룹으로부터 선택된 비트 패턴을 디코딩하여 수행되는 것을 특징으로 하는 동기화방법.
  6. 제 5항에 있어서,
    파이프라인들은 일부의 양의 정수 N에 대해 폭 N 비트 및 폭 N 비트의 2배를 갖는 데이터에 대해 부명령들을 실행할 수 있으며, 일정한 연산에 대해, 폭 N 비트의 2배를 갖는 데이터에 대한 트랩 스테이지에 대한 실행은 폭 N 비트의 데이터에 대한 트랩 스테이지에 대한 실행보다 M개의 많은 클록 사이클을 취하며, 이때 M은 제로값보다 큰 양의 정수인 것을 특징으로 하는 동기화방법.
  7. 제 6항에 있어서,
    제 1 부명령은 폭 n 비트의 데이터에 대해 실행되고, 제 2 부명령은 폭 N 비트의 2배를 갖는 데이터에 대해 실행되며, 제 1 명령이 배정되는 파이프라인에 끼워넣어지는 헬퍼 부명령의 수가 M인 것을 특징으로 하는 동기화방법.
  8. 제 5항에 있어서,
    헬퍼 지연 부명령들은, 이 부명령이 파이프라인들 중에서 적어도 한 개로 배정되어 실행되기 전에, 이 파이프라인 내부에 끼워넣어지는 것을 특징으로 하는 동기화방법.
  9. 제 5항에 있어서,
    헬퍼 지연 부명령들은, 이 부명령이 파이프라인들 중에서 적어도 한 개로 배정되어 실행된 후에, 이 파이프라인 내부에 끼워넣어지는 것을 특징으로 하는 동기화방법.
KR1020027016180A 2000-06-02 2001-05-30 브이.엘.아이.더블유. 프로세서에서 부분적으로파이프라인으로 연결된 명령을 동기시키는 방법 KR20030017982A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US58619000A 2000-06-02 2000-06-02
US09/586,190 2000-06-02

Publications (1)

Publication Number Publication Date
KR20030017982A true KR20030017982A (ko) 2003-03-04

Family

ID=24344684

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020027016180A KR20030017982A (ko) 2000-06-02 2001-05-30 브이.엘.아이.더블유. 프로세서에서 부분적으로파이프라인으로 연결된 명령을 동기시키는 방법

Country Status (5)

Country Link
EP (1) EP1290548A2 (ko)
JP (1) JP2003536132A (ko)
KR (1) KR20030017982A (ko)
AU (1) AU2001264560A1 (ko)
WO (1) WO2001095101A2 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6934951B2 (en) * 2002-01-17 2005-08-23 Intel Corporation Parallel processor with functional pipeline providing programming engines by supporting multiple contexts and critical section
AU2002304400A1 (en) * 2002-02-26 2003-09-09 Eisei Matsumura Printer controller
JP5395383B2 (ja) * 2008-08-21 2014-01-22 株式会社東芝 パイプライン演算プロセッサを備える制御システム
US11204768B2 (en) 2019-11-06 2021-12-21 Onnivation Llc Instruction length based parallel instruction demarcator

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0779577B1 (en) * 1993-10-18 2002-05-22 VIA-Cyrix, Inc. Micoprocessor pipe control and register translation
US6128721A (en) * 1993-11-17 2000-10-03 Sun Microsystems, Inc. Temporary pipeline register file for a superpipelined superscalar processor
TW448403B (en) * 1995-03-03 2001-08-01 Matsushita Electric Ind Co Ltd Pipeline data processing device and method for executing multiple data processing data dependent relationship
US6279100B1 (en) * 1998-12-03 2001-08-21 Sun Microsystems, Inc. Local stall control method and structure in a microprocessor

Also Published As

Publication number Publication date
EP1290548A2 (en) 2003-03-12
WO2001095101A3 (en) 2002-03-21
WO2001095101A2 (en) 2001-12-13
AU2001264560A1 (en) 2001-12-17
JP2003536132A (ja) 2003-12-02

Similar Documents

Publication Publication Date Title
US10776127B2 (en) Reducing data hazards in pipelined processors to provide high processor utilization
US7458069B2 (en) System and method for fusing instructions
EP0888584B1 (en) Central processing unit having an x86 and dsp core and including a dsp function decoder which maps x86 instructions to dsp instructions
JP4295804B2 (ja) プロセッサ、コンパイル装置及びコンパイルプログラムを記録している記録媒体
US8200987B2 (en) Dynamic object-level code translation for improved performance of a computer processor
EP1233338A2 (en) Method for transforming predicated execution to static speculation
US5826074A (en) Extenstion of 32-bit architecture for 64-bit addressing with shared super-page register
TWI505192B (zh) 在執行時間擷取資料平行處理的平行執行單元
US20100058034A1 (en) Creating register dependencies to model hazardous memory dependencies
EP0947917A2 (en) Method and apparatus for handling imprecise exceptions
US6505345B1 (en) Optimization of initialization of parallel compare predicates in a computer system
US6799266B1 (en) Methods and apparatus for reducing the size of code with an exposed pipeline by encoding NOP operations as instruction operands
US6516462B1 (en) Cache miss saving for speculation load operation
US5469552A (en) Pipelined data processor having combined operand fetch and execution stage to reduce number of pipeline stages and penalty associated with branch instructions
US6871343B1 (en) Central processing apparatus and a compile method
US6539471B2 (en) Method and apparatus for pre-processing instructions for a processor
KR20030017982A (ko) 브이.엘.아이.더블유. 프로세서에서 부분적으로파이프라인으로 연결된 명령을 동기시키는 방법
Heath Architectural considerations for a M88000 superscalar RISC processor
US6718458B2 (en) Method and apparatus for performing addressing operations in a superscalar, superpipelined processor
JP3547562B2 (ja) マイクロプロセッサ
JP2806093B2 (ja) ロード・ストア処理装置
EP0853786B1 (en) Out-of-order processing with operation bumping to reduce pipeline delay
Siemers et al. The> S< puter: Introducing a novel concept for dispatching instructions using reconfigurable hardware
JPH04353923A (ja) 電子計算機の並列命令実行方式
Shah et al. SPSIM: SuperScalar Processor SIMulater CS305 Project Report

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid