KR20100112099A - 데드락이 없는 파이프라이닝을 위한 시스템 및 방법 - Google Patents

데드락이 없는 파이프라이닝을 위한 시스템 및 방법 Download PDF

Info

Publication number
KR20100112099A
KR20100112099A KR1020100032219A KR20100032219A KR20100112099A KR 20100112099 A KR20100112099 A KR 20100112099A KR 1020100032219 A KR1020100032219 A KR 1020100032219A KR 20100032219 A KR20100032219 A KR 20100032219A KR 20100112099 A KR20100112099 A KR 20100112099A
Authority
KR
South Korea
Prior art keywords
texture
unit
thread
pipeline
operations
Prior art date
Application number
KR1020100032219A
Other languages
English (en)
Other versions
KR101226817B1 (ko
Inventor
마이클 톡스빅
에릭 린드홀름
Original Assignee
엔비디아 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 엔비디아 코포레이션 filed Critical 엔비디아 코포레이션
Publication of KR20100112099A publication Critical patent/KR20100112099A/ko
Application granted granted Critical
Publication of KR101226817B1 publication Critical patent/KR101226817B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/04Texture mapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/524Deadlock detection or avoidance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • G09G5/39Control of the bit-mapped memory
    • G09G5/393Arrangements for updating the contents of the bit-mapped memory

Abstract

데드락 없이 그래픽 처리의 증가를 용이하게 하는 시스템 및 방법이 개시된다. 본 발명의 실시예들은, 실행 유닛 파이프라인 결과들(예를 들어, 텍스쳐 파이프라인 결과들)을 위한 저장소를 제공한다. 저장소는, 레지스터 파일의 해당 위치들이 다른 스레드들의 재할당을 위하여 이용가능한 동안 텍스쳐 유닛이 정보를 저장하기 위하여 사용될 수 있기 때문에 다수의 스레드들의 처리의 증가를 가능하게 한다. 실시예들은, 요청들의 수를 제한하고, 요청들의 세트의 각각의 요청을 완료하기 위하여 이용가능한 리소스들이 존재하지 않으면, 요청들의 세트가 발행되지 않는 것을 보장함으로써 데드락을 방지한다. 따라서, 본 발명의 실시예들은 데드락이 없는, 성능의 증가를 제공한다.

Description

데드락이 없는 파이프라이닝을 위한 시스템 및 방법{SYSTEM AND METHOD FOR DEADLOCK-FREE PIPELINING}
본 발명의 실시예들은 일반적으로 그래픽 처리 유닛들(GPUs)의 인스트럭션 처리에 관한 것이다.
컴퓨터 시스템이 발전함에 따라서, 그래픽 처리 유닛들(GPUs)이 점점 발전하게 되었다. 예를 들어, GPU들은 다수의 실행 유닛들을 포함하며, 전반적으로 높은 GPU 성능을 보장하기 위해 실행 유닛들을 비지(busy) 상태로 유지하는 것이 점점 더 중요한 임무가 되었다.
GPU들은 때로는 텍스쳐(texture) 연산들을 수행하기 위한 텍스쳐 유닛들을 포함한다. 텍스쳐 유닛들은 텍스쳐 연산들을 수행하기 위하여 메모리에 저장된 텍스쳐 데이터에 액세스할 필요가 있다. 메모리 액세스는 일반적으로 GPU의 실행 유닛들의 속도에 비하여 비교적 긴 시간이 걸린다. 따라서, 주어진 시간에 여러 개의 텍스쳐 요청들이 발행된다. 일부 종래의 GPU들에서, 텍스쳐 요청들 각각은 파라미터들을 획득하기 위한 레지스터를 지정하며, 그 레지스터는 통상적으로 텍스쳐 연산의 결과에 대하여 동일하다.
불행하게도, 진행중일 수 있는 텍스쳐 파이프라인의 모든 텍스쳐 연산들에 대한 레지스터 파일 저장소는 대용량의 메모리 저장소에 달한다. 이에 의해 저장 장치의 한계는 발행될 수 있는 요청들의 수에 대한 제한을 만들고, 따라서, 한번에 처리될 수 있는 픽셀들에 대한 제한을 만든다. 하나의 해결책으로서, 텍스쳐 연산의 결과들을 텍스쳐 요청을 포함하였던 저장 위치에 다시 되돌려 기입하는 것이었다. 그러나, 이러한 해결책은 여전히 저장 결과 공간이 텍스쳐 요청에 대해 할당되도록 하고, 이는 주어진 시간에 파이프라인에서 처리될 수 있는 픽셀의 수가 제한됨을 의미하며, 실행 유닛들이 비지 상태로 돌아가지 않을 수 있음으로써, GPU의 전반적인 성능에 영향을 줄 수 있다.
다른 하나의 해결책으로서, 각각의 스레드(thread)가 다수의 미해결의(outstanding) 텍스쳐 요청들을 갖도록 하는 것으로서, 텍스쳐 레이턴시를 커버하기 위하여 몇 개의 스레드들만 요구된다는 것을 의미하기 때문이다. 불행하게도, 각각의 스레드는 또한 중간 결과들의 동시에 저장을 수용하기 위하여 보다 많은 레지스터들을 필요로 할 것이다. 이것은 요구되는 레지스터 파일의 크기를 증가시킨다. 상응하는 큰 레지스터 파일을 필요로 하지 않으면서, 스레드 당 다수의 텍스쳐 인스트럭션을 발행할 수 있도록 하는 것이 유리할 것이다. 이러한 방식으로, 예를 들어, 텍스쳐 연산들에 할당되지 않고 절약되는, 이용가능한 레지스터 파일 크기를 이용하여 보다 많은 스레드들이 발행될 수 있다.
따라서, 저장 요건들을 감소시킬 수 있으며 그래픽 스레드 처리에 대한 데드락(deadlock)을 방지할 수 있는 시스템이 필요하다. 본 발명의 실시예들에서는, 실행 유닛 파이프라인 결과들에 대한 저장소(예를 들어, 텍스쳐 파이프라인 결과들을 위한 버퍼)를 제공한다. 실시예들은 또한 각각의 스레드의 요청들의 수를 제한하고, 요청들의 세트 중 모든 요청들을 완료하기 위해 이용가능한 리소스가 존재하지 않는 한, 요청들의 세트가 발행되거나 시작되지 않는 것을 보장함으로써 데드락을 방지한다. 따라서, 본 발명의 실시예들은 따라서 데드락이 없는 성능 증가를 제공한다.
보다 구체적으로, 본 발명의 실시예들은, 텍스쳐 연산의 결과들이 파이프라인 버퍼에 저장되기 때문에 큰 레지스터 파일 저장소를 필요로 하지 않고 다수의 미해결의 텍스쳐 요청들을 갖는 각각의 스레드의 사용을 증가시킬 수 있도록 한다. 텍스쳐 인스트럭션이 2개의 부분으로 분리되며, 하나는 텍스쳐 유닛에 대해 텍스쳐 요청을 발행하는 것이고, 두번째는 텍스쳐 유닛으로부터 되돌아오는 결과를 판독하는 연산이다. 그 결과가 레지스터 파일이 아닌 파이프라인 버퍼 유닛에 배치된다. 데드락을 회피하기 위하여, 모든 요청들을 버퍼가 수용할 수 없다면, 스레드가 그 요청들을 발행하지 않을 수 있다. 이는 버퍼에 그 데이터가 존재하지 않음으로 인하여 요청이 충족될 수 없는 상황을 회피할 것이다. 버퍼링된 결과들은, 모든 결과 슬롯들이 점유되므로 파이프라인을 스톨링(stalling)하지 않도록 판독될 필요가 있을 것이다. 보다 적은 레지스터 파일 저장소들을 요구함으로써, 보다 많은 스레드들이 동시에 처리될 수 있고, 이에 의해 병렬성을 증가시키고, GPU의 성능을 향상시킬 수 있다.
일 실시예에 있어서, 본 발명은 그래픽 처리 유닛(GPU)의 데드락 방지를 위한 컴퓨터 구현 방법이다. 본 방법은 파이프라인의 부분들(예를 들어, 텍스쳐 파이프라인의 일부 또는 텍스쳐 유닛의 버퍼)일 수 있는 이용가능한 파이프라인 버퍼 리소스들의 수를 판정하고, 첫번째 스레드의 하나 이상의 텍스쳐 요청들에 기초하여 요청되고 있는 리소스들의 수를 판정하는 것을 포함한다. 요청된 리소스들의 수가 버퍼 내의 이용가능한 리소스들의 수보다 작으면, 하나 이상의 요청들에 해당하는 리소스들이 버퍼에 할당되고, 그렇지 않으면, 할당되지 않는다. 본 방법은 또한 이용가능한 리소스들의 수를 조정(예를 들어, 감소시킴)하고, 하나 이상의 요청들을 발행하는 것을 포함한다. 그리고 나서, 리소스들의 수는 다른 연산들에 의해 판독되고 있는 버퍼의 콘텐츠들에 따라서 조정(예를 들어, 증가됨)될 수 있다.
다른 실시예에서, 본 발명은, 텍스쳐 연산이 텍스쳐 요청 연산과 텍스쳐 리드 백(read back) 연산으로 나누지며, 또한 텍스쳐 연산의 결과가 레지스터 파일이 아니라 텍스쳐 파이프라인과 연관된 버퍼에 저장되는, 그래픽 처리를 위한 시스템으로서 구현된다. 시스템은 실행을 위한 스레드를 선택하기 위한 스케줄링 모듈 및 스레드의 텍스쳐 요청들의 수를 판정하기 위한 요청 트랙킹(tracking) 모듈을 포함한다. 텍스쳐 요청들 각각은 실행 파이프라인의 리소스(예를 들어, 텍스쳐 파이프라인의 슬롯 또는 텍스쳐 유닛의 버퍼 슬롯)에 해당할 수 있다. 시스템은 실행 파이프라인의 이용가능한 버퍼 리소스들의 수를 판정하는 리소스 모니터링 모듈 및 데드락 방지를 위하여 이용가능한 리소스들(예를 들어, 텍스쳐 유닛의 슬롯들)의 수에 기초하여 요청들을 실행할지 여부를 판정하고, 실행 파이프라인의 리소스들을 할당하는 실행 모듈을 더 포함한다.
이런 방식으로, 본 발명의 실시예들은 일반적으로 활용성과 그래픽 처리 유닛(GPU)의 성능을 증가시키도록 한다. 실시예들에서는, 결과들을 저장하기 위하여 텍스쳐 파이프라인에 대해 저장소(예를 들어, 버퍼)를 제공함으로써, 레지스터 파일의 저장소를 여유롭게 한다(freeing up). 레지스터 파일에서 이용가능한 공간이 증가되면, 실행 유닛이 보다 많은 스레드들을 동시에 핸들링할 수 있도록 한다는 장점이 있다. 본 발명의 실시예들은 또한 결과들이 판독되는 스레드의 지점에 항상 도달될 수 있도록 이용가능한 버퍼 리소스들에 기초하여 발행될 수 있는 다수의 텍스쳐 요청들의 수를 제어함으로써 데드락을 방지한다. 따라서, 본 발명의 실시예들은 데드락이 없는 성능 증가를 제공한다.
또 다른 실시예에 있어서, 본 발명은 레지스터 파일이 아니라 파이프라인 버퍼에 텍스쳐 결과들을 저장하며, 텍스쳐 인스트럭션을 텍스쳐 요청과 텍스쳐 리드 백 연산을 포함하는 2개의 연산들로 분할하는 시스템에 있어서, 계산 데드락을 방지하기 위한 방법으로서 구현된다. 본 방법은 실행 유닛 프로파일(예를 들어, 텍스쳐 유닛에 대한)에 액세스하는 것을 포함한다. 실행 유닛 프로파일은 클록 사이클 당 처리되는 유닛들의 수 및 파이프라인 리소스들의 수를 포함할 수 있다. 파이프라인 리소스들의 수는 파이프라인 깊이 및 버퍼 크기를 포함할 수 있다. 본 방법은 데드락 없이 실행될 수 있는 스레드 및 스레드들 당 요청들의 수를 판정하고, 그 다수의 스레드들에 대해서만 동시에 연산하는 것을 더 포함한다.
본 발명은 첨부하는 도면들의 그림들에서 한정적이 아닌 예로써 예시되며, 도면들에서 유사한 참조 번호들은 유사한 구성요소들을 지칭한다.
도 1은 본 발명의 일 실시예에 따른 예시적인 컴퓨터 시스템을 도시한다.
도 2는 본 발명의 일 실시예에 따른 예시적인 실행 유닛의 블록도를 도시한다.
도 3은 본 발명의 일 실시예에 따른 예시적인 스레드의 도면을 도시한다.
도 4는 본 발명의 일 실시예에 따른 예시적인 시스템의 블록도를 도시한다.
도 5는 GPU(Graphics Processing Unit)의 데드락 방지를 위한 예시적인 컴퓨터 제어 처리의 흐름도를 도시한다.
도 6은 본 발명의 일 실시예에 따른, 데드락 방지를 위한 예시적인 컴퓨터 제어 처리의 흐름도를 도시한다.
이하, 본 발명의 바람직한 실시예들에 대하여 상세하게 설명할 것이며, 그 예들은 첨부하는 도면들에 도시되어 있다. 바람직한 실시예와 연계하여 본 발명이 설명될 것이나, 본 발명을 이러한 실시예들에 한정하도록 의도되는것이 아니라는 것을 이해할 수 있을 것이다. 이에 반하여, 본 발명은 첨부된 특허청구범위에 정의된 바와 같이 본 발명의 사상과 범주 내에 포함될 수 있는 대안들, 변형들, 및 균등물들을 포괄하도록 의도된다. 또한, 이하의 본 발명의 실시예의 상세한 설명에 있어서, 본 발명의 완전한 이해를 제공하기 위하여 다수의 특정 세부사항들이 개시된다. 그러나, 본 기술분야의 당업자라면, 본 발명은 이러한 특정 세부사항 없이도 실시될 수 있다는 것을 이해할 수 있을 것이다. 다른 예들에 있어서, 주지된 방법들, 절차들, 컴포넌트들, 및 회로들은 본 발명의 실시예들의 양태들을 불필요하게 모호하게 하지 않도록 상세하게 설명하지는 않았다.
표기 및 명명법:
이하의 상세한 설명 중 일부는 컴퓨터 메모리 내의 데이터 비트들에 대한 연산들의 절차들, 단계들, 논리 블록들, 처리들, 및 기타의 심볼 표현들의 관점에서 제공된다. 이러한 설명들 및 표현들은 본 기술분야의 다른 당업자에게 그 작업의 실체를 가장 효과적으로 전달하도록 데이터 처리 분야의 당업자에 의해 이용되는 수단이다. 여기서, 절차, 컴퓨터 실행 단계, 논리 블록, 처리, 등은 일반적으로 원해지는 결과에 이르는 단계들 또는 인스트럭션들의 일관성있는(self-consistent) 시퀀스로서 이해된다. 단계들은 물리량들의 물리적 조작들을 필요로 하고 있다. 반드시 그런 것은 아니지만, 일반적으로 이러한 양들은 컴퓨터 시스템에서 저장, 전송, 결합, 비교, 및 다른 방법으로 조작될 수 있는 전기적 또는 자기적 신호들의 형태를 취한다. 대체로 통상적인 사용의 이유를 위해, 이러한 신호들을 비트, 값, 구성요소(element), 심볼, 문자, 용어, 숫자, 등으로 지칭하는 것이 편리한 것으로 밝혀졌다.
그러나, 이러한 용어들 전부 및 유사한 용어들은 적절한 물리량들과 연관되며, 이러한 물리량들에 적용되는 단지 편리한 표기들일 뿐이라는 점을 명심해야 한다. 이하의 설명들로부터 명백하듯이 달리 구체적으로 언급하지 않는 한, 본 발명 전체에서 "처리(processing)" 또는 "액세싱(accessing)" 또는 "실행(executing)" 또는 "저장(storing)" 또는 "렌더링(rendering)" 등의 용어를 이용하는 설명은 컴퓨터 시스템의 레지스터들 및 메모리들 내의 물리(전자)량들로서 나타낸 데이터를 조작하여, 컴퓨터 시스템 메모리들 또는 레지스터들 또는 그외의 그러한 정보 저장소, 전송 또는 표시 디바이스들 내의 물리량으로서 유사하게 나타낸 다른 데이터로 변환하는 집적 회로(예를 들어, 도 1의 컴퓨팅 시스템(100)) 또는 유사한 전자 컴퓨팅 디바이스의 액션(action) 및 처리를 일컫는 것으로 이해된다.
컴퓨터 시스템 플랫폼:
도 1은 본 발명의 일 실시예에 따른 컴퓨터 시스템(100)을 나타낸다. 컴퓨터 시스템(100)은 특정 하드웨어 기반 및 소프트웨어 기반 기능을 위한 실행 플랫폼을 제공하는 본 발명의 실시예에 따른 기본적인 컴퓨터 시스템의 컴포넌트들을 도시한다. 일반적으로, 컴퓨터 시스템(100)은 적어도 하나의 CPU(101), 시스템 메모리(115), 및 적어도 하나의 그래픽 처리 유닛(GPU)(110)을 포함한다. CPU(101)는 브릿지 컴포넌트/메모리 컨트롤러(도시되지 않음)를 통해 시스템 메모리(115)에 연결되거나, CPU(101) 내부의 메모리 컨트롤러(도시되지 않음)를 통해 시스템 메모리(115)에 직접 연결될 수 있다. GPU(110)는 디스플레이(112)에 연결된다. 하나 이상의 추가의 GPU가 시스템(100)에 선택적으로 연결되어, 그 계산력을 증가시킬 수 있다. GPU(들)(110)은 CPU(101) 및 시스템 메모리(115)에 연결된다. GPU(110)는 개별 컴포넌트, 커넥터(예를 들어, AGP 슬롯, PCI-Express 슬롯, 등)를 통해 컴퓨터 시스템(100)에 연결되도록 설계되는 개별 그래픽 카드, 개별 집적 회로 다이(예를 들어, 마더보드 상에 직접 실장됨), 또는 컴퓨터 시스템 칩셋 컴포넌트(도시되지 않음)의 집적 회로 다이 내에 포함되는 집적 GPU로서 구현될 수 있다. 또한, 로컬 그래픽 메모리(114)가 고대역폭 그래픽 데이터 저장을 위하여 GPU(110)에 포함될 수 있다.
CPU(101) 및 GPU(110)는 또한 단일 집적회로 다이에 집적될 수 있으며, CPU 및 GPU는 인스트럭션 로직, 버퍼들, 기능 유닛들, 등과 같은 각종 리소스들을 공유하거나, 별도의 리소스들이 그래픽 및 범용 연산들을 위하여 제공될 수 있다. GPU는 코어 로직 컴포넌트에 또한 집적될 수 있다. 따라서, GPU(110)와 연관되는 것으로서 본 명세서에서 설명된 회로들 및/또는 기능 중 일부 또는 전부는 적절하게 구비된 CPU(101)에 구현되어, 이에 의해 수행될 수 있다. 또한, 본 명세서의 실시예들은 GPU를 지칭할 수 있지만, 설명된 회로들 및/또는 기능은 또한 다른 유형의 프로세서들(예를 들어, 범용 또는 그외의 특수 목적 코프로세서들) 또는 CPU 내에 구현될 수 있다는 점을 유의해야 한다.
시스템(100)은, 예를 들어, 전용 그래픽 렌더링 GPU(110)에 연결되는 강력한 범용 CPU(101)를 갖는 데스크톱 컴퓨터 시스템 또는 서버 컴퓨터 시스템으로서 구현될 수 있다. 이러한 실시예에서, 주변 버스들, 특화된 오디오/비디오 컴포넌트들, IO 디바이스들, 등을 추가하는 컴포넌트들이 포함될 수 있다. 마찬가지로, 시스템(100)은 핸드헬드 디바이스(예를 들어, 휴대전화 등), DBS(Direct Broadcast Satellite)/지상파 셋톱 박스 또는, 예를 들어, Washington, Redmond의 Microsoft사의 Xbox®, 또는 Japan, Tokyo, Sony Computer Entertainment사의 PlayStation3® 등의 셋톱 비디오 게임 콘솔 디바이스로서 구현될 수 있다. 시스템(100)은 또한 컴퓨팅 디바이스의 전자장치들(예를 들어, 컴포넌트들(101, 115, 110, 114) 등)들이 전부 단일 집적 회로 다이 내에 포함되는 "시스템 온 칩"으로서 구현될 수 있다. 예로서는, 디스플레이를 갖는 핸드헬드 기구, 자동차 내비게이션 시스템, 휴대용 엔터테인먼트 시스템, 등을 포함한다.
본 발명의 실시예들은, 일반적으로, GPU의 그래픽 처리 이용의 증가를 용이하게 하며, 따라서, 그래픽 처리 유닛(GPU)의 성능의 증가를 용이하게 한다. 실시예들은 텍스쳐 결과들을 저장하는 텍스쳐 파이프라인 버퍼를 제공함으로써, 종래에 이용되는 레지스터 파일의 저장소를 여유롭게 한다. 레지스터 파일에서 이용가능한 공간의 증가는 실행 유닛이 동시에 보다 많은 스레드들을 핸들링할 수 있도록 한다. 본 발명의 실시예들은 결과들이 리드 백(read back)되는 각 스레드의 지점이 항상 도달 및 실행 가능하게 되도록 파이프라인에 대하여 발행될 수 있는 다수의 텍스쳐 요청들의 수를 제어함으로써 파이프라인 데드락을 더욱 방지한다. 따라서, 본 발명의 실시예들은 데드락이 없는 프로세서 성능의 증가를 제공한다.
도 2는 본 발명의 일 실시예에 따른 GPU의 예시적인 실행 유닛의 블록도를 나타낸다. 실행 유닛(200)은 텍스쳐 유닛(202), 매스(math) 유닛(220), 스케줄러(230), 및 레지스터 파일(240)을 포함한다. GPU(예를 들어, GPU(110))는 다수의 스레드들의 병렬 실행을 위한 실행 유닛(200)과 실질적으로 마찬가지인 다수의 실행 유닛들을 가질 수 있다. 예를 들어, GPU는 각각이 2개의 실행 유닛을 갖는 8개의 프로세서 그룹들을 가질 수 있다. 따라서, 실시예들은, SIMD(Single Instruction Multiple Data) 실행을 지원할 수 있다(예를 들어, 16개의 병렬 픽셀에 대하여 하나의 인스트럭션). 일 실시예에 있어서, 본 명세서에서 설명한 바와 같이, 스레드는 본 기술분야에 공지된 바와 같이 이미지 또는 비디오 프레임의 개별 픽셀이다.
텍스쳐 유닛(202)은 텍스쳐 파이프라인(204)과 파이프라인 버퍼(210)를 포함한다. 텍스쳐 파이프라인(204)은 N개의 슬롯들 또는 파이프라인 위치들(206 내지 208)를 갖는다. 텍스쳐 파이프라인(204)은 결과들을 파이프라인 버퍼(210)에 기입한다. 텍스쳐 연산들은 때로는 메모리로 진행할 것을 요구하며, 이는 비교적 긴 시간(예를 들어, 300 클록 사이클)을 필요로 한다. 따라서, 텍스쳐 파이프라인(204)은 이러한 지연을 수용하도록 300개의 슬롯들 또는 구성요소들 길이일 수 있다. 예를 들어, 텍스쳐 파이프라인(204)은 이웃하는 픽셀들을 분석하고 텍스쳐 내의 픽셀들 각각이 얼마나 멀리 떨어져 있는지를 판정함으로써, LOD(Level of Detail) 계산을 계산하기 위하여 클록 사이클 당 4개의 픽셀들을 수신하도록 동작가능한 각각의 슬롯을 가질 수 있다. 텍스쳐 파이프라인(204)을 충분한 워크로드(workload)를 갖는 비지 상태로 유지하기 위하여, 슬롯당 4개의 픽셀을 갖는 깊이의 300개의 슬롯을 갖는 텍스쳐 유닛에 대하여 1200개의 픽셀들 또는 스레드의 작업이 필요하다. 텍스쳐 연산들이 텍스쳐 파이프라인(204)에 의해 수행되는 동안, 다른 스레드들이 작업될 수 있다. 다수의 텍스쳐 연산들을 백투백(back to back)으로 발행하는 스레드들에 있어서, 파이프라인을 채운 상태(full)로 유지하기 위하여 더 적은 스레드들이 요구된다. 예를 들어, 2개의 텍스쳐 연산들을 백투백으로 발행하는 스레드들에 있어서, 파이프라인을 채운 상태로 유지하기 위하여 오직 절반에 해당하는 스레드들만이 필요하다.
매스 유닛(220)은 슬롯들(224 내지 226)을 갖는 매스 파이프라인(222)을 포함한다. 스레드가 텍스쳐 요청이 완료되기를 대기하는 동안, 매스 유닛(220)으로 매스 요청이 발행될 수 있다. 일 실시예에 있어서, 매스 유닛(220)은 레지스터 파일(240)로부터 소스 데이터를 획득하여, 레지스터 파일(240)에 결과들의 데스티네이션 데이터를 반환한다. 예를 들어, 매스 유닛(220)이 클록당 16개의 픽셀들을 핸들링하여 결과들을 반환하기 위하여 5개의 클록을 취할 수 있다면, 인스트럭션들이 독립적이고 각각의 스레드가 한번에 하나의 미해결 인스트럭션을 갖는 한, 80개의 스레드가 매스 유닛을 비지 상태로 유지할 것이다. 또 다른 예로서, 각각의 스레드가 매스 인스트럭션을 발행할 수 있는 경우에, 각각의 사이클은 파이프라인을 비지 상태로 유지하기 위하여 16개의 스레드들을 필요로 하게 된다. 상기 예를 참조하면, 1280개의 스레드들이 텍스쳐 유닛(202) 및 매스 유닛(220) 양측을 비지 상태로 유지할 것이다. 1280개의 스레드들이 이용가능하지 않다면, 실행 유닛들은 하는 일 없이 내버려 두게 되어 아무런 처리 활동이 없는 버블 또는 주기(period)를 야기한다. 실행 유닛의 버블들은 파이프라인이 로딩되고 있는 경우를 제외하면 바람직하지 않은 것으로 이해된다.
성능을 향상시키기 위하여는 파이프라인을 통해 보다 많은 스레드들을 처리하는 것이 바람직하다. 따라서, 다수의 텍스쳐 연산들을 갖는 스레드들을 이용하면, 다수의 증가된 텍스쳐 스레드들이 동시에 처리될 수 있도록 한다. 본 발명의 실시예들은, 상응하는 큰 레지스터 파일을 필요로 하지 않고 텍스쳐 저장소를 제공하기 위한 유리한 수단으로서 파이프라인 버퍼(210)를 제공하며, 이는 통상적으로 동시에 처리되는 스레드들의 수의 증가를 수용하기 위하여 종래 기술에서 요구된다.
레지스터 파일(240)은 스레드 정보를 저장한다. 각각의 작업 유닛은 스레드를 핸들링하기 위한 작업 유닛과 연관되는 상태 정보를 갖는다. 예를 들어, 하나의 픽셀 상태 정보는, X, Y, 및 텍스쳐 좌표들을 포함할 수 있다. 레지스터 파일(240)의 크기는 텍스쳐 유닛과 매스 유닛의 폭(예를 들어, 클록당 픽셀들) 및 깊이(예를 들어, 클록 사이클들)에 기초할 수 있다. 즉, 레지스터들의 수는 미완료(incomplete) 상태에서 실행 유닛(200)에 상주할 수 있는 픽셀들 또는 스레드들의 수를 제어한다. 일 실시예에서, 텍스쳐 데이터에 대한 저장소로서 텍스쳐 파이프라인(204) 및 파이프라인 버퍼(210)를 사용하는 것은, 동일한 수의 스레드들을 처리하기 위한 레지스터 파일(240)의 필요한 리소스들을 감소시키며, 또는 대안적으로, 동일한 크기의 레지스터 파일이 증가된 수의 스레드들을 처리할 수 있으며, 이에 의해, 종래 유닛에 대하여 성능을 향상시킨다.
일 실시예에 있어서, 스케줄러(230)는 텍스쳐 연산들의 좌표들을 텍스쳐 파이프라인(202)에 기입한다. 텍스쳐 파이프라인(202)에 기입되는 좌표에 해당하는 레지스터 파일(240) 내의 어떠한 저장 위치도 요구되지 않는다. 일 실시예에 있어서, 텍스쳐 유닛(202)은 텍스쳐 파이프라인(204)으로 진입하기 전에 저장되어야 하는 텍스쳐 연산 요청들에 대한 버퍼(도시 생략)를 가질 수 있다. 텍스쳐 파이프라인(204)에 진입하기 전에 저장되어야 하는 텍스쳐 연산들을 위한 버퍼는, 텍스쳐 파이프라인(204) 이전의 버퍼에서 텍스쳐 좌표들이 생성되도록 함으로써, 그렇지 않은 경우에 텍스쳐 좌표들을 버퍼링하기 위하여 이용될 수 있는 레지스터들을 여유롭게 한다.
파이프라인 버퍼(210)는, 텍스쳐 파이프라인(204)으로부터 출력된 결과들을 저장하도록 동작가능하다. 스레드는 판독되지 않은 결과로 점유되고 있는 각각의 슬롯으로부터 파이프라인이 스톨링(stalling)하기 전에 텍스쳐 파이프라인으로부터 텍스쳐 연산 결과를 판독한다. 파이프라인 버퍼(210)는 N개의 슬롯들 또는 저장 위치들(212 내지 214)을 포함한다. 파이프라인 버퍼(210)는 파이프라인 버퍼(210)로부터 결과가 판독될 것이 요구되기 전에 특정 시간량이 파이프 라인을 스톨링 하지 않도록 한다. 파이프라인 버퍼(210)는 텍스쳐 파이프라인(204)에 대해 요청들이 발행되는 때에, 그리고 텍스쳐 요청이 텍스쳐 파이프라인(204)에 의해 처리되는 동안 레지스터 파일(240)의 결과에 대하여 공간이 할당되도록 하지 않고 텍스쳐 파이프라인(204)에 대하여 텍스쳐 요청들이 발행되도록 하는 것으로 이해된다. 따라서, 파이프라인 버퍼(210)로부터의 결과를 판독하기 위한 저장소는 파이프라인 버퍼(210)에서 이용가능하게 되어 있는 결과에 따라서 동적으로 할당될 수 있다. 텍스쳐 연산들은 레지스터 파일을 사용하지 않으므로, 본 발명의 일 실시예에 따르면, 각각의 텍스쳐 연산은 2개의 연산들, 즉, 텍스쳐 유닛에 대한 요청(텍스쳐 요청)과 텍스쳐 유닛으로부터 결과를 리드 백(read back)하는 연산으로 분리된다.
일 실시예에 있어서, 텍스쳐 파이프라인(202)의 슬롯에 텍스쳐 요청이 발행되는 때에, 텍스쳐 요청의 결과를 저장하기 위하여 파이프라인 버퍼(210)의 슬롯이 지정된다. 파이프라인 버퍼(210)는, 이에 한하지는 않지만, 선입선출(FIFO) 버퍼를 포함하는 다양한 저장소 유형들일 수 있다. 결과들은 비순차적 방식(in an out of order manner)으로 파이프라인 버퍼(210)로부터 판독될 수 있는 것으로 이해된다. 예를 들어, 16개의 슬롯들을 갖는 버퍼에 있어서, 발행된 16번째 요청에는 각각 동일한 슬롯이 지정되게 된다. 또한, 16개의 슬롯들을 갖는 버퍼에 있어서, 모든 버퍼 슬롯들이 이용가능하지 않게 되기 때문에(예를 들어, 판독되지 않은 결과들을 가짐) 파이프라인을 스톨링 하는 것을 방지하기 위하여 텍스쳐 파이프라인으로부터의 각각의 결과는 16개의 클록 사이클 내에 판독되어야 한다. 버퍼 슬롯은, 인스트럭션이 텍스쳐 파이프라인으로 진입하는 사이클에 기초할 수 있다.
일부 텍스쳐링 연산들은 다른 텍스쳐링 연산들보다 실질적으로 더 많은 저장소를 필요로 할 수 있다. 예를 들어, 텍스쳐링 연산은 16개의 샘플들에서 텍스쳐를 샘플링하고 그 결과를 평균화할 것을 필요로 할 수 있다. 종래의 텍스쳐 파이프라인들에 있어서, 나중에 평균화될 수 있는 위치들 각각에 대하여 16개의 샘플들이 필요할 것이다. 종래의 파이프라인들의 레지스터 파일의 증가된 저장소는 주어진 시간에서 처리될 수 있는 스레드들의 수를 제한한다. 본 발명의 실시예들에서는 텍스쳐 파이프라인에 대하여 16개의 요청들을 발행한 후, 한번에 하나씩 결과들을 판독하여, 그 결과들을 지금까지의 결과들에 가산함으로써, 레지스터 파일(240)의 16개 샘플들에 대한 공간에 대한 필요성을 감소시키거나 방지할 수 있다. 또한, 컴파일러는, 데이터가 레지스터 파일에 저장되거나, 텍스쳐 파이프라인 버퍼(210)에서 결과가 수신됨에 따라 계산될 수 있는 경우를 판정하는 것에 관여한다는 것이 이해된다.
파이프라인 버퍼(210)의 이용은, 결과에 대하여 저장 위치들이 요구되기 전에 요청들이 발행될 수 있으므로, 더 작은 레지스터 파일의 사용을 가능하게 한다. 예를 들어, 16개의 요청들이 발행되며, 이에 따라, 레지스터 파일의 좌표들에 해당하는 공간이 추가의 스레드에 재할당될 수 있다. 텍스쳐 결과들이 평균화되는 상기 예를 참조하면, 그 결과들이 하나의 레지스터에서 결합될 수 있기 때문에, 그 결과들은 공간의 할당을 요구하지 않는다. 따라서, 파이프라인 버퍼(210)는 주어진 시간에서 더 많은 스레드들의 처리를 용이하게 함으로써, 실행 유닛을 비지 상태로 유지시킨다. 보다 구체적으로, 텍스쳐 파이프라인(204)에 기입되었던 좌표들 또는 기타의 데이터를 저장한 레지스터 파일(240)의 일부는 이제 다른 스레드들에 대한 데이터의 저장소 용으로 이용가능하기 때문에, 파이프라인 버퍼(210)는 텍스쳐 파이프라인(204)이 저장소로서 효과적으로 이용될 수 있도록 한다. 파이프라인 버퍼(210)는 주어진 시간에서 보다 많은 스레드들의 처리를 가능하게 함으로써 버블들을 더욱 방지하는 것으로 이해된다.
파이프라인 버퍼(210)의 이용은 소오스 인스트럭션 및 데스티네이션 인스트럭션의 에뮬레이션(emulation)을 가능하게 한다. 일 실시예에 있어서, 스케줄러(230)의 상태 머신은 텍스쳐 요청들을 텍스쳐 유닛(204)에 기입하며, 결과들을 위한 저장소로서 레지스터 파일(240)을 이용하는 대신 파이프라인 버퍼(210)에서 결과를 판독한다. 예를 들어, 레지스터들 R0 내지 R3의 데이터가 텍스쳐 파이프라인(204)에 기입되고, 그 결과들이 파이프라인 버퍼(210)로부터 판독되어 레지스터들 R0 내지 R3에 저장되는 경우에, 레지스터들 R0 내지 R3에 저장된 좌표의 텍스쳐 연산을 위한 인스트럭션(예를 들어, "text R0-R3")이 실행될 수 있다. 소오스 및 데스티네이션 인스트럭션은 이하의 2개의 인스트럭션이 될 수 있는 것으로 이해된다: 1) 텍스쳐 인스트럭션을 텍스쳐 파이프라인에 기입하는 인스트럭션, 및 2) 버퍼에 대한 텍스쳐 유닛으로부터의 결과를 판독하는 인스트럭션.
도 3은 다중 텍스쳐 연산을 가능하게 하는 본 발명의 일 실시예에 따른 예시적인 스레드의 도면을 나타낸다. 예시적인 스레드(300)는 요청 A(304), 요청 B(306), 요청 C(308), 요청 D(310), MADD(312), 판독 결과 A(314), 판독 결과 B(316), 판독 결과 C(318), 및 판독 결과 D(320)를 포함한다. MADD 인스트럭션들(예를 들어, MADD(312))은 텍스쳐 결과에 의존하지 않을 수 있으므로 텍스쳐 결과를 대기할 필요가 없는 것으로 이해된다. 일 실시예에서, GPU 실행 유닛(예를 들어, 실행 유닛(200))에 의해서 스레드(300)가 실행된다. 스레드(300)는 더 많은 요청들, MADD, 및 판독 결과들을 포함할 수 있는 것으로 이해된다. 요청들(304 내지 310), MADD(312), 및 판독 결과들(314 내지 320)은 컴파일러에 의해 배치되어 있을 수 있다.
프로그램 카운터(302)는 요청 A(304)에서 스레드(300)의 실행을 시작한다. 일 실시예에서, 요청들의 수가 판정되며, 본 예에서, 4개의 텍스쳐 요청들(304 내지 310)이 존재한다. 4개의 텍스쳐 유닛 리소스들이 이용가능하게 되어 있는지 여부에 대하여, 이용가능한 리소스들의 수(예를 들어, 파이프라인 슬롯들 및 버퍼 저장 위치들을 포함하는 텍스쳐 유닛 슬롯들)가 조사된다. 4개의 이용가능한 텍스쳐 리소스들이 존재하면, 리소스 할당 카운터가 파이프라인(204)에 대해 발행되고 있는 요청들(304 내지 310)에 대응하여 4 만큼 증분될 수 있다. 스레드(300)에 대하여 4개의 텍스쳐 리소스들을 할당하는 것은, 텍스쳐 연산들이 완료되는 경우, 데드락을 방지하기 위하여 결과들(314 내지 320)이 (예를 들어, 파이프라인 버퍼(210)로부터) 판독가능하게 되는 것을 보장한다. 일 실시예에서, 리소스들의 체크와 리소스들의 할당은 원자적 연산(atomic operation)이다.
이용가능한 4개의 텍스쳐 리소스들이 존재하지 않으면, 이용가능한 4개의 텍스쳐 리소스들이 존재할 때까지 스레드(300)가 슬립(sleep) 상태로 될 수 있다. 그 스레드의 실행을 위한 충분한 리소스가 있는 경우, 또 다른 스레드가 실행될 수 있다. 텍스쳐 연산들이 텍스쳐 파이프라인을 따라 하향 진행하고, 텍스쳐 처리 결과들이 파이프라인 버퍼로부터 판독됨에 따라서 텍스쳐 리소스가 이용가능하게 된다. 실시예들에 따르면, 스레드는 오직 모든 텍스쳐 요청들이 파이프라인에 놓이게 되거나 아무것도 놓이지 않게 되도록 허용된다. 이는 스레드가 파이프라인 버퍼로부터 텍스쳐 처리 결과들을 판독할 수 있는 지점에 이를 때까지 그 텍스쳐 패치들(texture fetches) 중 어느 것도 발행할 수 없기 때문에 데드락을 방지한다. 결과 버퍼가 풀(full) 상태가 되면, 파이프라인은 무언가가 판독될 때까지 중단된다. 텍스쳐 결과를 판독할 것으로 예상되는 스레드들이 텍스쳐 요청들을 더 발행하기 위해 대기하고 있다면, 데드락을 만들어 낸다. 또한, 이러한 스레드들이 텍스쳐 결과들을 판독하지 않는 쉐이더 프로그램(shader program)을 통해 경로를 취한다면, 데드락을 만들어 낸다.
일 실시예에 있어서, 프로그램 카운터(302)가 요청들(306 내지 308)로 이행함에 따라서, 요청들(306 내지 308)의 발행과 관련하여 리소스 할당 카운터가 변경되지 않을 수 있다. 판독 요청들(314 내지 320) 각각이 발행되면, 판독 요청들(314 내지 320) 각각이 수행됨에 따라 여유(free) 상태로 되는 파이프라인 버퍼(예를 들어, 파이프라인 버퍼(210))의 슬롯에 상응하여 1 만큼 리소스 할당 카운터가 감소될 수 있다.
리소스 트랙킹(resource tracking)은 다양한 방식으로 수행될 수 있는 것으로 이해된다. 예를 들어, 텍스쳐 유닛 내의 많은 여유 상태 또는 이용가능한 리소스들에 대하여 리소스 할당 카운터가 초기화될 수 있으며, 일련의 요청들이 발행되는 때마다 요청들의 수만큼 카운터가 감소된다. 각각의 결과가 텍스쳐 유닛으로부터 판독되면, 카운터가 증분된다(예를 들어, 결과(314 내지 320)가 판독됨에 따라서 카운터가 증분됨). 이는 동적 할당 구조를 나타낸다.
데드락 방지를 위하여 정적 할당이 또한 이용될 수 있는 것으로 이해된다. 본 실시예에 있어서, 시스템이 얼마나 많은 스폿(spot)들을 보유할 수 있는지를 파악한다. 예를 들어, 텍스쳐 파이프라인에 400개의 리소스들이 이용가능하며, 각각의 스레드가 4개의 텍스쳐 연산들을 필요로 하면, 스케줄러(230)는 데드락을 방지하기 위하여 언제든지 100개의 동시 스레드들만을 허용한다. 본 예에서는 카운터가 필요치 않다.
실행을 최적화하도록 컴파일러에 의해 스레드의 인스트럭션들이 배치되거나 정렬될 수 있는 것으로 또한 이해된다. 예를 들어, 텍스쳐 요청이 처리중인 동안에 매스 요청(math request)들이 완료될 수 있도록, 텍스쳐 요청들이 매스 요청들에 의존하지 않게, 매스 요청들(예를 들어, MADD(312)) 앞에 텍스쳐 요청들이 이동될 수 있다. 이러한 인스트럭션들의 재배치는, 인스트럭션들이 동시에 실행되어 텍스쳐 요청 정보가 텍스쳐 유닛(예를 들어, 텍스쳐 유닛(202))에 저장되기 때문에, 스레드들이 더 적은 공간을 점유하도록 한다. 컴파일러는 기대되는 워크로드 비율(예를 들어, 각각의 텍스쳐 요청에 대하여 4개의 매스 요청)를 유지하도록 인스트럭션들을 더 배치할 수 있다. 워크로드 비율은 이에 맞추어 하드웨어 유닛들이 설계되는 인자일 수 있으며, 작업을 그 비율 근방에서 밸런싱하는 것은 워크로드의 버블들이 최소화되도록 보장하는 것으로 이해된다.
도 4는 본 발명의 다양한 실시예에 의해 이용되는 예시적인 컴포넌트들을 예시한다. 시스템(400)에 특정 컴포넌트들이 개시되어 있지만, 이러한 컴포넌트들은 예들일 뿐임을 이해해야 한다. 즉, 본 발명의 실시예들은 시스템(400)에 인용된 성분들의 변형들 또는 다양한 그외의 컴포넌트들을 갖도록 적합화된다. 시스템(400) 내의 컴포넌트들은 도시된 것들과 다른 컴포넌트들과 동작하며, 시스템(400)의 컴포넌트들 전부가 시스템(400)의 목적을 성취하기 위해 요구되지 않을 수 있는 것이 이해된다.
도 4는 본 발명의 일 실시예에 따른 예시적인 시스템의 블록도를 도시한다. 시스템(400)은 하드웨어 또는 소프트웨어로 구현될 수 있다. 일 실시예에서, 시스템(400)은 디스플레이 상의 이미지 또는 비디오의 렌더링을 위한 그래픽 인스트럭션들의 처리를 용이하게 한다. 시스템(400)은 GPU의 일부일 수 있는 실행 유닛(410)과 통신하거나 및/또는 실행 유닛(410)을 제어한다. 시스템(400)은 스케줄링 모듈(402), 요청 트랙킹 모듈(404), 리소스 모니터링 모듈(406), 및 실행 모듈(408)을 포함한다.
스케줄링 모듈(402)은 실행을 위한 스레드를 선택한다. 스케줄링 모듈(402)은 실행을 위한 스레드 및 스레드의 일부의 실행 스케줄을 선택할 수 있다(예를 들어, 하나 이상의 텍스쳐 요청 및 하나 이상의 매스 요청). 스케줄링 모듈(402)은 실행을 위한 다음 스레드 및 그 일부를 선택할 수 있다.
요청 트랙킹 모듈(404)은 텍스쳐 요청들의 수를 판정한다. 일 실시예에서, 텍스쳐 유닛(412) 또는 매스 유닛(414)의 실행 파이프라인에 대해 요청들이 발행될 수 있다. 보다 구체적으로, 요청들의 수는 텍스쳐의 결과들의 판독 이전의 텍스쳐 파이프라인에 대한 텍스쳐 요청들의 수일 수 있다. 일 실시예에서, 텍스쳐 유닛(412)의 텍스쳐 파이프라인은 텍스쳐 유닛(412)의 텍스쳐 파이프라인으로부터의 결과들을 저장하기 위한 버퍼를 포함한다. 본 명세서에서 설명하는 바와 같이, 컴파일러에 의해 요청들이 배치되어 있을 수 있다.
리소스 모니터링 모듈(406)은 실행 파이프라인(예를 들어, 텍스쳐 파이프라인 및 파이프라인 버퍼)의 이용가능한 리소스들의 수를 판정한다. 일 실시예에서, 리소스 모니터링 모듈(406)은 텍스쳐 유닛(412)의 실행 파이프라인의 이용가능한 리소스들의 수를 판정한다. 다른 실시예에서, 리소스 모니터링 모듈(406)은 이용가능한(예를 들어, 할당되지 않은) 리소스들의 수에 상응하는 카운터에 기초하여 이용가능한 리소스들의 수를 판정한다(예를 들어, 동적 아키텍쳐). 또 다른 실시예에서, 리소스 모니터링 모듈(406)은 주어진 시간에 진행중일 수 있는 스레드의 최대수에 해당하는 수를 조사함으로써 이용가능한 리소스들의 수를 판정한다(예를 들어, 정적 아키텍쳐).
실행 모듈(408)은 이용가능한 리소스들의 수에 기초하여 요청들을 실행할지의 여부를 판정하고, 실행 파이프라인의 리소스들을 할당한다. 요청의 데이터를 저장하기 위해 적절한 리소스들이 이용가능하지 않다면, 요청 또는 요청의 그룹이 발행되지 않는다. 일 실시예에서, 실행 모듈(408)은 요청들을 실행할 지의 여부를 판정하고, 파이프라인의 리소스들을 원자적 연산(atomic operation)으로서 할당하여, 동일한 리소스들이 2개 이상의 스레드에 지정되는 병렬 스레드 실행 문제를 방지한다.
요청들을 실행할 지와 리소스들을 할당할 지의 여부에 대한 실행 모듈(408)의 판정은 데드락을 방지한다. 실행 모듈(408)은 (요청들과 함께) 스레드의 부분들이, 결과들이 판독되는 부분들로 항상 진행할 것을 보장한다. 즉, 파이프라인 콘텐츠는 오직 그것들이 판독되는 때에 비워지게 된다. 파이프라인이 풀 상태이므로 그 콘텐츠를 판독할 수 있는 지점에 스레드가 도달할 수 없다면, 데드락이 발생한다. 본 발명의 실시예들은, 일련의 요청들이 발행되기 전에 리소스들의 완전한 할당을 허용하거나, 또는 아무런 요청이 발행되지 않게 한다. 이는, 텍스쳐 유닛으로부터의 결과들이 판독되는 부분으로 프로그램이 진행할 수 있게 되는 것으로 조사될 때까지 모든 텍스쳐 요청들이 발행되지 않기 때문에 데드락을 방지한다. 일반적으로 말해서, X 텍스쳐 요청들을 갖는 스레드에 있어서, X 텍스쳐 요청들이 발행되기 전에 텍스쳐 유닛의 X 슬롯들이 확보 또는 할당된다.
예를 들어, 텍스쳐 파이프라인이 300개의 슬롯들을 갖고, 버퍼가 16개의 슬롯들 또는 저장 위치들을 갖는 경우, 파이프라인의 중지(halting)없이 316개의 텍스쳐 요청들이 이루어질 수 있다. 결과들이 판독될 때까지 각각의 요청에 대하여 슬롯들이 그룹으로 확보된다. 예를 들어, 스레드가 4개의 텍스쳐 요청들을 포함하면, (4개의 이용가능한 슬롯들이 존재할 경우에만) 이들 요청들에 상응하여 할당되는 텍스쳐 유닛의 4개의 슬롯들과 함께 4개의 텍스쳐 요청들이 발행될 것이다. 따라서, 결과들이 텍스쳐 유닛(412)으로부터 판독될 지점에 스레드들이 도달할 것을 보장하도록 리소스들이 충분히 있는 경우에만 각각의 스레드가 요청들을 발행할 것이다.
텍스쳐 유닛 리소스들이 그 스레드에 대하여 할당되면, 그 스레드에 대한 리소스들의 할당은 요청들이 실행될 수 있음을 보장하므로, 스케줄링 모듈(402)로 인하여 텍스쳐 요청들이 발행될 수 있는 것으로 이해된다. 텍스쳐 요청들이 완료되는데 소요되는 시간으로 인하여, 텍스쳐 유닛으로부터 판독하기 위한 결과들이 준비될 때까지, 또는 다른 비텍스쳐 연산들이 완료될 때 까지, 스케줄링 모듈(402)에 의해 스레드들이 슬립(sleep) 상태로 될 수 있다. 예를 들어, 텍스쳐 결과들을 대기하고 있는 스레드들은 또한 매스 요청들이 매스 유닛(예를 들어, 매스 유닛(414))에 발행되도록 할 수 있다.
도 5 내지 도 6을 참조하면, 흐름도들(500 및 600)은 본 발명의 다양한 실시예들에 의해 이용되는 예시적인 기능들을 예시한다. 특정 기능 블록들("블록들")이 흐름도들(500 및 600)에 개시되어 있지만, 이러한 단계들은 예들이다. 즉, 실시예들은 흐름도들(500 및 600)에 인용된 블록들의 변형들 또는 다양한 다른 블록들을 수행하는데 적합하다. 흐름도들(500 및 600)의 블록들은 나타낸 것과 다른 순서로 수행될 수 있으며, 흐름도들(500 및 600)의 블록들 전부가 수행될 필요는 없는 것으로 이해된다.
도 5는 다양한 스레드들의 실행 결과들을 저장하기 위하여 파이프라인 버퍼를 사용하는 GPU의 기능적 파이프라인의 데드락을 방지하기 위한 예시적인 컴퓨터 제어 처리의 흐름도를 나타낸다. 흐름도(500)의 방법은 스레드들의 텍스쳐 연산을 처리하기 위하여 레지스터 파일 저장소를 필요로 하지 않음으로써 GPU의 리소스들의 처리의 효율적인 이용을 더욱 용이하게 할 수 있다. 흐름도(500)의 처리는 데드락 방지를 위한 동적 처리일 수 있음이 이해된다.
블록(502)에서, 파이프라인 버퍼 및/또는 파이프라인의 이용가능한 리소스들의 수가 판정된다. 본 명세서에 설명하는 바와 같이, 이용가능한 리소스들은 기능적 파이프라인(예를 들어, 텍스쳐 파이프라인)의 파이프라인 버퍼의 일부 또는 텍스쳐 파이프라인의 버퍼 일부를 포함할 수 있다. 본 명세서에서 설명하는 바와 같이, 이용가능한 리소스들의 수는 이용가능한 리소스들의 수를 트랙킹하는 카운터에 기초하여 판정될 수 있다.
블록(504)에 있어서, 제1 스레드의 하나 이상의 텍스쳐 요청들에 기초하여 요청되고 있는 리소스들의 수가 판정된다. 그룹들로 이루어지는 텍스쳐 요청들에 있어서, 요청되고 있는 수는 그룹 내의 요청들 전부이다.
블록(506)에 있어서, 요청된 리소스들의 수가 이용가능한 리소스의 수보다 작은 것에 응답하여, 하나 이상의 요청에 해당하는 리소스들이 파이프라인에 할당된다. 본 명세서에 기재된 바와 같이, 이용가능한 리소스들의 수의 판정과 요청된 리소스의 수에 대응하는 리소스들의 할당은 원자적 연산(atomic operation)일 수 있다.
블록(508)에 있어서, 이용가능한 리소스들의 수가 발행된 요청들을 수용하도록 조정된다. 본 명세서에 기재된 바와 같이, 조정은 이용가능한 리소스들을 트랙킹하는 수를 증가시키는 것을 포함할 수 있다. 리소스들의 수는 리소스를 트랙킹하는 수가 실행 유닛의 리소스들과 비교되는 방식에 기초하여 증가 또는 감소될 수 있다.
블록(510)에 있어서, 하나 이상의 요청들이 발행된다. 본 명세서에 기재된 바와 같이, 요청들은 텍스쳐 요청들일 수 있다. 이러한 방식으로, 동일한 스레드의 해당하는 판독들이 실행되는 때에 데이터가 버퍼 내에 있는 것을 보장하도록 텍스쳐 요청들의 세트가 발행된다.
블록(512)에 있어서, 이용가능한 리소스들의 수가 조정된다. 본 명세서에 기재된 바와 같이, 조정은 이용가능한 리소스들의 수를 감소시키는 것을 포함할 수 있다. 요청들을 갖는 추가의 스레드들이 존재한다면, 블록(516)이 수행될 수 있고, 제2 스레드가 액세스된다. 블록(516)이 수행된 후에, 제2 스레드에 대하여 블록(502)이 수행될 수 있다. 요청 결과들 중 하나 이상이 이용가능하다면, 블록(514)이 수행될 수 있다.
블록(514)에 있어서, 하나 이상의 요청들에 대응하여 하나 이상의 결과들이 판독된다. 본 명세서에 기재된 바와 같이, 텍스쳐 유닛의 파이프라인 버퍼로부터 결과들이 판독된다. 그 후, 블록(516)이 수행될 수 있고, 제2 스레드가 선택된다.
도 6은 기능적 파이프라인의 결과 데이터를 레지스터 파일이 아니라 파이프라인 버퍼에 기입하는 시스템에 있어서, 본 발명의 일 실시예에 따른 데드락을 방지하기 위한 예시적인 컴퓨터 제어 처리의 흐름도를 도시한다. 일 실시예에서, 컴파일러에 의해 흐름도(600)의 방법이 수행될 수 있다. 흐름도(600)의 처리는 데드락 방지를 위한 정적 처리일 수 있음이 이해된다.
블록(602)에 있어서, 실행 유닛 프로파일이 GPU를 위하여 액세스된다. 실행 유닛은 텍스쳐 유닛과 매스 유닛을 포함할 수 있다. 일 실시예에서, 실행 유닛 프로파일은 클록 사이클당 처리되는 유닛들(예를 들어, 픽셀들)의 수 및 파이프라인 리소스들의 수를 포함한다. 파이프라인 리소스들의 수는 파이프라인 깊이 및 버퍼 크기를 포함할 수 있다. 일 실시예에서, 버퍼 크기는 텍스쳐 파이프라인 결과 버퍼의 크기에 해당한다.
블록(604)에 있어서, 데드락 없이 실행될 수 있는 스레드 및 스레드들 당 텍스쳐 요청들의 수가 판정된다. 본 명세서에 기재된 바와 같이, 스레드 및 스레드들 당 요청들의 수는 텍스쳐 요청들의 결과가 판독되기 전에 발행을 요하는 텍스쳐 요청들의 수에 기초할 수 있다. 예를 들어, 텍스쳐 파이프라인 및 파이프라인 버퍼가 400개의 슬롯들을 갖고, 판독이 요구되기 전에 스레드 당 4개의 텍스쳐 요청들이 있다면, 동시 발생하는 스레드들의 수는 본 시스템에서 데드락 방지를 위해 100개로 제한될 수 있다. 일 실시예에 있어서, 스레드들의 수는 공간 타일(spatial tile)의 모든 스레드들이 다음 타일이 처리되기 전에 완료되도록 이미지의 타일(tile)에 기초한다. 예를 들어, 타일의 스레드들은 프로세서 내에 존재하는 다수의 타일들을 이용하도록 함께 스케줄링될 수 있다. 이는 임의의 캐시 지역성(cache locality)을 활용할 수 있다는 것으로 이해된다. 따라서, 리소스의 부족으로 인한 텍스쳐 파이프라인 스톨의 가능성 없이 텍스쳐 요청 및 텍스쳐 반환 시퀀스의 완료를 가능하게 하도록 타일이 처리될 수 있다.
블록(606)에서, 데드락 없이 실행될 수 있는 스레드 당 요청들의 수에 기초한 스레드들의 인스트럭션들이 재배열된다. 본 명세서에서 기재된 바와 같이, 결과들이 스레드에 의해 판독되기 전에 제한된 수의 요청들이 발행될 수 있음을 보장하기 위해 컴파일러가 인스트럭션들을 재배열할 수 있다.
본 발명의 특정 실시예들에 대한 전술한 설명들은 예시와 설명의 목적을 위해 제공되었다. 이들은 완전하거나 개시된 정확한 형태들로 본 발명을 한정하는 것을 의도한 것이 아니며, 전술한 교시의 관점에서 다수의 변경들 및 변형들이 가능하다 하겠다. 본 발명의 원리들 및 그 실제적 응용을 가장 잘 설명하기 위해, 본 기술분야의 당업자가 본 발명과 다양한 실시예들을 특정한 사용에 적합한 것으로 고려되는 다양한 변경들을 이용하여 가장 잘 이용하도록 하기 위하여 실시예들이 선택되고 설명되었다. 본 발명의 범주는 여기에 첨부되는 특허청구범위 및 그 균등물들에 의하여 정의되도록 의도된다.
115: 메모리
110: GPU
112: 디스플레이
114: 로컬 그래픽 메모리
200: 실행 유닛
202: 텍스쳐 유닛
220: 매스 유닛
230: 스케줄러
240: 레지스터 파일
402: 스케줄링 모듈
404: 요청 트랙킹 모듈
406: 리소스 모니터링 모듈
408: 실행 모듈
412: 텍스쳐 유닛
414: 매스 유닛

