KR102271986B1 - 다수의 마이크로 오퍼레이션에 대응한 복합 프로그램 명령어의 디코딩 - Google Patents

다수의 마이크로 오퍼레이션에 대응한 복합 프로그램 명령어의 디코딩 Download PDF

Info

Publication number
KR102271986B1
KR102271986B1 KR1020140127455A KR20140127455A KR102271986B1 KR 102271986 B1 KR102271986 B1 KR 102271986B1 KR 1020140127455 A KR1020140127455 A KR 1020140127455A KR 20140127455 A KR20140127455 A KR 20140127455A KR 102271986 B1 KR102271986 B1 KR 102271986B1
Authority
KR
South Korea
Prior art keywords
micro
instruction
operations
fetch
program
Prior art date
Application number
KR1020140127455A
Other languages
English (en)
Other versions
KR20150041740A (ko
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 KR20150041740A publication Critical patent/KR20150041740A/ko
Application granted granted Critical
Publication of KR102271986B1 publication Critical patent/KR102271986B1/ko

Links

Images

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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/22Microcontrol or microprogram arrangements
    • G06F9/26Address formation of the next micro-instruction ; Microprogram storage or retrieval arrangements
    • G06F9/262Arrangements for next microinstruction selection
    • 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/3017Runtime instruction translation, e.g. macros
    • 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/321Program or instruction counter, e.g. incrementing
    • 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, look ahead
    • G06F9/3818Decoding for concurrent execution

Abstract

데이터 처리장치(2)는, 처리하는 다수의 병렬 스레드를 처리할 수 있는 처리 회로소자(4)를 갖는다. 공유 명령어 디코더(30)는, 상기 처리 회로소자(4)에서 처리할 마이크로 오퍼레이션들을 발생하기 위해 프로그램 명령어들을 디코딩한다. 그 명령어들은, 다수의 마이크로 오퍼레이션들을 갖는 적어도 하나의 복합 명령어로 이루어진다. 다수의 페치부(8)는, 상기 처리 회로소자(4)에 의해 처리하기 위해, 상기 디코더(30)에서 발생한 마이크로 오퍼레이션들을 인출하도록 구성된다. 각 페치부(8)는, 상기 다수의 스레드 중 적어도 하나에 관련된다. 상기 디코더(30)는, 페치부(8)에 의해 기동된 별개의 디코드 리퀘스트들(24)에 따라 복합 명령어의 마이크로 오퍼레이션들을 개별적으로 발생하고, 각 디코드 리퀘스트(24)는, 상기 디코드 리퀘스트(24)에 따라 상기 디코더(30)에서 상기 복합 명령어의 어느 마이크로 오퍼레이션을 발생할 것인지를 식별한다.

Description

다수의 마이크로 오퍼레이션에 대응한 복합 프로그램 명령어의 디코딩{DECODING A COMPLEX PROGRAM INSTRUCTION CORRESPONDING TO MULTIPLE MICRO-OPERATIONS}
본 기술은 데이터 처리 분야에 관한 것이다. 보다 구체적으로는, 본 발명은, 처리하는 병렬 스레드를 지원하는 데이터 처리장치에 있어서의 마이크로 오퍼레이션을 발생하기 위해 프로그램 명령어들을 디코딩하는 것에 관한 것이다.
일부의 명령어 세트는, 처리 회로소자에서 행할 다수의 마이크로 오퍼레이션에 대응하는 복합 프로그램 명령어들이 일부 있고, 각 마이크로 오퍼레이션은 그 프로그램 명령어에 관련된 오퍼레이션의 일부를 나타낸다. 따라서, 명령어 디코더는, 상기 처리 회로소자에서 행할 마이크로 오퍼레이션들을 발생하기 위해 프로그램 명령어들을 디코딩하여도 된다.
일부의 처리장치는 처리하는 다수의 병렬 스레드를 지원한다. 별개의 페치(fetch)부들은, 각각의 스레드가 마이크로 오퍼레이션의 상기 처리 회로소자에의 페치를 기동하도록 구성되어도 된다. 공유 명령어 디코더는, 각각의 페치부에서 필요로 한 마이크로 오퍼레이션을 발생하도록 구성되어 된다. 일반적인 명령어 디코더들은, 상기 페치부들 중 하나로부터 복합 프로그램 명령어의 디코딩 리퀘스트에 따라, 상기 명령어 디코더가 그 복합 프로그램 명령어에 대응한 마이크로 오퍼레이션 전부를 연속적인 사이클로 발생하도록, 복합 프로그램 명령어들을 단일 엔터티로서 디코딩한다. 그러나, 이것은, 처리하는 스레드들에 대응한 다수의 페치부들 사이에서 상기 공유 명령어 디코더가 공유되는 특정 시스템에서는 문제가 있을 수 있다. 상기 페치부들의 하나가, 복합 프로그램 명령어에 대응한 마이크로 오퍼레이션들을 인출(fetch)하는 도중에 스톨(stall)되어서, 같은 복합 프로그램 명령어에 대한 또 다른 마이크로 오퍼레이션을 접수할 수 없는 경우, 상기 공유 디코더도 그 복합 프로그램 명령어에 대한 마이크로 오퍼레이션 전부를 종료하는 것을 책임지고 있기 때문에 스톨된다. 이에 따라, 다른 나머지 페치부가 마이크로 오퍼레이션을 접수할 수 있었을지라도, 제1 페치부의 스톨이 해결될 때까지 다른 나머지 페치부는 상기 명령어 디코더로부터 디코딩된 마이크로 오퍼레이션들을 수신하지 못한다. 이에 따라 처리 성능을 저하시킨다. 본 기술은 이러한 문제를 해결하려고 한다.
일 국면에서 본, 본 발명의 데이터 처리장치는,
처리하는 복수의 스레드를 병렬로 처리하도록 구성된 처리 회로소자;
상기 처리 회로소자에서 처리할 마이크로 오퍼레이션들을 발생하기 위해 복수의 마이크로 오퍼레이션에 대응한 적어도 하나의 복합 프로그램 명령어로 이루어진 프로그램 명령어들을 디코딩하도록 구성된 공유 명령어 디코더; 및
상기 처리 회로소자에 의해 처리하기 위해, 상기 공유 명령어 디코더에서 발생한 상기 마이크로 오퍼레이션들을 인출하도록 구성되고, 각 페치부가 상기 복수의 스레드 중 적어도 하나에 관련된, 복수의 페치부를 구비하고,
상기 공유 명령어 디코더는, 각 마이크로 오퍼레이션을, 상기 복수의 페치부 중 하나에 의해 기동된 디코드 리퀘스트에 따라 발생하도록 구성되고,
상기 공유 명령어 디코더는, 별개의 대응하는 디코드 리퀘스트에 따라 복합 프로그램 명령어의 복수의 마이크로 오퍼레이션 중 각각의 개별적인 마이크로 오퍼레이션을 발생하도록 구성되되, 각각의 디코드 리퀘스트는 상기 디코드 리퀘스트에 따라 상기 복합 프로그램 명령어의 어느 마이크로 오퍼레이션이 상기 공유 명령어 디코더에 의해 발생할 것인지를 식별한다.
본 기술의 명령어 디코더는, 상기 페치부들에 의해 기동된 별개의 디코드 리퀘스트들에 따라 복합 프로그램 명령어의 마이크로 오퍼레이션들을 발생한다. 각 디코드 리퀘스트는, 상기 디코드 리퀘스트에 따라 발생될 복합 프로그램 명령어의 특정한 마이크로 오퍼레이션을 식별하기도 한다. 따라서, 이전의 시스템에서와 같이 단일 리퀘스트에 따라 마이크로 오퍼레이션 전부를 발생하는 것이 아니라, 상기 명령어 디코더는 각 연속적인 디코드 리퀘스트 후에, 상기 요구된 상기 복합 프로그램 명령어의 마이크로 오퍼레이션을 디코딩하고 나서 다른 마이크로 오퍼레이션을 디코딩하기 전에 또 다른 디코드 리퀘스트를 대기하여도 된다. 개별적으로 요구될 각 마이크로 오퍼레이션을 개별적으로 필요로 함으로써, 이에 따라, 상기 공유 명령어 디코더는, 복합 프로그램 명령어의 마이크로 오퍼레이션들을 발생하는 도중에 명령어가 디코딩중인 것을 전환할 수 있다. 그러므로, 복합 프로그램 명령어에 필요한 마이크로 오퍼레이션의 일부만을 발생한 후에 하나의 페치부가 스톨하는 경우에도, 상기 디코더는, 다른 페치부에서 요구한 마이크로 오퍼레이션들을 발생하는 것으로 전환하고나서 이들 마이크로 오퍼레이션들을 요구하는 상기 페치부가 언스톨(unstall)되었을 때 제1 복합 프로그램 명령어의 나머지 마이크로 오퍼레이션들을 발생하는 것으로 복귀할 수 있다. 이는, 명령어 디코더가 비활성인 사이클의 수를 감소시키기 때문에 데이터 처리장치의 전체 처리 성능을 향상시킨다.
일부의 예들에서, 상기 처리 회로소자에서 처리할 각 스레드는, 그 스레드에 대해 행해질 마이크로 오퍼레이션들을 인출하기 위한 자신의 페치부를 갖기도 한다. 그 밖의 예들에서는, 상기 페치부들 중 적어도 하나는 다수의 스레드간에 공유되어도 된다.
일부의 예들에서, 각 페치부는, 그 인출된 마이크로 오퍼레이션들을 처리용 상기 처리 회로소자에 직접 보낼 수도 있다. 한편, 마이크로 오퍼레이션 큐들은, 상기 페치부에서 인출한 마이크로 오퍼레이션들이 대응한 큐에 긴 열을 이루도록 상기 페치부들 중 하나에 각각 대응하게 제공되어도 된다. 그 후, 상기 긴 열을 이룬 마이크로 오퍼레이션들은, 상기 처리 회로소자에 의해 처리하기 위해 발행되어도 된다. 마이크로 오퍼레이션 큐들이 제공되는 경우, 예를 들면, 상기 페치부는, 다음의 마이크로 오퍼레이션을 상기 큐에서 공간이 이용 가능해질 때 요구하여도 된다.
상기 페치부는, 상기 디코드 리퀘스트를 다른 방식으로 기동하여도 된다. 일부의 예들에서, 상기 명령어 디코더에서 발생한 마이크로 오퍼레이션들은, 상기 대응한 페치부에 직접 전달되어도 된다. 이 경우에, 상기 페치부는, 상기 처리 회로소자에 의해 처리하기 위해 디코딩되어 인출될 선택된 마이크로 오퍼레이션을 식별하는 디코드 리퀘스트를 발생하여도 된다. 상기 페치부로부터의 디코드 리퀘스트에 따라, 상기 명령어 디코더는, 그 선택된 마이크로 오퍼레이션을 발생하여 상기 페치부에 보내도 된다.
그 밖의 예들에서, 상기 페치부는, 상기 디코드 리퀘스트를 간접적으로 기동하여 상기 디코드 리퀘스트 자체를 발생할 필요가 없을 수도 있다. 예를 들면, 마이크로 오퍼레이션 캐쉬는, 상기 공유 명령어 디코더에서 발생한 마이크로 오퍼레이션들을 기억하도록 구성되어도 된다. 종종, 같은 마이크로 오퍼레이션은 같은 스레드내에서 또는 서로 다른 스레드내에서 여러 번 필요하기도 하고, 그래서, 상기 디코더에서 발생한 마이크로 오퍼레이션들을 캐쉬함으로써, 에너지 효율은, 같은 마이크로 오퍼레이션을 상기 디코더가 반복하여 발생할 필요가 없기 때문에 향상될 수 있다. 상기 마이크로 오퍼레이션 캐쉬가 제공되는 경우, 상기 페치부는 페치 리퀘스트를 상기 마이크로 오퍼레이션 캐쉬에 제공하여 상기 캐쉬로부터 선택된 마이크로 오퍼레이션의 인출을 요구하여도 되고, 그 후 마이크로 오퍼레이션 캐쉬는, 상기 선택된 마이크로 오퍼레이션이 상기 캐쉬에 있지 않은 경우 상기 명령어 디코더에 상기 디코드 리퀘스트를 기동시켜도 된다. 상기 선택된 마이크로 오퍼레이션이 이미 상기 캐쉬에 있는 경우, 디코드 리퀘스트는 불필요할 수 있다. 상기 마이크로 오퍼레이션 캐쉬에서 기동한 디코드 리퀘스트는, 상기 명령어 디코더에 직접 전달되거나, 디코딩될 프로그램 명령어를 기억하는 상위계층 캐쉬 등의 다른 회로소자를 거쳐 간접적으로 전달되어도 된다.
상기 마이크로 오퍼레이션 캐쉬는, 상기 공유 명령어 디코더에서 지원한 처리 사이클당 디코드 리퀘스트의 수보다 처리 사이클당 리퀘스트의 수가 큰 리퀘스트들을 지원하기도 한다. 이것이 의미하는 것은, 상기 공유 명령어 디코더가 한결같이 유지될 수 있는 것보다 큰 상기 페치부에 명백한 명령어 페치 대역폭을 제공할 수 있다는 것이다. 이것은, 단일의 공유 명령어 디코더에 대응한 다수의 페치부가 있는 경우에 특히 유용하다. 상기 공유 명령어 디코더가 처리 사이클마다 2개이상의 디코드 리퀘스트를 지원하여, 다수의 마이크로 오퍼레이션들이 같은 사이클에서 발생될 수 있는 실시예들에서, 상기 2개이상의 디코드 리퀘스트는, 전체적으로 서로 다른 프로그램 명령어에 대응한 마이크로 오퍼레이션들을 위한 것이거나, 같은 프로그램 명령어의 서로 다른 마이크로 오퍼레이션들을 위한 것이어도 된다. 그럼에도 불구하고, 같은 사이클에서 다수의 마이크로 오퍼레이션을 발생하는 곳에서도, 각 마이크로 오퍼레이션은 그래도 별개의 디코드 리퀘스트에 따라 발생되기도 한다.
상기 마이크로 오퍼레이션 자체를 발생하는 것뿐만 아니라, 상기 공유 명령어 디코더는, 상기 발생된 마이크로 오퍼레이션이 상기 대응한 명령어에 대한 마지막 마이크로 오퍼레이션인지를 가리키는 대응한 제어 플래그를 발생할 수도 있다. 상기 페치부는, 인출될 다음 마이크로 오퍼레이션을 식별하기 위해 프로그램 카운터와 마이크로 프로그램 카운터를 유지하기도 한다. 그 프로그램 카운터는, 상기 인출될 다음 마이크로 오퍼레이션에 대응한 프로그램 명령어를 가리키고, 상기 마이크로 프로그램 카운터는 그 명령어의 어느 마이크로 오퍼레이션이 인출될 다음 마이크로 오퍼레이션인지를 가리킨다. 그 제어 플래그에 의해, 상기 페치부는, 상기 인출된 마이크로 오퍼레이션을 수신할 때 상기 마이크로 프로그램 카운터 또는 상기 프로그램 카운터를 증분시킬 것인지를 판정할 수 있다. 인출된 마이크로 오퍼레이션용 제어 플래그는 상기 인출된 마이크로 오퍼레이션이 마지막 마이크로 오퍼레이션이 아닌 것을 가리키는 경우, 상기 마이크로 프로그램 카운터는, 같은 명령어에 대한 후속하는 마이크로 오퍼레이션이 다음에 인출되어야 하는 것을 가리키기 위해 증분되어도 된다. 한편, 상기 제어 플래그는 상기 인출된 마이크로 오퍼레이션이 마지막 마이크로 오퍼레이션인 것을 가리키는 경우, 상기 프로그램 카운터는 다음 프로그램 명령어를 가리키기 위해 증분되어도 된다. 상기 프로그램 카운터를 증분할 때, 상기 마이크로 프로그램 카운터도, 다음 프로그램 명령어를 위해 인출될 제1 마이크로 오퍼레이션을 가리키기 위해 리셋트되어도 된다. 마이크로 오퍼레이션이 디코딩될 때 상기 명령어 디코더를 사용하여 상기 제어 플래그를 발생함으로써, 상기 페치부는, 각 프로그램 명령어에 마이크로 오퍼레이션이 얼마나 대응하는지, 또는, 같은 명령어에 대해 수신될 또 다른 마이크로 오퍼레이션들이 있는지를 계속 추적할 필요는 없다. 이것은 상기 페치부의 구성을 단순화시킨다.
상기 장치는, 상기 공유 명령어 디코더에서 이전에 디코딩한 하나 이상의 프로그램 명령어를 기억하는 명령어 버퍼를 갖기도 한다. 복합 프로그램 명령어의 각 마이크로 오퍼레이션이 별개의 리퀘스트에 따라 개별적으로 디코딩되므로, 같은 프로그램 명령어는, 연속적인 수 처리 사이클동안 상기 디코더가 그 명령어에 대한 마이크로 오퍼레이션 전부를 발생하게 하는데 필요할 수도 있다. 최근에 하나이상의 디코딩된 프로그램 명령어를 상기 명령어 버퍼에 기억함으로써, 이것이 상위계층 명령어 데이터 스토어, 이를테면 명령어 캐쉬나 메모리로부터 같은 명령어를 여러 번 인출할 필요가 있을 가능성을 저하시키기 때문에, 성능과 에너지 효율은 향상될 수 있다.
디코드 리퀘스트가 주어진 프로그램 명령어에 대해 수신될 때, 상기 디코더는 그 명령어가 명령어 버퍼에 있는지를 체크하여, 명령어 버퍼에 있을 경우 그 명령어를 상기 명령어 버퍼로부터 인출한다. 특정된 프로그램 명령어가 명령어 버퍼에 없을 경우, 상기 디코더는 그 특정된 프로그램 명령어를 명령어 캐쉬나 메모리로부터 취득하여도 된다. 일반적으로, 상기 버퍼는, 하나 이상의 최근에 디코딩된 프로그램 명령어를 기억하긴 하지만, 대신에 어떤 프로그램 명령어가 버퍼링되어야 하고 또 그 버퍼로부터 퇴거시켜야 하는지를 판정하는 보다 복잡한 퇴거방식을 가질 수 있었다. 또한, 그 버퍼가 하나보다 많은 명령어를 기억하는 것은 가능하지만, 단일의 프로그램 명령어만의 용량을 갖는 버퍼로 상당히 성능을 향상시키는 경우도 많고, 이것은 보다 큰 버퍼보다 하드웨어로 구현하는 것이 더 효율적일 것이다. 상기 버퍼가 하나의 명령어를 기억하기만 하고 가장 최근의 디코딩된 명령어가 그 버퍼에 놓이고 나서 다음 명령어로 그 다음 명령어가 디코딩될 때 겹쳐 써지는 실시예들에 있어서, 상기 명령어 디코더는, 현재의 디코드 리퀘스트에 대한 프로그램 카운터가 이전의 디코드 리퀘스트에 대한 프로그램 카운터와 같은지를 체크하여서 필요한 명령어가 그 버퍼에 있는지를 판정할 수 있다. 한편, 상기 디코더가 사이클당 다수의 디코드를 지원하면, 다중 명령어를 보유 가능한 버퍼를 제공하는데 유용할 수도 있고, 이 경우에, 기억된 어드레스 태그들에 대한 프로그램 카운터와 상기 버퍼에 있는 각 명령어를 일치시키는 것이 필요할 수도 있다.
상기 처리 회로소자는 스레드들을 서로 다른 방식으로 병렬로 처리하여도 된다. 일부의 경우에는, 상기 처리 회로소자는 각각 상기 스레드들 중 적어도 하나를 처리할 수 있는 다수의 처리부를 가져도 된다. 한편, 그 밖의 실시예는, 공통 세트의 하드웨어를 사용하여 스레드들의 시분할 다중화를 행하여도 되고, 예를 들면 각 스레드는 상기 처리 회로소자가 그 스레드를 실행할 때 타임 슬롯이 할당되어 있다. 따라서, 상기 처리 회로소자가 실제로 수개의 오퍼레이션을 임의의 시간에 병렬로 행하는 것이 필수적인 것은 아니다 - 그 스레드들이 동시에 활성이지만 시분할 다중화에 의해 한번에 하나씩 처리되는 것이 충분하다.
일부의 경우에, 상기 스레드들 중 적어도 하나에 대해서, 상기 처리 회로소자는 마이크로 오퍼레이션의 같은 블록의 다수의 인스턴스(instance)를 인스턴스마다 서로 다른 오퍼랜드와 정확히 같은 방식으로 병렬로 실행하여도 된다. 이러한 해결방법을, 동시 멀티스레딩(SIMT)이라고 하는 경우도 있다. 이것은, 예를 들면 그래픽 처리에서 특히 일반적인, 많은 세트의 데이터 값에 대해 동일한 세트의 마이크로 오퍼레이션을 행할 필요가 있는 경우 처리하는데 특히 유용하다. 이를 지원하기 위해서, 상기 처리 회로소자는, 마이크로 오퍼레이션의 각 인스턴스를 행하기 위한 일 세트의 병렬식 연산장치를 가져도 되고, 이때의 병렬식 연산장치는 공유 프로그램 카운터와 마이크로 오퍼레이션 카운터를 사용하여 공통 제어부에 의해 제어된다. 일부의 경우에는, 병렬 SIMT 그룹이 다수 있어도 되고, 각 SIMT 그룹은 서로 다른 오퍼랜드 값과 병렬로 주어진 스레드에 대해 마이크로 오퍼레이션의 복수의 인스턴스를 처리한다.
본 기술은, 상기 처리 회로소자가 그래픽 처리장치(GPU)를 구비하는 시스템에 특히 유용하다. 일반적으로, GPU는 처리하는 대다수의 스레드를 필요로 한다. 종래의 GPU는 다수의 마이크로 오퍼레이션에 대응한 복합 프로그램 명령어를 갖는 명령어 세트를 사용하지 않아서, 본 기술에서 해결한 문제점이 그 GPU에서 일어나지 않는 경우도 있지만, 본 기술에 의해 인식된 것은, 복합 프로그램 명령어를 포함하는 범용 명령어 세트 아키텍처를 사용하여 제어될 수 있는 GPU를 제공하는 것이 바람직하다는 것이다. 범용 명령어 세트를 사용하여 많은 스레드를 갖는 GPU를 제어함으로써, 이것은, 그 밖의 디바이스, 이를테면 중앙처리장치(CPU)나 다른 범용 처리장치를 위해 기록된 코드와 상기 GPU와의 호환성을 고려하여, 프로그래밍을 보다 단순하게 한다. 다수의 페치부간에 공유 명령어 디코더가 공유되는 다수의 스레드 시스템에서 복합 명령어의 디코딩에 의해 생긴 성능 병목현상을 해결함으로써, 본 기술은 GPU에서 범용 명령어 세트 아키텍처의 이용을 용이하게 한다. 이는, 일반적으로 어떠한 복합 프로그램 명령어도 갖지 않는 자신의 특수 명령어 세트를 이용하는 다수의 GPU와 대조적이다.
다른 국면에서 본, 본 발명의 데이터 처리장치는,
처리하는 복수의 스레드를 병렬로 처리하는 처리수단;
상기 처리수단에서 처리할 마이크로 오퍼레이션들을 발생하기 위해 복수의 마이크로 오퍼레이션에 대응한 적어도 하나의 복합 프로그램 명령어로 이루어진 프로그램 명령어들을 디코딩하는 공유 명령어 디코딩 수단; 및
상기 처리수단에 의해 처리하기 위해, 상기 공유 명령어 디코딩 수단에서 발생한 상기 마이크로 오퍼레이션들을 인출하되, 각 페치수단이 상기 복수의 스레드 중 적어도 하나에 관련된, 복수의 페치수단을 구비하고,
상기 공유 명령어 디코딩 수단은 각 마이크로 오퍼레이션을, 상기 복수의 페치수단 중 하나에 의해 기동된 디코드 리퀘스트에 따라 발생하도록 구성되고,
상기 공유 명령어 디코딩 수단은, 별개의 대응하는 디코드 리퀘스트에 따라 복합 프로그램 명령어의 복수의 마이크로 오퍼레이션 중 각각의 개별적인 마이크로 오퍼레이션을 발생하도록 구성되되, 각각의 디코드 리퀘스트는 상기 디코드 리퀘스트에 따라 상기 복합 프로그램 명령어의 어느 마이크로 오퍼레이션이 상기 공유 명령어 디코딩 수단에 의해 발생할 것인지를 식별한다.
또 다른 국면에서 본, 본 발명의 데이터 처리방법은,
처리할 마이크로 오퍼레이션들을 발생하기 위해 공유 명령어 디코더에 의해 복수의 마이크로 오퍼레이션에 대응한 적어도 하나의 복합 프로그램 명령어로 이루어진 프로그램 명령어들을 디코딩하는 단계; 및
상기 공유 명령어 디코더에서 발생한 상기 마이크로 오퍼레이션들을 처리하기 위해, 병렬로 처리된 복수의 스레드 중 적어도 하나에 각 페치부가 관련된 복수의 페치부에 의해 인출하는 단계를 포함하고,
각 마이크로 오퍼레이션은, 상기 복수의 페치부 중 하나에 의해 기동된 디코드 리퀘스트에 따라 상기 공유 명령어 디코더에 의해 발생되고,
상기 공유 명령어 디코더는, 별개의 대응하는 디코드 리퀘스트에 따라 복합 프로그램 명령어의 복수의 마이크로 오퍼레이션 중 각각의 개별적인 마이크로 오퍼레이션을 발생하도록 구성되되, 각각의 디코드 리퀘스트는 상기 디코드 리퀘스트에 따라 상기 복합 프로그램 명령어의 어느 마이크로 오퍼레이션이 상기 공유 명령어 디코더에 의해 발생할 것인지를 식별한다.
이상과 같이, 별개의 디코드 리퀘스트에 따라 복합 프로그램 명령어의 각 마이크로 오퍼레이션을 개별적으로 발생할 능력은, 제1 복합 프로그램 명령어의 일부의 마이크로 오퍼레이션만을 발생한 후 명령어들간에 디코딩의 전환을 허가하기 때문에 유용하다. 제1 디코드 리퀘스트에 따라, 상기 디코더는, 제1 복합 프로그램 명령어의 제1 마이크로 오퍼레이션을 발생하기 위해 제1 복합 프로그램 명령어를 디코딩하여도 된다. 제2 복합 프로그램 명령어의 마이크로 오퍼레이션을 식별하는 제2 디코드 리퀘스트에 따라, 상기 제2 복합 프로그램 명령어는 그 식별된 마이크로 오퍼레이션을 발생하도록 디코딩될 수 있다. 상기 디코더는, 제1 복합 프로그램 명령어의 제2 마이크로 오퍼레이션의 발생을 요구하는 제3 디코드 리퀘스트에 따라 상기 제1 복합 프로그램 명령어를 디코딩하는 것으로 나중에 복귀할 수 있다. 이 때문에, 상기 디코더는, 일 명령어의 디코딩을 중단시키고 원래의 명령어로 복귀하기 전에 다른 명령어의 마이크로 오퍼레이션을 발생할 수 있고, 이는 일반적인 디코딩 메카니즘으로는 가능하지 않다.
본 기술의 또 다른 국면들, 특징들 및 이점들은, 아래의 첨부도면과 관련지어 판독되는 이하의 설명으로부터 명백할 것이다:
도 1은 데이터 처리장치의 일부를 개략적으로 나타내고,
도 2는 같은 세트의 마이크로 오퍼레이션의 다수의 인스턴스의 병렬 처리를 개략적으로 나타내고,
도 3은 처리하는 서로 다른 스레드의 시분할 다중화를 나타내고,
도 4는 각각의 처리부를 사용하여 스레드들의 병렬 처리를 나타내고,
도 5는 일 페치부에서의 스톨에 의해, 다른 페치부가 디코딩된 마이크로 오퍼레이션을 접수하는 경우에도 상기 명령어 디코더에서 스톨이 생기는 종래의 시스템에서 직면한 문제점을 나타내고,
도 6은 이 문제점을, 복합 명령어의 마이크로 오퍼레이션들을 상기 별개의 디코드 리퀘스트들에 따라 개별적으로 발생하여서 해결할 수 있는 방법을 나타내고,
도 7은 마이크로 오퍼레이션들을 발생하기 위해 명령어들을 디코딩하는 방법을 나타내고,
도 8a 및 8b는 상기 디코더에서 발생한 디코딩된 마이크로 오퍼레이션들을 기억하기 위한 마이크로 오퍼레이션 캐쉬에 의해 행해진 기능들을 나타내고,
도 9는 상기 처리 회로소자에서 행할 마이크로 오퍼레이션들을 인출하는 방법을 나타낸다.
도 1은 데이터를 처리하는 데이터 처리장치(2)의 일부를 개략적으로 나타낸다. 상기 데이터 처리장치(2)는, 처리하는 다수의 병렬 스레드를 행할 수 있는 처리 회로소자(4)를 갖는다. 이 처리장치(2)는, 상기 처리 회로소자(4)가 행할 다수의 마이크로 오퍼레이션에 대응한 복합 프로그램 명령어를 포함하는 명령어 세트를 실행한다. 복합 프로그램 명령어의 일례는, 다수의 값을 메모리로부터 상기 처리 회로소자(4)의 레지스터들에 로딩하거나 다수의 값을 상기 처리 회로소자(4)의 레지스터들로부터 메모리에 기억하기 위한 로드(load) 또는 스토어(store) 다중 명령어다. 상기 로드/스토어 다중 명령어는, 상기 다수의 값 중 하나를 각각 로딩/기억하기 위한 다수의 마이크로 오퍼레이션을 발생하도록 디코딩되어도 된다. 복합 프로그램 명령어의 다른 예는, 제곱근 연산이나 부동 소수점 산술연산 등의 비교적 복잡한 산술연산을 행하기 위한 명령어다. 상기 복잡한 산술 명령어는, 상기 처리 회로소자(4)에 의해 행해질 보다 단순한 몇몇의 마이크로 오퍼레이션에 매핑되어도 된다. 따라서, 상기 처리 회로소자(4)가 마이크로 오퍼레이션들(μops)을 실행하지만, 상기 장치는 마이크로 오퍼레이션들로 디코딩될 필요가 있는 복합 명령어I를 수신한다. 프로그램 명령어들을 인출하여, 마이크로 오퍼레이션들로 디코딩하고, 처리하는 그 마이크로 오퍼레이션들을 인출하기 위한 명령어 프론트 엔드(front end)가 도 1에 도시되어 있다. 상기 데이터 처리장치(2)는 간결함을 기하기 위해 도 1에 도시되지 않은 그 밖의 많은 요소들을 가질 수도 있다는 것을 알 것이다.
상기 데이터 처리장치(2)는, 각각, 상기 처리 회로소자(4)에서 행할 처리하는 적어도 하나의 스레드에 대응하는 명령어 큐(6)를 약간 갖는다. 각 큐는 상기 처리 회로소자(4)에서 행할 마이크로 오퍼레이션들을 기억하는 제한된 양의 공간을 갖는다. 도 1의 예에서, 각 큐(6)의 깊이는 4개의 마이크로 오퍼레이션이긴 하지만, 그 밖의 예에서는 상기 큐들(6)이 다수의 또는 소수의 마이크로 오퍼레이션을 기억하기도 하고, 서로 다른 큐(6)들이 서로 다른 수의 마이크로 오퍼레이션을 기억하는 것이 가능하다. 각 큐는, 마이크로 오퍼레이션들을 상기 대응한 큐(6)에 인출하기 위한 대응한 페치부(8)를 갖는다. 상기 큐로부터의 마이크로 오퍼레이션들은, 발행(issue) 회로소자(10)에 의해 처리하기 위해 발행된다.
도 2 내지 도 4에 도시된 것처럼, 상기 처리 회로소자(4)는, 큐들(6)에 의해 나타낸 각각의 스레드의 병렬 처리를 핸들링할 수도 있다. 도 3은, 단일 처리부가 상기 스레드간에 공유될 수 있도록 각각의 스레드를 시분할 다중화하는 일례를 나타낸다. 각 스레드 Q0,Q1,Q2,Q3은, 상기 처리 회로소자(4)에 의해 처리하기 위한 타임 슬롯이 할당되어 있다. 일부의 예에서, 상기 처리 회로소자(4)는, 각 스레드 Q0,Q1,Q2,Q3의 순서로 실행하는 것에 의해 순환시켜도 되고, 그 밖의 예에서는, 어느 스레드가 언제 실행될지를 선택하는 우선순위 메카니즘이나 유사한 방식도 있다. 이와는 달리, 도 4에 도시된 것처럼, 상기 처리 회로소자(4)는, 각각의 스레드를 각각 동시에 처리할 수 있는 다수의 처리부 4-0,4-1,4-2를 가져도 되어, 다수의 스레드는 동시에 실행된다.
도 2에 도시된 것처럼, 도 3과 도 4의 해결방법 중 어느 하나의 해결방법에 의해, 특별한 스레드(예를 들면, 스레드 Q0)의 마이크로 오퍼레이션들의 같은 그룹이, 마이크로 오퍼레이션들의 그룹의 인스턴스마다 사용되는 서로 다른 오퍼랜드와 병렬로 여러 번 처리되는 것이 가능하다. 이 해결방법을, SIMT이라고 하는 경우도 있다. 단일 프로그램 카운터와 마이크로 프로그램 카운터는, 상기 인스턴스들이 인스턴스마다 실행된 같은 명령어들과 정확히 같은 방식으로 진행되도록 상기 인스턴스0,1,2,...,N의 각각에 대해 유지되어 있다. 그러나, 서로 다른 오퍼랜드 값은 인스턴스마다 사용되어도 된다. 도 2에 도시된 것처럼, 예를 들면, ADD 마이크로 오퍼레이션μop0에 따라 추가된 값들은 인스턴스마다 서로 달라, 다른 결과를 생성한다. 마이크로 오퍼레이션들의 공통 블록에서의 모든 마이크로 오퍼레이션이 인스턴스마다 행해지는 것이 필수적인 것은 아니다. 예를 들면, 도 2에 도시된 것처럼, 브랜치(branch) 명령어 BR에 따라, 일부의 명령어는, 도 2의 곱셈 마이크로 오퍼레이션μop2 등의 특정한 명령어를 생략하도록 분기하여도 된다. 그럼에도 불구하고, 처리가 정확히 같은 방식으로 진행되는 경우, 곱셈 마이크로 오퍼레이션을 필요로 하지 않는 인스턴스들은, 상기 프로그램 카운터나 마이크로 프로그램 카운터가 마이크로 오퍼레이션μop3에 의해 진행되기 전에 이 마이크로 오퍼레이션에 도달할 때까지 대기하여야 한다. 이러한 해결방법은, 특히 그래픽 처리시에 종종 유용한, 큰 세트의 데이터 값에 관해 같은 세트의 오퍼레이션이 진행될 필요가 있을 때 유용하다. 예를 들면, 공통 세트의 마이크로 오퍼레이션은, 화상의 주어진 화소에서 무슨 색을 렌더링해야 하는지를 결정하는 프래그먼트 쉐이더를 구현하여도 된다. 같은 프래그먼트 셰이더 프로그램은, 화소마다 서로 다른 오퍼랜드를 갖는 인접한 화소들의 블록에 대해 병렬로 실행되어도 된다. 이러한 해결방법은, 상기 병렬 인스턴스들이 상기 프로그램 또는 상기 메모리 액세스를 통해 이루어진 경로의 관점에서 서로 상당히 분기하지 않을 때, 가장 효율적이다. 상기 큐들에 대응한 스레드 Q0,Q1,Q2 등 중 임의의 스레드가 상기 SIMT 처리를 사용하여도 된다. 일부의 실시예에서, 마이크로 오퍼레이션의 큐들 전부는, 다수의 세트의 데이터 값들에 관해 SIMT 그룹으로서 실행되어도 된다.
도 1에 도시된 것처럼, 각 페치부(8)는, 대응한 큐(6)에 인출될 다음 마이크로 오퍼레이션을 함께 가리키는 프로그램 카운터(12)(PC)와 마이크로 프로그램 카운터(14)(μPC)를 유지하여도 된다. 프로그램 카운터(12)는, 프로그램 명령어I가 인출될 다음 마이크로 오퍼레이션에 대응하는 표시이고, 마이크로 프로그램 카운터(14)는 그 프로그램 명령어내의 마이크로 오퍼레이션이 다음에 인출되어야 하는 것을 가리킨다. 대응한 큐(6)에 공간이 이용가능해질 때, 상기 페치부(8)는 인출(fetch) 리퀘스트(16)를 마이크로 오퍼레이션을 캐쉬하는 레벨0(L0) 명령어 캐쉬(20)에 발행한다. 상기 페치 리퀘스트(16)는, 프로그램 카운터(12)와 마이크로 프로그램 카운터(14)의 현재값을 특정한다. 그 페치 리퀘스트(16)에 따라, 상기 L0명령어 캐쉬(20)(마이크로 오퍼레이션 캐쉬라고도 함)는, 현재, 상기 페치 리퀘스트(16)에서 상기 프로그램 카운터와 상기 마이크로 프로그램 카운터에서 가리킨 마이크로 오퍼레이션을 기억하는지를 체크하여, 기억할 경우, 상기 L0명령어 캐쉬(20)는 그 요구된 마이크로 오퍼레이션(22)을 상기 페치 리퀘스트(16)를 발행한 상기 페치부(8)에 보낸다.
한편, 상기 요구된 마이크로 오퍼레이션이 상기 L0명령어 캐쉬(20)에 없는 경우, 디코드 리퀘스트(24)는, 각각의 페치부(8) 사이에 공유되는 공유 명령어 디코더(30)에 발행된다. 일부의 실시예에서, 상기 공유 명령어 디코더(30)는, 2레벨 디코딩 방식에서 프리디코더(predecoder)일 수 있고, 이때 나머지 디코딩은 파이프라인에서 나중에 일어난다. 상기 처리 회로소자(4)는 마이크로 오퍼레이션을 디코딩하는 별개의 디코더를 가져도 된다. 상기 디코드 리퀘스트(24)는, 그 디코드 리퀘스트를 기동한 상기 페치 리퀘스트(16)에 가리킨 프로그램 카운터와 마이크로 프로그램 카운터를 특정하여서, 상기 디코더(30)는 발생될 마이크로 오퍼레이션을 식별할 수 있다. 상기 디코드 리퀘스트(24)에 따라, 상기 디코더(30)는, 상기 디코드 리퀘스트(24)의 마이크로 프로그램 카운터에서 가리킨 마이크로 오퍼레이션을 발생하기 위해 상기 디코드 리퀘스트(24)의 프로그램 카운터에서 가리킨 프로그램 명령어I를 디코딩한다. 이전의 명령어 디코더(30)와는 달리, 다수의 마이크로 오퍼레이션들에 대응한 복합 프로그램 명령어I에 대해, 상기 디코더(30)는 그 디코드 리퀘스트(24)에 따라 단일의 마이크로 오퍼레인션을 발생하고, 이때, 동일한 명령어I에 대한 다른 나머지 마이크로 오퍼레이션들은 그들의 마이크로 오퍼레이션들을 위한 별개의 디코드 리퀘스트들(24)에 따라 발생된다. 따라서, 복합 프로그램 명령어의 각 마이크로 오퍼레이션은, 별개의 디코드 리퀘스트(24)에 따라 개별적으로 발생된다.
상기 디코더(30)는, 상기 발생된 마이크로 오퍼레이션(32)과 대응한 제어 플래그(34)를, 상기 마이크로 오퍼레이션과 제어 플래그를 캐쉬하는 상기 L0 명령어 캐쉬(20)에 출력한다. 상기 제어 플래그(34)는, 상기 발생된 마이크로 오퍼레이션(32)이 대응한 프로그램 명령어I의 마지막 마이크로 오퍼레이션이었는지와, 또는 그 명령어I에 대해 발생될 또 다른 마이크로 오퍼레이션이 있는지를 가리킨다. 상기 제어 플래그L은 인출된 마이크로 오퍼레이션과 함께 상기 페치부(8)에 제공된다. 이하 도 9에 대해 설명된 것처럼, 상기 제어 플래그L은, 상기 페치부(8)가 인출될 다음 마이크로 오퍼레이션을 가리키기 위해 상기 프로그램 카운터(12)나 상기 마이크로 프로그램 카운터(14)를 증분시킬지를 제어한다.
상기 공유 명령어 디코더(30)는, 메모리로부터 인출된 명령어들을 캐쉬하는 레벨1(L1) 명령어 캐쉬(40)로부터 디코딩될 명령어들을 취득한다. 그 밖의 예에서, 상기 L1 명령어 캐쉬(40)는 구비되지 않아도 되고, 대신에 상기 공유 명령어 디코더(30)는 메모리로부터 그 명령어들을 직접 취득하여도 된다. 그러나, 상기 L1 명령어 캐쉬(40)를 구비하면 명령어들I를 디코더(30)에 인출하는 것에 관련된 지연시간 및 에너지 부담을 감소시키는데 이롭다.
상기 디코더(30)가 별개의 디코드 리퀘스트(24)에 따라 복합 명령어의 각 마이크로 오퍼레이션을 개별적으로 디코딩하므로, 동일한 명령어를 일부의 연속적 사이클로 디코딩될 필요가 있을 수 있는 것이 가능하다. 성능을 향상시키기 위해서, 명령어 버퍼(42)는, 최근에 적어도 하나의 디코딩된 명령어를 기억하기 위해 상기 L1 명령어 캐쉬(40)와 상기 공유 명령어 디코더(30) 사이에 설치되어도 된다. 이러한 실시예에서, 상기 명령어 버퍼(42)는, 상기 이전에 디코딩된 명령어를 기억하여, 동일한 명령어가 다음 사이클에서 필요한 경우, 이 명령어가 그 L1 명령어 캐쉬(40) 대신에 상기 명령어 버퍼(42)로부터 더 효율적으로 인출될 수 있다. 따라서, 디코드 리퀘스트(24)의 프로그램 카운터가 상기 이전의 디코드 리퀘스트(24)에 대한 프로그램 카운터와 같은 경우, 상기 디코더(30)는 상기 명령어 버퍼(42)에서의 명령어를 사용할 수 있고, 상기 프로그램 카운터가 상기 이전에 요구된 프로그램 카운터와 다른 경우, 상기 명령어는 L1 명령어 캐쉬(40)로부터 인출될 수 있다. 그 밖의 실시예에서, 상기 명령어 버퍼(42)는 다수의 명령어들을 기억하기도 하고, 상기 디코더(30)는, 상기 디코드 리퀘스트(24)의 프로그램 카운터에 대응한 명령어가 상기 명령어 버퍼(42)에 있는지를 버퍼링된 각 명령어에 관련된 어드레스에 의거하여 판정할 수 있다.
도 1에 도시된 마이크로 오퍼레이션 큐들(6)은 선택사항이고, 그 밖의 예에서 상기 페치부(8)는 그 인출된 마이크로 오퍼레이션들을 상기 발행 회로소자(10)에 직접 출력하여도 된다. 그러나, 하나의 스레드의 마이크로 오퍼레이션들이 하나의 큐(6)로부터 상기 처리 회로소자(4)에 발행중인 동안, 다른 스레드에 대한 마이크로 오퍼레이션들은, L0 캐쉬(20)로부터 인출될 수 있기 전에 마이크로 오퍼레이션들을 발행할 준비가 되는 상기 발행 스테이지(10)를 대기하는 것이 아니라 다른 큐(6)에 인출될 수 있기 때문에, 상기 큐들(6)에 의해 성능을 향상시킬 수 있다. 일부의 실시예에서, 상기 페치부(8)와 대응한 명령어 큐(6)는 단일 유닛에 조합되어도 된다.
상기 마이크로 오퍼레이션 캐쉬(20)는, 동일한 마이크로 오퍼레이션에 대해 한번 디코딩시키고 나서 여러 번 인출시켜, 동일한 마이크로 오퍼레이션의 반복된 디코딩을 피함으로써 성능을 향상시키고 에너지 소비를 줄인다. 또한, 마이크로 오퍼레이션 캐쉬(20)는, 상기 디코더(30)가 처리 사이클당 디코드 리퀘스트들(24)을 지원할 수 있는 것보다 많은 수의 처리 사이클당 페치 리퀘스트들(16)을 지원할 수 있으므로 명백한 페치 대역폭을 향상시킨다. 그럼에도 불구하고, 상기 마이크로 오퍼레이션 캐쉬(20)는 선택사항이어도 되고, 그 밖의 실시예에서 상기 공유 명령어 디코더(30)는 마이크로 오퍼레이션들을 상기 페치부(8)에 제공하여도 된다. 이 경우에, 상기 페치부(8)는, 상기 페치 리퀘스트(16)를 상기 공유 명령어 디코더(30)에 직접 보낼 수도 있어서, 상기 페치 리퀘스트(16)는 상기 디코드 리퀘스트(24)로서도 기능한다.
마찬가지로, 상기 명령어 버퍼(42)는, 선택사항이고, 그 밖의 예에서, 상기 공유 디코더(30)는, 프로그램 명령어I 전부를 상기 L1 명령어 캐쉬(40)나 메모리로부터 취득하여도 된다.
도 5와 도 6은 개개의 디코드 리퀘스트들에 따라 각 마이크로 오퍼레이션을 따로따로 디코딩하면 얼마나 성능을 향상시킬 수 있는지의 일례를 나타낸다. 도 5는, 이전의 디코딩 기술들에서와 같이, 단일 디코드 리퀘스트에 따라 복합 프로그램 명령어I가 전체적으로 디코딩되는 경우 일어날 수 있는 상기 디코더(30)의 스톨링(stalling)을 나타내는 비교예를 나타낸다. 도 5는, 처리 사이클0에서, 이를테면 메모리로부터 6개의 서로 다른 값을 상기 처리 회로소자(4)의 레지스터들에 로딩하는 복합 로드 다중(LDM) 프로그램 명령어를 페치하는 것을 요구하기 위해, 상기 페치부0이 페치 리퀘스트를 발행하는 일례를 나타낸다. 따라서, 상기 LDM명령어는, 6개의 별개의 마이크로 오퍼레이션 μop0∼μop5로 디코딩된다. 그 페치 리퀘스트에 따라, 상기 마이크로 오퍼레이션 캐쉬(20)는, 그 필요로 한 오퍼레이션들이 상기 캐쉬(20)에 없는지를 판정하여서 대응한 디코드 리퀘스트(24)를 상기 디코더(30)에 발행한다. 그 디코드 리퀘스트에 따라, 상기 디코더(30)는, 사이클 1에서 LDM명령어에 대한 마이크로 오퍼레이션들을 디코딩하기 시작하고 나서, 이후의 사이클 2,3,4에서 LDM 명령어에 대한 다른 나머지 마이크로 오퍼레이션들을 계속 발생한다. 그러나, 사이클 4에서, 상기 페치부0은, 예를 들면, 대응한 큐Q0이 어떠한 또 다른 마이크로 오퍼레이션들을 접수할 수 없기 때문에 스톨된다. 상기 디코더는, 상기 로드 다중 명령어에 대해 마이크로 오퍼레이션들 전부를 발생하는 것을 책임지고 있고, 상기 디코더가 로드 다중 명령어의 디코딩을 중단했을 경우 나중에 다시 어디서 시작해야 하는지를 모르기 때문에, 명령어를 통해 부분적으로 디코딩하는 것을 중단할 수 없다. 그러므로, 상기 디코더도 마이크로 오퍼레이션들을 디코딩하는 것을 정지해야 해서, 상기 스톨은 페치부0으로부터 디코더(30)에 역으로 전파한다. 그러므로, 처리 사이클5,6,7 동안에, 마이크로 오퍼레이션들이 발생되지 않는다. 상기 디코더(30)는, 상기 페치부0이 언스톨되었으면 다시 디코딩하기를 시작할 뿐이고, 나머지 마이크로 오퍼레이션 μop4, μop5를 완료한다. 상기 LDM 명령어의 마이크로 오퍼레이션 전부가 발생되었다면, 상기 디코더(30)는 다른 페치부1에 대한 마이크로 오퍼레이션 ADD를 발생하는 것으로 전환할 수 있다. 그러나, 상기 ADD 명령어에 대한 상기 페치/디코드 리퀘스트는 처리 사이클 4에 이루어졌고, 페치부1은 스톨되지 않았고, 그래서 상기 디코더(30)가 스톨되었을 때 사이클5,6,7 중 하나 동안에 발생되었을 경우 ADD 마이크로 오퍼레이션을 접수할 수 있었다.
대조적으로, 도 6은, 별개의 디코드 리퀘스트들에 따라 별도로 복합 명령어의 각 마이크로 오퍼레이션을 디코딩하여서 어떻게 상기 디코더의 스톨링을 피할 수 있는지를 나타낸다. 상기 페치부(8)는 개개의 마이크로 오퍼레이션마다 별개의 페치 리퀘스트들을 제공한다. 따라서, 실행될 LDM 명령어를 필요로 하는 페치부0은, 마이크로 오퍼레이션 μop0∼μop3에 대응한 사이클0∼3에서 페치 리퀘스트들을 발행한다. 상기 L0 캐쉬(20)는, 이들의 마이크로 오퍼레이션들을 포함하지 않아서 대응한 디코드 리퀘스트들을 상기 디코더(30)에 기동시킨다. 상기 디코더는 사이클1∼4에서 대응한 마이크로 오퍼레이션을 발생하여서 각 디코드 리퀘스트에 대해 응답한다. 상기 페치부0이 사이클4에서 스톨할 때, 상기 디코더(30)는, 별개의 디코드 리퀘스트들에 따라 나머지 마이크로 오퍼레이션μop4, μop5를 나중에 발생할 수 있으므로 상기 LDM 명령어의 마이크로 오퍼레이션들 전부를 끝내는 것을 책임지고 있지 않기 때문에 스톨하지 않는다. 그러므로, 대신에, 사이클5에서, 상기 디코더(30)는 페치부1에서 필요로 한 ADD 마이크로 오퍼레이션을 발생할 수 있다. 마찬가지로, 다른 나머지 명령어나 다른 나머지 페치부로부터의 디코드 리퀘스트들은, 사이클6, 7동안에 상기 디코더(30)에 의해 핸들링될 수 있었다. 상기 페치부0이 사이클7에서 언스톨되었을 때, 나머지 마이크로 오퍼레이션들μop4, μop5에 대한 페치 리퀘스트들을 발행하기 시작하고, 이것은 새로운 디코드 리퀘스트들을 상기 디코더(30)에 기동시킨 후 이들의 마이크로 오퍼레이션들을 사이클8, 9에서 발생한다. 그러므로, 상기 디코더(30)는, 성능을 향상시키기 위해서, 명령어 중간에 디코딩하는 서로 다른 명령어간에 빠르게 전환할 수 있다.
도 7은 공유 명령어 디코더(30)의 오퍼레이션의 일례를 나타내는 흐름도다. 단계 50에서, 상기 디코더(30)는, 발생될 마이크로 오퍼레이션을 함께 식별하는 프로그램 카운터와 마이크로 프로그램 카운터를 특정하는 디코드 리퀘스트(24)를 수신한다. 단계 52에서, 상기 디코더(30)는, 상기 디코드 리퀘스트(24)에 특정된 프로그램 카운터가 마지막 디코드 리퀘스트용 프로그램 카운터와 같은지를 판정한다. 같을 경우, 단계 54에서, 상기 필요한 명령어는, 가장 최근에 디코딩된 명령어를 기억하는 명령어 버퍼(42)로부터 인출된다. 상기 프로그램 카운터가 마지막 디코드 리퀘스트의 프로그램 카운터와 같지 않은 경우, 단계 56에서 상기 디코더(30)는 그 필요한 명령어를 상기 L1 명령어 캐쉬(40)로부터 인출한다. 그리고, 단계 54나 단계 56으로부터 상기 인출된 명령어는, 상기 디코드 리퀘스트(24)의 마이크로 프로그램 카운터에 의해 식별된 마이크로 오퍼레이션을 발생하기 위해 단계 58에서 디코딩된다. 이 시점에서, 상기 디코더(30)는, 상기 디코드 리퀘스트에 의해 특정된 마이크로 오퍼레이션만을 발생한다. 같은 프로그램 명령어의 다른 나머지 마이크로 오퍼레이션들은, 이미 발생되었거나, 다른 나머지 디코드 리퀘스트에 따라 나중에 발생된다. 단계 60에서, 상기 공유 명령어 디코더(30)는, 새롭게 발생된 마이크로 오퍼레이션이 상기 디코딩된 프로그램 명령어들에 대한 마지막 마이크로 오퍼레이션인지를 판정한다. 상기 발생된 마이크로 오퍼레이션이 마지막 마이크로 오퍼레이션인 경우, 단계 62에서 상기 제어 플래그 L은 1에 설정되고, 또한, 아직 발생될 적어도 하나의 나머지 마이크로 오퍼레이션이 있는 경우, 상기 제어 플래그는 단계 64에서 0에 설정된다. 단계 66에서, 상기 마이크로 오퍼레이션과 상기 제어 플래그 L은, L0 명령어 캐쉬(20)에 출력된다. 단계 68에서, 상기 디코더(30)는, 본 방법이 단계 50으로 복귀할 때, 다음의 디코드 리퀘스트를 기다린다. 도 7이 단일 디코드 리퀘스트의 핸들링을 나타내고, 일부의 실시예에서, 상기 디코더(30)는 처리 사이클당 다중 디코드 리퀘스트들을 서비스할 수 있어도 되고, 이 경우에 도 7의 단계들은 수신된 디코드 리퀘스트마다 행해졌을 것이다.
도 8a 및 도 8b는 LO 명령어 캐쉬(20)에 의해 행해진 기능들을 나타낸다. 도 8a는 상기 캐쉬(20)에 마이크로 오퍼레이션들을 기억하는 방법을 나타낸다. 단계 70에서, 상기 L0 명령어 캐쉬(20)는, 상기 공유 명령어 디코더(30)로부터 마이크로 오퍼레이션을 수신한다. 단계 72에서, 상기 LO 명령어 캐쉬(20)는, 상기 마이크로 오퍼레이션과 상기 제어 플래그L을 상기 캐쉬(20)에 기억한다. 또한, 상기 캐쉬(20)는, 마이크로 오퍼레이션들이, 상기 캐쉬에 기억됨에 따라서 페치 리퀘스트들(16)에 대응하는 것을 식별할 수 있도록 상기 대응한 마이크로 오퍼레이션에 대응한 프로그램 카운터와 마이크로 프로그램 카운터를 기억한다. 예를 들면, 상기 프로그램 카운터와 상기 마이크로 프로그램 카운터는, 필요한 마이크로 오퍼레이션을 기억하는 상기 L0 명령어 캐쉬(20)의 엔트리를 위치시키는 태그로서 작동하여도 된다.
도 8b는 페치 리퀘스트(16)에 따라 상기 L0 명령어 캐쉬(20)에 의해 행해진 기능들을 나타낸다. 단계 80에서, 페치 리퀘스트는, 상기 페치부(8) 중 하나로부터 수신된다. 상기 페치 리퀘스트(16)는, 대응한 페치부(8)에 대한 프로그램 카운터(12)와 마이크로 프로그램 카운터(14)의 현재 값들을 특정한다. 단계 82에서, 상기 캐쉬(20)는, 상기 프로그램 카운터와 마이크로 프로그램 카운터에 의해 식별된 상기 요구된 마이크로 오퍼레이션이 상기 캐쉬(20)에 기억되어 있는지를 판정한다. 기억되어 있을 경우, 단계 84에서, 상기 캐쉬(20)는, 상기 페치 리퀘스트(16)를 보낸 상기 페치부(8)에, 상기 요구된 마이크로 오퍼레이션과 대응한 제어 플래그 L을 제공한다. 상기 요구된 마이크로 오퍼레이션이 상기 캐쉬에 있지 않는 경우, 단계 86에서 상기 캐쉬(20)는, 디코드 리퀘스트(24)를 명령어 디코더(30)에 보낸다. 상기 디코드 리퀘스트(24)는, 상기 디코드 리퀘스트(24)를 기동한 상기 페치 리퀘스트(16)에 구비되었던 프로그램 카운터와 상기 마이크로 프로그램 카운터를 포함한다. 그리고, 본 방법은, 단계 80으로 진행되어 상기 캐쉬(20)는 다음 페치 리퀘스트(16)를 대기한다. 또한, 상기 L0 명령어 캐쉬(20)는, 동일한 처리 사이클에서 다중 페치 리퀘스트를 병렬로 핸들링할 수도 있고, 이 경우에 도 8b의 단계들이 페치 리퀘스트마다 행해질 것이다.
도 9는 상기 페치부(8)에 의해 행해진 기능들을 나타내는 흐름도다. 단계 90에서, 상기 페치부(8)는, 인출될 다음 마이크로 오퍼레이션에 대한 대응한 마이크로 오퍼레이션 큐(6)에 공간이 있는지를 판정한다. 공간이 있을 경우, 단계 92에서, 상기 페치부(8)는, 페치 리퀘스트(16)를 L0 명령어 캐쉬(20)에 보내고, 이 페치 리퀘스트(16)는 상기 페치부(8)에서 유지한 프로그램 카운터(12)와 마이크로 프로그램 카운터(14)의 현재 값들을 가리킨다. 단계 94에서, 상기 페치부(8)는 상기 요구된 마이크로 오퍼레이션과 그 마이크로 오퍼레이션에 대응한 제어 플래그L도 수신한다. 단계 94는 상기 요구된 마이크로 오퍼레이션이 L0 캐쉬(20)에 기억되는 경우 단계 92에서 상기 페치 리퀘스트를 발행한 시점부터 얼마 지나지 않아 일어날 수도 있거나, 이들은, L0 캐쉬(20)가 먼저 상기 디코더(30)로부터 마이크로 오퍼레이션을 취득해야 하는 경우 지연이 될 수 있다. 단계 96에서, 상기 페치부(8)는, 상기 수신된 마이크로 오퍼레이션을 상기 큐(6)에 가산한다.
단계 98에서, 상기 페치부(8)는, 상기 인출된 마이크로 오퍼레이션에 대한 상기 제어 플래그 L의 값을 판정한다. 그 제어 플래그의 값이 1일 경우, 상기 인출된 마이크로 오퍼레이션이 현재의 프로그램 명령어에 대한 마지막 마이크로 오퍼레이션이고, 그래서, 단계 100에서, 상기 페치부(8)는 다음 프로그램 명령어를 가리키기 위해 상기 프로그램 카운터(12)를 증분시키고, 새로운 프로그램 명령어에 대해 인출될 제1 마이크로 오퍼레이션을 가리키기 위해 마이크로 프로그램 카운터(14)를 리셋트한다. 한편, 단계 98에서 상기 페치부(8)는 상기 제어 플래그의 값이 0일 경우, 상기 마이크로 오퍼레이션은 마지막 마이크로 오퍼레이션이 아니고, 그래서, 단계 102에서 상기 페치부(8)는 동일한 프로그램 명령어에 대해 인출될 다음 마이크로 오퍼레이션을 가리키기 위해 상기 마이크로 프로그램 카운터를 증분시키고, 상기 프로그램 카운터(12)는 증분되지 않는다. 이러한 문맥에서, "증분"이란, 상기 프로그램 카운터나 마이크로 프로그램 카운터가 인출될 다음 마이크로 오퍼레이션에 대해 필요한 값에 설정된다는 것을 의미한다. 매번 동일한 양만큼 증분될 필요는 없다. 예를 들면, 상기 프로그램 카운터는, 인접한 명령어의 어드레스들간의 간격등의 특정한 양만큼 증분되어도 되는 것일 일반적이지만, 종종 서로 다른 증분량이 될 필요도 있다. 예를 들면, 상기 페치부는 분기 예측기를 포함하여도 되고, 분기가 예측된 경우, 비순서적 명령어 페치가 행해져도 된다. 또한, 도 7 및 도 9는, 상기 제어 플래그L의 1의 값이 복합 명령어의 마지막 마이크로 오퍼레이션을 가리키고, 상기 제어 플래그L의 0의 값이 마지막 마이크로 오퍼레이션이외의 마이크로 오퍼레이션을 가리키는 일례를 나타내고, 그 밖의 예들에서 이들 값은 스와핑될 수 있거나 이 정보는 서로 다른 방식으로 나타내어질 수 있다.
본 명세서에서는 본 발명의 예시적 실시예들을 첨부도면을 참조하여 상세히 설명하였지만, 본 발명은 그들의 구체적인 실시예들에 한정되지 않고, 첨부된 청구항에서 기재된 것처럼 본 발명의 범위와 사상을 벗어나지 않고 당업자가 여러 가지로 변경 및 변형할 수 있다는 것을 알 것이다.

Claims (22)

  1. 처리하는 복수의 스레드를 병렬로 처리하도록 구성된 처리 회로소자;
    상기 처리 회로소자에서 처리할 마이크로 오퍼레이션들을 발생하기 위해 복수의 마이크로 오퍼레이션에 대응한 적어도 하나의 복합 프로그램 명령어로 이루어진 프로그램 명령어들을 디코딩하도록 구성된 공유 명령어 디코더; 및
    상기 처리 회로소자에 의해 처리하기 위해, 상기 공유 명령어 디코더에서 발생한 상기 마이크로 오퍼레이션들을 인출하도록 구성되고, 각 페치부가 상기 복수의 스레드 중 적어도 하나에 관련된, 복수의 페치부를 구비하고,
    상기 공유 명령어 디코더는, 각 마이크로 오퍼레이션을, 상기 복수의 페치부 중 하나에 의해 기동된 디코드 리퀘스트에 따라 발생하도록 구성되고,
    상기 공유 명령어 디코더는, 별개의 대응하는 디코드 리퀘스트에 따라 복합 프로그램 명령어의 복수의 마이크로 오퍼레이션 중 각각의 개별적인 마이크로 오퍼레이션을 발생하도록 구성되되, 각각의 디코드 리퀘스트는 상기 디코드 리퀘스트에 따라 상기 복합 프로그램 명령어의 어느 마이크로 오퍼레이션이 상기 공유 명령어 디코더에 의해 발생할 것인지를 식별하는, 데이터 처리장치.
  2. 제 1 항에 있어서,
    각각 상기 페치부들 중 하나에 대응하고, 상기 처리 회로소자에 의해 처리하기 위해 상기 대응한 페치부에서 인출한 마이크로 오퍼레이션들의 긴 열을 이루도록 구성된, 복수의 마이크로 오퍼레이션 큐를 구비한, 데이터 처리장치.
  3. 제 1 항 또는 제 2 항에 있어서,
    상기 페치부는, 상기 공유 명령어 디코더에 의해 발생되고 상기 처리 회로소자에 의해 처리하기 위해 인출될 선택된 마이크로 오퍼레이션을 식별하는 상기 디코드 리퀘스트를 발생하도록 구성된, 데이터 처리장치.
  4. 제 1 항 또는 제 2 항에 있어서,
    상기 공유 명령어 디코더에서 발생한 마이크로 오퍼레이션들을 기억하도록 구성된 마이크로 오퍼레이션 캐쉬를 구비한, 데이터 처리장치.
  5. 제 4 항에 있어서,
    상기 페치부는, 페치 리퀘스트를 상기 마이크로 오퍼레이션 캐쉬에 제공하여 상기 마이크로 오퍼레이션 캐쉬로부터 선택된 마이크로 오퍼레이션의 인출을 요구하도록 구성되고,
    상기 마이크로 오퍼레이션 캐쉬는, 상기 선택된 마이크로 오퍼레이션이 상기 마이크로 오퍼레이션 캐쉬에 기억되어 있지 않은 경우 상기 선택된 마이크로 오퍼레이션에 대한 디코드 리퀘스트를 기동시키도록 구성되는, 데이터 처리장치.
  6. 제 4 항에 있어서,
    상기 마이크로 오퍼레이션 캐쉬는, 상기 공유 명령어 디코더에서 지원한 처리 사이클당 디코드 리퀘스트의 수보다 처리 사이클당 페치 리퀘스트의 수가 큰 페치 리퀘스트를 지원하도록 구성되는, 데이터 처리장치.
  7. 제 1 항 또는 제 2 항에 있어서,
    상기 공유 명령어 디코더는, 마이크로 오퍼레이션마다, 상기 마이크로 오퍼레이션이 상기 대응한 프로그램 명령어에 대한 마지막 마이크로 오퍼레이션인지를 가리키는 대응한 제어 플래그를 발생하도록 구성되는, 데이터 처리장치.
  8. 제 1 항 또는 제 2 항에 있어서,
    각 페치부는 인출될 다음 마이크로 오퍼레이션을 식별하기 위해 프로그램 카운터와 마이크로 프로그램 카운터를 유지하도록 구성되고, 상기 프로그램 카운터는 상기 다음 마이크로 오퍼레이션에 대응한 프로그램 명령어를 가리키고, 상기 마이크로 프로그램 카운터는 상기 대응한 프로그램 명령어의 어느 마이크로 오퍼레이션이 상기 다음 마이크로 오퍼레이션인지를 가리키는, 데이터 처리장치.
  9. 제 8 항에 있어서,
    상기 공유 명령어 디코더는, 마이크로 오퍼레이션마다, 상기 마이크로 오퍼레이션이 상기 대응한 프로그램 명령어에 대한 마지막 마이크로 오퍼레이션인지를 가리키는 대응한 제어 플래그를 발생하도록 구성되고,
    각 페치부는,
    (i) 인출된 마이크로 오퍼레이션에 대한 상기 제어 플래그는 상기 인출된 마이크로 오퍼레이션이 대응한 프로그램 명령어에 대한 마지막 마이크로 오퍼레이션이 아닌 것을 가리키는 경우 상기 마이크로 프로그램 카운터를 증분시키고,
    (ii) 인출된 마이크로 오퍼레이션에 대한 상기 제어 플래그는 상기 인출된 마이크로 오퍼레이션이 대응한 프로그램 명령어에 대한 마지막 마이크로 오퍼레이션인 것을 가리키는 경우 상기 프로그램 카운터를 증분시키도록 구성된, 데이터 처리장치.
  10. 제 1 항 또는 제 2 항에 있어서,
    상기 공유 명령어 디코더에서 이전에 디코딩한 하나 이상의 프로그램 명령어를 기억하도록 구성된 명령어 버퍼를 구비한, 데이터 처리장치.
  11. 제 10 항에 있어서,
    특정된 프로그램 명령어에 대한 상기 디코드 리퀘스트에 따라,
    (a) 상기 특정된 프로그램 명령어가 상기 명령어 버퍼에 기억되는 경우, 상기 공유 명령어 디코더는 상기 특정된 프로그램 명령어를 상기 명령어 버퍼로부터 취득하도록 구성되고,
    (b) 상기 특정된 프로그램 명령어가 상기 명령어 버퍼에 기억되지 않는 경우, 상기 공유 명령어 디코더는 상기 특정된 프로그램 명령어를 명령어 캐쉬나 메모리로부터 취득하도록 구성되는, 데이터 처리장치.
  12. 제 10 항에 있어서,
    상기 명령어 버퍼는, 상기 공유 명령어 디코더에서 가장 최근에 디코딩한 상기 하나 이상의 프로그램 명령어를 기억하도록 구성되는, 데이터 처리장치.
  13. 제 10 항에 있어서,
    상기 명령어 버퍼는 단일 프로그램 명령어를 기억하도록 구성되는, 데이터 처리장치.
  14. 제 1 항 또는 제 2 항에 있어서,
    상기 처리 회로소자는, 상기 복수의 스레드 중 적어도 하나를 처리하도록 각각 구성된 복수의 처리부를 구비한, 데이터 처리장치.
  15. 제 1 항 또는 제 2 항에 있어서,
    상기 복수의 스레드 중 적어도 하나에 대해서, 상기 처리 회로소자는, 인스턴스마다 서로 다른 오퍼랜드와 정확히 같은 방식으로 같은 하나이상의 마이크로 오퍼레이션의 복수의 인스턴스를 병렬로 실행하도록 구성되는, 데이터 처리장치.
  16. 제 1 항 또는 제 2 항에 있어서,
    상기 처리 회로소자는, 상기 복수의 스레드 중 적어도 일부의 시분할 다중화를 행하도록 구성되는, 데이터 처리장치.
  17. 제 1 항 또는 제 2 항에 있어서,
    상기 처리 회로소자는 그래픽 처리장치(GPU)를 구비한, 데이터 처리장치.
  18. 처리하는 복수의 스레드를 병렬로 처리하는 처리수단;
    상기 처리수단에서 처리할 마이크로 오퍼레이션들을 발생하기 위해 복수의 마이크로 오퍼레이션에 대응한 적어도 하나의 복합 프로그램 명령어로 이루어진 프로그램 명령어들을 디코딩하는 공유 명령어 디코딩 수단; 및
    상기 처리수단에 의해 처리하기 위해, 상기 공유 명령어 디코딩 수단에서 발생한 상기 마이크로 오퍼레이션들을 인출하되, 각 페치수단이 상기 복수의 스레드 중 적어도 하나에 관련된, 복수의 페치수단을 구비하고,
    상기 공유 명령어 디코딩 수단은 각 마이크로 오퍼레이션을, 상기 복수의 페치수단 중 하나에 의해 기동된 디코드 리퀘스트에 따라 발생하도록 구성되고,
    상기 공유 명령어 디코딩 수단은, 별개의 대응하는 디코드 리퀘스트에 따라 복합 프로그램 명령어의 복수의 마이크로 오퍼레이션 중 각각의 개별적인 마이크로 오퍼레이션을 발생하도록 구성되되, 각각의 디코드 리퀘스트는 상기 디코드 리퀘스트에 따라 상기 복합 프로그램 명령어의 어느 마이크로 오퍼레이션이 상기 공유 명령어 디코딩 수단에 의해 발생할 것인지를 식별하는, 데이터 처리장치.
  19. 처리할 마이크로 오퍼레이션들을 발생하기 위해 공유 명령어 디코더에 의해 복수의 마이크로 오퍼레이션에 대응한 적어도 하나의 프로그램 명령어로 이루어진 프로그램 명령어들을 디코딩하는 단계; 및
    상기 공유 명령어 디코더에서 발생한 상기 마이크로 오퍼레이션들을 처리하기 위해, 병렬로 처리된 복수의 스레드 중 적어도 하나에 각 페치부가 관련된 복수의 페치부에 의해 인출하는 단계를 포함하고,
    각 마이크로 오퍼레이션은, 상기 복수의 페치부 중 하나에 의해 기동된 디코드 리퀘스트에 따라 상기 공유 명령어 디코더에 의해 발생되고,
    상기 공유 명령어 디코더는, 별개의 대응하는 디코드 리퀘스트에 따라 복합 프로그램 명령어의 복수의 마이크로 오퍼레이션 중 각각의 개별적인 마이크로 오퍼레이션을 발생하도록 구성되되, 각각의 디코드 리퀘스트는 상기 디코드 리퀘스트에 따라 상기 복합 프로그램 명령어의 어느 마이크로 오퍼레이션이 상기 공유 명령어 디코더에 의해 발생할 것인지를 식별하는, 데이터 처리방법.
  20. 제 19 항에 있어서,
    제1 복합 프로그램 명령어의 제1 마이크로 오퍼레이션을 식별하는 제1 디코드 리퀘스트에 따라, 상기 제1 마이크로 오퍼레이션을 발생하기 위해 상기 제1 복합 프로그램 명령어를 디코딩하는 단계;
    제2 복합 프로그램 명령어의 선택된 마이크로 오퍼레이션을 식별하는 제2 디코드 리퀘스트에 따라, 상기 선택된 마이크로 오퍼레이션을 발생하기 위해 상기 제2 복합 프로그램 명령어를 디코딩하는 단계; 및
    상기 제1 복합 프로그램 명령어의 제2 마이크로 오퍼레이션을 식별하는 제3 디코드 리퀘스트에 따라, 상기 제2 마이크로 오퍼레이션을 발생하기 위해 상기 제1 복합 프로그램 명령어를 디코딩하는 단계를 포함하는, 데이터 처리방법.
  21. 삭제
  22. 삭제
KR1020140127455A 2013-10-09 2014-09-24 다수의 마이크로 오퍼레이션에 대응한 복합 프로그램 명령어의 디코딩 KR102271986B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1317857.9A GB2519103B (en) 2013-10-09 2013-10-09 Decoding a complex program instruction corresponding to multiple micro-operations
GB1317857.9 2013-10-09

Publications (2)

Publication Number Publication Date
KR20150041740A KR20150041740A (ko) 2015-04-17
KR102271986B1 true KR102271986B1 (ko) 2021-07-02

Family

ID=49630421

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140127455A KR102271986B1 (ko) 2013-10-09 2014-09-24 다수의 마이크로 오퍼레이션에 대응한 복합 프로그램 명령어의 디코딩

Country Status (4)

Country Link
US (1) US9934037B2 (ko)
KR (1) KR102271986B1 (ko)
CN (1) CN104572016B (ko)
GB (1) GB2519103B (ko)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10140129B2 (en) * 2012-12-28 2018-11-27 Intel Corporation Processing core having shared front end unit
US10496412B2 (en) 2016-02-08 2019-12-03 International Business Machines Corporation Parallel dispatching of multi-operation instructions in a multi-slice computer processor
US10324730B2 (en) * 2016-03-24 2019-06-18 Mediatek, Inc. Memory shuffle engine for efficient work execution in a parallel computing system
CN106066786A (zh) * 2016-05-26 2016-11-02 上海兆芯集成电路有限公司 处理器以及处理器操作方法
US10838871B2 (en) * 2016-11-07 2020-11-17 International Business Machines Corporation Hardware processor architecture having a hint cache
US10606599B2 (en) * 2016-12-09 2020-03-31 Advanced Micro Devices, Inc. Operation cache
US10324726B1 (en) * 2017-02-10 2019-06-18 Apple Inc. Providing instruction characteristics to graphics scheduling circuitry based on decoded instructions
GB2572578B (en) * 2018-04-04 2020-09-16 Advanced Risc Mach Ltd Cache annotations to indicate specultative side-channel condition
US10896044B2 (en) * 2018-06-21 2021-01-19 Advanced Micro Devices, Inc. Low latency synchronization for operation cache and instruction cache fetching and decoding instructions
US10884751B2 (en) 2018-07-13 2021-01-05 Advanced Micro Devices, Inc. Method and apparatus for virtualizing the micro-op cache
CN110825436B (zh) * 2018-08-10 2022-04-29 昆仑芯(北京)科技有限公司 应用于人工智能芯片的计算方法和人工智能芯片
CN109101276B (zh) * 2018-08-14 2020-05-05 阿里巴巴集团控股有限公司 在cpu中执行指令的方法
GB2577738B (en) 2018-10-05 2021-02-24 Advanced Risc Mach Ltd An apparatus and method for providing decoded instructions
US11500803B2 (en) * 2019-09-03 2022-11-15 Qorvo Us, Inc. Programmable slave circuit on a communication bus
US11726783B2 (en) * 2020-04-23 2023-08-15 Advanced Micro Devices, Inc. Filtering micro-operations for a micro-operation cache in a processor
CN111679856B (zh) * 2020-06-15 2023-09-08 上海兆芯集成电路股份有限公司 高效能复杂指令译码的微处理器
US20220100519A1 (en) * 2020-09-25 2022-03-31 Advanced Micro Devices, Inc. Processor with multiple fetch and decode pipelines
US11595154B1 (en) * 2021-09-24 2023-02-28 Apple Inc. Instruction-based multi-thread multi-mode PDCCH decoder for cellular data device
CN114201219B (zh) * 2021-12-21 2023-03-17 海光信息技术股份有限公司 指令调度方法、指令调度装置、处理器及存储介质
CN115525344B (zh) * 2022-10-31 2023-06-27 海光信息技术股份有限公司 一种译码方法、处理器、芯片及电子设备
CN115525343B (zh) * 2022-10-31 2023-07-25 海光信息技术股份有限公司 一种并行译码的方法、处理器、芯片及电子设备

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5574883A (en) * 1993-11-30 1996-11-12 Unisys Corporation Single chip processing unit providing immediate availability of frequently used microcode instruction words
US6535905B1 (en) * 1999-04-29 2003-03-18 Intel Corporation Method and apparatus for thread switching within a multithreaded processor
US6671795B1 (en) 2000-01-21 2003-12-30 Intel Corporation Method and apparatus for pausing execution in a processor or the like
US7856633B1 (en) * 2000-03-24 2010-12-21 Intel Corporation LRU cache replacement for a partitioned set associative cache
US7353364B1 (en) * 2004-06-30 2008-04-01 Sun Microsystems, Inc. Apparatus and method for sharing a functional unit execution resource among a plurality of functional units
EP1622009A1 (en) * 2004-07-27 2006-02-01 Texas Instruments Incorporated JSM architecture and systems
JP2011113457A (ja) * 2009-11-30 2011-06-09 Nec Corp 同時マルチスレッディングプロセッサ、制御方法、プログラム、コンパイル方法、及び情報処理装置

Also Published As

Publication number Publication date
US20150100763A1 (en) 2015-04-09
CN104572016A (zh) 2015-04-29
GB2519103B (en) 2020-05-06
US9934037B2 (en) 2018-04-03
GB2519103A (en) 2015-04-15
KR20150041740A (ko) 2015-04-17
CN104572016B (zh) 2019-05-31
GB201317857D0 (en) 2013-11-20

Similar Documents

Publication Publication Date Title
KR102271986B1 (ko) 다수의 마이크로 오퍼레이션에 대응한 복합 프로그램 명령어의 디코딩
US7734897B2 (en) Allocation of memory access operations to memory access capable pipelines in a superscalar data processing apparatus and method having a plurality of execution threads
US5903750A (en) Dynamic branch prediction for branch instructions with multiple targets
US7702888B2 (en) Branch predictor directed prefetch
US20140095847A1 (en) Instruction and highly efficient micro-architecture to enable instant context switch for user-level threading
JP2006260571A (ja) デュアルスレッドプロセッサ
US20080126770A1 (en) Methods and apparatus for recognizing a subroutine call
US20170364356A1 (en) Techniques for implementing store instructions in a multi-slice processor architecture
US7620804B2 (en) Central processing unit architecture with multiple pipelines which decodes but does not execute both branch paths
US10049043B2 (en) Flushing control within a multi-threaded processor
US20140189300A1 (en) Processing Core Having Shared Front End Unit
US20080005534A1 (en) Method and apparatus for partitioned pipelined fetching of multiple execution threads
US9223577B2 (en) Processing multi-destination instruction in pipeline by splitting for single destination operations stage and merging for opcode execution operations stage
EP3575955B1 (en) Indirect memory fetcher
US20220035635A1 (en) Processor with multiple execution pipelines
GB2483903A (en) Instruction which specifies the type of the next instruction to be executed
US20040133432A1 (en) Method and apparatus to determine readiness of a complex instruction for retirement
KR101420592B1 (ko) 컴퓨터 시스템
JP5696210B2 (ja) プロセッサ及びその命令処理方法
US20040128476A1 (en) Scheme to simplify instruction buffer logic supporting multiple strands
CN114514505A (zh) 退役队列压缩
US20050160254A1 (en) Multithread processor architecture for triggered thread switching without any clock cycle loss, without any switching program instruction, and without extending the program instruction format
US20230195456A1 (en) System, apparatus and method for throttling fusion of micro-operations in a processor
US20220308887A1 (en) Mitigation of branch misprediction penalty in a hardware multi-thread microprocessor
US20040128488A1 (en) Strand switching algorithm to avoid strand starvation

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant