KR100957060B1 - 명령어 병렬 스케줄러, 방법 및 그 기록매체 - Google Patents

명령어 병렬 스케줄러, 방법 및 그 기록매체 Download PDF

Info

Publication number
KR100957060B1
KR100957060B1 KR1020070129434A KR20070129434A KR100957060B1 KR 100957060 B1 KR100957060 B1 KR 100957060B1 KR 1020070129434 A KR1020070129434 A KR 1020070129434A KR 20070129434 A KR20070129434 A KR 20070129434A KR 100957060 B1 KR100957060 B1 KR 100957060B1
Authority
KR
South Korea
Prior art keywords
instruction
parallel
single operation
instructions
queue
Prior art date
Application number
KR1020070129434A
Other languages
English (en)
Other versions
KR20090062286A (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 KR1020070129434A priority Critical patent/KR100957060B1/ko
Publication of KR20090062286A publication Critical patent/KR20090062286A/ko
Application granted granted Critical
Publication of KR100957060B1 publication Critical patent/KR100957060B1/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 or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or 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
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags

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

본 발명에 의한 명령어 병렬 스케줄링 방법은 컴파일러에 의하여 변환된 명령어를 단일연산 명령어 집합으로 분리하는 단계, 단일연산 명령어 집합을 복수개의 기능장치에 상응하는 각각의 큐(Queue)에 순차로 할당하는 단계, 각각의 큐에서 대기하는 단일연산 명령어간의 병렬처리 조건을 판단하는 단계 및 병렬처리 조건이 만족되는 경우 각각의 큐의 단일연산 명령어를 포함하는 명령어 병렬 코드를 생성하는 단계를 포함하되, 명령어 병렬 코드에 포함되는 단일연산 명령어는 쉐이더 프로세서에 의하여 병렬처리 되는 것을 특징으로 한다. 본 발명에 의하면 단일 연산 명령어의 병렬처리 조건을 판단하여 조건을 만족하는 경우에만 명령어 병렬 코드를 생성하여 쉐이더 프로세서가 잘못된 처리결과를 출력하는 것을 방지할 수 있다.
Figure R1020070129434
단일연산 명령어, 복합연산 명령어, 명령어 병렬 처리 조건, 명령어 병렬코드

Description

명령어 병렬 스케줄러, 방법 및 그 기록매체{Scheduler and method for scheduling instruction and the record medium recoded the program realizing the same}
본 발명은 명령어 스케줄링 장치, 방법 및 그 기록매체에 관한 것으로서, 좀 더 상세하게는 명령어 병렬조건 검사 및 명령어 순차분배를 통하여 조건부 명령어 병렬처리를 가능하도록 하는 명령어 스케줄링 장치, 방법 및 그 기록매체에 관한 것이다.
최근 그래픽스 연산장치는 다양한 삼차원 그래픽스 표현을 구현하기 위하여 고도로 발전되고 있다. 즉, 그래픽스 연산장치는 광고, 영화 등에 사용되는 것은 물론 PC, PDA, 휴대용 게임기 또는 이동통신단말기 등의 각종 개인용 디지털 디스플레이 장치에 사용되고 있어 날로 높아지는 그래픽 재현 요구 수준에 맞게 고도화 되고 있다.
그래픽 연산장치의 일종인 쉐이더 프로세서는 쉐이더 프로그램으로 구현된 명령어들을 처리함으로써 정점(Vertex)의 공간 좌표 변환, 조명 계산, 색상 값 계산, 텍스쳐링 연산 등을 실행한다.
쉐이더 프로그램은 쉐이더 언어에 의하여 작성된 코드로서 쉐이더 언어 컴파일러에 의해서 번역되어 쉐이더 프로세서에 의하여 처리된다. 그래픽 프로그램인 쉐이더 프로그램은 일련의 벡터 연산 명령어를 포함하기 때문에 처리되어야 하는 데이터가 매우 많다. 따라서 이를 수용하기 위해서는 이를 처리할 쉐이더 프로세서가 복수개의 연산 장치를 포함하여야 하며 최근 이러한 쉐이더 프로세서(예를 들어, AMD 사의 Radeon HD 2000 계열)가 등장하고 있다.
이러한 쉐이더 프로세서가 포함하는 복수개의 연산장치는 하나의 클럭 주기 내에서 동시에 명령어(Instruction)를 처리할 수 있는 독립된 기능장치이다. 이러한 복수개의 연산장치를 통하여 복수개의 명령어를 처리하는 것은 그 처리 속도나 효율이 일응 월등하지만 이를 위해서는 쉐이더 프로세서에서 명령어들이 병렬로 처리될 수 있는 조건이 만족되어야 한다.
종래에는 이러한 병렬 처리조건의 만족을 위하여 VLIW(Very Long Instruction Word) 스케줄링 기법을 이용하여 왔다.
종래의 VLIW 스케줄링 기법은 먼저 명령어들의 처리로 연산되는 데이터들의 종속관계를 조사한다. 이로서 나타나는 종속관계에 따른 비 순환형 그래프 자료(DDG : Data Dependency Graph)를 생성하여 자손 노드의 개수를 기준으로 순위를 부여하여 순위가 높은 명령어를 우선적으로 쉐이더 프로세서의 명령 이슈슬롯(Issue Slot)에 할당하여 각 기능장치가 처리할 수 있도록 하는 방식이었다.
그러나 상술한 종래의 VLIW 스케줄링 기법은 데이터들의 종속관계를 조사하여 비 순환형 그래프 자료를 생성하는데 소요되는 시간이 길어지기 때문에 임베디드(Embedded) 장치 환경에서는 적용하기 곤란하다.
또한, 주로 스칼라 연산만을 기준으로 스케줄링이 이루어지므로 벡터 연산 명령어들을 포함하는 쉐이더 프로그램을 처리하기 위한 스케줄링 기법에는 적용하기가 어려운 문제가 있다.
본 발명은 벡터 연산 명령어를 포함하는 쉐이더 프로그램을 단일연산 명령으로 분리하되, 분리된 명령어를 쉐이더 프로세서의 기능장치 각각에 상응하는 큐에 순차적으로 할당하여 각 큐의 명령어가 동시에 병렬 처리될 수 있도록 하는 명령어 스케줄링 장치, 방법 및 그 기록매체를 제공하는 데 그 목적이 있다.
본 발명은 쉐이더 프로세서가 병렬로 처리할 수 명령어의 처리조건을 판단하여 쉐이더 프로세서의 기능장치에서 조건부로 병렬처리 되도록 하여 처리속도와 효율을 높이는 명령어 스케줄링 장치, 방법 및 그 기록매체를 제공하는 데 그 목적이 있다.
본 발명의 또 다른 목적들은 이하에 서술되는 발명의 실시를 위한 구체적인 내용의 설명을 통하여 보다 명확해질 것이다.
본 발명의 일 측면에 따르면, 명령어 병렬 스케줄링 방법이 제공된다.
본 발명의 일 실시예에 따르면, 명령어 병렬 스케줄러가 쉐이더 프로세서로 전달되는 명령어를 병렬 스케줄링 하는 방법-여기서 상기 쉐이더 프로세서는 명령어를 처리하는 복수개의 기능장치를 포함하고 상기 복수개의 기능장치는 각각 명령어를 병렬처리함-에 있어서, 컴파일러에 의하여 변환된 명령어를 단일연산 명령어 집합으로 분리하는 단계; 상기 단일연산 명령어 집합을 상기 복수개의 기능장치에 상응하는 각각의 큐(Queue)에 순차로 할당하는 단계; 상기 각각의 큐에서 대기하는 단일연산 명령어간의 병렬처리 조건을 판단하는 단계; 및 상기 병렬처리 조건이 만족되는 경우 상기 각각의 큐의 단일연산 명령어를 포함하는 명령어 병렬 코드를 생성하는 단계를 포함하되, 상기 명령어 병렬 코드에 포함되는 상기 단일연산 명령어는 상기 쉐이더 프로세서에 의하여 병렬처리 되는 것을 특징으로 하는 명령어 병렬 스케줄링 방법이 제공된다.
상기 병렬처리 조건을 판단하는 단계는 상기 각각의 큐의 단일연산 명령어에 의하여 연산되는 데이터간의 종속여부를 판단하는 단계를 더 포함할 수 있다.
상기 쉐이더 프로세서는 상기 복수개의 기능장치의 연산 기능을 보조하는 보조 기능장치를 더 포함하는 경우, 상기 병렬처리 조건을 판단하는 단계는 상기 각각의 큐의 단일연산 명령어간의 기능장치 공유여부를 판단하는 단계를 더 포함할 수 있다.
상기 병렬처리 조건이 만족되지 않는 경우, 상기 각각의 큐의 단일연산 명령어 중 일부 큐의 단일연산 명령어만이 포함된 명령어 병렬 코드를 생성하는 단계를 더 포함할 수 있다.
상기 일부 큐의 단일연산 명령어만이 포함된 명령어 병렬코드가 상기 쉐이더 프로세서에서 병렬 처리 또는 단독으로 처리된 후, 상기 병렬처리 조건이 다시 만족되지 않는 경우, 상기 일부 큐를 제외한 나머지 큐의 단일연산 명령어만이 포함된 명령어 병렬 코들를 생성하는 단계를 더 포함할 수 있다.
본 발명의 다른 일 측면에 따르면, 명령어 병렬 스케줄러가 제공된다.
본 발명의 일 실시예에 의하면, 쉐이더 프로세서로 전달되는 명령어를 병렬 스케줄링 하는 명령어 병렬 스케줄러-여기서 상기 쉐이더 프로세서는 명령어를 처리하는 복수개의 기능장치를 포함하고 상기 복수개의 기능장치는 각각 명령어를 병렬처리함-에 있어서, 컴파일러에 의하여 변환된 명령어를 단일연산 명령어 집합으로 분리하여 상기 단일연산 명령어 집합을 상기 복수개의 기능장치에 상응하는 각각의 큐(Queue)에 순차로 할당하는 큐 순차분배부; 상기 각각의 큐에서 대기하는 단일연산 명령어간의 병렬처리 조건을 판단하는 명령어 병렬 처리 조건 판단부; 상기 병렬처리 조건이 만족되는 경우 상기 각각의 큐의 단일연산 명령어를 포함하는 명령어 병렬 코드를 생성하는 명령어 병렬 코드 생성부를 포함하되, 상기 명령어 병렬 코드에 포함되는 상기 단일연산 명령어는 상기 쉐이더 프로세서에 의하여 병렬처리 되는 것을 특징으로 하는 명령어 병렬 스케줄러가 제공된다.
상기 병렬처리 조건이 만족되지 않는 경우, 상기 명령어 병렬 코드 생성부는 상기 각각의 큐의 단일연산 명령어 중 일부 큐의 단일연산 명령어만이 포함된 명령어 병렬 코드를 생성할 수 있다.
본 발명의 또 다른 일 측면에 의하면, 기록매체가 제공된다.
본 발명의 일 실시예에 의하면, 명령어 병렬 스케줄러가 쉐이더 프로세서로 전달되는 명령어를 병렬 스케줄링 하는 방법-여기서 상기 쉐이더 프로세서는 명령어를 처리하는 복수개의 기능장치를 포함하고 상기 복수개의 기능장치는 각각 명령어를 병렬처리함-을 구현하기 위한 프로그램이 기록된 기록매체에 있어서, 컴파일러에 의하여 변환된 명령어를 단일연산 명령어 집합으로 분리하는 단계; 상기 단일연산 명령어 집합을 상기 복수개의 기능장치에 상응하는 각각의 큐(Queue)에 순차로 할당하는 단계; 상기 각각의 큐에서 대기하는 단일연산 명령어간의 병렬처리 조건을 판단하는 단계; 및 상기 병렬처리 조건이 만족되는 경우 상기 각각의 큐의 단일연산 명령어를 포함하는 명령어 병렬 코드를 생성하는 단계를 포함하되, 상기 명령어 병렬 코드에 포함되는 상기 단일연산 명령어는 상기 쉐이더 프로세서에 의하여 병렬처리 되는 것을 특징으로 하는 명령어 병렬 스케줄링 방법을 구현하기 위한 프로그램이 기록된 기록매체가 제공된다.
본 발명에 따르면, 쉐이더 프로세서가 처리할 명령어를 모두 단일 연산 명령어로분리함으로서 기능장치의 하드웨어 구성을 간단하게 할 수 있다.
또한, 본 발명에 따르면, 단일 연산 명령어의 병렬처리 조건을 판단하여 조건을 만족하는 경우에만 명령어 병렬 코드를 생성하여 쉐이더 프로세서가 잘못된 처리결과를 출력하는 것을 방지할 수 있는 효과가 있다.
또한 본 발명에 따르면, 단일 연산 명령어를 기능단위의 집합에 따라 각각 상이한 큐에 할당함으로써 종속성을 가지는 단일 연산 명령어가 병렬적으로 처리되는 것을 방지할 수 있다.
본 발명은 다양한 변환을 가할 수 있고 여러 가지 실시예를 가질 수 있는 바, 특정 실시예들을 도면에 예시하고 상세한 설명에 상세하게 설명하고자 한다. 그러나, 이는 본 발명을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변환, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다. 본 발명을 설명함에 있어서 관련된 공지 기술에 대한 구체적인 설명이 본 발명의 요지를 흐릴 수 있다고 판단되는 경우 그 상세한 설명을 생략한다.
제1, 제2 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다. 예를 들어, 본 발명의 권리 범위를 벗어나지 않으면서 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소도 제1 구성요소로 명명될 수 있다. 및/또는 이라는 용어는 복수의 관련된 기재된 항목들의 조합 또는 복수의 관련된 기재된 항목들 중의 어느 항목을 포함한다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다.
본 출원에서 사용한 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "포함하다" 또는 "가지다" 등의 용어는 명세서상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥 상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
이하, 본 발명의 실시예를 첨부한 도면들을 참조하여 상세히 설명하기로 한 다.
도 1는 본 발명의 일 실시예에 의한 명령어 병렬 스케줄러에 의하여 복수의 명령을 스케줄링하는 과정을 나타낸 도면이다.
먼저 본 발명의 명령어 병렬 스케줄러(120)가 스케줄링하는 쉐이더 프로그램은 마이크로 소프트(사)의 HLSL(High Level Shading Language), NVIDIA(사)의 CG, OpenGL Shading Languge 등의 쉐이더 언어에 의하여 적성된 그래픽 프로그램으로써 다양한 삼차원 그래픽스 표현이 가능하도록 하는 프로그램이다. 쉐이더 프로그램에 의하면 다양한 사물의 3차원 형상이나 사물에 적용되는 조명효과 등을 표현할 수 있으나 쉐이더 프로그램은 벡터 연산 명령 등을 포함하고 있어 쉐이더 프로그램이 실행되려면 임베디드 환경의 쉐이더 프로세서가 필요하다.
도 1를 참조하면 쉐이더 프로세서(120)는 5개의 기능장치(152, 152, …, 160) (FU : Functional Unit) 를 포함하는 5 way 수퍼스칼라 쉐이더 프로세서이다. 도 5에 도시한 5 way 수퍼스칼라 쉐이더 프로세서는 본 발명의 명령어 병렬 스케줄러가 적용되는 쉐이더 프로세서의 예시일 뿐이며 쉐이더 프로세서에 포함되는 기능장치의 수가 이에 한정되는 것이 아님은 자명하다.
복수의 기능장치(152, 152, …, 160)는 쉐이더 프로세서(150)내에 포함되어 동일 클럭 신호(Clock Signal)에 의하여 구동한다. 즉, 복수의 기능장치(152, 152, …, 160)는 하나의 클럭 신호를 병렬적으로 받아 연산을 처리하도록 쉐이더 프로세서(150)내에 구성되어있다. 쉐이더 프로세서(150)는 GPU(Graphic Processing Unit)으로 일반 CPU(Central Processing Unit)에 비하여 기능장치의 수가 많은 것이 일 반적이다.
쉐이더 프로세서(150)에 포함되는 복수의 기능장치(152, 152, …, 160)가 동시에 각 명령어를 처리하기 위해서는 명령어들을 스케줄 하는 것이 필요하다. 명령어는 쉐이더 프로그램이 컴파일된 어셈블리어 형식의 명령어로서 복합 연산 명령어(Multiple Instruction)와 단일연산 명령어(Single Instruction)로 분류될 수 있는데 이는 도 2를 참조하여 상세히 설명하도록 한다.
본 발명의 일 실시예에 의한 명령어 병렬 스케줄러(120)는 각 명령어에 의하여 처리할 데이터 간에 종속성이 존재하는지 여부와 각 기능장치가 특수한 연산을 위하여 공유하게 되는 특수기능장치(미도시)를 동시에 공유하게 되어 명령처리간에 충돌이 생기지 않는지 여부 등을 검토한다. 즉 특수기능장치는 기능장치(152, 152, …, 160)의 연산을 보조하는 보조 기증장치에 해당한다.
만일 데이터간의 종속성이나 명령처리간에 충돌이 발생할 가능성이 없다고 판단된 경우에는 본 발명의 일 실시예에 의한 명령어 병렬 스케줄러(120)는 각 기능장치마다 부여된 큐(Queue)를 통하여 해당 명령을 복수의 기능장치(152, 152, …, 160)로 전달한다.
즉, 식별번호 152의 기능장치는 SI(Single Instruction) 1을, 식별번호 154의 기능장치는 SI 2를, 식별번호 156의 기능장치는 SI 3을, 그리고 식별번호 158의 기능장치는 SI 4를 전달 받는다.
이 후 각 기능장치는 쉐이더 프로세서 내부에 인가되는 클록 신호에 의하여 각 명령에 의하여 데이터를 연산한다.
그러나 병렬조건의 판단 없이 SI 1, SI 2, SI 3, SI 4를 포함하는 명령어 병렬코드(110)가 항상 동시에 처리될 수 있는 것은 아니다. 이는 앞서 언급한 바와 같이 SI 1, SI 2, SI 3, SI 4가 각각 처리하는 데이터 간의 종속성 여부 또는 복수의 기능장치(152, 152, …, 160) 가 공유하게 되는 특수기능장치(SFU : Special Function Unit, 미도시)의 충돌 등에 기인한다.
따라서 본 발명의 명령어 병렬 스케줄러(120)는 각 명령어가 병렬처리 조건을 만족하는지 판단하여 병령처리 조건을 만족하는 명령어만으로 구성된 병렬 명령코드를 생성할 수 있다. 예를 들어 SI 1, SI2 만으로 구성된 병렬 명령코드 또는 SI1 만으로 구성된 명령코드를 쉐이더 프로세서의 기능장치로 전달할 수 있다.
도 2은 본 발명의 일 실시예에 따른 명령어 스케줄링 방법이 수행되는 과정을 나타낸 도면이다.
먼저, 쉐이더 프로그램(200)은 먼저 컴파일러(210)에 의하여 어셈블리어 형식의 코드로 변환된다. 변환된 어셈블리 형식의 코드는 쉐이더 프로그램 연산 명령에 상응하는 명령어들로 구성된다. 즉, 변환된 어셈블리 형식의 코드는 DP3(3-component dot Product), DP4(4-component dot product), XDP(CrossProduct), MUL(Multiply), ADD(Add two vector), LOG(Log Algorithm) 및 EXP(Exponential baxe) 등의 명령어들로 구성된다. 어셈블리어 형식의 명령어 중에는 MUL, ADD, EXP, SQRT와 같은 단일연산 명령어(SI : Single Instruction)도 존재하지만 DP3, DP4 또는 XDP와 같은 복합 연산 명령어(MI : Multiple Instruction)도 존재한다. 복합 연산 명령어는 여러 개의 단일연산 명령으로 분리될 수 있는 명령어를 의미한다.
이를 좀 더 상세히 설명하면 내적(內積) 연산 명령어인 DP4와 같은 경우는 하나의 곱셈 명령과 두 개의 덧셈명령으로 분리된 경우 DP4의 연산과 동일한 결과를 가져온다. 즉, DP 4와 같은 복합 연산 명령어는 1개의 MUL과 2개의 ADD로 분리되어 수행되는 것과 동일하므로 총 3개의 단일연산 명령어로 분리될 수 있다. 이에 대하여는 도 3을 통하여 다시 상세히 후술하기로 한다.
상술한 어셈블리어 형식의 코드는 기능 단위 명령어 블록(230)으로 구성될 수 있다. 즉, 복수개의 단일연산 명령어의 집합으로 구성될 수 있는데 하나의 기능 단위 명령어 블록(230)에는 하나 이상의 단일연산 명령어와 복합 연산 명령어가 포함될 수 있다.
따라서 쉐이더 프로세서에 포함된 기능장치가 기본 단위로 처리할 단일연산 명령어로 선(先) 분리될 필요가 있다. 따라서 기능 단위 명령어 블록내의 명령어는 먼저 단일연산 명령어로 모두 분리된다.
각각의 기능 단위 명령어 블록(ⓐ, ⓑ, ⓒ)은 쉐이더 프로그램이 컴파일러(210)에 의하여 변환되는 순서에 의하여 복수개의 큐(260a, 260b, …, 260n)에 순차적으로 할당된다. 즉 기능 단위 명령어 별로 큐1(260a), 큐2(260b), …,큐N(260n)에 순차적으로 할당된다. 다만,큐의 개수는 쉐이더 프로세서에 포함되는 기능장치의 수에 따라 변경될 수 있다.
이를 좀더 상세히 설명하면 컴파일러(210)에 의하여 변환된 기능 단위의 명 령어 블록 중 복합연산 명령어(240a)은 연산 순서에 의하여 단일연산 명령어1(250a), 단일연산 명령어2(250b), 단일연산 명령어3(250c)으로 분리되어 큐 1(260a)에 할당된다.
그러나 복합연산 명령어(240a)로부터 분리된 각 단일연산 명령어(250a, 250b및 250c)는 큐 1(260a)에만 할당될 뿐 다른 큐(250b, …, 250n)에 할당되지는 않는다.
이는 하나의 기능 단위 명령어 블록(230)에 포함되는 단일연산 명령어들의 처리 데이터가 서로 종속적인 데이터일 확률이 높기 때문이다. 따라서 후술할 바와 같이 각각의 큐는 서로 상이한 기능장치에 명령어를 전달하게 되므로 하나의 큐에서 전달된 기능 단위 명령어 블록의 단일연산명령어들은 각각의 기능장치에서 데이터를 처리하게 된다. 따라서 하나의 기능 단위 명령어 블록의 단일연산명령어들은 병렬적으로 처리되는 것이 불가능하여 각 단일연산 명령간에 처리데이터가 종속적인지 여부를 판단할 필요가 줄어 처리 속도가 향상될 수 있다.
그러나 상술한 기능단위 명령어 블록(230) 중 단일연산 명령(240b)은 단독으로 큐 2에 할당되는데 이는 기능 단위 명령어 블록이 단일연산 명령(240b)으로 구성되었기 때문다. 이 경우 별도의 단일연산명령으로 분리될 필요가 없기 때문에 큐2(260b)에 그대로 할당될 수 있다.
상술한 바와 같이 컴파일러(210)에 의하여 변환된 기능 단위 명령어 블록들은 각각 상이한 큐에 할당된다. 따라서 각 큐(260a, 260b, …, 260n)에는 차례로 기능단위 별로 단일연산 명령어가 할당된다. 큐가 N개인 경우 N개의 큐까지 기능단 위 명령어 블록의 단일연산명령어들이 할당되면 다시 첫번째 큐부터 기능단위 명령어 블록이 순환적으로 할당된다.
각 큐(260a, 260b, …, 260n)의 개수 N은 단일연산명령어를 병렬 처리할 쉐이더 프로세서 내부의 기능장치의 개수와 동일하여야 한다. 각 큐(260a, 260b, …, 260n)는 각 큐(260a, 260b, …, 260n)에 상응하는 쉐이더 프로세서 내부의 기능 장치 별로 대응된다. 따라서 해당 큐는 자신에 상응하는 기능 장치로만 단일연산 명령어를 전달한다.
예를 들어, N개의 큐에서 하나의 단일연산 명령어를 각각 동시에 전달하게 되면 총 N개의 단일연산 명령어가 N개의 기능장치를 통해 하나의 클럭 주기 내에서 처리될 수 있다.
다만, 총 N개의 단일연산 명령어가 병렬로 처리될 수 있는 조건을 만족하는 경우에만 총 N개의 단일연산 명령어가 처리되어야 한다. 병렬로 처리될 수 있는 조건을 만족하지 않는 경우에도 N개의 단일연산 명령어를 병렬 처리하게 되면, 데이터의 처리결과가 비정상적으로 출력될 수 있다.
이를 위하여 본 발명의 일 실시예에 의한 명령어 병렬 스케줄러(220)는 각 큐에서 전달될 N개의 단일연산 명령어간에 병렬 처리 조건을 만족하는지 여부를 판단한다.
단일연산 명령어간의 병렬 처리 조건은 각 단일연산 명령어가 취급하는 데이터들이 독립적이어야 하며, 각 단일연산 명령어를 처리하는 각 연산 기능 장치가 프로세서 내부의 보조 연산 소자(예를 들어 지수곱 연산기 등)를 공유하지 않아야 한다는 것이다. 이는 도 4를 참조하여 상세히 후술하도록 한다.
단일연산 명령어간의 병렬 처리 조건을 모두 만족하는 경우 명령어 병렬 스케줄러(220)는 N개의 단일연산 명령어로 구성된 VLIW를 생성한다. 즉, 각 큐에서 각 기능장치에 단일연산 명령어를 전달하는 것이 아니라 각 단일연산 명령어로 구성된 병렬 명령어 코드를 먼저 생성한다.
명령어 병렬 스케줄러(220)가 생성한 병렬 명령어 코드는 쉐이더 프로세서로 전달된다. 쉐이더 프로세서가 포함하는 VLIW 해석장치 또는 쉐이더 프로세서와 연동하는 VLIW 해석장치는 병렬 명령어 코드를 각각의 단일연산 명령어에 상응하는 각 기능장치의 명령어 이슈 술롯에 입력하여 각 기능장치에서 처리되도록 한다.
즉, 각각의 기능장치는 명령 이슈 슬롯을 포함할 수 있는데 VLIW 해석장치는 병렬 명령어 코드에 포함되는 단일연산 명령어를 명령 이슈 슬롯에 각각 할당하여 각각의 기능장치가 해당 단일연산 명령어에 의하여 데이터를 처리할 수 있도록 한다.
따라서, 쉐이더 프로세서의 기능장치는 하나의 클록 주기내에서 각 명령 이슈 슬롯에 할당된 단일연산 명령어를 처리하게 되므로 복수개의 명령어가 각각의 데이터를 동시에 처리할 수 있게 된다.
그러나, 단일연산 명령어간의 병렬 처리 조건을 만족하지 않는 경우 각 기능장치가 동시에 단일연산 명령어를 처리할 수 없다. 즉, 각 단일연산 명령어가 취급하는 데이터가 종속적인 경우 단일연산 명령어가 동시에 처리되면 잘못된 처리결과가 출력될 수 있다.
또한 지수곱 연산기 또는 로그 연산기와 같은 연산 소자를 각 기능장치가 공유하게 되는 경우 각 기능장치는 동시에 단일연산 명령어를 처리할 수 없다.
따라서, 명령어 병렬 스케줄러는 명령어 병렬 처리조건을 만족하는 단일연산 명령어만으로 구성된 VLIW를 생성한다. 예를 들어, 큐의 개수가 3(N=3)인 경우 큐1에서 전달되는 단일연산 명령어의 연산결과를 큐2에서 전달되는 단일연산 명령어가 취급하게 되면 동시에 두 단일연산 명령어는 처리될 수 없다. 동시에 처리하더라도 큐2의 단일연산 명령어가 처리한 결과는 잘못된 결과(에러)가 된다.
따라서 이 경우 명령어 병렬 스케줄러(220)의 명령어 병렬 코드 생성부(280)는 큐1의 단일연산 명령어와 큐3의 단일연산 명령어만으로 구성된 명령어 병렬 코드를 생성한다. 본 발명의 일 실시예에 의한 명령어 병렬 스케줄러(220)에 포함되는 명령어 병렬 코드 생성부(280)는 각 큐의 명령어에 큐 식별자를 부가하여 명령어 병렬 코드를 생성할 수 있다. 명령어 병렬 코드 생성부(280)는 생성된 명령어 병렬코드를 쉐이더 프로세서로 전달한다.
쉐이더 프로세서에 포함되거나 쉐이더 프로세서와 연동하는 VLIW 해석장치는 생성된 명령어 병렬 코드를 단일연산 명령어 별로 구분한다. 단일연산 명령어는 단일연산 명령어에 부가되어 있는 큐 식별자에 의하여 어느 큐로부터 유래된 단일연산 명령어인지가 구분될 수 있다. 따라서 VLIW 해석장치는 해당 단일연산 명령어를 각 큐에 상응하는 기능장치의 명령어 슬롯에 입력시킨다.
따라서 큐1에서 유래한 단일연산 명령어와 큐3에서 유래한 단일연산 명령어는 각각에 상응하는 기능장치1 및 기능장치3에서 데이터를 처리할 수 있다. 즉, 하 나의 쉐이더 프로세서에 포함되는 복수개의 기능장치가 단일 클럭 주기에 동시에 데이터를 처리할 수 있다.
그러나 기능장치2가 상술한 클럭 주기에서 수행할 명령어는 큐2로부터 기능장치2에 전달되지 않았으므로 기능장치2는 데이터를 처리하지 않는다.
따라서 본 발명의 명령어 병렬 스케줄러(220)에 의하면 복수의 명령어를 쉐이더 프로세서가 병렬로 처리할 수 있도록 하여 처리속도를 향상시키되, 명령어 병렬처리에 있어 발생할 수 있는 데이터 종속 및 명령 처리 불능을 방지할 수 있게 된다.
도 3은 본 발명의 일 실시예에 의한 명령어 병렬 스케줄러의 일부 구성을 나타낸 도면이다.
도 3을 참조하면, 전단 컴파일러에 의하여 쉐이더 프로그램이 기능단위 명령블록으로 분리된다. 분리된 기능단위 명령블록은 컴파일된 순서에 의하여 DP 4, DP 3, MAD, …, MUL등으로 복수개의 큐에 순차적으로 할당된다.
그러나 쉐이더 프로세서 내의 기능장치는 DP4와 같은 복합연산 명령어은 처리할 수 없다. 즉 DP 4의 경우 하나의 곱셈연산 명령어와 두 개의 덧셈연산 명령어로 이루어 지는 복합연산 명령에 해당하는데 쉐이더 프로세서의 기능장치는 이를 처리할 수 없다.
따라서 DP 4는 한 개의 곱셈 연산 명령어(MUL) 및 하나의 덧셈 연산명령어(ADD)로 분리되어야 한다. 따라서 명령어 병렬 스케줄러는 DP 4 Cx, A, B를 MUL R, A, B와 ADD Rxy, Rxy, Rzw와 ADD Cx, Rx, Ry의 단일연산 명령으로 분리한다. 분리된 단일연산 명령은 Q(큐)1(360a)에 차례로 할당된다.
이를 좀 더 상세히 설명하면 명령어는 어셈블리 형식의 명령어 코드이므로 DP 4 Cx, A, B(340a)에서 Cx는 Destination이며 A와 B는 x,y,z,w의 4 성분으로 구성된 Resource에 해당한다. 따라서 DP 4 Cx, A, B를 처리하면 레지스터 Cx에는 A와 B의 내적결과값이 저장된다.
이를 단일 연산명령으로 구성하기 위해서는 먼저 A와 B의 대응되는 각 4성분을 더한 결과값을 R에 저장한다(MUL R, A, B(350a)). 이 후 R의 x,y성분을 더한 값과 R의 z,w성분을 더한 값을 Rxy에 저장한다(ADD R.xy, R.xy, R.zw(350b)). 마지막으로 R.xy의 x성분과 y성분을 더하여 Cx에 저장한다(ADD Cx, Rx, Ry(350c)). 따라서 MUL R, A, B와 ADD Rxy, Rxy, Rzw와 ADD Cx, Rx, Ry가 순차적으로 수행된 결과는 (AxⅹBx)+(AyⅹBy)+(AzⅹBz)+(AwⅹBw)로 A와 B의 내적 연산결과와 동일하다.
DP 4 Cx, A, B(340a)이후 컴파일된 DP3 Cx, A, B(340b) 또한 복합연산 명령에 해당하므로 MUL R, A, B(350e)와 ADD Rx, Rx, Ry(350f)와 ADD Cx, Rx, Rz(350g)의 단일연산명령들로 분리되고 분리된 단일명령들은 Q2(360b)에 차례로 할당된다. 복합연산 명령어인 DP 3는 3-component 내적으로 상술한 DP 4와 설명이 동일하므로 DP 3에 대한 별도의 설명은 생략하도록 한다.
MAD D, A, B, C(340c)도 마찬가지로 MUL D, A, B(350h)와 ADD D, C(350i)의 두 개의 단일연산 명령들로 분리되어 Q3(360c)에 차례로 할당된다. MAD 는 Multiply and add의 명령어로서 레지스터 D에는 A와 B를 곱하고 여기에 C를 더한 (AⅹB)+C 가 저장된다. 따라서 MUL D, A, B와 ADD D, C를 처리하는 결과와 동일하다.
그러나 MAD D, A, B, C(340c)이후 컴파일된 MUL A, B, C(340d)는 단일연산 명령이므로 그대로 Q4(360d)에 할당된다.
MUL A, B, C(340d) 이후 컴파일된 명령어는 복합연산 명령어인지 단일연산 명령어인지에 따라 단일연산 명령어으로 분리되거나 단일연산 명령어 그대로 Q1(360a)에 할당된다. 즉, 기능단위 명령어 블록은 컴파일러에 의하여 컴파일된 DP, XPD, MUL, ADD, EXP, SQRT등은 이는 컴파일된 순서에 따라서 Q1(360a), Q2(360b), Q3(360c) 및 Q4(360d)에 순차적으로 할당된다. 다만 기능단위 명령어 블록이 각 큐에 그대로 할당되는 것이 아니라 상술한 바와 같이 본 발명의 일 실시예에 의한 명령어 병렬 스케줄러에 의하여 단일연산 명령어로 분리되어 할당된다.
기능단위 명령어 블록을 서로 다른 큐에 할당하는 것은 각 기능단위 명령어 블록에 포함되는 단일연산 명령간에 처리하는 데이터의 종속 가능성이 있기 때문이다. 위의 예에서 Q3에 할당된 MAD D, A, B, C(340c)를 예로 들면, A와 B를 곱한 값인 D를 ADD 명령에 의하여 C와 더하는 기능단위이므로 MUL D, A, B(350h)과 ADD D, C(350i)를 동시에 처리할 수 없다. 즉 ADD가 처리할 데이터가 MUL에 의하여 연산된 결과이므로 ADD는 MUL에 의한 연산이 이루어 진 후 처리되어야 한다.
따라서 본 발명의 일 실시예에 의한 명령어 병렬 스케줄러에 의해 MUL D, A, B(350h)와 ADD D, C(350i)가 Q3(360c)에 모두 차례로 할당되면 MUL D, A, B(350h)와 ADD D, C(350i)는 항상 다른 클럭 주기에서 수행된다. 즉, Q3(360c)에 할당된 단일연산 명령들은 쉐이더 프로세서내의 동일한 기능장치에서만 수행되므로 동시에 병렬로 처리될 수 없는 것이다. 따라서 Q3(360c)에서 대기하는 순서에 따라 MUL D, A, B(350h)가 먼저 수행되고, 이 후 클럭 주기에서 ADD D, C(350i)가 처리된다.
즉, 쉐이더 프로세서가 병렬 처리하게 되는 명령들은 각각 다른 큐(360a, 360b, 360d, 360e)에서 대기하고 있는 명령들이다. 다만 본 발명의 일 실시예에 의한 명령어 병렬 스케줄러는 각각 다른 큐(360a, 360b, 360d, 360e)에서 대기하는 명령들에 대하여 명령어 병렬처리조건인 데이터 종속 여부 또는 특수기능장치 충돌여부를 판단하여 이를 만족하는 명령어들로 구성된 병렬 명령코드를 생성하는 것이다.
도 4는 본 발명의 일 실시예에 의한 명령어 병렬 스케줄러가 병렬 명령코드를 생성하는 과정을 나타낸 순서도이다.
도 4를 참조하면, 먼저 명령어 병렬 스케줄러는 각 큐에서 대기하고 있는 명령어들이 처리할 데이터를 검사하여 데이터 간에 종속성이 존재하는지 여부를 판단한다(S400).
종속성이 존재하지 않는 경우 명령어 병렬 스케줄러는 식별번호 S410 단계로 진행하여 각 큐의 병렬 처리 연산에 필요한 기능장치가 특수기능장치를 공유하는지 여부를 판단한다(S410). 즉, 지수곱 연산 또는 로그 연산과 같은 특수연산을 수행할 수 있는 특수기능장치(SFU)를 공유하는지 여부를 판단한다.
그러나 데이터 간에 종속성이 존재한다고 판단된 경우에는 단계 S430으로 진 행하여 우선순위에 따라 일부 큐의 명령어로 이루어진 병렬 명령어 코드를 생성한다. 딘계 S410에서 기능장치가 특수기능장치를 공유하는 것으로 판단되는 경우에도 역시 우선순위에 따라 일부 큐의 명령어로 이루어진 병렬 명령어 코드를 생성한다(S430).
우선순위는 큐에 단일연산명령어가 할당된 순서에 따라서 결정된다. 우선순위는 미리 설정되어 있으며 예를 들어 도 3에서와 같이 Q1(360a), Q2(360b), Q3(360c) 및 Q4(360d)의 순서대로 1순위부터 4순위까지 설정되어 있을 수 있다. 그러나 본 발명의 명령어 병렬 스케줄러에 적용되는 큐의 우선순위가 이에 한정되는 것은 아니며 우선순위는 이와 다르게 설정될 수도 있다.
위의 예에서 Q1(360a)에서 대기하고 있는 명령어와 Q4(360d)에서 대기하고 있는 명령어가 모두 지수 연산기를 사용한다고 가정하면 Q1(360a)의 우선순위가 높기 때문에 Q4(360d)의 대기명령어가 제외되고 나머지 명령어로 명령어 병렬 코드가 생성된다. 그러나 큐1과 큐4의 대기명령어가 특수연산소자를 공유하게 되어 Q1(360a)과 Q4(360d) 중 Q1(360a)의 대기명령어가 선택되어 명령어 병렬 코드가 생성된 경우 Q1(360a)의 우선순위는 Q4(360d)의 우선순위보다 낮아지게 된다.
따라서 이후 Q1(360a)의 대기명령어와 Q4(360d)의 대기명령어가 다시 지수곱 연산기를 공유하게 되는 경우 Q4(360d)의 우선순위가 Q1(360a)의 우선순위보다 높게 되어 큐4의 대기명령어가 포함된 명령어 병렬 코드가 생성된다.
그러나 단계 S 410에서 각 큐의 대기명령어가 특수기능장치를 공유하지 않는다고 판단되는 경우에는 각 큐의 대기명령어를 모두 포함하는 명령어 병렬 코드가 생성된다(S420).
단계 S420 또는 단계 S430에서 생성된 명령어 병렬 코드는 VLIW 해석장치 또는 VLIW를 포함하는 쉐이더 프로세서로 전달된다. 따라서 VLIW 해석장치는 명령어 병렬 코드를 해석하여 각각의 큐를 담당하는 연산기능장치의 명령어 슬롯에 할당하여 데이터를 병렬로 처리할 수 있도록 한다.
도 5는 본 발명의 다른 일 실시예에 의한 명령어 스케줄러의 일부 구성을 나타낸 도면이다.
도 5를 참조하면, 컴파일러에 의하여 컴파일된 기능단위 명령어블록들이 단일연산명령어의 집합으로 분리되어 별도의 저장부에 저장되어 있을 수 있다. 기능단위 명령어블록 1은 SI(단일연산 명령어 : Single Instruction)1로 구성되어 있다. 따라서 SI 1이 기능단위 명령어블로 1이 된다. 또한, 기능단위 명령어블록 2도 SI 2 하나로 구성되어 있다.
그러나 기능단위 명령어블록 3의 경우에는 M-SI 1a 및 M-SI 1b를 포함한다. 즉, M-SI는 Multi-Single Instruction의 약자로서 복합연산 명령어가 단일연산명령어로 분리된 경우를 의미한다. 예를 들어, 도 3에서 설명한 바와 같이 DP 4의 경우 두개의 곱셈명령어 과 하나의 덧셈명령어로 분리될 수 있으므로 M-SI는 DP 4와 같은 복합연산 명령어로부터 분리된 단일연산 명령어(MUL 또는 ADD)를 의미한다.
기능단위 명령어블록 4는 SI 3으로 구성되어 있다. 기능단위 명령어블록 5는 M-SI 2a, M-SI 2b, M-SI 2c로 구성되어 있다.
큐 순차 분배부(500)는 상술한 기능 단위 명령어 블록별로 큐 1(1순위)내지 큐 3(3순위)에 순차 분배한다. 도 3에서 본 발명의 명령어 스케줄러에 포함되는 큐의 개수가 3인 것은 발명의 설명을 위한 일 실시예에 불과하며 큐의 개수가 2 이상의 다른 정수로 대체될 수 있음은 앞서 설명한 바와 같다.
큐 순차 분배부(500)는 먼저 SI 1을 큐 1(1순위)에 할당하고 SI 2를 큐2(2순위)에 할당한다. 그러나 큐 3(3순위)에는 M-SI 1a 및 M-SI 1b를 할당한다.
큐 1(1순위)과 큐 2(2순위)에는 단일연산 명령어가 하나씩 할당되고 큐 3(3순위)에는 단일연산 명령어가 두 개 할당되는 것은 설명한 바와 같이 기능단위 명령어 블록 별로 단일연산 명령어를 할당하기 때문이다. 즉, 큐 1(1순위)과 큐2(2순위)에 할당되는 단일연산 명령어 SI 1과 SI 2는 각각 하나의 기능단위 명령어블록(명령어 블록 1 및 명령어 블록2)을 구성하기 때문이다.
다만, 큐 3에 할당되는 M-SI 1a 와 M-SI 1b는 두 개의 단일연산 명령어가 하나의 기능단위 명령어블록(명령어 블록 3)을 구성하기 때문이다.
이 후, 다음 기능단위 명령어블록(명령어 블록 4)을 구성하는 단일연산 명령어는 큐 1(1순위)에 할당되고 그 다음 기능단위 명령어블록(명령어 블록 5)은 큐 2(2순위)에 할당된다. 큐 2(2순위)에 할당되는 기능단위 명령어블록(명령어 블록 5)은 M-SI 2a, M-SI 2b 및 M-SI 2c로 구성되기 때문에 총 3개의 단일연산 명령어가 큐 2(2순위)에 할당된다.
따라서 같은 병렬처리 레벨에 있는 명령어는 각각의 큐에서 같은 순번으로 대기하고 있는 명령어들이다. 예를 들어 각 큐에서 최우선으로 대기하고 있는 같은 레벨의 명령어들은 큐 1의 SI 1, 큐 2의 SI 2 및 큐 3의 M-SI 1a이다.
따라서 명령어 병렬처리 조건을 만족하는 경우 3개의 기능장치에서 동시에 연산이 수행될 수 있는 명령어는 SI 1, SI 2 및 M-SI 1a이므로 본 발명의 명령어 병렬 스케줄러에 포함되는 명령어 병렬 처리 조건 판단부(510)는 세 명령어에 대하여 명령어 병렬처리 조건을 만족하는지 판단한다. 명령어 병렬처리 조건을 판단하는 과정에 대하여는 도 4에서 설명한 바와 같으므로 이하에서는 판단과정에 대한 설명은 생략하도록 한다.
명령어 병렬처리 조건을 SI 1, SI 2 및 M-SI 1a이 만족하는 경우에는 명령어 병렬 코드 생성부(520)이 세 개의 단일연산 명령어를 포함하는 명령어 병렬코드(520)를 생성한다. 명령어 병렬코드(520)에는 SI 1, SI 2 및 M-SI 1a가 포함되고 각각의 명령어를 구분할 수 있는 명령어 식별자 등이 더 포함될 수 있다.
생성된 명령어 병렬코드(520)는 VLIW 해석장치로 전달되어 쉐이더 프로세서의 각각의 기능장치의 명령어 슬롯에 할당되어 하나의 쉐이더 클록 주기내에서 처리된다.
그러나 하나의 큐에서 대기하고 있는 단일연산 명령어들은 하나의 쉐이더 클록 주기내에서 처리될 수 없다. 즉, 동시에 병렬로 처리될 수 있는 단일연산 명령어들은 큐 1의 대기명령어, 큐2의 대기명령어, 큐 3의 대기명령어간에만 가능하다. 이는 각각의 큐에서 대기하고 있는 단일연산 명령어는 각각의 기능장치에서만 처리되기 때문이다.
예를 들어, 큐2에서 대기 중인 M-SI 2a, M-SI 2b, M-SI 2c(명령어 블록 5)는 하나의 큐(2순위)에서 순차적으로 대기하고 있기 때문에 M-SI 2a, M-SI 2b, M-SI 2c가 명령어 병렬코드에 함께 포함될 수 없다. 이는 본 발명의 큐 순차분배부가 각 큐에 기능단위 명령어블록 별로 단일연산 명령어를 할당함으로써 가능한 것이다.
기능단위 명령어블록 별로 단일연산명령어를 할당하지 않고 단일연산명령어 별로 차례로 각 큐에 할당하는 경우에는 M-SI 2a, M-SI 2b, M-SI 2c가 각각 다른 큐에 할당되어 동시에 처리될 수 있다. 이 경우 M-SI 2a, M-SI 2b, M-SI 2c은 동일한 기능단위 명령어블록에 포함되어 있는 연산명령어이므로 M-SI 2a, M-SI 2b, M-SI 2c가 처리하는 데이터간에 종속성이 존재할 가능성이 매우 높다.
따라서 이 경우 명령어 병렬 처리 조건부가 판단하여야 하는 병렬 처리 조건의 양이 많아져 이를 처리하는데 소요되는 시간지연이 쉐이더 프로세서의 다중 연산처리 능력을 반감시킬 수 있다.
그러나 본 발명의 일 실시예에 의한 명령어 병렬 스케줄러에 포함되는 큐 순차 분배부(500)는 위에서 설명한 바와 같이 기능단위별로 단일연산 명령어를 각 큐에 할당함으로써 동일한 기능단위 명령어블록에 포함되는 명령어가 동시에 처리되지 않도록 한다.
도 6은 본 발명의 다른 일 실시예에 의한 명령어 병렬 스케줄러가 병렬 명령어코드를 생성하는 과정을 나타낸 도면이다.
도 6을 참조하면, 도 5의 경우와 동일하게 큐 순차부가 기능단위 명령어 블록별로 할당하는 것은 동일하다.
그러나 명령어 병렬처리 조건 판단부(510)가 SI 1, SI 2 및 M-SI 1a의 병렬처리 조건을 판단한 결과 병렬처리 조건을 만족하지 못하는 경우의 생성한 병렬 명령어 코드의 구성이 상이하다.
예를 들어, SI 1, SI 2 및 M-SI 1a은 각각 상이한 기능단위 명령어 블록에 속하는 것이지만, 상이한 기능단위 명령어 블록이더라도 각 명령어가 처리하는 데이터가 종속적일 수 있다. SI 1에 의하여 수행되는 연산의 결과를 M-SI 1a가 처리하여야 하는 경우 SI 1과 M-SI 1a는 동시에 처리될 수 없다. 따라서 SI 1이 먼저 처리되어야 한다.
또한, SI 1과 SI 2도 병렬로 동시에 처리될 수 없는 경우가 있다. 즉, 예를 들어 SI 1 과 SI 2가 모두 로그 연산인 경우에 하나의 쉐이더 프로세서에 포함되는 특수연산 소자인 로그 연산기가 공유되어야 한다. 그러나 쉐이더 프로세서에 포함되는 로그 연산기의 개수가 1인 경우 SI 1 및 SI 2를 처리할 기능장치가 모두 로그 연산기를 이용할 수는 없다.
따라서 SI 1 또는 SI 2 중에서 우선순위에 따라 둘 중 어느 하나가 먼저 처리되어야 한다. 예를 들어 도 5에서 설명한 바와 같이 큐1의 우선순위가 큐 2의 우선순위보다 높은 경우에는 큐 1에서 대기 중인 SI 1이 먼저 처리되어야 하므로 SI 1만이 선택된다. 그러나 이 경우 큐의 우선순위는 변경되어 도 6에 도시된 바와 같이 큐 1의 순위는 3순위가 되며 큐2의 순위가 1순위, 큐 3의 순위가 2순위로 변경된다. 각 큐의 우선순위를 변경하는 것은 병렬처리 조건이 계속 만족되지 않는 경우 큐 1에서 대기 중인 단일연산 명령만이 처리되기 때문이다.
병렬처리 조건 판단의 결과 병렬 명령어코드 생성부(520)는 SI 1만을 포함하는 명령어 병렬코드(600)를 생성한다. 따라서 명령어 병렬코드(600)는 SI 1, NOP(No-Operation), NOP 구성될 수 있다. SI 1에는 명령어식별자가 부가되어 VILW 해석기가 SI 1이 어느 큐에서 대기 중이던 명령어인지를 판단할 수 있도록 한다. 따라서 큐1와 대응되는 기능장치에서 SI 1만이 처리된다.
따라서 명령어 병렬 처리조건 판단부(510)의 판단에 의하여 병렬 처리조건을 만족하지 못하는 경우에는 복수의 명령어가 병렬로 처리되어 오류가 발생하지 않도록 할 수 있다.
이 후 큐 1의 SI 1이 처리되었기 때문에 큐 1에서 대기중인 명령어는 SI 3가 된다. 따라서 명령어 병렬 처리조건 판단부(510)는 SI 3, SI 2 및 M-SI 1a의 병렬처리 조건을 판단한다. 이 경우 SI 3, SI 2 및 M-SI 1a가 처리하는 데이터간에 종속성이 존재하지 않고 특수기능장치의 공유에 문제가 없다고 판단되면, SI 3, SI 2 및 M-SI 1a를 포함하는 명령어 병렬코드가 생성되어 VLIW 해석기로 전달된다.
그러나 SI 3, SI 2 및 M-SI 1a가 모두 병렬처리 조건을 만족하지 못하는 경우에는 동시에 병렬로 처리될 수 없기 때문에 다시 하나의 명령어만이 먼저 처리되어야 한다.
이 경우 상술한 바와 같이 각 큐의 우선순위는 변경되어 있기 때문에 큐 2(1순위)의 SI 2가 명령어 병렬코드에 포함된다. 이를 다시 설명하면, 최초의 큐 우선순위는 큐 1이 1순위, 큐2가 2순위, 큐3이 3순위이었으나 상술한 바와 같이 명령어 병렬 처리조건을 만족하지 못하는 경우 큐 1의 SI 1이 단독으로 처리되면서 우선순 위가 변경된다. 즉, 대기하던 명령어 즉, SI 1이 단독으로 처리된 큐 1의 우선순위가 최하위인 3위로 변경된다. 또한 나머지 큐 2와 큐 3의 우선순위는 순위가 하나씩 이동하여 큐 2의 우선순위는 1순위, 큐3의 우선순위는 2위로 변경된다.
따라서 SI 3, SI 2 및 M-SI 1a가 모두 병렬처리 조건을 만족하지 못하는 경우에는 최우선 순위의 큐인 큐 2에서 대기중인 SI 2가 단독으로 쉐이더 프로세서에서 처리된다.
상술한 바와 같은 본 발명의 방법은 프로그램으로 구현되어 컴퓨터로 읽을 수 있는 기록매체(씨디롬, 램, 롬, 플로피 디스크, 하드디스크, 광자기디스크 등)에 저장될 수 있다.
상기에서는 본 발명의 바람직한 실시예를 참조하여 설명하였지만, 해당 기술 분야에서 통상의 지식을 가진 자라면 하기의 특허 청구범위에 기재된 본 발명의 사상 및 영역으로부터 벗어나지 않는 범위 내에서 본 발명을 다양하게 수정 및 변경시킬 수 있음을 이해할 수 있을 것이다.
도 1는 본 발명의 일 실시예에 의한 명령어 병렬 스케줄러에 의하여 복수의 명령을 스케줄링하는 과정을 나타낸 도면
도 2은 본 발명의 일 실시예에 따른 명령어 스케줄링 방법이 수행되는 과정을 나타낸 도면.
도 3은 본 발명의 일 실시예에 의한 명령어 병렬 스케줄러의 일부 구성을 나타낸 도면.
도 4는 본 발명의 일 실시예에 의한 명령어 병렬 스케줄러가 병렬 명령코드를 생성하는 과정을 나타낸 순서도.
도 5는 본 발명의 다른 일 실시예에 의한 명령어 스케줄러의 일부 구성을 나타낸 도면.
도 6은 본 발명의 다른 일 실시예에 의한 명령어 병렬 스케줄러가 병렬 명령어코드를 생성하는 과정을 나타낸 도면.

Claims (8)

  1. 명령어 병렬 스케줄러가 쉐이더 프로세서로 전달되는 명령어를 병렬 스케줄링 하는 방법-여기서 상기 쉐이더 프로세서는 명령어를 처리하는 복수개의 기능장치를 포함하고 상기 복수개의 기능장치는 각각 명령어를 병렬처리함-에 있어서,
    (a) 컴파일러에 의하여 변환된 명령어를 단일연산 명령어들로 분리하는 단계;
    (b) 상기 단일연산 명령어들을 기능단위 명령어블록 별로 상기 복수개의 기능장치에 상응하는 각각의 큐(Queue)에 순차로 할당하는 단계;
    (c) 모든 큐에 대해서 상기 각각의 큐에서 대기하는 단일연산 명령어간의 병렬처리 조건을 판단하는 단계; 및
    (d) 모든 큐에 대해서 상기 병렬처리 조건이 만족되는 경우 상기 각각의 큐의 단일연산 명령어를 포함하는 명령어 병렬 코드를 생성하는 단계를 포함하되,
    상기 명령어 병렬 코드에 포함되는 상기 단일연산 명령어는 상기 쉐이더 프로세서에 의하여 병렬처리 되는 것을 특징으로 하는 명령어 병렬 스케줄링 방법.
  2. 제1항에 있어서,
    상기 병렬처리 조건을 판단하는 단계는
    상기 각각의 큐의 단일연산 명령어에 의하여 연산되는 데이터간의 종속여부 를 판단하는 단계를 더 포함하는 것을 특징으로 하는 명령어 병렬 스케줄링 방법.
  3. 제1항 또는 제2항에 있어서,
    상기 쉐이더 프로세서는 상기 복수개의 기능장치의 연산 기능을 보조하는 보조 기능장치를 더 포함하는 경우,
    상기 병렬처리 조건을 판단하는 단계는
    상기 각각의 큐에 상응하는 상기 기능장치간의 상기 보조 기능장치 공유여부를 판단하는 단계를 더포함하는 것을 특징으로 하는 명령어 병렬 스케줄링 방법.
  4. 제1항에 있어서,
    상기 병렬처리 조건이 만족되지 않는 경우,
    (e) 상기 각각의 큐의 단일연산 명령어 중 우선순위에 따라 상기 병렬처리 조건을 만족하는 일부 큐의 단일연산 명령어만이 포함된 명령어 병렬 코드를 생성하는 단계를 더 포함하는 것을 특징으로 하는 명령어 병렬 스케줄링 방법.
  5. 제4항에 있어서,
    일부 큐의 단일연산 명령어만이 포함된 명령어 병렬코드가 상기 쉐이더 프로세서에서 병렬 처리 또는 단독으로 처리된 후,
    상기 일부 큐의 우선순위를 상기 일부 큐를 제외한 나머지 큐의 우선순위보다 낮게 설정하고,
    상기 단계 (c) 내지 (e)를 반복 수행하는 것을 특징으로 하는 명령어 병렬 스케줄링 방법.
  6. 삭제
  7. 삭제
  8. 명령어 병렬 스케줄러가 쉐이더 프로세서로 전달되는 명령어를 병렬 스케줄링 하는 방법-여기서 상기 쉐이더 프로세서는 명령어를 처리하는 복수개의 기능장치를 포함하고 상기 복수개의 기능장치는 각각 명령어를 병렬처리함-을 구현하기 위한 프로그램이 기록된 기록매체에 있어서,
    컴파일러에 의하여 변환된 명령어를 단일연산 명령어들로 분리하는 단계;
    상기 단일연산 명령어들을 기능단위 명령어블록 별로 상기 복수개의 기능장치에 상응하는 각각의 큐(Queue)에 순차로 할당하는 단계;
    모든 큐에 대해서 상기 각각의 큐에서 대기하는 단일연산 명령어간의 병렬처리 조건을 판단하는 단계; 및
    모든 큐에 대해서 상기 병렬처리 조건이 만족되는 경우 상기 각각의 큐의 단일연산 명령어를 포함하는 명령어 병렬 코드를 생성하는 단계를 포함하되,
    상기 명령어 병렬 코드에 포함되는 상기 단일연산 명령어는 상기 쉐이더 프로세서에 의하여 병렬처리 되는 것을 특징으로 하는 명령어 병렬 스케줄링 방법을 구현하기 위한 프로그램을 기록한 컴퓨터로 판독가능한 기록매체.
KR1020070129434A 2007-12-12 2007-12-12 명령어 병렬 스케줄러, 방법 및 그 기록매체 KR100957060B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020070129434A KR100957060B1 (ko) 2007-12-12 2007-12-12 명령어 병렬 스케줄러, 방법 및 그 기록매체

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020070129434A KR100957060B1 (ko) 2007-12-12 2007-12-12 명령어 병렬 스케줄러, 방법 및 그 기록매체

Publications (2)

Publication Number Publication Date
KR20090062286A KR20090062286A (ko) 2009-06-17
KR100957060B1 true KR100957060B1 (ko) 2010-05-13

Family

ID=40991544

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020070129434A KR100957060B1 (ko) 2007-12-12 2007-12-12 명령어 병렬 스케줄러, 방법 및 그 기록매체

Country Status (1)

Country Link
KR (1) KR100957060B1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102210997B1 (ko) 2014-03-12 2021-02-02 삼성전자주식회사 Vliw 명령어를 처리하는 방법 및 장치와 vliw 명령어를 처리하기 위한 명령어를 생성하는 방법 및 장치
KR102664020B1 (ko) * 2021-10-28 2024-05-08 연세대학교 산학협력단 분할 스케줄링을 이용한 테스트 시간 감소 방법 및 장치
CN117093270B (zh) * 2023-08-18 2024-06-14 摩尔线程智能科技(北京)有限责任公司 指令发送方法、装置、设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2000029941A1 (en) * 1998-11-16 2000-05-25 Telefonaktiebolaget Lm Ericsson Improved result handling in a multiprocessing system
KR20030074047A (ko) * 2002-03-07 2003-09-19 가부시끼가이샤 도시바 멀티 프로세서 시스템
KR20050057834A (ko) * 2003-12-11 2005-06-16 한국전자통신연구원 멀티프로세서 시스템에서 스케줄러를 이용한 대규모데이터 처리 방법
KR20070061795A (ko) * 2005-04-12 2007-06-14 각코호진 와세다다이가쿠 멀티프로세서 시스템 및 멀티그레인 병렬화 컴파일러

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2000029941A1 (en) * 1998-11-16 2000-05-25 Telefonaktiebolaget Lm Ericsson Improved result handling in a multiprocessing system
KR20030074047A (ko) * 2002-03-07 2003-09-19 가부시끼가이샤 도시바 멀티 프로세서 시스템
KR20050057834A (ko) * 2003-12-11 2005-06-16 한국전자통신연구원 멀티프로세서 시스템에서 스케줄러를 이용한 대규모데이터 처리 방법
KR20070061795A (ko) * 2005-04-12 2007-06-14 각코호진 와세다다이가쿠 멀티프로세서 시스템 및 멀티그레인 병렬화 컴파일러

Also Published As

Publication number Publication date
KR20090062286A (ko) 2009-06-17

Similar Documents

Publication Publication Date Title
CN100517219C (zh) 多芯架构中的资源管理装置和方法以及多芯处理器
Kang et al. Lalarand: Flexible layer-by-layer cpu/gpu scheduling for real-time dnn tasks
US9400685B1 (en) Dividing, scheduling, and parallel processing compiled sub-tasks on an asynchronous multi-core processor
CN101573690B (zh) 线程排队的方法和装置
CN100458705C (zh) 使用动态确定的前端作业群调度计算机作业的方法和系统
US20120089812A1 (en) Shared resource multi-thread processor array
CN101320360A (zh) 用于并行集成电路结构的消息排队系统和相关操作方法
CN110389816A (zh) 用于资源调度的方法、装置以及计算机程序产品
CN103262002A (zh) 优化系统调用请求通信
US20070074009A1 (en) Scalable parallel pipeline floating-point unit for vector processing
Zhou et al. Task mapping in heterogeneous embedded systems for fast completion time
KR100957060B1 (ko) 명령어 병렬 스케줄러, 방법 및 그 기록매체
Cruz et al. Maximizing the GPU resource usage by reordering concurrent kernels submission
CN111258655A (zh) 融合计算方法及可读存储介质
CN116830554A (zh) 一种任务调度方法、装置及系统
EP2270652A1 (en) Priority circuit for dispatching instructions in a superscalar processor having a shared reservation station and processing method
US20240193721A1 (en) System and method for adaptive graph-to-stream scheduling
CN113051049B (zh) 任务调度系统、方法、电子设备及可读存储介质
CN116991480A (zh) 指令处理方法、装置、电路、发射器、芯片、介质及产品
CN112379928B (zh) 指令调度方法以及包括指令调度单元的处理器
Chen et al. Flexible heterogeneous multicore architectures for versatile media processing via customized long instruction words
Delestrac et al. Demystifying the TensorFlow eager execution of deep learning inference on a CPU-GPU tandem
US20240220315A1 (en) Dynamic control of work scheduling
US20240220314A1 (en) Data dependency-aware scheduling
Kim et al. IDLE: Integrated Deep Learning Engine with Adaptive Task Scheduling on Heterogeneous GPUs

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
AMND Amendment
J201 Request for trial against refusal decision
B701 Decision to grant
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20130422

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20140428

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20150428

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20180425

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20190425

Year of fee payment: 10