Claims (20)

  1. 그래픽 처리 유닛에서 데이터를 처리하는 방법으로서,
    파이프라인 버퍼의 비어 있는 메모리 리소스들의 카운트를 유지하는 단계 - 상기 파이프라인 버퍼는 상기 그래픽 처리 유닛의 실행 유닛으로부터 결과들을 수신하도록 연결됨 -;
    스레드의 상기 실행 유닛에 대한 요청들의 수를 판정하는 단계 - 상기 요청들의 수는 상기 스레드 내에 리드-백(read-back) 연산이 존재하기 전에 상기 스레드 내에 존재하는 다수의 요청 연산들의 수를 포함함 -;
    상기 수의 요청들 전부를 수용하기 위한 상기 파이프라인 버퍼의 비어있는 메모리 리소스들이 충분하다면, 상기 실행 유닛에 대하여 상기 수의 요청들을 발행하고, 그렇지 않은 경우, 상기 실행 유닛에 상기 수의 요청들 중 어느 것도 발행하지 않는 단계; 및
    상기 실행 유닛이 발행된 요청들의 결과들을 그 실행 후에 상기 파이프라인 버퍼에 기입하는 단계
    를 포함하는 데이터 처리 방법.
  2. 제1항에 있어서,
    상기 파이프라인 버퍼의 비어있는 메모리 리소스들의 상기 카운트를 유지하는 상기 단계는, 상기 실행 유닛에 대하여 상기 수의 요청들을 발행하는 것에 응답하여, 상기 파이프라인 버퍼의 상기 비어있는 메모리 리소스들의 상기 카운트를 감소시키는 단계를 포함하는 데이터 처리 방법.
  3. 제2항에 있어서,
    상기 스레드가 상기 실행 유닛에 대해 발행된 요청들에 상응하는 상기 파이프라인 버퍼로부터의 리드-백(read-back) 연산들을 실행하는 단계를 더 포함하며,
    상기 파이프라인 버퍼의 비어있는 메모리 리소스들의 상기 카운트를 유지하는 단계는, 상기 스레드가 상기 리드-백 연산들을 실행하는 것에 응답하여 상기 파이프라인 버퍼의 상기 비어있는 메모리 리소스들의 상기 카운트를 증가시키는 단계를 더 포함하는 데이터 처리 방법.
  4. 제1항에 있어서,
    상기 실행 유닛은 상기 그래픽 처리 유닛 내의 텍스쳐 유닛이며,
    또한, 상기 텍스쳐 유닛의 각각의 텍스쳐 연산은 상기 텍스쳐 유닛에 대한 텍스쳐 요청 연산 및 상기 파이프라인 버퍼로부터의 텍스쳐 리드-백 연산을 포함하는 데이터 처리 방법.
  5. 제4항에 있어서,
    상기 발행하는 단계 및 상기 발행하지 않는 단계는, 상기 파이프라인 버퍼 내에 결과 공간을 할당한 그룹화된 텍스쳐 요청 연산들만을 발행함으로써 상기 텍스쳐 유닛의 데드락을 방지하며,
    상기 그룹화된 텍스쳐 요청 연산들은 상기 스레드의 첫번째 발행되지 않은 텍스쳐 리드-백 연산에 선행하는 스레드 내의 모든 발행되지 않은 순차적인 텍스쳐 요청 연산들인 데이터 처리 방법.
  6. 제1항에 있어서,
    상기 스레드가 상기 그래픽 프로세서의 매스(math) 기능 유닛에 대하여 매스 연산을 발행하는 단계; 및
    상기 매스 기능 유닛이 상기 매스 연산을 위한 소오스 피연산자들을 레지스터 파일의 소오스 레지스터들로부터 획득하여, 상기 매스 연산의 실행으로부터의 결과들을 상기 레지스터 파일의 데스티네이션 레지스터들에 반환하는 단계
    를 더 포함하는 데이터 처리 방법.
  7. 제6항에 있어서,
    상기 기능 유닛은 텍스쳐 유닛이며,
    상기 레지스터 파일은 상기 텍스쳐 유닛의 실행으로부터의 결과들을 수신하지 않는 데이터 처리 방법.
  8. 그래픽 처리 유닛에서 데이터를 처리하는 방법으로서,
    파이프라인 버퍼의 크기를 판정하는 단계 - 상기 파이프라인 버퍼는 상기 그래픽 처리 유닛의 실행 유닛으로부터 결과들을 수신하도록 연결됨 -;
    각 스레드 내의 요청 연산들의 수에 기초하고, 상기 파이프라인 버퍼의 상기 크기에 또한 기초해서, 상기 실행 유닛을 이용하여 동시에 연산하도록 허용가능한 스레드들의 수를 판정하는 단계;
    상기 수 이하의 스레드들만이 그 데드락을 방지하도록 상기 실행 유닛을 이용하여 동시에 연산하도록 허용하는 단계;
    상기 수의 스레드들이 상기 실행 유닛에 대하여 요청 연산들을 발행하는 단계; 및
    상기 실행 유닛이 상기 요청 연산들의 결과들을 그 실행 후에 상기 파이프라인 버퍼에 기입하는 단계
    를 포함하는 데이터 처리 방법.
  9. 제8항에 있어서,
    상기 스레드들의 수를 판정하는 상기 단계는, 상기 파이프라인 버퍼의 크기를 각각의 스레드 내의 상기 요청 연산들의 수로 나누는 단계를 포함하는 데이터 처리 방법.
  10. 제8항에 있어서,
    상기 수의 스레드들이, 상기 실행 유닛에 대하여 발행된 상기 요청 연산들에 상응하는 상기 파이프라인 버퍼로부터의 리드-백 연산들을 실행하는 단계를 더 포함하는 데이터 처리 방법.
  11. 제8항에 있어서,
    상기 실행 유닛은 상기 그래픽 처리 유닛 내의 텍스쳐 유닛이며,
    또한, 상기 텍스쳐 유닛의 각각의 텍스쳐 연산은 상기 파이프라인 버퍼로부터의 텍스쳐 리드-백 연산 및 텍스쳐 요청 연산을 포함하는 데이터 처리 방법.
  12. 제11항에 있어서,
    상기 수 이하의 스레드들만이 상기 실행 유닛을 이용하여 동시에 연산하도록 허용하는 상기 단계는, 상기 수의 스레드들 내의 모든 텍스쳐 리드-백 연산들이 실행할 기회를 가질 것을 보장함으로써 데드락을 방지하는 데이터 처리 방법.
  13. 제8항에 있어서,
    스레드들이 상기 그래픽 프로세서의 매스 기능 유닛에 대하여 매스 연산들을 발행하는 단계, 및
    상기 매스 기능 유닛이 상기 매스 연산들을 위한 소오스 피연산자들을 레지스터 파일의 소오스 레지스터들로부터 획득하여, 상기 매스 연산들의 실행으로부터의 결과들을 상기 레지스터 파일의 데스티네이션 레지스터들에 반환하는 단계
    를 더 포함하는 데이터 처리 방법.
  14. 제13항에 있어서,
    상기 기능 유닛은 텍스쳐 유닛이며,
    상기 레지스터 파일은 상기 텍스쳐 유닛의 실행으로부터의 결과들을 수신하지 않는 데이터 처리 방법.
  15. 그래픽 처리 유닛의 프로세서 그룹으로서,
    상기 프로세서 그룹 내에서 동시에 연산가능한 복수의 스레드와 연관된 데이터를 저장하는 레지스터 파일;
    상기 복수의 스레드의 텍스쳐 연산들을 처리하는 텍스쳐 유닛 - 상기 텍스쳐 연산 각각은 요청 텍스쳐 연산과, 상응하는 텍스쳐 리드-백 연산을 포함함 -; 및
    상기 텍스쳐 유닛으로부터의 결과들을 수신하여 저장하기 위하여 상기 텍스쳐 유닛에 연결되는 파이프라인 버퍼
    를 포함하는 프로세서 그룹.
  16. 제15항에 있어서,
    상기 복수의 스레드의 매스 연산들을 처리하기 위한 매스 기능 유닛을 더 포함하고,
    상기 매스 기능 유닛은 상기 레지스터 파일로부터 소오스 피연산자들을 수신하도록 연결되며, 또한 상기 레지스터 파일 내에 결과들을 저장하도록 연결되는 프로세서 그룹.
  17. 제15항에 있어서,
    상기 파이프라인 버퍼 및 상기 텍스쳐 유닛의 비어있는 메모리 리소스들의 카운트를 유지하기 위한 카운터를 더 포함하는 프로세서 그룹.
  18. 제17항에 있어서,
    상기 텍스쳐 유닛 내의 데드락을 방지하기 위한 회로를 더 포함하며,
    상기 데드락을 방지하기 위한 회로는:
    스레드의 상기 텍스쳐 유닛에 대한 텍스쳐 요청 연산들의 수를 판정하는 회로 - 상기 텍스쳐 요청 연산들의 수는 상기 스레드 내에 텍스쳐 리드-백 연산이 존재하기 전에 상기 스레드 내에 존재하는 다수의 텍스쳐 요청 연산들의 수를 포함함 -; 및
    상기 수의 텍스쳐 요청 연산들 전부를 수용하기 위한 상기 파이프라인 버퍼와 상기 텍스쳐 유닛의 비어있는 메모리 리소스들이 충분하다면, 상기 텍스쳐 유닛에 대하여 상기 수의 요청들을 발행하고, 그렇지 않은 경우, 상기 텍스쳐 유닛에 대하여 상기 수의 텍스쳐 요청 연산들 중 어느 것도 발행하지 않는 회로
    를 포함하는 프로세서 그룹.
  19. 제15항에 있어서,
    미리결정된 수 이하의 스레드들만이 상기 텍스쳐 유닛을 이용하여 동시에 연산하도록 허용함으로써 상기 텍스쳐 유닛 내에서의 데드락을 방지하기 위한 회로를 더 포함하며,
    상기 스레드들의 미리결정된 수는 각각의 스레드 내의 텍스쳐 요청 연산들의 수에 기초하고, 상기 텍스쳐 유닛 및 상기 파이프라인 버퍼의 크기에 또한 기초하는 프로세서 그룹.
  20. 제19항에 있어서,
    상기 스레드들의 미리결정된 수는 상기 파이프라인 버퍼의 상기 크기 및 상기 텍스쳐 유닛의 상기 크기를 각 스레드 내의 상기 텍스쳐 요청 연산들의 수로 나누어 계산되는 프로세서 그룹.
