KR100837400B1 - 멀티스레딩/비순차 병합 기법에 따라 처리하는 방법 및장치 - Google Patents

멀티스레딩/비순차 병합 기법에 따라 처리하는 방법 및장치 Download PDF

Info

Publication number
KR100837400B1
KR100837400B1 KR1020060068216A KR20060068216A KR100837400B1 KR 100837400 B1 KR100837400 B1 KR 100837400B1 KR 1020060068216 A KR1020060068216 A KR 1020060068216A KR 20060068216 A KR20060068216 A KR 20060068216A KR 100837400 B1 KR100837400 B1 KR 100837400B1
Authority
KR
South Korea
Prior art keywords
instruction
thread
source operand
value
threads
Prior art date
Application number
KR1020060068216A
Other languages
English (en)
Other versions
KR20080008683A (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 삼성전자주식회사
Priority to KR1020060068216A priority Critical patent/KR100837400B1/ko
Priority to US11/806,981 priority patent/US20080022072A1/en
Publication of KR20080008683A publication Critical patent/KR20080008683A/ko
Application granted granted Critical
Publication of KR100837400B1 publication Critical patent/KR100837400B1/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/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
    • 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
    • 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
    • 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/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
    • 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

Abstract

본 발명은 데이터의 연산을 실행하는 프로세서와 관한 것으로, 본 발명에 따른 멀티스레딩/비순차 병합 처리 방법은 적어도 하나 이상의 명령어를 해독하고, 이 해독 결과에 기초하여 명령어의 스레드를 독출하고, 이 해독 결과에 기초하여 복수의 파이프라인 스테이지들 각각에서 독출된 스레드를 포함하는 복수의 스레드들 각각에 대한 소정 연산을 비순차적으로 실행함으로써 적은 개수의 스레드를 유지하면서도 높은 처리율을 보장할 수 있다.

Description

멀티스레딩/비순차 병합 기법에 따라 처리하는 방법 및 장치{Method and apparatus for processing according to multi-threading/out-of-order merged scheme}
도 1은 종래의 멀티스레딩 기법에 따른 프로세서를 도시한 도면이다.
도 2는 종래의 비순차 기법에 따른 프로세서를 도시한 도면이다.
도 3은 본 발명의 바람직한 일 실시예에 따른 멀티스레딩/비순차 병합 처리 장치의 구성도이다.
도 4는 도 3에 도시된 멀티 스레드/비순차 병합 처리 장치에서의 명령어 파이프라인의 구조를 도시한 도면이다.
도 5는 종래의 멀티스레딩 기법에 따른 연산 파이프라인의 구조를 도시한 도면이다.
도 6은 종래의 멀티스레딩/비순차 병합 기법에 따른 연산 파이프라인의 구조를 도시한 도면이다.
도 7a-d는 본 발명의 바람직한 일 실시예에 따른 멀티스레딩/비순차 병합 처리 방법의 흐름도이다.
도 8은 다양한 연산 파이프라인 구조에 요구되는 1 비트 레지스터의 총 개수를 나타내는 그래프를 도시한 도면이다.
도 9는 다양한 연산 파이프라인 구조에 따른 시스템의 평균 처리율을 나타내는 그래프를 도시한 도면이다.
도 10은 다양한 연산 파이프라인 구조에 따른 시스템의 비용 대비 성능을 나타내는 그래프를 도시한 도면이다.
본 발명은 데이터의 연산을 실행하는 프로세서와 관한 것으로, 특히 멀티스레딩 기법에 따라 데이터의 연산을 실행하는 프로세서와 관한 것이다.
종래의 파이프라인 구조 하에서 시스템의 성능을 저하시키는 요인으로는 데이터 의존(data dependency), 제어 의존(control dependency), 자원 충돌(resource conflict) 등이 있었다. 데이터 의존과 제어 의존을 해소하기 위해서는 어떤 명령어가 의존하고 있는 다른 명령어의 실행이 전자의 명령어가 실행되기 이전에 완료되어야 한다. 데이터 의존의 경우, 어떤 명령어가 의존하고 있는 명령어의 바로 다음에 처리될 경우에 기능부(functional unit)의 레이턴시(latency)만큼 전체 파이프라인을 정지(stall)시켜야만 하고, 이것은 처리율(throughput)의 저하로 이어진다. 또한, 제어 종속의 경우에도 특정 명령어의 해독(decode)이 끝나야만 다음에 페치(fetch)할 명령어를 알 수 있기 때문에 한 사이클의 정지가 발생하게 된다. 반면에, 자원 충돌은 복수 개의 파이프라인이 존재하여 두 개 이상의 명령어가 하나의 기능부를 사용하는 경우에 발생하게 된다.
도 1은 종래의 멀티스레딩 기법에 따른 프로세서를 도시한 도면이다.
도 1을 참조하면, 종래의 멀티스레딩 기법에 따른 프로세서는 명령어 메모리(101), 레지스터 파일(102), 입력 버퍼(103), 상수 메모리(constant memory)(104), 벡터 연산부(105), 스칼라 연산부(106), 출력 버퍼(107) 등으로 구성된다.
일반적인 3차원 그래픽 데이터는 완벽하게 독립적이며 상당히 방대하다. 이러한 데이터를 효율적으로 처리하기 위해서, 데이터 의존과 제어 의존을 완벽하게 해소하면서 처리율을 최대화할 수 있도록 하는 멀티스레딩(multi-threading) 기법을 사용하고 있다. 도 1에 도시된 바와 같은 종래의 멀티스레딩 기법에 따른 프로세서는 사이클 당 최대 1 개의 명령어만을 하나의 기능부, 즉 벡터 연산부(105) 및 스칼라 연산부(106) 중 어느 하나에게만 할당함으로 자원 충돌은 발생하지 않는다.
멀티스레딩 기법을 사용할 경우에, 충분한 수의 스레드를 유지한다면 최대 처리율이 모든 경우에 가능하다는 장점이 있다. 멀티스레딩 기법은 대부분의 마이크로프로세서들이 지향하고 있는 명령어 병행 기법(ILP, Instruction Level Parallelism)보다는 데이터 병행 기법(data parallelism)을 사용한다. 즉, 멀티스레딩 기법은 어떤 데이터에 대한 모든 처리를 한 후에 다음 데이터를 처리하는 것이 아니라, 여러 개의 데이터를 돌아가면서 하나의 명령어를 적용하고 모든 데이터가 이 명령어에 의하여 처리되었을 때 다음 명령어로 넘어가면서 이와 같은 작업을 반복적으로 수행한다.
멀티스레딩의 장점은 상기된 바와 같이 최대의 처리율을 보장할 수 있다는 장점이 있으나, 최대의 처리율을 보장하기 위해서는 벡터 연산부(105), 스칼라 연산부(106) 등과 같은 기능부에서의 레이턴시만큼의 스레드를 유지해야 하고, 이것은 이러한 스레드를 저장하는 입력 버퍼(103) 및 출력 버퍼(107)의 용량 증가로 이어진다. 만약, 3차원 그래픽 데이터를 처리하는 프로세서와 같이, 기능부에서의 레이턴시가 막대할 경우에 매우 큰 용량의 입력 버퍼와 출력 버퍼들을 필요하게 되었고, 이에 따라 입력 버퍼와 출력 버퍼를 구성하는 레지스터 비용이 상당하다는 문제점이 있었다.
본 발명이 이루고자 하는 기술적 과제는 입력 버퍼와 출력 버퍼를 구성하는 레지스터 비용의 줄이기 위하여 적은 개수의 스레드를 유지하면서도 높은 처리율을 달성할 수 있게 하는 장치 및 방법을 제공하는데 있다. 또한, 상기된 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체를 제공하는데 있다.
상기 기술적 과제를 해결하기 위한 본 발명에 따른 멀티스레딩/비순차 병합 처리 방법은 적어도 하나 이상의 명령어를 해독하고, 상기 해독 결과에 기초하여 상기 명령어의 스레드를 독출하는 단계; 및 상기 해독 결과에 기초하여 복수의 파이프라인 스테이지들 각각에서 상기 독출된 스레드를 포함하는 복수의 스레드들 각각에 대한 소정 연산을 비순차적으로 실행하는 단계를 포함한다.
상기 다른 기술적 과제를 해결하기 위하여, 본 발명은 상기된 멀티스레딩/비 순차 병합 처리 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체를 제공한다.
상기 또 다른 기술적 과제를 해결하기 위한 본 발명에 따른 멀티스레딩/비순차 병합 처리 장치는 적어도 하나 이상의 명령어를 해독하고, 상기 해독 결과에 기초하여 상기 명령어의 스레드를 독출하는 해독부; 및 상기 해독 결과에 기초하여 복수의 파이프라인 스테이지들 각각에서 상기 독출된 스레드를 포함하는 복수의 스레드들 각각에 대한 소정 연산을 비순차적으로 실행하는 연산부를 포함한다.
이하에서는 도면을 참조하여 본 발명의 바람직한 실시예들을 상세히 설명한다. 본 실시예들은 상기된 바와 같은 멀티스레딩 기법의 문제점을 해결하기 위하여 멀티스레딩 기법에 토마수로(Tomasulo) 알고리즘을 기반으로 하는 비순차(out-of-order) 기법을 병합시키는 새로운 알고리즘을 제안한다. 이하에서의 본 실시예들의 이해를 돕기 위하여 종래의 비순차 기법에 따른 프로세서를 살펴보기로 한다.
도 2는 종래의 비순차 기법에 따른 프로세서를 도시한 도면이다.
도 2를 참조하면, 종래의 비순차 기법에 따른 프로세서는 페치부(201), 해독부(202), 레지스터 파일(203), 태그부(tag unit)(204), 예약 스테이션들(205), 기능부(functional unit)(206), 로드 레지스터(207), 및 메모리(208)로 구성된다.
현존하는 대부분의 마이크로프로세서는 명령어를 원래의 순서와 다르게 실행한다. 이렇게 처리하는 이유는 궁극적으로 슈퍼스칼라(superscalar) 구조와 같이 복수 개의 파이프라인이 존재할 때 어느 특정 시간에 모든 파이프라인을 서로 연관이 없는 명령어들로 채워 넣기 위해서이다. 만약, 어떤 명령어가 다른 명령어의 결 과를 가지고, 다시 연산을 한다면 전자의 명령어는 의존(dependent)하고 있는 후자의 명령어의 연산이 끝날 때까지 하나의 파이프라인을 점유하면서 아무 연산도 하지 못하고 정지 상태로 대기하여야 한다. 이에 따라, 이렇게 의존하고 있는 명령어를 파이프라인으로 집어넣는 것을 보류하고, 다른 연관이 없는 명령어를 찾아서 파이프라인에 집어넣음으로써 모든 파이프라인이 쉬지 않고 돌아갈 수 있도록 하는 것이다. 이와 같이, 다른 명령어에 의존하고 있는 명령어의 실행을 잠시 보류하고 있다가 나중에 실행이 되기 때문에 원래의 명령어의 실행 순서와는 다른 순서로 명령어의 실행이 완료되게 된다. 이것을 비순차 기법이라고 하며, 토마수로에 의해 제안되었다.
도 2에 도시된 프로세서는 고전적인 토마수로 알고리즘을 확장한 것으로써 이것에 대한 상세한 설명은 IEEE 문서 "Instruction Issue Logic for High-Performance, Interruptible, Multiple Functional Unit, Pipelined Computers" (IEEE transactions on computers, VOL. 39, MARCH 1990)에 기재되어 있다. 이와 같은 시스템의 최대 난점은 현재 처리되고 있거나 처리 직전인 명령어와 연관이 없는 독립적인 명령어를 충분히 많이 찾아내는 것이 매우 어렵다는 것이다. 이러한 문제는 파이프라인의 개수가 많아지면 많아질수록 더욱 심각해진다. 이하의 실시예들에서는 멀티스레딩 기법과 이와 같은 비순차 기법을 병합시킴으로써 양자의 장점을 최대한 살려 비용 대비 성능을 최대화한다.
도 3은 본 발명의 바람직한 일 실시예에 따른 멀티스레딩/비순차 병합 처리 장치의 구성도이다.
도 3을 참조하면, 본 실시예에 따른 멀티 스레드/비순차 병합 처리 장치는 페치부(301), 명령어 메모리(302), 제 1 파이프라인 레지스터(303), 해독부(304), 입력 버퍼(305), 레지스터 파일(306), 태그 풀(307), 제 2 파이프라인 레지스터(308), 제 1 예약 스테이션(309), 제 2 예약 스테이션(310), 벡터 연산부(311), 스칼라 연산부(312), 제 3 파이프라인 레지스터(313), 및 출력 버퍼(314)로 구성된다. 특히, 본 실시예에서의 복수의 스레드들 각각은 그 데이터간의 연계성이 없는 다수의 독립적인 데이터로 정의하기로 한다. 이러한 데이터의 예로는 3차원 그래픽 데이터를 그 예로 들 수 있다.
도 4는 도 3에 도시된 멀티 스레드/비순차 병합 처리 장치에서의 명령어 파이프라인의 구조를 도시한 도면이다.
도 4를 참조하면, 도 3에 도시된 멀티 스레드/비순차 병합 처리 장치에서의 명령어 파이프라인은 페치, 해독, 실행, 및 기입 등 4 개의 파이프라인 스테이지(stage)들로 구성된다. 멀티 스레드/비순차 병합 처리 장치는 첫 번째 사이클에서 명령어 I0을 페치한다. 이어서, 멀티 스레드/비순차 병합 처리 장치는 두 번째 사이클에서 명령어 I1을 페치하고, 이미 페치된 명령어 I0을 해독한다. 이어서, 멀티 스레드/비순차 병합 처리 장치는 세 번째 사이클에서 명령어 I2를 페치하고, 이미 페치된 명령어 I1을 해독하고, 이미 해독된 명령어 I0을 실행한다. 이어서, 멀티 스레드/비순차 병합 처리 장치는 네 번째 사이클에서 명령어 I3을 페치하고, 이미 페치된 명령어 I2를 해독하고, 이미 해독된 명령어 I1을 실행하고, 이미 실행된 명령어 I0을 기입한다. 이상과 같은 파이프라인 구조에 따라 멀티 스레드/비순차 병합 처리 장치는 하나의 사이클 동안 하나의 명령어에 대한 페치, 해독, 실행, 및 기입을 모두 완료할 수 있으며, 이에 따라 명령어의 처리율(throughput)이 최대가 된다.
이하에서는 이상과 같은 명령어 파이프라인 구조를 기반으로 하는 멀티 스레드/비순차 병합 처리 장치의 구성 요소들 각각을 자세히 설명하기로 한다.
페치부(301)는 한 사이클마다 명령어 메모리(302)로부터 적어도 하나 이상의 명령어를 페치하고, 이것을 제 1 파이프라인 레지스터(303)에 저장한다. 본 실시예에 따른 멀티 스레드/비순차 병합 처리 장치의 하드웨어 성능이 우수할수록, 페치부(301)는 한 사이클마다 보다 많은 명령어들을 페치할 수 있다.
해독부(304)는 한 사이클마다 페치부(301)에 의해 페치된 명령어, 즉 제 1 파이프라인 레지스터(303)에 저장된 명령어들 중 적어도 하나 이상의 명령어를 해독하고, 그 해독 결과에 기초하여 이 명령어가 사용할 연산부로서 벡터 연산부(311) 및 스칼라 연산부(312) 중 어느 하나를 선택한다. 즉, 명령어의 해독 결과가 이 명령어의 연산이 벡터 연산을 나타내면, 해독부(304)는 벡터 연산부(311)를 선택한다. 만약, 그 해독 결과가 이 명령어의 연산이 스칼라 연산을 나타내면, 해독부(304)는 스칼라 연산부(312)를 선택한다. 본 실시예에 따른 멀티 스레드/비순차 병합 처리 장치의 하드웨어 성능이 우수할수록, 해독부(304)는 한 사이클마다 보다 많은 명령어들을 해독할 수 있을 것이다.
이어서, 해독부(304)는 이와 같이 선택된 벡터 연산부(311) 또는 스칼라 연산부(312)에 연결된 적어도 하나 이상의 예약 스테이션의 사용 여부를 검사하고, 그 검사 결과에 기초하여 미사용 중인 예약 스테이션 하나를 확보한다.
또한, 해독부(304)는 명령어의 해독 결과에 기초하여 이 명령어의 스레드에 해당하는 적어도 하나 이상의 소스 오퍼랜드(source operand)를 입력 버퍼(305) 또는 레지스터 파일(306)로부터 독출하고, 이것을 제 2 파이프라인 레지스터(308)에 저장한다. 만약, 소스 오퍼랜드가 입력 버퍼(305)로부터 독출된 경우라면, 해독부(304)는 상기된 바에 따라 확보된 예약 스테이션에 이 소스 오퍼랜드를 저장하고, 이것과 함께 이 소스 오퍼랜드가 소정 연산의 실행에 대한 준비가 완료되었음을 나타내는 T(True) 값을 이 예약 스테이션의 준비 필드에 저장한다. 본 실시예에서, 준비 필드는 어떤 소스 오퍼랜드가 소정 연산의 실행에 대한 준비가 완료되었는지를 나타내는 값, 즉 어떤 소스 오퍼랜드의 값이 다른 명령어의 대상 오퍼랜드의 값에 의해 변경되는지를 나타내는 값이 기록되는 필드이다. 상기된 저장들은 제 2 파이프라인 레지스터(308)를 경유하여야 하나, 이하에서는 이것을 생략하고 상기된 바와 마찬가지로 해독부(304)가 바로 예약 스테이션에 저장하는 것으로 표현하기로 한다.
물론, 해독부(304)는 상기된 바에 따라 확보된 예약 스테이션에 소스 오퍼랜드가 저장되었음을 나타내는 값 및 이 소스 오퍼랜드에 대한 연산을 나타내는 값 등도 함께 저장할 수 있음을 본 실시예가 속하는 기술 분야에서 통상의 지식을 가진 자라면 이해할 수 있으며, 이하에서도 마찬가지이다.
만약, 소스 오퍼랜드가 레지스터 파일(306) 중 복수의 독출/기입(read/write)들이 가능한 임시 레지스터 파일(3061)로부터 독출된 경우라면, 이 소스 오퍼랜드의 값은 이후에 변경될 수 있기 때문에 해독부(304)는 이 소스 오퍼랜드와 함께 이 소스 오퍼랜드가 저장되어 있는 레지스터의 준비 필드의 값과 태그 필드의 값도 독출하고, 상기된 바에 따라 확보된 예약 스테이션에 이와 같이 독출된 소스 오퍼랜드, 준비 필드의 값, 및 태그 필드의 값도 저장한다.
레지스터 파일(306)은 복수의 독출/기입들이 가능한 임시 레지스터 파일(3061) 및 독출만이 가능한 다른 레지스터 파일(3062)로 구성된다. 다른 레지스터 파일(3062)은 독출만이 가능하기 때문에 이것으로부터 독출된 소스 오퍼랜드는 입력 버퍼(305)로부터 독출된 소스 오퍼랜드와 마찬가지로 상기된 바에 같이 처리된다.
또한, 해독부(304)는 명령어의 해독 결과에 기초하여 이 명령어의 대상 오퍼랜드(destination operand)가 임시 레지스터 파일(3061)인지를 판단하고, 그 판단 결과가 이 명령어의 대상 오퍼랜드의 저장 장소가 임시 레지스터 파일(3061)임을 나타내면, 태그풀(307)에 저장된 미사용 태그들 중 어느 하나를 이 대상 오퍼랜드의 저장 장소에 해당하는 레지스터에 할당하고, 이 레지스터의 준비 필드의 값을 이 대상 오퍼랜드의 값으로 그 값을 설정하는 소스 오퍼랜드가 소정 연산의 실행에 대한 준비가 완료되지 않았음을 나타내는 F(False) 값으로 저장한다.
여기에서, 태그는 레지스터의 물리적 주소를 단순히 1번, 2번, 3번 등의 정수 인덱스로 치환하는 역할을 한다. 레지스터에 대해서는 다수의 대상 오퍼랜드들의 독출/기입이 이루어지기 때문에 레지스터의 인덱스에 해당하는 물리적 주소만으로는 오퍼랜드를 식별할 수 없다는 문제가 있었다. 본 실시예에서는 대상 오퍼랜드 들마다 서로 다른 태그를 할당함으로써 이러한 문제를 해결하였다.
도 5는 종래의 멀티스레딩 기법에 따른 연산 파이프라인의 구조를 도시한 도면이다.
도 5를 참조하면, 종래의 멀티스레딩 기법에 따른 파이프라인 구조는 4 개의 파이프라인 스테이지들로 구성된다. 도 5에서의 "T4R0"은 스레드가 4개, 예약 스테이션은 0개임을 나타내며, 결국 이것은 비순차 기법이 적용되지 않는 종래의 멀티스레딩 기법임을 나타낸다. 4 개의 파이프라인 스테이지들 각각은 하나의 사이클 동안 그 처리가 완료되는 가산기(adder), 곱셈기(multiplier) 등이 될 수 있다. 도 4에 도시된 명령어 파이프라인 구조는 모든 파이프라인 스테이지들 각각이 하나의 사이클동안 완료됨을 전제로 한다. 그러나, 파이프라인 스테이지들 중 특히 실행 스테이지는 보통 몇 사이클을 요구한다. 따라서, 종래의 멀티스레딩 기법에 따르면, 여러 개의 스레드들에 대해 하나의 연산을 동시에 실행함으로써 이와 같은 실행 스테이지에서의 레이턴시를 숨기고자 하였다.
즉, 첫 번째 사이클에서 명령어 I0에 따라 소스 오퍼랜드 D0에 대한 첫 번째 스테이지의 연산을 실행한다. 두 번째 사이클에서 명령어 I0에 따라 소스 오퍼랜드 D1에 대한 첫 번째 스테이지의 연산을 실행하고, 명령어 I0에 따라 소스 오퍼랜드 D0에 대한 두 번째 스테이지의 연산을 실행한다. 세 번째 사이클에서 명령어 I0에 따라 소스 오퍼랜드 D2에 대한 첫 번째 스테이지의 연산을 실행하고, 명령어 I0에 따라 소스 오퍼랜드 D1에 대한 두 번째 스테이지의 연산을 실행하고, 명령어 I0에 따라 소스 오퍼랜드 D0에 대한 세 번째 스테이지의 연산을 실행한다. 네 번째 사이 클에서 명령어 I0에 따라 소스 오퍼랜드 D3에 대한 첫 번째 스테이지의 연산을 실행하고, 명령어 I0에 따라 소스 오퍼랜드 D2에 대한 두 번째 스테이지의 연산을 실행하고, 명령어 I0에 따라 소스 오퍼랜드 D1에 대한 세 번째 스테이지의 연산을 실행하고, 명령어 I0에 따라 소스 오퍼랜드 D0에 대한 네 번째 스테이지의 연산을 실행한다. 이상과 같은 파이프라인 구조에 따라 종래의 멀티스레딩 기법은 하나의 사이클 동안 실행 스테이지를 모두 완료할 수 있으며, 이에 따라 연산의 처리율(throughput)이 최대가 된다.
종래의 멀티스레딩 기법은 최대 처리율을 보장한다는 장점은 있으나, 멀티스레딩 기법의 특성상 실행 스테이지에서의 레이턴시만큼의 스레드들을 유지해야만 한다. 즉, 종래의 멀티스레딩 기법은 연산 파이프라인의 스테이지들의 개수만큼의 입력 버퍼들과 출력 버퍼들을 구비하여야 한다. 그러나, 실행 스테이지의 막대한 레이턴시로 인하여 매우 큰 용량의 입력 버퍼와 출력 버퍼들을 필요하게 되었고, 이에 따라 입력 버퍼와 출력 버퍼를 구성하는 레지스터 비용이 상당하다는 문제점이 있었다. 본 실시예에서는 이와 같은 문제점을 해결하기 위하여 다음과 같은 멀티스레딩/비순차 병합 기법에 따른 연산 파이프라인 구조를 제안하였다.
도 6은 종래의 멀티스레딩/비순차 병합 기법에 따른 연산 파이프라인의 구조를 도시한 도면이다.
도 6을 참조하면, 종래의 멀티스레딩/비순차 병합 기법에 따른 파이프라인 구조는 4 개의 파이프라인 스테이지들로 구성된다. 도 5에서의 "T2R2"는 스레드가 2개, 예약 스테이션은 2개임을 나타내며, 결국 이것은 멀티스레딩 기법 및 비순차 기법이 동시에 적용되는 본 실시예에 따른 기법임을 나타낸다. 4 개의 파이프라인 스테이지들 각각은 하나의 사이클 동안 그 처리가 완료되는 가산기, 곱셈기 등이 될 수 있다. 일반적으로, 멀티스레딩 기법 상에서 연산 파이프라인의 스테이지들의 개수보다 입력 버퍼와 출력 버퍼의 개수가 적은 경우, 도 5에 도시된 구조에 비해 한 번에 처리되는 데이터, 즉 한 번에 처리되는 소스 오퍼랜드의 개수는 적게 된다. 이에 따라, 도 5에 도시된 구조에 비해 명령어가 자주 변경되게 되고, 그 결과 데이터 의존(data dependency)에 따른 파이프라인 정지(stall)가 자주 발생하게 된다.
따라서, 본 실시예에서는 멀티스레딩 기법과 비순차 기법을 병합시킴으로써 입력 버퍼와 출력 버퍼의 개수가 적음에 따라 발생되는 파이프라인 정지를 해결하고자 하였다. 즉, 첫 번째 사이클에서 명령어 I0에 따라 소스 오퍼랜드 D0에 대한 첫 번째 스테이지의 연산을 실행한다. 두 번째 사이클에서 명령어 I0에 따라 소스 오퍼랜드 D1에 대한 첫 번째 스테이지의 연산을 실행하고, 명령어 I0에 따라 소스 오퍼랜드 D0에 대한 두 번째 스테이지의 연산을 실행한다.
세 번째 사이클에서 명령어 I2에 따라 소스 오퍼랜드 D4에 대한 첫 번째 스테이지의 연산을 실행하고, 명령어 I0에 따라 소스 오퍼랜드 D1에 대한 두 번째 스테이지의 연산을 실행하고, 명령어 I0에 따라 소스 오퍼랜드 D0에 대한 세 번째 스테이지의 연산을 실행한다. 네 번째 사이클에서 명령어 I2에 따라 소스 오퍼랜드 D5에 대한 첫 번째 스테이지의 연산을 실행하고, 명령어 I2에 따라 소스 오퍼랜드 D4에 대한 두 번째 스테이지의 연산을 실행하고, 명령어 I0에 따라 소스 오퍼랜드 D1에 대한 세 번째 스테이지의 연산을 실행하고, 명령어 I0에 따라 소스 오퍼랜드 D0에 대한 네 번째 스테이지의 연산을 실행한다. 여기에서, 세 번째 사이클 및 네 번째 사이클에서 명령어 I0의 다음 명령어 I1이 실행되지 않고, 그 다름 명령어 I2가 실행된 것은 명령어 I1의 소스 오퍼랜드 D2, D3이 명령어 I0의 대상 오퍼랜드에 의존하기 때문이다.
이하에서는 이상과 같은 멀티스레딩/비순차 병합 기법에 따른 연산 파이프라인 구조를 기반으로 하는 벡터 연산부(311) 및 스칼라 연산부(312)를 자세히 설명하기로 한다.
벡터 연산부(311)는 해독부(304)에 의해 해독된 명령어가 사용할 연산부로서 선택된 경우, 한 사이클마다 복수의 파이프라인 스테이지들 각각에서 해독부(304)에 의해 독출된 스레드를 포함하는 복수의 스레드들, 즉 제 2 파이프라인 레지스터(308)에 저장된 스레드들 각각에 대한 적어도 하나 이상의 벡터 연산을 비순차적(out-of-order)으로 실행한다. 본 실시예에 따른 멀티 스레드/비순차 병합 처리 장치의 하드웨어 성능이 우수할수록, 벡터 연산부(311)는 한 사이클마다 보다 많은 벡터 연산들을 실행할 수 있을 것이다.
보다 상세하게 설명하면, 벡터 연산부(311)는 해독부(304)에 의해 독출된 스레드를 포함하는 복수의 스레드들 중 파이프라인 스테이지들 중 어느 하나에서 아직 처리되지 않은 다른 스레드에 의존(dependent)하지 않는 스레드에 대한 벡터 연산을 우선적으로 실행한다. 본 실시예에서, 복수의 스레드들은 해독부(304)에 의해 해독된 명령어의 스레드와 해독부(304)에 의해 이전에 해독된 다른 명령어의 스레드를 포함한다.
상기된 바와 같은 벡터 연산부(311)의 동작은 다음과 같은 방식으로 구체적으로 구현될 수 있다. 즉, 벡터 연산부(311)는 적어도 하나 이상의 제 1 예약 스테이션(309)을 순회하면서 어떤 명령어의 스레드에 해당하는 소스 오퍼랜드가 저장되어 있는 예약 스테이션에 대해 이 소스 오퍼랜드가 벡터 연산의 실행에 대한 준비가 완료되었는지를 나타내는 준비 필드의 값을 검사(check)하고, 그 검사 결과에 기초하여 복수의 스레드들 각각에 대한 벡터 연산을 비순차적으로 실행한다. 특히, 적어도 하나 이상의 제 1 예약 스테이션(309)이 복수 개인 경우에 상기된 예약 스테이션 이외에 상기된 소스 오퍼랜드가 포함되는 스레드가 아닌 다른 스레드에 해당하는 소스 오퍼랜드가 저장된 예약 스테이션을 포함할 것이다. 여기에서, 준비 필드의 값은 이 예약 스테이션에 저장된 소스 오퍼랜드의 값이 다른 명령어의 대상 오퍼랜드의 값에 의해 변경되는지를 나타내는 값을 의미한다.
만약, 그 준비 필드의 검사 결과가 이 예약 스테이션에 저장된 소스 오퍼랜드의 값이 다른 명령어의 대상 오퍼랜드의 값에 의해 변경되지 않음을 나타내면, 벡터 연산부(311)는 이 예약 스테이션에 저장된 소스 오퍼랜드에 대한 벡터 연산을 실행한다. 만약, 그 준비 필드의 검사 결과가 이 예약 스테이션에 저장된 소스 오퍼랜드가 다른 명령어의 대상 오퍼랜드에 의해 변경됨을 나타내면, 벡터 연산부(311)는 이 소스 오퍼랜드에 대한 벡터 연산을 실행하지 않는다. 이와 같이 함으로써 벡터 연산부(311)는 복수의 스레드들 중 파이프라인 스테이지들 중 어느 하나에서 아직 처리되지 않은 다른 스레드에 의존하지 않는 스레드에 대한 벡터 연산을 우선적으로 실행할 수 있다.
이어서, 다음과 같은 쓰기 단계가 수행된다. 즉, 벡터 연산부(311)는 이와 같이 실행된 결과에 해당하는 대상 오퍼랜드의 저장 장소가 출력 버퍼(314)인 경우에는 이 대상 오퍼랜드의 값을 제 3 파이프라인 레지스터(313)를 경유하여 출력 버퍼(314)에 저장한다. 만약, 대상 오퍼랜드의 저장 장소가 임시 레지스터 파일(3061)이라면, 벡터 연산부(311)는 대상 오퍼랜드의 태그, 즉 이 대상 오퍼랜드에 대한 소스 오퍼랜드에 저장된 예약 스테이션의 태그 필드에 기록된 값과 동일한 태그를 갖는 예약 스테이션에 저장된 소스 오퍼랜드의 값을 이 대상 오퍼랜드의 값으로 갱신하고, 이 예약 스테이션의 준비 필드의 값을 이 예약 스테이션에 저장된 소스 오퍼랜드의 값이 다른 명령어의 대상 오퍼랜드의 값에 의해 변경되지 않음을 나타내는 값으로 갱신한다. 이와 동시에, 벡터 연산부(311)는 임시 레지스터 파일(3061) 내에서 이와 같이 실행된 결과에 해당하는 대상 오퍼랜드의 태그와 동일한 태그를 갖는 레지스터에 저장된 소스 오퍼랜드의 값을 이 대상 오퍼랜드의 값으로 갱신하고, 이 레지스터의 준비 필드의 값을 이 예약 스테이션에 저장된 소스 오퍼랜드의 값이 다른 명령어의 대상 오퍼랜드의 값에 의해 변경되지 않음을 나타내는 값으로 갱신한다. 이와 같이 처리된 소스 오퍼랜드에 대해서는 비순차 기법에 따라 우선적으로 벡터 연산이 실행되며, 더 이상 태그가 필요가 없기 때문에, 벡터 연산부(311)는 상기된 태그를 태그 풀(307)에 반납한다.
스칼라 연산부(312)는 해독부(304)에 의해 해독된 명령어가 사용할 연산부로서 선택된 경우, 한 사이클마다 복수의 파이프라인 스테이지들 각각에서 해독부(304)에 의해 독출된 스레드를 포함하는 복수의 스레드들 각각에 대한 적어도 하 나 이상의 스칼라 연산을 비순차적으로 실행한다. 본 실시예에 따른 멀티 스레드/비순차 병합 처리 장치의 하드웨어 성능이 우수할수록, 스칼라 연산부(312)는 한 사이클마다 보다 많은 스칼라 연산들을 실행할 수 있을 것이다. 스칼라 연산부(312)의 구체적인 동작은 상기된 벡터 연산부(311)의 동작과 연산 방식의 차이를 제외하고는 동일하기 때문에 스칼라 연산부(312)에 대한 자세한 설명은 상기된 벡터 연산부(311)의 설명을 따르는 것으로 하고, 여기에서는 생략하기로 한다. 벡터 연산부(311) 및 스칼라 연산부(312) 각각에 포함된 버퍼는 쓰기 과정에서의 버스 경쟁(bus contention)을 방지하기 위한 것이다.
도 7a-d는 본 발명의 바람직한 일 실시예에 따른 멀티스레딩/비순차 병합 처리 방법의 흐름도이다.
도 7a-d를 참조하면, 본 실시예에 따른 멀티스레딩/비순차 병합 처리 방법은 다음과 같은 단계들로 구성된다. 본 실시예에 따른 멀티스레딩/비순차 병합 처리 방법은 도 3에 도시된 멀티스레딩/비순차 병합 처리 장치에서 시계열적으로 처리되는 단계들로 구성된다. 따라서, 이하 생략된 내용이라 하더라도 도 3에 도시된 멀티스레딩/비순차 병합 처리 장치에 관하여 이상에서 기술된 내용은 본 실시예에 따른 멀티스레딩/비순차 병합 처리 방법에도 적용된다.
701 단계에서 멀티스레딩/비순차 병합 처리 장치는 한 사이클마다 명령어 메모리(302)로부터 적어도 하나 이상의 명령어를 페치한다.
702 단계에서 멀티스레딩/비순차 병합 처리 장치는 한 사이클마다 701 단계에서 701 단계에서 페치된 명령어를 포함하는 명령어들 중 적어도 하나 이상의 명 령어를 해독하고, 그 해독 결과에 기초하여 이 명령어가 사용할 연산부로서 벡터 연산부(311) 및 스칼라 연산부(312) 중 어느 하나를 선택한다.
703 단계에서 멀티스레딩/비순차 병합 처리 장치는 702 단계에서 벡터 연산부(311)가 선택된 경우에는 704 단계로 진행하고, 스칼라 연산부(312)가 선택된 경우에는 718 단계로 진행한다.
704 단계에서 멀티스레딩/비순차 병합 처리 장치는 702 단계에서 선택된 벡터 연산부(311)에 연결된 적어도 하나 이상의 예약 스테이션의 사용 여부를 검사하고, 그 검사 결과에 기초하여 미사용 중인 예약 스테이션 하나를 확보한다.
705 단계에서 멀티스레딩/비순차 병합 처리 장치는 702 단계에서의 해독 결과에 기초하여 이 명령어의 스레드에 해당하는 적어도 하나 이상의 소스 오퍼랜드를 입력 버퍼(305) 또는 레지스터 파일(306)로부터 독출한다.
706 단계에서 멀티스레딩/비순차 병합 처리 장치는 705 단계에서 소스 오퍼랜드가 입력 버퍼(305)로부터 독출된 경우에는 707 단계로 진행하고, 임시 레지스터 파일(3061)로부터 독출된 경우에는 708 단계로 진행한다.
707 단계에서 멀티스레딩/비순차 병합 처리 장치는 704 단계에서 확보된 예약 스테이션에 이 소스 오퍼랜드를 저장하고, 이것과 함께 이 소스 오퍼랜드가 소정 연산의 실행에 대한 준비가 완료되었음을 나타내는 T 값을 이 예약 스테이션의 준비 필드에 저장한다.
708 단계에서 멀티스레딩/비순차 병합 처리 장치는 이 소스 오퍼랜드가 저장되어 있는 레지스터의 준비 필드의 값과 태그 필드의 값도 독출하고, 704 단계에서 확보된 예약 스테이션에 이 소스 오퍼랜드를 저장하고, 이것과 함께 이와 같이 독출된 준비 필드의 값, 및 태그 필드의 값도 저장한다.
709 단계에서 멀티스레딩/비순차 병합 처리 장치는 702 단계에서의 해독 결과에 기초하여 이 명령어의 대상 오퍼랜드가 임시 레지스터 파일(3061)인지를 판단하고, 그 판단 결과가 이 명령어의 대상 오퍼랜드의 저장 장소가 임시 레지스터 파일(3061)임을 나타내면 710 단계로 진행하고, 나타내지 않으면 711 단계로 진행한다.
710 단계에서 멀티스레딩/비순차 병합 처리 장치는 태그 풀(307)에 저장된 미사용 태그들 중 어느 하나를 이 명령어의 대상 오퍼랜드의 저장 장소에 해당하는 레지스터에 할당하고, 이 레지스터의 준비 필드의 값을 이 대상 오퍼랜드의 값으로 그 값을 설정하는 소스 오퍼랜드가 벡터 연산의 실행에 대한 준비가 완료되지 않았음을 나타내는 F 값으로 저장한다.
711 단계에서 멀티스레딩/비순차 병합 처리 장치는 적어도 하나 이상의 제 1 예약 스테이션(309)을 순회하면서 어떤 명령어의 스레드에 해당하는 소스 오퍼랜드가 저장되어 있는 예약 스테이션에 대해 이 소스 오퍼랜드가 벡터 연산의 실행에 대한 준비가 완료되었는지를 나타내는 준비 필드의 값을 검사한다.
712 단계에서 멀티스레딩/비순차 병합 처리 장치는 711 단계에서의 검사 결과가 이 예약 스테이션에 저장된 소스 오퍼랜드의 값이 다른 명령어의 대상 오퍼랜드의 값에 의해 변경되지 않음을 나타내면 713 단계로 진행하고, 이 예약 스테이션에 저장된 소스 오퍼랜드가 다른 명령어의 대상 오퍼랜드에 의해 변경됨을 나타내 면 711 단계로 돌아간다.
713 단계에서 멀티스레딩/비순차 병합 처리 장치는 이 예약 스테이션에 저장된 소스 오퍼랜드에 대한 벡터 연산을 실행한다.
714 단계에서 멀티스레딩/비순차 병합 처리 장치는 713 단계에서 실행된 결과에 해당하는 대상 오퍼랜드의 저장 장소가 출력 버퍼(314)인 경우에는 715 단계로 진행하고, 임시 레지스터 파일(3061)인 경우에는 716 단계로 진행한다.
715 단계에서 멀티스레딩/비순차 병합 처리 장치는 713 단계에서 실행된 결과에 해당하는 대상 오퍼랜드의 값을 출력 버퍼(314)에 저장하고, 711 단계로 돌아간다
716 단계에서 멀티스레딩/비순차 병합 처리 장치는 713 단계에서 실행된 결과에 해당하는 대상 오퍼랜드의 태그와 동일한 태그를 갖는 예약 스테이션에 저장된 소스 오퍼랜드의 값을 이 대상 오퍼랜드의 값으로 갱신하고, 이 예약 스테이션의 준비 필드의 값을 이 예약 스테이션에 저장된 소스 오퍼랜드의 값이 다른 명령어의 대상 오퍼랜드의 값에 의해 변경되지 않음을 나타내는 값으로 갱신한다. 이와 동시에, 716 단계에서 멀티스레딩/비순차 병합 처리 장치는 임시 레지스터 파일(3061) 내에서 이와 같이 실행된 결과에 해당하는 대상 오퍼랜드의 태그와 동일한 태그를 갖는 레지스터에 저장된 소스 오퍼랜드의 값을 이 대상 오퍼랜드의 값으로 갱신하고, 이 레지스터의 준비 필드의 값을 이 예약 스테이션에 저장된 소스 오퍼랜드의 값이 다른 명령어의 대상 오퍼랜드의 값에 의해 변경되지 않음을 나타내는 값으로 갱신하고, 711 단계로 돌아간다.
717 단계에서 멀티스레딩/비순차 병합 처리 장치는 702 단계에서 선택된 스칼라 연산부(312)에 연결된 적어도 하나 이상의 예약 스테이션의 사용 여부를 검사하고, 그 검사 결과에 기초하여 미사용 중인 예약 스테이션 하나를 확보한다.
718 단계에서 멀티스레딩/비순차 병합 처리 장치는 702 단계에서의 해독 결과에 기초하여 이 명령어의 스레드에 해당하는 적어도 하나 이상의 소스 오퍼랜드를 입력 버퍼(305) 또는 레지스터 파일(306)로부터 독출한다.
719 단계에서 멀티스레딩/비순차 병합 처리 장치는 718 단계에서 소스 오퍼랜드가 입력 버퍼(305)로부터 독출된 경우에는 720 단계로 진행하고, 레지스터 파일(306)로부터 독출된 경우에는 721 단계로 진행한다.
720 단계에서 멀티스레딩/비순차 병합 처리 장치는 717 단계에서 확보된 예약 스테이션에 이 소스 오퍼랜드를 저장하고, 이것과 함께 이 소스 오퍼랜드가 스칼라 연산의 실행에 대한 준비가 완료되었음을 나타내는 T 값을 이 예약 스테이션의 준비 필드에 저장한다.
721 단계에서 멀티스레딩/비순차 병합 처리 장치는 이 소스 오퍼랜드가 저장되어 있는 레지스터의 준비 필드의 값과 태그 필드의 값도 독출하고, 717 단계에서 확보된 예약 스테이션에 이 소스 오퍼랜드를 저장하고, 이것과 함께 이와 같이 독출된 준비 필드의 값, 및 태그 필드의 값도 저장한다.
722 단계에서 멀티스레딩/비순차 병합 처리 장치는 702 단계에서의 해독 결과에 기초하여 이 명령어의 대상 오퍼랜드가 임시 레지스터 파일(3061)인지를 판단하고, 그 판단 결과가 이 명령어의 대상 오퍼랜드의 저장 장소가 임시 레지스터 파 일(3061)임을 나타내면 723 단계로 진행하고, 나타내지 않으면 724 단계로 진행한다.
723 단계에서 멀티스레딩/비순차 병합 처리 장치는 태그 풀(307)에 저장된 미사용 태그들 중 어느 하나를 이 대상 오퍼랜드에 할당하고, 이 명령어의 대상 오퍼랜드의 저장 장소에 해당하는 레지스터의 준비 필드의 값을 이 대상 오퍼랜드의 값으로 그 값을 설정하는 소스 오퍼랜드가 스칼라 연산의 실행에 대한 준비가 완료되지 않았음을 나타내는 F 값으로 설정한다.
724 단계에서 멀티스레딩/비순차 병합 처리 장치는 적어도 하나 이상의 제 1 예약 스테이션(309)을 순회하면서 어떤 명령어의 스레드에 해당하는 소스 오퍼랜드가 저장되어 있는 예약 스테이션에 대해 이 소스 오퍼랜드가 스칼라 연산의 실행에 대한 준비가 완료되었는지를 나타내는 준비 필드의 값을 검사한다.
725 단계에서 멀티스레딩/비순차 병합 처리 장치는 724 단계에서의 검사 결과가 이 예약 스테이션에 저장된 소스 오퍼랜드의 값이 다른 명령어의 대상 오퍼랜드의 값에 의해 변경되지 않음을 나타내면 726 단계로 진행하고, 이 예약 스테이션에 저장된 소스 오퍼랜드가 다른 명령어의 대상 오퍼랜드에 의해 변경됨을 나타내면 717 단계로 돌아간다.
726 단계에서 멀티스레딩/비순차 병합 처리 장치는 이 예약 스테이션에 저장된 소스 오퍼랜드에 대한 스칼라 연산을 실행한다.
727 단계에서 멀티스레딩/비순차 병합 처리 장치는 726 단계에서 실행된 결과에 해당하는 대상 오퍼랜드의 저장 장소가 출력 버퍼(314)인 경우에는 728 단계 로 진행하고, 임시 레지스터 파일(3061)인 경우에는 729 단계로 진행한다.
728 단계에서 멀티스레딩/비순차 병합 처리 장치는 726 단계에서 실행된 결과에 해당하는 대상 오퍼랜드의 값을 출력 버퍼(314)에 저장하고, 717 단계로 돌아간다
729 단계에서 멀티스레딩/비순차 병합 처리 장치는 726 단계에서 실행된 결과에 해당하는 대상 오퍼랜드의 태그, 즉 이 대상 오퍼랜드에 대한 소스 오퍼랜드에 저장된 예약 스테이션의 태그 필드에 기록된 값과 동일한 태그를 갖는 예약 스테이션에 저장된 소스 오퍼랜드의 값을 이 대상 오퍼랜드의 값으로 갱신하고, 이 예약 스테이션의 준비 필드의 값을 이 예약 스테이션에 저장된 소스 오퍼랜드의 값이 다른 명령어의 대상 오퍼랜드의 값에 의해 변경되지 않음을 나타내는 값으로 갱신한다. 이와 동시에, 729 단계에서 멀티스레딩/비순차 병합 처리 장치는 임시 레지스터 파일(3061) 내에서 이와 같이 실행된 결과에 해당하는 대상 오퍼랜드의 태그와 동일한 태그를 갖는 레지스터에 저장된 소스 오퍼랜드의 값을 이 대상 오퍼랜드의 값으로 갱신하고, 이 레지스터의 준비 필드의 값을 이 예약 스테이션에 저장된 소스 오퍼랜드의 값이 다른 명령어의 대상 오퍼랜드의 값에 의해 변경되지 않음을 나타내는 값으로 갱신하고, 717 단계로 돌아간다.
도 8은 다양한 연산 파이프라인 구조에 요구되는 1 비트 레지스터의 총 개수를 나타내는 그래프를 도시한 도면이다.
도 8을 참조하면, 좌측에서 두 번째 막대는 "T4R0" 구조 하에서의 1 비트 레지스터의 총 개수를 나타내는 것이다. "T4R0"은 스레드가 4개, 예약 스테이션은 0 개임을 나타내며, 결국 이것은 비순차 기법이 적용되지 않는 종래의 멀티스레딩 기법임을 나타낸다. 이에 반해, 이것의 우측 막대들은 1 개 또는 2 개의 스레드를 유지하면서 비순차 기법을 적용한 파이프라인 구조 하에서의 1 비트 레지스터의 총 개수를 나타낸다. 도 8에 도시된 바와 같이, 가장 많은 개수의 스레드를 유지하는 구조가 가장 많은 개수의 1 비트 레지스터들을 요구하고 있음을 알 수 있다.
도 9는 다양한 연산 파이프라인 구조에 따른 시스템의 평균 처리율을 나타내는 그래프를 도시한 도면이다.
도 9를 참조하면, 좌측에서 두 번째 막대는 "T4R0" 구조 하에서의 평균 처리율을 나타낸다. "T4R0"은 스레드가 4개, 예약 스테이션은 0개임을 나타내며, 결국 이것은 비순차 기법이 적용되지 않는 종래의 멀티스레딩 기법임을 나타낸다. 이에 반해, 이것의 우측 막대들은 1 개 또는 2 개의 스레드를 유지하면서 비순차 기법을 적용한 파이프라인 구조 하에서의 평균 처리율을 나타낸다. 도 9에 도시된 바와 같이, 가장 많은 개수의 스레드를 유지하는 구조가 최대 처리율을 보이고 있으나, 스레드의 개수를 줄이면서 비순차 기법을 적용한 구조도 최대 처리율에 근접하는 처리율을 보이고 있음을 알 수 있다.
도 10은 다양한 연산 파이프라인 구조에 따른 시스템의 비용 대비 성능을 나타내는 그래프를 도시한 도면이다.
도 10에 도시된 그래프들마다의 값은 도 8에 도시된 1 비트 레지스터의 총 개수를 도 9에 도시된 평균 처리율로 나눈 것으로 비용 대비 성능을 나타내는 성능 색인으로 표시된다. 도 9에 도시된 바와 같이, 많은 수의 스레드를 유지하는 멀티 스레딩 기법이 최고의 처리율을 보이고 있지만, 하드웨어 비용을 고려하지 않고 오로지 처리율만을 평가 기준으로 삼는 것을 현실성이 없다. 왜냐하면, 기술의 가치는 곧 시장성이기 때문에 비용과 성능 모두가 고려되어야 하기 때문이다.
특히, 도 10에서의 "T2R1" 구조의 막대가 비용 대비 성능의 최대치를 보이고 있음을 알 수 있다. 이것으로부터 성능 면에서는 가장 많은 개수의 스레드를 유지하는 멀티스레딩 기법이 우수하지만, 성능과 하드웨어 비용이라는 두 가지 측면을 모두 고려한다면, 종래의 멀티스레딩 기법보다 본 실시예에 따른 멀티스레딩/비순차 병합 기법이 보다 우수함을 알 수 있다.
한편, 상술한 본 발명의 실시예들은 컴퓨터에서 실행될 수 있는 프로그램으로 작성가능하고, 컴퓨터로 읽을 수 있는 기록매체를 이용하여 상기 프로그램을 동작시키는 범용 디지털 컴퓨터에서 구현될 수 있다. 또한, 상술한 본 발명의 실시예에서 사용된 데이터의 구조는 컴퓨터로 읽을 수 있는 기록매체에 여러 수단을 통하여 기록될 수 있다.
상기 컴퓨터로 읽을 수 있는 기록매체는 마그네틱 저장매체(예를 들면, 롬, 플로피 디스크, 하드 디스크 등), 광학적 판독 매체(예를 들면, 시디롬, 디브이디 등) 및 캐리어 웨이브(예를 들면, 인터넷을 통한 전송)와 같은 저장매체를 포함한다.
이제까지 본 발명에 대하여 그 바람직한 실시예들을 중심으로 살펴보았다. 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 본 발명이 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 실시예들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 본 발명의 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 발명에 포함된 것으로 해석되어야 할 것이다.
본 발명에 따르면, 복수의 파이프라인 스테이지들 각각에서 복수의 스레드들 각각에 대한 소정 연산을 비순차적으로 실행하는 멀티스레딩/비순차 병합 기법을 도입함으로써 적은 개수의 스레드를 유지하면서도 높은 처리율을 보장할 수 있다는 효과가 있다. 특히, 성능과 하드웨어 비용이라는 두 가지 측면을 모두 고려한다면, 종래의 멀티스레딩 기법보다 본 발명에 따른 멀티스레딩/비순차 병합 기법이 보다 우수하다.

Claims (15)

  1. (a) 적어도 하나 이상의 명령어를 해독하고, 상기 해독 결과에 기초하여 상기 명령어의 스레드를 독출하는 단계; 및
    (b) 상기 해독 결과에 기초하여 복수의 파이프라인 스테이지들 각각에서 상기 독출된 스레드를 포함하는 복수의 스레드들 각각에 대한 소정 연산을 비순차적(out-of-order)으로 실행하는 단계를 포함하고,
    상기 (b) 단계는 상기 복수의 스레드들 중 상기 파이프라인 스테이지들 중 어느 하나에서 아직 처리되지 않은 다른 스레드에 의존(dependent)하지 않는 스레드에 대한 상기 소정 연산을 우선적으로 실행하는 것을 특징으로 하는 멀티스레딩/비순차 병합 처리 방법.
  2. 제 1 항에 있어서,
    상기 복수의 스레드들은 상기 명령어의 스레드 및 상기 명령어가 아닌 다른 명령어의 스레드를 포함하는 것을 특징으로 하는 멀티스레딩/비순차 병합 처리 방법.
  3. 삭제
  4. 제 1 항에 있어서,
    상기 (b) 단계는 상기 스레드에 해당하는 소스 오퍼랜드(source operand)가 상기 명령어가 아닌 다른 명령어의 대상 오퍼랜드(destination operand)에 의해 변경되지 않음을 나타내는 경우에 상기 소스 오퍼랜드에 대한 상기 소정 연산을 실행함으로써 상기 다른 스레드에 의존하지 않는 스레드에 대한 상기 소정 연상을 우선적으로 실행하는 것을 특징으로 하는 멀티스레딩/비순차 병합 처리 방법.
  5. 제 1 항에 있어서,
    상기 (a) 단계는 어느 하나의 예약 스테이션에 상기 독출된 스레드에 해당하는 소스 오퍼랜드와 상기 소스 오퍼랜드가 상기 소정 연상의 실행에 대한 준비가 완료되었는지를 나타내는 값을 저장하고,
    상기 (b) 단계는 상기 예약 스테이션을 포함하는 적어도 하나 이상의 예약 스테이션을 순회하면서 상기 값을 검사하고, 상기 검사 결과에 기초하여 상기 복수의 스레드들 각각에 대한 소정 연산을 비순차적으로 실행하는 것을 특징으로 하는 멀티스레딩/비순차 병합 처리 방법.
  6. 제 5 항에 있어서,
    상기 적어도 하나 이상의 예약 스테이션이 복수 개인 경우에 상기 예약 스테이션 이외에 상기 소스 오퍼랜드가 포함되는 스레드가 아닌 다른 스레드에 해당하는 소스 오퍼랜드가 저장된 예약 스테이션을 포함하는 것을 특징으로 하는 멀티스 레딩/비순차 병합 처리 방법.
  7. 제 5 항에 있어서,
    상기 값은 상기 예약 스테이션에 저장된 소스 오퍼랜드의 값이 상기 명령어가 아닌 다른 명령어의 대상 오퍼랜드의 값에 의해 변경되는지를 나타내는 값인 것을 특징으로 하는 멀티스레딩/비순차 병합 처리 방법.
  8. 제 1 항, 제 2 항, 또는 제 4 항 내지 제 7 항 중에 어느 한 항의 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
  9. 적어도 하나 이상의 명령어를 해독하고, 상기 해독 결과에 기초하여 상기 명령어의 스레드를 독출하는 해독부; 및
    상기 해독 결과에 기초하여 복수의 파이프라인 스테이지들 각각에서 상기 독출된 스레드를 포함하는 복수의 스레드들 각각에 대한 소정 연산을 비순차적으로 실행하는 연산부를 포함하고,
    상기 연산부는 상기 복수의 스레드들 중 상기 파이프라인 스테이지들 중 어느 하나에서 아직 처리되지 않은 다른 스레드에 의존하지 않는 스레드에 대한 상기 소정 연산을 우선적으로 실행하는 것을 특징으로 하는 멀티스레딩/비순차 병합 처리 장치.
  10. 제 9 항에 있어서,
    상기 복수의 스레드들은 상기 명령어의 스레드 및 상기 명령어가 아닌 다른 명령어의 스레드를 포함하는 것을 특징으로 하는 멀티스레딩/비순차 병합 처리 장 치.
  11. 삭제
  12. 제 9 항에 있어서,
    상기 연산부는 상기 스레드에 해당하는 소스 오퍼랜드가 상기 명령어가 아닌 다른 명령어의 대상 오퍼랜드에 의해 변경되지 않음을 나타내는 경우에 상기 소스 오퍼랜드에 대한 상기 소정 연산을 실행함으로써 상기 다른 스레드에 의존하지 않는 스레드에 대한 상기 소정 연상을 우선적으로 실행하는 것을 특징으로 하는 멀티스레딩/비순차 병합 처리 장치.
  13. 제 9 항에 있어서,
    상기 해독부는 어느 하나의 예약 스테이션에 상기 독출된 스레드에 해당하는 소스 오퍼랜드와 상기 소스 오퍼랜드가 상기 소정 연상의 실행에 대한 준비가 완료되었는지를 나타내는 값을 저장하고,
    상기 연산부는 상기 예약 스테이션을 포함하는 적어도 하나 이상의 예약 스 테이션을 순회하면서 상기 값을 검사하고, 상기 검사 결과에 기초하여 상기 복수의 스레드들 각각에 대한 소정 연산을 비순차적으로 실행하는 것을 특징으로 하는 멀티스레딩/비순차 병합 처리 장치.
  14. 제 13 항에 있어서,
    상기 적어도 하나 이상의 예약 스테이션이 복수 개인 경우에 상기 예약 스테이션 이외에 상기 소스 오퍼랜드가 포함되는 스레드가 아닌 다른 스레드에 해당하는 소스 오퍼랜드가 저장된 예약 스테이션을 포함하는 것을 특징으로 하는 멀티스레딩/비순차 병합 처리 장치.
  15. 제 13 항에 있어서,
    상기 값은 상기 예약 스테이션에 저장된 소스 오퍼랜드의 값이 상기 명령어가 아닌 다른 명령어의 대상 오퍼랜드의 값에 의해 변경되는지를 나타내는 값인 것을 특징으로 하는 멀티스레딩/비순차 병합 처리 장치.
KR1020060068216A 2006-07-20 2006-07-20 멀티스레딩/비순차 병합 기법에 따라 처리하는 방법 및장치 KR100837400B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020060068216A KR100837400B1 (ko) 2006-07-20 2006-07-20 멀티스레딩/비순차 병합 기법에 따라 처리하는 방법 및장치
US11/806,981 US20080022072A1 (en) 2006-07-20 2007-06-05 System, method and medium processing data according to merged multi-threading and out-of-order scheme

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020060068216A KR100837400B1 (ko) 2006-07-20 2006-07-20 멀티스레딩/비순차 병합 기법에 따라 처리하는 방법 및장치

Publications (2)

Publication Number Publication Date
KR20080008683A KR20080008683A (ko) 2008-01-24
KR100837400B1 true KR100837400B1 (ko) 2008-06-12

Family

ID=38972729

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020060068216A KR100837400B1 (ko) 2006-07-20 2006-07-20 멀티스레딩/비순차 병합 기법에 따라 처리하는 방법 및장치

Country Status (2)

Country Link
US (1) US20080022072A1 (ko)
KR (1) KR100837400B1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170072367A (ko) * 2009-04-15 2017-06-26 노오쓰웨스턴 유니버시티 올리고뉴클레오티드 관능화된 나노입자의 전달
KR101572879B1 (ko) 2009-04-29 2015-12-01 삼성전자주식회사 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법
US10353708B2 (en) 2016-09-23 2019-07-16 Advanced Micro Devices, Inc. Strided loading of non-sequential memory locations by skipping memory locations between consecutive loads
CN109032668B (zh) * 2017-06-09 2023-09-19 超威半导体公司 具有高带宽和低功率向量寄存器堆的流处理器

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5623608A (en) 1994-11-14 1997-04-22 International Business Machines Corporation Method and apparatus for adaptive circular predictive buffer management
KR20030042289A (ko) * 2001-11-22 2003-05-28 이용석 레지스터 리네이밍 방법을 사용하는 비순차적 명령어 이슈컴퓨터 시스템
US20040210742A1 (en) 2003-04-21 2004-10-21 International Business Machines Corporation Method and circuit for modifying pipeline length in a simultaneous multithread processor
WO2004103056A2 (en) 2003-05-09 2004-12-02 Sandbridge Technologies, Inc. Processor reduction unit for accumulation of multiple operands with or without saturation

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6073159A (en) * 1996-12-31 2000-06-06 Compaq Computer Corporation Thread properties attribute vector based thread selection in multithreading processor
US6314511B2 (en) * 1997-04-03 2001-11-06 University Of Washington Mechanism for freeing registers on processors that perform dynamic out-of-order execution of instructions using renaming registers
JP2004234123A (ja) * 2003-01-28 2004-08-19 Fujitsu Ltd マルチスレッドコンピュータ
US7239322B2 (en) * 2003-09-29 2007-07-03 Ati Technologies Inc Multi-thread graphic processing system
US7948490B2 (en) * 2003-10-22 2011-05-24 Microsoft Corporation Hardware-accelerated computation of radiance transfer coefficients in computer graphics
US7310722B2 (en) * 2003-12-18 2007-12-18 Nvidia Corporation Across-thread out of order instruction dispatch in a multithreaded graphics processor
US7237094B2 (en) * 2004-10-14 2007-06-26 International Business Machines Corporation Instruction group formation and mechanism for SMT dispatch
US7434032B1 (en) * 2005-12-13 2008-10-07 Nvidia Corporation Tracking register usage during multithreaded processing using a scoreboard having separate memory regions and storing sequential register size indicators

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5623608A (en) 1994-11-14 1997-04-22 International Business Machines Corporation Method and apparatus for adaptive circular predictive buffer management
KR20030042289A (ko) * 2001-11-22 2003-05-28 이용석 레지스터 리네이밍 방법을 사용하는 비순차적 명령어 이슈컴퓨터 시스템
US20040210742A1 (en) 2003-04-21 2004-10-21 International Business Machines Corporation Method and circuit for modifying pipeline length in a simultaneous multithread processor
WO2004103056A2 (en) 2003-05-09 2004-12-02 Sandbridge Technologies, Inc. Processor reduction unit for accumulation of multiple operands with or without saturation

Also Published As

Publication number Publication date
KR20080008683A (ko) 2008-01-24
US20080022072A1 (en) 2008-01-24

Similar Documents

Publication Publication Date Title
CN108027769B (zh) 使用寄存器访问指令发起指令块执行
US9811340B2 (en) Method and apparatus for reconstructing real program order of instructions in multi-strand out-of-order processor
US20170083320A1 (en) Predicated read instructions
JP2018519602A (ja) 連続ブロックの並列実行を有するブロックベースアーキテクチャ
KR102256188B1 (ko) 데이터 처리장치 및 벡터 오퍼랜드를 처리하는 방법
JP2010532063A (ja) 条件命令を無条件命令および選択命令へと拡張する方法およびシステム
JP2009053861A (ja) プログラム実行制御装置
TW201312460A (zh) 用於多股亂序處理器中之指令排程的方法及裝置
US10268519B2 (en) Scheduling method and processing device for thread groups execution in a computing system
CA2985495A1 (en) Mapping instruction blocks into instruction windows based on block size
JP2006313422A (ja) 演算処理装置及びデータ転送処理の実行方法
CN110825437B (zh) 用于处理数据的方法和装置
WO2020024759A1 (en) System and method for store instruction fusion in a microprocessor
JP2016536665A (ja) 推論的ベクトル演算の実行を制御するためのデータ処理装置及び方法
JP7410186B2 (ja) Gpuにおける明示的な個別マスクレジスタのマスク操作方法
KR100837400B1 (ko) 멀티스레딩/비순차 병합 기법에 따라 처리하는 방법 및장치
US7844799B2 (en) Method and system for pipeline reduction
JP2004529405A (ja) 依存性を決定するためのコンテンツ・アドレス指定可能メモリを実装したスーパースケーラ・プロセッサ
US11392386B2 (en) Program counter (PC)-relative load and store addressing for fused instructions
CN108027736B (zh) 使用通过对物理寄存器预分配的乱序重命名的运行时代码并行化
US11093246B2 (en) Banked slice-target register file for wide dataflow execution in a microprocessor
US8601244B2 (en) Apparatus and method for generating VLIW, and processor and method for processing VLIW
US10558462B2 (en) Apparatus and method for storing source operands for operations
WO2016201699A1 (zh) 指令处理方法及设备
JP3915019B2 (ja) Vliwプロセッサ、プログラム生成装置、および記録媒体

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20130522

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20140522

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20150522

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20160520

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20170518

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20180517

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20190520

Year of fee payment: 12