KR102545176B1 - 레지스터 관리 방법 및 장치 - Google Patents
레지스터 관리 방법 및 장치 Download PDFInfo
- Publication number
- KR102545176B1 KR102545176B1 KR1020150160453A KR20150160453A KR102545176B1 KR 102545176 B1 KR102545176 B1 KR 102545176B1 KR 1020150160453 A KR1020150160453 A KR 1020150160453A KR 20150160453 A KR20150160453 A KR 20150160453A KR 102545176 B1 KR102545176 B1 KR 102545176B1
- Authority
- KR
- South Korea
- Prior art keywords
- code block
- registers
- register
- execute
- code
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 49
- 238000003672 processing method Methods 0.000 claims abstract description 3
- 238000007726 management method Methods 0.000 description 138
- 238000010586 diagram Methods 0.000 description 20
- 239000012634 fragment Substances 0.000 description 8
- 230000003068 static effect Effects 0.000 description 7
- 238000009877 rendering Methods 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 239000003086 colorant Substances 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
- G06T15/80—Shading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/3009—Thread control instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30123—Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Executing Machine-Instructions (AREA)
- Computer Graphics (AREA)
Abstract
데이터 처리 방법에 있어서, 실행되는 스레드에 이용되는 레지스터의 수를 상황에 따라 조절하는 방법 및 장치를 개시한다.
Description
본 개시는 레지스터 관리 방법 및 장치에 관한 것이다.
고성능 그래픽 카드가 컴퓨터 합성 이미지를 생성하는데 널리 사용되고 있다. 비디오 그래픽 컨트롤러도 프로세싱 자원이 증가하면서 CPU의 기능을 차용하게 되었다.
특히 컴퓨터 게임 산업이 발달함에 따라 높은 그래픽 처리 성능이 요구되게 되었다. 또한 꼭 컴퓨터 게임 산업이 아니더라도 각종 광고나 영화 등에서 이용되는 이미지의 수준이 높아짐에 따라 높은 그래픽 처리 성능이 요구되게 되었다. 이와 관련하여 그래픽 프로세서의 개념으로 종래 CPU와 구별하기 위해 그래픽 처리 유닛(GPU)이라는 이름이 사용되게 되었다.
그래픽 처리 과정에서 렌더링 또는 쉐이딩이 수행되고, 컴파일러나 레지스터 등이 이용된다.
일 실시 예는 제한된 하드웨어 자원을 효율적으로 이용할 수 있도록, 실행되는 스레드에 이용되는 레지스터의 수를 상황에 따라 조절하는 방법 및 장치를 개시한다.
제 1 측면에 따른, 레지스터 관리 방법에 있어서, 하나 이상의 실행 코드를 포함하는 제1 코드 블럭을 상기 제1 코드 블럭에 할당된 제1 개수의 레지스터를 이용하여 실행하는 단계; 상기 제1 코드 블럭이 실행된 이후에 실행되는 제2 코드 블럭을 실행하기 위해 필요한 레지스터의 개수인 제2 개수를 획득하고, 상기 제1 개수와 상기 제2 개수의 차이 값에 기초하여, 상기 제2 코드 블럭에 대응되는 개수의 레지스터를 상기 제2 코드 블럭에 할당하는 단계; 및 상기 제2 코드 블럭에 할당된 레지스터를 이용하여 상기 제2 코드 블럭을 실행하는 단계를 포함할 수 있다.
또한, 상기 제1 코드 블럭 및 상기 제2 코드 블럭 각각은 독립적으로 처리될 수 있는 데이터 처리 단위인 워프(wrap)에 포함되는 복수개의 스레드 중 하나의 스레드에 포함될 수 있다.
또한, 상기 제2 코드 블럭에 대응되는 개수의 레지스터를 상기 제2 코드 블럭에 할당하는 단계는 상기 제1 코드 블럭 및 상기 제2 코드 블럭 각각에 대응되는 레지스터의 개수에 대한 정보를 포함하는 정보인 ROT(Register Occupancy Table)을 갱신하는 단계를 더 포함할 수 있다.
또한, 상기 ROT는 상기 스레드에 포함되는 복수개의 코드 블럭 각각에 대응되는 레지스터의 개수에 대한 정보를 포함할 수 있다.
또한, 상기 ROT는 상기 스레드에 포함되는 복수개의 코드 블럭 중 현재 실행중인 코드 블럭 이후에 실행되는 각 코드 블럭의 실행을 위해 필요한 레지스터 개수들 중 최대 개수인 최대 레지스터 개수를 나타내는 정보를 포함할 수 있다.
또한, 상기 제2 코드 블럭에 대응되는 개수의 레지스터를 상기 제2 코드 블럭에 할당하는 단계는 상기 제2 코드 블럭에 대응되는 레지스터의 개수에 대한 정보를 포함하는 정보인 레지스터 해시(Register Hash)를 갱신하는 단계를 더 포함할 수 있다.
또한, 상기 제1 코드 블럭 및 상기 제2 코드 블럭은 각각 하나 이상의 동작을 수행하기 위한 연속적인 명령어의 집합을 포함할 수 있다.
또한, 상기 연속적인 명령어는 단일 입력 단일 출력(Single-Entry Single-Exit) 조건을 만족할 수 있다.
또한, 상기 제2 코드 블럭에 대응되는 개수는 상기 차이 값 및 기설정된 최소 단위에 기초하여 결정될 수 있다.
또한, 상기 제2 코드 블럭에 대응되는 개수의 레지스터를 상기 제2 코드 블럭에 할당하는 단계는 상기 제1 개수가 상기 제2 개수보다 작은 경우, 상기 제2 코드 블럭 실행을 위해 할당되는 레지스터의 개수를 증가시키기 위해 추가 할당(allocation)을 수행 하는 단계; 및 상기 제1 개수가 상기 제2 개수보다 큰 경우, 상기 제2 코드 블럭 실행을 위해 할당되는 레지스터의 개수를 감소시키기 위해 해제(free)를 수행하는 단계를 포함할 수 있다.
또한, 제2 측면에 따른 레지스터 관리 장치에 있어서, 하나 이상의 실행 코드를 포함하는 복수개의 코드 블럭을 수신하는 수신부; 및 상기 수신부에서 수신된 제1 코드 블럭을 상기 제1 코드 블럭에 할당된 제1 개수의 레지스터를 이용하여 실행하고, 상기 제1 코드 블럭이 실행된 이후에 실행되고 상기 수신부에서 수신되는 제2 코드 블럭을 실행하기 위해 필요한 레지스터의 개수인 제2 개수를 획득하고, 상기 제1 개수와 상기 제2 개수의 차이 값에 기초하여, 상기 제2 코드 블럭에 대응되는 개수의 레지스터를 상기 제2 코드 블럭에 할당하고, 상기 제2 코드 블럭에 할당된 레지스터를 이용하여 상기 제2 코드 블럭을 실행하는 제어부를 포함할 수 있다.
또한, 상기 제1 코드 블럭 및 상기 제2 코드 블럭 각각은 독립적으로 처리될 수 있는 데이터 처리 단위인 워프(wrap)에 포함되는 복수개의 스레드 중 하나의 스레드에 포함될 수 있다.
또한, 상기 제어부는 상기 제1 코드 블럭 및 상기 제2 코드 블럭 각각에 대응되는 레지스터의 개수에 대한 정보를 포함하는 정보인 ROT(Register Occupancy Table)을 갱신할 수 있다.
또한, 상기 ROT는 상기 스레드에 포함되는 복수개의 코드 블럭 각각에 대응되는 레지스터의 개수에 대한 정보를 포함할 수 있다.
또한, 상기 ROT는 상기 스레드에 포함되는 복수개의 코드 블럭 중 현재 실행중인 코드 블럭 이후에 실행되는 각 코드 블럭의 실행을 위해 필요한 레지스터 개수들 중 최대 개수인 최대 레지스터 개수를 나타내는 정보를 포함할 수 있다.
또한, 상기 제어부는 상기 제2 코드 블럭에 대응되는 레지스터의 개수에 대한 정보를 포함하는 정보인 레지스터 해시(Register Hash)를 갱신하는 단계를 더 포함할 수 있다.
또한, 상기 제1 코드 블럭 및 상기 제2 코드 블럭은 각각 하나 이상의 동작을 수행하기 위한 연속적인 명령어의 집합을 포함할 수 있다.
또한, 상기 연속적인 명령어는 단일 입력 단일 출력(Single-Entry Single-Exit) 조건을 만족할 수 있다.
또한, 상기 제어부는 상기 제1 개수가 상기 제2 개수보다 작은 경우, 상기 제2 코드 블럭 실행을 위해 할당되는 레지스터의 개수를 증가시키기 위해 추가 할당(allocation)을 수행 하고, 상기 제1 개수가 상기 제2 개수보다 큰 경우, 상기 제2 코드 블럭 실행을 위해 할당되는 레지스터의 개수를 감소시키기 위해 해제(free)를 수행할 수 있다.
또한, 제 1 측면에 따른, 레지스터 관리 방법을 컴퓨터에서 구현하기 위한 프로그램이 기록된 컴퓨터로 판독 가능한 비일시적 기록 매체를 제공할 수 있다.
도 1은 일 실시 예에 따른 그래픽 처리 장치를 나타낸 도면이다.
도 2는 그래픽 처리 장치에서 3차원 그래픽스를 처리하는 과정을 설명하는 도면이다.
도 3은 일 실시 예에 따른 레지스터 관리 장치의 구성과 동작을 설명하기 위한 도면이다.
도 4는 일 실시 예에 따른 레지스터 관리 장치가 복수개의 연산 유닛으로부터 데이터를 수신하여 데이터를 처리하는 방법을 설명하기 위한 도면이다.
도 5는 일 실시 예에 따른 레지스터 관리 장치가 레지스터 해시 또는 ROT를 이용하여 데이터를 처리하는 방법을 설명하기 위한 도면이다.
도 6은 일 실시 예에 따른 레지스터 관리 장치가 제1 코드 블럭 및 제2 코드 블럭을 실행하는 방법을 설명하기 위한 흐름도이다.
도 7은 일 실시 예에 따른 레지스터 관리 장치가 레지스터 해시 또는 ROT를 이용하여 데이터를 처리하는 방법을 설명하기 위한 흐름도이다.
도 8은 일 실시 예에 따른 레지스터 관리 장치가 레지스터 할당 명령과 관련하여 데이터를 처리하는 방법을 설명하기 위한 흐름도이다.
도 9는 일 실시 예에 따른 레지스터 관리 장치가 레지스터 할당 명령에 따라 데이터를 처리하는 방법을 설명하기 위한 흐름도이다.
도 10a는 일 실시 예에 따른 레지스터 관리 장치가 스레드에 포함된 코드 블럭별로 할당된 레지스터의 개수에 따라 데이터를 처리하는 방법을 설명하기 위한 도면이다.
도 10b는 일 실시 예에 따른 레지스터 관리 장치가 스레드에 포함된 코드 블럭별로 할당된 레지스터의 개수에 따라 데이터를 처리하기 위한 명령어를 설명하기 위한 도면이다.
도 11a는 일 실시 예에 따른 레지스터 관리 장치가 스레드에 포함된 코드 블럭별로 할당된 레지스터의 개수에 따라 데이터를 처리하는 방법을 설명하기 위한 도면이다.
도 11b는 일 실시 예에 따른 레지스터 관리 장치가 스레드에 포함된 코드 블럭별로 할당된 레지스터의 개수에 따라 데이터를 처리하기 위한 명령어를 설명하기 위한 도면이다.
도 2는 그래픽 처리 장치에서 3차원 그래픽스를 처리하는 과정을 설명하는 도면이다.
도 3은 일 실시 예에 따른 레지스터 관리 장치의 구성과 동작을 설명하기 위한 도면이다.
도 4는 일 실시 예에 따른 레지스터 관리 장치가 복수개의 연산 유닛으로부터 데이터를 수신하여 데이터를 처리하는 방법을 설명하기 위한 도면이다.
도 5는 일 실시 예에 따른 레지스터 관리 장치가 레지스터 해시 또는 ROT를 이용하여 데이터를 처리하는 방법을 설명하기 위한 도면이다.
도 6은 일 실시 예에 따른 레지스터 관리 장치가 제1 코드 블럭 및 제2 코드 블럭을 실행하는 방법을 설명하기 위한 흐름도이다.
도 7은 일 실시 예에 따른 레지스터 관리 장치가 레지스터 해시 또는 ROT를 이용하여 데이터를 처리하는 방법을 설명하기 위한 흐름도이다.
도 8은 일 실시 예에 따른 레지스터 관리 장치가 레지스터 할당 명령과 관련하여 데이터를 처리하는 방법을 설명하기 위한 흐름도이다.
도 9는 일 실시 예에 따른 레지스터 관리 장치가 레지스터 할당 명령에 따라 데이터를 처리하는 방법을 설명하기 위한 흐름도이다.
도 10a는 일 실시 예에 따른 레지스터 관리 장치가 스레드에 포함된 코드 블럭별로 할당된 레지스터의 개수에 따라 데이터를 처리하는 방법을 설명하기 위한 도면이다.
도 10b는 일 실시 예에 따른 레지스터 관리 장치가 스레드에 포함된 코드 블럭별로 할당된 레지스터의 개수에 따라 데이터를 처리하기 위한 명령어를 설명하기 위한 도면이다.
도 11a는 일 실시 예에 따른 레지스터 관리 장치가 스레드에 포함된 코드 블럭별로 할당된 레지스터의 개수에 따라 데이터를 처리하는 방법을 설명하기 위한 도면이다.
도 11b는 일 실시 예에 따른 레지스터 관리 장치가 스레드에 포함된 코드 블럭별로 할당된 레지스터의 개수에 따라 데이터를 처리하기 위한 명령어를 설명하기 위한 도면이다.
이하 첨부된 도면을 참조하면서 오로지 예시를 위한 실시 예를 상세히 설명하기로 한다. 하기 실시 예는 기술적 내용을 구체화하기 위한 것일 뿐 권리 범위를 제한하거나 한정하는 것이 아님은 물론이다. 상세한 설명 및 실시 예로부터 해당 기술분야의 전문가가 용이하게 유추할 수 있는 것은 권리범위에 속하는 것으로 해석된다.
본 명세서에서 사용되는 '구성된다' 또는 '포함한다' 등의 용어는 명세서 상에 기재된 여러 구성 요소들, 또는 여러 단계들을 반드시 모두 포함하는 것으로 해석되지 않아야 하며, 그 중 일부 구성 요소들 또는 일부 단계들은 포함되지 않을 수도 있고, 또는 추가적인 구성 요소 또는 단계들을 더 포함할 수 있는 것으로 해석되어야 한다.
또한, 본 명세서에서 사용되는 '제 1' 또는 '제 2' 등과 같이 서수를 포함하는 용어는 다양한 구성 요소들을 설명하는데 사용할 수 있지만, 상기 구성 요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성 요소를 다른 구성 요소로부터 구별하는 목적으로만 사용된다.
본 실시 예들은 렌더링 방법 및 장치에 관한 것으로서 이하의 실시 예들이 속하는 기술 분야에서 통상의 지식을 가진 자에게 널리 알려져 있는 사항들에 관해서는 자세한 설명을 생략한다.
도 1은 일 실시 예에 따른 그래픽 처리 장치(100)를 나타낸 도면이다. 도 1에 도시된 구성요소들 외에 다른 범용적인 구성요소들이 더 포함될 수 있음을 관련 기술 분야에서 통상의 지식을 가진 자라면 이해할 수 있다.
도 1을 참조하면, 그래픽 처리 장치(100)는 래스터라이저(rasterizor)(110), 쉐이더 코어(shader core)(120), 텍스쳐 처리 장치(texture processing unit)(130), 픽셀 처리 장치(pixel processing unit)(140), 타일 버퍼(tile buffer)(150) 등을 포함할 수 있다. 그래픽 처리 장치(100)는 버스(BUS)(170)를 통하여 외부의 메모리(160)와 데이터를 송수신할 수 있다.
도 1에 도시된 그래픽 처리 장치(100)는 3차원 그래픽스를 처리하는 장치로서, 타일에 기초한 렌더링(tile based rendering, TBR) 방식을 사용할 수 있다. 다시 말해서, 그래픽 처리 장치(100)는 하나의 프레임에 해당하는 3차원 그래픽스를 생성하기 위해서, 일정한 크기로 분할된 복수 개의 타일들을 래스터라이저(110), 쉐이더 코어(120), 픽셀 처리 장치(140)를 거치도록 하여, 처리 결과를 타일 버퍼(150)에 저장할 수 있다. 그래픽 처리 장치(100)는 프레임을 구성하는 모든 타일들에 대해서, 래스터라이저(110), 쉐이더 코어(120), 및 픽셀 처리 장치(140)로 구성되는 채널을 복수 개 이용하여, 병렬 처리할 수 있다. 그래픽 처리 장치(100)는 하나의 프레임에 해당하는 복수 개의 타일들이 처리되면, 타일 버퍼(150)에 저장된 처리 결과를 메모리(160)의 프레임 버퍼(미도시)로 전송할 수 있다.
래스터라이저(110)는 기하 변환 과정을 거쳐 버텍스 쉐이더로부터 생성된 프리미티브에 대해 래스터화(rasterization)를 수행할 수 있다.
쉐이더 코어(120)는 래스터라이저(110)로부터 래스터화된 프리미티브를 전달받아, 픽셀 쉐이딩을 수행할 수 있다. 쉐이더 코어(120)는 래스터화를 거쳐 생성된 프리미티브의 프래그먼트들을 포함하는 타일들에 대하여, 타일을 구성하는 모든 픽셀들의 색상을 결정하는 픽셀 쉐이딩을 수행할 수 있다. 쉐이더 코어(120)는 픽셀 쉐이딩 과정에서 입체적이고 현실감있는 3차원 그래픽스를 생성하기 위해 텍스쳐를 이용하여 생성된 픽셀 값을 사용할 수 있다.
쉐이더 코어(120)는 픽셀 쉐이더(pixel shader)를 포함할 수 있다. 또한 쉐이더 코어(120)는 버텍스 쉐이더(vertex shader)를 더 포함한 형태이거나, 버텍스 쉐이더와 픽셀 쉐이더가 통합된 형태의 통합 쉐이더일 수도 있다. 쉐이더 코어(120)가 버텍스 쉐이더의 기능을 수행할 수 있는 경우, 오브젝트를 나타내는 프리미티브(primitive)를 생성하여 래스터라이저(110)에 전달할 수 있다.
쉐이더 코어(120)가 원하는 픽셀에 대응되는 픽셀 값을 전달해 줄 것을 텍스쳐 처리 장치(130)에 요청하면, 텍스쳐 처리 장치(130)는 미리 준비된 텍스쳐를 처리하여 생성된 픽셀 값을 전달해 줄 수 있다. 텍스쳐는 텍스쳐 처리 장치(130) 내부 또는 외부의 소정의 공간 또는 그래픽 처리 장치(100) 외부의 메모리(160)에 저장되어 있을 수 있다. 텍스쳐 처리 장치(130)는 쉐이더 코어(120)에서 요청한 픽셀 값을 생성하는데 이용되는 텍스쳐가 텍스쳐 처리 장치(130) 내부의 소정의 공간에 없는 경우, 텍스쳐 처리 장치(130) 외부의 공간 또는 메모리(160)로부터 텍스쳐를 가져와 사용할 수 있다.
픽셀 처리 장치(140)는 하나의 타일 내의 같은 위치에 대응되는 픽셀들에 대하여, 깊이 테스트 등의 과정을 거쳐, 최종적으로 표시될 픽셀 값을 결정하여 하나의 타일에 해당하는 모든 픽셀 값들을 결정할 수 있다.
타일 버퍼(150)는 픽셀 처리 장치(140)로부터 전달된 하나의 타일에 해당하는 모든 픽셀 값들을 저장할 수 있다. 하나의 프레임을 구성하는 모든 타일들에 대한 그래픽 처리 과정이 완료되면, 타일 버퍼(150)에 저장된 처리 결과가 메모리(160)의 프레임 버퍼로 전달될 수 있다.
도 2는 그래픽 처리 장치(100)에서 3차원 그래픽스를 처리하는 과정을 설명하는 도면이다.
3차원 그래픽스를 처리하는 과정은 크게 기하변환, 래스터화, 픽셀 쉐이딩의 3단계로 나눌 수 있으며, 이하 도 2를 참조하여, 보다 세부적인 과정에 대해 설명한다. 도 2를 참조하면, 단계 11 내지 단계 18을 통해 3차원 그래픽스를 처리하는 과정을 나타낸다.
단계 11은 버텍스들(vertices)을 생성하는 단계이다. 버텍스들은 3차원 그래픽스에 포함된 오브젝트(object)들을 나타내기 위해 생성된다.
단계 12는 생성된 버텍스들을 쉐이딩(shading)하는 단계이다. 버텍스 쉐이더는 단계 11에서 생성된 버텍스들의 위치를 지정함으로써, 버텍스들에 대한 쉐이딩을 수행할 수 있다.
단계 13은 프리미티브들을 생성하는 단계이다. 프리미티브는 적어도 하나의 버텍스를 이용하여 형성되는 점, 선, 다각형(polygon)등을 의미한다. 일 예로서, 프리미티는 버텍스들을 연결하여 형성된 삼각형으로 나타낼 수 있다.
단계 14는 프리미티브를 래스터화(rasterization)하는 단계이다. 프리미티브를 래스터화하는 것은 프리미티브를 프래그먼트들(fragments)로 분할하는 것을 의미한다. 프래그먼트는 프리미티브에 대해 그래픽 처리를 수행하기 위한 기본 단위일 수 있다. 프리미티브는 버텍스에 대한 정보만을 포함하므로, 래스터화 단계에서 버텍스와 버텍스 사이의 프래그먼트들을 생성함으로써, 3차원 그래픽스에 대한 그래픽 처리를 수행할 수 있도록 한다.
단계 15는 픽셀을 쉐이딩하는 단계를 나타낸다. 래스터화에 의해 생성된, 프리미티브를 구성하는 프래그먼트들은 타일을 구성하는 픽셀들이 될 수 있다. 당해 분야에서, 프래그먼트와 픽셀이란 용어는 경우에 따라 혼용해서 사용되기도 한다. 예를 들어, 픽셀 쉐이더는 프래그먼트 쉐이더라고 부를 수 있다. 일반적으로, 프리미티브를 구성하는 그래픽 처리의 기본 단위를 프래그먼트라고 부르고, 이후, 픽셀 쉐이딩부터의 그래픽 처리의 기본 단위를 픽셀이라 부를 수 있다. 픽셀 쉐이딩에서는 픽셀의 색을 결정할 수 있다.
단계 16은 픽셀의 색을 결정하기 위한 텍스쳐링(texturing) 단계를 나타낸다. 텍스쳐링은 미리 준비된 이미지인 텍스쳐를 이용하여 픽셀의 색을 결정하는 과정이다. 실세계의 다양한 색상과 패턴의 모습을 표현하기 위해서 각각의 픽셀의 색상을 계산하여 결정하는 것은 그래픽 처리에 필요한 데이터 연산량과 그래픽 처리 시간을 증가시키므로, 미리 준비된 텍스쳐를 이용하여 픽셀의 색상을 결정하는 것이다. 예를 들어, 오브젝트의 표면 색상을 텍스쳐라는 별도의 2차원 영상으로 저장하고, 오브젝트의 화면상의 위치 및 크기 등에 따라 저장된 텍스쳐를 확대 및 축소하거나, 다양한 해상도를 갖는 텍스쳐들을 이용하여 텍셀 값들을 혼합함으로써, 픽셀의 색상을 결정할 수 있다.
보다 구체적으로, 픽셀 쉐이딩 과정에서 더욱 빠른 3차원 그래픽스 처리를 위해, 미리 준비된 텍스쳐를 이용하여 생성된 픽셀 값을 사용할 수 있다. 이때, 오브젝트의 크기에 적응적으로 대응할 수 있도록, 서로 다른 해상도를 가지는 복수 개의 텍스쳐들을 미리 준비해놓고, 이들을 조합하여 픽셀 값을 생성할 수도 있다. 이때, 서로 다른 해상도를 가지는, 미리 준비된 텍스쳐를 밉맵(mipmap)이라고 한다. 예를 들어, 미리 준비된 두 개의 밉맵들의 중간 해상도를 가지는 오브젝트의 픽셀 값들을 생성하기 위해서, 두 개의 밉맵들로부터 오브젝트에 대응되는 위치의 텍셀(texel) 값들을 추출하여 이들을 필터링함으로써, 오브젝트를 구성하는 픽셀 값들을 생성할 수 있다.
단계 17은 테스트 및 믹싱(testing and mixing) 단계를 나타낸다. 타일 내의 같은 위치에 대응되는 픽셀들에 대하여, 깊이 테스트 등과 같은 과정을 거쳐, 최종적으로 표시될 픽셀 값을 결정하여 하나의 타일에 해당하는 픽셀 값들을 결정할 수 있다. 이와 같은 과정을 거쳐 생성된 복수 개의 타일들을 믹싱하여, 하나의 프레임에 해당하는 3차원 그래픽스를 생성할 수 있다.
단계 18은 11 내지 단계 17을 통해 생성된 프레임을 프레임 버퍼에 저장하고, 프레임 버퍼에 저장된 프레임을 디스플레이 장치를 통해 표시하는 단계를 나타낸다.
도 3은 일 실시 예에 따른 레지스터 관리 장치(300)의 구성과 동작을 설명하기 위한 도면이다. 일 실시 예에 따른 레지스터 관리 장치(300)는 동적으로 레지스터를 관리할 수 있다.
본 명세서에서 “버텍스(vertex)”와 “픽셀(pixel)”은 그래픽 처리의 기본 단위일 수 있다.
또한, 본 명세서에서 일 실시 예에 따른 “쉐이더”는 그래픽 처리를 위해 프로그래밍 언어로 작성된 프로그램의 일종을 의미할 수 있다.
도 3을 참조하면, 레지스터 관리 장치(300)는 수신부(310) 및 제어부(320)를 포함할 수 있다. 도 3에 도시된 레지스터 관리 장치(300)에는 본 실시 예와 관련된 구성 요소들만이 도시되어 있다. 따라서, 도 3에 도시된 구성요소들 외에 다른 범용적인 구성요소들이 더 포함될 수 있음을 본 실시 예와 관련된 기술분야에서 통상의 지식을 가진 자라면 이해할 수 있다.
일 실시 예에 따른 수신부(310)는 하나 이상의 실행 코드를 포함하는 복수개의 스레드를 수신할 수 있다. 일 실시 예에 따른 스레드(thread)란 컴퓨터 프로그램 수행시 프로세스 내부에 존재하는 수행 경로 또는 일련의 실행 코드를 포함할 수 있다. 예를 들면, 소정의 스레드를 실행하는 경우, 소정의 스레드에 대응되는 코드 블럭의 명령(instruction)이 실행될 수 있다. 다른 예로, 스레드가 실행되는 경우, 하나 이상의 동작을 수행하기 위한 연속적인 명령(instruction)이 실행될 수 있다. 여기서, 연속적인 명령은 SESE(single entry single exit) 또는 SEME(single entry multiple exit)의 조건을 만족할 수 있다. 또한, 일 실시 예에 따른 코드 블럭은 하나 이상의 동작을 수행하기 위한 연속적인 명령(instruction)의 집합 및/또는 연속적인 명령이 저장된 메모리 영역을 의미할 수 있다. 예를 들면, 코드 블럭은 SESE(single entry single exit) 또는 SEME(single entry multiple exit)의 조건을 만족하는 하나 이상의 명령의 집합 또는 SESE 또는 SEME의 조건을 만족하는 하나 이상의 명령이 저장된 메모리 영역일 수 있다. 다른 예로, 스레드는 하나 이상의 동작을 수행하기 위한 연속적인 명령어의 집합인 코드 블럭을 포함할 수 있다.
예를 들면, 일 실시 예에 따른 수신부(310)는 제1 코드 블럭 및 제2 코드 블럭을 수신할 수 있다. 제1 코드 블럭 및 제2 코드 블럭 각각은 하나의 워프에 포함되는 복수개의 스레드 중 하나일 수 있다.
일 실시 예에 따른 제어부(320)는 복수개의 스레드를 동시에 수행할 수 있다. 일 실시 예에 따른 제어부(320)는 복수개의 스레드를 각각 독립적으로 처리할 수 있다. 일 실시 예에 따른 제어부(320)는 복수개의 코드 블럭을 하나의 실행 단위로 묶어서 실행할 수 있다. 일 실시 예에 따른 워프(warp)는 데이터 처리 단위의 일종일 수 있다. 일 실시 예에 따른 워프는 하나 이상의 스레드를 포함할 수 있다. 일 실시 예에 따라, 제어부(320)가 복수개의 스레드를 하나의 실행 단위로 묶어서 실행하는 경우, 실행 단위로 묶인 복수개의 스레드를 워프(warp)라고 할 수 있다. 또한, 일 실시 예에 따른 제어부(320)는 SIMT(Single Instruction Multiple Thread) 아키텍처에서 동작할 수 있다.
또한, 일 실시 예에 따라 제어부(320)는 하나의 스레드에 포함된 복수개의 코드 블럭을 하나의 실행 단위로 묶어서 실행할 수 있다.
또한, 일 실시 예에 따른 GPU는 동시에 실행 가능한 워프의 개수가 정해져있을 수 있다. 일 실시 예에 따른 워프가 실행될 때 레지스터가 이용될 수 있다. 일 실시 예에 따른 워프가 실행될 때 레지스터의 집합의 일종인 레지스터 파일이 이용될 수 있다. 예를 들면, 일 실시 예에 따른 제어부(320)는 워프 실행과 관련하여, SRAM(Static Random Access Memory)으로 구현된 레지스터 파일을 이용할 수 있다.
일 실시 예에 따른 제어부(320)는 하나 이상의 실행 코드를 포함하는 제1 코드 블럭을 제1 코드 블럭에 할당된 제1 개수의 레지스터를 이용하여 실행한다.
일 실시 예에 따른 워프는 복수개의 스레드를 포함할 수 있다. 일 실시 예에 따른 워프에 포함된 복수개의 스레드 각각에 대해서 대응되는 코드 블럭이 있을 수 있다. 예를 들면 제1 스레드에 제1 코드 블록 및 제2 코드 블럭이 대응되고, 제2 스레드에 제3 코드 블록 및 제4 코드 블럭이 대응될 수 있다.
일 실시 예에 따른 수신부(310)는 제1 코드 블럭을 수신할 수 있다. 또한, 일 실시 예에 따른 제어부(320)는 제1 코드 블럭을 실행할 수 있다. 예를 들면, 일 실시 예에 따른 제어부(320)는 제1 코드 블럭에 대응되는 복수개의 실행 코드를 실행할 수 있다.
일 실시 예에 따른 제어부(320)가 제1 코드 블럭을 실행할 때, 제1 개수의 레지스터를 이용할 수 있다. 예를 들면, 일 실시 예에 따른 제어부(320)가 제1 코드 블럭을 실행할 때 4개의 레지스터를 이용할 수 있다.
일 실시 예에 따른 워프는 기설정된 개수의 스레드를 포함할 수 있다. 예를 들면, 일 실시 예에 따른 워프는 32개의 스레드를 포함할 수 있다. 워프에 포함된 스레드 각각에 대응되는 하나 이상의 코드 블럭을 수행하기 위해 필요한 레지스터의 개수는 최대값 이하로 결정될 수 있다. 예를 들면, R개이하의 레지스터를 이용하여 각각의 코드 블럭이 실행될 수 있다. 일 실시 예에 따라서, 스레드에 포함된 각각의 코드 블럭을 수행하기 위해 필요한 레지스터의 개수의 최대값은 기설정되어 있을 수도 있고 설정에 따라 결정될 수도 있다.
일 실시 예에 따른 제어부(320)는 제1 코드 블럭이 실행된 이후에 실행되는 제2 코드 블럭을 실행하기 위해 필요한 레지스터의 개수인 제2 개수를 획득하고, 제1 개수와 제2 개수의 차이 값에 기초하여, 제2 코드 블럭에 대응되는 개수의 레지스터를 제2 코드 블럭에 할당한다.
일 실시 예에 따른, 제1 코드 블럭 및 제2 코드 블럭 각각은 독립적으로 처리될 수 있는 데이터 처리 단위인 워프(wrap)에 포함되는 복수개의 스레드 중 하나에 포함될 수 있다.
일 실시 예에 따른 제어부(320)는 워프를 실행할 때, 워프에 포함된 복수개의 스레드 중 제1 스레드에 포함된 제1 코드 블럭과 제2 코드 블럭을 연속적으로 실행할 수 있다. 제1 코드 블럭이 실행된 이후에 제2 코드 블럭이 실행되는 경우, 일 실시 예에 따른 제어부(320)는 제2 코드 블럭을 실행하기 위해 필요한 레지스터의 개수인 제2 개수를 획득할 수 있다. 예를 들면, 일 실시 예에 따른 제어부(320)는 제1 코드 블럭을 실행하는 동안 제1 코드 블럭 다음 순서로 실행될 코드 블럭인 제2 코드 블럭에 할당되는 레지스터의 수를 획득할 수 있다.
일 실시 예에 따른 제어부(320)는 제2 개수를 획득하고, 제1 코드 블럭을 실행할 때 이용된 레지스터의 개수인 제1 개수와 획득한 제2 개수의 차이 값에 기초하여 제2 코드 블럭에 대응되는 개수의 레지스터를 제2 코드 블럭의 실행을 위해 할당할 수 있다.
예를 들면, 제1 코드 블럭을 실행하기 위해 필요한 레지스터의 개수가 4개이고, 제2 코드 블럭을 실행하기 위해 필요한 레지스터의 개수가 7개인 경우, 일 실시 예에 따른 제어부(320)는 7개와 4개의 차이인 3개라는 차이 값에 기초하여 제2 코드 블럭에 대응되는 개수인 7개의 레지스터를 제2 코드 블럭의 실행을 위해 할당할 수 있다. 예를 들면, 제어부(320)는 제1 코드 블럭 실행 후 제2 코드 블럭 실행을 위해서 3개의 레지스터를 추가 할당할 수 있다.
다른 실시 예에 따른 제어부(320)는 제2 개수를 획득하고, 제1 코드 블럭을 실행할 때 이용된 레지스터의 개수인 제1 개수와 획득한 제2 개수의 차이 값 및 기설정된 최소 단위에 기초하여 제2 코드 블럭에 대응되는 개수의 레지스터를 제2 코드 블럭의 실행을 위해 할당할 수 있다.
예를 들면, 제1 코드 블럭을 실행하기 위해 필요한 레지스터의 개수가 4개이고, 제2 코드 블럭을 실행하기 위해 필요한 레지스터의 개수가 7개이고, 기설정된 최소 할당 단위가 2인 경우, 일 실시 예에 따른 제어부(320)는 7개와 4개의 차이인 3개라는 차이 값에 기초하여 제2 코드 블럭에 대응되는 개수인 8개의 레지스터를 제2 코드 블럭의 실행을 위해 할당할 수 있다. 일 실시 예에 따른 제어부(320)는 추가 할당 또는 해제를 최소 단위의 개수인 2개 단위로만 수행할 수 있으므로, 7개가 필요한 경우 8개를 할당할 수 있다.
일 실시 예에 따른 제어부(320)는 제2 코드 블럭에 할당된 레지스터를 이용하여 제2 코드 블럭을 실행한다.
일 실시 예에 따른 제어부(320)는 단계 S620에서 제2 코드 블럭에 할당된 제2 코드 블럭에 대응되는 개수의 레지스터를 이용하여 제2 코드 블럭을 실행할 수 있다. 일 실시 예에 따른 제어부(320)는 제2 코드 블럭을 실행함에 따라 제2 코드 블럭에 포함된 일련의 명령어를 실행할 수 있다.
일 실시 예에 따른 제어부(320)는 제1 코드 블럭 및 제2 코드 블럭 각각에 대응되는 레지스터의 개수에 대한 정보를 포함하는 정보인 ROT(Register Occupancy Table)을 갱신한다.
일 실시 예에 따른 ROT는 메모리에서 각 스레드 또는 각 코드 블럭에 대응되는 레지스터의 주소에 대한 정보를 포함할 수 있다. 또는, 일 실시 예에 따른 ROT는 메모리에서 하나 이상의 워프에 포함되는 복수의 스레드 또는 복수의 코드 블럭에 대응되는 레지스터의 주소에 대한 정보를 포함할 수 있다. 예를 들면, ROT는 제1 코드 블럭을 실행하기 위해 이용되는 레지스터들의 물리적인 주소 정보와 제2 코드 블럭을 실행하기 위해 이용되는 레지스터들의 물리적인 주소 정보를 포함할 수 있다. 일 실시 예에 따라, 각 스레드 또는 각 코드 블럭의 실행을 위해 이용되는 레지스터의 주소는 SRAM(static random access memory)내의 주소일 수 있다.
일 실시 예에 따른 ROT는 하드웨어로 구성될 수도 있고 소프트웨어적으로 구성될 수도 있다. 예를 들면, ROT는 복수의 워프들의 실행에 이용되는 레지스터를 관리하는 소프트웨어 및/또는 하드웨어로 구성된 객체일 수 있다.
ROT는 스레드에 포함되는 코드 블럭 각각에 대응되는 레지스터의 개수에 대한 정보를 포함할 수 있다. 예를 들면, ROT는 제1 코드 블럭에 대응되는 레지스터의 개수가 4개이고, 제2 코드 블럭에 대응되는 레지스터의 개수가 7이라는 정보를 포함할 수 있다.
ROT는 스레드에 포함되는 코드 블럭 중 현재 실행중인 코드 블럭 이후에 실행되는 각 코드 블럭의 실행을 위해 필요한 레지스터 개수들 중 최대 개수인 최대 레지스터 개수를 나타내는 정보를 포함할 수 있다. 예를 들면, 스레드에 포함된 코드 블럭이 제1 코드 블럭, 제2 코드 블럭 및 제3 코드 블럭 3개이고, 제1 코드 블럭, 제2 코드 블럭 및 제3 코드 블럭의 순서로 실행되고, 제1 코드 블럭을 실행하기 위해서는 4개의 레지스터가, 제2 코드 블럭을 실행하기 위해서는 7개의 레지스터가, 제3 코드 블럭을 실행하기 위해서는 5개의 레지스터가 필요한 경우, 제1 코드 블럭이 실행될 때 최대 레지스터 개수는 7개이고, 제2 코드 블럭이 실행될 때 최대 레지스터의 개수는 5개일 수 있으며, 각 최대 레지스터의 개수에 대한 정보를 ROT는 포함할 수 있다.
일 실시 예에 따른 제어부(320)는 스레드에 포함된 소정의 코드 블럭에 소정 개수의 레지스터를 할당함에 따라 ROT를 갱신할 수 있다.
일 예로, 일 실시 예에 따른 제어부(320)는 제2 코드 블럭에 대응되는 개수의 레지스터를 제2 코드 블럭에 할당함에 따라, ROT를 갱신할 수 있다. 예를 들면, 일 실시 예에 따른 제어부(320)는 제2 코드 블럭에 대응되는 개수의 레지스터를 제2 코드 블럭에 할당함에 따라, 제2 코드 블럭에 할당되는 주소에 대한 내용을 ROT에서 갱신할 수 있다. 다른 예로, 일 실시 예에 따른 제어부(320)는 제2 코드 블럭에 대응되는 개수의 레지스터를 제2 코드 블럭에 할당함에 따라, 제1 코드 블럭 및 제2 코드 블럭에 할당되는 레지스터의 주소에 대한 내용을 ROT에서 갱신할 수 있다.
일 실시 예에 따른 제어부(320)는 제2 코드 블럭에 대응되는 레지스터의 개수에 대한 정보를 포함하는 정보인 레지스터 해시(Register Hash)를 갱신한다.
일 실시 예에 따른 레지스터 해시(RH)는 메모리에서 소정의 스레드에 대응되는 레지스터의 주소에 대한 정보를 포함할 수 있다. 예를 들면, 제1 레지스터 해시는 제1 코드 블럭을 실행하기 위해 이용되는 레지스터들의 물리적인 주소 정보를 포함할 수 있다. 다른 예로, 제2 레지스터 해시는 제2 코드 블럭을 실행하기 위해 이용되는 레지스터들의 물리적인 주소 정보를 포함할 수 있다. 일 실시 예에 따라, 각 스레드의 실행을 위해 이용되는 레지스터의 주소는 SRAM(static random access memory)내의 주소일 수 있으나 이에 제한되지 않는다.
일 실시 예에 따른 제어부(320)는 워프에 포함된 소정의 스레드에 소정 개수의 레지스터를 할당함에 따라 레지스터 해시(RH)를 갱신할 수 있다.
일 예로, 일 실시 예에 따른 제어부(320)는 제2 코드 블럭에 대응되는 개수의 레지스터를 제2 코드 블럭에 할당함에 따라, 레지스터 해시(RH)를 갱신할 수 있다. 예를 들면, 일 실시 예에 따른 제어부(320)는 제2 코드 블럭에 대응되는 개수의 레지스터를 제2 코드 블럭에 할당함에 따라, 제2 코드 블럭에 할당되는 주소에 대한 내용을 레지스터 해시(RH)에서 갱신할 수 있다. 다른 예로, 일 실시 예에 따른 제어부(320)는 제2 코드 블럭에 대응되는 개수의 레지스터를 제2 코드 블럭에 할당함에 따라, 제1 코드 블럭에 할당되는 주소에 대한 내용을 레지스터 해시(RH)에서 갱신할 수 있다. 제1 코드 블럭에 대응되는 레지스터 해시(RH)와 제2 코드 블럭에 대응되는 레지스터 해시(RH)는 서로 상이할 수 있다.
일 실시 예에 따른 제어부(320)는 제1 개수가 제2 개수보다 작은 경우, 제2 코드 블럭 실행을 위해 할당되는 레지스터의 개수를 증가시키기 위해 추가 할당(allocation)을 수행한다.
예를 들면, 제1 개수가 4이고 제2 개수가 7인 경우, 제1 개수가 제2 개수보다 작다. 이 경우, 제1 코드 블럭 실행을 위해서는 4개의 레지스터가 필요했지만, 제2 코드 블럭을 실행시키기 위해서는 7개의 레지스터가 필요하다. 따라서, 일 실시 예에 따른 제어부(320)는 제2 코드 블럭을 실행시키기 위해서는 제1 코드 블럭을 실행시킬 때 필요했던 4개의 레지스터에서 3개의 레지스터를 추가하여 7개의 레지스터를 제2 코드 블럭에 할당하는 동작을 수행할 수 있다. 이 경우, 일 실시 예에 따른 제어부(320)는 3개의 레지스터를 추가 할당하는 동작을 수행할 수 있다.
일 실시 예에 따른 제어부(320)는 제1 개수가 제2 개수보다 큰 경우, 제2 코드 블럭 실행을 위해 할당되는 레지스터의 개수를 감소시키기 위해 해제(free)를 수행한다.
예를 들면, 제1 개수가 4이고 제2 개수가 3인 경우, 제1 개수가 제2 개수보다 크다. 이 경우, 제1 코드 블럭 실행을 위해서는 4개의 레지스터가 필요했지만, 제2 코드 블럭을 실행시키기 위해서는 3개의 레지스터가 필요하다. 따라서, 일 실시 예에 따른 제어부(320)는 제2 코드 블럭을 실행시키기 위해서는 제1 코드 블럭을 실행시킬 때 필요했던 4개의 레지스터에서 1개의 레지스터를 해제(free)하여 3개의 레지스터를 제2 코드 블럭에 할당하는 동작을 수행할 수 있다. 이 경우, 일 실시 예에 따른 제어부(320)는 1개의 레지스터를 해제(free)하는 동작을 수행할 수 있다.
도 4는 일 실시 예에 따른 레지스터 관리 장치(300)가 복수개의 연산 유닛으로부터 데이터를 수신하여 데이터를 처리하는 방법을 설명하기 위한 도면이다.
일 실시 예에 따른 레지스터 관리 장치(300)는 쉐이더 코어 내에 위치할 수 있다. 일 실시 예에 따른 쉐이더는 쉐이딩을 수행하는 과정에 있어서, 레지스터를 이용한다. 쉐이더가 쉐이딩을 수행할 때 이용되는 레지스터의 개수가 경우에 따라 상이할 수 있고, 레지스터 관리 장치(300)는 쉐이딩 수행에 요구되는 레지스터의 수가 변경됨에 따라, 추가적인 레지스터 할당(allocation) 또는 불필요한 레지스터의 해제(free)를 요청하여 쉐이딩에 이용되는 레지스터의 수를 동적으로 조절할 수 있다.
따라서, 레지스터 관리 장치(300)는 레지스터의 할당 및 해제를 위한 명령을 제공할 수 있다. 레지스터 관리 장치(300)의 할당 및 해제 명령에 따라 컴파일러는 레지스터를 할당할 때 레지스터의 할당과 해제 명령을 생성할 수 있다.
또한, 일 실시 예에 따른 할당과 해제 명령에 따라 GPU 아키텍쳐가 동작할 수 있다. 예를 들면, GPU 아키텍쳐는 워프에 대해 레지스터 할당 명령을 수신한 경우, 필요한 만큼의 레지스터가 있는지 여부를 결정하고, 필요한 만큼의 레지스터가 있는 경우, 해당 개수만큼의 레지스터를 해당 워프에 할당하고, 필요한 만큼의 레지스터가 없는 경우, 충분한 여유 레지스터가 있을 때까지 해당 워프의 실행을 중단할 수 있다.
일 실시 예에 따른 쉐이더 코어는 복수개의 연산 유닛(Processing Element) (410, 420, 430)을 포함할 수 있다. 일 실시 예에 따른 복수개의 연산 유닛(410, 420, 430) 각각은 각각의 연산 유닛(410, 420, 430)에 대응되는 스레드를 실행할 수 있다. 이 경우, 연산 유닛(410, 420, 430)에서 스레드가 실행되고, 스레드가 실행됨에 따라 변경되는 레지스터 해시나 ROT가 데이터 처리장치 내에서 갱신될 수 있다.
다른 실시 예에 따른 연산 유닛(410, 420, 430)은 제어부(320) 내에 포함되어 스레드 또는 스레드에 대응되는 코드 블럭들을 실행할 수 있다. 이 경우, 연산 유닛(410, 420, 430)은 제어부(320)의 구성요소로서, 제어부(320)가 수신부(310)로부터 스레드를 수신하면, 수신한 스레드를 레지스터를 이용하여 실행하는 동작을 수행할 수 있다. 스레드를 실행하는데 이용되는 레지스터 파일은 제어부(320) 내에 위치할 수도 있고, 제어부(320) 외부에 위치할 수도 있다. 또한, 스레드를 실행하는데 이용되는 레지스터 파일은 레지스터 관리 장치(300) 내에 위치할 수도 있고, 레지스터 관리 장치(300) 외부에 위치할 수도 있다.
도 5는 일 실시 예에 따른 레지스터 관리 장치(300)가 레지스터 해시 또는 ROT를 이용하여 데이터를 처리하는 방법을 설명하기 위한 도면이다.
도 5를 참조하면, 레지스터 관리 장치(300)는 레지스터 해시(510, 520, 530) 및 ROT(540)를 포함할 수 있다. 도 5에 도시된 레지스터 관리 장치(300)에는 본 실시 예와 관련된 구성 요소들만이 도시되어 있다. 따라서, 도 5에 도시된 구성요소들 외에 다른 범용적인 구성요소들이 더 포함될 수 있음을 본 실시 예와 관련된 기술분야에서 통상의 지식을 가진 자라면 이해할 수 있다.
또한 레지스터 관리 장치(300)는 연산 유닛(410) 및 레지스터 파일(550)과 연결되어있을 수 있다. 연산 유닛(410, 420, 430)은 소정 단위의 연산을 수행할 수 있다. 예를 들면 제1 연산 유닛(410)은 제1 코드 블럭, 제2 연산 유닛(420)은 제2 코드 블럭을, 제N 연산 유닛은 제N 코드 블럭을 실행할 수 있다.
일 실시 예에 따른 레지스터 해시(RH)는 메모리에서 소정의 코드 블럭에 대응되는 레지스터의 주소에 대한 정보를 포함할 수 있다. 예를 들면, 제1 레지스터 해시(510)는 제1 스레드 또는 제1 코드 블럭을 실행하기 위해 이용되는 레지스터들의 물리적인 주소 정보를 포함할 수 있다. 다른 예로, 제2 레지스터 해시(520)는 제2 스레드 또는 제2 코드 블럭을 실행하기 위해 이용되는 레지스터들의 물리적인 주소 정보를 포함할 수 있다. 일 실시 예에 따라, 각 스레드의 실행을 위해 이용되는 레지스터의 주소는 SRAM(static random access memory)내의 주소일 수 있으나 이에 제한되지 않는다.
일 실시 예에 따른 레지스터 관리 장치(300)는 워프에 포함된 소정의 스레드에 소정 개수의 레지스터를 할당함에 따라 레지스터 해시(RH)를 갱신할 수 있다.
일 실시 예에 따른 복수개의 연산 유닛(410, 420, 430)은 명령을 실행하기 위해 레지스터 파일(550)에 읽기 또는 쓰기 요청을 전송하고, 레지스터 파일(550)는 요청에 대한 처리 결과를 다시 연산 유닛(410, 420, 430)에 전송할 수 있다.
일 실시 예에 따라 레지스터 관리 장치(300)는 연산 유닛(410, 420, 430)과 레지스터 파일(550)의 사이에 위치할 수 있다. 일 실시 예에 따라 레지스터 관리 장치(300)는 레지스터 해시(510, 520, 530) 및 ROT(540)를 포함할 수 있다. 일 실시 예에 따른 ROT(540)는 각 워프가 점유하는 레지스터 정보를 저장하면서, 각 워프의 레지스터에 해단 할당이나 해제 요청을 처리할 수 있다. ROT(540)에 의해 할당된 레지스터는 하나의 워프에 대하여 연속적이지 않을 수 있다. 일 실시 예에 따른 데이터 처리 장치(510)는 각 연산 유닛마다 대응되는 레지스터 해시를 포함할 수 있다. 일 실시 예에 따른 레지스터 해시(510, 520, 530)는 각 워프가 요청하는 레지스터 번호를 실제 할당된 레지스터 주소로 변환할 수 있다.
도 6은 일 실시 예에 따른 레지스터 관리 장치(300)가 제1 코드 블럭 및 제2 코드 블럭을 실행하는 방법을 설명하기 위한 흐름도이다.
일 실시 예에 따른 코드 블럭은 하나 이상의 동작을 수행하기 위한 연속적인 명령(instruction)의 집합 및/또는 연속적인 명령이 저장된 메모리 영역을 의미할 수 있다. 예를 들면, 코드 블럭은 SESE(single entry single exit) 또는 SEME(single entry multiple exit)의 조건을 만족하는 하나 이상의 명령의 집합 또는 SESE 또는 SEME의 조건을 만족하는 하나 이상의 명령이 저장된 메모리 영역일 수 있다.
일 실시 예에 따른 스레드(thread)란 컴퓨터 프로그램 수행시 프로세스 내부에 존재하는 수행 경로 또는 일련의 실행 코드를 포함할 수 있다. 예를 들면, 소정의 스레드를 실행하는 경우, 소정의 스레드에 대응되는 코드 블럭의 명령(instruction)이 실행될 수 있다. 다른 예로, 스레드가 실행되는 경우, 하나 이상의 동작을 수행하기 위한 연속적인 명령(instruction)이 실행될 수 있다. 여기서, 연속적인 명령은 SESE(single entry single exit) 또는 SEME(single entry multiple exit)의 조건을 만족할 수 있다.
일 실시 예에 따른 레지스터 관리 장치(300)는 복수개의 스레드를 동시에 수행할 수 있다. 일 실시 예에 따른 레지스터 관리 장치(300)는 복수개의 스레드를 각각 독립적으로 처리할 수 있다. 일 실시 예에 따른 레지스터 관리 장치(300)는 복수개의 스레드를 하나의 실행 단위로 묶어서 실행할 수 있다. 일 실시 예에 따라, 레지스터 관리 장치(300)가 복수개의 스레드를 하나의 실행 단위로 묶어서 실행하는 경우, 실행 단위로 묶인 복수개의 스레드를 워프(warp)라고 할 수 있다. 또한, 일 실시 예에 따른 레지스터 관리 장치(300)는 SIMT(Single Instruction Multiple Thread) 아키텍처에서 동작할 수 있다.
일 실시 예에 따른 GPU는 동시에 실행 가능한 워프의 개수가 정해져있을 수 있다. 일 실시 예에 따른 워프가 실행될 때 레지스터가 이용될 수 있다. 일 실시 예에 따른 워프가 실행될 때 레지스터의 집합의 일종인 레지스터 파일이 이용될 수 있다. 예를 들면, 일 실시 예에 따른 레지스터 관리 장치(300)는 워프 실행과 관련하여, SRAM(Static Random Access Memory)으로 구현된 레지스터 파일을 이용할 수 있다.
단계 S610에서, 일 실시 예에 따른 레지스터 관리 장치(300)는 하나 이상의 실행 코드를 포함하는 제1 코드 블럭을 제1 코드 블럭에 할당된 제1 개수의 레지스터를 이용하여 실행한다.
일 실시 예에 따른 워프는 복수개의 스레드를 포함할 수 있다. 일 실시 예에 따른 워프에 포함된 복수개의 스레드 각각에 대해서 대응되는 하나 이상의 코드 블럭이 있을 수 있다. 예를 들면 제1 스레드에 제1 코드 블럭 및 제2 코드 블럭이 대응되고, 제2 스레드에 제3 코드 블럭 및 제4 코드 블럭이 대응될 수 있다.
일 실시 예에 따른 레지스터 관리 장치(300)는 제1 코드 블럭을 수신할 수 있다. 또한, 일 실시 예에 따른 데이터 처리 장치는 제1 코드 블럭을 실행할 수 있다. 예를 들면, 일 실시 예에 따른 레지스터 관리 장치(300)는 제1 코드 블럭에 대응되는 복수개의 실행 코드를 실행할 수 있다.
일 실시 예에 따른 레지스터 관리 장치(300)가 제1 코드 블럭을 실행할 때, 제1 개수의 레지스터를 이용할 수 있다. 예를 들면, 일 실시 예에 따른 레지스터 관리 장치(300)가 제1 코드 블럭을 실행할 때 4개의 레지스터를 이용할 수 있다.
일 실시 예에 따른 워프는 기설정된 개수의 스레드를 포함할 수 있다. 예를 들면, 일 실시 예에 따른 워프는 32개의 스레드를 포함할 수 있다. 워프에 포함된 스레드 각각에 대응되는 하나 이상의 코드 블럭을 수행하기 위해 필요한 레지스터의 개수는 최대값 이하로 결정될 수 있다. 예를 들면, R개이하의 레지스터를 이용하여 각각의 코드 블럭이 실행될 수 있다. 일 실시 예에 따라서, 스레드에 포함된 각각의 코드 블럭을 수행하기 위해 필요한 레지스터의 개수의 최대값은 기설정되어 있을 수도 있고 설정에 따라 결정될 수도 있다.
단계 S620에서, 일 실시 예에 따른 레지스터 관리 장치(300)는 제1 코드 블럭이 실행된 이후에 실행되는 제2 코드 블럭을 실행하기 위해 필요한 레지스터의 개수인 제2 개수를 획득하고, 제1 개수와 제2 개수의 차이 값에 기초하여, 제2 코드 블럭에 대응되는 개수의 레지스터를 제2 코드 블럭에 할당한다.
일 실시 예에 따른, 제1 코드 블럭 및 제2 코드 블럭 각각은 독립적으로 처리될 수 있는 데이터 처리 단위인 워프(wrap)에 포함되는 복수개의 스레드 중 하나에 포함될 수 있다.
일 실시 예에 따른 레지스터 관리 장치(300)는 워프를 실행할 때, 워프에 포함된 복수개의 스레드 중 제1 스레드에 포함된 제1 코드 블럭과 제2 코드 블럭을 연속적으로 실행할 수 있다. 제1 코드 블럭이 실행된 이후에 제2 코드 블럭이 실행되는 경우, 일 실시 예에 따른 레지스터 관리 장치(300)는 제2 코드 블럭을 실행하기 위해 필요한 레지스터의 개수인 제2 개수를 획득할 수 있다. 예를 들면, 일 실시 예에 따른 레지스터 관리 장치(300)는 제1 코드 블럭을 실행하는 동안 제1 코드 블럭 다음 순서로 실행될 코드 블럭인 제2 코드 블럭에 할당되는 레지스터의 수를 획득할 수 있다.
일 실시 예에 따른 레지스터 관리 장치(300)는 제2 개수를 획득하고, 제1 코드 블럭을 실행할 때 이용된 레지스터의 개수인 제1 개수와 획득한 제2 개수의 차이 값에 기초하여 제2 코드 블럭에 대응되는 개수의 레지스터를 제2 코드 블럭의 실행을 위해 할당할 수 있다.
예를 들면, 제1 코드 블럭을 실행하기 위해 필요한 레지스터의 개수가 4개이고, 제2 코드 블럭을 실행하기 위해 필요한 레지스터의 개수가 7개인 경우, 일 실시 예에 따른 레지스터 관리 장치(300)는 7개와 4개의 차이인 3개라는 차이 값에 기초하여 제2 코드 블럭에 대응되는 개수인 7개의 레지스터를 제2 코드 블럭의 실행을 위해 할당할 수 있다. 예를 들면, 제어부(320)는 제1 코드 블럭 실행 후 제2 코드 블럭 실행을 위해서 3개의 레지스터를 추가 할당할 수 있다.
다른 실시 예에 따른 레지스터 관리 장치(300)는 제2 개수를 획득하고, 제1 코드 블럭을 실행할 때 이용된 레지스터의 개수인 제1 개수와 획득한 제2 개수의 차이 값 및 기설정된 최소 단위에 기초하여 제2 코드 블럭에 대응되는 개수의 레지스터를 제2 코드 블럭의 실행을 위해 할당할 수 있다.
예를 들면, 제1 코드 블럭을 실행하기 위해 필요한 레지스터의 개수가 4개이고, 제2 코드 블럭을 실행하기 위해 필요한 레지스터의 개수가 7개이고, 기설정된 최소 할당 단위가 2인 경우, 일 실시 예에 따른 레지스터 관리 장치(300)는 7개와 4개의 차이인 3개라는 차이 값에 기초하여 제2 코드 블럭에 대응되는 개수인 8개의 레지스터를 제2 코드 블럭의 실행을 위해 할당할 수 있다. 일 실시 예에 따른 레지스터 관리 장치(300)는 추가 할당 또는 해제를 최소 단위의 개수인 2개 단위로만 수행할 수 있으므로, 7개가 필요한 경우 8개를 할당할 수 있다.
단계 S630에서, 일 실시 예에 따른 레지스터 관리 장치(300)는 제2 코드 블럭에 할당된 레지스터를 이용하여 제2 코드 블럭을 실행한다.
일 실시 예에 따른 레지스터 관리 장치(300)는 단계 S620에서 제2 코드 블럭에 할당된 제2 코드 블럭에 대응되는 개수의 레지스터를 이용하여 제2 코드 블럭을 실행할 수 있다. 일 실시 예에 따른 레지스터 관리 장치(300)는 제2 코드 블럭을 실행함에 따라 제2 코드 블럭에 포함된 일련의 명령어를 실행할 수 있다.
도 7은 일 실시 예에 따른 레지스터 관리 장치(300)가 레지스터 해시 또는 ROT를 이용하여 데이터를 처리하는 방법을 설명하기 위한 흐름도이다.
단계 S710, S720 및 S770은 각각 단계 S610, S620 및 S630에 대응되므로 전체적인 설명을 간단히 하기 위해 상세한 설명을 생략한다.
단계 S730에서, 일 실시 예에 따른 레지스터 관리 장치(300)는 제1 코드 블럭 및 제2 코드 블럭 각각에 대응되는 레지스터의 개수에 대한 정보를 포함하는 정보인 ROT(Register Occupancy Table)을 갱신한다.
일 실시 예에 따른 ROT는 메모리에서 각 스레드 또는 각 코드 블럭에 대응되는 레지스터의 주소에 대한 정보를 포함할 수 있다. 또는, 일 실시 예에 따른 ROT는 메모리에서 하나 이상의 워프에 포함되는 복수의 스레드 또는 복수의 코드 블럭에 대응되는 레지스터의 주소에 대한 정보를 포함할 수 있다. 예를 들면, ROT는 제1 코드 블럭을 실행하기 위해 이용되는 레지스터들의 물리적인 주소 정보와 제2 코드 블럭을 실행하기 위해 이용되는 레지스터들의 물리적인 주소 정보를 포함할 수 있다. 일 실시 예에 따라, 각 스레드 또는 각 코드 블럭의 실행을 위해 이용되는 레지스터의 주소는 SRAM(static random access memory)내의 주소일 수 있다.
일 실시 예에 따른 ROT는 하드웨어로 구성될 수도 있고 소프트웨어적으로 구성될 수도 있다. 예를 들면, ROT는 복수의 워프들의 실행에 이용되는 레지스터를 관리하는 소프트웨어 및/또는 하드웨어로 구성된 객체일 수 있다.
ROT는 스레드에 포함되는 코드 블럭 각각에 대응되는 레지스터의 개수에 대한 정보를 포함할 수 있다. 예를 들면, ROT는 제1 코드 블럭에 대응되는 레지스터의 개수가 4개이고, 제2 코드 블럭에 대응되는 레지스터의 개수가 7이라는 정보를 포함할 수 있다.
ROT는 코드 블럭 중 현재 실행중인 코드 블럭 이후에 실행되는 각 코드 블럭의 실행을 위해 필요한 레지스터 개수들 중 최대 개수인 최대 레지스터 개수를 나타내는 정보를 포함할 수 있다. 예를 들면, 스레드에 포함된 코드 블럭이 제1 코드 블럭, 제2 코드 블럭 및 제3 코드 블럭 3개이고, 제1 코드 블럭, 제2 코드 블럭 및 제3 코드 블럭의 순서로 실행되고, 제1 코드 블럭을 실행하기 위해서는 4개의 레지스터가, 제2 코드 블럭을 실행하기 위해서는 7개의 레지스터가, 제3 코드 블럭을 실행하기 위해서는 5개의 레지스터가 필요한 경우, 제1 코드 블럭이 실행될 때 최대 레지스터 개수는 7개이고, 제2 코드 블럭이 실행될 때 최대 레지스터의 개수는 5개일 수 있으며, 각 최대 레지스터의 개수에 대한 정보를 ROT는 포함할 수 있다.
일 실시 예에 따른 레지스터 관리 장치(300)는 스레드에 포함된 소정의 코드 블럭에 소정 개수의 레지스터를 할당함에 따라 ROT를 갱신할 수 있다.
일 예로, 일 실시 예에 따른 레지스터 관리 장치(300)는 제2 코드 블럭에 대응되는 개수의 레지스터를 제2 코드 블럭에 할당함에 따라, ROT를 갱신할 수 있다. 예를 들면, 일 실시 예에 따른 레지스터 관리 장치(300)는 제2 코드 블럭에 대응되는 개수의 레지스터를 제2 코드 블럭에 할당함에 따라, 제2 코드 블럭에 할당되는 주소에 대한 내용을 ROT에서 갱신할 수 있다. 다른 예로, 일 실시 예에 따른 레지스터 관리 장치(300)는 제2 코드 블럭에 대응되는 개수의 레지스터를 제2 코드 블럭에 할당함에 따라, 제1 코드 블럭 및 제2 코드 블럭에 할당되는 레지스터의 주소에 대한 내용을 ROT에서 갱신할 수 있다.
단계 S740에서, 일 실시 예에 따른 레지스터 관리 장치(300)는 제2 코드 블럭에 대응되는 레지스터의 개수에 대한 정보를 포함하는 정보인 레지스터 해시(Register Hash)를 갱신한다.
일 실시 예에 따른 레지스터 해시(RH)는 메모리에서 소정의 스레드에 대응되는 레지스터의 주소에 대한 정보를 포함할 수 있다. 예를 들면, 제1 레지스터 해시는 제1 코드 블럭을 실행하기 위해 이용되는 레지스터들의 물리적인 주소 정보를 포함할 수 있다. 다른 예로, 제2 레지스터 해시는 제2 코드 블럭을 실행하기 위해 이용되는 레지스터들의 물리적인 주소 정보를 포함할 수 있다. 일 실시 예에 따라, 각 스레드의 실행을 위해 이용되는 레지스터의 주소는 SRAM(static random access memory)내의 주소일 수 있으나 이에 제한되지 않는다.
일 실시 예에 따른 레지스터 관리 장치(300)는 워프에 포함된 소정의 스레드에 소정 개수의 레지스터를 할당함에 따라 레지스터 해시(RH)를 갱신할 수 있다.
일 예로, 일 실시 예에 따른 레지스터 관리 장치(300)는 제2 코드 블럭에 대응되는 개수의 레지스터를 제2 코드 블럭에 할당함에 따라, 레지스터 해시(RH)를 갱신할 수 있다. 예를 들면, 일 실시 예에 따른 레지스터 관리 장치(300)는 제2 코드 블럭에 대응되는 개수의 레지스터를 제2 코드 블럭에 할당함에 따라, 제2 코드 블럭에 할당되는 주소에 대한 내용을 레지스터 해시(RH)에서 갱신할 수 있다. 다른 예로, 일 실시 예에 따른 레지스터 관리 장치(300)는 제2 코드 블럭에 대응되는 개수의 레지스터를 제2 코드 블럭에 할당함에 따라, 제1 코드 블럭에 할당되는 주소에 대한 내용을 레지스터 해시(RH)에서 갱신할 수 있다. 제1 코드 블럭에 대응되는 레지스터 해시(RH)와 제2 코드 블럭에 대응되는 레지스터 해시(RH)는 서로 상이할 수 있다.
단계 S750에서, 일 실시 예에 따른 레지스터 관리 장치(300)는 제1 개수가 제2 개수보다 작은 경우, 제2 코드 블럭 실행을 위해 할당되는 레지스터의 개수를 증가시키기 위해 추가 할당(allocation)을 수행한다.
예를 들면, 제1 개수가 4이고 제2 개수가 7인 경우, 제1 개수가 제2 개수보다 작다. 이 경우, 제1 코드 블럭 실행을 위해서는 4개의 레지스터가 필요했지만, 제2 코드 블럭을 실행시키기 위해서는 7개의 레지스터가 필요하다. 따라서, 일 실시 예에 따른 레지스터 관리 장치(300)는 제2 코드 블럭을 실행시키기 위해서는 제1 코드 블럭을 실행시킬 때 필요했던 4개의 레지스터에서 3개의 레지스터를 추가하여 7개의 레지스터를 제2 코드 블럭에 할당하는 동작을 수행할 수 있다. 이 경우, 일 실시 예에 따른 레지스터 관리 장치(300)는 3개의 레지스터를 추가 할당하는 동작을 수행할 수 있다.
단계 S760에서, 일 실시 예에 따른 레지스터 관리 장치(300)는 제1 개수가 제2 개수보다 큰 경우, 제2 코드 블럭 실행을 위해 할당되는 레지스터의 개수를 감소시키기 위해 해제(free)를 수행한다.
예를 들면, 제1 개수가 4이고 제2 개수가 3인 경우, 제1 개수가 제2 개수보다 크다. 이 경우, 제1 코드 블럭 실행을 위해서는 4개의 레지스터가 필요했지만, 제2 코드 블럭을 실행시키기 위해서는 3개의 레지스터가 필요하다. 따라서, 일 실시 예에 따른 레지스터 관리 장치(300)는 제2 코드 블럭을 실행시키기 위해서는 제1 코드 블럭을 실행시킬 때 필요했던 4개의 레지스터에서 1개의 레지스터를 해제(free)하여 3개의 레지스터를 제2 코드 블럭에 할당하는 동작을 수행할 수 있다. 이 경우, 일 실시 예에 따른 레지스터 관리 장치(300)는 1개의 레지스터를 해제(free)하는 동작을 수행할 수 있다.
도 8은 일 실시 예에 따른 레지스터 관리 장치(300)가 레지스터 할당 명령과 관련하여 데이터를 처리하는 방법을 설명하기 위한 흐름도이다.
단계 S810에서 일 실시 예에 따른 레지스터 관리 장치(300)는 소정의 워프에 N개의 레지스터 할당하라는 명령을 획득한다.
예를 들면, 일 실시 예에 따른 레지스터 관리 장치(300)는 레지스터 관리 장치(300)에서 관리하는 복수개의 워프 중 제2 워프에 대해 7개의 레지스터를 할당하라는 명령을 획득할 수 있다.
단계 S820에서 일 실시 예에 따른 레지스터 관리 장치(300)는 N개의 레지스터가 이용 가능한지 여부를 결정한다.
예를 들면, 일 실시 예에 따른 레지스터 관리 장치(300)는 유휴 레지스터의 개수에 기초하여 N개의 레지스터가 이용 가능한지 여부를 결정할 수 있다.
단계 S830에서 일 실시 예에 따른 레지스터 관리 장치(300)는 N개의 레지스터를 워프에 할당한다.
일 실시 예에 따른 레지스터 관리 장치(300)는 레지스터 관리 장치(300)에서 관리하는 복수개의 워프 중 소정의 워프에 대해 N개의 레지스터를 할당할 수 있다. 예를 들면, 일 실시 예에 따른 레지스터 관리 장치(300)는 레지스터 관리 장치(300)에서 관리하는 복수개의 워프 중 제2 워프에 대해 7개의 레지스터를 할당할 수 있다. 이 경우, 제2 워프에 포함된 복수의 스레드 각각에 7개의 레지스터가 할당될 수 있다. 또는 이 경우, 제2 워프에 포함된 복수의 스레드 중 소정의 스레드에 7개의 레지스터가 할당될 수 있다.
단계 S840에서 일 실시 예에 따른 레지스터 관리 장치(300)는 워프에 대한 레지스터 해시를 갱신한다.
단계 S810에서 결정된 워프에 N개의 레지스터가 할당된 경우, 일 실시 예에 따른 레지스터 관리 장치(300)는 레지스터 할당에 따른 데이터 이용 상황에 대한 정보를 포함하는 레지스터 해시를 갱신할 수 있다. 일 실시 예에 따른 레지스터 관리 장치(300)는 단계 S830에서 수행된 레지스터 할당에 따라 변경된 레지스터 이용 상황을 레지스터 해시에 제공할 수 있다.
단계 S810에서 결정된 워프에 N개의 레지스터가 할당된 경우, 일 실시 예에 따른 레지스터 관리 장치(300)는 레지스터 할당에 따른 데이터 이용 상황에 대한 정보를 포함하는 ROT를 갱신할 수 있다. 일 실시 예에 따른 레지스터 관리 장치(300)는 단계 S830에서 수행된 레지스터 할당에 따라 변경된 레지스터 이용 상황을 ROT에 제공할 수 있다.
단계 S850에서 일 실시 예에 따른 레지스터 관리 장치(300)는 워프를 재시작한다.
일 실시 예에 따른 레지스터 관리 장치(300)는 단계 S830에서 수행된 레지스터 할당에 따라 할당된 레지스터를 이용하여 워프를 재시작할 수 있다.
단계 S860에서 일 실시 예에 따른 레지스터 관리 장치(300)는 요청을 펜딩 중인 큐에 추가한다.
이용 가능한 레지스터의 개수가 부족하므로, 일 실시 예에 따른 레지스터 관리 장치(300)는 워프에 N개의 레지스터를 할당하지는 못하지만, 추후에 할당을 받기 위해서 요청을 펜딩 중인 큐에 추가할 수 있다.
단계 S870에서 일 실시 예에 따른 레지스터 관리 장치(300)는 레지스터의 해제 명령을 기다린다.
일 실시 예에 따른 레지스터 관리 장치(300)는 다른 워프에서 레지스터 해제가 수행되는 등으로 이용 가능한 레지스터가 발생할 때까지 대기할 수 있다.
도 9는 일 실시 예에 따른 레지스터 관리 장치(300)가 레지스터 할당 명령에 따라 데이터를 처리하는 방법을 설명하기 위한 흐름도이다.
단계 S910에서 일 실시 예에 따른 레지스터 관리 장치(300)는 소정의 워프에 N개의 레지스터 해제하라는 명령을 획득한다.
예를 들면, 일 실시 예에 따른 레지스터 관리 장치(300)는 레지스터 관리 장치(300)에서 관리하는 복수개의 워프 중 제3 워프에 대해 2개의 레지스터를 해제하라는 명령을 획득할 수 있다.
단계 S920에서 일 실시 예에 따른 레지스터 관리 장치(300)는 N개의 레지스터를 워프에서 해제한다.
일 실시 예에 따른 레지스터 관리 장치(300)는 N개의 레지스터를 워프에서 해제가 가능한지 여부를 결정할 필요 없이 해제를 실행할 수 있다.
일 실시 예에 따른 레지스터 관리 장치(300)는 레지스터 관리 장치(300)에서 관리하는 복수개의 워프 중 소정의 워프에 대해 N개의 레지스터를 해제할 수 있다. 예를 들면, 일 실시 예에 따른 레지스터 관리 장치(300)는 레지스터 관리 장치(300)에서 관리하는 복수개의 워프 중 제3 워프에 대해 2개의 레지스터를 해제할 수 있다. 이 경우, 제3 워프에 포함된 복수의 스레드 각각에 2개의 레지스터가 해제될 수 있다. 또는 이 경우, 제3 워프에 포함된 복수의 스레드 중 소정의 스레드에 2개의 레지스터가 해제될 수 있다.
단계 S930에서 일 실시 예에 따른 레지스터 관리 장치(300)는 워프에 대한 레지스터 해시를 갱신한다.
단계 S910에서 결정된 워프에 N개의 레지스터가 해제된 경우, 일 실시 예에 따른 레지스터 관리 장치(300)는 레지스터 해제에 따른 데이터 이용 상황에 대한 정보를 포함하는 레지스터 해시를 갱신할 수 있다. 일 실시 예에 따른 레지스터 관리 장치(300)는 단계 S920에서 수행된 레지스터 해제에 따라 변경된 레지스터 이용 상황을 레지스터 해시에 제공할 수 있다.
단계 S910에서 결정된 워프에 N개의 레지스터가 해제된 경우, 일 실시 예에 따른 레지스터 관리 장치(300)는 레지스터 해제에 따른 데이터 이용 상황에 대한 정보를 포함하는 ROT를 갱신할 수 있다. 일 실시 예에 따른 레지스터 관리 장치(300)는 단계 S920에서 수행된 레지스터 해제에 따라 변경된 레지스터 이용 상황을 ROT에 제공할 수 있다.
단계 S940에서 일 실시 예에 따른 레지스터 관리 장치(300)는 할당자(미도시)에 갱신된 내용을 통지한다.
할당자는 레지스터 관리 장치(300)의 내부에 위치할 수도 있고, 레지스터 해지 내부에 위치할 수도 있고, ROT 내부에 위치할 수도 있다.
단계 S950에서 일 실시 예에 따른 레지스터 관리 장치(300)는 워프를 재시작한다.
일 실시 예에 따른 레지스터 관리 장치(300)는 단계 S920에서 수행된 레지스터 해제에 따라 변경된 개수의 레지스터를 이용하여 워프를 재시작할 수 있다.
도 10a는 일 실시 예에 따른 레지스터 관리 장치(300)가 스레드에 포함된 코드 블럭별로 할당된 레지스터의 개수에 따라 데이터를 처리하는 방법을 설명하기 위한 도면이다.
코드 블럭(1020)은 하나 이상의 동작을 수행하기 위한 연속적인 명령(instruction)의 집합 및/또는 연속적인 명령이 저장된 메모리 영역을 의미할 수 있다. 예를 들면, 코드 블럭은 SESE(single entry single exit) 또는 SEME(single entry multiple exit)의 조건을 만족하는 하나 이상의 명령의 집합 또는 SESE 또는 SEME의 조건을 만족하는 하나 이상의 명령이 저장된 메모리 영역일 수 있다.
도 10a를 참조하여 일 실시 예에 따라 6개의 코드 블럭(1021 내지 1026)에 포함된 명령을 실행 하는 방법에 대해 설명한다.
일 실시 예에 따라, 제1 코드 블럭(1021)은 4개(1031)의 레지스터가 필요하고, 제2 코드 블럭(1022)은 7개(1032)의 레지스터가 필요하고, 제3 코드 블럭(1023)은 R개(1033)의 레지스터가 필요하고, 제4 코드 블럭(1024)은 4개(1034)의 레지스터가 필요하고, 제5 코드 블럭(1025)은 8개(1035)의 레지스터가 필요하고, 제6 코드 블럭(1026)은 2개(1036)의 레지스터가 필요하다. 각 코드 블럭별로 필요한 레지스터의 개수를 우측편의 영역(1030)에 나타내었다.
각 코드 블럭이 몇 개의 레지스터를 필요로 하는지를 히스토그램(1040) 및 가로축 수치(1010)로 확인할 수 있다.
일 실시 예에 따라, 제1 코드 블럭(1021)은 4개의 레지스터만 할당되어 있으면 실행될 수 있다. 따라서 레지스터 관리 장치(300)는 제1 코드 블럭(1021)에 4개의 레지스터를 요청하는 명령을 실행할 수 있다. 일 실시 예에 따라 제2 코드 블럭(1022)을 실행하고자 할 때, 제1 코드 블럭(1021)을 실행할 때보다 3개의 레지스터가 더 필요할 수 있다. 따라서 제2 코드 블럭(1022)을 실행하고자 할 때, 레지스터 관리 장치(300)는 3개의 레지스터를 더 할당할 것을 요청하는 명령을 실행할 수 있다. 일 실시 예에 따른 레지스터 관리 장치(300)는 제3 코드 블럭(1023)을 실행할 때, R-7개의 레지스터를 더 할당할 것을 요청하고, 제4 코드 블럭(1024)을 실행할 때, R-4개의 레지스터를 해제할 것을 요청하고, 제5 코드 블럭(1025)을 실행할 때, 4개의 레지스터를 더 할당할 것을 요청하고, 제6 코드 블럭(1026)을 실행할 때, 6개의 레지스터를 해제할 것을 요청할 수 있다. 또한, 일 실시 예에 따른 레지스터 관리 장치(300)는 제6 코드 블럭(1026)의 실행이 끝나면 워프의 실행이 끝나므로 점유하고 있는 모든 레지스터를 해제할 수 있다.
. 일 실시 예에 따른 레지스터 관리 장치(300)는 레지스터의 할당과 해제에 1이상의 최소 단위를 결정할 수 있다. 일 실시 예에 따라, 최소 단위가 1인 경우 레지스터의 불필요한 할당을 줄일 수 있으나 ROT의 크기가 커질 수 있다. 일 실시 예에 따라, 최소 단위가 1보다 큰 경우 레지스터의 불필요한 할당이 발생할 수 있으나 ROT의 크기가 작아질 수 있다. 예를 들어 최소 단위가 4인 경우, 제2 코드 블럭(1022)에는 8개의 레지스터가 할당될 수 있다.
도 10b는 일 실시 예에 따른 레지스터 관리 장치(300)가 스레드에 포함된 코드 블럭별로 할당된 레지스터의 개수에 따라 데이터를 처리하기 위한 명령어를 설명하기 위한 도면이다.
도 10b의 왼쪽 도면은 할당이 가능한 레지스터 수의 최소 단위가 1인 경우에 대한 일 예를 도시한다.
일 실시 예에 따른 레지스터 관리 장치(300)는 제1 코드 블럭(1021)을 실행할 때, 4개의 레지스터를 할당할 것을 요청하고, 제2 코드 블럭(1022)을 실행할 때, 3개의 레지스터를 더 할당할 것을 요청하고, 제3 코드 블럭(1023)을 실행할 때, R-7개의 레지스터를 더 할당할 것을 요청하고, 제4 코드 블럭(1024)을 실행할 때, R-4개의 레지스터를 해제할 것을 요청하고, 제5 코드 블럭(1025)을 실행할 때, 4개의 레지스터를 더 할당할 것을 요청하고, 제6 코드 블럭(1026)을 실행할 때, 6개의 레지스터를 해제할 것을 요청할 수 있다. 또한, 일 실시 예에 따른 레지스터 관리 장치(300)는 제6 코드 블럭(1026)의 실행이 끝나면 워프의 실행이 끝나므로 점유하고 있는 모든 레지스터를 해제할 수 있다.
도 10b의 오른쪽 도면은 할당이 가능한 레지스터 수의 최소 단위가 4인 경우에 대한 일 예를 도시한다.
일 실시 예에 따른 레지스터 관리 장치(300)는 제1 코드 블럭(1021)을 실행할 때, 4개의 레지스터를 할당할 것을 요청하고, 제2 코드 블럭(1022)을 실행할 때, 4개의 레지스터를 더 할당할 것을 요청하고, 제3 코드 블럭(1023)을 실행할 때, R-8개의 레지스터를 더 할당할 것을 요청하고, 제4 코드 블럭(1024)을 실행할 때, R-4개의 레지스터를 해제할 것을 요청하고, 제5 코드 블럭(1025)을 실행할 때, 4개의 레지스터를 더 할당할 것을 요청하고, 제6 코드 블럭(1026)을 실행할 때, 4개의 레지스터를 해제할 것을 요청할 수 있다. 또한, 일 실시 예에 따른 레지스터 관리 장치(300)는 제6 코드 블럭(1026)의 실행이 끝나면 워프의 실행이 끝나므로 점유하고 있는 모든 레지스터를 해제할 수 있다.
도 11a는 일 실시 예에 따른 레지스터 관리 장치(300)가 스레드에 포함된 코드 블럭별로 할당된 레지스터의 개수에 따라 데이터를 처리하는 방법을 설명하기 위한 도면이다.
일 실시 예에 따른 최대 레지스터의 개수는 스레드에 포함되는 복수개의 코드 블럭 중 현재 실행중인 코드 블럭 이후에 실행되는 각 코드 블럭의 실행을 위해 필요한 레지스터 개수들 중 최대 개수를 의미할 수 있다.
일 실시 예에 따른 레지스터 관리 장치(300)는 스레드에 포함되는 복수개의 코드 블럭 중 현재 실행중인 코드 블럭 이후에 실행되는 각 코드 블럭의 실행을 위해 필요한 레지스터 개수들 중 최대 개수인 최대 레지스터 개수를 나타내는 정보를 획득할 수 있다. 최대 레지스터 개수를 나타내는 정보는 도 11a의 우측편의 영역(1110)에 도시된다.
일 실시 예에 따라, 제1 코드 블럭(1021) 이후에 실행되는 코드 블럭들 중 최대 레지스터를 요구하는 코드 블럭은 제3 코드 블럭(1023)이고, 제3 코드 블럭(1023)이 요구하는 레지스터의 개수는 R개 이므로, 제1 코드 블럭(1021)에 대응하는 최대 레지스터의 개수는 R이 되고, 제1 코드 블럭(1021)에 대응하는 최대 레지스터의 개수(1111)는 레지스터 관리 장치(300)에 의해 획득되어 ROT에 저장될 수 있다.
일 실시 예에 따라, 제2 코드 블럭(1022) 이후에 실행되는 코드 블럭들 중 최대 레지스터를 요구하는 코드 블럭은 제3 코드 블럭(1023)이고, 제3 코드 블럭(1023)이 요구하는 레지스터의 개수는 R개 이므로, 제2 코드 블럭(1022)에 대응하는 최대 레지스터의 개수는 R이 되고, 제2 코드 블럭(1022)에 대응하는 최대 레지스터의 개수(1112)는 레지스터 관리 장치(300)에 의해 획득되어 ROT에 저장될 수 있다.
일 실시 예에 따라, 제3 코드 블럭(1023) 이후에 실행되는 코드 블럭들 중 최대 레지스터를 요구하는 코드 블럭은 제5 코드 블럭(1025)이고, 제5 코드 블럭(1025)이 요구하는 레지스터의 개수는 8개 이므로, 제3 코드 블럭(1023)에 대응하는 최대 레지스터의 개수는 8이 되고, 제3 코드 블럭(1023)에 대응하는 최대 레지스터의 개수(1113)는 레지스터 관리 장치(300)에 의해 획득되어 ROT에 저장될 수 있다.
일 실시 예에 따라, 제4 코드 블럭(1024) 이후에 실행되는 코드 블럭들 중 최대 레지스터를 요구하는 코드 블럭은 제5 코드 블럭(1025)이고, 제5 코드 블럭(1025)이 요구하는 레지스터의 개수는 8개 이므로, 제4 코드 블럭(1024)에 대응하는 최대 레지스터의 개수는 8이 되고, 제4 코드 블럭(1024)에 대응하는 최대 레지스터의 개수(1114)는 레지스터 관리 장치(300)에 의해 획득되어 ROT에 저장될 수 있다.
일 실시 예에 따라, 제5 코드 블럭(1025) 이후에 실행되는 코드 블럭들 중 최대 레지스터를 요구하는 코드 블럭은 제6 코드 블럭(1026)이고, 제6 코드 블럭(1026)이 요구하는 레지스터의 개수는 2개 이므로, 제5 코드 블럭(1025)에 대응하는 최대 레지스터의 개수는 2이 되고, 제5 코드 블럭(1025)에 대응하는 최대 레지스터의 개수(1115)는 레지스터 관리 장치(300)에 의해 획득되어 ROT에 저장될 수 있다.
일 실시 예에 따라, 제6 코드 블럭(1026) 이후에 실행되는 코드 블럭은 없다. 따라서 제6 코드 블럭(1026)에 대응하는 최대 레지스터의 개수는 해당 사항이 없고, 제6 코드 블럭(1026)에 대응하는 최대 레지스터의 개수(1116)는 없다는 내용이 레지스터 관리 장치(300)에 의해 획득되어 ROT에 저장될 수 있다.
도 11b는 일 실시 예에 따른 레지스터 관리 장치(300)가 스레드에 포함된 코드 블럭별로 할당된 레지스터의 개수에 따라 데이터를 처리하기 위한 명령어를 설명하기 위한 도면이다.
일 실시 예에 따른 레지스터 관리 장치(300)는 제1 코드 블럭(1021)을 실행할 때, 4개의 레지스터를 할당할 것을 요청하는 외에도 제1 코드 블럭(1021) 이후에 필요한 최대 레지스터 개수가 R이라는 것을 기록하고, 제2 코드 블럭(1022)을 실행할 때, 4개의 레지스터를 더 할당할 것을 요청하는 외에도 제2 코드 블럭(1022) 이후에 필요한 최대 레지스터 개수가 R이라는 것을 기록하고, 제3 코드 블럭(1023)을 실행할 때, R-8개의 레지스터를 더 할당할 것을 요청하는 외에도 제3 코드 블럭(1023) 이후에 필요한 최대 레지스터 개수가 8이라는 것을 기록하고, 제4 코드 블럭(1024)을 실행할 때, R-4개의 레지스터를 해제할 것을 요청하는 외에도 제4 코드 블럭(1024) 이후에 필요한 최대 레지스터 개수가 8이라는 것을 기록하고(일 실시에 따라 최대 레지스터 개수가 종전과 동일한 경우 최대 레지스터 개수의 기록이 생략될 수 있다.), 제5 코드 블럭(1025)을 실행할 때, 4개의 레지스터를 더 할당할 것을 요청하는 외에도 제5 코드 블럭(1022) 이후에 필요한 최대 레지스터 개수가 2라는 것을 기록하고, 제6 코드 블럭(1026)을 실행할 때, 4개의 레지스터를 해제할 것을 요청할 수 있다. 또한, 일 실시 예에 따른 레지스터 관리 장치(300)는 제6 코드 블럭(1026)의 실행이 끝나면 워프의 실행이 끝나므로 점유하고 있는 모든 레지스터를 해제할 수 있다.
일 실시 예에 따른 데드락은 데이터 처리 흐름이 지연되는 현상을 의미할 수 있다. 예를 들면, 데드락은 복수개의 워프가 추가 레지스터를 요청하였으나 유휴 레지스터의 개수가 부족하여 복수개의 워프가 대기중인 상태를 의미할 수 있다.
일 실시 예에 따른 레지스터 관리 장치(300)는 최대 레지스터 개수에 대한 정보를 이용하여 데드락을 회피할 수 있다. 일 실시 예에 따른 레지스터 관리 장치(300)는 앞으로 최대 얼마나 많은 레지스터를 사용할지에 대한 정보를 획득하고, 획득한 최대 레지스터 개수의 정보를 이용하여 레지스터 할당 시점을 조정하여 데드락을 회피할 수 있다. 예를 들면, 일 실시 예에 따른 레지스터 관리 장치(300)는 레지스터 할당 및 해제의 과정에서 현재 남아있는 유휴 레지스터의 개수와 앞으로 해당 워프가 반납할 레지스터의 개수에 대한 정보를 이용하여, 추후 복수개의 워프들 또는 스레드들이 모두 레지스터를 할당받지 못하는 경우가 발생할지 여부에 대해 예측할 수 있다.
따라서 일 실시 예에 따른 레지스터 관리 장치(300)는 최대 레지스터 개수에 대한 정보를 이용하여 데드락을 회피할 수 있다.
한편, 상술한 텍스쳐 처리 방법은 컴퓨터에서 실행될 수 있는 프로그램으로 작성가능하고, 컴퓨터로 읽을 수 있는 기록매체를 이용하여 이와 같은 프로그램을 동작시키는 범용 디지털 컴퓨터에서 구현될 수 있다. 이와 같은 컴퓨터로 읽을 수 있는 기록매체는 마그네틱 저장매체(예를 들면, 롬, 플로피 디스크, 하드 디스크 등), 광학적 판독 매체(예를 들면, 시디롬, 디브이디 등)와 같은 저장매체를 포함한다.
이제까지 실시 예들을 중심으로 살펴보았다. 개시된 실시 예들이 속하는 기술 분야에서 통상의 지식을 가진 자는 개시된 실시 예들이 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 실시 예들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 실시 예 발명의 범위는 전술한 실시 예들의 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 발명의 범위에 포함된 것으로 해석되어야 할 것이다
Claims (20)
- 데이터 처리 방법에 있어서,
하나 이상의 실행 코드를 포함하는 제1 코드 블럭을 상기 제1 코드 블럭에 할당된 제1 개수의 레지스터를 이용하여 실행하는 단계;
상기 제1 코드 블럭이 실행된 이후에 실행되는 제2 코드 블럭을 실행하기 위해 필요한 레지스터의 개수인 제2 개수를 획득하고, 상기 제1 개수와 상기 제2 개수의 차이 값에 기초하여, 상기 제1 코드 블럭을 실행하는데 이용된 레지스터를 상기 제2 코드 블럭에 할당하는 단계; 및
상기 제2 코드 블럭에 할당된, 상기 제1 코드 블럭을 실행하는데 이용된 적어도 하나의 레지스터를 이용하여 상기 제2 코드 블럭을 실행하는 단계를 포함하고,
상기 제1 코드 블럭을 실행하는데 이용된 레지스터를 상기 제2 코드 블럭에 할당하는 단계는,
상기 제1 코드 블럭 및 상기 제2 코드 블럭 각각에 대응되는 레지스터의 개수에 대한 정보를 포함하는 정보인 ROT(Register Occupancy Table)를 갱신하는 단계; 및
상기 제2 코드 블럭에 대응되는 레지스터의 개수에 대한 정보를 포함하는 정보인 레지스터 해시(Register Hash)를 갱신하는 단계를 포함하고,
상기 제1 코드 블럭, 상기 제2 코드 블럭 및 적어도 하나의 제3 코드 블럭 각각은 독립적으로 처리될 수 있는 데이터 처리 단위인 워프(warp)에 의해 관리되는 스레드들 중 하나의 스레드에 포함되며,
상기 ROT는 상기 제1 코드 블럭 이후에 실행될 상기 제2 코드 블럭 및 상기 적어도 하나의 제3 코드 블럭의 개별적인 코드 블럭들을 실행하기 위한 레지스터들의 개수들 중 가장 많은 개수인 최대 레지스터 개수에 관한 정보를 포함하고, 여기서 상기 제2 코드 블럭 및 상기 적어도 하나의 제3 코드 블럭 중 적어도 하나의 코드 블럭에는 상기 최대 레지스터 개수의 레지스터들이 할당되고, 상기 제2 코드 블럭 및 상기 적어도 하나의 제3 코드 블럭 중 적어도 하나의 다른 코드 블럭에는 상기 최대 레지스터 개수보다 적은 레지스터들이 할당되며,
상기 방법은 상기 최대 레지스터 개수에 관한 정보를 이용하여 레지스터 할당 시점을 조정하는 단계를 더 포함하는 방법. - 삭제
- 삭제
- 제 1 항에 있어서,
상기 워프에 의해 관리되는 각 스레드는 코드 블럭들을 포함하고,
상기 ROT는
상기 스레드에 포함되는 코드 블럭들 각각에 대응되는 레지스터들의 개수에 대한 정보를 포함하는 방법. - 제 1 항에 있어서,
상기 제1 개수가 상기 제2 개수보다 작은 경우, 상기 제1 코드 블럭을 실행하는데 이용된 모든 레지스터들이 상기 제2 코드 블럭에 할당되고,
상기 제1 개수가 상기 제2 개수보다 큰 경우, 상기 제1 코드 블럭을 실행하는데 이용된 레지스터들 중 상기 제2 개수와 동일한 개수의 일부가 상기 제2 코드 블럭에 할당되며, 상기 제1 코드 블럭을 실행하는데 이용된 나머지 레지스터들을 해제(free)하기 위한 해제 동작이 수행되는, 방법. - 제 1 항에 있어서,
상기 제1 코드 블럭 및 상기 제2 코드 블럭은 각각 하나 이상의 동작을 수행하기 위한 연속적인 명령어의 집합을 포함하고,
상기 연속적인 명령어는 단일 입력 단일 출력(Single-Entry Single-Exit) 조건을 만족하는 방법. - 제 1 항에 있어서,
상기 제2 코드 블럭에 대응되는 개수는 둘 이상의 레지스터들의 기설정된 최소 레지스터 단위에 기초하여 결정되는 방법. - 삭제
- 데이터 처리 장치에 있어서,
하나 이상의 실행 코드를 포함하는 복수개의 코드 블럭을 수신하는 수신부; 및
상기 수신부에서 수신된 제1 코드 블럭을 상기 제1 코드 블럭에 할당된 제1 개수의 레지스터를 이용하여 실행하고,
상기 제1 코드 블럭이 실행된 이후에 실행되고 상기 수신부에서 수신되는 제2 코드 블럭을 실행하기 위해 필요한 레지스터의 개수인 제2 개수를 획득하고, 상기 제1 개수와 상기 제2 개수의 차이 값에 기초하여, 상기 제1 코드 블럭을 실행하는데 이용된 레지스터를 상기 제2 코드 블럭에 할당하고,
상기 제2 코드 블럭에 할당된, 상기 제1 코드 블럭을 실행하는데 이용된 적어도 하나의 레지스터를 이용하여 상기 제2 코드 블럭을 실행하는 제어부를 포함하고,
상기 제어부는,
상기 제1 코드 블럭 및 상기 제2 코드 블럭 각각에 대응되는 레지스터의 개수에 대한 정보를 포함하는 정보인 ROT(Register Occupancy Table)를 갱신하고,
상기 제2 코드 블럭에 대응되는 레지스터의 개수에 대한 정보를 포함하는 정보인 레지스터 해시(Register Hash)를 갱신하며,
상기 제1 코드 블럭, 상기 제2 코드 블럭 및 적어도 하나의 제3 코드 블럭 각각은 독립적으로 처리될 수 있는 데이터 처리 단위인 워프(warp)에 의해 관리되는 스레드들 중 하나의 스레드에 포함되며,
상기 ROT는 상기 제1 코드 블럭 이후에 실행될 상기 제2 코드 블럭 및 상기 적어도 하나의 제3 코드 블럭의 개별적인 코드 블럭들을 실행하기 위한 레지스터들의 개수들 중 가장 많은 개수인 최대 레지스터 개수에 관한 정보를 포함하고, 여기서 상기 제2 코드 블럭 및 상기 적어도 하나의 제3 코드 블럭 중 적어도 하나의 코드 블럭에는 상기 최대 레지스터 개수의 레지스터들이 할당되고, 상기 제2 코드 블럭 및 상기 적어도 하나의 제3 코드 블럭 중 적어도 하나의 다른 코드 블럭에는 상기 최대 레지스터 개수보다 적은 레지스터들이 할당되며,
상기 제어부는 상기 최대 레지스터 개수에 관한 정보를 이용하여 레지스터 할당 시점을 조정하는 장치. - 제 1 항 및 제 4 항 내지 제 7 항 중 어느 한 항의 방법을 구현하기 위한 프로그램이 기록된 컴퓨터로 판독 가능한 비일시적 기록 매체.
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020150160453A KR102545176B1 (ko) | 2015-11-16 | 2015-11-16 | 레지스터 관리 방법 및 장치 |
US15/151,195 US10705844B2 (en) | 2015-11-16 | 2016-05-10 | Method and device for register management |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020150160453A KR102545176B1 (ko) | 2015-11-16 | 2015-11-16 | 레지스터 관리 방법 및 장치 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20170056950A KR20170056950A (ko) | 2017-05-24 |
KR102545176B1 true KR102545176B1 (ko) | 2023-06-19 |
Family
ID=58691102
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020150160453A KR102545176B1 (ko) | 2015-11-16 | 2015-11-16 | 레지스터 관리 방법 및 장치 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10705844B2 (ko) |
KR (1) | KR102545176B1 (ko) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10535114B2 (en) * | 2015-08-18 | 2020-01-14 | Nvidia Corporation | Controlling multi-pass rendering sequences in a cache tiling architecture |
US10460502B2 (en) * | 2016-12-14 | 2019-10-29 | Samsung Electronics Co., Ltd. | Method and apparatus for rendering object using mipmap including plurality of textures |
CN108364251B (zh) * | 2017-01-26 | 2021-06-25 | 超威半导体公司 | 具有通用寄存器资源管理的矢量处理器 |
US11204765B1 (en) * | 2020-08-26 | 2021-12-21 | Qualcomm Incorporated | Deferred GPR allocation for texture/load instruction block |
US12033238B2 (en) * | 2020-09-24 | 2024-07-09 | Advanced Micro Devices, Inc. | Register compaction with early release |
CN112214243B (zh) * | 2020-10-21 | 2022-05-27 | 上海壁仞智能科技有限公司 | 配置向量运算***中的协作线程束的装置和方法 |
US20220309606A1 (en) * | 2021-03-26 | 2022-09-29 | Advanced Micro Devices, Inc. | Dynamically reconfigurable register file |
CN117573205A (zh) * | 2023-11-17 | 2024-02-20 | 摩尔线程智能科技(北京)有限责任公司 | 基于simt的寄存器分配方法、装置、设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090240895A1 (en) * | 2008-03-24 | 2009-09-24 | Lars Nyland | Systems and methods for coalescing memory accesses of parallel threads |
US20140122842A1 (en) * | 2012-10-31 | 2014-05-01 | International Business Machines Corporation | Efficient usage of a register file mapper mapping structure |
US20150113251A1 (en) * | 2013-10-18 | 2015-04-23 | Marvell World Trade Ltd. | Systems and Methods for Register Allocation |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4435753A (en) * | 1980-10-31 | 1984-03-06 | International Business Machines Corporation | Register allocation system using recursive queuing during source code compilation |
US6546478B1 (en) * | 1999-10-14 | 2003-04-08 | Advanced Micro Devices, Inc. | Line predictor entry with location pointers and control information for corresponding instructions in a cache line |
JP2004151915A (ja) | 2002-10-30 | 2004-05-27 | Renesas Technology Corp | データ処理装置 |
US7454747B2 (en) * | 2003-02-07 | 2008-11-18 | Sun Microsystems, Inc. | Determining maximum acceptable scheduling load latency using hierarchical search |
KR100662846B1 (ko) | 2005-11-09 | 2007-01-02 | 삼성전자주식회사 | 데이터 처리 시스템 및 데이터 처리방법 |
US8180997B2 (en) * | 2007-07-05 | 2012-05-15 | Board Of Regents, University Of Texas System | Dynamically composing processor cores to form logical processors |
US20100199270A1 (en) * | 2009-01-30 | 2010-08-05 | Ivan Baev | System, method, and computer-program product for scalable region-based register allocation in compilers |
US20110161616A1 (en) * | 2009-12-29 | 2011-06-30 | Nvidia Corporation | On demand register allocation and deallocation for a multithreaded processor |
US8933954B2 (en) | 2011-03-23 | 2015-01-13 | Qualcomm Incorporated | Register allocation for graphics processing |
CN103268223B (zh) * | 2013-04-26 | 2016-06-29 | 深圳中微电科技有限公司 | 在编译过程中改善乘加类指令执行性能的方法 |
-
2015
- 2015-11-16 KR KR1020150160453A patent/KR102545176B1/ko active IP Right Grant
-
2016
- 2016-05-10 US US15/151,195 patent/US10705844B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090240895A1 (en) * | 2008-03-24 | 2009-09-24 | Lars Nyland | Systems and methods for coalescing memory accesses of parallel threads |
US20140122842A1 (en) * | 2012-10-31 | 2014-05-01 | International Business Machines Corporation | Efficient usage of a register file mapper mapping structure |
US20150113251A1 (en) * | 2013-10-18 | 2015-04-23 | Marvell World Trade Ltd. | Systems and Methods for Register Allocation |
Also Published As
Publication number | Publication date |
---|---|
US10705844B2 (en) | 2020-07-07 |
KR20170056950A (ko) | 2017-05-24 |
US20170139707A1 (en) | 2017-05-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102545176B1 (ko) | 레지스터 관리 방법 및 장치 | |
US11748843B2 (en) | Apparatus and method for non-uniform frame buffer rasterization | |
US10032242B2 (en) | Managing deferred contexts in a cache tiling architecture | |
KR102674513B1 (ko) | 그래픽 처리 | |
US9734548B2 (en) | Caching of adaptively sized cache tiles in a unified L2 cache with surface compression | |
US10331448B2 (en) | Graphics processing apparatus and method of processing texture in graphics pipeline | |
TW201516953A (zh) | 圖形處理系統 | |
KR102646906B1 (ko) | 타일 기반 렌더링 방법 및 장치 | |
KR20130123645A (ko) | 그래픽 처리 장치를 위한 동적 로드 밸런싱 장치 및 방법 | |
KR20150039495A (ko) | 이전 타일의 이미지를 이용하여 현재 프레임을 렌더링하는 방법 및 장치 | |
US20180144538A1 (en) | Method and apparatus for performing tile-based rendering | |
TW201432609A (zh) | 已分配的拼貼快取 | |
US10083514B2 (en) | Stencil-then-cover path rendering with shared edges | |
US9773341B2 (en) | Rendering cover geometry without internal edges | |
KR102264163B1 (ko) | 텍스쳐를 처리하는 방법 및 장치 | |
US9558573B2 (en) | Optimizing triangle topology for path rendering | |
KR20220100877A (ko) | 대역폭 테셀레이션 팩터 감소 | |
US10262391B2 (en) | Graphics processing devices and graphics processing methods | |
US9881392B2 (en) | Mipmap generation method and apparatus | |
KR102147357B1 (ko) | 커맨드들을 관리하는 장치 및 방법 | |
US20160267701A1 (en) | Apparatus and method of rendering frame by adjusting processing sequence of draw commands |
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 |