KR1020100032219A 2009-04-08 2010-04-08 데드락이 없는 파이프라이닝을 위한 시스템 및 방법 KR101226817B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/420,751 US8698823B2 (en) 2009-04-08 2009-04-08 System and method for deadlock-free pipelining
US12/420,751 2009-04-08

Publications (2)

Publication Number Publication Date
KR20100112099A true KR20100112099A (ko) 2010-10-18
KR101226817B1 KR101226817B1 (ko) 2013-01-28

Family

ID=42934008

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020100032219A KR101226817B1 (ko) 2009-04-08 2010-04-08 데드락이 없는 파이프라이닝을 위한 시스템 및 방법

Country Status (5)

Country Link
US (2) US8698823B2 (ko)
JP (1) JP5240588B2 (ko)
KR (1) KR101226817B1 (ko)
CN (1) CN101859257B (ko)
TW (1) TWI423162B (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210124080A (ko) * 2020-04-03 2021-10-14 서울대학교산학협력단 데드락 회피 방법 및 시스템

Families Citing this family (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9849372B2 (en) * 2012-09-28 2017-12-26 Sony Interactive Entertainment Inc. Method and apparatus for improving efficiency without increasing latency in emulation of a legacy application title
US9626191B2 (en) 2011-12-22 2017-04-18 Nvidia Corporation Shaped register file reads
US20130191572A1 (en) * 2012-01-23 2013-07-25 Qualcomm Incorporated Transaction ordering to avoid bus deadlocks
US9694276B2 (en) 2012-06-29 2017-07-04 Sony Interactive Entertainment Inc. Pre-loading translated code in cloud based emulated applications
US9656163B2 (en) 2012-06-29 2017-05-23 Sony Interactive Entertainment Inc. Haptic enhancements for emulated video game not originally designed with haptic capabilities
US9623327B2 (en) 2012-06-29 2017-04-18 Sony Interactive Entertainment Inc. Determining triggers for cloud-based emulated games
US9925468B2 (en) 2012-06-29 2018-03-27 Sony Interactive Entertainment Inc. Suspending state of cloud-based legacy applications
US9707476B2 (en) 2012-09-28 2017-07-18 Sony Interactive Entertainment Inc. Method for creating a mini-game
US20140092087A1 (en) 2012-09-28 2014-04-03 Takayuki Kazama Adaptive load balancing in software emulation of gpu hardware
US11013993B2 (en) 2012-09-28 2021-05-25 Sony Interactive Entertainment Inc. Pre-loading translated code in cloud based emulated applications
US9697006B2 (en) * 2012-12-19 2017-07-04 Nvidia Corporation Technique for performing memory access operations via texture hardware
US9405605B1 (en) 2013-01-21 2016-08-02 Amazon Technologies, Inc. Correction of dependency issues in network-based service remedial workflows
US9183092B1 (en) * 2013-01-21 2015-11-10 Amazon Technologies, Inc. Avoidance of dependency issues in network-based service startup workflows
US9165396B2 (en) * 2013-02-26 2015-10-20 Nvidia Corporation Graphics processing unit with a texture return buffer and a texture queue
US9171525B2 (en) * 2013-02-26 2015-10-27 Nvidia Corporation Graphics processing unit with a texture return buffer and a texture queue
US9258012B2 (en) 2013-03-15 2016-02-09 Sony Computer Entertainment Inc. Compression of state information for data transfer over cloud-based networks
JP5466786B1 (ja) * 2013-08-28 2014-04-09 株式会社 ディー・エヌ・エー 画像処理装置及び画像処理プログラム
KR102161742B1 (ko) 2013-10-11 2020-10-05 삼성전자주식회사 피드백 경로를 포함하는 파이프 라인 시스템 및 그 동작방법
US9760967B2 (en) * 2013-11-13 2017-09-12 Qualcomm Incorporated System and method of dynamically throttling CPU frequency for gaming workloads
CN103713884B (zh) * 2013-12-18 2016-06-29 珠海金山网络游戏科技有限公司 多线程通过数组处理数据的方法、系统及多线程处理器
US9825884B2 (en) 2013-12-30 2017-11-21 Cavium, Inc. Protocol independent programmable switch (PIPS) software defined data center networks
GB2524063B (en) 2014-03-13 2020-07-01 Advanced Risc Mach Ltd Data processing apparatus for executing an access instruction for N threads
CN103955407B (zh) * 2014-04-24 2018-09-25 深圳中微电科技有限公司 在处理器中减小纹理延迟的方法及装置
US9633153B1 (en) * 2014-12-31 2017-04-25 Cadence Design Systems, Inc. Method, system, and computer program product for verifying an electronic design using stall prevention requirements of electronic circuit design models of the electronic design
US10616144B2 (en) 2015-03-30 2020-04-07 Cavium, Llc Packet processing system, method and device having reduced static power consumption
US9747226B2 (en) * 2015-03-30 2017-08-29 Cavium, Inc. Packet processing system, method and device to optimize packet buffer space
US10242494B2 (en) * 2017-04-01 2019-03-26 Intel Corporation Conditional shader for graphics
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
CN107770090B (zh) * 2017-10-20 2020-05-01 深圳市楠菲微电子有限公司 用于控制流水线中寄存器的方法和装置
CN108509241B (zh) * 2018-03-15 2021-06-04 Oppo广东移动通信有限公司 一种图像的全屏显示方法、全屏显示装置及移动终端
US10990443B2 (en) 2018-12-04 2021-04-27 International Business Machines Corporation Utilization profiling and scheduling operations using thread specific execution units usage of a multi-core multi-threaded processor
US10657699B1 (en) * 2018-12-08 2020-05-19 Arm Limited Performing texturing operations for sets of plural execution threads in graphics processing systems
KR20200081966A (ko) * 2018-12-28 2020-07-08 엘지디스플레이 주식회사 발광 표시장치

Family Cites Families (127)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6414648A (en) 1987-07-08 1989-01-18 Mitsubishi Electric Corp Arithmetic processor
US5455913A (en) 1990-05-14 1995-10-03 At&T Global Information Solutions Company System and method for transferring data between independent busses
US5301295A (en) 1991-05-22 1994-04-05 Analog Devices, Inc. Data processor apparatus and method with selective caching of instructions
US5444853A (en) 1992-03-31 1995-08-22 Seiko Epson Corporation System and method for transferring data between a plurality of virtual FIFO's and a peripheral via a hardware FIFO and selectively updating control information associated with the virtual FIFO's
US5768548A (en) 1992-04-15 1998-06-16 Intel Corporation Bus bridge for responding to received first write command by storing data and for responding to received second write command by transferring the stored data
US5546548A (en) 1993-03-31 1996-08-13 Intel Corporation Arbiter and arbitration process for a dynamic and flexible prioritization
US5555424A (en) 1994-10-06 1996-09-10 The Dow Chemical Company Extended Harvard architecture computer memory system with programmable variable address increment
US5706466A (en) 1995-01-13 1998-01-06 Vlsi Technology, Inc. Von Neumann system with harvard processor and instruction buffer
US5923859A (en) 1995-04-13 1999-07-13 Compaq Computer Corporation Dual arbiters for arbitrating access to a first and second bus in a computer system having bus masters on each bus
US5877741A (en) * 1995-06-07 1999-03-02 Seiko Epson Corporation System and method for implementing an overlay pathway
US6175634B1 (en) 1995-08-28 2001-01-16 Intel Corporation Adaptive noise reduction technique for multi-point communication system
US6226695B1 (en) 1995-09-29 2001-05-01 International Business Machines Corporation Information handling system including non-disruptive command and data movement between storage and one or more auxiliary processors
US5717954A (en) 1995-10-13 1998-02-10 Compaq Computer Corporation Locked exchange FIFO
US5940866A (en) 1995-12-13 1999-08-17 International Business Machines Corporation Information handling system having a local address queue for local storage of command blocks transferred from a host processing side
US5968143A (en) 1995-12-13 1999-10-19 International Business Machines Corporation Information handling system for transfer of command blocks to a local processing side without local processor intervention
US5761468A (en) 1996-05-15 1998-06-02 Sun Microsystems Inc Hardware mechanism for optimizing instruction and data prefetching by forming augmented prefetch instructions
US5822568A (en) 1996-05-20 1998-10-13 Advanced Micro Devices, Inc. System for improving the real-time functionality of a personal computer which employs an interrupt servicing DMA controller
US5745772A (en) 1996-08-02 1998-04-28 Micron Electronics, Inc. Advanced programmable interrupt controller
US5790817A (en) 1996-09-25 1998-08-04 Advanced Micro Devices, Inc. Configurable digital wireless and wired communications system architecture for implementing baseband functionality
US6185634B1 (en) 1996-09-27 2001-02-06 Emc Corporation Address triggered DMA controller with an indicative signal including circuitry for calculating a new trigger address value based on the sum of the current trigger address and the descriptor register data with a trigger address register
US6018803A (en) 1996-12-17 2000-01-25 Intel Corporation Method and apparatus for detecting bus utilization in a computer system based on a number of bus events per sample period
US6029228A (en) 1996-12-31 2000-02-22 Texas Instruments Incorporated Data prefetching of a load target buffer for post-branch instructions based on past prediction accuracy's of branch predictions
US5864876A (en) 1997-01-06 1999-01-26 Creative Technology Ltd. DMA device with local page table
US5881248A (en) 1997-03-06 1999-03-09 Advanced Micro Devices, Inc. System and method for optimizing system bus bandwidth in an embedded communication system
US6526518B1 (en) 1997-05-22 2003-02-25 Creative Technology, Ltd. Programmable bus
US6085276A (en) 1997-10-24 2000-07-04 Compaq Computers Corporation Multi-processor computer system having a data switch with simultaneous insertion buffers for eliminating arbitration interdependencies
US6266742B1 (en) 1997-10-27 2001-07-24 International Business Machines Corporation Algorithm for cache replacement
US6016528A (en) 1997-10-29 2000-01-18 Vlsi Technology, Inc. Priority arbitration system providing low latency and guaranteed access for devices
US6098114A (en) 1997-11-14 2000-08-01 3Ware Disk array system for processing and tracking the completion of I/O requests
US6418496B2 (en) 1997-12-10 2002-07-09 Intel Corporation System and apparatus including lowest priority logic to select a processor to receive an interrupt message
US6233656B1 (en) 1997-12-22 2001-05-15 Lsi Logic Corporation Bandwidth optimization cache
US6298407B1 (en) 1998-03-04 2001-10-02 Intel Corporation Trigger points for performance optimization in bus-to-bus bridges
US6157980A (en) 1998-03-23 2000-12-05 International Business Machines Corporation Cache directory addressing scheme for variable cache sizes
US6085278A (en) 1998-06-02 2000-07-04 Adaptec, Inc. Communications interface adapter for a computer system including posting of system interrupt status
US6182112B1 (en) 1998-06-12 2001-01-30 Unisys Corporation Method of and apparatus for bandwidth control of transfers via a bi-directional interface
US6490654B2 (en) 1998-07-31 2002-12-03 Hewlett-Packard Company Method and apparatus for replacing cache lines in a cache memory
US6101568A (en) 1998-08-25 2000-08-08 Stmicroelectronics, Inc. Bus interface unit having dual purpose transaction buffer
US6065088A (en) 1998-08-31 2000-05-16 International Business Machines Corporation System and method for interrupt command queuing and ordering
US6205524B1 (en) 1998-09-16 2001-03-20 Neomagic Corp. Multimedia arbiter and method using fixed round-robin slots for real-time agents and a timed priority slot for non-real-time agents
US20020056027A1 (en) 1998-10-29 2002-05-09 Hiroki Kanai Information processing system
US6233645B1 (en) 1998-11-02 2001-05-15 Compaq Computer Corporation Dynamically disabling speculative prefetch when high priority demand fetch opportunity use is high
US6314472B1 (en) 1998-12-01 2001-11-06 Intel Corporation Abort of DRAM read ahead when PCI read multiple has ended
US6397296B1 (en) 1999-02-19 2002-05-28 Hitachi Ltd. Two-level instruction cache for embedded processors
US6345341B1 (en) 1999-06-24 2002-02-05 International Business Machines Corporation Method of cache management for dynamically disabling O state memory-consistent data
US6681285B1 (en) 1999-07-22 2004-01-20 Index Systems, Inc. Memory controller and interface
US7389466B1 (en) 1999-08-12 2008-06-17 Texas Instruments Incorporated ECC in computer system with associated mass storage device, and method for operating same
WO2001033566A1 (en) 1999-10-29 2001-05-10 Kabushiki Kaisha Toshiba Data write control system and method therefor
US6574712B1 (en) 1999-11-08 2003-06-03 International Business Machines Corporation Software prefetch system and method for predetermining amount of streamed data
US6631434B1 (en) 1999-11-15 2003-10-07 Hewlett-Packard Development Company, L.P. Dynamic early indication system for a computer
US6560657B1 (en) 1999-12-23 2003-05-06 Intel Corporation System and method for controlling peripheral devices
US6499090B1 (en) 1999-12-28 2002-12-24 Intel Corporation Prioritized bus request scheduling mechanism for processing devices
JP3450248B2 (ja) 2000-01-19 2003-09-22 エヌイーシー東芝スペースシステム株式会社 人工衛星搭載用データバス制御方法、そのシステム
US6578102B1 (en) 2000-04-18 2003-06-10 International Business Machines Corporation Tracking and control of prefetch data in a PCI bus system
JP3796390B2 (ja) 2000-04-27 2006-07-12 シャープ株式会社 データ駆動型情報処理装置
JP4489245B2 (ja) * 2000-05-02 2010-06-23 オリンパス株式会社 画像処理装置とその制御方法
DE10121792C2 (de) 2000-05-26 2003-09-25 Ibm Universelle Ladeadresse/Wertevorhersageschema
US6427195B1 (en) * 2000-06-13 2002-07-30 Hewlett-Packard Company Thread local cache memory allocator in a multitasking operating system
US6754755B1 (en) 2000-08-10 2004-06-22 Hewlett-Packard Development Company, L.P. Service request system using an activity indicator to reduce processing overhead
US6745258B1 (en) 2000-08-22 2004-06-01 Hewlett-Packard Development Company, L.P. Raid system having multiple reply queues for use with multiprocessor host
US6957290B1 (en) 2000-10-06 2005-10-18 Broadcom Corporation Fast arbitration scheme for a bus
US6696954B2 (en) 2000-10-16 2004-02-24 Amerasia International Technology, Inc. Antenna array for smart RFID tags
US6681281B1 (en) 2000-11-17 2004-01-20 Advanced Micro Devices, Inc. System and method for implementing a multi-level interrupt scheme in a computer system
US6480939B2 (en) 2000-12-29 2002-11-12 Intel Corporation Method and apparatus for filtering prefetches to provide high prefetch accuracy using less hardware
GB0031763D0 (en) 2000-12-29 2001-02-07 Mitel Semiconductor Ltd Arbiter for a queue management system
US6901467B2 (en) 2001-02-23 2005-05-31 Hewlett-Packard Development Company, L.P. Enhancing a PCI-X split completion transaction by aligning cachelines with an allowable disconnect boundary's ending address
US6571318B1 (en) 2001-03-02 2003-05-27 Advanced Micro Devices, Inc. Stride based prefetcher with confidence counter and dynamic prefetch-ahead mechanism
US20020144054A1 (en) 2001-03-30 2002-10-03 Fanning Blaise B. Prefetch canceling based on most recent accesses
US6728856B2 (en) 2001-06-01 2004-04-27 Microchip Technology Incorporated Modified Harvard architecture processor having program memory space mapped to data memory space
US6842803B2 (en) 2001-07-09 2005-01-11 Advanced Micro Devices, Inc. Computer system with privileged-mode modem driver
US6907480B2 (en) 2001-07-11 2005-06-14 Seiko Epson Corporation Data processing apparatus and data input/output apparatus and data input/output method
US6696854B2 (en) 2001-09-17 2004-02-24 Broadcom Corporation Methods and circuitry for implementing first-in first-out structure
US7376846B2 (en) 2001-10-14 2008-05-20 Palm, Inc. Charging and communication cable system for a mobile computer apparatus
WO2003052758A1 (en) 2001-12-13 2003-06-26 Seagate Technology Llc Raid data storage array spin-up control
US6925534B2 (en) 2001-12-31 2005-08-02 Intel Corporation Distributed memory module cache prefetch
US6877048B2 (en) 2002-03-12 2005-04-05 International Business Machines Corporation Dynamic memory allocation between inbound and outbound buffers in a protocol handler
US20030187911A1 (en) 2002-04-01 2003-10-02 Michael Abd-El-Malek Method and apparatus to facilitate recovering a thread from a checkpoint
TWI258081B (en) 2002-04-04 2006-07-11 Via Tech Inc Arbitrating method and arbiter for bus grant
US6904473B1 (en) 2002-05-24 2005-06-07 Xyratex Technology Limited Direct memory access controller and method of filtering data during data transfer from a source memory to a destination memory
US20030229743A1 (en) 2002-06-05 2003-12-11 Brown Andrew C. Methods and structure for improved fairness bus arbitration
US6898674B2 (en) 2002-06-11 2005-05-24 Intel Corporation Apparatus, method, and system for synchronizing information prefetch between processors and memory controllers
US6801963B2 (en) 2002-07-24 2004-10-05 Intel Corporation Method, system, and program for configuring components on a bus for input/output operations
DE10234934A1 (de) 2002-07-31 2004-03-18 Advanced Micro Devices, Inc., Sunnyvale Antwortreihenwiederherstellungsmechanismus
DE10234933A1 (de) 2002-07-31 2004-03-18 Advanced Micro Devices, Inc., Sunnyvale Pufferung von Non-Posted-Lesebefehlen und Antworten
US6931494B2 (en) 2002-09-09 2005-08-16 Broadcom Corporation System and method for directional prefetching
US6895475B2 (en) 2002-09-30 2005-05-17 Analog Devices, Inc. Prefetch buffer method and apparatus
DE60314347T2 (de) 2002-09-30 2007-09-27 Matsushita Electric Industrial Co., Ltd., Kadoma Betriebsmittelverwaltungsgerät
TW569236B (en) 2002-10-03 2004-01-01 Via Tech Inc Multiple-grant controller with parallel arbitration mechanism and related method
US6910106B2 (en) 2002-10-04 2005-06-21 Microsoft Corporation Methods and mechanisms for proactive memory management
US6901483B2 (en) 2002-10-24 2005-05-31 International Business Machines Corporation Prioritizing and locking removed and subsequently reloaded cache lines
US6976106B2 (en) 2002-11-01 2005-12-13 Sonics, Inc. Method and apparatus for speculative response arbitration to improve system latency
US7523111B2 (en) 2002-12-02 2009-04-21 Silverbrook Research Pty Ltd Labelling of secret information
US20040117606A1 (en) 2002-12-17 2004-06-17 Hong Wang Method and apparatus for dynamically conditioning statically produced load speculation and prefetches using runtime information
US6983356B2 (en) 2002-12-19 2006-01-03 Intel Corporation High performance memory device-state aware chipset prefetcher
US7143219B1 (en) 2002-12-31 2006-11-28 Intel Corporation Multilevel fair priority round robin arbiter
US7673304B2 (en) * 2003-02-18 2010-03-02 Microsoft Corporation Multithreaded kernel for graphics processing unit
US6950892B2 (en) 2003-04-10 2005-09-27 International Business Machines Corporation Method and system for managing distributed arbitration for multicycle data transfer requests
JP3632695B2 (ja) 2003-05-06 2005-03-23 セイコーエプソン株式会社 データ転送制御装置、電子機器及びデータ転送制御方法
JP4313607B2 (ja) 2003-05-08 2009-08-12 富士通株式会社 バス接続回路及びバス接続システム
US7177985B1 (en) 2003-05-30 2007-02-13 Mips Technologies, Inc. Microprocessor with improved data stream prefetching
US7139878B2 (en) 2003-06-20 2006-11-21 Freescale Semiconductor, Inc. Method and apparatus for dynamic prefetch buffer configuration and replacement
US8595394B1 (en) 2003-06-26 2013-11-26 Nvidia Corporation Method and system for dynamic buffering of disk I/O command chains
US7225318B2 (en) 2003-10-08 2007-05-29 Intel Corporation Dynamic prefetch in continuous burst read operation
US6996647B2 (en) 2003-12-17 2006-02-07 International Business Machines Corporation Token swapping for hot spot management
US7027062B2 (en) * 2004-02-27 2006-04-11 Nvidia Corporation Register based queuing for texture requests
US7281148B2 (en) 2004-03-26 2007-10-09 Intel Corporation Power managed busses and arbitration
US7315912B2 (en) * 2004-04-01 2008-01-01 Nvidia Corporation Deadlock avoidance in a bus fabric
JP4377279B2 (ja) 2004-05-06 2009-12-02 株式会社日立製作所 ストレージシステム、コンピュータシステム、およびストレージシステムの設定方法
KR100865811B1 (ko) * 2004-05-14 2008-10-28 엔비디아 코포레이션 저전력 프로그램가능 프로세서
US7461211B2 (en) 2004-08-17 2008-12-02 Nvidia Corporation System, apparatus and method for generating nonsequential predictions to access a memory
US7441087B2 (en) 2004-08-17 2008-10-21 Nvidia Corporation System, apparatus and method for issuing predictions from an inventory to access a memory
US7260686B2 (en) 2004-08-17 2007-08-21 Nvidia Corporation System, apparatus and method for performing look-ahead lookup on predictive information in a cache memory
US7206902B2 (en) 2004-08-17 2007-04-17 Nvidia Corporation System, apparatus and method for predicting accesses to a memory
US7218291B2 (en) 2004-09-13 2007-05-15 Nvidia Corporation Increased scalability in the fragment shading pipeline
US7525986B2 (en) 2004-10-28 2009-04-28 Intel Corporation Starvation prevention scheme for a fixed priority PCI-Express arbiter with grant counters using arbitration pools
US7263566B2 (en) 2004-12-30 2007-08-28 Qualcomm Incorporated Method and apparatus of reducing transfer latency in an SOC interconnect
US20060206902A1 (en) * 2005-03-14 2006-09-14 Sujat Jamil Variable interleaved multithreaded processor method and system
US20070165042A1 (en) * 2005-12-26 2007-07-19 Seitaro Yagi Rendering apparatus which parallel-processes a plurality of pixels, and data transfer method
JP4621604B2 (ja) 2006-02-20 2011-01-26 株式会社東芝 バス装置、バスシステムおよび情報転送方法
JP4892253B2 (ja) 2006-02-28 2012-03-07 ルネサスエレクトロニクス株式会社 電子装置
US8766996B2 (en) * 2006-06-21 2014-07-01 Qualcomm Incorporated Unified virtual addressed register file
US8345053B2 (en) * 2006-09-21 2013-01-01 Qualcomm Incorporated Graphics processors with parallel scheduling and execution of threads
US7631126B2 (en) 2007-05-24 2009-12-08 Research In Motion Limited System and method for interfacing an electronic device with a host system
US7734856B2 (en) 2007-08-22 2010-06-08 Lantiq Deutschland Gmbh Method for operating a plurality of arbiters and arbiter system
US7876329B2 (en) * 2007-09-10 2011-01-25 Via Technologies, Inc. Systems and methods for managing texture data in a computer
US8099539B2 (en) 2008-03-10 2012-01-17 Lsi Corporation Method and system of a shared bus architecture
US8370552B2 (en) 2008-10-14 2013-02-05 Nvidia Corporation Priority based bus arbiters avoiding deadlock and starvation on buses that support retrying of transactions
US7895385B2 (en) 2008-12-09 2011-02-22 Nvidia Corporation Establishing communication over serial buses in a slave device

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210124080A (ko) * 2020-04-03 2021-10-14 서울대학교산학협력단 데드락 회피 방법 및 시스템

Also Published As

Publication number Publication date
US20100259536A1 (en) 2010-10-14
TW201044311A (en) 2010-12-16
US9928639B2 (en) 2018-03-27
US20140092114A1 (en) 2014-04-03
CN101859257B (zh) 2013-09-18
TWI423162B (zh) 2014-01-11
US8698823B2 (en) 2014-04-15
CN101859257A (zh) 2010-10-13
JP5240588B2 (ja) 2013-07-17
JP2010244529A (ja) 2010-10-28
KR101226817B1 (ko) 2013-01-28

Similar Documents

Publication Publication Date Title
KR101226817B1 (ko) 데드락이 없는 파이프라이닝을 위한 시스템 및 방법
US7339592B2 (en) Simulating multiported memories using lower port count memories
US9436504B2 (en) Techniques for managing the execution order of multiple nested tasks executing on a parallel processor
US8533435B2 (en) Reordering operands assigned to each one of read request ports concurrently accessing multibank register file to avoid bank conflict
US7634621B1 (en) Register file allocation
US10255228B2 (en) System and method for performing shaped memory access operations
US7533237B1 (en) Off-chip memory allocation for a unified shader
US10007527B2 (en) Uniform load processing for parallel thread sub-sets
US9069609B2 (en) Scheduling and execution of compute tasks
US20120110586A1 (en) Thread group scheduler for computing on a parallel thread processor
US20130198760A1 (en) Automatic dependent task launch
US20170371654A1 (en) System and method for using virtual vector register files
US9069664B2 (en) Unified streaming multiprocessor memory
US20130166882A1 (en) Methods and apparatus for scheduling instructions without instruction decode
US9626216B2 (en) Graphics processing unit sharing between many applications
US9798544B2 (en) Reordering buffer for memory access locality
US20130166877A1 (en) Shaped register file reads
US9715413B2 (en) Execution state analysis for assigning tasks to streaming multiprocessors
US9304775B1 (en) Dispatching of instructions for execution by heterogeneous processing engines
US9489245B2 (en) Work-queue-based graphics processing unit work creation
US9135081B2 (en) Work-queue-based graphics processing unit work creation
US9442759B2 (en) Concurrent execution of independent streams in multi-channel time slice groups
US9262348B2 (en) Memory bandwidth reallocation for isochronous traffic
US20110082961A1 (en) Sharing Data Crossbar for Reads and Writes in a Data Cache

Legal Events

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

Payment date: 20160104

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20170102

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20180110

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20190102

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20200102

Year of fee payment: 8