KR100316710B1 - 병렬 프로세서를 위한 무순서 명령어 발행 방법 및 장치 - Google Patents

병렬 프로세서를 위한 무순서 명령어 발행 방법 및 장치 Download PDF

Info

Publication number
KR100316710B1
KR100316710B1 KR1019990019982A KR19990019982A KR100316710B1 KR 100316710 B1 KR100316710 B1 KR 100316710B1 KR 1019990019982 A KR1019990019982 A KR 1019990019982A KR 19990019982 A KR19990019982 A KR 19990019982A KR 100316710 B1 KR100316710 B1 KR 100316710B1
Authority
KR
South Korea
Prior art keywords
instruction
command
instructions
issuing
fetched
Prior art date
Application number
KR1019990019982A
Other languages
English (en)
Other versions
KR20010001022A (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 KR1019990019982A priority Critical patent/KR100316710B1/ko
Publication of KR20010001022A publication Critical patent/KR20010001022A/ko
Application granted granted Critical
Publication of KR100316710B1 publication Critical patent/KR100316710B1/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
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

병렬 프로세서를 위한 무순서 명령어 발행 방법 및 장치가 개시된다. 본 발명에 따른 병렬 프로세서를 위한 무순서 명령어 발행 방법은, (a)새로운 명령어가 페치되었는가를 판단하는 단계, (b)명령어가 페치되었으면, 명령 윈도우의 제N(1, 2, ...)번째 명령어로 이동하는 단계, (c)제N번째 명령어에 대한 기능 장치와 소스들이 유효한가를 판단하는 단계, (d)(c)단계에서 기능 장치와 소스들이 유효한 것으로 판단되면, 제N번째 명령어를 발행 가능한 것으로 판별하는 단계, (e) 명령 윈도우가 종료되었는가를 판단하고, 명령 윈도우가 종료되지 않았으면 (b)단계로 복귀하는 단계, 및 (f)명령 윈도우가 종료되었으면, 페치된 명령어와 명령 윈도우에 존재하는 발행 가능한 명령어들을 비교하여 우선 순위가 높은 순서대로 발행하는 단계를 구비하고, 발행 큐에 저장된 명령어를 순차적으로 발행하는 것이 아니라, 명령어들간의 종속성을 판단하여 우선 순위가 높은 순서대로 명령어를 발행함으로써 명령어 처리 시의 오동작을 없앨 수 있을 뿐만 아니라, 많은 명령어가 종속되어 있는 명령어를 빨리 처리해 줌으로써 남아있는 명령들에 대한 병렬성을 높일 수 있다는 효과가 있다.

Description

병렬 프로세서를 위한 무순서 명령어 발행 방법 및 장치{Method and Apparatus for Instruction issuing in Out-of-Order for Parallel Processor}
본 발명은 병렬 프로세서에 관한 것으로서, 특히, 병렬 프로세서를 위한 무순서 명령어 발행 방법 및 장치에 관한 것이다.
종래의 컴퓨팅 시스템에서 명령어 처리는 프로그램에 코딩된 순서에 따라서 (in-order) 수행되었다. 최근에는 프로그램의 병렬성을 이용하여 컴퓨팅 속도를 높이고자 하는 노력이 이루어지기 때문에, 병렬 프로세서를 구현하여 명령어의 순서에 관계없이(out-of-order) 일정한 조건을 갖는 명령어들을 빠르게 처리해주는 방법들이 제안되고 있다. 그러나, 프로그램의 병렬성이 높을수록 무순서 (out-of-order) 처리 시스템의 성능은 월등히 향상되지만, 프로그램의 병렬성을 제한하는 요소 즉, 헤저드(hazard)들이 존재하게 된다. 헤저드의 종류에는 WAW (Write-After-Write)헤저드, WAR(Write-After-Read)헤저드 및 RAW(Read-After- Write) 헤저드 등이 있다.
도 1(a)~1(c)는 일반적인 무순서 명령어 처리 시에 발생되는 헤저드를 설명하기 위한 도면들로서, 1(a)는 WAW헤저드를 나타내고, 1(b)는 WAR헤저드를 나타내고, 1(c)는 RAW헤저드를 나타낸다.
도 1(a)를 참조하면, WAW 헤저드는 선행 명령어(Inst n)와 후행 명령어(Inst n+1)가 같은 레지스터(c)에 데이타를 기입하고자 하는 경우를 나타낸다. 즉, WAW헤저드는 명령어들(n,n+1)의 소스(src1, src2) 인덱스는 서로 다르지만, 목적(dest) 인덱스가 같기 때문에 발생된다. 도 1(b)를 참조하면, WAR 헤저드는 선행 명령어(Inst n)가 데이타를 독출하고자하는 레지스터(c)에 후행 명령어(Inst n+1)가 데이타를 기입하고자할 때 발생된다. 도 1(c)를 참조하면, RAW 헤저드는 선행 명령어(Inst n)가 레지스터(c)에 기입하려는 데이타를 후행 명령어(Inst n)가 명령 수행에 사용하려 할 때 발생된다.
즉, 도 1(a)와 1(b)에 도시된 WAW와 WAR헤저드는 제한된 레지스터의 갯수로 인해 발생되는 헤저드로서, 레지스터 리네이밍(RENAMING) 방식을 이용하면 해결될 수 있다. 여기에서, 레지스터 리네이밍 방식이라는 것은 사용자가 프로그램할 수 있도록 한정된 레지스터의 수보다 실제로 더 큰 레지스터 파일을 이용하여 서로 다른 위치의 레지스터에 저장하는 방식을 말한다. 그러나, 도 1(c)에 도시된 RAW 헤저드는 실제 데이타 간의 종속성을 의미하는 것으로서, 진정한 헤저드(true hazard)라 불린다. 이러한 헤저드에 의해 종속되어 있는 후행 명령어는 선행 명령어의 결과가 유효(AVAILABLE)해진 후에야 처리될 수 있다.
한편, 명령어 처리에 있어서 발행(Issue)이라는 것은 소정 명령어의 두 소스 오퍼랜드(operand)가 유효하고, 사용하려는 기능 장치가 다른 명령어에 의해 선점되어 있지 않을 경우, 해당 명령어를 처리하도록 실행 장치(execution unit)로 보내주는 것을 말한다. 또한, 무순서 발행(out-of-order issue)이라는 것은 임의의 명령어가 사용하고자하는 소스 오퍼랜드, 즉, 피연산자와 기능 장치가 모두 유효한 경우, 선행 명령어의 종료 여부에 관계없이 해당 명령어를 실행 장치로 보내는 것을 말한다.
도 2는 종래의 무순서 명령어 발행 방법을 설명하기 위한 플로우차트이다. 도 2를 참조하면, 종래의 무순서 명령어 발행 과정은, 명령 발행 큐(issue queue)에 저장된 다음 명령어로 이동하고(제20단계), 상기 명령어에 대한 기능 장치와 소스들이 유효한가를 판단한다(제22단계). 이 때, 기능 장치와 소스들이 유효한 것으로 판단되면, 명령어를 발행한다(제24단계).
즉, 도 2를 참조하면, 종래의 무순서 명령 발행 방법은 한 명령어 수행의 결과에 종속되어 있는 후행 명령어들을 고려하지 않고, 발행 가능한 명령어들을 순차적으로 발행함으로써 프로그램 수행의 병렬성을 향상시킬 수 없다는 문제점이 있다. 다시 말해서, 종래의 무순서 명령 발행 방식을 채택한 병렬 프로세서의 경우에 명령어 발행 단계에서 선행 명령어와 후행 명령어 사이의 종속성이 적용되지 못하기 때문에 프로그램 수행에 더 많은 사이클이 요구되며, 이로 인한 병렬 프로세서의 처리 효율이 떨어지게 된다는 문제점이 있다.
본 발명이 이루고자하는 기술적 과제는, 무순서 명령어 발행 시에 발행 가능한 명령어를 순차적으로 발행하지 않고, 부여된 우선 순위(Priority)에 의해 명령어를 발행할 수 있는 병렬 프로세서를 위한 무순서 명령어 발행 방법을 제공하는데 있다.
본 발명이 이루고자하는 다른 기술적 과제는, 상기 무순서 명령어 발행 방법을 수행하는 명령어 발행 장치를 제공하는데 있다.
도 1(a)~1(c)는 일반적인 명령어 처리 시에 발생되는 헤저드를 설명하기 위한 도면들이다.
도 2는 종래의 무순서(Out-of-order) 명령어 발행(issue) 방법을 설명하기 위한 플로우차트이다.
도 3은 일반적인 명령어 프로그램을 나타내는 실시예의 도면이다.
도 4는 도 3에 도시된 프로그램의 종속성을 설명하기 위한 도면이다.
도 5는 본 발명에 따른 병렬 프로세서를 위한 무순서 명령어 발행 방법을 설명하기 위한 플로우차트이다.
도 6은 도 5에 도시된 무순서 명령어 발행 방법을 수행하는 명령어 발행 장치의 실시예의 블럭도이다.
도 7은 도 6에 도시된 장치의 발행 큐(ISSUE QUEUE)를 설명하기 위한 도면이다.
도 8은 도 6에 도시된 장치의 종속성 추출부를 설명하기 위한 실시예의 도면이다.
도 9는 도 7에 도시된 발행 큐의 우선 순위 필드를 설명하기 위한 실시예의블럭도이다.
상기 과제를 이루기위해, 본 발명에 따른 병렬 프로세서를 위한 무순서 명령어 발행 방법은, (a)새로운 명령어가 페치되었는가를 판단하는 단계, (b)명령어가 페치되었으면, 명령 윈도우의 제N(1, 2, ...)번째 명령어로 이동하는 단계, (c)제N번째 명령어에 대한 기능 장치와 소스들이 유효한가를 판단하는 단계, (d)(c)단계에서 기능 장치와 소스들이 유효한 것으로 판단되면, 제N번째 명령어를 발행 가능한 것으로 판별하는 단계, (e) 명령 윈도우가 종료되었는가를 판단하고, 명령 윈도우가 종료되지 않았으면 (b)단계로 복귀하는 단계, 및 (f)명령 윈도우가 종료되었으면, 페치된 명령어와 명령 윈도우에 존재하는 발행 가능한 명령어들을 비교하여 우선 순위가 높은 순서대로 발행하는 단계로 구성되는 것이 바람직하다.
상기 다른 과제를 이루기위해, 본 발명에 따른 병렬 프로세서를 위한 무순서 명령어 발행 장치는, 외부의 메인 메모리 또는 마이크로프로세서 내부의 명령 캐쉬 메모리와 같은 명령어 저장부로부터 소정의 명령어를 페치하고, 페치된 명령어를 우선 순위에 따라서 발행하는 명령어 발행 장치에 있어서, 명령 저장부로부터 미리 페치된 명령어들을 순차적으로 저장하며, 각 명령어들에 대한 물리적 목적/소스 인덱스 필드, 발행 필드 및 우선 순위 필드를 포함하고, 소정의 발행 제어 신호에 응답하여 우선 순위가 높은 명령어를 발행하는 발행 큐, 발행 큐에 저장된 명령어들의 논리적 목적/소스 인덱스들을 저장하고, 명령어 저장부에서 페치된 명령어의 목적/소스 인덱스와, 발행 큐에 저장된 명령어들의 목적/소스 인덱스들이 서로 일치하는가를 판단하여 명령어들 간의 종속성 여부를 추출하는 종속성 추출 수단, 소정의 연산 처리를 위한 다수 개의 기능 장치들을 구비하는 기능 블럭, 발행 큐에서 발행된 명령어의 소스 인덱스가 지정하는 레지스터에 저장된 데이타들을 기능 블럭의 해당 기능 장치로 출력하고, 해당 기능 장치에서 연산 처리된 결과를 발행된 명령어의 목적 인덱스가 지정하는 레지스터 위치에 저장하는 레지스터 파일, 및 발행 큐에 저장된 명령어의 각 기능 장치 및 소스 오퍼랜드들이 유효한가를 판단하고, 우선 순위에 따라서 명령어를 발행하도록 발행 제어 신호를 생성하는 발행 제어 수단으로 구성되는 것이 바람직하다.
이하, 본 발명에 따른 병렬 프로세서를 위한 무순서 명령어 발행 방법 및 장치에 관하여 첨부된 도면을 참조하여 상세히 설명한다.
도 3은 일반적인 명령어 프로그램을 설명하기 위한 도면이다. 여기에서, 도 3에 도시된 명령어 프로그램을 수행하는 중앙 처리 장치(Central Processing Unit:CPU)는 한 사이클에 최대 4개의 명령어를 발행할 수 있고, 프로그램에 사용된 명령어들은 서로 다른 기능 장치(Function Unit:FU)를 사용한다고 가정한다. 즉, 이러한 경우에 종래와 같은 명령어 처리 과정을 수행하는 CPU는 처음 사이클에서 명령어 Inst n, Inst n+1, Inst n+2, Inst n+3을 발행한다. 그러나, 다음 사이클에서 Inst n+5와 Inst n+6는 Inst n+4의 결과에 종속되어 있으므로, Inst n+4하나 만을 발행하게 된다. 즉, 도 3에서 명령어 Inst n+5와 n+6은 Inst n+4의 결과가 저장되는 레지스터(m)의 데이타를 소스로 받아들이기 때문에 2번째 사이클에서 발행될 수 없다. 결국, 명령어의 종속성을 적용하지 않고, 순차적으로 명령어를 발행한다고 가정하면, 전체 명령어를 처리하기 위해서는 3사이클이 소요됨을 알 수 있다.
그러나, 처음 사이클에서 명령어 Inst n+3 대신에 Inst n+4을 발행하게 되면, 두 번째 사이클에서는 명령어 Inst n+3, Inst n+5, Inst n+6을 모두 발행할 수 있게 된다. 이 때, 기능 장치(FU)의 수행 시간을 1사이클이라 가정하고, 포워딩 (forwarding)이 구현되어 있다고 가정된다. 여기에서, 포워딩은 각 기능 장치에서 처리된 결과를 레지스터 파일에 다시 저장함과 동시에 다른 기능 장치의 소스 오퍼랜드로 인가하여 이후의 연산 처리에 이용할 수 있는 방식을 나타낸다.
도 4는 도 3에 도시된 명령어 프로그램의 종속성을 설명하기 위한 도면이다. 도 4에 있어서, 각 노드들은 명령어를 나타낸다. 또한, 도 4의 참조 부호 41과 42는 노드 간의 종속성을 나타내는 것으로서, 41과 42의 시작점에 위치하는 노드는 종착점에 위치하는 노드의 부 노드(parent node)가 되고, 종착점에 위치하는 노드는 부 노드의 자 노드(child node)로 정의된다. 이 때, 한 명령어의 우선 순위(Priority)은 도 4에 도시된 종속성 흐름도의 해당 노드가 갖는 자 노드의 갯수로 정의될 수 있다. 도 4를 참조하면, Inst n, Inst n+1, Inst n+2, Inst n+3은 각각 명령어들간에 서로 종속되어 있지 않으므로 우선 순위는 0가 됨을 알 수 있다. 반면, 명령어 Inst n+4는 2개의 자 노드를 가지므로 우선 순위는 2라 할 수 있다. 여기에서, 각 명령어의 우선 순위를 구하는 방법에는 정적(Static)인 방법과 동적(Dynamic)인 방법이 있다. 정적인 방법은 프로그램 컴파일 단계에서 프로그램의 명령어간 종속성을 분석하여 각 명령어에 우선 순위를 할당하는 방식을 말한다. 또한, 동적인 방법은 프로그램을 수행하면서 각 명령어 간의 종속성을 분석하여 우선 순위를 결정하는 방식을 말한다.
도 5는 본 발명에 따른 병렬 프로세서를 위한 무순서 명령어 발행 방법을 설명하기 위한 플로우차트로서, 새로운 명령어가 페치될 때 명령 윈도우 내의 명령어들에 대한 기능 장치와 소스들이 유효한가를 판단하여 발행 가능한 명령을 구분하는 단계(제500~520단계), 발행 가능한 명령어들을 우선 순위에 따라서 발행하는 단계(제530단계)를 포함한다.
또한, 제530단계는 페치된 명령어와 명령 윈도우 내에 존재하는 명령어들의 인덱스를 비교하여 페치된 명령어가 명령 윈도우 내의 명령어에 의해 종속되는가를 판단하는 단계(제532~534단계), 만일 종속되면 우선 순위 별로 명령어를 구분하여 높은 순서대로 발행하고, 종속되지 않으면 발행 가능한 명령어들을 순차적으로 발행하는 단계(제536~538단계)를 포함한다.
즉, 종래에는 무순서 명령어 발행 과정에서 명령어의 소스 오퍼랜드와 상기 명령어가 사용하려는 기능 장치(FU)가 유효한 경우에 순차적으로 발행되었으나, 본 발명에서는 명령어의 소스 오퍼랜드와 기능 장치가 유효한 명령어에 대해서 도 4에서와 같이 부여된 우선 순위(priority)에 따라 발행되도록 하는 것을 특징으로 한다. 다시말하면, 종래의 병렬 프로세서는 명령어를 기능 장치(FU)로 보내줄 때 보내줄 명령어의 후행 명령어와의 종속 관계에 관계없이 순차적으로 선택하여 보내준다. 그러나 본 발명에서는 명령어를 기능 장치(FU)로 보내줄 때 그 명령어의 후행 명령어들과의 종속관계에 의해 우선 순위를 부여하여, 그 우선순위에 따라 기능 장치(FU)로 보내준다. 결과적으로 남아있는 명령어들의 병렬성을 높임으로써 병렬 프로세서의 성능이 높아진다.
도 6은 본 발명에 따른 병렬 프로세서를 위한 무순서 명령어 발행 장치를 나타내는 실시예의 블럭도로서, 명령어 저장부(600), 종속성 추출부(610), 발행 큐(Issue Queue)(620), 발행 제어부(630), 레지스터 파일(640) 및 기능 블럭(650)을 포함한다. 여기에서, 기능 블럭(650)은 m개의 기능 장치들(65a~65m)을 포함한다. 병렬 프로세서를 위한 무순서 명령어 발행 장치는 각 명령어의 우선 순위를 판단함에 있어서 앞서 설명한 동적인 방법과 정적인 방법을 이용할 수 있다. 도 6에 도시된 명령어 발행 장치는 동적인 방법으로 종속성을 추출하여 우선 순위에 따라 명령어를 발행하는 장치의 바람직한 실시예라 할 수 있다. 따라서 프로그램을 수행하면서 각 명령어간의 종속성을 분석하여 우선 순위를 결정하므로 기존의 컴파일러로 컴파일된 프로그램을 그대로 사용할 수 있다는 장점이 있다. 하지만 우선 순위를 결정하기 위한 로직이 필요하므로 프로세서의 면적이 증가하고 속도를 향상시키는데 어려움이 있을 수 있다. 도 6의 명령어 발행 장치에서는 우선 순위를 결정하기 위한 로직으로 종속성 추출부(610)가 사용되며 이에 대해서는 후술된다.
도 6에 도시된 명령어 저장부(600)는 CPU 내부의 명령 캐쉬 메모리 또는 외부의 메인 메모리가 될 수 있으며, 처리해야할 다수의 명령어들을 저장한다.
종속성 추출부(610)는 발행 큐(620)에 저장된 명령어들의 논리적 목적/소스 인덱스들을 저장하고, 상기 명령어 저장부(600)에서 페치된 명령어의 목적 (DESTINATION)/소스(SOURCE) 인덱스와, 발행 큐(620)에 저장된 명령어들의 목적/소스 인덱스들이 서로 일치하는가를 판단하여 명령어들 간의 종속성 여부를 추출한다. 또한, 추출된 결과에 의해 명령어들 간의 우선 순위를 갱신하도록 제어한다.
즉, 종속성 추출부(610)는 페치된 명령어(Inst_F)의 목적/소스 인덱스와, 상기 발행 큐(620)에 저장된 명령어들(Inst_Q)의 목적/소스 인덱스들을 비교하여 헤저드를 검출하고, 헤저드가 검출될 때 발행 큐(620)의 해당 명령어에 대해 매치 신호(MATCH)를 발생시킨다.
발행 큐(620)는 명령어 저장부(600)에서 미리 페치된 명령어들을 순차적으로 저장하며, 각 명령어들에 대한 물리적 목적/소스 인덱스 필드와, 발행 필드(ISS FIELD) 및 우선 순위 필드(PRT FIELD)를 포함하고, 발행 제어부(630)에서 출력되는 발행 제어 신호(ISS_CON)에 응답하여 우선 순위가 높은 명령어를 발행한다. 즉, 발행 큐(620)는 종속성 추출부(610)에서 출력되는 매치 신호(MATCH)에 응답하여 각 명령어들에 대한 우선 순위 필드의 값을 갱신하고, 갱신된 값에 의해 우선 순위 필드에서 발생되는 포화 비트(ST_BIT)를 발행 제어부(630)로 출력한다.
발행 제어부(630)는 발행 큐(620)에 저장된 명령어에 대한 기능 장치들 및 소스 오퍼랜드들이 유효한가를 판단하고, 우선 순위에 따라서 명령어를 발행하도록 발행 제어 신호(ISS_CON)를 생성한다. 이 때, 발행 큐(620)에 저장된 명령어의 우선 순위는 포화 비트(ST_BIT)에 의해 판단될 수 있다.
레지스터 파일(640)은 발행 큐(620)에서 발행된 명령어의 소스 인덱스가 지정하는 레지스터에 저장된 데이타들을 기능 블럭(650)의 해당 기능 장치로 출력하고, 해당 기능 장치에서 연산 처리된 결과를, 발행된 명령어의 목적 인덱스가 지정하는 레지스터 위치에 저장한다.
기능 블럭(650)의 각 기능 장치들(65a~65m)은 레지스터 파일(640)에서 출력되는 소정의 소스 데이타들을 연산 처리하고, 연산 처리된 결과를 레지스터 파일(640)의 목적 위치에 저장한다. 또한, 기능 블럭(650)의 각 기능 장치들 (65a~65m)은 소정의 연산 처리가 완료되면, 상기 각 기능 장치가 유효(available)하다는 사실을 발행 제어부(630)에 통보해준다.
또 다른 실시예로서, 무순서 명령어 발행 시에 정적인 방법으로 명령어간의 우선 순위를 판단하는 명령어 발행 장치를 구현할 수 있다. 정적인 방법을 사용하면 명령어 프로그램의 컴파일 단계에서 이미 종속성이 판단되어 명령어 간에 우선 순위가 결정되므로, 우선 순위를 결정해주는 로직을 구현해주지 않아도 되며 따라서 하드웨어의 구조가 간단해지며 수행속도를 높일 수 있는 장점이 있다. 다만 정적인 방법을 사용하기 위해서는 먼저 컴파일러가 우선 순위를 결정할 수 있는 기능을 가져야 하므로 기존의 컴파일러를 사용하여 컴파일된 프로그램은 본 발명이 구현된 프로세서에서는 성능향상이 어려운 단점이 있다. 본 발명의 다른 실시예인 정적인 방법으로 명령어간의 우선 순위를 판단하는 무순서 명령어 발행 장치는 도 6에 도시된 종속성 추출부(610)를 필요로 하지 않는다. 즉, 명령어 저장부(600)에서 페치되는 명령어에는 이미 우선 순위가 할당되어 있다. 따라서, 발행 큐(620)에 저장된 각 명령어들은 각각의 우선 순위 필드에 저장된 값에 의해 우선 순위가 결정되고, 결정된 우선 순위에 따라서 발행될 수 있다.
도 7은 도 6에 도시된 무순서 명령어 발행 장치의 발행 큐(620)를 나타내는 도면이다. 도 7을 참조하면, 명령어 발행 큐(620)는 복수 개의 명령어들(Inst 1~Inst n)의 저장 영역들(75a~75n)로 구성되고, 각 저장 영역들(75a~75n)은 목적 인덱스 필드(70), 소스 인덱스 필드(72), 발행 필드(76) 및 우선 순위 필드(78)를 포함한다. 여기에서, 소스 인덱스 필드(72)는 제1소스 인덱스(src1)와 제2소스 인덱스(src2)를 포함한다. 또한, 목적 인덱스 필드(70)와 소스 인덱스 필드(72)는 각 명령어에 대한 물리적 인덱스를 나타낸다.
도 7의 발행 큐(620)에 있어서, 발행 필드(76)는 각 명령어들을 발행할 수 있는지의 여부를 나타내는 데이타 영역으로서, 해당 명령어의 기능 장치와 소스 오퍼랜드들이 유효한가에 의해 결정된다. 또한, 우선 순위 필드(78)는 각 명령어의 우선 순위를 나타내는 데이타 영역이다. 여기에서, 발행 큐(620)에 저장된 명령어들은 명령 윈도우(Instruction Window)로 정의될 수 있다.
도 8은 도 6에 도시된 무순서 명령어 발행 장치의 종속성 추출부(610)를 나타내는 바람직한 실시예의 도면이다. 도 8을 참조하면, 종속성 추출부(610)는 CAM(Content Addressable Memory)으로 구현되는 것이 바람직하다. 즉, CAM(80)은 각각 발행 큐(620)에 저장된 명령어(Inst_Q)들의 논리적인 인덱스를 저장하며, 페치된 명령어(Inst_F)(82)의 목적/소스 필드(dest_F/source_F)에 저장된 목적/소스 인덱스와 발행 큐(620)에 저장된 각 명령어들의 목적/소스 인덱스를 비교하여 헤저드를 검출하고, 검출된 결과에 응답하여 매치 신호(MATCH)를 발생시킨다. 이 때, 발생된 매치 신호(MATCH)는 발행 큐(620)의 우선 순위 필드(PRT)(78)로 인가된다.
도 8에 도시된 종속성 추출부(610)의 헤저드 검출 동작을 설명하면 다음과 같다. 우선, 명령어 저장부(600)에서 페치된 명령어(Inst_F)의 소스 인덱스와 발행 큐(620)에 저장된 각 명령어들(Inst_Q)의 목적 인덱스를 비교하고, 그 결과가 일치하면 RAW헤저드가 발생되는 것으로 판단한다.
또한, 명령어 저장부(600)에서 페치된 명령어(Inst_F)의 목적 인덱스와 발행 큐(620)에 저장된 각 명령어들(Inst_Q)의 소스 인덱스를 비교하고, 그 결과가 일치하면, WAR 헤저드가 발생되는 것으로 판단한다.
한편, 명령어 저장부(600)에서 페치된 명령어(Inst_F)의 목적 인덱스와 발행 큐(620)에 저장된 각 명령어들(Inst_Q)의 목적 인덱스를 비교하고, 그 결과가 일치하면 WAW 헤저드가 발생되는 것으로 판단한다.
이와 같이, WAW, WAR, RAW헤저드를 검출하게 되면, 상기 헤저드에 해당하는 발행 큐(620)의 각 명령어 저장 영역으로 매치 신호(MATCH)를 발생시킨다. 예를 들어, CAM(80)에 n개의 명령어에 대한 인덱스가 저장되어 있다고 가정할 때, n개의 각 저장 영역(80a~80n)은 페치된 명령어(Inst_F)의 인덱스와 비교된 결과에 의해 각각 n개의 매치 신호를 발생시킬 수 있다. 따라서, CAM(80)의 각 저장 영역(80a~80n)에서 발생되는 매치 신호를 MATCH 1~MATCH n으로 나타낸다.
도 9는 도 7에 도시된 발행 큐(620)의 우선 순위 필드(78)를 구현한 실시예의 블럭도로서, 쉬프트 카운터(90)와 포화 비트 발생부(92)를 포함한다.
쉬프트 카운터(90)는 종속성 추출부(610)에서 출력되는 매치 신호(MATCH)에 응답하여 카운팅 값을 1비트 씩 좌측으로 쉬프트하고, 쉬프트된 결과를 포화 비트 발생부(92)로 출력한다.
포화 비트 발생부(92)는 쉬프트 카운터(90)에서 출력되는 결과를 입력하고, 상기 결과가 소정 값 이상이 되면 포화 비트(SAT_BIT)를 발생시킨다. 즉, 포화 비트(SAT_BIT)는 쉬프트 카운터(90)의 소정 비트 출력 중에서 최상위 비트(MSB)를 나타내는 것으로서, 미리 설정된 종속성 갯수 이상의 매치 신호(MATCH)가 발생되면, 쉬프트 카운터(90)의 출력에 의해 포화 비트(SAT_BIT)가 세팅된다. 이러한 쉬프트 카운터(90)를 이용하는 것은 하드웨어적인 복잡성을 줄이기 위해서이다.
이하에서, 본 발명에 따른 무순서 명령어 발행 방법 및 장치의 동작을 도 5~도 9를 참조하여 상세히 설명한다.
우선, 도 6에 도시된 무순서 명령어 발행 장치는 외부의 메인 메모리 또는 CPU 내부의 명령 캐쉬 메모리와 같은 명령어 저장부(600)에서 새로운 명령어가 페치되었는가를 판단한다(제500단계). 이 때, 새로운 명령어가 페치되었으면, 명령 윈도우의 N(1,2,...)번째 명령어로 이동한다(제505단계). 여기에서, 명령 윈도우는 발행 큐(620)에 저장된 명령어들 전체를 나타내거나, 저장된 명령어들 중 일부를 나타낼 수 있다. 제505단계에서 제N번째 명령어로 이동하였으면, N번째 명령어에 대한 기능 장치와 소스들이 유효한가를 판단한다(제510단계). 만일, N이 2라 가정할 때, 발행 제어부(630)는 기능 블럭(650)과 발행 큐(620)의 발행 필드(76) 로부터 2번째 명령어를 수행하는데 필요한 기능 장치와 소스 오퍼랜드들이 유효하다는사실을 통보받았을 때만 상기 2번째 명령어를 발행 가능한 것으로 판정한다. 즉, 제510단계에서 N번째 명령어에 대한 기능 장치와 소스들이 유효한 것으로 판단되면, N번째 명령어를 발행 가능한 것으로 판별하여 발행 가능 목록에 추가한다(제515단계), 제515단계 후에 명령 윈도우가 종료되었는가를 판단한다 (제520단계). 이러한 과정은 명령 윈도우가 종료될 때까지 반복되며, 명령 윈도우가 종료되었으면, 발행 큐(620)에 저장된 발행 가능한 명령어들 중에서 우선 순위가 높은 명령어를 선택하여 발행한다(제53O단계). 구체적으로, 우선 순위가 높은 명령어를 선택하는 과정은 상술한 바와 같이 종속성 추출부(610)와 발행 큐(620)의 우선 순위 필드(98)에 의해 이루어진다. 즉, 종속성 추출부(610)는 명령어 저장부(600)에서 페치된 명령어(Inst_F)와 발행 큐(620)의 명령 윈도우 내에 존재하는 발행 가능한 명령어들(Inst_Q)의 인덱스를 비교한다(제532단계). 제532단계에서 종속성 추출부(610)는 페치된 명령어(Inst_F)의 목적/소스 인덱스와, 발행 큐(620)에 저장된 명령어(Inst_Q)의 목적/소스 인덱스를 비교한 결과로부터, 페치된 명령어(Inst_F)가 명령 윈도우 내에 존재하는 발행 가능한 명령어들(Inst_Q)에 의해 종속되었는가를 판단한다(제534단계). 이 때, 페치된 명령어는 명령 윈도우 내에 존재하는 명령어를 선행 명령어라 할 때, 후행 명령어라 할 수 있다. 즉, 명령어의 종속성 여부를 검출하는 것은, 페치된 명령어와 명령 윈도우 내의 명령어들 간에 헤저드가 발생되었는가를 검출하는 것으로서 이루어진다. 제534단계에서, 종속성 추출부(610)는 헤저드가 발생될 때, 발행 큐(620)의 해당 명령어로 매치 신호(MATCH)를 발생시키고, 발행 큐(620)의 해당 명령어에 대한 우선 순위필드(78)는 매치 신호(MATCH)에 응답하여 내부의 쉬프트 카운터(90)를 동작시킴으로써 우선 순위 필드(PRT)(78)의 값을 갱신한다. 따라서, 쉬프트 카운팅 값이 소정 수 이상이 되면, 우선 순위 필드(78)의 포화 비트 발생부(92)는 포화 비트(SAT_BIT)를 발생시키고, 발생된 포화 비트(SAT_BIT) 를 발행 제어부(630)로 출력한다. 발행 제어부(630)는 발행 가능한 명령어의 목록에서 우선 순위를 판단하여 발행 제어 신호(ISS_CON)를 출력한다.
이와 같이 발행 큐(620)는 발행 제어부(630)에서 우선 순위에 따라 명령어를 발행하도록 발행 제어 신호(ISS_CON)를 출력하면, 우선 순위 별로 명령어를 구분하여 높은 것부터 발행하게 된다(제536단계), 또한, 제534단계에서 페치된 명령어가 명령 윈도우 내에 존재하는 다른 명령어들에 의해 종속되지 않으면, 발행 큐(620)는 제515단계에서 발행 가능한 명령어로 판별한 명령어들을 순차적으로 발행한다(제538단계).
본 발명에 따르면, 발행 큐에 저장된 명령어를 순차적으로 발행하는 것이 아니라, 명령어들간의 종속성을 판단하여 우선 순위가 높은 순서대로 명령어를 발행함으로써 명령어 처리 시의 오동작을 없앨 수 있을 뿐만 아니라, 많은 명령어가 종속되어 있는 명령어를 빨리 처리해 줌으로써 남아있는 명령들에 대한 병렬성을 높일 수 있다는 효과가 있다.

Claims (6)

  1. (a)새로운 명령어가 페치되었는가를 판단하는 단계;
    (b)상기 명령어가 페치되었으면, 명령 윈도우의 제N(1, 2, ...)번째 명령어로 이동하는 단계;
    (c)상기 제N번째 명령어에 대한 기능 장치와 소스들이 유효한가를 판단하는 단계;
    (d)상기 (c)단계에서 상기 기능 장치와 소스들이 유효한 것으로 판단되면, 상기 제N번째 명령어를 발행 가능한 것으로 판별하는 단계;
    (e)상기 명령 윈도우가 종료되었는가를 판단하고, 상기 명령 윈도우가 종료되지 않았으면 상기 (b)단계로 복귀하는 단계; 및
    (f)상기 명령 윈도우가 종료되었으면, 상기 페치된 명령어와 상기 명령 윈도우에 존재하는 발행 가능한 명령어들을 비교하여 우선 순위가 높은 순서대로 발행하는 단계를 포함하는 것을 특징으로 하는 무순서 명령어 발행 방법.
  2. 제1항에 있어서, 상기 (f)단계는,
    (f1)상기 페치된 명령어와 명령 윈도우에 존재하는 발행 가능한 명령어들의 인덱스를 비교하는 단계;
    (f2)상기 비교된 결과에 따라서 상기 페치된 명령어가 상기 명령 윈도우에 존재하는 명령어에 의해 종속되는가를 판단하는 단계;
    (f3)상기 (f2)단계에서 상기 페치된 명령어가 명령 윈도우에 존재하는 명령어들에 의해 종속되는 것으로 판단되면, 우선 순위 별로 명령어를 구분하여 높은것부터 발행하는 단계; 및
    (f4)상기 (f2)단계에서 상기 페치된 명령어가 상기 명령 윈도우에 존재하는 명령어들에 의해 종속되지 않은 것으로 판단되면, 상기 발행 가능한 것으로 판별된 명령어들을 순차적으로 발행하는 단계를 포함하는 것을 특징으로 하는 무순서 명령어 발행 방법.
  3. 제2항에 있어서, 상기 (f2)단계는,
    상기 페치된 명령어의 목적/소스 인덱스와 상기 명령 윈도우 내에 존재하는 명령어의 목적/소스 인덱스들을 비교하여 헤저드가 발생되었는가를 검출하는 단계임을 특징으로 하는 무순서 명령어 발행 방법.
  4. 외부의 메인 메모리 또는 마이크로프로세서 내부의 명령 캐쉬 메모리와 같은 명령어 저장부로부터 소정의 명령어를 페치하고, 상기 페치된 명령어를 우선 순위에 따라서 발행하는 명령어 발행 장치에 있어서,
    상기 명령 저장부로부터 미리 페치된 명령어들을 순차적으로 저장하며, 상기 각 명령어들에 대한 물리적 목적/소스 인덱스 필드, 발행 필드 및 우선 순위 필드를 포함하고, 소정의 발행 제어 신호에 응답하여 우선 순위가 높은 명령어를 발행하는 발행 큐;
    상기 발행 큐에 저장된 명령어들의 논리적 목적/소스 인덱스들을 저장하고, 상기 명령어 저장부에서 페치된 명령어의 목적/소스 인덱스와, 상기 발행 큐에 저장된 명령어들의 목적/소스 인덱스들이 서로 일치하는가를 판단하여 상기 명령어들 간의 종속성 여부를 추출하는 종속성 추출 수단;
    소정의 연산 처리를 위한 다수 개의 기능 장치들을 구비하는 기능 블럭;
    상기 발행 큐에서 발행된 명령어의 소스 인덱스가 지정하는 레지스터에 저장된 데이타들을 상기 기능 블럭의 해당 기능 장치로 출력하고, 상기 해당 기능 장치에서 연산 처리된 결과를 상기 발행된 명령어의 목적 인덱스가 지정하는 레지스터 위치에 저장하는 레지스터 파일; 및
    상기 발행 큐에 저장된 명령어의 각 기능 장치 및 소스 오퍼랜드들이 유효한가를 판단하고, 우선 순위에 따라서 명령어를 발행하도록 상기 발행 제어 신호를 생성하는 발행 제어 수단을 포함하는 것을 특징으로 하는 무순서 명령어 발행 장치.
  5. 제4항에 있어서, 상기 종속성 추출 수단은,
    콘텐트 어드레서블 메모리(Content Addressable Memory:CAM)로 구현되며, 상기 명령어 저장부에서 페치된 명령어의 목적/소스 인덱스와, 상기 발행 큐에 저장된 명령어들의 목적/소스 인덱스들을 비교하여 헤저드를 검출하고, 상기 헤저드가 검출될 때 상기 발행 큐의 해당 명령어에 대하여 매치 신호를 발생시키는 것을 특징으로 하는 무순서 명령어 발행 장치.
  6. 제5항에 있어서, 상기 발행 큐에 저장된 각 명령어들은 상기 매치 신호에 응답하여 각각의 우선 순위 필드의 값이 갱신되며,
    상기 우선 순위 필드는,
    상기 매치 신호에 응답하여 한 비트씩 쉬프트되는 쉬프트 카운터; 및
    상기 쉬프트 카운터의 출력이 소정 수 이상이 되면 포화 비트를 발생시켜 상기 발행 제어 수단으로 출력하는 포화 비트 발생 수단을 포함하는 것을 특징으로 하는 무순서 명령어 발행 장치.
KR1019990019982A 1999-06-01 1999-06-01 병렬 프로세서를 위한 무순서 명령어 발행 방법 및 장치 KR100316710B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1019990019982A KR100316710B1 (ko) 1999-06-01 1999-06-01 병렬 프로세서를 위한 무순서 명령어 발행 방법 및 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1019990019982A KR100316710B1 (ko) 1999-06-01 1999-06-01 병렬 프로세서를 위한 무순서 명령어 발행 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20010001022A KR20010001022A (ko) 2001-01-05
KR100316710B1 true KR100316710B1 (ko) 2001-12-12

Family

ID=19589096

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019990019982A KR100316710B1 (ko) 1999-06-01 1999-06-01 병렬 프로세서를 위한 무순서 명령어 발행 방법 및 장치

Country Status (1)

Country Link
KR (1) KR100316710B1 (ko)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102204066B1 (ko) 2017-09-25 2021-01-15 코오롱인더스트리 주식회사 이종 재질의 중공사막을 구비한 중공사막 모듈 및 이를 포함하는 연료전지 막가습기
KR102252042B1 (ko) 2017-09-26 2021-05-13 코오롱인더스트리 주식회사 조립형 카트리지 블록 및 이를 포함하는 중공사막 모듈
KR102170523B1 (ko) 2017-11-15 2020-10-27 주식회사 하이필 연료전지 막가습기
KR102446774B1 (ko) 2017-11-15 2022-09-22 코오롱인더스트리 주식회사 연료전지 막가습기
KR102216355B1 (ko) 2017-12-29 2021-02-16 코오롱인더스트리 주식회사 유체의 흐름 방향 제어가 가능한 연료전지 막가습기
KR102240511B1 (ko) 2017-12-29 2021-04-14 코오롱인더스트리 주식회사 연료전지 막가습기
KR102263284B1 (ko) 2018-06-05 2021-06-09 코오롱인더스트리 주식회사 연료전지용 막가습기
KR102265021B1 (ko) 2018-06-05 2021-06-14 코오롱인더스트리 주식회사 연료전지용 막가습기
JP7224372B2 (ja) 2018-06-12 2023-02-17 コーロン インダストリーズ インク 複合中空糸膜、その製造方法、これを含む中空糸膜カートリッジ及び燃料電池膜加湿器
JP7196303B2 (ja) 2018-12-28 2022-12-26 コーロン インダストリーズ インク 燃料電池用膜加湿器
CN113557619A (zh) 2019-03-07 2021-10-26 可隆工业株式会社 用于燃料电池的膜加湿器及包括其的燃料电池***
KR20220035805A (ko) 2020-09-14 2022-03-22 코오롱인더스트리 주식회사 연료전지 막가습기 및 이를 포함하는 연료전지 시스템
KR20220035804A (ko) 2020-09-14 2022-03-22 코오롱인더스트리 주식회사 연료전지 막가습기 및 이를 포함하는 연료전지 시스템
KR20220127540A (ko) 2021-03-11 2022-09-20 코오롱인더스트리 주식회사 연료전지 막가습기 및 이를 포함하는 연료전지 시스템
KR20220127539A (ko) 2021-03-11 2022-09-20 코오롱인더스트리 주식회사 연료전지 막가습기 및 이를 포함하는 연료전지 시스템

Also Published As

Publication number Publication date
KR20010001022A (ko) 2001-01-05

Similar Documents

Publication Publication Date Title
JP2938426B2 (ja) 順不同ロード命令とストア命令との干渉を検出回復するための方法及び装置
KR100316710B1 (ko) 병렬 프로세서를 위한 무순서 명령어 발행 방법 및 장치
KR102379894B1 (ko) 벡터 연산들 수행시의 어드레스 충돌 관리 장치 및 방법
JP6236443B2 (ja) ベクトル処理中のデータ要素処理のための順序制御
KR100616722B1 (ko) 수퍼스칼라프로세서내의파이프라인명령디스패치유닛
KR102256188B1 (ko) 데이터 처리장치 및 벡터 오퍼랜드를 처리하는 방법
CN107851019B (zh) 用于执行叠接操作的设备和方法
WO2014090085A1 (en) Branch-free condition evaluation
WO2014090091A1 (en) Tracking multiple conditions in a general purpose register and instruction therefor
TWI613590B (zh) 處理器流水線中的靈活的指令執行
KR101016257B1 (ko) 프로세서 및 정보 처리 장치
JP2535252B2 (ja) 並列処理装置
US6629238B1 (en) Predicate controlled software pipelined loop processing with prediction of predicate writing and value prediction for use in subsequent iteration
US9575897B2 (en) Processor with efficient processing of recurring load instructions from nearby memory addresses
JP2004529405A (ja) 依存性を決定するためのコンテンツ・アドレス指定可能メモリを実装したスーパースケーラ・プロセッサ
WO2020065250A1 (en) An apparatus and method for predicting source operand values and optimized processing of instructions
US20170010892A1 (en) Processor with efficient memory access
KR100837400B1 (ko) 멀티스레딩/비순차 병합 기법에 따라 처리하는 방법 및장치
US6769057B2 (en) System and method for determining operand access to data
TW201823972A (zh) 向量產生指令
JP2002014868A (ja) メモリ参照動作検出機構を有するマイクロプロセッサおよびコンパイル方法
JP3915019B2 (ja) Vliwプロセッサ、プログラム生成装置、および記録媒体
EP3320428A1 (en) Processor with efficient memory access
JP2503223B2 (ja) 先行制御方式
KR100515039B1 (ko) 조건부 명령어를 고려한 파이프라인 상태 표시 회로

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: 20061030

Year of fee payment: 6

LAPS Lapse due to unpaid annual fee