KR100862124B1 - 하위 포트 카운트 메모리를 이용하여 멀티포트 메모리를시뮬레이션하는 시스템 및 방법 - Google Patents
하위 포트 카운트 메모리를 이용하여 멀티포트 메모리를시뮬레이션하는 시스템 및 방법 Download PDFInfo
- Publication number
- KR100862124B1 KR100862124B1 KR1020077003498A KR20077003498A KR100862124B1 KR 100862124 B1 KR100862124 B1 KR 100862124B1 KR 1020077003498 A KR1020077003498 A KR 1020077003498A KR 20077003498 A KR20077003498 A KR 20077003498A KR 100862124 B1 KR100862124 B1 KR 100862124B1
- Authority
- KR
- South Korea
- Prior art keywords
- thread
- operand
- unit
- bank
- register
- Prior art date
Links
- 230000015654 memory Effects 0.000 title claims abstract description 90
- 238000000034 method Methods 0.000 claims abstract description 47
- 230000008569 process Effects 0.000 abstract description 18
- 238000012545 processing Methods 0.000 description 52
- 238000010586 diagram Methods 0.000 description 5
- 239000012634 fragment Substances 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000012546 transfer Methods 0.000 description 3
- 238000002156 mixing Methods 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
-
- 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
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
-
- 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
-
- 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/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30167—Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
-
- 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/3824—Operand accessing
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
-
- 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/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3888—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
- Memory System (AREA)
Abstract
하위 포트 카운트 메모리를 뱅크로서 이용하여 멀티포트 메모리를 시뮬레이션하기 위한 장치 및 방법에 관한 것이다. 스레드에 관련된 데이터를 저장하기 위하여 메모리의 한 영역이 할당된다. 스레드에 할당되는 메모리 영역은 단일 뱅크 또는 멀티 뱅크에 저장될 수 있다. 각 뱅크에 연결된 수집기 유닛은 프로그램 명령어를 처리하는 데 필요한, 하나 이상의 뱅크로부터 출력되는 소스 피연산자를 모은다. 프로그램 명령어를 처리하는 데에 필요한 모든 소스 피연산자가 모아졌으면 수집기 유닛은 이 소스 피연산자를 실행 유닛에 출력한다.
하위 포트 카운트 메모리, 뱅크, 스레드, 피연산자
Description
본 발명의 하나 이상의 양태는 일반적으로 데이터 처리에 관한 것으로, 보다 상세히는 프로그램가능 그래픽 프로세서 또는 범용 프로세서에서 단일 포트 메모리를 이용하여 멀티포트 메모리를 시뮬레이션하는 것에 관한 것이다.
현재 데이터 처리는 2개 이상의 피연산자를 가지는 명령어를 비롯해 프로그램 명령어를 실행시키도록 개발된 시스템 및 방법을 포함한다. 이 피연산자들은 프로그램 실행 시에 효과적인 액세스를 위하여 프로세서 내의 레지스터에 저장된다. 곱셈 및 곱셈-누산(multiply-accumulate) 등의 일부 프로그램 명령어는 2개 이상의 피연산자를 지정한다. 통상적으로, 레지스터 파일은 멀티포트 메모리를 포함하여 하나의 클럭 사이클에서 각각이 하나의 피연산자를 저장하는 2개 이상의 위치가 판독될 수 있도록 한다. 그러므로, 적어도 하나의 프로그램 명령어에 필요한 피연산자 모두는 하나의 클럭 사이클에서 획득되고 실행 유닛에 출력될 수 있다.
단일 포트 메모리와 비교해 볼 때, 멀티포트 메모리는 보다 많은 다이 면적(die area)을 요구하고 보다 많은 전력을 이용한다. 그러나, 멀티포트 메모리와는 다르게, 각 클럭 사이클 마다 오직 하나의 위치가 판독될 수 있다. 그러므로, 하나의 프로그램 명령어를 실행하는 데에 필요한 피연산자들을 획득하는 데에는 2개 이상의 클럭 사이클이 필요하며, 이는 멀티포트 메모리에 비해 성능을 저하시킨다.
따라서, 보다 작은 다이 면적 및 전력을 이용하는 프로세서 내의 멀티포트 레지스터 파일의 성능 이점을 제공하는 것이 바람직할 것이다.
본 발명은 하위 포트 카운트 메모리를 뱅크로서 이용하여 멀티포트 메모리를 시뮬레이션하기 위한 신규의 시스템 및 방법을 포함한다. 스레드(thread)에 관련된 데이터를 저장하기 위하여 메모리의 한 영역이 할당된다. 스레드용으로 할당되는 메모리 영역은 단일 뱅크 또는 다중 뱅크에 저장될 수 있다. 각 뱅크에 연결된 수집기 유닛은 명령어를 처리하는 데에 필요한, 하나 이상의 뱅크로부터 출력되는 소스 피연산자를 모은다. 명령어를 처리하는 데에 필요한 모든 소스 피연산자가 모아졌으면 수집기 유닛은 실행 유닛에 이 소스 피연산자들을 출력한다. 하위 포트 카운트 메모리를 이용하여 멀티포트 메모리를 시뮬레이션하는 데에는 필적할만한 용량을 가지는 멀티포트 메모리보다 더 작은 다이 면적이 필요하게 된다. 멀티포트 메모리를 시뮬레이션하도록 구성된 하위 포트 카운트 메모리는 또한 필적할만한 용량을 가지는 멀티포트 메모리에 비해 낮은 전력 요건을 가진다.
본 발명의 다양한 실시예는 프로세서 프로그램 명령어용 피연산자를 저장하기 위한 레지스터 파일 유닛을 포함한다. 레지스터 파일 유닛은 제1 스레드용 피연산자를 저장하도록 구성된 제1 메모리 뱅크, 제2 스레드용 피연산자를 저장하도록 구성된 제2 메모리 뱅크, 제1 수집기 유닛, 및 제2 수집기 유닛을 포함한다. 제1 수집기 유닛은 제1 메모리 뱅크로부터 제1 스레드용 피연산자를 수신하도록 구성되어 제1 스레드의 프로그램 명령어 및 제1 스레드의 프로그램 명령어에 의해 지정된 임의의 피연산자를 출력한다. 제2 수집기 유닛은 제2 메모리 뱅크로부터 제2 스레드용 피연산자를 수신하도록 구성되어 제2 스레드의 프로그램 명령어 및 제2 스레드의 프로그램 명령어에 의해 지정된 임의의 피연산자를 출력한다.
본 발명의 다양한 방법 실시예는 스레드에 할당되는 레지스터 개수를 결정하는 단계 및 멀티포트 메모리를 시뮬레이션하도록 구성된 메모리 뱅크 세트들 중 적어도 하나의 메모리 뱅크 내의 위치에 이 스레드용인 개수의 레지스터를 할당하는 단계를 포함한다.
본 발명의 다양한 실시예는 프로그램 명령어용 피연산자를 저장하기 위한 시스템을 포함한다. 이 시스템은 할당 유형에 기초하여 스레드가 사용하는 피연산자를 저장하기 위한 레지스터를 할당하기 위한 수단, 레지스터에 피연산자를 저장하기 위한 수단, 및 이 스레드 내의 프로그래 명령어에 의해 지정된 임의의 피연산자를 모으기 위한 수단을 포함한다.
도 1은 호스트 컴퓨터 및 그래픽 서브시스템을 포함하는 본 발명의 하나 이상의 양태에 따른 각각의 컴퓨터 시스템의 예시적인 실시예의 블록도.
도 2는 본 발명의 하나 이상의 양태에 따른 도 1의 프로그램가능한 그래픽 처리 파이프라인의 예시적인 실시예의 블록도.
도 3은 본 발명의 하나 이상의 양태에 따른 도 2의 레지스터 파일 유닛의 예시적인 실시예의 블록도.
도 4a는 본 발명의 하나 이상의 양태에 따른 스레드를 처리하기 위한 레지스터의 할당의 예시적인 실시예를 도시하는 도면.
도 4b, 4c, 및 4d는 본 발명의 하나 이상의 양태에 따른 스레드를 처리하기 위한 레지스터의 할당의 다른 예시적인 실시예들 도시하는 도면.
도 4e는 본 발명의 하나 이상의 양태에 따른 스레드에 대한 레지스터의 할당의 예시적인 실시예를 도시하는 도면.
도 4f는 본 발명의 하나 이상의 양태에 따른 스레드에 대한 레지스터의 할당의 다른 예시적인 실시예를 도시하는 도면.
도 5는 본 발명의 하나 이상의 양태에 따른 도 2의 레지스터 파일 유닛의 다른 예시적인 실시예의 블록도.
도 6a는 본 발명의 하나 이상의 양태에 따른 스레드를 처리하기 위한 레지스터를 할당하는 방법의 실시예를 도시하는 도면.
도 6b는 본 발명의 하나 이상의 양태에 따른 스레드를 처리하기 위한 레지스터 할당의 다른 방법의 실시예를 도시하는 도면.
도 6c는 본 발명의 하나 이상의 양태에 따른 스레드를 처리하기 위한 레지스터 할당의 다른 방법의 실시예를 도시하는 도면.
첨부된 도면(들)은 본 발명의 하나 이상의 양태에 따른 예시적인 실시예(들) 를 도시한다. 그러나, 첨부된 도면(들)은 도시된 실시예(들)로 본 발명을 한정하는 것이 아니라 오직 설명과 이해를 위하여 제시된 것이다.
이하의 설명에서, 본 발명의 보다 철저한 이해를 제공하기 위하여 다양한 특정 상세한 사항이 설명될 것이다. 그러나, 본 발명은 하나 이상의 이들 특정 상세한 사항 없이도 실행될 수 있음이 당업자에게 명백할 것이다. 다시 말하면, 본 발명을 모호하게 하는 것을 피하기 위하여 잘-공지된 특징들은 기술되지 않았다.
도 1은 전반적으로 참조부호(100)로 지정되며 호스트 컴퓨터(110) 및 그래픽 서브시스템(170)을 포함하는 컴퓨팅 시스템을 도시한 것이다. 컴퓨팅 시스템(100)은 데스크탑 컴퓨터, 서버, 랩탑 컴퓨터, 손바닥 크기의(palm-sized) 컴퓨터, 태블릿 컴퓨터, 게임 콘솔, PDA나 셀룰러폰 등의 휴대용 무선 단말, 컴퓨터 기반 시뮬레이터 등일 수 있다. 호스트 컴퓨터(110)는 호스트 메모리(112)와 직접적으로 인터페이스하는 시스템 메모리 컨트롤러를 포함할 수 있거나 시스템 인터페이스(115)를 통해 호스트 메모리(112)와 통신할 수 있는 호스트 프로세서(114)를 포함한다. 시스템 인터페이스(115)는 호스트 메모리(112)와 직접적으로 인터페이스하는 시스템 메모리 컨트롤러를 포함하는 브리지(bridge) 장치 또는 I/O(입/출력) 인터페이스일 수 있다. 본 기술 분야에 공지된 시스템 인터페이스(115)의 일례는 Intel® 노스브리지(Northbridge)를 포함한다.
호스트 컴퓨터(110)는 시스템 인터페이스(115)와, 그래픽 프로세서(105) 내의 그래픽 인터페이스(117)를 통해 그래픽 서브시스템(170)과 통신한다. 그래픽 인터페이스(117)에서 수신된 데이터는 프론트 엔드(130)로 전달되거나 메모리 컨트 롤러(120)를 통해 로컬 메모리(140)에 기록될 수 있다. 그래픽 프로세서(105)는 그래픽 메모리를 이용하여 그래픽 데이터 및 프로그램 명령어를 저장하는데, 여기서 그래픽 데이터는 그래픽 프로세서 내의 컴포넌트로 입력 또는 이 컴포넌트로부터 출력되는 임의의 데이터이다. 그래픽 메모리는 일부 호스트 메모리(112), 로컬 메모리(140), 그래픽 프로세서(105) 내의 컴포넌트에 연결된 레지스터 파일, 등을 포함할 수 있다.
그래픽 프로세서(105)는, 다른 컴포넌트들 중에서도 특히, 그래픽 인터페이스(117)를 통해 호스트 컴퓨터(110)로부터 명령을 수신하는 프론트 엔드(130)를 포함한다. 프론트 엔드(130)는 이 명령을 해석하고 포맷하며 포맷된 명령 및 데이터를 IDX(인덱스 프로세서)(135)에 출력한다. 포맷된 명령의 일부가 프로그램가능 그래픽 처리 파이프라인(150)에 의해 이용되어 메모리에 저장된 그래픽 데이터 또는 프로그램 명령어의 위치를 제공함으로써 데이터 처리를 시작한다. IDX(135), 프로그램가능 그래픽 처리 파이프라인(150) 및 래스터 연산 유닛(160)은 각각 메모리 컨트롤러(120)로의 인터페이스를 포함하며, 메모리 컨트롤러를 통해 프로그램 명령어 및 데이터가 메모리, 예를 들면, 로컬 메모리(140)와 호스트 메모리(112)의 임의 조합으로부터 판독될 수 있다. 호스트 메모리(112)의 한 영역이 프로그램 명령어 및 데이터를 저장하는 데에 이용되면, 이 호스트 메모리(112) 영역은 캐슁되지 않아서 그래픽 프로세서(105)에 의한 액세스의 성능을 향상시킬 수 있다.
IDX(135)는 선택적으로 메모리로부터 처리된 데이터, 예를 들면, 래스터 연산 유닛(160)에 의해 기록된 데이터를 판독하고 이 데이터, 처리된 데이터 및 포맷 된 명령을 프로그램가능 그래픽 처리 파이프라인(150)에 출력한다. 프로그램가능 그래픽 처리 파이프라인(150) 및 래스터 연산 유닛(160)은 각각 다양한 특수 기능을 수행하는 하나 이상의 프로그램가능 처리 유닛을 포함한다. 이들 기능 중 일부는 테이블 탐색, 스칼라와 벡터 합, 곱, 나누기, 좌표계 매핑, 벡터 정규의 계산, 모자이크 세공(tessellation), 미분계수 계산, 보간법, 등이다. 프로그램가능 그래픽 처리 파이프라인(150) 및 래스터 연산 유닛(160)은 각각 선택적으로 데이터 처리 동작이 이들 유닛을 통하는 복수의 경로 또는 프로그램가능 그래픽 처리 파이프라인(150) 내의 복수의 경로에서 수행되도록 구성된다. 래스터 연산 유닛(160)은 데이터가 메모리에 기록될 수 있게 하는 메모리 컨트롤러(120)로의 기록 인터페이스를 포함한다.
통상적인 구현에서 프로그램가능 그래픽 처리 파이프라인(150)은 기하학적 계산, 래스터변환(rasterization), 및 단편(fragment) 계산을 수행하다. 그러므로, 프로그램가능 그래픽 처리 파이프라인(150)은 면, 원형(primitive), 꼭지점(vertex), 단편, 픽셀, 샘플 또는 임의의 기타 데이터에 대하여 동작하도록 프로그래밍된다. 간단히 하기 위하여, 본 명세서 설명의 나머지 부분에서는 면, 원형(primitive), 꼭지점, 픽셀, 단편 등의 그래픽 데이터를 칭하는 데에 용어 "샘플을" 사용할 것이다.
프로그램가능 그래픽 처리 파이프라인(150)에 의해 출력된 샘플들은 래스터 연산 유닛(160)에 전달되며, 이 유닛은 선택적으로 원근 평면 절단(clipping), 및 스텐실, z 테스트 등과 같은 래스터 연산을 수행하고, 로컬 메모리(140)에 그 결과 또는 프로그램가능 그래픽 처리 파이프라인(150)이 출력한 샘플을 저장한다. 그래픽 서브시스템(170)에 의해 수신된 데이터가 그래픽 프로세서(105)에 의해 완전히 처리되었다면, 출력 컨트롤러(180)를 이용하여 그래픽 서브시스템(170)의 출력(185)이 제공된다. 출력 컨트롤러(180)는 선택적으로 표시 장치, 네트워크, 전자 제어 시스템, 컴퓨팅 시스템(100) 등의 다른 컴퓨팅 시스템, 다른 그래픽 서브시스템(170), 등에 데이터를 전달하도록 구성된다. 대안으로, 데이터는 필름 기록 장치에 출력되거나 주변 장치, 예를 들면, 디스크 드라이브, 테이프, 컴팩트 디스크, 등에 기록된다.
도 2는 도 1의 프로그램가능 그래픽 처리 파이프라인(150)을 도시한 것이다. 적어도 하나의 샘플 세트가 IDC(135)에 의해 출력되고 프로그램가능 그래픽 처리 파이프라인(150)에 의해 수신되며 적어도 하나의 샘플 세트가 그래픽 프로그램 명령어를 포함하는 적어도 하나의 프로그램에 따라 처리된다. 프로그램은 하나 이상의 샘플 세트를 처리할 수 있다. 반대로, 하나의 샘플 세트가 일련의 하나 이상의 프로그램에 의해 처리될 수 있다. 프로그램가능 그래픽 처리 파이프라인(150)의 몇몇의 실시예는 단편 데이터를 생성하기 위하여 원형(primitive) 데이터에 대한 래스터 변환과 같은 특정 기능을 수행하도록 구성된 추가적인 유닛을 포함한다.
샘플, 예를 들면, 면, 원형(primitive), 처리된 데이터 등은 프로그램가능 그래픽 처리 파이프라인(150)에 의해 IDX(135)로부터 수신된다. 면은 스트리밍 멀티프로세서(200)에 의하여 원형을 생성하도록 처리될 수 있고, 원형은 스트리밍 멀티프로세서(200)에 의하여 꼭지점을 생성하도록 처리될 수 있고, 꼭지점은 스트리 밍 멀티프로세서(200)에 의하여 단편을 생성하도록 처리될 수 있다. 본 발명의 대안적인 실시예에서는 호스트 프로세서(114) 등의 범용 프로세서 내에 하나 이상의 스트리밍 멀티프로세서(200)가 포함된다. 프로그램가능 그래픽 처리 파이프라인(150)은 도 2에 도시된 바와 같이 하나 이상의 스트리밍 멀티프로세서(200)를 포함한다. 각 스트리밍 멀티프로세서(200)는 적어도 실행 유닛(들)(270)을 포함하는데, 이는 이하 더 설명될 것이다. 임의의 하나의 스트리밍 멀티프로세서(200)에 의하여 샘플들이 처리될 수 있다. 스트리밍 멀티프로세서(200)의 몇몇의 실시예에서는, 메모리 컨트롤러(120)를 통해 로컬 메모리(140) 또는 호스트 메모리(112)로부터 텍스처 맵과 같은 그래픽 데이터를 판독하는 데에 판독 인터페이스(도 2에는 도시 생략)가 이용된다. 스트리밍 멀티프로세서(200) 내의 처리 스레드가 이용가능한 경우 스트리밍 멀티프로세서(200)에 의해 샘플이 수신되는데, 이에 대해서는 이하에서 더 기술할 것이다.
스트리밍 멀티프로세서(200) 내의 스레드 제어 유닛(220)은 샘플들 및 이 샘플들을 처리하기 위해 실행될 일련의 프로그램 명령어에 대한 포인터를 수신한다. 스레드 제어 유닛(320)은 처리될 각 샘플에 하나의 스레드를 할당한다. 스레드는 프로그램 내의 처음 명령어 등의 프로그램 명령어에 대한 포인터(프로그램 카운터), 스레드 상태 정보, 및 샘플 처리 시에 이용되고 생성되는 피연산자를 저장하기 위한 저장 자원을 포함한다. 스레드를 처리하는 데 필요한 자원, 예를 들면, 피연산자 또는 스레드 상태 정보를 저장하기 위한 저장 자원이 이용가능하지 않을 경우, 스트리밍 멀티프로세서(200)는 추가적인 처리 샘플들을 수락하지 않을 것이다. 스레드와 관련된 프로그램 명령어가 실행을 완료하면, 스레드의 실행 중에 수신되고 생성되는 피연산자를 저장하는 데에 할당된 저장 자원, 예를 들면, 레지스터는 다른 스레드로의 할당에 이용가능하게 된다. 즉, 저장 자원이 할당해지되고 스레드는 스레드 제어 유닛(220)에 이용가능하다고 플래그(flag)된다.
스레드 제어 유닛(220)은 레지스터 어드레스 유닛(240)에 피연산자를 저장하는 데에 필요한 저장 자원의 양을 기술하는 할당 정보를 출력한다. 스레드 제어 유닛(220)은 명령어 유닛(230)에 포인터 및 샘플을 출력한다. 각 클럭 사이클 마다 스레드 제어 유닛(220)으로부터 명령어 유닛(230)에 출력될 수 있는 포인터와 샘플의 개수는 본 발명의 실시예들 마다 서로 다를 수 있다.
명령어 유닛(230)은 전용 판독 인터페이스를 이용하여 메모리 컨트롤러(120)를 통해 로컬 메모리(140) 또는 호스트 메모리(112)로부터 프로그램 명령어를 판독한다. 본 발명의 대안적인 실시예에서는, 하나의 명령어 유닛(230)이 스트리밍 멀티프로세서(200)들 간에 공유된다. 본 발명의 몇몇의 실시예에서, 명령어 유닛(230)은 명령어 캐쉬를 포함한다.
명령어 유닛(230)은 점프, 호출/복귀, 또는 분기 명령어 등과 같이, 데이터를 처리하지 않는 명령어를 실행한다. 명령어 유닛(230)은 활성화된, 즉, 샘플에 할당된 임의의 스레드를 처리하기 위하여 프로그램 명령어를 인터리빙(interleaving)하면서 프로그램 명령어의 실행을 스케줄링한다. 본 발명의 몇몇의 실시예에서, 명령어 유닛(230)은 스레드, 예를 들면, 레지스터가 위치된 뱅크에 할당된 레지스터 파일 유닛(250) 내의 레지스터의 특정 위치를 기술하는 추가적인 정보 없이 프로그램 명령어의 실행을 스케줄링한다.
명령어 유닛(230)은 스레드용 프로그램 명령어를 스케줄링할 때 일정하거나프로그램가능한 우선순위를 이용하도록 구성될 수 있다. 예를 들면, 꼭지점 프로그램 명령어를 처리하기 위해 할당된 스레드는 단편 프로그램 명령어를 처리하기 위해 할당된 스레드보다 항상 더 높은 우선순위를 획득할 수 있다. 다른 예에서, 피연산자를 저장하는 데 다수의 레지스터가 필요한 스레드는 피연산자를 저장하는 데 레지스터가 더 적게 필요한 스레드보다 더 높은 우선순위를 가질 수 있다. 본 발명의 몇몇의 실시예에서, 명령어 유닛(230)은 레지스터 파일 유닛(250)으로부터 특정 스레드에 대한 레지스터의 이용을 나타내는 정보를 수신하고 명령어 유닛(230)은 이에 따라 특정 스레드의 우선순위를 조정하여 레지스터 파일 유닛(250)의 레지스터의 이용을 줄이거나 늘린다.
본 발명의 다른 실시예에서, 명령어 유닛(230)은 레지스터 파일 유닛(250) 내의 레지스터의 특정 위치를 기술하는 부가 정보를 이용하여 프로그램 명령어의 실행을 스케줄링한다. 예를 들면, 프로그램 명령어는 명령어용 하나 이상의 피연산자가 저장되는 곳인 레지스터 파일 유닛(250) 내의 뱅크에 기초하여 그룹들로 미리-분류된다. 명령어 유닛(230)은 라운드-로빈(round-robin) 방식으로 각 그룹으로부터 하나의 프로그램 명령어를 선택하여, 각 클럭 사이클마다 하나 이상의 프로그램 명령어를 레지스터 어드레스 유닛(240)에 출력한다.
명령어 유닛(230)은 프로그램 명령어 및 샘플들을 레지스터 어드레스 유닛(240)에 출력한다. 도 3 및 도 5에 관련하여 기술된 바와 같이, 레지스터 어드 레스 유닛(240)은 각 스레드에 의해 지정된 피연산자를 저장하는 레지스터 파일 유닛(250) 내의 레지스터를 액세스한다. 레지스터 어드레스 유닛(240)은 각 프로그램 명령어에 대한 요청을 출력한다. 요청의 예는 특정 피연산자에 대한 판독 요청 또는 특정 피연산자에 대한 기록 요청을 포함한다. 본 발명의 일 실시예에서, 레지스터 어드레스 유닛(240)은 각 클럭 사이클 동안 하나의 명령어에 대한 요청을 출력한다. 예를 들면, 적재(load) 명령어(LD)인 경우, 피연산자를 레지스터에 기록하라는 하나의(1) 기록 요청이 출력된다. 마찬가지로, 곱셈-누산(MAD) 명령어인 경우, 3개의 판독 요청(각각의 소스 피연산자에 대한 것) 및 1개의 기록 요청(목적지 피연산자에 대한 것)이 출력된다.
레지스터 어드레스 유닛(240)은 요청 및 대응하는 프로그램 명령어, 예를 들면, MAD를 레지스터 파일 유닛(250)에 출력한다. 레지스터 파일 유닛(250)은 레지스터 파일 유닛(250) 내의 레지스터로부터 피연산자를 판독하고 이 레지스터에 피연산자를 기록하는, 요청을 처리한다. 레지스터 파일 유닛(250)은 판독 충돌 및 사이클 기반 충돌을 피하도록 요청의 처리를 스케줄링한다. 본 발명의 몇몇의 실시예에서, 레지스터 파일 유닛(250)은 스코어보드 유닛을 이용하여 레지스터로의 피연산자 기록의 상태를 추적하여 피연산자가 레지스터로부터 판독될 수 있는 때를 결정한다.
프로그램 명령어를 처리하는 데에 필요한 피연산자를 획득하기 위한 판독 요청이 처리될 때, 레지스터 파일 유닛(250)은 모든 피연산자가 획득된 다음 프로그램 명령어 및 피연산자를 처리를 위한 실행 유닛(들)(270)으로 출력할 때를 결정한 다. 프로그램 명령어에 의해 지정된 바와 같이 실행 유닛(들)(270)은 목적지 피연산자에 기록될, 처리된 피연산자를 레지스터 파일 유닛(250)에 반환한다. 실행 파이프라인(240)은 프로그램 명령어에 의해 모자이크 세공, 원근 교정, 보간법, 음영 넣기(shading), 블렌딩(blending), 등과 같은 동작을 수행하도록 구성된다. 처리된 샘플들은 각 실행 파이프라인(240)으로부터 래스터 연산 유닛(160)으로 출력된다. 본 발명의 몇몇의 실시예에서, 추가적인 실행 파이프라인(240)이 레지스터 파일 유닛(250) 및 래스터 연산 유닛(160)에 연결된다.
도 3은 본 발명의 하나 이상의 양태에 따른 도 2에 도시된 레지스터 파일 유닛(250)의 예시적인 실시예의 블록도이다. 본 발명의 대안적인 실시예에서, 레지스터 파일 유닛(250)은 호스트 프로세서(114) 등의 범용 프로세서 내에서 이용된다. 레지스터 파일 유닛(250)은 2개 이상의 메모리 뱅크를 포함하며, 뱅크(320)는 단일 멀티포트 메모리를 시뮬레이션하도록 구성된다. 각 뱅크(320)는 피연산자를 저장하도록 구성된 레지스터로서 기능하는 몇몇의 위치 영역을 포함한다. 각 수집기 유닛(330)은 레지스터 어드레스 유닛(24)으로부터 요청 및 대응하는 프로그램 명령어를 수신하고 프로그램 명령어가 수집기 유닛(330)에 연결된 특정 실행 유닛(365)에 의한 실행을 위한 명령어인지를 판정한다. 프로그램 명령어가 수집기 유닛(330)에 연결된 특정 실행 유닛(365)에 의한 실행을 위한 명령어라면, 수집기 유닛(330)은 프로그램 명령어 및 처리 요청을 수락한다. 본 발명의 몇몇의 실시예에서, 각 실행 유닛(365)은 동일하며 어떤 실행 유닛(365)이 프로그램 명령어를 실행시킬지를 결정하는 데에 우선순위 방식을 이용한다. 본 발명의 대안적인 실시예 에서는 가장 적게-적재된 실행 유닛(365)에 명령어를 할당한다. 본 발명의 몇몇의 실시예에서는 2개 이상의 수집기 유닛(330)이 하나의 실행 유닛(365)에 연결되고 2개 이상의 수집기 유닛 중 어느 것이 처리를 위하여 하나의 실행 유닛(365)에 피연산자를 출력하는지를 선택하는 데에 우선순위 방식을 이용한다.
각각의 수집기 유닛(330)은 수락된 프로그램 명령어에 대한 요청을 임의의 뱅크 요청 중재 유닛(310)에 출력한다. 각각의 뱅크 요청 중재 유닛(310)은 이 요청이 뱅크 요청 중재 유닛(310)에 연결된 특정 뱅크(320) 내의 레지스터의 판독을 요구하는지를 판정한다. 몇몇의 가능한 레지스터 할당이 도 4a, 4b, 4c, 4d, 4e 및 4f와 관련하여 기술될 것이다. 각 요청은 하나의 뱅크 요청 중재 유닛(310)에 의해 뱅크(320)에 출력되고 이 뱅크에서는 요청에서 지정된 피연산자에 할당된 레지스터가 위치지정된다. 수락된 프로그램 명령어는 피연산자를 모으도록 지정된 수집기 유닛(330)에 남아 있다. 각각의 뱅크 요청 중재 유닛(310)은 또한 서로 다른 수집기 유닛(330) 간에 중재를 하고 뱅크 요청 중재 유닛(310)에 연결된 뱅크(320)에 매 클럭 사이클마다 하나의 요청을 출력한다.
각 뱅크(320)는 뱅크 요청 중재 유닛(310)으로부터 요청을 수신하기 위한 판독 요청 포트를 포함한다. 각 뱅크(320)는 또한 프로그램 명령어에 의해 지정되는 피연산자에 할당되는 목적지 레지스터에 처리된 데이터를 기록하기 위하여 실행 유닛(들)(270)으로부터 기록 요청을 수신하기 위한 기록 요청 포트를 포함한다. 그러므로, 하위 포트 카운트 메모리 중 2개의 뱅크(1개의 기록 포트 및 1개의 판독 포트)를 이용하여 2개의 기록 포트 및 2개의 판독 포트를 구비한 멀티포트 메모리 를 시뮬레이션한다. 본 발명의 몇몇의 실시예에서, 추가적인 요청 포트가 이용된다. 본 발명의 다른 실시예에서, 판독 요청 포트는 기록 요청 포트와 결합하여, 단일-포트 메모리를 액세스한다. 클럭 사이클 중에, 각 뱅크(320)는 셀렉터(325)를 통해 대응하는 수집기 유닛(330)에 판독 요청에 의해 지정된 피연산자를 출력할 수 있다. 그러므로, 프로그램 명령어가 소스 데이터용 3개의 피연산자를 지정할 경우, 피연산자들이 동일한 뱅크(320)에 상주할 때 이들을 모으는 데 적어도 3개의 클럭 사이클이 필요하다. 각 수집기 유닛(330)은 또한 뱅크(320)의 외부 레지스터(도시 생략)에 저장된 상수 및 중간 데이터 등의 소스 데이터를 모을 수 있다. 셀렉터(325)는 입력(도시 생략)으로부터 뱅크(320)에 저장되지 않은 소스 데이터를 수신한다. 모든 피연산자가 수집기 유닛(330)에 의해 모아졌다면, 프로그램 명령어는 디스패칭(dispatch)할 준비가 된 것이다. 본 발명의 몇몇의 실시예에서는, 클럭 사이클 중에 판독되는 피연산자 개수를 증가시키기 위해 추가적인 뱅크 요청 중재 유닛(310), 뱅크(320), 셀렉터(325), 및 수집기 유닛(330)을 포함한다. 본 발명의 일 실시예에서는, 셀렉터(325)가 없고 각 뱅크(320)는 수집기 유닛(330)에 직접 연결된다.
프로그램 명령어용 피연산자 모두가 수집기 유닛(330)에 의해 모아졌다면, 프로그램 명령어 및 피연산자는 수집기 유닛(330)에 의해 처리를 위해 수집기 유닛(330)에 연결된 실행 유닛(365)에 출력된다. 프로그램 명령어의 실행이 완료되면, 실행 유닛(365)은 목적지 피연산자가 프로그램 명령어에 의해 지정되었전 경우 뱅크(320)들 중 하나에 기록 요청을 출력한다. 실행 유닛(270)(들)은 또한 처리된 피연산자를 래스터 연산 유닛(160)에 출력할 수 있다. 본 발명의 몇몇의 실시예에서, 각 실행 유닛(365)은 각 클럭 사이클마다 하나 이상의 명령어를 처리하여 하나 이상의 명령어 처리율을 가져온다. 서로 다른 명령어의 실행은 실행 유닛(365)에 의해 처리되기 때문에 서로 다른 레이턴시(latency)들을 발생시킬 수 있다.
본 발명의 일 실시예에서, 스레드를 처리하기 위한 피연산자를 저장하기 위한 레지스터들이 뱅크(320) 등의 단일 뱅크 내에 할당될 수 있다. 이러한 할당은 "씬(thin)" 할당 유형이라 칭한다. 도 4a는 본 발명의 하나 이상의 양태에 따른 4개의 뱅크에서 스레드를 처리하기 위한 레지스터의 씬 할당의 예시적인 실시예이다. 도 4a에서 스레드 A를 처리하기 위한 피연산자를 저장하는 레지스터는 뱅크 0에서 할당되고 스레드 B를 처리하기 위한 피연산자를 저장하는 레지스터는 뱅크 1에서 할당되고, 스레드 C를 처리하기 위한 피연산자를 저장하는 레지스터는 뱅크 2에서 할당되고, 스레드 D를 처리하기 위한 피연산자를 저장하는 레지스터는 뱅크 3에서 할당된다. 추가적인 스레드를 처리하기 위한 피연산자를 저장하는 레지스터가 뱅크 0, 뱅크 1, 뱅크 2, 및/또는 뱅크 3에서 할당될 수 있다. 본 발명의 대안적인 실시예에서는, 더 적거나 더 많은 뱅크가 이용된다.
본 발명의 다른 실시예에서, 스레드를 처리하기 위한 피연산자를 저장하기 위한 레지스터들이 4개의 뱅크 각각 내에 할당될 수 있는데, 각 뱅크는 뱅크(320)일 수 있다. 이러한 할당은 "팻(fat)" 할당 유형이라 칭한다. 도 4b는 본 발명의 하나 이상의 양태에 따라 4개의 뱅크에서의 스레드를 처리하기 위한 레지스터의 팻 할당의 예시적인 실시예이다. 도 4b에서 스레드 A를 처리하기 위한 피연산자를 저 장하는 레지스터들은 뱅크 0, 뱅크 1, 뱅크 2, 및 뱅크 3에서 할당된다. 스레드 B, C, 및 D를 처리하기 위한 피연산자를 저장하는 레지스터들도 뱅크 0, 뱅크 1, 뱅크 2, 및 뱅크 3에 할당된다. 본 발명의 대안적인 실시예에서는, 더 적거나 더 많은 뱅크가 이용된다.
본 발명의 몇몇의 실시예에서, 스레드를 처리하기 위한 레지스터는 팻 또는 씬 할당 유형 중 하나로 된 특정 개수의 레지스터를 나타내는 "뱅크 카운트" 유닛에서 할당된다. 할당에 이용가능한 다음 레지스터를 나타내는 레지스터 베이스 어드레스는 뱅크 0에서 추적될 수 있고 다른 뱅크에서 이용가능한 다음 레지스터가 뱅크 카운트, 할당 유형, 및 레지스터 베이스 어드레스를 이용하여 결정될 수 있다.
추가적인 스레드를 처리하기 위한 피연산자를 저장하는 레지스터는 팻 또는 씬 할당 중 하나를 이용하여 뱅크 0, 뱅크 1, 뱅크 2 및/또는 뱅크 3에 할당될 수 있다. 그러나, 팻 또는 씬 할당 유형을 혼합하면 도 4c에 도시된 바와 같이 할당에 이용가능한 레지스터의 이용율을 나쁘게 만든다. 예를 들면, 스레드 A와 같은 제1 스레드가 뱅크 0에서 씬 할당을 이용하고 스레드 B와 같은 제2 스레드가 4개의 뱅크 각각에서 팻 할당을 이용한다면, 씬 할당을 이용하는 제3 스레드는 제1 스레드의 실행이 완료될 때까지 지연될 수 있다. 대안으로, 도 4d에 도시된 바와 같이 본 발명의 몇몇의 실시예에서, 팻 할당 유형은 각 뱅크의 상부로부터 이루어질 수 있고 씬 할당 유형은 각 뱅크의 하부로부터 이루어질 수 있다. 스레드 A 및 B는 팻 할당을 이용하고 스레드 C 및 D는 씬 할당을 이용한다. 이러한 할당의 "분리" 는 동일한 할당 유형을 패킹(packing)하여 할당에 이용가능한 레지스터를 보다 효율적으로 이용할 수 있게 한다.
스레드에 대하여 팻 할당이 이용되는 경우, 각 피연산자에 할당되는 위치는 단순히 순차적인 순서로 진행될 수 있다. 도 4e는 본 발명의 하나 이상의 양태에 따른 순차적인 순서로 스레드에 대한 레지스터를 할당하는 예시적인 실시예이다. 예를 들면, 피연산자(400A)를 저장하는 데에 할당된 스레드 A에 할당되는 레지스터는 뱅크 0에 위치되며, 피연산자(400B)를 저장하는 데에 할당된 스레드 B에 할당되는 레지스터도 이와 마찬가지로 뱅크 0에 위치된다. 스레드 A와 스레드 B가 동일한 프로그램 명령어를 실행하고 있다면, 스레드 A와 스레드 B가 스레드 A에 대한 피연산자(400A)와 스레드 B에 대한 피연산자(400B)를 판독하는 프로그램 명령어를 처리할 때 뱅크 충돌이 일어날 가능성이 있다. 피연산자(400B)와 피연산자(400A)가 동일한 뱅크에 저장되지 않았다면 이 뱅크 충돌을 피할 수 있다.
동일한 프로그램 명령어를 처리하는 스레드가 동일한 뱅크에 있는 레지스터들에 할당된 프로그램 명령어에 의해 지정된, 이 스레드의 대응하는 피연산자를 가지지 않게 되도록 레지스터 할당 처리 시에 단계 값(phase value)이 이용될 수 있다. 도 4f는 본 발명의 하나 이상의 양태에 따른 단계 값을 이용하여 스레드에 대한 레지스터를 할당하는 예시적인 실시예이다. 예를 들면, 피연산자(410A)를 저장하도록 할당된 스레드 A에 할당된 레지스터는 뱅크 0에 위치되고, 피연산자(410B)를 저장하도록 할당된 스레드 B에 할당된 레지스터는 뱅크 1에 위치된다. 스레드 A와 스레드 B가 동일한 프로그램 명령어를 실행하고 있는 경우, 스레드 A와 스레드 B가 스레드 A에 대한 피연산자(410A)와 스레드 B에 대한 피연산자(410B)를 판독하는 프로그램 명령어를 처리할 때 뱅크 충돌은 일어나지 않는다. 본 발명의 대안적인 실시예에서, 동일한 프로그램 명령어를 처리하는 스레드는 동일한 뱅크에 있는 레지스터들에 할당된 프로그램 명령어에 의해 지정된, 이 스레드의 대응하는 피연산자를 가지지 않도록 레지스터가 다시 매핑된다. 예를 들면, 뱅크가 4개인 경우, 할당받은 레지스터 번호의 하위의 2개의 비트는 레지스터를 할당받은 스레드에 대응하는 고유 단계 값과 배타적 OR(exclusive OR) 연산될 수 있다. 본 발명의 대안적인 방법은 단계 값과 뱅크의 개수를 모듈로 연산하여 할당된 레지스터 번호에 더하는 것이다.
레지스터에 대해 팻 할당이 이용된다면, 프로그램 명령어를 처리하는 데에 필요한 2개 이상의 피연산자가 2개 이상의 서로 다른 뱅크 내의 레지스터에 할당될 가능성이 있다. 예를 들면 스레드 A에 대한 프로그램 명령어가 피연산자(414A 및 415A)를 지정한다면, 판독 요청이 2개의 서로 다른 요청 큐(310)(하나는 뱅크 0에 연결되어 있고 다른 하나는 뱅크 1에 연결되어 있다)에서 큐잉(queue)된다. 마찬가지로, 피연산자(414A)는 뱅크 0에 연결된 수집기 유닛(330)에 출력될 것이고 피연산자(415A)는 뱅크 1에 연결된 수집기 유닛(330)에 출력될 것이다. 단일 수집기 유닛(330)이 각 프로그램 명령어에 대한 피연산자를 모으기 때문에, 여러 뱅크들과 수집기 유닛(330) 간의 피연산자의 전송을 할 수 있게 하는 메카니즘이 이용된다.
도 5는 본 발명의 하나 이상의 양태에 따른, 각각이 뱅크 요청 중재 유닛(310)에 연결된 복수의 뱅크(320) 및 크로스바(525)를 포함하는 도 2의 레지스터 파일 유닛의 다른 예시적인 실시예의 블록도이다. 크로스바(525)는 임의의 뱅크(320)로부터 출력된 피연산자가 임의의 수집기 유닛(330)의 입력으로 라우팅될 수 있도록 구성된다. 그러므로, 프로그램 명령어에 의해 지정된 모든 피연산자가 하나의 수집기 유닛(330)에 의해 수집될 수 있다. 도 3에 관련하여 기술된 바와 같이, 각 수집기 유닛(330)은 임의의 뱅크(320)로부터 프로그램 명령어에 의해 지정된 피연산자를 모은다. 크로스바(525)가 이용될 경우 스레드 스케줄링 및 레지트서 할당(팻 또는 씬)은 뱅크(320)의 개수가 수집기 유닛(330)의 총 개수와 같을 때보다 효율적으로 진행될 수 있다.
디스패처 유닛(540)은 수집기 유닛(330) 세트와 실행 유닛 B(575) 간에 연결된다. 디스패처 유닛(540)은 이 세트 내의 각 수집기 유닛(330)으로부터 프로그램 명령어 및 대응하는 피연산자, 예를 들면, 입력을 수신할 수 있으므로, 디스패처 유닛(540)은 세트 내의 수집기 유닛(330)들 간에 중재된다. 본 발명의 몇몇의 실시예에서, 디스패처 유닛(540)은 라운드-로빈 방식으로 중재를 한다. 본 발명의 다른 실시예에서, 세트 내의 각 수집기 유닛(330)은 대응하는 우선순위를 가지며 디스패처 유닛(540)은 이 우선순위에 기초하여 각각의 수집기 유닛(330)으로부터 입력을 받아들인다. 예를 들면, 어느 한 수집기 유닛(330)이 다른 수집기 유닛(330) 보다는 높은 우선순위를 가질 수 있으므로 디스패처 유닛(540)은 프로그램 명령어와 피연산자가 이용가능하다면 항상 그 어느 한 수집기 유닛(330)으로부터 입력을 받아들일 것이다.
단일 수집기 유닛(330)은 실행 유닛 A(565)에 직접 연결된다. 실행 유닛 A(565)는 실행 유닛 B(575)가 실행하도록 구성되지 않은 특정 명령어를 실행하도록 구성될 수 있다. 그러므로, 하나의 수집기 유닛(330)이 실행 유닛 A(565)에 의한 실행을 위한 프로그램 명령어(및 요청)를 수락하고 수집기 유닛(330) 세트는 실행 유닛 B(575)에 의한 실행을 위한 프로그램 명령어(및 요청)를 수락한다.
도 6a는 본 발명의 하나 이상의 양태에 따른 스레드를 처리하기 위한 레지스터를 할당하는 방법의 실시예를 도시한다. 단계(600)에서 레지스터 어드레스 유닛(240)에 의해 스레드 제어 유닛(220)으로부터 스레드에 대한 레지스터 할당 요청이 수신된다. 단계(605)에서 레지스터 어드레스 유닛(240)은 스레드를 처리하는 데 필요한 크기, 즉, 레지스터 개수가 일정한 또는 프로그램가능한 값, X 이하인지를 판정한다. 레지스터 어드레스 유닛(240)이 크기가 X보다 크다고 판정하면, 단계(610)에서 레지스터 어드레스 유닛(240)은 다중 뱅크(320)에, 즉 팻 할당으로 피연산자를 저장하기 위한 레지스터를 할당한다. 단계(615)에서, 레지스터 어드레스 유닛(240)은 베이스 포인터를 갱신한다. 베이스 포인터는 뱅크(320) 내의 할당에 이용가능한 처음 위치를 나타낸다.
단계(620)에서 레지스터 어드레스 유닛(240)은 단계 값을 갱신하여, 후속 스레드용으로 할당되는 피연산자에 할당된 레지스터가 단계(610)에서 할당된 레지스터에 비하여 편중되도록 한다. 단계(625)에서 레지스터 어드레스 유닛(240)은 뱅크(320)의 개수인 N과 단계 값이 동일한지를 판정한다. 단계(625)에서, 레지스터 어드레스 유닛(240)이 단계 값이 N과 동일하다고 판정하면, 단계(630)에서, 레지스터 어드레스 유닛(240)은 단계 값을 0으로 설정하고 단계(670)로 진행한다. 단 계(625)에서, 레지스터 어드레스 유닛(240)이 단계 값이 N과 동일하지 않다고 판정하면, 레지스터 어드레스 유닛(240)은 단계(670)로 진행하여 이 할당 정보를 레지스터 파일 유닛(250) 내의 요청 분산 유닛(300)에 출력한다.
단계(605)에서 레지스터 어드레스 유닛(240)이 크기가 X 이하라고 판정한다면, 단계(635)에서 레지스터 어드레스 유닛(240)은 씬 할당에 이용가능한 뱅크(320)가 N-1인지를 판정한다. 단계(635)에서, 레지스터 어드레스 유닛(240)이 할당에 이용가능한 뱅크(320)가, 뱅크 표시자가 지정한 바와 같이, 뱅크 N-1이라 판정한다면, 단계(650)에서 레지스터 어드레스 유닛(240)은 할당에 이용가능한 처음 위치를 나타내도록 베이스를 갱신하고 단계(645)로 진행한다. 단계(635)에서, 레지스터 어드레스 유닛(240)이 할당에 이용가능한 뱅크(320)가 뱅크 N-1이 아니라고 판정하면, 단계(640)에서 레지스터 어드레스 유닛(240)은 뱅크 표시자를 1만큼 증가시킴으로써 뱅크 표시자를 갱신한다. 단계(645)에서 레지스터 어드레스 유닛(240)은, 뱅크 표시자에 의해 지정된, 단일 뱅크(320)에, 즉, 씬 할당으로 피연산자를 저장하기 위한 레지스터를 할당하고 단계(607)로 진행한다. 전술한 바와 같이, 단계(670)에서 레지스터 어드레스 유닛(240)은 할당 정보를 레지스터 파일 유닛(250) 내의 레지스터 분산 유닛(330)에 출력한다.
도 6b는 본 발명의 하나 이상의 양태에 따른 스레드를 처리하기 위한 레지스터 할당의 다른 방법의 실시예를 도시한다. 단계(600)에서 레지스터 어드레스 유닛(240)은 팻 또는 씬 할당 유형을 포함하는 레지스터 할당 요청을 수신한다. 본 발명의 몇몇의 실시예에서, 이 할당 유형은 프로그램 명령어가 컴파일될 때 결정되 고 드라이버에 의해 레지스터 어드레스 유닛(240)에 제공된다. 단계(603)에서 레지스터 어드레스 유닛(240)은 지정된 할당 유형이 씬인지 판정하고, 그렇다면, 도 6a에 관련하여 전술한, 단계(610, 615, 620, 625, 630, 및 670)로 진행한다. 단계(603)에서 레지스터 어드레스 유닛(240)이 지정된 할당 유형은 씬이 아니라고 판정한다면, 레지스터 어드레스 유닛(240)은 도 6a에 관련하여 전술한 단계(635, 640, 645, 650, 및 670)로 진행한다.
도 6c는 본 발명의 하나 이상의 양태에 따른 스레드를 처리하기 위한 레지스터 할당의 다른 방법의 실시예를 도시한다. 단계(600)에서 레지스터 어드레스 유닛(240)은 팻 또는 씬 할당 유형을 포함하는 레지스터 할당 요청을 수신한다. 단계(603)에서 레지스터 어드레스 유닛(240)은 지정된 할당 유형이 씬인지 판정하고, 그렇다면, 단계(607)에서 레지스터 어드레스 유닛(240)은, 뱅크 표시자에 의해 지정된 뱅크(320) 내에서, 씬 할당 유형이 적합할 것인지, 즉 필요한 레지스터 개수가 이용가능한지를 판정한다. 단계(607)에서 레지스터 어드레스 유닛(240)이 뱅크(320) 내에서 씬 할당 유형이 적합할 것이라고 판정하면, 레지스터 어드레스 유닛(240)은 도 6a에 관련하여 전술한 단계(635, 640, 645, 650, 및 670)로 진행한다.
단계(603)에서 레지스터 어드레스 유닛(240)이 지정된 할당 유형은 씬이 아니라고 판정한다면, 레지스터 어드레스 유닛(240)은 도 6a에 관련하여 전술한, 단계(610, 615, 620, 625, 630, 및 670)로 진행한다. 단계(607)에서 레지스터 어드레스 유닛(240)이 뱅크(320) 내에서 씬 할당이 적합하지 않을 것이라고 판정하면, 레지스터 어드레스 유닛(240)은 마찬가지로 도 6a에 관련하여 전술한 단계(610, 615, 620, 625, 630, 및 670)로 진행한다.
그러므로, 당업자들은 도 6a, 6b, 6c, 또는 이들의 등가물의 방법 단계를 수행하도록 구성된 임의의 시스템이 본 발명의 범위 내에 있다고 인식할 것이다. 또한, 당업자들은 도 6a, 6b, 6c의 방법 단계들이 멀티포트 메모리를 시뮬레이션하기 위해 임의의 개수의 뱅크를 포함하는 레지스터 파일 유닛을 지원하도록 확장될 수 있다고 인식할 것이다.
본 발명은 특정 실시예에 관련하여 상기 기술되었다. 그렇지만, 첨부된 특허 청구 범위에 설명된 본 발명의 폭넓은 사상 및 범위로부터 벗어나지 않는 다양한 수정 및 변경이 이루어질 수 있음이 명백할 것이다. 따라서, 전술된 설명 및 도면은 제한적인 개념이기보다는 예시적인 것으로 인식되어야 한다. 방법 청구항의 단계들의 열거는 청구항에 명시적으로 기술되지 않는 한 임의의 특정 순서로 단계들을 수행하는 것을 의미하지 않는다.
모든 상표는 이들 상표의 소유자의 각각의 소유물이다.
Claims (24)
- 레지스터를 메모리 뱅크 내로 할당하는 방법으로서,스레드용으로 할당되는 레지스터 개수를 결정하는 단계;상기 스레드용으로 할당받은 상기 개수의 레지스터를 멀티포트 메모리를 시뮬레이션하도록 구성된 한 세트의 메모리 뱅크 중 적어도 하나의 메모리 뱅크 내의 위치에 할당하는 단계;상기 메모리 뱅크 세트 내의 제1 메모리 뱅크 내의 레지스터로부터 상기 스레드 내의 프로그램 명령어에 의해 지정된 제1 피연산자를 판독하는 단계; 및상기 메모리 뱅크 세트 내의 상기 제1 메모리 뱅크 내의 다른 레지스터로부터 또는 상기 메모리 뱅크 세트 내의 제2 메모리 뱅크 내의 레지스터로부터 상기 스레드 내의 상기 프로그램 명령어에 의해 지정된 제2 피연산자를 판독하는 단계를 포함하는 레지스터를 메모리 뱅크 내로 할당하는 방법.
- 제1항에 있어서,상기 스레드용으로 할당된 상기 레지스터 개수는 영역들(portions)로 나누어지며 상기 영역들은 상기 메모리 뱅크 세트 내의 각각의 메모리 뱅크에서 할당되는 방법.
- 제1항에 있어서,상기 스레드용으로 할당된 상기 레지스터 개수는 상기 메모리 뱅크 세트 내의 하나의 메모리 뱅크에 위치되는 방법.
- 제1항에 있어서,상기 레지스터 개수의 할당은 할당 유형에 기초하는 방법.
- 제4항에 있어서,상기 할당 유형을 결정하는 단계를 더 포함하고,상기 할당 유형은 상기 스레드용으로 할당된 레지스터의 개수에 기초하는 방법.
- 제4항에 있어서,드라이버로부터 상기 할당 유형을 수신하는 단계를 더 포함하는 방법.
- 삭제
- 삭제
- 제1항에 있어서,상기 제1 피연산자와 상기 제2 피연산자를 모으는 단계 및 실행을 위해 상기 프로그램 명령어, 상기 제1 피연산자, 및 상기 제2 피연산자를 디스패칭(dispatch)하는 단계를 더 포함하는 방법.
- 삭제
- 제1항에 있어서,상기 제1 피연산자와 상기 제2 피연산자를 모으는 단계 및 실행을 위해 상기 프로그램 명령어, 상기 제1 피연산자, 및 상기 제2 피연산자를 디스패칭하는 단계를 더 포함하는 방법.
- 제1항에 있어서,상기 스레드에 관련된 단계 값을 이용하여 상기 적어도 하나의 메모리 뱅크에 상기 스레드용으로 할당된 상기 레지스터 세트 내의 레지스터들을 할당하여 각 레지스터를 할당하는 단계를 더 포함하는 방법.
- 그래픽 프로그램 명령어용 피연산자를 저장하기 위한 레지스터 파일 장치로서,제1 스레드용 피연산자를 저장하도록 구성된 제1 메모리 뱅크,제2 스레드용 피연산자를 저장하도록 구성된 제2 메모리 뱅크,상기 제1 메모리 뱅크로부터 상기 제1 스레드에 대한 상기 피연산자를 수신하고 상기 제1 스레드의 프로그램 명령어 및 상기 제1 스레드의 상기 프로그램 명령어에 의해 지정된 임의의 피연산자를 출력하도록 구성된 제1 수집기 유닛, 및상기 제2 메모리 뱅크로부터 상기 제2 스레드에 대한 상기 피연산자를 수신하고 상기 제2 스레드의 프로그램 명령어 및 상기 제2 스레드의 상기 프로그램 명령어에 의해 지정된 임의의 피연산자를 출력하도록 구성된 제2 수집기 유닛을 포함하는 레지스터 파일 장치.
- 제13항에 있어서,상기 제2 수집기가 상기 제1 메모리 뱅크로부터 상기 제1 스레드에 대한 피연산자를 수신하기 위해 상기 제2 수집기 유닛에 상기 제1 메모리 뱅크를 연결하는 크로스바 유닛을 더 포함하는 레지스터 파일 장치.
- 제13항에 있어서,상기 제1 메모리 뱅크에 피연산자 판독 요청을 출력하도록 구성된 제1 뱅크 요청 중재 유닛, 및상기 제2 메모리 뱅크에 피연산자 판독 요청을 출력하도록 구성된 제2 뱅크 요청 중재 유닛을 더 포함하는 레지스터 파일 장치.
- 제13항에 있어서,상기 제2 수집기 유닛에 연결되고 상기 제1 스레드의 상기 프로그램 명령어와 상기 제1 스레드의 상기 프로그램 명령어에 의해 지정된 임의의 피연산자 또는 상기 제2 스레드의 상기 프로그램 명령어와 상기 제2 스레드의 상기 프로그램 명령어에 의해 지정된 임의의 피연산자 중 하나를 출력하도록 구성된 디스패처 유닛을 더 포함하는 레지스터 파일 장치.
- 제16항에 있어서,상기 디스패처 유닛에 의해 출력된 임의의 프로그램 명령어를 실행시키도록 구성된 실행 유닛을 더 포함하는 레지스터 파일 장치.
- 제16항에 있어서,상기 제1 수집기 유닛에 의해 출력된 임의의 프로그램 명령어를 실행시키도록 구성된 실행 유닛을 더 포함하는 레지스터 파일 장치.
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 제1항에 있어서,상기 멀티포트 메모리는 하위 포트 카운트 메모리를 이용해 구성되는, 방법.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/889,730 | 2004-07-13 | ||
US10/889,730 US7339592B2 (en) | 2004-07-13 | 2004-07-13 | Simulating multiported memories using lower port count memories |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20070030327A KR20070030327A (ko) | 2007-03-15 |
KR100862124B1 true KR100862124B1 (ko) | 2008-10-09 |
Family
ID=34973122
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020077003498A KR100862124B1 (ko) | 2004-07-13 | 2005-07-07 | 하위 포트 카운트 메모리를 이용하여 멀티포트 메모리를시뮬레이션하는 시스템 및 방법 |
Country Status (6)
Country | Link |
---|---|
US (2) | US7339592B2 (ko) |
JP (2) | JP2008507034A (ko) |
KR (1) | KR100862124B1 (ko) |
CN (1) | CN101014933B (ko) |
TW (1) | TWI441021B (ko) |
WO (1) | WO2006017135A2 (ko) |
Families Citing this family (78)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7634621B1 (en) * | 2004-07-13 | 2009-12-15 | Nvidia Corporation | Register file allocation |
US7339592B2 (en) | 2004-07-13 | 2008-03-04 | Nvidia Corporation | Simulating multiported memories using lower port count memories |
US7360035B2 (en) | 2004-09-01 | 2008-04-15 | International Business Machines Corporation | Atomic read/write support in a multi-module memory configuration |
US8560795B2 (en) * | 2005-06-30 | 2013-10-15 | Imec | Memory arrangement for multi-processor systems including a memory queue |
US8327115B2 (en) | 2006-04-12 | 2012-12-04 | Soft Machines, Inc. | Plural matrices of execution units for processing matrices of row dependent instructions in single clock cycle in super or separate mode |
US8766995B2 (en) * | 2006-04-26 | 2014-07-01 | Qualcomm Incorporated | Graphics system with configurable caches |
US20070268289A1 (en) * | 2006-05-16 | 2007-11-22 | Chun Yu | Graphics system with dynamic reposition of depth engine |
US8884972B2 (en) * | 2006-05-25 | 2014-11-11 | Qualcomm Incorporated | Graphics processor with arithmetic and elementary function units |
US8869147B2 (en) * | 2006-05-31 | 2014-10-21 | Qualcomm Incorporated | Multi-threaded processor with deferred thread output control |
US8644643B2 (en) | 2006-06-14 | 2014-02-04 | Qualcomm Incorporated | Convolution filtering in a graphics processor |
US8766996B2 (en) * | 2006-06-21 | 2014-07-01 | Qualcomm Incorporated | Unified virtual addressed register file |
EP2523101B1 (en) | 2006-11-14 | 2014-06-04 | Soft Machines, Inc. | Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes |
US8725991B2 (en) | 2007-09-12 | 2014-05-13 | Qualcomm Incorporated | Register file system and method for pipelined processing |
US7945764B2 (en) * | 2008-01-11 | 2011-05-17 | International Business Machines Corporation | Processing unit incorporating multirate execution unit |
US20090189896A1 (en) * | 2008-01-25 | 2009-07-30 | Via Technologies, Inc. | Graphics Processor having Unified Shader Unit |
KR101102930B1 (ko) * | 2008-10-31 | 2012-01-10 | 한국전자통신연구원 | 로봇용 소프트웨어 컴포넌트 장치 및 이를 이용한 쓰레드 처리 방법 |
US8689217B2 (en) | 2008-10-31 | 2014-04-01 | Electronics And Telecommunications Research Institute | System and method for thread processing robot software components responsive to periodic, dedicated, and passive modes |
US8370557B2 (en) * | 2008-12-19 | 2013-02-05 | Intel Corporation | Pseudo dual-port SRAM and a shared memory switch using multiple memory banks and a sideband memory |
US8386808B2 (en) * | 2008-12-22 | 2013-02-26 | Intel Corporation | Adaptive power budget allocation between multiple components in a computing system |
US8458446B2 (en) * | 2009-09-30 | 2013-06-04 | Oracle America, Inc. | Accessing a multibank register file using a thread identifier |
KR20110103256A (ko) * | 2010-03-12 | 2011-09-20 | 삼성전자주식회사 | 다중 입출력 오퍼레이션 지원 프로세서 및 그 방법 |
US8832671B1 (en) * | 2010-07-07 | 2014-09-09 | Nvidia Corporation | Conflict-free register allocation |
US8555035B1 (en) | 2010-07-07 | 2013-10-08 | Nvidia Corporation | Conflict-free register allocation using a multi-bank register file with input operand alignment |
US20120066471A1 (en) * | 2010-09-14 | 2012-03-15 | Advanced Micro Devices, Inc. | Allocation of memory buffers based on preferred memory performance |
US20120066444A1 (en) * | 2010-09-14 | 2012-03-15 | Advanced Micro Devices, Inc. | Resolution Enhancement of Video Stream Based on Spatial and Temporal Correlation |
KR101685247B1 (ko) | 2010-09-17 | 2016-12-09 | 소프트 머신즈, 인크. | 조기 원거리 분기 예측을 위한 섀도우 캐시를 포함하는 단일 사이클 다중 분기 예측 |
US8787368B2 (en) * | 2010-12-07 | 2014-07-22 | Advanced Micro Devices, Inc. | Crossbar switch with primary and secondary pickers |
CN108376097B (zh) | 2011-03-25 | 2022-04-15 | 英特尔公司 | 用于通过使用由可分割引擎实例化的虚拟核来支持代码块执行的寄存器文件段 |
EP2689327B1 (en) | 2011-03-25 | 2021-07-28 | Intel Corporation | Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines |
KR101966712B1 (ko) | 2011-03-25 | 2019-04-09 | 인텔 코포레이션 | 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 코드 블록의 실행을 지원하는 메모리 프래그먼트 |
US20120254589A1 (en) * | 2011-04-01 | 2012-10-04 | Jesus Corbal San Adrian | System, apparatus, and method for aligning registers |
KR101639853B1 (ko) | 2011-05-20 | 2016-07-14 | 소프트 머신즈, 인크. | 복수의 엔진에 의해 명령어 시퀀스들의 실행을 지원하기 위한 자원들 및 상호접속 구조들의 비집중 할당 |
CN103649931B (zh) * | 2011-05-20 | 2016-10-12 | 索夫特机械公司 | 用于支持由多个引擎执行指令序列的互连结构 |
US8819379B2 (en) | 2011-11-15 | 2014-08-26 | Memory Technologies Llc | Allocating memory based on performance ranking |
KR101703401B1 (ko) | 2011-11-22 | 2017-02-06 | 소프트 머신즈, 인크. | 다중 엔진 마이크로프로세서용 가속 코드 최적화기 |
WO2013077876A1 (en) | 2011-11-22 | 2013-05-30 | Soft Machines, Inc. | A microprocessor accelerated code optimizer |
US8639882B2 (en) * | 2011-12-14 | 2014-01-28 | Nvidia Corporation | Methods and apparatus for source operand collector caching |
US9626191B2 (en) * | 2011-12-22 | 2017-04-18 | Nvidia Corporation | Shaped register file reads |
US9606808B2 (en) * | 2012-01-11 | 2017-03-28 | Nvidia Corporation | Method and system for resolving thread divergences |
US9158683B2 (en) | 2012-08-09 | 2015-10-13 | Texas Instruments Incorporated | Multiport memory emulation using single-port memory devices |
US9489316B2 (en) * | 2013-03-15 | 2016-11-08 | Freescale Semiconductor, Inc. | Method and device implementing execute-only memory protection |
US9904625B2 (en) | 2013-03-15 | 2018-02-27 | Intel Corporation | Methods, systems and apparatus for predicting the way of a set associative cache |
US9886279B2 (en) | 2013-03-15 | 2018-02-06 | Intel Corporation | Method for populating and instruction view data structure by using register template snapshots |
US10275255B2 (en) | 2013-03-15 | 2019-04-30 | Intel Corporation | Method for dependency broadcasting through a source organized source view data structure |
WO2014151043A1 (en) | 2013-03-15 | 2014-09-25 | Soft Machines, Inc. | A method for emulating a guest centralized flag architecture by using a native distributed flag architecture |
WO2014150991A1 (en) | 2013-03-15 | 2014-09-25 | Soft Machines, Inc. | A method for implementing a reduced size register view data structure in a microprocessor |
WO2014150971A1 (en) | 2013-03-15 | 2014-09-25 | Soft Machines, Inc. | A method for dependency broadcasting through a block organized source view data structure |
US9569216B2 (en) | 2013-03-15 | 2017-02-14 | Soft Machines, Inc. | Method for populating a source view data structure by using register template snapshots |
US10140138B2 (en) | 2013-03-15 | 2018-11-27 | Intel Corporation | Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation |
WO2014150806A1 (en) | 2013-03-15 | 2014-09-25 | Soft Machines, Inc. | A method for populating register view data structure by using register template snapshots |
US9811342B2 (en) | 2013-03-15 | 2017-11-07 | Intel Corporation | Method for performing dual dispatch of blocks and half blocks |
WO2014151018A1 (en) | 2013-03-15 | 2014-09-25 | Soft Machines, Inc. | A method for executing multithreaded instructions grouped onto blocks |
US9891924B2 (en) | 2013-03-15 | 2018-02-13 | Intel Corporation | Method for implementing a reduced size register view data structure in a microprocessor |
US9508112B2 (en) * | 2013-07-31 | 2016-11-29 | Apple Inc. | Multi-threaded GPU pipeline |
US9377968B2 (en) | 2013-11-13 | 2016-06-28 | Sandisk Technologies Llc | Method and system for using templates to communicate with non-volatile memory |
US9430411B2 (en) | 2013-11-13 | 2016-08-30 | Sandisk Technologies Llc | Method and system for communicating with non-volatile memory |
US9390033B2 (en) | 2013-11-13 | 2016-07-12 | Sandisk Technologies Llc | Method and system for communicating with non-volatile memory via multiple data paths |
KR20150056373A (ko) * | 2013-11-15 | 2015-05-26 | 삼성전자주식회사 | 순차적 수행 방식의 멀티스레드 프로세싱 장치 및 방법 |
US9201636B2 (en) | 2013-11-21 | 2015-12-01 | National Tsing Hua University | Method for divergence analysis of pointer-based program |
US9141291B2 (en) | 2013-11-26 | 2015-09-22 | Sandisk Technologies Inc. | Adaptive context disbursement for improved performance in non-volatile memory systems |
US9437172B2 (en) * | 2014-08-19 | 2016-09-06 | Apple Inc. | High-speed low-power access to register files |
KR102357863B1 (ko) * | 2014-12-15 | 2022-02-04 | 삼성전자주식회사 | 메모리 접근 방법 및 장치 |
GB2540971B (en) | 2015-07-31 | 2018-03-14 | Advanced Risc Mach Ltd | Graphics processing systems |
US10089115B2 (en) * | 2016-07-07 | 2018-10-02 | Intel Corporation | Apparatus to optimize GPU thread shared local memory access |
US9747106B1 (en) | 2016-09-30 | 2017-08-29 | International Business Machines Corporation | Allocating multiple operand data areas of a computer instruction within a program buffer |
CN110326021A (zh) * | 2017-04-01 | 2019-10-11 | 英特尔公司 | 用于图形处理器上的加速计算的执行单元共享混合技术 |
US10521880B2 (en) * | 2017-04-17 | 2019-12-31 | Intel Corporation | Adaptive compute size per workload |
US10417734B2 (en) | 2017-04-24 | 2019-09-17 | Intel Corporation | Compute optimization mechanism for deep neural networks |
US10417731B2 (en) | 2017-04-24 | 2019-09-17 | Intel Corporation | Compute optimization mechanism for deep neural networks |
US10467724B1 (en) * | 2018-02-14 | 2019-11-05 | Apple Inc. | Fast determination of workgroup batches from multi-dimensional kernels |
US11068305B2 (en) * | 2018-05-07 | 2021-07-20 | Micron Technology, Inc. | System call management in a user-mode, multi-threaded, self-scheduling processor |
CN111459543B (zh) * | 2019-01-21 | 2022-09-13 | 上海登临科技有限公司 | 一种管理寄存器文件单元的方法 |
KR102201352B1 (ko) * | 2019-04-03 | 2021-01-08 | 연세대학교 산학협력단 | 스핀 전달 토크 랜덤 액세스 메모리 기반의 계층적 레지스터 파일 장치 |
US12020075B2 (en) | 2020-09-11 | 2024-06-25 | Apple Inc. | Compute kernel parsing with limits in one or more dimensions with iterating through workgroups in the one or more dimensions for execution |
US12020064B2 (en) * | 2020-10-20 | 2024-06-25 | Micron Technology, Inc. | Rescheduling a failed memory request in a processor |
US20220197649A1 (en) * | 2020-12-22 | 2022-06-23 | Advanced Micro Devices, Inc. | General purpose register hierarchy system and method |
CN115129369A (zh) * | 2021-03-26 | 2022-09-30 | 上海阵量智能科技有限公司 | 命令分发方法、命令分发器、芯片以及电子设备 |
CN115934102B (zh) * | 2022-12-29 | 2023-12-12 | 格兰菲智能科技有限公司 | 通用寄存器动态分配方法、装置、计算机设备和存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0962856A2 (en) * | 1998-06-05 | 1999-12-08 | Texas Instruments Incorporated | A dual-mode VLIW architecture with software-controlled parallelism |
US20030041228A1 (en) * | 2001-08-27 | 2003-02-27 | Rosenbluth Mark B. | Multithreaded microprocessor with register allocation based on number of active threads |
Family Cites Families (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US41228A (en) * | 1864-01-12 | Improved refrigerating dish-cover | ||
US80512A (en) * | 1868-07-28 | John shellabergeb | ||
US163699A (en) * | 1875-05-25 | Improvement in ruffling attachments for sewing-machines | ||
US12603A (en) * | 1855-03-27 | Improvement in seed-planters | ||
US103990A (en) * | 1870-06-07 | Improvement in liquid-meters | ||
US4532589A (en) * | 1981-12-02 | 1985-07-30 | Hitachi, Ltd. | Digital data processor with two operation units |
JPS61269773A (ja) * | 1985-05-24 | 1986-11-29 | Fujitsu Ltd | ベクトル命令実行制御方式 |
JP2545789B2 (ja) * | 1986-04-14 | 1996-10-23 | 株式会社日立製作所 | 情報処理装置 |
US4964042A (en) * | 1988-08-12 | 1990-10-16 | Harris Corporation | Static dataflow computer with a plurality of control structures simultaneously and continuously monitoring first and second communication channels |
JPH0331937A (ja) * | 1989-06-29 | 1991-02-12 | Mitsubishi Electric Corp | マイクロプロセッサ |
US6091430A (en) * | 1993-03-31 | 2000-07-18 | International Business Machines Corporation | Simultaneous high resolution display within multiple virtual DOS applications in a data processing system |
JPH06332721A (ja) * | 1993-05-24 | 1994-12-02 | Hitachi Ltd | レジスタの使用方法 |
SG75756A1 (en) * | 1994-02-28 | 2000-10-24 | Intel Corp | Method and apparatus for avoiding writeback conflicts between execution units sharing a common writeback path |
US6154826A (en) * | 1994-11-16 | 2000-11-28 | University Of Virginia Patent Foundation | Method and device for maximizing memory system bandwidth by accessing data in a dynamically determined order |
US5701426A (en) * | 1995-03-31 | 1997-12-23 | Bull Information Systems Inc. | Data processing system and method using cache miss address prediction and forced LRU status in a cache memory to improve cache hit ratio |
US5644780A (en) * | 1995-06-02 | 1997-07-01 | International Business Machines Corporation | Multiple port high speed register file with interleaved write ports for use with very long instruction word (vlin) and n-way superscaler processors |
US6167486A (en) * | 1996-11-18 | 2000-12-26 | Nec Electronics, Inc. | Parallel access virtual channel memory system with cacheable channels |
JP3087696B2 (ja) * | 1997-07-25 | 2000-09-11 | 日本電気株式会社 | 分散メモリ型マルチプロセッサ・システム制御方法およびコンピュータ読み取り可能な記録媒体 |
US5913049A (en) * | 1997-07-31 | 1999-06-15 | Texas Instruments Incorporated | Multi-stream complex instruction set microprocessor |
JPH11184674A (ja) * | 1997-12-24 | 1999-07-09 | Fujitsu Ltd | レジスタファイル |
US6092175A (en) * | 1998-04-02 | 2000-07-18 | University Of Washington | Shared register storage mechanisms for multithreaded computer systems with out-of-order execution |
JP3880739B2 (ja) * | 1999-02-25 | 2007-02-14 | 三菱電機株式会社 | オペレーティングシステムの処理方式及びオペレーティングシステムの処理方法 |
US6438557B1 (en) * | 1999-06-23 | 2002-08-20 | Ericsson Inc. | System and method for performing context switching and rescheduling of a processor |
JP2001167084A (ja) * | 1999-12-08 | 2001-06-22 | Nec Kofu Ltd | ベクトル演算処理装置及びベクトルデータ移送方法 |
US7120783B2 (en) * | 1999-12-22 | 2006-10-10 | Ubicom, Inc. | System and method for reading and writing a thread state in a multithreaded central processing unit |
US6615340B1 (en) * | 2000-03-22 | 2003-09-02 | Wilmot, Ii Richard Byron | Extended operand management indicator structure and method |
US20020103990A1 (en) * | 2001-02-01 | 2002-08-01 | Hanan Potash | Programmed load precession machine |
US6795889B2 (en) * | 2002-01-09 | 2004-09-21 | International Business Machines Corporation | Method and apparatus for multi-path data storage and retrieval |
JP3727887B2 (ja) * | 2002-02-19 | 2005-12-21 | 富士通株式会社 | マルチスレッドプロセッサにおける共有レジスタファイル制御方式 |
US6833831B2 (en) * | 2002-02-26 | 2004-12-21 | Sun Microsystems, Inc. | Synchronizing data streams in a graphics processor |
US7398374B2 (en) * | 2002-02-27 | 2008-07-08 | Hewlett-Packard Development Company, L.P. | Multi-cluster processor for processing instructions of one or more instruction threads |
CN1647030A (zh) * | 2002-04-10 | 2005-07-27 | 皇家飞利浦电子股份有限公司 | 数据处理系统 |
US7336283B2 (en) * | 2002-10-24 | 2008-02-26 | Hewlett-Packard Development Company, L.P. | Efficient hardware A-buffer using three-dimensional allocation of fragment memory |
JP2004178427A (ja) * | 2002-11-28 | 2004-06-24 | Toshiba Microelectronics Corp | 中央処理装置 |
US7376954B2 (en) * | 2003-08-28 | 2008-05-20 | Mips Technologies, Inc. | Mechanisms for assuring quality of service for programs executing on a multithreaded processor |
US7339592B2 (en) | 2004-07-13 | 2008-03-04 | Nvidia Corporation | Simulating multiported memories using lower port count memories |
-
2004
- 2004-07-13 US US10/889,730 patent/US7339592B2/en active Active
-
2005
- 2005-07-07 JP JP2007521508A patent/JP2008507034A/ja active Pending
- 2005-07-07 KR KR1020077003498A patent/KR100862124B1/ko active IP Right Grant
- 2005-07-07 CN CN2005800298490A patent/CN101014933B/zh not_active Expired - Fee Related
- 2005-07-07 WO PCT/US2005/024164 patent/WO2006017135A2/en active Application Filing
- 2005-07-12 TW TW094123642A patent/TWI441021B/zh active
-
2006
- 2006-11-01 US US11/555,649 patent/US7834881B2/en active Active
-
2011
- 2011-07-12 JP JP2011154233A patent/JP5422614B2/ja active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0962856A2 (en) * | 1998-06-05 | 1999-12-08 | Texas Instruments Incorporated | A dual-mode VLIW architecture with software-controlled parallelism |
US20030041228A1 (en) * | 2001-08-27 | 2003-02-27 | Rosenbluth Mark B. | Multithreaded microprocessor with register allocation based on number of active threads |
Also Published As
Publication number | Publication date |
---|---|
JP2011238271A (ja) | 2011-11-24 |
US7834881B2 (en) | 2010-11-16 |
US20060012603A1 (en) | 2006-01-19 |
JP2008507034A (ja) | 2008-03-06 |
US20080109611A1 (en) | 2008-05-08 |
KR20070030327A (ko) | 2007-03-15 |
WO2006017135A2 (en) | 2006-02-16 |
WO2006017135A3 (en) | 2006-10-05 |
TW200613980A (en) | 2006-05-01 |
CN101014933B (zh) | 2011-07-27 |
CN101014933A (zh) | 2007-08-08 |
TWI441021B (zh) | 2014-06-11 |
JP5422614B2 (ja) | 2014-02-19 |
US7339592B2 (en) | 2008-03-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100862124B1 (ko) | 하위 포트 카운트 메모리를 이용하여 멀티포트 메모리를시뮬레이션하는 시스템 및 방법 | |
US7634621B1 (en) | Register file allocation | |
US7533237B1 (en) | Off-chip memory allocation for a unified shader | |
US7852346B1 (en) | Programmable graphics processor for generalized texturing | |
US7038686B1 (en) | Programmable graphics processor for multithreaded execution of programs | |
US10217184B2 (en) | Programmable graphics processor for multithreaded execution of programs | |
US8407443B1 (en) | Off-chip out of order memory allocation for a unified shader | |
US10255228B2 (en) | System and method for performing shaped memory access operations | |
CN1036877C (zh) | 一条多处理器流水线的动态工作量平衡 | |
US9304775B1 (en) | Dispatching of instructions for execution by heterogeneous processing engines | |
US8441495B1 (en) | Compression tag state interlock | |
US8405665B2 (en) | Programmable graphics processor for multithreaded execution of programs | |
US7859548B1 (en) | Offloading cube map calculations to a shader | |
CN111459543B (zh) | 一种管理寄存器文件单元的方法 | |
KR20150101870A (ko) | 메모리의 뱅크 충돌을 방지하기 위한 방법 및 장치 | |
US8860737B2 (en) | Programmable graphics processor for multithreaded execution of programs | |
US8139073B1 (en) | Early compression tag lookup for memory accesses | |
CN105453066A (zh) | 处理器和存储器控制方法 | |
US20240272791A1 (en) | Automatic Data Layout for Operation Chains | |
US11625269B1 (en) | Scheduling for locality of reference to memory | |
US12131188B1 (en) | Scheduling for locality of reference to memory | |
US12045475B1 (en) | Resizable scratchpad memory | |
CN114281414B (zh) | Aigpu架构中urf寄存器的数据写入方法 | |
US20220114234A1 (en) | Matrix processing engine with coupled dense and scalar compute | |
CN117808048A (zh) | 一种算子执行方法、装置、设备及存储介质 |
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: 20120907 Year of fee payment: 5 |
|
FPAY | Annual fee payment |
Payment date: 20130906 Year of fee payment: 6 |
|
FPAY | Annual fee payment |
Payment date: 20140901 Year of fee payment: 7 |
|
FPAY | Annual fee payment |
Payment date: 20180903 Year of fee payment: 11 |