KR20160001646A - 단일 명령 다중 데이터 처리(simd/t)에서 중복을 제거하는 방법 - Google Patents

단일 명령 다중 데이터 처리(simd/t)에서 중복을 제거하는 방법 Download PDF

Info

Publication number
KR20160001646A
KR20160001646A KR1020150086602A KR20150086602A KR20160001646A KR 20160001646 A KR20160001646 A KR 20160001646A KR 1020150086602 A KR1020150086602 A KR 1020150086602A KR 20150086602 A KR20150086602 A KR 20150086602A KR 20160001646 A KR20160001646 A KR 20160001646A
Authority
KR
South Korea
Prior art keywords
thread
threads
group
same
thread group
Prior art date
Application number
KR1020150086602A
Other languages
English (en)
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 KR20160001646A publication Critical patent/KR20160001646A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • G06F9/3828Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage with global bypass, e.g. between pipelines, between clusters
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5094Allocation of resources, e.g. of the central processing unit [CPU] where the allocation takes into account power or heat criteria
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

복수 개의 서로 다른 스레드 중 중복되는 작업을 포함하는 스레드를 감지하는 단계; 동일한 스레드 연산 결과의 결정에 기초하여, 상기 감지된 스레드로부터 다수의 스레드를 적어도 하나의 스레드 집단으로 그룹화하는 단계; 상기 스레드 집단에서 어느 하나의 스레드 이외의 모든 스레드의 실행을 억제하는 단계; 상기 스레드 집단에서 상기 어느 하나의 스레드를 실행하는 단계; 및 상기 스레드 집단에서 상기 어느 하나의 스레드의 실행으로부터 결정된 결과를 상기 어느 하나의 스레드 이외의 모든 스레드에 전파(broadcasting)하는 단계를 포함하는, 처리 환경에서 중복 스레드의 실행을 감소시키는 방법이 개시된다.

Description

단일 명령 다중 데이터 처리(SIMD/T)에서 중복을 제거하는 방법{REDUNDANCY ELIMINATION IN SINGLE INSTRUCTION MULTIPLE DATA/THREADS (SIMD/T) EXECUTION PROCESSING}
본 발명의 다양한 실시예는 일반적으로 단일 명령 다중 데이터(SIMD/T) 처리 환경에 관한다. 보다 구체적으로, SIMD/T 처리 환경에서 리소스 사용을 줄이기 위하여 중복 스레드(threads)의 실행을 감소시키는 방법에 관한다.
단일 명령 다중 데이터(SIMD/T) 실행 모델에서, 복수의 상이한 물리적 스레드(SIMD 채널들)는 상이한 입력 데이터에 동일한 코드를 실행한다. SIMD/T 실행 모델은 범용 목적 그래픽 처리 장치(GPGPU) 프로그래밍의 증가와 함께, 다양한 비 그래픽 어플리케이션 및 그래픽 모두를 위한 그래픽 처리 장치(GPU) 하드웨어에 광범위하게 사용된다.
본 발명의 일 실시 예에 따른 처리 환경에서 중복 스레드의 실행을 감소시키는 방법은, 복수 개의 서로 다른 스레드 중 중복되는 작업을 포함하는 스레드를 감지하는 단계; 동일한 스레드 연산 결과의 결정에 기초하여, 상기 감지된 스레드로부터 다수의 스레드를 적어도 하나의 스레드 집단으로 그룹화하는 단계; 상기 스레드 집단에서 어느 하나의 스레드 이외의 모든 스레드의 실행을 억제하는 단계; 상기 스레드 집단에서 상기 어느 하나의 스레드를 실행하는 단계; 및 상기 스레드 집단에서 상기 어느 하나의 스레드의 실행으로부터 결정된 결과를 상기 어느 하나의 스레드 이외의 모든 스레드에 전파(broadcasting)하는 단계를 포함할 수 있다.
또한, 상기 감지하는 단계는, 상기 복수 개의 서로 다른 스레드에서 동일한 명령의 시퀀스가 다른 스레드에 의하여 연산된 값에 의존하는지 결정하기 위하여, 상기 복수 개의 서로 다른 스레드의 종속성을 분석하는 단계를 포함할 수 있다.
또한, 종속성이 없는 스레드 동일한 명령의 시퀀스의 사이즈에 기초하여 처리 환경에서 전력 소비의 잠재적 감소를 분석하고, 상기 복수 개의 서로 다른 스레드에 대한 다수의 입력에 기초하여 중복 연산을 분석하는 단계를 더 포함할 수 있다.
또한, 상기 중복되는 작업을 포함하는 스레드를 감지하는 단계는, 동일한 세트의 입력 값을 갖는 상기 복수 개의 서로 다른 스레드로부터 동일한 명령의 시퀀스를 식별하는 단계를 포함할 수 있다.
또한, 상기 동일한 명령의 시퀀스를 식별하는 단계는, 상기 복수 개의 서로 다른 스레드에 대한 입력 레지스터 중 어느 하나 또는 텍스쳐 인터폴레이터의 출력 레지스터를 판독하는 단계; 및 위양성(false positive) 결과를 회피하기 위하여, 상기 복수 개의 서로 다른 스레드의 입력 레지스터의 후속의 쌍 단위 비교로서 데이터 구조를 이용하는 단계를 포함할 수 있다.
또한, 상기 감지하는 단계는, 동일한 값을 갖는 상기 복수 개의 서로 다른 스레드의 입력 레지스터를 상기 이용되는 데이터 구조에 매핑하는 단계를 더 포함할 수 있다.
또한, 상기 그룹화하는 단계는, 상기 명령의 시퀀스 및 상기 세트의 입력 값이 동일하여 상기 적어도 하나의 스레드 집단에서 동일한 결과를 연산하는, 상기 복수 개의 스레드를 그룹화하는 단계를 더 포함할 수 있다.
또한, 상기 그룹화하는 단계는, 스케줄러에서 서로 다른 상기 동일한 명령의 시퀀스 간의 상기 스레드 집단의 교차를 식별하는 단계; 및 상기 스레드 집단의 집단 식별 정보(ID)를 연결하고 상기 스레드 집단 내의 스레드의 비트 벡터를 업데이트하여, 상기 교차된 스레드 집단을 재-그룹화하는 단계를 포함할 수 있다.
또한, 상기 적어도 하나의 스레드 집단의 상기 어느 하나의 스레드는, 상기 스레드 집단에서 최소의 ID를 갖는 리더 스레드이고, 상기 억제하는 단계는, 상기 스레드 집단 내의 상기 리더 스레드를 제외한 모든 스레드의 실행을 클럭-게이팅(clock-gating) 오프하는 단계를 포함할 수 있다.
또한, 상기 결과를 전파하는 단계는, 상기 리더 스레드에 의하여 연산된 결과를 컴파일러(compiler)로부터의 출력 레지스터 맵(map)을 이용하여 상기 스레드 집단의 다른 스레드에 전파하는 단계를 포함할 수 있다.
또한, 상기 처리 환경은 단일 명령 다중 스레드(SIMT) 또는 단일 명령 다중 데이터(SIMD) 처리 환경을 포함할 수 있다.
또한, 상기 처리 환경은 모바일 전자 장치의 그래픽 프로세싱 유닛(GPU) 내에 포함될 수 있다.
다른 일 실시예에 따른, 컴퓨터로 읽을 수 있는 기록 매체는, 복수 개의 서로 다른 스레드 중 중복되는 작업을 포함하는 스레드를 감지하는 단계; 동일한 스레드 연산 결과의 결정에 기초하여, 상기 감지된 스레드로부터 다수의 스레드를 적어도 하나의 스레드 집단으로 그룹화하는 단계; 상기 스레드 집단에서 어느 하나의 스레드 이외의 모든 스레드의 실행을 억제하는 단계; 상기 스레드 집단에서 상기 어느 하나의 스레드를 실행하는 단계; 및 상기 스레드 집단에서 상기 어느 하나의 스레드의 실행으로부터 결정된 결과를 상기 어느 하나의 스레드 이외의 모든 스레드에 전파(broadcasting)하는 단계를 포함하는 방법을 실행하기 위한 프로그램이 기록된 것일 수 있다.
또한, 상기 감지하는 단계는, 컴파일러에 의하여 컴파일 중에 상기 복수 개의 서로 다른 스레드에서 동일한 명령의 시퀀스가 다른 스레드에 의하여 연산된 값에 의존하는지 결정하기 위하여, 상기 복수 개의 서로 다른 스레드의 종속성을 분석하는 단계를 포함할 수 있다.
또한, 상기 방법은, 종속성이 없는 스레드 동일한 명령의 시퀀스의 사이즈에 기초하여 처리 환경에서 전력 소비의 잠재적 감소를 분석하고, 상기 복수 개의 서로 다른 스레드에 대한 다수의 입력에 기초하여 중복 연산을 분석하는 단계를 더 포함하고, 상기 상기 중복되는 작업을 포함하는 스레드를 감지하는 단계는, 동일한 세트의 입력 값을 갖는 상기 복수 개의 서로 다른 스레드로부터 동일한 명령의 시퀀스를 식별하는 단계를 포함할 수 있다.
또한, 상기 동일한 명령의 시퀀스를 식별하는 단계는, 상기 복수 개의 서로 다른 스레드에 대한 입력 레지스터 중 어느 하나 또는 텍스쳐 인터폴레이터의 출력 레지스터를 판독하는 단계; 및 위양성 결과를 회피하기 위하여, 상기 복수 개의 서로 다른 스레드의 입력 레지스터의 후속의 쌍 단위 비교로서 데이터 구조를 이용하는 단계를 포함할 수 있다.
또한, 상기 감지하는 단계는, 동일한 값을 갖는 상기 복수 개의 서로 다른 스레드의 입력 레지스터를 상기 이용되는 데이터 구조에 매핑하는 단계를 더 포함할 수 있다.
또한, 상기 그룹화하는 단계는, 상기 명령의 시퀀스 및 상기 세트의 입력 값이 동일하여 상기 적어도 하나의 스레드 집단에서 동일한 결과를 연산하는, 상기 복수 개의 스레드를 그룹화하는 단계를 더 포함할 수 있다.
또한, 상기 그룹화하는 단계는, 스케줄러에서 서로 다른 상기 동일한 명령의 시퀀스 간의 상기 스레드 집단의 교차를 식별하는 단계; 및 상기 스레드 집단의 집단 식별 정보(ID)를 연결하고 상기 스레드 집단 내의 스레드의 비트 벡터를 업데이트하여, 상기 교차된 스레드 집단을 재-그룹화하는 단계를 포함하고, 상기 적어도 하나의 스레드 집단의 상기 어느 하나의 스레드는, 상기 스레드 집단에서 최소의 ID를 갖는 리더 스레드이고, 상기 억제하는 단계는, 상기 스레드 집단 내의 상기 리더 스레드를 제외한 모든 스레드의 실행을 클럭-게이팅(clock-gating) 오프하는 단계를 포함할 수 있다.
또한, 상기 결과를 전파하는 단계는, 상기 리더 스레드에 의하여 연산된 결과를 컴파일러(compiler)로부터의 출력 레지스터 맵(map)을 이용하여 상기 스레드 집단의 다른 스레드에 전파하는 단계를 포함할 수 있다.
또한, 상기 처리 환경은 단일 명령 다중 스레드(SIMT) 또는 단일 명령 다중 데이터(SIMD) 처리 환경을 포함할 수 있다.
또한, 상기 처리 환경은 모바일 전자 장치의 그래픽 프로세싱 유닛(GPU) 내에 포함될 수 있다.
또 다른 일 실시예에 따른, 전자 장치에 대한 그래픽스 프로세서는, 메모리에 연결되는 적어도 하나의 처리부를 포함하고, 상기 처리부는, 복수 개의 서로 다른 스레드 중 중복되는 작업을 포함하는 스레드를 감지하고, 동일한 스레드 연산 결과의 결정에 기초하여, 상기 감지된 스레드로부터 다수의 스레드를 적어도 하나의 스레드 집단으로 그룹화하고, 상기 스레드 집단에서 어느 하나의 스레드 이외의 모든 스레드의 실행을 억제하고, 상기 스레드 집단에서 상기 어느 하나의 스레드를 실행하고, 상기 스레드 집단에서 상기 어느 하나의 스레드의 실행으로부터 결정된 결과를 상기 어느 하나의 스레드 이외의 모든 스레드에 전파하도록 구성될 수 있다.
또한, 상기 처리부는, 상기 복수 개의 서로 다른 스레드에서 동일한 명령의 시퀀스가 다른 스레드에 의하여 연산된 값에 의존하는지 결정하기 위하여, 상기 복수 개의 서로 다른 스레드의 종속성을 분석할 수 있다.
또한, 상기 처리부는, 종속성이 없는 스레드 동일한 명령의 시퀀스의 사이즈에 기초하여 처리 환경에서 전력 소비의 잠재적 감소를 분석하고, 상기 복수 개의 서로 다른 스레드에 대한 다수의 입력에 기초하여 중복 연산을 분석하고, 상기 중복되는 작업을 포함하는 스레드를 감지하는 것은, 동일한 세트의 입력 값을 갖는 상기 복수 개의 서로 다른 스레드로부터 동일한 명령의 시퀀스를 식별하는 것을 포함할 수 있다.
또한, 상기 처리부는, 상기 복수 개의 서로 다른 스레드에 대한 입력 레지스터 중 어느 하나 또는 텍스쳐 인터폴레이터의 출력 레지스터를 판독하고, 위양성 결과를 회피하기 위하여, 상기 복수 개의 서로 다른 스레드의 입력 레지스터의 후속의 쌍 단위 비교로서 데이터 구조를 이용함으로써, 상기 동일한 명령의 시퀀스를 식별하도록 구성되고, 동일한 값을 갖는 상기 복수 개의 서로 다른 스레드의 입력 레지스터를 상기 이용되는 데이터 구조에 매핑함으로써, 상기 중복되는 작업을 포함하는 스레드를 감지하도록 구성되고, 상기 명령의 시퀀스 및 상기 세트의 입력 값이 동일하여 상기 적어도 하나의 스레드 집단에서 동일한 결과를 연산하는, 상기 복수 개의 스레드를 그룹화함으로써, 상기 적어도 하나의 스레드 집단으로 그룹화하도록 구성될 수 있다.
또한, 상기 처리부는, 스케줄러에서 서로 다른 상기 동일한 명령의 시퀀스 간의 상기 스레드 집단의 교차를 식별하고, 상기 스레드 집단의 집단 식별 정보(ID)를 연결하고 상기 스레드 집단 내의 스레드의 비트 벡터를 업데이트하여, 상기 교차된 스레드 집단을 재-그룹화함에 기초하여, 상기 적어도 하나의 스레드 집단으로 그룹화하도록 구성되고, 상기 적어도 하나의 스레드 집단의 상기 어느 하나의 스레드는, 상기 스레드 집단에서 최소의 ID를 갖는 리더 스레드이고, 상기 실행의 억제는, 상기 스레드 집단 내의 상기 리더 스레드를 제외한 모든 스레드의 실행을 클럭-게이팅(clock-gating) 오프하는 것을 포함할 수 있다.
또한, 상기 결과를 전파하는 것은, 상기 리더 스레드에 의하여 연산된 결과를 컴파일러(compiler)로부터의 출력 레지스터 맵(map)을 이용하여 상기 스레드 집단의 다른 스레드에 전파하는 것을 포함할 수 있다.
또한, 상기 처리 환경은 단일 명령 다중 스레드(SIMT) 또는 단일 명령 다중 데이터(SIMD) 처리 환경을 포함할 수 있다.
또한, 상기 처리 환경은 모바일 전자 장치의 그래픽 프로세싱 유닛(GPU) 내에 포함될 수 있다.
도 1은 일 실시예에 따른 커뮤니케이션 시스템의 개략도를 나타낸다.
도 2는 일 실시예에 따른 전자 장치에서의 그래픽 처리에 이용되는 시스템의 기능 블록도를 나타낸다.
도 3은 일 실시예에 따른 적어도 하나의 작업 유닛 포함하는 WARP 구조를 나타낸다.
도 4a 및 도 4b는 다양한 실시예에 따른 처리부의 구조를 나타낸다.
도 5는 다양한 실시예에 따른 셰이더의 구조를 나타낸다.
도 6은 다양한 실시예에 따른 트레이스의 구조를 나타낸다.
도 7a 및 도 7b는 다양한 실시예에 따른 셰이더 및 트레이스의 관계를 나타낸다.
도 8은 일 실시예에 따른 두 개의 비단순 스레드 집단을 포함하는 WARP의 일 예시를 나타낸다.
도 9는 일 실시예에 따른 적은 스레드 집단을 포함하는 WARP의 일 예시를 나타낸다.
도 10은 다양한 실시예에 따른 그래픽스 파이프라인 또는 GPU의 블록도의 일 예시를 나타낸다.
도 11은 일 실시예에 따른 처리 환경에서 중복되는 스레드의 실행을 감소시키기 위한 과정의 흐름도를 나타낸다.
도 12는 다양한 실시예에 따른 컴퓨팅 시스템을 포함하는 정보 처리 시스템의 하드웨어 구성의 하이 레벨의 블록도를 나타낸다.
이하 첨부된 도면을 참조하면서 본 발명을 한정하지 아니하고 오로지 예시를 위한 실시예에 의해 본 발명을 상세히 설명하기로 한다. 본 발명의 하기 실시예는 본 발명을 구체화하기 위한 것일 뿐 본 발명의 권리 범위를 제한하거나 한정하는 것이 아님은 물론이다. 본 발명의 상세한 설명 및 실시예로부터 본 발명이 속하는 기술분야의 전문가가 용이하게 유추할 수 있는 것은 본 발명의 권리범위에 속하는 것으로 해석된다. 특별히 달리 정의되지 않는 한, 모든 용어 등 사전, 논문 등에서의 정의 및/또한 당업자에 의해 이해되는 의미뿐만 아니라 명세서에서 함축된 의미를 포함하는 광범위한 가능한 해석이 가능한 것으로 본다.
다양한 실시예들은 일반적으로, 단일 명령 다중 데이터(SIMD/T) 처리 환경에서 리소스 사용을 줄이기 위하여 중복 스레드(threads)의 실행을 감소시키는 방법에 관한다. 다양한 실시예들은 다중 명령들을 트레이스로 언급되는 스케줄러블(schedulable) 구조로 조직할 수 있다. 트레이스는 명령들 및 이하의 특징들을 포함한다. 트레이스는 특정 이벤트가 발생할 때까지 실행을 시작하지 않을 수 있다. 트레이스는 모든 필요한 리소스들이 사용 가능할 때까지 실행을 시작하지 않을 수 있다. 또한, 실행이 시작되면 트레이스는 완료까지 실행을 할 수 있다. 트레이스는 복수 개의 명령을 하나의 스케줄러블 단위로 다룰 수 있다. 트레이스는 헤더(예컨대, 트레이스 헤더)를 포함할 수 있다. 트레이스 헤더는 트레이스 내에서 다중 명령이 필요로 하는 리소스의 리스트를 포함할 수 있다.
일 실시예에 따르면, 트레이스 헤더는 사용 가능한 리소스에 대한 리소스 요구와 SIMT 스케줄링 프로세스를 간단히 매칭하기 위하여 조직될 수 있다. 트레이스는 완료 시까지 진행되기 때문에, 데이터 경로는 작고 낮은 오버헤드 터널 레지스터 파일로 늘어날 수 있다. 터널 레지스터 파일은 트레이스 경계들을 건너 지속되지 않고 그러므로 컨텍스트 스위칭 및 SIMP 스케줄링에 대해 저렴하게 여겨질 수 있다.
일 실시예에 따른 방법은 프로세싱 환경에서 중복 스레드의 실행의 감소를 제공하고, 많이 상이한 스레드들 중 중복 작업을 포함하는 스레드들을 감지하는 것을 포함할 수 있다. 감지된 스레드들로부터의 다중 스레드는 동일한 스레드 연산 결과를 적어도 하나의 스레드 집단(cluster)으로 그룹화될 수 있다. 적어도 하나의 집단 각각에서 특정한 하나의 스레드 이외의 모든 스레드들은 실행이 억제될 수 있다. 적어도 하나의 집단 각각에서 특정한 하나의 스레드는 실행될 수 있다. 적어도 하나의 집단 각각에서 특정한 하나의 스레드의 실행에 따라 결정된 결과는 적어도 하나의 집단 각각의 다른 스레드들에 전파(broadcast)될 수 있다.
도 1은 일 실시예에 따른 커뮤니케이션 시스템(10)의 개략도를 나타낸다.
커뮤니케이션 시스템(10) 은 출력 커뮤니케이션을 시작하는 커뮤니케이션 디바이스 (전송 장치(12)) 및 커뮤니케이션 네트워크(110)를 포함할 수 있다. 전송 장치(12)는 커뮤니케이션 네트워크(110) 내의 다른 커뮤니케이션 장치들과의 커뮤니케이션 동작을 시작하고 수행하는데 이용될 수 있다. 예를 들어, 커뮤니케이션 시스템(10)은 전송 장치(12)로부터의 커뮤니케이션 동작을 수신하는 커뮤니케이션 디바이스(수신 장치(11))를 포함할 수 있다. 또한, 커뮤니케이션 시스템(10) 복수 개의 전송 장치(12) 및 복수 개의 수신 장치(11)를 포함할 수도 있다.
커뮤니케이션 네트워크(110)를 생성하기 위하여 적절한 회도, 장치, 시스템 또는 이들의 결합(예컨대, 커뮤니케이션 타워 및 텔레커뮤니케이션 서버를 포함하는 무선 커뮤니케이션 인프라구조) 등이 이용될 수 있다. 커뮤니케이션 네트워크(110)는 적절한 커뮤니케이션 프로토콜을 이용하는 커뮤니케이션을 제공할 수 있다. 다양한 실시예에 따르면, 커뮤니케이션 네트워크(110)는 예를 들어, 전통적인 전화선, 케이블 텔레비전, Wi-Fi (예컨대, IEEE 802.11 프로토콜), 블루투스, 고주파 시스템(예컨대, 900 MHz, 2.4 GHz, 및 5.6 GHz 커뮤니케이션 시스템), 적외선, 다른 상대적 지역 무선 커뮤니케이션 프로토콜 또는 이들의 조합을 지원할 수 있다. 다양한 실시예에 따르면, 커뮤니케이션 네트워크(110)는 무선 전화, 휴대 전화 및 개인 이메일 디바이스(예컨대, BLACKBERRY®)와 같은 장치에 의하여 사용되는 프로토콜들을 지원할 수 있다. 프로토콜들은, 예를 들어, GSM, GSM plus EDGE, CDMA, quadband, 및 다른 이동가능 프로토콜들을 포함할 수 있다. 다른 예로, 장거리 커뮤니케이션 프로토콜은 Wi-Fi 및 VOIP, LAN, WAN, 또는 다른 TCP-IP 기반 커뮤니케이션 프로토콜들을 이용하는 전화 송수신을 위한 프로토콜을 포함할 수 있다. 전송 장치(12) 및 수신 장치(11)는, 커뮤니케이션 네트워크(110) 상에서, 커뮤니케이션 경로(13)과 같은 하나의 양방향 커뮤니케이션 경로 또는 여러 커뮤니케이션 경로들을 통해 커뮤니케이션을 할 수 있다. 전송 장치(12) 및 수신 장치(11)는 커뮤니케이션 동작을 시작하고 시작된 커뮤니케이션 동작을 수신할 수 있다.
전송 장치(12) 및 수신 장치(11)는 커뮤니케이션 동작을 송신 및 수신하기 위한 적절한 장치를 포함할 수 있다. 예를 들어, 전송 장치(12) 및 수신 장치(11)는 모바일 전화 장치, 텔레비전 시스템, 카메라, 캠코더, 오디오/비디오 장치, 태블릿, 웨어러블(wearable) 장치(예컨대, 손목에 착용 가능하거나 시계 타입의 장치, 펜던트, 머리 장착형 장치, 핀 등) 및 무선 커뮤니케이션이 가능하거나(무선 커뮤니케이션을 가능하게 해주는 보조 시스템이 있거나, 보조 시스템 없이도) 유선 경로(예컨대, 전통적 유선 전화)를 통한 다른 장치들을 포함할 수 있다. 커뮤니케이션 동작은 음성 커뮤니케이션(예컨대, 전화 통화), 데이터 커뮤니케이션(예컨대, 이메일, 문자 메시지, 미디어 메시지), 화상 커뮤니케이션 또는 이들의 조합(예컨대, 화상 회의)를 포함하는 커뮤니케이션 어떤 적절한 커뮤니케이션 형태도 될 수 있다.
도 2는 일 실시예에 따른 전자 장치(120)에서의 그래픽 처리에 이용되는 시스템(100)의 기능 블록도를 나타낸다.
전송 장치(12) 및 수신 장치(11)는 전자 장치(120)의 전부 또는 일부를 포함할 수 있다. 다양한 실시예에서, 전자 장치(120)는 디스플레이(121), 마이크(122), 음향 출력부(123), 입력부(124), 통신부(125), 제어부(126), 카메라 인터페이스(128), GPU(129) 및 다른 적절한 구성을 포함할 수 있다. 일 실시예에 따르면, 어플리케이션 1-N(127)은 클라우드/서버(130), 커뮤니케이션 네트워크(110) 등으로부터 제공 및 획득될 수 있다. N은 1보다 큰 정수일 수 있다.
일 실시예에 따르면, 음향 출력부(123), 디스플레이(121), 입력부(124), 통신부(125) 및 마이크(122)에 의하여 적용되는 모든 어플리케이션들은 상호 연결되고, 제어부(126)에 의하여 제어될 수 있다. 일 실시예에 따르면, 다른 튜닝 장치에 노래를 전송할 수 있는 소형 뮤직 플레이어는 전자 장치(120)에 상호 연결될 수 있다.
일 실시예에 따르면, 음향 출력부(123)는 전자 장치(120)의 사용자에게 오디오를 제공하기 위한 적절한 오디오 구성을 포함할 수 있다. 예를 들어, 음향 출력부(123)는 전자 장치(120)에 내장된 적어도 하나의 스피커(예컨대, 노모 또는 스테레오 스피커)를 포함할 수 있다. 다양한 실시예에 따르면, 음향 출력부(123)는 전자 장치(120)에 원격으로 연결된 오디오 구성을 포함할 수 있다. 예를 들어, 음향 출력부(123)는 전자 장치(120)에 잭과 같은 유선으로 연결되는 헤드셋, 헤드폰 또는 이어폰, 또는 블루투스 헤드폰 또는 블루투스 이어폰과 같이 무선으로 연결되는 구성을 포함할 수 있다.
일 실시예에 따르면, 디스플레이(121)는 사용자에게 시각적인 디스플레이를 제공하기 위한 적절한 스크린 또는 프로젝션 시스템을 포함할 수 있다. 예를 들어, 디스플레이(121) 전자 장치(120) 내의 LCD와 같은 화면을 포함할 수 있다. 다른 예로, 디스플레이(121)는 이동 가능한 디스플레이 또는 비디오 프로젝터와 같이 전자 장치(120)로부터 떨어진 표면 상에 컨텐츠를 디스플레이하기 위한 프로젝팅 시스템을 포함할 수 있다. 디스플레이(121)는 제어부(126)의 제어에 따라, 커뮤니케이션 동작에 대한 정보 또는 사용 가능한 미디어 선택에 대한 정보와 같은 컨텐츠를 디스플레이할 수 있다.
일 실시예에 따르면, 입력부(124)는 전자 장치(120)로의 사용자 입력 또는 명령을 제공하기 위한 장치 또는 사용자 인터페이스일 수 있다. 입력부(124)는 다양한 형태일 수 있다. 예를 들어, 버튼, 키패드, 다이얼, 클릭휠 또는 터치 스크린이 될 수 있다. 입력부(124)는 멀티 터치 스크린을 포함할 수 있다.
일 실시예에 따르면, 통신부(125)는 도 1의 커뮤니케이션 네트워크(110)와 같은 커뮤니케이션 네트워크를 동작시키고 커뮤니케이션 동작 및 미디어를 전자 장치(120)에서 다른 장치로 전송시키기 위한 적절한 통신 회로가 될 수 있다. 통신부(125)는 Wi-Fi(예컨대, IEEE 802.11 프로토콜), 블루투스, 고주파 시스템(예컨대, 900 MHz, 2.4 GHz, 및 5.6 GHz 커뮤니케이션 시스템), 적외선, GSM, GSM plus EDGE, CDMA, quadband, 다른 이동 가능 프로토콜, VOIP, TCP-IP 등과 같은 적절한 커뮤니케이션 프로토콜을 이용하여 커뮤니케이션 네트워크 상의 인터페이스로 동작할 수 있다.
다양한 실시예에 따르면, 통신부(125) 커뮤니케이션 프로토콜을 이용하여 커뮤니케이션 네트워크를 생성할 수 있다. 예를 들어, 통신부(125)는 다른 커뮤니케이션 장치들에 연결하기 위하여 단거리 커뮤니케이션 프로토콜을 이용하여 단거리 커뮤니케이션 네트워크를 생성할 수 있다. 예를 들어, 통신부(125)는 전자 장치(120)를 블루투스 헤드셋과 연결하기 위하여 블루투스 프로토콜을 이용해 로컬 커뮤니케이션 네트워크를 생성할 수 있다.
일 실시예에 따르면, 제어부(126)는 전자 장치(120)의 동작 및 퍼포먼스를 제어하기 위한 구성일 수 있다. 예를 들어, 제어부(126)는 프로세서, 전자 장치(120)의 다른 구성으로 명령을 전달하기 위한 버스, 메모리, 저장소 등의, 전자 장치(120)의 동작을 제어하기 위한 구성들을 포함할 수 있다. 다양한 실시예에 따르면, 프로세서는 디스플레이를 구동하고, 사용자 인터페이스로부터 수신되는 입력들을 처리할 수 있다. 메모리 및 저장소는 캐시(cache), 플래시 메모리(flash memory), ROM 또는 RAM/DRAM을 포함할 수 있다. 다양한 실시예에 따르면, 메모리는 오퍼레이팅 시스템, 사용자 인터페이스 기능 및 프로세서 기능과 같은 펌웨어를 저장할 수 있다. 다양한 실시예에 따르면, 메모리는 전자 장치(120)가 커뮤니케이션 동작을 수행하는 대상이 되는 다른 장치들에 관한 정보를 저장할 수 있다. 예를 들어, 커뮤니케이션 동작에 관한 연락 정보 또는 사용자에 의하여 선택된 다른 미디어 타입 및 미디어 아이템에 관한 정보를 저장할 수 있다.
일 실시예에 따르면, 제어부(126)는 전자 장치(120)에서 구동되는 적어도 하나의 어플리케이션의 동작을 수행할 수 있다. 적절한 수의 또는 적절한 타입의 어플리케이션이 실행될 수 있다. 아래에서 설명되는 어플리케이션들은 각각 설명될 것이지만, 일부 또는 전부의 어플리케이션들은 결합될 수 있다. 예를 들어, 전자 장치(120)는 자동 음성 인식(automatic speech recognition, ASR) 어플리케이션, 다이얼로그 어플리케이션, 지도 어플리케이션, 미디어 어플리케이션(예컨대, QuickTime, 모바일 뮤직 어플리케이션 또는 모바일 비디오 어플리케이션), 소셜 네트워크 어플리케이션(예컨대, 페이스북, 트위터 등), 인터넷 브라우져 어플리케이션 등을 포함할 수 있다. 또한, 전자 장치(120)는 커뮤니케이션 동작을 수행하는 적어도 하나의 어플리케이션을 포함할 수 있다. 예를 들어, 전자 장치(120)는 메시지 어플리케이션, 이메일 어플리케이션, 보이스메일 어플리케이션, 인스턴트 메시지 어플리케이션(예컨대, 채팅 어플리케이션), 화상 회의 어플리케이션, 팩스 어플리케이션 등을 포함할 수 있다.
다양한 실시예에 따르면, 전자 장치(120)는 마이크(122)를 포함할 수 있다. 예를 들어, 마이크(122)는 커뮤니케이션 동작 중에 사용되고, 커뮤니케이션 동작을 설립하는 수단으로서 사용되고, 또는 물리적인 사용자 인터페이스의 대안으로서 사용되며, 사용자가 어플리케이션 1-N(127)의 음성 제어를 위하여 음성 오디오와 같은 오디오를 전송하도록 할 수 있다. 마이크(122)는 전자 장치(120)와 결합되어 있을 수도 있고, 원격으로 전자 장치(120)에 연결될 수도 있다. 예를 들어, 마이크(122)는 유선 헤드폰, 무선 헤드셋과 결합될 수 있다. 마이크(122)는 원격 제어 장치에 결합될 수도 있다.
일 실시예에 따르면, 카메라 인터페이스(128)는 사진 및 영상의 촬영, 수정, 송수신, 공유 등의 기능을 포함하는 적어도 하나의 카메라 장치를 포함할 수 있다.
일 실시예에 따르면, GPU(129)는 영상 및 디스플레이(121) 상에서 렌더링하기 위한 이미지(예컨대, 2D 또는 3D 이미지, HD(High definition), UHD(ultra-HD) 등) 및 이미지의 일부를 처리하는 프로세서 또는 프로그램을 포함할 수 있다. 다양한 실시예에 따르면, GPU(129)는 GPU(Graphic Processing Unit) 하드웨어 및 메모리(예컨대, UHA(unified heap architecture, 도 4a, b의 410), SRAM(static random access memory), DRMA(dynamic RAM), core processor, cache 등을 포함할 수 있다.
일 실시예에 따르면, 전자 장치(120)는 커뮤니케이션 동작을 수행하기 위한 다른 구성들을 포함할 수 있다. 예를 들어, 전자 장치(120)는 전원 공급부, 호스트 장치에 연결하기 위한 포트 또는 인터페이스, 추가적 입력 장치(예컨대, ON/OFF 스위치) 또는 다른 적절한 구성들을 포함할 수 있다.
도 3은 일 실시예에 따른 적어도 하나의 작업 유닛 포함하는 WARP 구조(300)를 나타낸다.
일 실시예에 따르면, 작업 유닛은 출력 데이터 세트를 생성하기 위하여 셰이더(shader)를 통과하는 입력 데이터 세트일 수 있다. 셰이더는 데이터에 대하여 셰이딩 동작을 수행하는 프로그램일 수 있다. 셰이딩 동작은 데이터에 입체감을 주기 위하여 입체 표면에 음영을 부여하는 처리일 수 있다. 일 실시예에 따르면, 컴파일러는 서로 다른 사이즈의 데이터를 효과적으로 처리하기 위하여 1, 2 또는 4 작업 유닛을 하나의 스레드로 묶을 수 있다. 하나의 스레드는 실행 스레드일 수 있다. 도면(300) 에서, 묶음(bundle) 내의 요소들의 수는 최대 너비 수치보다 얼마나 적게 수행되는지를 결정할 수 있다. 일 실시예에 따르면, 브레이드(braid) 1(310)은 작업 유닛(305) 0을 포함하는 스레드를 나타내고, 브레이드 2(320)는 작업 유닛(305) 0 및 1을 포함하는 스레드를 나타내고, 브레이드 4(330)는 작업 유닛(305) 0, 1, 2 및 3을 포함하는 스레드를 나타낸다.
일 실시예에 따르면, 일부의 작업 유닛(305)은 스레드로 묶이고, 일부의 스레드는 WARP으로 불리는 구조에서 셰이더를 실행하기 위하여 함께 묶일 수 있다. WARP은 다수의 작업 유닛(305)을 하나의 제어 지점으로 묶을 수 있다. 일 실시예에 따르면, WARP은 32개의 스레드까지 포함할 수 있고, GPU의 컴파일러(예컨대, 도 2의 GPU(129)의 일부)는 4개의 작업 유닛(205)까지(예컨대, 브레이드 4(330)) 하나의 스레드로 묶을 수 있다. 일 실시예에 따르면, 묶음 팩터(packing factor)는 WARP의 스레드에서의 입력 데이터의 배치를 결정할 수 있다. 처리부(도 4a, b의 400)는 8개의 WARP까지 처리할 수 있다. 일 실시예에 따르면, 각각의 WARP은 스칼라 레지스터 파일 내의 64-레지스터들과 연관될 수 있다. 각각의 스칼라 레지스터 파일의 사이즈는 32 비트일 수 있다. 3bit의 WARP 식별자는 스칼라 레지스터 파일을 처리하기 위하여 명령 내의 스칼라 레지스터 지정자와 연결될 수 있다. 일 실시예에 따라, WARP 내의 모든 스레드는 동일한 스칼라 레지스터 파일을 공유할 수 있다.
일 예로, 스레드는 WARP 내의 하나의 제어 지점이 될 수 있다. 각각의 스레드는 스레드 레지스터 파일과 연관될 수 있다. 일 예로, 스레드는 8 레지터스 단위로 적어도 8 내지 많으면 256개의 레지스터로 할당될 수 있다. WARP은 레지스터 파일 주소에 명령 레지스터 지정자를 할당하는 레지스터 기반 주소를 전달할 수 있다. 레지스터 파일(도 4a, b의 420)은 다양한 WARP에 할당되는 32 Kbytes의 저장소를 포함할 수 있다. 일 예로, 셰이더 프로그램이 스레드 당 32 이하의 레지스터를 사용하는 경우, 모든 8개의 WARP은 동시에 작동할 수 있다. 서로 다른 셰이더에 대한 WARP은 서로 다른 크기의 레지스터 파일을 포함할 수 있다. 주어진 레지스터 파일(420)의 크기는 셰이더 헤더(도 5의 610)에서 알 수 있다.
일 예로, 2 비트 WARP 브레이딩(braiding) 필드는 WARP 내의 스레드들의 동작 모드를 식별할 수 있다. 브레이딩은 셰이더 프로그램이 하프 단위 정밀도 및 쿼터 단위 정밀도의 명령을 사용하는 경우, GPU의 컴파일러가 최적 코드를 생성하도록 할 수 있다. 명령은 스레드 당 하나의 명령 내에 2 또는 4 개의 작업 유닛(305)을 계산할 수 있다. 일 예로, 작업 유닛(305)은 실행 마스크에 의하여 결정되고, 실행 마스크의 1 비트는 WARP에 대한 특정 작업 유닛을 결정할 수 있다. 일 예로, 셰이더 프로그램에서 각각의 명령은 연관된 작업 유닛(305)을 식별하여 WARP에 대한 특정 작업 유닛을 적절히 결정할 수 있다. 실행 마스크는 예측을 달성하고 전송을 제어하도록 조작될 수 있다. 일 예로, 단일 코드 시퀀스는 명령을 지정명령(label instruction)과 비교함으로써 대부분의 조작을 수행할 수 있다.
WARP은 묶인 모든 스레드들을 대표하여 명령을 실행할 수 있다. 즉, 각각의 명령은 이전 명령의 결과를 보고 포워딩을 통하여 또는 터널 파일을 이용하여 약간의 지연과 함께 연산 대상으로 사용할 수 있다. 일 예로, 트레이스(도 9의 650)는 셰이더 프로그램 파편으로서 트레이스 헤더(670) 및 명령들(660-661)로 구성될 수 있다. 일 예로, 트레이스 헤더(670)는 트레이스(650)의 명령(660-661)의 구동보다 선행되는 리소스의 세트 및 실행에 뒤이은 WARP의 스케줄링에 앞서 수행되는 두드러진 이전 요청의 비트 벡터의 세트를 포함할 수 있다. WARP 스케줄러는 트레이스 헤더(670)에 포함된 정보들을 이용하여 다음에 실행될 WARP을 결정할 수 있다.
일 예로, 트레이스(도 6의 650)는 64 내지 128 명령 범위의 제한된 최대 사이즈를 가질 수 있다. GPU의 컴파일러는 명령 시퀀스가 너무 긴 경우 또는 명령이 로드 결과나 텍스쳐 결과와 같은 연산 대상로로서의 두드러진 요청을 필요로 하는 경우, 트레이스를 쪼갤 수 있다. 일 예로, WARP은 유휴, 초기화, 실행 또는 대기의 네 가지 상태가 될 수 있다. WARP은 구성 또는 초기화 되면, 필요한 리소스들이 사용 가능할 때에 구동이 스케줄링될 수 있다. 일 예로, 스케줄링된 WARP은 트레이스(650)의 모든 명령을 실행할 수 있고 뒤이어 실행될 WARP을 찾기 위한 시간이 제공될 수 있다.
일 예로, 유휴 상태의 WARP은 작업 유닛(305)에 할당되고, 셰이더 프로그램에 할당되고, 레지스터 파일(도 4a, b의 420)에 배치될 수 있다. 셰이더 생성자는 작업 유닛(305)을 레지스터 파일(420)으로 이동시켜 WARP을 초기화할 수 있고, 고정 기능 요청은 선처리될 수 있고, WARP는 실행 스케줄링 될 수 있다. 초기화 후, WARP은 셰이더 프로그램이 종료되어 유휴 상태로 돌아올 때까지 대기 상태 및 실행 상태를 선택될 수 있다.
일 예로, WARP은 트레이스 헤더(도 6의 670)를 기다릴 수 있다. 트레이스 헤더(670)는 WARP를 스케줄링하기 전에 발생되는 이벤트 리스트 및 트레이스를 완료하기 위하여 필요한 리소스들을 포함할 수 있다. 리소스가 사용 가능하게 되고 이벤트가 발생하면, WARP는 후보가 될 수 있다. 일 예로, WARP 스케줄러는 WARP 후보 중 다음에 실행될 WARP를 선택할 수 있다.
일 예로, WARP이 스케줄링 된 후, WARP 스케줄러는 트레이스(65)의 명령(도 6의 660-661)을 명령 캐시에서 명령 디코더로 이동시켜 루프 버퍼(도4 의 410)를 미리 적재할 수 있다. 명령 디코더는 명령을 디코딩하고, 디코딩된 정보를 루프 버퍼(410)에 배치할 수 있다. 일 예로, 트레이스(650)가 루트 버퍼(410)에서 설치되면, WARP이 스케줄링될 수 있다.
WARP 스케줄러는 루프 버퍼(410) 내에서 적재되는 트레이스(650)를 관찰하여, 트레이스(650)가 이미 존재하는 경우 설치를 생략할 수 있다. 일 예로, WARP 스케줄러는 동일한 트레이스(650) 상의 WARP을 아직 적재되지 않은 트레이스(650)의 WARP보다 우선시킬 수 있다. WARP은 작업 유닛(305)을 실행할 수 있다. 일 예로, WARP은 픽셀 셰이더 프로그램의 시작에 앞서 인터폴레이션 및 텍스쳐 엑세스를 시작할 수 있다. 레지스터 파일의 할당은 레지스터 파일(도 4a, b의 420)에 인터폴레이션 및 텍스쳐 엑세스가 값을 전달할 때까지 연기될 수 있다. 레지스터 파일(420)이 할당되고, 일부는 입력 데이터로 미리 채워질 수 있다. 일 예로, 스칼라 데이터는 스칼라 레지스터 파일에 쓰여질 수 있다.
도 4a, b는 다양한 실시예에 따른 처리부(400)의 구조를 나타낸다.
처리부(400)는 8개의 연산 레인(lane, 401-402), 레지스터 파일(420) 및 루프 버퍼(410)를 포함할 수 있다. 루프 버퍼(410)는 작은 명령 캐시, 명령 디코더 및 명령 시퀀서(sequencer)를 포함할 수 있다. 레지스터는 연산으로부터 수신되는 소프트웨어 값을 포함하고, 레지스터 파일(420)은 레지스터를 유지하는 SRAM의 조직일 수 있다.
부동 소수점 주산 유닛(FMAD Unit)은 단일 정밀도의 부동 소수점 산술 명령을 수행하고, 초월적 명령을 이용하는 μ코드가 될 수 있다. 정수 유닛은 대부분의 정수 연산, 논리 연산 및 메모리 주소 계산을 수행할 수 있다. 비트 연산 유닛은 비트 연산 동작을 수행할 수 있다. 일 예로, 파이프라인 시간은 계산 유닛 입력 멀티플렉서에의 두 개의 포워딩 경로를 제외하고는 엄밀하게 하향되어 흘러갈 수 있다. 처리부(400)의 상단의 구조는 처리부(400)의 하단의 구조와 같은 PDP SRAM 구성 요소일 수 있다. 일 예로, 상단 PDP SRAM 구성 요소는 연산 대상을 판독하고 연산에 전달하는데 이용될 수 있다. 하단의 PDP SRAM 구성 요소는 연산된 값을 레지스터 파일(420)에 다시 쓰는데 이용될 수 있다.
일 예로, 처리부(400)에 대하여 4개의 연산 대상 플리플랍(flip-flop)만이 콜렉터(collector)의 수요를 충족시킬 수 있다. 일 실시예에 따르면, 단일 정밀도, 하프 정밀도 및 쿼터 정밀도를 포함하는 일반 시퀀스 및 더블 정밀도 및 소정 정수 명령을 포함하는 SFU(special functional units) 시퀀스는 다른 방식으로 SRAM을 엑세스함으로써 충족될 수 있다. 일 예로, 레지스터는 제 1 의 두 엑세스에 대하여 짝-홀 쌍으로 이용될 수 있고, 제 2의 엑세스 세트에 대하여 짝-짝 쌍 및 홀-홀 쌍으로 이용될 수 있다. 제어는 복잡하지만 필요한 멀티플렉서의 수를 줄일 수 있다.
도 5는 다양한 실시예에 따른 셰이더(600)의 구조를 나타낸다.
일 실시예에 따르면, 셰이더(600) 셰이더 헤더(610), 셰이더 활성 검색 테이블(616), 셰이더(600) 내의 각각의 트레이스(620-621)에 대한 트레이스 포인터 어레이(617) 및 트레이스(600-621)로 구성될 수 있다. 일 예로, 셰이더(600)는 캐시 라인 경계(32 또는 64 bytes) 상에서 시작할 수 있고, 셰이더(600) 내의 각각의 구성은 4 bytes의 한 워드(word)일 수 있다.
일 예로, 셰이더 헤더(610)는 트레이스(620-621)의 트레이스 카운트(611), 스레드 당 레지스터의 수인 레지스터 카운트(612), 브레이드 제어 정보(615) 및 고정 기능 비트(613)를 포함할 수 있다. 셰이더 헤더(610) 바로 뒤의 활성 검색 테이블(616)은 32로 분할된 트레이스의 수를 포함할 수 있다.
일 예로, 브레이드 제어 정보(615)의 브레이드 식별자는 고정 기능 유닛에 의해 작업 유닛(도 3의 305)을 단일 스레드에 배치하는데 이용될 수 있다. 일 예로, 비트(614)는 활성 검색 테이블에 리스트가 존재하는지를 나타낼 수 있다. 활성 검색 테이블은 각각의 트레이스(620-621)에 대한 하나의 비트의 비트 벡터일 수 있다. 일 예로, 리스트는 실행 마스크가 0이 될 때 제 1 실행 명령을 신속하게 검색하는데 이용될 수 있다. 검색은 FFS 회로(Find First Set circuit)에 의하여 수행될 수 있고, 단위 사이클 당 32 또는 64 트레이스(620-321)가 처리될 수 있다. 트레이스 포인터 리스트를 인덱싱하여 트레이스 번호가 결정될 수 있고, WARP은 결정된 번호의 트레이스가 다음 번에 구동되도록 스케줄링될 수 있다.
활성 검색 테이블은 셰이더에서 앞선 분기(Forward Branching), CALLs 및 RETurns, 및 간접 도약(indirect Jumping)으로 사용될 수 있다. 일 예로, 셰이더(600)는 셰이더 헤어(610)에서 비트(614)를 제거함으로써 테이블을 생략할 수도 있다. 일 예로, 대부분의 셰이더(610)는 작으므로 테이블은 오버헤드를 나타내지 않을 수 있다. 일 예로, 고정 기능 식별자(613)가 설정되면, 셰이더(600)의 제 1 트레이스(620-621)(예컨대, 트레이스 0)는 고정 기능 유닛에 대한 명령을 포함할 수 있다. 명령은 WARP 실행과 함께, 독립적 및 잠재적으로 구동될 수 있다. 일 예로, 비트(613)가 설정되지 않으면, 트레이스 0은 셰이더 프로그램에 의하여 실행될 제 1 트레이스(620-621)일 수 있다.
일 예로, 트레이스 포인터 어레이(617)에는 트레이스 포인터들이 포함되고, 트레이스 포인터들에 의하여 특정 트레이스(620-621)가 식별될 수 있다. 트레이스 포인터는 36 비트 주소 공간에 대하여 명령을 엑세스하는데 이용될 수 있다. 트레이스 포인터의 값은 4 비트 시프트되어 명령의 바이드 주소가 될 수 있다. 4비트는 32 바이트 캐시 라인 및 36 비트 주소 공간에 대응되고, 5 비트는 64 바이트 캐시 라인 및 37 비트 주소 공간에 대응될 수 있다. 일 예로, 셰이더 스레드는 입력 데이터 세트를 수신하고, 출력 데이터 세트를 연산할 수 있다.
일 예로, 셰이더 헤더(610)의 다른 필드는 입력 데이터 아이템의 그룹 및 사이즈에 기초하여 레지스터를 채우기 위하여 그래픽스 파이프라인(예컨대, 도 10의 1000)을 구성하기 위한 데이터들을 포함할 수 있다. 일 예로, 셰이더 헤더(610)의 추가적인 필드는 방출되는 데이터에 대한 그래픽스 파이프라인(1000)을 구성하는 데이터를 포함할 수 있다. 일 예로, 셰이더 헤더(610)의 추가적인 필드는 그래픽스 파이프라인 구성 데이터 구조에 저장될 수 있다. 그래픽스 파이프라인 구성 데이터 구조는 연관된 셰이더에 대한 포인터를 포함할 수 있다.
일 예로, 그래픽스 파이프라인(1000)이 구성되면, 드라이버는 구성을 구동시키는 셰이더 프로그램에 의하여 엑세스되는 콘스탄트 스크래치(constant scratch)를 초기화할 수 있다. 콘스탄트 스크래치는 GPU의 셰이더 코어 내의 4개의 처리부(도 4a, b의 400)를 걸쳐 공유될 수 있다. 일 예로, 앞선 구성은 적재(load) 명령 및 셰이터 프로그램으로부터의 연관된 지연 시간을 제거할 수 있다. 일 예로, 입력 데이터 세트는 WARP이 셰이더(600)의 구동을 시작하기 전에 셰이더 구성자에 의하여 레지스터 파일(420) 내에 배치될 수 있다. 출력 데이터는 셰에더(600)의 말단 근처에서 다른 고정 기능 유닛으로 방출될 수 있다.
도 6은 다양한 실시예에 따른 트레이스(650)의 구조를 나타낸다.
일 예로, 트레이스(650)는 WARP의 스케줄링 이벤트로부터 수행될 명령(660-661)의 연속일 수 있다. 일 예로, 트레이스(650)는 트레이스 헤더(670) 및 처리부(400)의 명령(660-661)의 연속을 포함할 수 있다. 트레이스 헤더(670)는 스케줄링에 앞서 발생되어야 하는 이벤트의 리스트 및 완료까지 구동되기 위하여 명령이 필요로 하는 모든 리소스의 리스트를 포함할 수 있다. 트레이스(650)는 루프(loop)를 포함하는 전 후의 브랜치(branch)를 포함할 수 있다. 일 예로, 트레이스(650)의 명령은 불명확한 지연 시간으로 결과에 의존하지 않을 수 있다.
트레이스 헤더(670) 및 명령(660-661)은 62 비트 사이즈이고, 캐시 라인 경계에서 시작될 수 있다. 일 예로, 트레이스 헤더(670)는 WARP이 재스케줄링되기 전에 발생되어야 하는 두드러진 이벤트들을 나타내는데 이용되는 비트 벡터를 포함할 수 있다. 트레이스 헤더(670)는 메모리 참조(679), 텍스쳐 참조(678) 및 인터폴레이션 참조(IPA, 677)를 위한 필드를 포함할 수 있다. 또한, TBD(Texture Buffer Done, 672)를 위한 8 비트 필드를 더 포함할 수 있다. 트레이스 헤더(670)는 WARP이 스케줄링되기 전에 필요한 버퍼 공간의 양의 필드 기술자를 더 포함할 수 있다. 일 예로, 메모리 필드(676)는 WARP이 스케줄링되기 전에 메모리 주소 버퍼 내에 사용 가능해야 하는 메모리 참조의 양을 나타낼 수 있다. TCB 필드(675)는 텍스쳐 스케줄링 전에 TCB(Texture Coordinate Buffer)에서 할당되어야하는 텍스쳐 좌표의 양을 나타낼 수 있다. TB 필드(674)는 TCB 할당의 잔존을 나타낼 수 있고, IP 필드(673)는 IPA 요청의 수를 특정할 수 있다. IPA는 주로 Push Mode이거나, 처리부(400)로 페이지 테이블 엔트리를 전송하고 인터폴레이션을 연산하도록 할 수 있다.
일 예로, 트레이스(650)의 명령(671)의 수는 루프 버터(410)의 크기에 제한될 수 있다. 예를 들어, 64 내지 128의 미리 디코딩된 명령으로 제한될 수 있다. 일 예로, 각각의 명령(660-661)은 32 연산까지 처리하기 때문에, 트레이스(650)는 루프 동작 없이도 완료까지 몇 백 사이클의 연산을 실행할 수 있다. 이때, WARP 스케줄러는 완료된 WARP를 스케줄링하고 루프 버퍼를 미리 적재하여, 명령(660-661) 간에 오버 헤드 없이 WARP 스위치가 발생할 수 있다.
일 예로, 트레이스(650)가 실행되면, 두드러진 이벤트가 기록될 수 있다. 뒤이은 트레이스의 트레이스 헤더(670)는 뒤이은 트레이스에서 WARP의 스케줄링에 앞서 처리되어야 하는 두드러진 이벤트의 비트 벡터를 포함할 수 있다. 일 예로, 모든 요구되는 두드러진 결과가 수행될 때까지 WARP의 실행이 스케줄링되지 않을 수 있다. 또한, 셰이더 컴파일러가 뒤이은 트레이스가 실행되기 위하여 두드러진 이벤트의 일부가 필요치 않은 것으로 결정할 수도 있다.
일 예로, 명령(660-661)이 루프 버퍼(도 4a, b의 410)에서 디코딩 되는 것과 같이, 명령이 스레드를 활성화하면, 명령은 활성 검색 테이블(도 5의 616)의 비트의 세트를 디코딩할 수 있다. 일 예로, 실행 마스크가 비면, 활성 검색 테이블(616)은 신속하게 명령을 스킵하는데 이용될 수 있고, 작업의 유휴 유닛을 다시 활성 상태로 전환할 기회가 없을 수 있다. 일 예로, 활성 검색 테이블(616)이 WARP의 스케줄러에 의하여 이용됨에 따라, 실행 마스크가 제거되면 실행되어야 하는 명령은 비활성 작업 유닛(305)을 활성 작업 유닛(305)으로 전환할 수 있다.
일 예로, 셰이더 헤더(610)의 비트(도 5의 613)가 세팅되면, 트레이스 0은 자동으로 실행하거나 셰이더(600)로부터의 신호에 의하여 실행되기 위하여 고정 기능 유닛에 대한 명령의 리스트를 포함할 수 있다. GPU의 컴파일러에 의하여 레지스터 파일(도 4a, b의 420)를 관리할 수 있다. 일 예로, 트레이스(650)는 일반적으로 인터폴레이션 요청 및 텍스쳐 요청으로 구성될 수 있다. 대부분은 레지스터 파일(420)을 WARP에 할당하기 전에 처리될 수 있다. 일 예로, 텍스쳐 요청이 완료에 다다른 때에만, 대기 WARP에 할당되기 위하여 레지스터 파일(420)이 요구될 수 있다.
도 7a 및 도 7b는 다양한 실시예에 따른 셰이더(600) 및 트레이스(650)의 관계(700)를 나타낸다.
일 예로, 셰이더(600) 및 트레이스(650)는 둘 다 캐시 라인 경계에 위치할 수 있다. 주소 지정 가능한 명령 공간은, 32 비트 포인터가 38 비트 바이트-주소 지정 가능한 공간을 가리키도록 할 수 있는 64 바이트 캐시 라인으로 증가될 수 있다. 도 7a, b을 참조하면, 명령을 활성화하는 활성 필드(710)도 나타난다.
도 8은 일 실시예에 따른 두 개의 비단순 스레드 집단을 포함하는 WARP(800)의 일 예시를 나타낸다.
일 실시예에 따르면, GPU(도 2의 129)는 트레이스 구조(도 6의 600)에 기초한다. 각각의 트레이스는 단일 유닛으로서의 우선권 없이 결정된 지연을 갖는 명령 시퀀스일 수 있다. 각 트레이스는 입력 값들의 세트를 가지고 있으며, 결과적으로 동일한 프로그램의 다른 트레이스 (들)에 대한 입력으로서 소비 될 수도 있고, 출력값들의 세트를 연산할 수 있다. 일 실시예에 따르면, 도 4a, b와 같은 SIMD/T 실행 환경에서, 동일한 트레이스는 잠재적으로 상이한 입력 값의 세트를 갖는 다중 스레드의 실행에 적용될 수 있다. 또한, 서로 다른 스레드는 입력 값의 정확하게 동일한 세트를 가질 수 있고, 스레드 집단으로 결합될 수 있다.
일 예로, GPU는 WARP라고 불리는 제한된 사이즈의 그룹으로 스레드를 결합시킬 수 있다. GPU가 트레이스를 실행시키면, 트레이스 바디(body)에 주어진 코드가 해당 코드를 필요로 하는 해당 WARP 내의 모든 활성 스레드에 적용될 수 있다. 일 예로, 32 스레드의 WARP을 보면, 입력 레지스터 {R0, R1, R2, R3}의 세트의 트레이스의 실행이 요구될 수 있다. 해당 트레이스가 다른 스레드에 의하여 출력된 값에 의존하지 않는 N 명령을 실행함으로써 출력 레지스터 {R0, R1}의 세트를 출력하는 것으로 가정할 수 있다. WARP(800)의 스레드 t0, t1, t2, t3, t4, t5에 대하여 다음과 같이 가정할 수 있다.
R0(t0) = R0(t1) = R0(t2) = R0(t3) = R0(t4) = R0(t5)
R1(t0) = R1(t1) = R1(t2) = R1(t3) = R1(t4) = R1(t5)
R2(t0) = R2(t1) = R2(t2) = R2(t3) = R2(t4) = R2(t5)
R3(t0) = R3(t1) = R3(t2) = R3(t3) = R3(t4) = R3(t5).
일 예로, WARP(800)의 스레드 t20, t21, t22, t23에 대하여 다음과 같이 가정할 수 있다.
R0(t20) = R0(t21) = R0(t22) = R0(t23)
R1(t20) = R1(t21) = R1(t22) = R1(t23)
R2(t20) = R2(t21) = R2(t22) = R2(t23)
R3(t20) = R3(t21) = R3(t22) = R3(t23).
또한, R0, R1, R2, R3 레지스터 각각의 값의 세트가 정확하게 동일한 다른 스레드 쌍은 없는 것으로 가정할 수 있다. 이때, 해당 트레이스를 실시하는 동안 스레드 집단은 다음과 같을 수 있다.
스레드 집단(815): {t0, t1, t2, t3, t4, t5},
별개의 분리된 스레드 집단들: {t6} {t7} {t8} {t9} {t10} {t11} {t12} {t13} {t14} {t15} {t16} {t17} {t18} {t19},
스레드 집단(825): {t20, t21, t22, t23},
별개의 분리된 스레드 집단들: {t24} {t25} {t26} {t27} {t28} {t29} {t30} {t31}.
일 실시예에 따르면, 스레드 t0(810)을 수행하여 스레드 t1, t2, t3, t4 및 t5의 대응되는 출력 레지스터에 전파하면 충분할 수 있으므로, 스레드 집단(815) 내의 모든 스레드를 실행할 필요가 없을 수 있다.
일 실시예에 따르면, 스레드 t0(810)이 트레이스 코드를 실행하는 동안, 스레드 t1, t2, t3, t4 및 t5는 억제될 수 있다. 일 예로, 실제로 코드를 실행하는 스레드는 “리더 스레드(leader thread)” 또는 “집단 리더”가 될 수 있다. 집단 내의 다른 스레드들은 팔로워(follower) 스레드일 수 있다. 이때, 스레드 t0(810)은 집단 리더이고, 스레드 t1, t2, t3, t4 및 t5는 팔로워 스레드 일 수 있다. 유사하게, 스레드 집단(825)에서 스레드 t20(820)만이 실행되고, 출력 레지스터로부터 연산 결과가 다른 스레트 t21, t22, t23로 전달될 수 있다. 다양한 실시예에 따르면, 각 스레트 집단에서 하나의 리더 스레드를 제외한 모든 스레드에 대한 N(양의 정수) 명령을 실행하지 않고, 결과를 전파함으로써, 전원 절약이 될 수 있다.
도 9는 일 실시예에 따른 적은 스레드 집단을 포함하는 WARP(900)의 일 예시를 나타낸다.
일 예로, 스레드 집단은 서로 인접한 스레드들만을 포함할 필요가 없을 수 있다. WARP에서 이웃하지 않는 서로 다른 두 개 이상의 스레드들도 동일 스레드 집단이 될 수 있다. 일 예로, 도 8의 WARP은 스레드 t15, t17, t20, t21, t22, t23 에 동일한 입력 값의 세트를, 다른 스레드에 다른 입력을 줌으로써 변화될 수 있다. WARP(900)는 팔로워 스레드로서 스레드 t17(915) 및 스레드 {t20, t21, t22, t23}(920)과 함께 리더 스레드 t15(910)를 포함하는 하나의 스레드 집단을 포함할 수 있다.
일 실시예에 따르면, 집단 리더는 임의로 선택될 수 있다. 스레드 집단 내의 모든 스레드들이 정확히 동일한 값의 세트를 출력하기 때문이다. 스레드 집단 내의 어떤 스레드도 집단 리더로 고려될 수 있다. 일 예로, 간편함을 위하여 리더 스레드는 가장 작은 스레드 ID를 갖는 스레드로 선택될 수도 있다. 스레드 인접성은 일반적으로 요구되지 않지만, 스레드 집단에서 스레드 인접성에 대한 추가적인 제약을 부가하는 것은 하드웨어 구현을 단순하게 만들 수 있다.
일 실시예에 따르면, 상술한 일반적인 접근을 구현하기 위하여 하드웨어는 다음과 같은 동작을 수행할 수 있다. 컴파일러에 의하여 주어진 트레이스 입력 레지스터 맵은 스레드 집단들을 찾거나 획득하고, 컴파일러에 의하여 주어진 트레이스 출력 레지스터 맵은 연산된 값들의 전파 또는 전달을 실행한다. 예를 들어, 컴파일러는 비용 편익 분석(cost/benefit analysis)을 제공하고 집단화(clusterization) 후보로서의 특정 트레이스를 마크하도록 전문화될 수 있다. 일 예로, 트레이스의 명령이 상대적으로 적으면, 컴파일러는 해당 트레이스를 후보도 선택하지 않을 수 있다.
일반적으로, 중복 감지 및 제거 방법을 지원하기 위한 하드웨어 구현은, 서로 다른 스레드로부터 레지스터릴 판독함으로써 집단화(clusturing) 결정을 해야 하고 위양성(false positive)을 회피하기 위하여 후속의 쌍 단위 비교의 해시 테이블(hash-table)을 구현해야 하기 때문에, 비용이 높을 수 있다. 일 실시예에 따르면, 구현의 효율성을 위하여, 위의 접근의 단순화된 방법은 다음과 같이 구현될 수 있다. 컴파일러에 의하여 마크된 각 후보 트레이스에 대한 스레드 집단화 결정을 하는 대신에, 동일한 컨셉에 대하여 “실무율(all-or-none)” 버전으로 구현되어 더욱 단순한 하드웨어 인프라 구조가 지원될 수 있다. 일 예로, 전체 프로그램에 대한 입력의 식별정보(ID)는 스레드 집단을 찾는 것에 반복적인 동작을 피하기 위하여 감지될 수 있다. 일 실시예에 따르면, 전체 프로그램이 명확하게 스레드 ID에 의존적이지 않고, 다른 스레드로부터 출력된 결과에 영향을 주지 않는 경우, 전체 프로그램에 의하여 동일한 입력 값이 동일한 출력 값을 얻어질 것으로 기대될 수 있다. 이 경우, 참인 프로그램 출력만이 전파될 수 있고, 모든 팔로워 스레드는 실행이 억압되기 때문에 중간 값을 전파할 필요가 없을 수 있다.
도 10은 다양한 실시예에 따른 그래픽스 파이프라인(1000) 또는 GPU(예를 들어, 129)의 블록도의 일 예시를 나타낸다. 일 예로, 셰이더 코어는 4개의 처리부(도 4a, b의 400) 쌍들 및 몇몇의 고정 기능 유닛들을 포함할 수 있다. 일 예로, 텍스쳐 및 인터폴레이션은 집중화되는 반면에, 고정 기능 유닛들(예컨대, 적재 또는 저장)의 일부는, 처리부(400) 쌍들과 함께 분포될 수 있다. 일 예로, 고정 기능 유닛들 중 다수는 부가적인 버스들과 함께 그래픽스 파이프라인(1000)으로 표현될 수 있다. 일 예로, 처리부(400)의 관점에서, 처리부(400)가 그래픽스 파이프라인(1000)의 나머지와 연결되도록 6개의 버스들이 있을 수 있다.
일 예로, 그래픽스 파이프라인(1000)은 256 비트 결과와 32 비트 사용 가능 버스(bus)를 포함할 수 있다. 버스는 출력부를 통하여 그래픽스 파이프라인(1000) 의 다음 단계로 결과를 이동시키고, 주소들을 LSU(load/store unit)로 이동시키고, 텍스쳐 좌표를 텍스쳐 좌표 버퍼(TCB)로 이동시키고, 오프셋 데이터를 인터폴레이션을 위한 인터폴레이터로 이동시키기 위한 역할을 할 수 있다. 일 예로, 그래픽스 파이프라인(1000)은 256 비트 적재와 32 비트 사용 가능 버스를 포함할 수 있다. 사용 가능 버스는 적재 데이터, 텍스쳐 결과, 인터폴레이션 결과 및 초기화 데이터를 레지스터 파일(420)으로 전달할 수 있다. 사용 가능 버스에 결합되고, 두 사이클 먼저 구동되는 적재 주소 버스는, 9 비트 레지스터 주소를 루프 버퍼(410)로 전달하고, 32 비트 기록 허용 비트를 레지스터 파일(42)에 전달할 수 있다.
일 예로, 그래픽스 파이프라인(1000)은 256 비트 저장 데이터와 32 비트 사용 가능 버스를 포함할 수 있다. 사용 가능 버스는 레지스터 판독 데이터를 LSU로 전송하도록 할 수 있다. 일 예로, 저장 주소 버스는 사용 가능 버스에 결합되고 두 사이클 먼저 구동될 수 있다. 사용 가능 버스 상의 프로토콜은 파이프라인 박자에 따라 주소를 전송할 수 있고, 뒤이은 사이클에 데이터가 수신되고 파이프라인의 4 박자 동안 지속되는 경우, 두 사이클 뒤에 신호 지시가 있을 수 있다.
일 예로, 그래픽스 파이프라인(1000)은 64 비트 명령 버스를 포함할 수 있다. 명령 버스는 명령 비트 패던 및 재배치된 레지스터 주소를 LSU, 텍스쳐 및 인터폴레이터에 전달할 수 있다. 일 예로, 명령 버스의 대부분의 이용은 명령 전송에 12 비트만이 요구될 수 있다. 다만, 9 비트 전송된 레지스터 파일 주소 비트에 따라 명령 전송에 60 비트까지 요구될 수 있다.
일 예로, 래스터라이져는 그래픽스 파이프라인(1000) 흐름의 시작에서 프리미티브(primitive)를 처리할 수 있다. 일 예로, 드로우(draw) 지시가 그래픽스 드라이버 또는 임의의 지시 프로세서로부터 파이프라인(1000)으로 수신될 수 있다. 드로우 지시는 그래픽스 상태(graphics state, GS)와 연관될 수 있다. 그래픽스 상태는 오픈지엘(Open Graphics Library, OpenGL) API(application program interface)를 구현하는 파이프라인에 대한 OpenGL 상태 장치의 현재 상태를 나타낼 수 있다. 일 예로, 래스터라이져는 프리미티브가 현재 타일이 있는지 여부를 결정할 수 있고, 현재 타일에 있다면 셋업을 위한 평면 방정식 테이블(Plane Equation Table)을 설정하고, 인터폴레이터 좌표 버퍼로 픽셀의 쿼드들이 흘러나오도록 처리할 수 있다. 인터폴레이터는 각 쿼드들에 대하여 평면 방정식 테이블을 이용할 수 있고, 프레임 좌표 공간으로 쿼드들을 인터폴레이션할 수 있다. 결과는 텍스쳐 유닛인 텍스쳐 좌표 버퍼(TCB)로 전달될 수도 있고, 또는 LSU를 통하여 처리부(도 4a, b의 400)의 레지스터 파일(400)로 전달될 수 있다. 일 예로, 텍스쳐 유닛은 텍스쳐 좌표 버퍼 내에 저장된 좌표를 이용할 수 있고, 명령의 제어에 따라 텍스쳐된 쿼드를 생성할 수 있다.
일 예로, 생성자(constructor, 1005)는 처리에 대하여 WARP의 할당 및 구축을 관리할 수 있다. 일 예로, 생성자(1005)는 WARP을 WARP을 할당하고, 레지스터 파일(420)을 WARP과 연관시키고, 레지스터 파일(420)을 초기화 데이터로 채우고, WARP 관리부(1030)를 WARP을 실행하기 위하여 시그널링할 수 있다. LSU은 메모리 참조 명령을 수행하고, 다른 고정 기능 유닛과 레지스터 파일(420) 간의 인터페이스를 제공할 수 있다. 일 예로, WARP 관리부(1030), 레지스터 파일(420) 및 연산부(Computation Unit)은 루프 버퍼(410)를 포함하는 처리부(도 4a, b의 400)을 포함할 수 있다.
일 예로, 출력부(EMIT Unit)는 셰이터 프로그램(1010)으로부터 출력된 데이터를 라우팅하고, 그래픽스 파이프라인(1000)을 다음 단계로 넘길 수 있다. 출력 데이터의 공유 메모리로의 발송에 많은 시간이 걸려서 잠재인 다른 처리부(400) 내의 새로운 WARP는 그래픽스 파이프라인(1000)의 다음 단계를 처리를 시작할 수 있다. 일 예로, 그래픽스 파이프라인(1000)의 CCV 유닛(Clip Cull and Viewport, 미도시)은 래스터라이져에 의하여 처리될 처리된 프리미티브의 중간 표시를 생성할 수 있다. 일 예로, ROP 유닛(Raster Operation Unit, 미도시)은 연산 및 텍스쳐된 쿼드를 취하고, 프레임 버퍼로 쿼드의 데이터를 통합한다.
일 예로, 그래픽스 프로세싱 슬라이스는 8개의 처리부(도 4a, b의 400), 여러 개의 고정 기능 유닛 및 GPU 네트워크를 위한 인터페이스로 구성될 수 있다. GPU는 그래픽스 프로세싱 슬라이스로 작업의 1회분을 전달할 수 있다. 그래픽스 프로세싱 슬라이스는 작업을 WARP 사이즈의 번들로 파싱하고, 그래픽스 파이프라인(1000) 및 셰이더 프로그램을 초기화하고, 작업의 스레드를 처리부(400)에서 구동될 WARP에 할당할 수 있다. 그래픽스 파이프라인(1000)의 예시는 데이터가 그래픽스 프로세싱 슬라이스 주위에 라우팅되는 방법의 일 예시를 나타내는 것으로서, 다른 구현 및 구성이 포함될 수 있고, 다른 구성으로 치환될 수 있으며, 몇몇의 구성은 생략될 수도 있다. 일 예로, 그래픽스 프로세싱 슬라이스에는 8개의 처리부(400), 4개의 LSU, 다섯 생성자(1005)의 한 세트, 적어도 하나의 인터폴레이터 및 적어도 하나의 텍스쳐 유닛이 포함될 수도 있다.
일 예로, WARP의 레지스터 파일(420)은 WARP 데이터 구조에 포함된 기초 오프셋에 기반하여 제어될 수 있다. 일 예로, 명령 내의 레지스터는 명령 내의 레지스터에 WARP 내의 2 비트 이동(shifted up)된 기초를 추가함으로써 레지스터 파일(420)에 매핑될 수 있다. 일 예로, 추가 연산은 5 비트 가산기에 의하여 수행될 수 있다. 일 예로, 집중화된 고정 기능 유닛에 나타난 레지스터 주소는 처리부 번호, 레지스터 파일 비트, 레지스터 주소를 포함할 수 있다. 일 예로, 레지스터 주소의 낮은 순서 2 비트는 SRAM(SRAM bank)을 선택할 수 있다. 처리부 번호는 레지스터 파일 비트가 스레드 레지스터 파일 엑세스 또는 스칼라 레지스터 파일 엑세스 중 어느 하나는 선택하는 동안에, 알맞은 처리부(400)의 레지스터 파일(420)에 요청을 라우팅할 수 있다.
일 실시예에 따르면, GPU(예컨대, 도 2의 GPU(129))는 IPA-PUSH 모델을 구현할 수 있다. 즉, 대부분의 경우에 있어서, IPA 및 이에 따른 텍스쳐 명령들은 셰이더 외부의 고정 기능에 의하여 셰이더 실행의 시작에 앞서 실행될 수 있다. 일 실시예에 따르면, 셰이더에서 요구되는, 텍스쳐 및 IPA 명령에 의하여 연산된 값들은, WARP의 각각의 스레드의 레지스터 파일에 배치되고, 셰이더의 나머지에 대한 개념상 입력 값이 될 수 있다. 따라서, 하드웨어가 IPA-텍스쳐 출력 레지스터를 분석하는 스레드 집단을 찾고 남은 셰이더 코드가 인터-스레드 효과로부터 자유로운 경우, 스레드 집단은 끝까지 실행될 수 있다. 일 예로, 하드웨어는 텍스쳐 데이터 리턴 인터페이스에서 스레드 집단화를 실행할 수 있다. 일 실시예에 따르면, 아래의 과정은 실행에 이용될 수 있다.
A) 8 엔트리의 해시 테이블을 생성하는 단계: 각 엔트리는 리턴 텍스쳐 값, 리더 스레드 ID 및 팔로워 스레드의 32비트 비트벡터를 포함할 수 있다.
B) 각 스레드에 대한 처리:
i) 해시 테이블 내의 컬러 값을 참조할 수 있다.
ii) 매치되는 값이 없고 현재 엔트리가 뒤이은 값을 갖지 않는 경우, 스레드를 대체하고, 그렇지 않은 경우 스킵할 수 있다.
iii) 스레드가 첫 번째 스레드인 경우, 리턴 텍스쳐 값 및 리더 스레드 ID를 설정하고, 그렇지 않은 경우 매치되면 뒤이은 비트 벡터 32비트 내의 한 비트를 설정할 수 있다.
iv) 팔로워 스레드의 번호에 우선하여 인코딩하고, 적어도 하나의 팔로워 스레드의 해시 테이블로부터 4 이하의 엔트리를 선택할 수 있다.
일 실시예에 따르면, 텍스쳐는 쿼드 기반이기 때문에, 4개의 스레드가 동시에 처리될 수 있다. 스레드가 팔로워 스레드를 빨리 획득하지 않으면, 동일한 위치에 해시된 다른 스레드로 대체하는 것을 적절할 수 있다. 다만, 스레드가 팔로워 스레드를 있는 경우, 해시된 위치에서 대체되지 않을 수 있다. 앞서 나열된 각 스레드의 절차의 끝에서, 해시 테이블은 8개의 집단까지 결과를 낼 수 있다. 몇몇은 단일 리더 스레드를 포함하고 나머지는 하나 이상의 팔로워 스레드를 포함할 수 있다. 일 예로, 우선적 인코딩이 팔로워 스레드의 최대 수에 따라 4개의 집단을 선택하는데 이용될 수 있고, 클럭 게이팅(clock-gating)으로부터의 최대로 전원 절약되는 최대 팔로워 스레드들이 획득될 수 있다.
일 실시예에 따르면, 텍스쳐 집단화 페이즈는 해시 테이블로부터 아래의 출력을 생성할 수 있다:
A) 리더 스레드 및 집단화되지 않은 스레드의 활성 비트 벡터
B) 활성 비트 벡터 내의 모든 스레드에 대한 컬러(텍스쳐 리턴) 값
C) 집단 ID, 리더 스레드 ID 및 팔로워 스레드의 비트 벡터를 각각 갖는 네 개의 집단
일 예로, 텍스쳐 페이즈로부터의 출력은 모든 스레드에 대한 리턴 텍스쳐 값을 전형적으로 포함할 수 있다. 일 예로, 4개까지의 리더 스레드 및 다른 집단화되지 않은 스레드로 구성된 활성 스레드 비트 벡터는, 출력으로 전송될 수 있다. 각 스레드에 대하여, 텍스쳐 유닛으로부터의 컬러 값은 리턴될 수 있다. 일 예로, 팔로워 스레드에 대한 컬러 값은 리더 스레드에 대한 컬러 값과 동일하기 때문에 전송되지 않을 수 있다. 4개의 집단의 각 ID는 집단 ID, 리더 스레드 ID 및 팔로워 스레드의 32비트 비트 벡터로 나타날 수 있다.
일 예로, ABAA_CDEE 과 같은 8 스레드 WARP에서, 스레드 0, 2 3은 컬러 A를 생성하고, 스레드 6 및 7은 컬러 E를 생성하고, 스레드 1, 4 및 5는 집단화되지 않을 수 있다. 리더 스레드는 0 및 6일 수 있다. 활성 비트 벡터 1100_1110은 집단화되지 않은 스레드 1, 4 및 5를 포함할 수 있다. 리턴 컬러 값은 A, B, C, D 및 E만을 포함할 수 있다. 예를 들어, 스레드 2 및 3에 대한 동일한 컬러는 반복적으로 다시 전송되지 않을 수 있다. 이때, 두 개의 해시된 위치(예를 들어, 0 및 1)만이 다음과 같이 적어도 하나의 팔로워 스레드를 가질 수 있다. 리더 스레드 ID가 0인 집단 0은 팔로워 스레드의 비트 벡더 0011_0000을 가질 수 있다. 리더 스레드 ID가 6인 집단 1은 팔로워 스레드의 비트 벡터 0000_0001을 가질 수 있다.
일 실시예에 따르면, 처리부에서의 집단 삽입에 있어서, 트레이스는 각각의 집단화에 있어 복수 개의 텍스쳐 리턴 값을 소비할 수 있다. 일 예로, WARP 스케줄러(WSQ)는 2 이상의 개개의 텍스쳐 및 재-집단으로부터의 텍스쳐 집단화를 획득할 수 있다.
A) 집단화를 가리키는 비트 벡터의 AND 연산 결과를 생성;
B) 집단화 가능한 스레드에 대한 집단 ID의 연결 및 각 연결된 집단 ID에 대한 스레드의 수를 해시 테이블에 업데이트;
C) 최대 스레드 수의 4개의 집단까지 선택; 및
D) 각 집단에 대한 새로운 리더 스레드 및 팔로워 스레드 비트 벡터 생성.
집단 교차의 필요를 설명하기 위한 예시로서, 트레이스에 의하여 소비되는 두 개의 별개의 텍스쳐의 예시를 다음과 같이 고려해볼 수 있다. 텍스쳐 중 하나는 텍스쳐 유닛에 의하여 4 스레드 WARP을 나타내는 AABB로 집단화될 수 있다. 스레드 집단에서 스레드 0 및 1은 하나의 스레드 집단에 포함되고, 스레드 2 및 3은 다른 스레드 집단에 포함될 수 있다. 다른 텍스쳐는 CDDD로 집단화 될 수 있다. CDDD는 스레드 0은 집단화되지 않고 스레드 1, 2 및 3이 집단화될 수 있다. 트레이스는 두 텍스쳐를 모두 소비하기 때문에, 실행될 수 있는 최선은 두 텍스쳐로부터 동일한 값을 소비하는 스레드들을 함께 집단화하는 것일 수 있다. 예를 들어, 스레드 2 및 3은 B 및 D를 소비하고, 집단화될 수 있다. 스레드 0 및 1은 첫 번째 텍스쳐로부터 A를 소비하지만 두 번째 텍스쳐로부터는 C 및 D를 소비하므로, 집단화될 수 없을 수 있다. 따라서, WSQ는 집단 교차를 수행하고 EFGG를 집단화한다. E = (A, C), F = (A, D), G = (B, D)일 수 있다. 다음은 집단 교차를 구현하기 위한 하드웨어 구성의 예시이다.
일 실시예에 따르면, 스레드는 두 텍스쳐 모두에서 집단화되는 경우에만 집단화될 수 있다. 이때, 첫 번째 텍스쳐에 대한 집단화를 나타내는 비트 벡터는 모든 스레드의 집단화를 가리키는 1111이 될 수 있다. 또한, 두 번째 텍스쳐에 대한 비트 벡터는 스레드 0이 집단화 되지 않은 것을 가리키는 0111이 될 수 있다. 이들의 AND 연산 결과는 0111일 수 있다. 일 예로, 다음 단계에서, 첫 번째 텍스쳐로부터의 집단 ID가 획득되고, 두 번째 텍스쳐로부터 획득된 집단 ID에 덧붙여서 (00_XX, 00_00, 01_00, 01_00)와 같은 결과가 나올 수 있다. 해시 테이블은 집단화 가능한 스레드인 스레드 1, 2 및 3에 대하여 스레드 수를 업데이트 할 수 있다. 테이블은 [00_00 -> 1, 01_00 -> 2]를 포함할 수 있다. 01_00만이 1보다 큰 스레드 수를 가지므로, 01_00에 해당하는 스레드 그룹만이 교차 후에 집단화될 수 있다. 새로운 리더 스레드는 스레드 3일 수 있고, 팔로워 비트 벡터는 0001일 수 있다.
다양한 실시예에 따른 버텍스(vertex) 셰이더를 위한 방법이 구현될 수 있다. 버텍스 셰이더는 메모리의 위치로부터 페치(fetch)되는 위치 입력 및 속성을 가질 수 있다. 다양한 실시예에 따른 버텍스 셰이더를 구현하기 위하여, 하드웨어는 LSU 내의 집단 감지 및 삽입 방식을 구현할 수 있다. 이때, 수신되는 위치 및 속성 값은 IPA-PUSH 모델에서 텍스쳐 명령에 의하여 리턴되는 값의 처리와 동일한 방법으로 처리될 수 있다. 셰이더 코드가 크로스-스레드 종속성으로부터 자유로운 경우, 셰이더 엔트리 상에서 연산되는 스레드 집단은 셰이더의 전체 실행에 대하여 유지될 수 있다.
다양한 실시예에 따르면, 스레드 집단 내의 스레드의 실행의 제한 및 트레이스 경계에서의 집단화 결정에 의하여 SIMD/T 구조에 대한 전원이 절약될 수 있다. 또한, 동일한 아이디어를 이용하여 하드웨어가 셰이더 실행시에 재-집단화 없이 한 번의 집단화를 함으로써 간단한 버전의 방법을 제공할 수도 있다. 다양한 실시예에 따르면, 텍스쳐 유닛 또는 LSU로부터의 리턴 값에 기초하여 스레드 집단을 감지하고 삽입하는 과정이 수행될 수 있다.
도 11은 일 실시예에 따른 처리 환경에서 중복되는 스레드의 실행을 감소시키기 위한 과정(1100)의 흐름도를 나타낸다. 예를 들어, 처리 환경은 SIMD/T 처리 환경으로서, 예를 들어, 아래의 과정들은 도 2의 GPU(129), 도 2 전자 장치(120), 도 4a, b의 아키텍쳐 또는 도 10의 그래픽스 파이프라인(1000)에서 수행될 수 있다. 1110 단계에서, 전자 장치(100)는 서로 다른 스레드들 중 중복되는 작업을 포함하는 스레드를 감지할 수 있다. 1120 단계에서, 감지된 스레드 중 복수 개의 스레드는 동일한 스레드 연산 결과의 결정에 기초하여 적어도 어느 하나의 스레드 집단으로 그룹화될 수 있다. 1130 단계에서, 각각의 적어도 어느 하나의 스레드 집단에서 어느 하나의 스레드 이외의 모든 스레드의 실행을 억제할 수 있다. 1140 단계에서, 각각의 적어도 어느 하나의 스레드 집단에서 어느 하나의 스레드를 실행할 수 있다. 1150 단계에러, 어느 하나의 스레드의 실행으로부터 결정된 결과를 어느 하나의 스레드 이외의 스레드 집단의 모든 스레드에 전파(broadcast)할 수 있다.
일 실시예에 따르면, 과정(1100)은 감지하는 단계가, 복수 개의 서로 다른 스레드에서 동일한 명령의 시퀀스가 다른 스레드에 의하여 연산된 값에 의존하는지 결정하기 위하여, 복수 개의 서로 다른 스레드의 종속성을 분석하는 단계를 포함하는 것을 제공할 수 있다. 과정(1100)은 종속성이 없는 스레드 동일한 명령의 시퀀스의 사이즈에 기초하여 처리 환경에서 전력 소비의 잠재적 감소를 분석하고, 복수 개의 서로 다른 스레드에 대한 다수의 입력에 기초하여 중복 연산을 분석하는 단계를 더 포함할 수 있다.
과정(1100)은 중복되는 작업을 포함하는 스레드를 감지하는 단계가, 동일한 세트의 입력 값을 갖는 복수 개의 서로 다른 스레드로부터 동일한 명령의 시퀀스를 식별하는 단계를 포함하는 것을 제공할 수 있다. 동일한 명령의 시퀀스를 식별하는 단계는, 복수 개의 서로 다른 스레드에 대한 입력 레지스터 중 어느 하나 또는 텍스쳐 인터폴레이터의 출력 레지스터를 판독하는 단계 및 위양성(false positive) 결과를 회피하기 위하여, 복수 개의 서로 다른 스레드의 입력 레지스터의 후속의 쌍 단위 비교로서 데이터 구조를 이용하는 단계를 포함할 수 있다.
일 실시예에 따르면, 과정(1100)은 감지하는 단계가, 동일한 값을 갖는 복수 개의 서로 다른 스레드의 입력 레지스터를 상기 이용되는 데이터 구조에 매핑하는 단계를 더 포함하는 것을 제공할 수 있다. 그룹화하는 단계는, 명령의 시퀀스 및 세트의 입력 값이 동일하여 적어도 하나의 스레드 집단에서 동일한 결과를 연산하는, 복수 개의 스레드를 그룹화하는 단계를 더 포함할 수 있다. 일 실시예에 따르면, 과정(1100)은 그룹화하는 단계가, 스케줄러에서 서로 다른 동일한 명령의 시퀀스 간의 스레드 집단의 교차를 식별하는 단계, 및 스레드 집단의 집단 식별 정보(ID)를 연결하고 스레드 집단 내의 스레드의 비트 벡터를 업데이트하여, 교차된 스레드 집단을 재-그룹화하는 단계를 포함하는 것을 제공할 수 있다.
일 실시예에 따르면, 과정(1100)에서, 적어도 하나의 스레드 집단의 어느 하나의 스레드는, 스레드 집단에서 최소의 ID를 갖는 리더 스레드일 수 있고, 억제하는 단계는, 스레드 집단 내의 리더 스레드를 제외한 모든 스레드의 실행을 클럭-게이팅(clock-gating) 오프하는 단계를 포함할 수 있다.
일 실시예에 따르면, 과정(1100)은 결과를 전파하는 단계는, 리더 스레드에 의하여 연산된 결과를 컴파일러(compiler)로부터의 출력 레지스터 맵(map)을 이용하여 스레드 집단의 다른 스레드에 전파하는 단계를 포함하여 제공할 수 있다. 과정(1100)에서 처리 환경은 단일 명령 다중 스레드(SIMT) 또는 단일 명령 다중 데이터(SIMD) 처리 환경을 포함하는 것일 수 있다. 일 실시예에 따르면, 과정(1100)에 대하여 처리 환경은 모바일 전자 장치(예컨대, 도 2의 전자 장치(120)의 GPU(129)에 내에 포함될 수 있다.
도 12는 다양한 실시예에 따른 컴퓨팅 시스템(500)을 포함하는 정보 처리 시스템의 하드웨어 구성의 하이 레벨의 블록도를 나타낸다.
컴퓨팅 시스템(500)은 ASIC, CPU 등과 같은 적어도 하나의 프로세서(511)를 포함할 수 있다. 또한, 컴퓨팅 시스템(500)은 그래픽스, 텍스트 및 다른 데이터를 디스플레이하기 위한 디스플레이(512), Random access memory (RAM), cache 등과 같은 메인 메모리(513), 하드 디스크 드라이브와 같은 저장부(514), 이동식 저장소(515), 사용자 인터페이스부(516) 및 커뮤니케이션 인터페이스(517)을 포함할 수 있다. 예를 들어, 이동식 저장소(515)는 이동식 저장 드라이브, 이동식 메모리 인터페이스, 마그네틱 테이프 드라이브, 옵티컬 디스크 드라이브, 컴퓨터 소프트웨어 또는 데이터를 저장하는 컴퓨터 판독가능 기록 매체 등이 될 수 있다. 또한, 사용자 인터페이스부(516)는 모뎀, Wi-Fi 또는 모바일 통신과 같은 무선 송수신부, 이더넷 카드와 같은 네트워크 인터페이스, 커뮤니케이션 포트 또는 PCMCIA 슬롯 및 카드 등이 될 수 있다.
커뮤니케이션 인터페이스(517)는 컴퓨팅 시스템(500)과 외부의 장치 간에 인터넷(550), 모바일 전자 장치(551), 서버(552), 네트워크(553) 등을 통하여 소프트웨어 또는 데이터를 송수신하도록 할 수 있다. 컴퓨팅 시스템(500)은 전술한 511 내지 517의 구성들을 연결하기 위한 커뮤니케이션 구조(518)를 더 포함할 수 있다. 예를 들어, 커뮤니케이션 구조(518)는 커뮤니케이션 버스, 크로스-오버 바 또는 네트워크를 포함할 수 있다.
커뮤니케이션 인터페이스(517)를 통하여 송수신되는 정보는 전자, 전자기, 광학 또는 다른 종류의 신호로 형성될 수 있다. 신호들은, 신호들을 전달하고 와이어, 케이블, 광섬유, 전화선, 휴대 전화 링크, 라디오 주파수(RF) 링크 또는 다른 커뮤니케이션 채널로 구현되는 커뮤니케이션 링크를 통해 커뮤니케이션 인터페이스(517)에 의하여 수신될 수 있다.
다양한 실시예에 따르면, 모바일 단말, 태블릿, 웨어러블(wearable) 장치 등과 같은 무선 장치의 구현에 있어서, 컴퓨팅 시스템(500)은 카메라 인터페이스(도 2의 128)과 같은 영상 촬영부(520) 및 마이크(도 2의 122)와 같은 음성 촬영부(519)를 더 포함할 수 있다. 컴퓨팅 시스템(500)은 MMS 인터페이스(521), SMS 인터페이스(522), 이메일(email) 인터페이스(523), 소셜 네트워크 인터페이스(SNI, 524), 오디오/비디오 플레이어(AV player, 525), 웹 브라우져(526), 영상 촬영 인터페이스(527) 등의 어플리케이션 인터페이스들을 포함할 수 있다.
일 실시예에 따르면, 컴퓨팅 시스템(500)은 앞서 도 3 내지 도 10에서 설명한 스레드 처리 방법 및 도 10의 그래픽스 파이프라인(1000)을 실행시킬 수 있는 스레드 처리 인터페이스(530)을 포함할 수 있다. 일 실시예에 따르면, 스레드 처리 인터페이스(530)는 도 11의 흐름도의 과정(1100)을 수행할 수 있다. 오퍼레이팅 시스템(529)을 포함하는 스레드 처리 인터페이스(530)는 컴퓨팅 시스템(500)의 메모리에 저장된 실행 가능한 코드로서 구현될 수 있다. 다른 실시예에 따르면, 스레드 처리 인터페이스(530)는 하드웨어, 펌웨워 등으로 제공될 수도 있다.
동일한 기술 분야의 당업자에게 있어, 상술된 예시적 아키텍쳐들은 다양한 방식으로 구현될 수 있다 예를 들러, 상술된 예시적 아키텍쳐들은 특정 기능들을 실행하는 다양한 개수의 하드웨어 또는/및 소프트웨어 구성들로 구현될 수 있다. 예를 들어, 본 발명은 하나 이상의 마이크로프로세서들의 제어 및 실행 또는 다른 제어 장치들에 의해서 다양한 기능들을 실행할 수 있는, 프로그램 명령어, 모듈, 메모리, 프로세싱, 아날로그/로직(analog/logic), 룩업 테이블(look-up table), 인터페이스, 마이크로코드, 기록 매체 상의 컴퓨터 프로그램, 직접 회로, 펌웨어, 소비자 전자 장치, AV 장치, 유무선 송수신기, 유무선 수신기, 네트워크, 멀티미디어 장치 등으로 구성될 수 있다.
다양한 실시예들이 방법, 다양한 실시예에 따른 장치(시스템) 및 컴퓨터 프로그램 제품의 흐름도 및/또는 블록도를 참조하여 상술되었다. 흐름도 및/또는 블록도의 각 블록들 또는 이들의 조합은 컴퓨터 프로그램 명령으로 구현될 수 있다. 컴퓨터 프로그램 명령은 프로세서에 제공되면, 상술된 흐름도 및/또는 블록도에서 특정된 기능 또는 동작을 실행하기 위한 수단을 생성할 수 있다. 흐름도 및/또는 블록도의 각 블록들은 하드웨어 및/또는 소프트웨어 모듈, 인터페이스 또는 로직, 다양한 구현을 나타낼 수 있다. 대안적 구현에서, 블록에서 나타내는 기능은 동시에 수행되는 등, 도면에 나타난 순서에서 벗어나서 수행될 수 있다.
명세서 상에서 "컴퓨터 프로그램 매체," "컴퓨터 사용가능 매체," "컴퓨터가 읽을 수 있는 기록 매체" 및 "컴퓨터 프로그램 제품,"과 같은 용어는 메인 메모리, 제 2 메모리, 이동식 저장소, 하드디스크 드라이브에 설치된 하드디스크 등과 같은 매체를 언급하는 것으로 사용될 수 있다. 이러한 컴퓨터 프로그램 제품은 컴퓨터 시스템에 소프트웨어를 제공하기 위한 수단일 수 있다. 컴퓨터가 읽을 수 있는 기록 매체는 컴퓨터 시스템이 데이터, 명령, 메시지 또는 메시지 패킷 및 다른 판독 가능 정보를 기록 매체로부터 읽을 수 있도록 할 수 있다. 예를 들어, 컴퓨터가 읽을 수 있는 기록 매체는 플로피 디스크(floppy disk), ROM(read-only memory), 플래시 메모리(flash memory), 디스크 드라이브 메모리(disk drive memory), 씨디롬(CD-ROM) 및 다른 영구적 저장소와 같은 비휘발성 기억장치(non-volatile memory)를 포함할 수 있다. 컴퓨터가 읽을 수 있는 기록 매체는 데이터 및 컴퓨터 명령과 같은 정보를 컴퓨터 시스템과 송수신하는데 유용할 수 있다. 컴퓨터 프로그램 명령은 컴퓨터가 읽을 수 있는 기록 매체에 저장될 수 있고, 컴퓨터, 다른 프로그램이 가능한 데이터 처리 장치 또는 다른 장치를 특정 방식으로 기능하도록 지시할 수 있다. 컴퓨터로 읽을 수 있는 기록 매체에 저장된 명령은 상술된 흐름도 방법 및 블록도의 구성들의 기능을 수행하기 위한 명령들을 생성할 수 있다.
상술된 블록도 및 흐름도를 나타내는 컴퓨터 프로그램 명령은 컴퓨터, 프로그램이 가능한 데이터 처리 장치 또는 프로세싱 장치 상에서 적재(load)될 수 있다. 컴퓨터 제어 로직과 같은 컴퓨터 프로그램은 메인 메모리 및/또는 제 2 메모리에 저장될 수 있다. 컴퓨터 프로그램은 커뮤니케이션 인터페이스를 통해 수신될 수도 있다. 컴퓨터 프로그램은 실행되면, 컴퓨터 시스템이 상술된 기능들을 수행하도록 할 수 있다. 구체적으로, 컴퓨터 프로그램은 실행되면, 프로세서 및/또는 멀티코어 프로세서가 컴퓨터 시스템의 기능을 수행하도록 할 수 있다. 컴퓨터 프로그램은 컴퓨터 시스템의 제어부(컨트롤러)를 나타낼 수 있다. 컴퓨터 프로그램 제품은 컴퓨터 시스템에 의하여 읽을 수 있고, 컴퓨터 시스템에 의하여 실행하고 상술된 다양한 실시예에 따른 방법들을 수행하기 위한 명령을 저장하고 있는, 유형의 저장 매체를 포함할 수 있다.
이해를 위하여, 상술된 다양한 실시예들에 참조하여 설명하였으나 이는 예시적인 것으로서 이어 본 발명의 청구의 범위가 한정되는 것은 아니며, 동일한 기술 분야의 당업자가 통상적으로 생각할 수 있는 모든 구성 요소들을 포함할 수 있다.

Claims (30)

  1. 처리 환경에서의 중복 스레드의 실행을 감소시키는 방법에 있어서,
    복수 개의 서로 다른 스레드 중 중복되는 작업을 포함하는 스레드를 감지하는 단계;
    동일한 스레드 연산 결과의 결정에 기초하여, 상기 감지된 스레드로부터 다수의 스레드를 적어도 하나의 스레드 집단으로 그룹화하는 단계;
    상기 스레드 집단에서 어느 하나의 스레드 이외의 모든 스레드의 실행을 억제하는 단계;
    상기 스레드 집단에서 상기 어느 하나의 스레드를 실행하는 단계; 및
    상기 스레드 집단에서 상기 어느 하나의 스레드의 실행으로부터 결정된 결과를 상기 어느 하나의 스레드 이외의 모든 스레드에 전파(broadcasting)하는 단계를 포함하는 방법.
  2. 제 1 항에 있어서,
    상기 감지하는 단계는, 상기 복수 개의 서로 다른 스레드에서 동일한 명령의 시퀀스가 다른 스레드에 의하여 연산된 값에 의존하는지 결정하기 위하여, 상기 복수 개의 서로 다른 스레드의 종속성을 분석하는 단계를 포함하는 방법.
  3. 제 1 항에 있어서,
    종속성이 없는 스레드의 동일한 명령의 시퀀스의 사이즈에 기초하여 처리 환경에서 전력 소비의 잠재적 감소를 분석하고, 상기 복수 개의 서로 다른 스레드에 대한 다수의 입력에 기초하여 중복 연산을 분석하는 단계를 더 포함하는 방법.
  4. 제 1 항에 있어서,
    상기 중복되는 작업을 포함하는 스레드를 감지하는 단계는,
    동일한 세트의 입력 값을 갖는 상기 복수 개의 서로 다른 스레드로부터 동일한 명령의 시퀀스를 식별하는 단계를 포함하는 방법.
  5. 제 4 항에 있어서,
    상기 동일한 명령의 시퀀스를 식별하는 단계는,
    상기 복수 개의 서로 다른 스레드에 대한 입력 레지스터 중 어느 하나 또는 텍스쳐 인터폴레이터의 출력 레지스터를 판독하는 단계; 및
    위양성(false positive) 결과를 회피하기 위하여, 상기 복수 개의 서로 다른 스레드의 입력 레지스터의 후속의 쌍 단위 비교로서 데이터 구조를 이용하는 단계를 포함하는 방법.
  6. 제 5 항에 있어서,
    상기 감지하는 단계는,
    동일한 값을 갖는 상기 복수 개의 서로 다른 스레드의 입력 레지스터를 상기 이용되는 데이터 구조에 매핑하는 단계를 더 포함하는 방법.
  7. 제 4 항에 있어서,
    상기 그룹화하는 단계는,
    상기 명령의 시퀀스 및 상기 세트의 입력 값이 동일하여 상기 적어도 하나의 스레드 집단에서 동일한 결과를 연산하는, 상기 복수 개의 스레드를 그룹화하는 단계를 더 포함하는 방법.
  8. 제 7 항에 있어서,
    상기 그룹화하는 단계는,
    스케줄러에서 서로 다른 상기 동일한 명령의 시퀀스 간의 상기 스레드 집단의 교차를 식별하는 단계; 및
    상기 스레드 집단의 집단 식별 정보(ID)를 연결하고 상기 스레드 집단 내의 스레드의 비트 벡터를 업데이트하여, 상기 교차된 스레드 집단을 재-그룹화하는 단계를 포함하는 방법.
  9. 제 8 항에 있어서,
    상기 적어도 하나의 스레드 집단의 상기 어느 하나의 스레드는, 상기 스레드 집단에서 최소의 ID를 갖는 리더 스레드이고,
    상기 억제하는 단계는, 상기 스레드 집단 내의 상기 리더 스레드를 제외한 모든 스레드의 실행을 클럭-게이팅(clock-gating) 오프하는 단계를 포함하는 방법.
  10. 제 9 항에 있어서,
    상기 결과를 전파하는 단계는,
    상기 리더 스레드에 의하여 연산된 결과를 컴파일러(compiler)로부터의 출력 레지스터 맵(map)을 이용하여 상기 스레드 집단의 다른 스레드에 전파하는 단계를 포함하는 방법.
  11. 제 1 항에 있어서,
    상기 처리 환경은 단일 명령 다중 스레드(SIMT) 또는 단일 명령 다중 데이터(SIMD) 처리 환경을 포함하는 것인 방법.
  12. 제 11 항에 있어서,
    상기 처리 환경은 모바일 전자 장치의 그래픽 프로세싱 유닛(GPU) 내에 포함되는 것인 방법.
  13. 컴퓨터로 읽을 수 있는 기록 매체에 있어서,
    복수 개의 서로 다른 스레드 중 중복되는 작업을 포함하는 스레드를 감지하는 단계;
    동일한 스레드 연산 결과의 결정에 기초하여, 상기 감지된 스레드로부터 다수의 스레드를 적어도 하나의 스레드 집단으로 그룹화하는 단계;
    상기 스레드 집단에서 어느 하나의 스레드 이외의 모든 스레드의 실행을 억제하는 단계;
    상기 스레드 집단에서 상기 어느 하나의 스레드를 실행하는 단계; 및
    상기 스레드 집단에서 상기 어느 하나의 스레드의 실행으로부터 결정된 결과를 상기 어느 하나의 스레드 이외의 모든 스레드에 전파(broadcasting)하는 단계를 포함하는 방법을 실행하기 위한 프로그램이 기록된 기록 매체.
  14. 제 13 항에 있어서,
    상기 감지하는 단계는, 컴파일러에 의하여 컴파일 중에 상기 복수 개의 서로 다른 스레드에서 동일한 명령의 시퀀스가 다른 스레드에 의하여 연산된 값에 의존하는지 결정하기 위하여, 상기 복수 개의 서로 다른 스레드의 종속성을 분석하는 단계를 포함하는 기록 매체.
  15. 제 13 항에 있어서,
    상기 방법은, 종속성이 없는 스레드 동일한 명령의 시퀀스의 사이즈에 기초하여 처리 환경에서 전력 소비의 잠재적 감소를 분석하고, 상기 복수 개의 서로 다른 스레드에 대한 다수의 입력에 기초하여 중복 연산을 분석하는 단계를 더 포함하고,
    상기 상기 중복되는 작업을 포함하는 스레드를 감지하는 단계는,
    동일한 세트의 입력 값을 갖는 상기 복수 개의 서로 다른 스레드로부터 동일한 명령의 시퀀스를 식별하는 단계를 포함하는, 기록 매체.
  16. 제 15 항에 있어서,
    상기 동일한 명령의 시퀀스를 식별하는 단계는,
    상기 복수 개의 서로 다른 스레드에 대한 입력 레지스터 중 어느 하나 또는 텍스쳐 인터폴레이터의 출력 레지스터를 판독하는 단계; 및
    위양성(false positive) 결과를 회피하기 위하여, 상기 복수 개의 서로 다른 스레드의 입력 레지스터의 후속의 쌍 단위 비교로서 데이터 구조를 이용하는 단계를 포함하는, 기록 매체.
  17. 제 16 항에 있어서,
    상기 감지하는 단계는,
    동일한 값을 갖는 상기 복수 개의 서로 다른 스레드의 입력 레지스터를 상기 이용되는 데이터 구조에 매핑하는 단계를 더 포함하는, 기록 매체.
  18. 제 15 항에 있어서,
    상기 그룹화하는 단계는,
    상기 명령의 시퀀스 및 상기 세트의 입력 값이 동일하여 상기 적어도 하나의 스레드 집단에서 동일한 결과를 연산하는, 상기 복수 개의 스레드를 그룹화하는 단계를 더 포함하는, 기록 매체.
  19. 제 18 항에 있어서,
    상기 그룹화하는 단계는,
    스케줄러에서 서로 다른 상기 동일한 명령의 시퀀스 간의 상기 스레드 집단의 교차를 식별하는 단계; 및
    상기 스레드 집단의 집단 식별 정보(ID)를 연결하고 상기 스레드 집단 내의 스레드의 비트 벡터를 업데이트하여, 상기 교차된 스레드 집단을 재-그룹화하는 단계를 포함하고,
    상기 적어도 하나의 스레드 집단의 상기 어느 하나의 스레드는, 상기 스레드 집단에서 최소의 ID를 갖는 리더 스레드이고,
    상기 억제하는 단계는, 상기 스레드 집단 내의 상기 리더 스레드를 제외한 모든 스레드의 실행을 클럭-게이팅(clock-gating) 오프하는 단계를 포함하는, 기록 매체.
  20. 제 19 항에 있어서,
    상기 결과를 전파하는 단계는,
    상기 리더 스레드에 의하여 연산된 결과를 컴파일러(compiler)로부터의 출력 레지스터 맵(map)을 이용하여 상기 스레드 집단의 다른 스레드에 전파하는 단계를 포함하는, 기록 매체.
  21. 제 13 항에 있어서,
    상기 처리 환경은 단일 명령 다중 스레드(SIMT) 또는 단일 명령 다중 데이터(SIMD) 처리 환경을 포함하는 것인 기록 매체.
  22. 제 13 항에 있어서,
    상기 처리 환경은 모바일 전자 장치의 그래픽 프로세싱 유닛(GPU) 내에 포함되는 것인 기록 매체.
  23. 전자 장치에 대한 그래픽스 프로세서에 있어서,
    메모리에 연결되는 적어도 하나의 처리부를 포함하고,
    상기 처리부는,
    복수 개의 서로 다른 스레드 중 중복되는 작업을 포함하는 스레드를 감지하고,
    동일한 스레드 연산 결과의 결정에 기초하여, 상기 감지된 스레드로부터 다수의 스레드를 적어도 하나의 스레드 집단으로 그룹화하고,
    상기 스레드 집단에서 어느 하나의 스레드 이외의 모든 스레드의 실행을 억제하고,
    상기 스레드 집단에서 상기 어느 하나의 스레드를 실행하고,
    상기 스레드 집단에서 상기 어느 하나의 스레드의 실행으로부터 결정된 결과를 상기 어느 하나의 스레드 이외의 모든 스레드에 전파하도록 구성된, 그래픽스 프로세서.
  24. 제 23 항에 있어서,
    상기 처리부는, 상기 복수 개의 서로 다른 스레드에서 동일한 명령의 시퀀스가 다른 스레드에 의하여 연산된 값에 의존하는지 결정하기 위하여, 상기 복수 개의 서로 다른 스레드의 종속성을 분석하는 그래픽스 프로세서.
  25. 제 24 항에 있어서,
    상기 처리부는, 종속성이 없는 스레드의 동일한 명령의 시퀀스의 사이즈에 기초하여 처리 환경에서 전력 소비의 잠재적 감소를 분석하고, 상기 복수 개의 서로 다른 스레드에 대한 다수의 입력에 기초하여 중복 연산을 분석하고,
    상기 중복되는 작업을 포함하는 스레드를 감지하는 것은, 동일한 세트의 입력 값을 갖는 상기 복수 개의 서로 다른 스레드로부터 동일한 명령의 시퀀스를 식별하는 것을 포함하는, 그래픽스 프로세서.
  26. 제 25 항에 있어서,
    상기 처리부는,
    상기 복수 개의 서로 다른 스레드에 대한 입력 레지스터 중 어느 하나 또는 텍스쳐 인터폴레이터의 출력 레지스터를 판독하고, 위양성(false positive) 결과를 회피하기 위하여, 상기 복수 개의 서로 다른 스레드의 입력 레지스터의 후속의 쌍 단위 비교로서 데이터 구조를 이용함으로써, 상기 동일한 명령의 시퀀스를 식별하도록 구성되고,
    동일한 값을 갖는 상기 복수 개의 서로 다른 스레드의 입력 레지스터를 상기 이용되는 데이터 구조에 매핑함으로써, 상기 중복되는 작업을 포함하는 스레드를 감지하도록 구성되고,
    상기 명령의 시퀀스 및 상기 세트의 입력 값이 동일하여 상기 적어도 하나의 스레드 집단에서 동일한 결과를 연산하는, 상기 복수 개의 스레드를 그룹화함으로써, 상기 적어도 하나의 스레드 집단으로 그룹화하도록 구성되는, 그래픽스 프로세서.
  27. 제 26 항에 있어서,
    상기 처리부는,
    스케줄러에서 서로 다른 상기 동일한 명령의 시퀀스 간의 상기 스레드 집단의 교차를 식별하고, 상기 스레드 집단의 집단 식별 정보(ID)를 연결하고 상기 스레드 집단 내의 스레드의 비트 벡터를 업데이트하여, 상기 교차된 스레드 집단을 재-그룹화함에 기초하여, 상기 적어도 하나의 스레드 집단으로 그룹화하도록 구성되고,
    상기 적어도 하나의 스레드 집단의 상기 어느 하나의 스레드는, 상기 스레드 집단에서 최소의 ID를 갖는 리더 스레드이고,
    상기 실행의 억제는, 상기 스레드 집단 내의 상기 리더 스레드를 제외한 모든 스레드의 실행을 클럭-게이팅(clock-gating) 오프하는 것을 포함하는, 그래픽스 프로세서.
  28. 제 27 항에 있어서,
    상기 결과를 전파하는 것은,
    상기 리더 스레드에 의하여 연산된 결과를 컴파일러(compiler)로부터의 출력 레지스터 맵(map)을 이용하여 상기 스레드 집단의 다른 스레드에 전파하는 것을 포함하는, 그래픽스 프로세서.
  29. 제 23 항에 있어서,
    상기 처리 환경은 단일 명령 다중 스레드(SIMT) 또는 단일 명령 다중 데이터(SIMD) 처리 환경을 포함하는 것인 그래픽스 프로세서.
  30. 제 23 항에 있어서,
    상기 처리 환경은 모바일 전자 장치의 그래픽 프로세싱 유닛(GPU) 내에 포함되는 것인 그래픽스 프로세서.
KR1020150086602A 2014-06-27 2015-06-18 단일 명령 다중 데이터 처리(simd/t)에서 중복을 제거하는 방법 KR20160001646A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201462018000P 2014-06-27 2014-06-27
US62/018,000 2014-06-27
US14/632,651 2015-02-26
US14/632,651 US10061591B2 (en) 2014-06-27 2015-02-26 Redundancy elimination in single instruction multiple data/thread (SIMD/T) execution processing

Publications (1)

Publication Number Publication Date
KR20160001646A true KR20160001646A (ko) 2016-01-06

Family

ID=54930562

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150086602A KR20160001646A (ko) 2014-06-27 2015-06-18 단일 명령 다중 데이터 처리(simd/t)에서 중복을 제거하는 방법

Country Status (2)

Country Link
US (1) US10061591B2 (ko)
KR (1) KR20160001646A (ko)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9378560B2 (en) 2011-06-17 2016-06-28 Advanced Micro Devices, Inc. Real time on-chip texture decompression using shader processors
US10061592B2 (en) * 2014-06-27 2018-08-28 Samsung Electronics Co., Ltd. Architecture and execution for efficient mixed precision computations in single instruction multiple data/thread (SIMD/T) devices
GB2539958B (en) * 2015-07-03 2019-09-25 Advanced Risc Mach Ltd Data processing systems
GB2540543B (en) * 2015-07-20 2020-03-11 Advanced Risc Mach Ltd Graphics processing
GB2540937B (en) * 2015-07-30 2019-04-03 Advanced Risc Mach Ltd Graphics processing systems
US10956360B2 (en) 2017-03-14 2021-03-23 Azurengine Technologies Zhuhai Inc. Static shared memory access with one piece of input data to be reused for successive execution of one instruction in a reconfigurable parallel processor
US10691455B2 (en) * 2017-05-23 2020-06-23 Samsung Electronics Co., Ltd Power saving branch modes in hardware
CN112083954A (zh) * 2019-06-13 2020-12-15 华夏芯(北京)通用处理器技术有限公司 一种gpu中显式独立掩码寄存器的掩码操作方法
US11294672B2 (en) 2019-08-22 2022-04-05 Apple Inc. Routing circuitry for permutation of single-instruction multiple-data operands
US11256518B2 (en) 2019-10-09 2022-02-22 Apple Inc. Datapath circuitry for math operations using SIMD pipelines
US11126439B2 (en) 2019-11-15 2021-09-21 Apple Inc. SIMD operand permutation with selection from among multiple registers
US10996960B1 (en) * 2019-11-22 2021-05-04 Blaize, Inc. Iterating single instruction, multiple-data (SIMD) instructions
US11307860B1 (en) 2019-11-22 2022-04-19 Blaize, Inc. Iterating group sum of multiple accumulate operations
US10891708B1 (en) 2019-11-25 2021-01-12 Arm Limited Shader program execution in graphics processing
CN111352620B (zh) * 2020-03-25 2021-09-14 珠海格力电器股份有限公司 可视化组态编程方法及系统
CN112765027B (zh) * 2021-01-22 2022-05-17 北京航空航天大学 一种检测应用程序执行过程中冗余零的方法
US11361400B1 (en) 2021-05-06 2022-06-14 Arm Limited Full tile primitives in tile-based graphics processing

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5966528A (en) 1990-11-13 1999-10-12 International Business Machines Corporation SIMD/MIMD array processor with vector processing
US5590345A (en) 1990-11-13 1996-12-31 International Business Machines Corporation Advanced parallel array processor(APAP)
US8416468B2 (en) 1999-09-17 2013-04-09 Silverbrook Research Pty Ltd Sensing device for subsampling imaged coded data
US7100164B1 (en) 2000-01-06 2006-08-29 Synopsys, Inc. Method and apparatus for converting a concurrent control flow graph into a sequential control flow graph
US7131596B2 (en) 2003-04-07 2006-11-07 Silverbrook Research Pty Ltd Symmetric data tags
US7081902B1 (en) 2003-09-24 2006-07-25 Nvidia Corporation Apparatus, system, and method for gamma correction of smoothed primitives
US7590589B2 (en) 2004-09-10 2009-09-15 Hoffberg Steven M Game theoretic prioritization scheme for mobile ad hoc networks permitting hierarchal deference
US20090150890A1 (en) 2007-12-10 2009-06-11 Yourst Matt T Strand-based computing hardware and dynamically optimizing strandware for a high performance microprocessor system
US7788468B1 (en) * 2005-12-15 2010-08-31 Nvidia Corporation Synchronization of threads in a cooperative thread array
GB2443277B (en) 2006-10-24 2011-05-18 Advanced Risc Mach Ltd Performing diagnostics operations upon an asymmetric multiprocessor apparatus
EP2122461A4 (en) 2006-11-14 2010-03-24 Soft Machines Inc DEVICE AND METHOD FOR PROCESSING COMMUNICATIONS IN A MULTITHREAD ARCHITECTURE WITH CONTEXT CHANGES
US8392669B1 (en) 2008-03-24 2013-03-05 Nvidia Corporation Systems and methods for coalescing memory accesses of parallel threads
US8140830B2 (en) 2008-05-22 2012-03-20 International Business Machines Corporation Structural power reduction in multithreaded processor
US8866827B2 (en) 2008-06-26 2014-10-21 Microsoft Corporation Bulk-synchronous graphics processing unit programming
US8423983B2 (en) 2008-10-14 2013-04-16 International Business Machines Corporation Generating and executing programs for a floating point single instruction multiple data instruction set architecture
US9354944B2 (en) 2009-07-27 2016-05-31 Advanced Micro Devices, Inc. Mapping processing logic having data-parallel threads across processors
US8751771B2 (en) 2010-09-29 2014-06-10 Nvidia Corporation Efficient implementation of arrays of structures on SIMT and SIMD architectures
US9766893B2 (en) 2011-03-25 2017-09-19 Intel Corporation Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
US20120259843A1 (en) 2011-04-11 2012-10-11 Timothy Child Database acceleration using gpu and multicore cpu systems and methods
US8752018B2 (en) 2011-06-21 2014-06-10 Nvidia Corporation Emitting coherent output from multiple threads for printf
US9830156B2 (en) 2011-08-12 2017-11-28 Nvidia Corporation Temporal SIMT execution optimization through elimination of redundant operations
WO2013039606A1 (en) 2011-09-15 2013-03-21 Exxonmobil Upstream Research Company Optimized matrix and vector operations in instruction limited algorithms that perform eos calculations
US9009686B2 (en) 2011-11-07 2015-04-14 Nvidia Corporation Algorithm for 64-bit address mode optimization
CN103314360A (zh) * 2012-01-13 2013-09-18 松下电器产业株式会社 数据依赖解析辅助装置、数据依赖解析辅助程序以及数据依赖解析辅助方法
US9361079B2 (en) 2012-01-30 2016-06-07 Nvidia Corporation Method for compiling a parallel thread execution program for general execution
US9575753B2 (en) * 2012-03-15 2017-02-21 International Business Machines Corporation SIMD compare instruction using permute logic for distributed register files
US8954775B2 (en) * 2012-06-20 2015-02-10 Intel Corporation Power gating functional units of a processor
US9710275B2 (en) 2012-11-05 2017-07-18 Nvidia Corporation System and method for allocating memory of differing properties to shared data objects
JP6020091B2 (ja) 2012-11-27 2016-11-02 富士通株式会社 演算処理装置の制御プログラム、演算処理装置の制御方法および演算処理装置
US11055097B2 (en) * 2013-10-08 2021-07-06 Nvidia Corporation Dynamically detecting uniformity and eliminating redundant computations to reduce power consumption
US10061592B2 (en) 2014-06-27 2018-08-28 Samsung Electronics Co., Ltd. Architecture and execution for efficient mixed precision computations in single instruction multiple data/thread (SIMD/T) devices

Also Published As

Publication number Publication date
US20150378733A1 (en) 2015-12-31
US10061591B2 (en) 2018-08-28

Similar Documents

Publication Publication Date Title
KR20160001646A (ko) 단일 명령 다중 데이터 처리(simd/t)에서 중복을 제거하는 방법
US10061592B2 (en) Architecture and execution for efficient mixed precision computations in single instruction multiple data/thread (SIMD/T) devices
US9727341B2 (en) Control flow in a thread-based environment without branching
KR101980990B1 (ko) 중간-분류 아키텍처에서 프레임 대 프레임 일관성의 활용
EP3108452B1 (en) Shader pipeline with shared data channels
US8823736B2 (en) Graphics tiling architecture with bounding volume hierarchies
US20130203496A1 (en) Online gaming
JP5778343B2 (ja) グラフィックス処理ユニットでの命令カリング
US9483264B2 (en) Trace-based instruction execution processing
US11727632B2 (en) Shader binding management in ray tracing
CN112394938A (zh) 在加速器中配置异构组件的方法和装置
US10580106B2 (en) Graphics processing method utilizing predefined render chunks
US20220366632A1 (en) Accelerated processing via a physically based rendering engine
US9189448B2 (en) Routing image data across on-chip networks
US10157443B1 (en) Deferred batching of incremental constant loads
US20150187043A1 (en) Virtualizing storage structures with unified heap architecture
US11875444B2 (en) Accelerated processing via a physically based rendering engine
US11900123B2 (en) Marker-based processor instruction grouping
US11853764B2 (en) Accelerated processing via a physically based rendering engine
US20220366628A1 (en) Accelerated processing via a physically based rendering engine
US20220366633A1 (en) Accelerated processing via a physically based rendering engine
US20230377240A1 (en) Run-time mechanism for optimal shader
WO2022040877A1 (zh) 一种图指令处理方法及装置
TW202324290A (zh) 常數資料儲存裝置
CN117472840A (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