KR101868997B1 - 캐시를 사전로딩하기 위해 gpu 컨트롤러를 사용하기 위한 메커니즘 - Google Patents

캐시를 사전로딩하기 위해 gpu 컨트롤러를 사용하기 위한 메커니즘 Download PDF

Info

Publication number
KR101868997B1
KR101868997B1 KR1020147016898A KR20147016898A KR101868997B1 KR 101868997 B1 KR101868997 B1 KR 101868997B1 KR 1020147016898 A KR1020147016898 A KR 1020147016898A KR 20147016898 A KR20147016898 A KR 20147016898A KR 101868997 B1 KR101868997 B1 KR 101868997B1
Authority
KR
South Korea
Prior art keywords
memory
cache
command message
processing device
delete delete
Prior art date
Application number
KR1020147016898A
Other languages
English (en)
Other versions
KR20140102709A (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 KR20140102709A publication Critical patent/KR20140102709A/ko
Application granted granted Critical
Publication of KR101868997B1 publication Critical patent/KR101868997B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/30Providing cache or TLB in specific location of a processing system
    • G06F2212/302In image processor or graphics adapter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6024History based prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6028Prefetching based on hints or prefetch instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Generation (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Image Processing (AREA)

Abstract

그래픽 프로세싱 유닛이 상기 그래픽 프로세싱 유닛 상에서 캐시를 사전로딩하기 위한 전용 컨트롤러를 갖는 것인 방법 및 시스템이 제공된다. 그 방법은 커맨드 메시지를 수신하는 단계를 포함하고, 커맨드 메시지는 메모리의 일부와 관련된 데이터를 포함한다. 그 방법은 또한 커맨드 메시지를 해석하는 단계, 캐시의 정책 정보를 식별하는 단계, 메모리의 일부의 위치 및 크기를 식별하는 단계, 및 일부의 컨텐트와 관련된 데이터를 포함하는 인출 메시지를 생성하는 단계를 포함하되, 인출 메시지는 캐시가 메모리의 일부의 데이터를 사전로딩하도록 야기한다.

Description

캐시를 사전로딩하기 위해 GPU 컨트롤러를 사용하기 위한 메커니즘{MECHANISM FOR USING A GPU CONTROLLER FOR PRELOADING CACHES}
본 발명은 일반적으로는 컴퓨팅 시스템에서 수행되는 컴퓨팅 동작에 관한 것이다. 더 구체적으로는, 본 발명은 컴퓨팅 시스템에서 수행되는 그래픽 프로세싱 태스크에 관한 것이다.
그래픽 프로세싱 유닛(GPU)은 그래픽 프로세싱 태스크를 수행하도록 특수 설계되는 복합 집적 회로이다. 예를 들어, GPU는 비디오 게임 애플리케이션과 같이 최종-사용자 애플리케이션에 의해 요구되는 그래픽 프로세싱 태스크를 실행할 수 있다. GPU에 대한 계산 능력은 대응하는 중앙 프로세싱 유닛(CPU) 플랫폼의 능력을 초과하는 레이트로 성장하였다. 이러한 성장은, 모바일 컴퓨팅 시장(예를 들어, 노트북, 모바일 스마트 폰, 태블릿 등) 및 그 필요한 지원 서버/기업 시스템의 폭발적 증가와 결합하여, 특정 품질의 소망 사용자 경험을 제공하도록 사용되어 왔다.
그렇지만, 전통적으로 GPU는 그래픽의 가속에 주로 이용가능한 제약된 프로그래밍 환경에서 동작하여 왔다. 이들 제약은 GPU가 CPU만큼 풍부한 프로그래밍 에코시스템을 갖지 않았다는 사실로부터 유발되었다. 그래서, 그 사용은, 그래픽 및 비디오 애플리케이션 프로그래밍 인터페이스(API)를 다루는데 이미 익숙한, 2차원(2D) 및 3차원(3D) 그래픽 및 소수의 최첨단 멀티미디어 애플리케이션으로 대부분 한정되어 왔다.
멀티-벤더 지원형 OpenCL® 및 DirectCompute®, 표준 API 및 지원 툴의 출현으로, 전통적 애플리케이션에서 GPU의 제한은 전통적 그래픽 너머로 미치게 되었다. OpenCL 및 DirectCompute가 유망한 시작이기는 하지만, CPU 및 GPU의 조합이 대부분의 프로그래밍 태스크에 CPU만큼 유동적으로 사용되도록 하는 환경 및 에코시스템을 생성하는데 남아있는 난관이 많이 있다.
일반적으로, 최종-사용자 애플리케이션과 GPU 사이에는 수개의 소프트웨어 층이 있다. 최종-사용자 애플리케이션은 애플리케이션 프로그래밍 인터페이스(API)와 통신한다. API는 최종-사용자 애플리케이션이 그래픽 데이터 및 커맨드를 GPU에 의존하는 포맷으로보다는 표준화된 포맷으로 출력할 수 있게 한다. API는 드라이버와 통신한다. 드라이버는 API로부터 수신된 표준 코드를 GPU에 의해 이해되는 네이티브 명령어 포맷으로 변환한다. 드라이버는 전형적으로 GPU의 제조자에 의해 쓰인다. 그 후 GPU는 드라이버로부터의 명령어를 실행한다.
표준 GPU는 렌더링으로 알려져 있는 프로세스로 그 컴포넌트의 더 높은 레벨 설명으로부터 이미지를 구성하는 픽셀을 생성한다. 전형적으로 GPU는 픽셀, 텍스처 및 기하구조 데이터를 프로세싱하도록 파이프라인의 사용에 의한 연속적 렌더링의 개념을 이용한다. 이들 파이프라인은 흔히 셰이더 파이프 또는 셰이더 파이프라인으로 성취될 수 있는 래스터라이저, 셋업 엔진, 컬러 블렌더, 텍스처 매핑 및 프로그램가능한 스테이지와 같은 고정 함수 특수 목적 파이프라인의 모음이라고 지칭된다. "셰이더"는 주로 렌더링 효과를 수행하도록 그래픽 자원에 의해 사용되는 소프트웨어 명령어 세트를 지칭하는 컴퓨터 그래픽 용어이다. 부가적으로, GPU는 또한 더 높은 스루풋을 획득하도록 병렬 프로세싱 설계로 다중 프로그램가능한 파이프라인을 채용할 수 있다. 또한 다중 셰이더 파이프라인은 셰이더 파이프 어레이라고 지칭될 수 있다.
부가적으로, GPU는 또한 텍스처 매핑이라고 알려져 있는 개념을 지원한다. 텍스처 매핑은 인근 텍스처 픽셀의 컬러의 사용을 통해 텍스처 매핑된 픽셀에 대한 텍스처 컬러, 또는 텍셀을 결정하도록 사용되는 프로세스이다. 프로세스는 또한 텍스처 평활화 또는 텍스처 보간이라고 지칭된다. 그렇지만, 높은 이미지 품질 텍스처 매핑은 더 높은 계산 복잡도를 요구한다. 더욱, 단일(통합) 셰이더를 구비한 GPU는 또한 많은 유형의 셰이더 프로세싱을 동시에 지원한다. 그래서 더 높은 성능 일반화된 메모리 액세스 능력에 대한 수요를 높인다.
셰이더 엔진은 텍스처, 셰이더 코드 및 다른 유형의 데이터에 대한 로컬 캐시 메모리로의 고속 액세스에 의존한다. 캐시를 데이터로 사전로딩하는 것은 시간 집약적일 수 있는, 데이터에 대한 비디오 또는 주 시스템 메모리에 액세스할 필요가 없어 GPU 동작의 실행 시간을 감소시킨다. 이것은, GPU가 실행을 시작할 때마다, 메모리의 동일 또는 유사 부분에 액세스될 때 개선된 GPU 성능의 결과를 초래한다. 현재, GPU는 캐시를 데이터로 사전로딩하는 기능성을 제공하는 전용 프로그램가능한 컨트롤러를 갖고 있지 않다.
새로운 소프트웨어 애플리케이션의 복잡도가 더욱 증가하여, 효율적이고 높은 품질 렌더링, 텍스처 필터링 및 에러 정정을 제공하는 GPU에 대한 수요 또한 증가하고 있다.
그래서 필요로 되는 것은 전술한 결점을 경감하는 시스템 및/또는 방법이다. 구체적으로, 필요로 되는 것은 실행을 위한 메모리의 관련 부분으로 선택된 APD 캐시의 명시적 및 묵시적 사전로딩을 관리하는 전용 컨트롤러이다.
GPU, 가속화된 프로세싱 유닛(APU), 및 그래픽 프로세싱 유닛의 범용 사용(GPGPU)은 이 분야에서 일반적으로 사용되는 용어이지만, "가속화된 프로세싱 디바이스(APD)"라는 표현은 더 넓은 표현이라고 생각된다. 예를 들어, APD는 가속화된 방식으로 그래픽 프로세싱 태스크, 데이터 병렬 태스크, 또는 네스팅된 데이터 병렬 태스크를 가속화하는 것과 연관된 그들 기능 및 계산을 수행하는 소프트웨어 및/또는 하드웨어의 어느 협력 모음을 지칭한다.
본 발명의 실시예는, 어떤 환경에서, 캐시를 사전로딩하기 위한 방법 및 시스템을 포함한다. 그 시스템은 캐시에 전기적으로 결합된 APD를 포함하고, 그 시스템은 메모리의 일부에 관련된 데이터를 포함하는 커맨드 메시지를 출력하도록 구성된 호스트 프로세서, 및 커맨드 메시지를 해석하여 (i) 캐시에 관련된 정책 정보를 식별하고, (ii) 그 일부의 위치 및 크기를 결정하고, (iii) 그 일부의 컨텐트에 관련된 데이터를 포함하는 인출 메시지를 생성하도록 구성된 컨트롤러를 포함하되, 컨트롤러는 캐시에 인출 메시지를 출력하도록 구성된다.
본 발명의 부가적 실시예는 캐시에 전기적으로 결합된 APD로 이루어진 시스템을 포함하고, 그 시스템은 (i) 메모리의 일부의 캐시 사전로딩을 명시적으로 요청하는 데이터를 포함하는 커맨드 메시지를 수신하고, (ii) 캐시에 관련된 정책 정보를 식별하고, (iii) 그 일부의 위치 및 크기를 결정하고, (iv) 그 일부의 컨텐트에 관련된 데이터를 포함하는 인출 메시지를 생성하도록 구성된 컨트롤러를 포함하되, 컨트롤러는 캐시에 인출 메시지를 출력하도록 구성된다.
본 발명의 부가적 특징 및 이점과 더불어, 본 발명의 다양한 실시예의 구조 및 동작은 수반 도면을 참조하여 아래에 더 상세하게 설명된다. 본 발명은 여기에서 설명되는 특정 실시예로 한정되는 것은 아니다. 그러한 실시예는 여기에서 예시의 목적으로만 제시된다. 부가적 실시예는 여기에 포함된 가르침에 기반하여 관련 업계(들)의 당업자에게 명백할 것이다.
여기에 편입되어 명세서의 일부를 형성하는 수반 도면은 본 발명을 예시하며, 그 설명과 함께, 더욱 본 발명의 원리를 설명하고 관련 업계의 당업자가 본 발명을 하고 사용 가능하게 하는 역할을 한다. 본 발명의 다양한 실시예는 도면을 참조하여 아래에 설명되며, 유사한 참조 숫자는 곳곳에서 유사한 구성요소를 지칭하는데 사용된다.
도 1a는 본 발명의 실시예에 따른 프로세싱 시스템의 예시적 블록 선도;
도 1b는 도 1a에 도시된 APD의 예시적 블록 선도;
도 2는 일 실시예에 따라 메모리의 일부로 캐시를 사전로딩하는 APD의 예시적 흐름도;
도 3은 일 실시예에 따라 메모리의 일부로 캐시를 사전로딩하는 APD의 또 다른 예시적 흐름도.
본 발명은 수반 도면을 참조하여 설명될 것이다. 일반적으로, 엘리먼트가 처음 나타나는 도면은 전형적으로는 대응하는 참조 번호에서 가장 좌측 숫자(들)로 나타내어진다.
이하의 상세한 설명에 있어서, "하나의 실시예", "일 실시예", "예시적 실시예" 등의 언급은 설명되는 실시예가 특정 특징, 구조 또는 특성을 포함하지만, 모든 실시예가 그 특정 특징, 구조 또는 특성을 반드시 포함하지는 않을 수 있음을 나타낸다. 더욱, 그러한 문구는 반드시 동일 실시예를 지칭하는 것은 아니다. 더욱, 일 실시예와 연관하여 특정 특징, 구조 또는 특성이 설명될 때, 명시적으로 설명되든 아니든 다른 실시예와 연관하여 그러한 특징, 구조 또는 특성에 영향을 미치는 것이 당업자의 지식 내에 있는 것으로 된다.
"본 발명의 실시예"라는 용어는 본 발명의 모든 실시예가 논의되는 특징, 이점 또는 동작 모드를 포함하는 것을 요구하지는 않는다. 대체 실시예가 본 발명의 범위로부터 벗어남이 없이 고안될 수 있고, 본 발명의 주지의 엘리먼트는 상세히 설명되지 않을 수 있거나 본 발명의 관련 상세를 모호하게 하지 않도록 생략될 수 있다. 부가적으로, 여기서 사용되는 용어는 특정 실시예를 설명하는 목적을 위한 것일 뿐이고 본 발명을 한정하려는 의도는 아니다. 예를 들어, 여기서 사용되는 바와 같이, 단수 형태는, 맥락이 명확하게 다르게 나타내지 않는 한, 복수 형태 역시 포함하려는 의도이다. 용어 "구성된다", "구성되는", "포함한다" 및/또는 "포함하는"은, 여기서 사용될 때, 서술된 특징, 정수, 단계, 동작, 엘리먼트 및/또는 컴포넌트의 존재를 특정하지만, 하나 이상의 다른 특징, 정수, 단계, 동작, 엘리먼트, 컴포넌트 및/또는 그 그룹의 존재 또는 부가를 못하게 하지는 않음을 더욱 이해할 것이다.
도 1a는 2개의 프로세서, CPU(102) 및 APD(104)를 포함하는 통합된 컴퓨팅 시스템(100)의 전형적 예시이다. CPU(102)는 하나 이상의 단일 또는 멀티 코어 CPU를 포함할 수 있다. 본 발명의 일 실시예에 있어서, 시스템(100)은, 통합된 프로그래밍 및 실행 환경을 제공하도록 CPU(102) 및 APD(104)를 조합하여, 단일 실리콘 다이 또는 패키지 상에 형성된다. 이러한 환경은 APD(104)가 일부 프로그래밍 태스크에 대해 CPU(102)만큼 유동적으로 또는 거의 그렇게 사용될 수 있게 한다. 그렇지만, CPU(102) 및 APD(104)가 단일 실리콘 다이 상에 형성되는 것이 본 발명의 절대적 요건은 아니다. 일부 실시예에서는, 그것들이 별개로 형성되거나 동일 또는 다른 기판 상에 장착되는 것이 가능하다.
하나의 예에 있어서, 시스템(100)은 또한 시스템 메모리(106), 운영 체제(108), 및 통신 기반구조(109)를 포함한다. 운영 체제(108) 및 통신 기반구조(109)는 아래에서 더 상세하게 논의된다.
시스템(100)은 또한 커널 모드 드라이버(KMD)(110), 소프트웨어 스케줄러(SWS)(112), 및 입/출력 메모리 관리 유닛(IOMMU)과 같은 메모리 관리 유닛(116)을 포함한다. 시스템(100)의 컴포넌트는 하드웨어, 펌웨어, 소프트웨어 또는 그 어느 조합으로 구현될 수 있다. 당업자는 시스템(100)이 도 1a에 도시된 실시예에 도시된 것에 부가하여 또는 그와는 다른 하나 이상의 소프트웨어, 하드웨어 및 펌웨어 컴포넌트를 포함할 수 있음을 인식할 것이다.
하나의 예에 있어서, KMD(110)와 같은 드라이버는 전형적으로 하드웨어가 접속하는 컴퓨터 버스 또는 통신 서브시스템을 통해 디바이스와 통신한다. 호출 프로그램이 드라이버 내 루틴을 인보크할 때, 드라이버는 디바이스에 커맨드를 발행한다. 디바이스가 데이터를 다시 드라이버에 보내고 나면, 드라이버는 원래 호출 프로그램 내 루틴을 인보크할 수 있다. 하나의 예에 있어서, 드라이버는 하드웨어-종속적이고 운영-체제-특정적이다. 그것들은 통상 어느 필요한 비동기식 시간-종속적 하드웨어 인터페이스에 요구되는 인터럽트 취급을 제공한다.
디바이스 드라이버는, 특히 Microsoft Windows® 플랫폼 상에서, 커널-모드(링 0)로 또는 사용자-모드(링 3)로 실행될 수 있다. 사용자 모드로 드라이버를 실행하는 주요 이점은 개선된 안정성인데, 좋지 않게 쓰인 사용자 모드 디바이스 드라이버는 커널 메모리를 덮어씀으로써 시스템과 충돌할 수 없기 때문이다. 다른 한편으로, 사용자/커널-모드 트랜지션은 통상 상당한 성능 오버헤드를 부과하고, 그로써 낮은 레이턴시 및 높은 스루풋 요건에 대하여 사용자 모드-드라이버를 금지한다. 커널 공간은 시스템 호출의 사용을 통해서만 사용자 모듈에 의해 액세스될 수 있다. UNIX 쉘 또는 다른 GUI 기반 애플리케이션과 같은 최종 사용자 프로그램은 사용자 공간의 일부분이다. 이들 애플리케이션은 커널 지원된 기능을 통해 하드웨어와 대화한다.
CPU(102)는 제어 프로세서, 필드 프로그램가능한 게이트 어레이(FPGA), 주문형 반도체(ASIC), 또는 디지털 신호 프로세서(DSP) 중 하나 이상(도시하지 않음)을 포함할 수 있다. CPU(102)는, 예를 들어, 컴퓨팅 시스템(100)의 동작을 제어하는, 운영 체제(108), KMD(110), SWS(112) 및 애플리케이션(111)을 포함하는 제어 로직을 실행한다. 이러한 예시적 실시예에 있어서, CPU(102)는, 하나의 실시예에 의하면, 예를 들어, CPU(102) 및 APD(104)와 같은 다른 프로세싱 자원을 가로질러 그 애플리케이션과 연관된 프로세싱을 분산시킴으로써 애플리케이션(111)의 실행을 개시 및 제어한다.
APD(104)는, 다른 것들 중에서도, 예를 들어 특히 병렬 프로세싱에 적합할 수 있는 그래픽 동작 및 다른 동작과 같이 선택된 기능에 대해 커맨드 및 프로그램을 실행한다. 일반적으로, APD(104)는 픽셀 동작, 기하구조 계산, 및 디스플레이할 이미지 렌더링과 같이 그래픽 파이프라인 동작을 실행하는데 빈번하게 사용될 수 있다. 본 발명의 다양한 실시예에 있어서, APD(104)는 CPU(102)로부터 수신된 커맨드 또는 명령어에 기반하여 계산 프로세싱 동작(예를 들어, 비디오 동작, 물리 시뮬레이션, 전산 유체 역학 등과 같은 그래픽에 관련되지 않은 그 동작들)을 또한 실행할 수 있다.
예를 들어, 커맨드는 명령어 세트 아키텍처(ISA)에 전형적으로 정의되지는 않은 특수 명령어로서 생각될 수 있다. 커맨드는 디스패치 프로세서, 커맨드 프로세서 또는 네트워크 컨트롤러와 같은 특수 프로세서에 의해 실행될 수 있다. 다른 한편으로, 명령어는 예를 들어 컴퓨터 아키텍처 내 프로세서의 단일 동작으로 생각될 수 있다. 하나의 예에 있어서, 2개의 ISA 세트를 사용할 때, 일부 명령어는 x86 프로그램을 실행하도록 사용되고 일부 명령어는 APD 계산 유닛 상에서 커널을 실행하도록 사용된다.
예시적 실시예에 있어서, CPU(102)는 선택된 커맨드를 APD(104)에 송신한다. 이들 선택된 커맨드는 병렬 실행을 처리할 수 있는 그래픽 커맨드 및 다른 커맨드를 포함할 수 있다. 또한 계산 프로세싱 커맨드를 포함할 수 있는 이들 선택된 커맨드는 CPU(102)와 실질적으로 독립적으로 실행될 수 있다.
APD(104)는, 국한되는 것은 아니지만, 하나 이상의 SIMD 프로세싱 코어와 같은 그 자신의 계산 유닛(도시하지 않음)을 포함할 수 있다. 여기서 지칭되는 바와 같이, SIMD는 그 자신의 데이터 및 공유 프로그램 카운터를 각각 갖는 다중 프로세싱 엘리먼트 상에서 동시에 커널이 실행되는 파이프라인 또는 프로그래밍 모델이다. 모든 프로세싱 엘리먼트는 똑같은 명령어 세트를 실행한다. 예측의 사용은 작업-항목이 각각의 발행된 커맨드에 대해 참가하게 또는 하지 않게 할 수 있다.
하나의 예에 있어서, 각각의 APD(104)는 계산 유닛은 하나 이상의 스칼라 및/또는 벡터 부동-소수점 유닛 및/또는 산술 및 로직 유닛(ALU)을 포함할 수 있다. APD 계산 유닛은 또한 역-제곱근 유닛 및 사인/코사인 유닛과 같이 특수 목적 프로세싱 유닛(도시하지 않음)을 포함할 수 있다. 하나의 예에 있어서, APD 계산 유닛은 여기서는 일괄하여 셰이더 코어(122)라고 지칭된다.
하나 이상의 SIMD를 갖는 것은, 일반적으로, APD(104)를 그래픽 프로세싱에서 공통적인 것들과 같은 데이터-병렬 태스크의 실행에 이상적으로 적합하게 한다.
픽셀 프로세싱과 같은 일부 그래픽 파이프라인 동작, 및 다른 병렬 계산 동작은 동일한 커맨드 스트림 또는 계산 커널이 입력 데이터 엘리먼트의 스트림 또는 모음에 수행될 것을 요구할 수 있다. 동일 계산 커널의 각자의 인스턴스 생성은 그러한 데이터 엘리먼트를 병렬로 프로세싱하기 위해 셰이더 코어(122) 내 다중 계산 유닛에서 동시에 실행될 수 있다. 여기서 지칭되는 바와 같이, 예를 들어, 계산 커널은 프로그램 내 선언되고 APD 계산 유닛 상에서 실행되는 명령어를 포함하는 함수이다. 이러한 함수는 또한 커널, 셰이더, 셰이더 프로그램, 또는 프로그램이라고 지칭된다.
하나의 예시적 실시예에 있어서, 각각의 계산 유닛(예를 들어, SIMD 프로세싱 코어)은 입중계 데이터를 프로세싱하도록 특정 작업-항목의 각자의 인스턴스 생성을 실행할 수 있다. 작업-항목은 커맨드에 의해 디바이스 상에 인보크된 커널의 병렬 실행의 모음 중 하나이다. 작업-항목은 계산 유닛 상에서 실행하는 작업-그룹의 일부분으로서 하나 이사의 프로세싱 엘리먼트에 의해 실행될 수 있다.
하나의 예에 있어서, 작업-항목은 커맨드에 의해 디바이스 상에서 인보크되는 커널의 병렬 실행의 모음 중 하나이다. 작업-항목은 계산 유닛 상에서 실행되는 작업-그룹의 일부분으로서 하나 이상의 프로세싱 엘리먼트에 의해 실행된다.
작업-항목은 그 글로벌 ID 및 로컬 ID에 의해 모음 내 다른 실행과 구별된다. 하나의 예에 있어서, SIMD 상에서 함께 동시에 실행하는 작업그룹 내 작업-항목의 서브세트는 웨이브프론트(136)라고 지칭될 수 있다. 웨이브프론트의 폭은 계산 유닛(예를 들어, SIMD 프로세싱 코어)의 하드웨어의 특성이다. 여기서 지칭되는 바와 같이, 작업그룹은 단일 계산 유닛 상에서 실행하는 관련 작업-항목의 모음이다. 그룹 내 작업-항목은 ED일 커널을 실행하고 로컬 메모리 및 작업-그룹 배리어를 공유한다.
전형적 실시예에 있어서, 작업그룹으로부터의 모든 웨이브프론트는 동일 SIMD 프로세싱 코어 상에서 프로세싱된다. 웨이브프론트를 가로지르는 명령어는 한번에 하나씩 발행되고, 모든 작업-항목이 동일 제어 흐름을 따를 때, 각각의 작업-항목은 동일 프로그램을 실행한다. 또한 웨이브프론트는 워프, 벡터 또는 스레드라고 지칭될 수 있다.
실행 마스크 및 작업-항목 예측은 웨이브프론트 내 발산 제어 흐름을 가능하게 하도록 사용되고, 여기서 각각의 개개의 작업-항목은 실제로는 커널을 통해 고유 코드 경로를 취할 수 있다. 부분적으로 파퓰레이팅된 웨이브프론트는 작업-항목의 완전 세트가 웨이브프론트 시작 시간에 이용가능하지 않을 때 프로세싱될 수 있다. 예를 들어, 셰이더 코어(122)는 미리 결정된 수의 웨이브프론트(136)를 동시에 실행할 수 있고, 각각의 웨이브프론트(136)는 다중 작업-항목을 포함한다.
시스템(100) 내에서, APD(104)는 (메모리(130)가 그래픽 전용 사용으로 한정되는 것은 아니지만) 그래픽 메모리(130)와 같이 그 자신의 메모리를 포함한다. 그래픽 메모리(130)는 APD(104)에서의 계산 동안의 사용을 위한 로컬 메모리를 제공한다. 셰이더 코어(122) 내 개개의 계산 유닛(도시하지 않음)은 그들 자신의 로컬 데이터 스토어(도시하지 않음)를 가질 수 있다. 일 실시예에 있어서, APD(104)는 로컬 그래픽 메모리(130)로의 액세스와 더불어, 메모리(106)로의 액세스도 포함한다. 다른 실시예에 있어서, APD(104)는 메모리(106)와는 별개로 그리고 APD(104)에 직접 부착된 동적 램(DRAM) 또는 다른 그러한 메모리(도시하지 않음)로의 액세스를 포함할 수 있다.
도시된 예에 있어서, APD(104)는 또한 하나 또는 "n"개의 커맨드 프로세서(CP)(124)를 포함한다. CP(124)는 APD(104) 내 프로세싱을 제어한다. CP(124)는 또한 메모리(106) 내 커맨드 버퍼(125)로부터 실행될 커맨드를 검색하고 APD(104) 상의 그들 커맨드의 실행을 조정한다.
하나의 예에 있어서, CPU(102)는 애플리케이션(111)에 기반한 커맨드를 적합한 커맨드 버퍼(125)에 입력한다. 여기서 지칭되는 바와 같이, 애플리케이션은 CPU 및 APD 내 계산 유닛 상에서 실행할 프로그램 부분들의 조합이다.
복수의 커맨드 버퍼(125)는 APD(104) 상에서의 실행을 위해 스케줄링되는 각각의 프로세스로 유지될 수 있다.
CP(124)는 하드웨어, 펌웨어 또는 소프트웨어, 또는 그 조합으로 구현될 수 있다. 일 실시예에 있어서, CP(124)는 스케줄링 로직을 포함하는 로직을 구현하기 위해 마이크로코드를 갖는 축소된 명령어 세트 컴퓨터(RISC) 엔진으로서 구현된다.
APD(104)는 또한 하나 또는 "n"개의 디스패치 컨트롤러(DC)(126)를 포함한다. 본 출원에 있어서, 디스패치라는 용어는 계산 유닛 세트 상의 작업 그룹 세트에 대해 커널의 실행의 시작을 개시하도록 컨텍스트 상태를 사용하는 디스패치 컨트롤러에 의해 실행되는 커맨드를 지칭한다. DC(126)는 셰이더 코어(122)에서 작업그룹을 개시하는 로직을 포함한다. 일부 실시예에 있어서, DC(126)는 CP(124)의 일부분으로서 구현될 수 있다.
또한 시스템(100)은 APD(104) 상에서의 실행을 위해 실행 리스트(150)로부터 프로세스를 선택하도록 하드웨어 스케줄러(HWS)(128)를 포함한다. HWS(128)는 라운드 로빈 방법론을 사용하여, 우선순위 레벨을 사용하여, 또는 다른 스케줄링 정책에 기반하여 실행 리스트(150)로부터 프로세스를 선택할 수 있다. 예를 들어, 우선순위 레벨을 동적으로 결정될 수 있다. HWS(128)는 또한, 예를 들어, 새로운 프로세스를 부가함으로써 그리고 실행-리스트(150)로부터 현존 프로세스를 삭제함으로써, 실행 리스트(150)를 관리하는 기능성을 포함할 수 있다. HWS(128)의 실행 리스트 관리 로직은 때로는 실행 리스트 컨트롤러(RLC)라고 지칭된다.
본 발명의 다양한 실시예에 있어서, HWS(128)가 실행 리스트(150)로부터 프로세스의 실행을 개시할 때, CP(124)는 대응하는 커맨드 버퍼(125)로부터 커맨드를 검색 및 실행하기를 시작한다. 일부 경우에 있어서, CP(124)는, CPU(102)로부터 수신된 커맨드와 대응하는, APD(104) 내 실행될 하나 이상의 커맨드를 발생시킬 수 있다. 일 실시예에 있어서, CP(124)는, 다른 컴포넌트와 함께, APD(104) 자원 및/또는 시스템(100)의 자원의 이용을 개선 또는 최대화하는 방식으로 APD(104) 상의 커맨드의 우선순위결정 및 스케줄링을 구현한다.
APD(104)는 인터럽트 발생기(146)를 포함할 수 있거나 그로의 액세스를 가질 수 있다. 인터럽트 발생기(146)는 페이지 폴트와 같은 인터럽트 이벤트가 APD(104)에 의해 마주쳐질 때 운영 체제(108)를 인터럽트하도록 APD(104)에 의해 구성될 수 있다. 예를 들어, APD(104)는 위에서 언급된 페이지 폴트 인터럽트를 생성하도록 IOMMU(116) 내 인터럽트 발생 로직에 의존할 수 있다.
APD(104)는 또한 셰이더 코어(122) 내 현재 실행 중인 프로세스를 선취하기 위한 선취 및 컨텍스트 스위치 로직(120)을 포함할 수 있다. 컨텍스트 스위치 로직(120)은, 예를 들어, 프로세스를 정지시키고 그 현재 상태(예를 들어, 셰이더 코어(122) 상태 및 CP(124) 상태)를 저장하는 기능성을 포함한다.
여기서 지칭되는 바와 같이, 상태라는 용어는 초기 상태, 중간 상태, 및/또는 최종 상태를 포함할 수 있다. 초기 상태는 머신이 프로그래밍 순서에 따라 입력 데이터 세트를 프로세싱하여 출력 데이터 세트를 생성하는 시작 포인트이다. 예를 들어, 프로세싱이 포워드 진행을 가능하게 하도록 수개 포인트에 저장될 필요가 있는 중간 상태가 있다. 이러한 중간 상태는 때로는 어떤 다른 프로세스에 의해 인터럽트될 때 나중 시간에 실행의 계속을 허용하도록 저장된다. 또한 출력 데이터 세트의 일부분으로서 기록될 수 있는 최종 상태가 있다.
선취 및 컨텍스트 스위치 로직(120)은 또한 또 다른 프로세스를 APD(104) 내로 컨텍스트 스위칭하는 로직을 포함할 수 있다. 또 다른 프로세스를 APD(104) 상에서 실행 중으로 컨텍스트 스위칭하는 기능성은, 예를 들어, APD(104) 상에서 실행하도록 CP(124) 및 DC(126)를 통해 프로세스의 인스턴스를 생성하고, 그 프로세스에 대해 어느 이전에 저장된 상태를 복원하고, 그 실행을 시작하는 것을 포함할 수 있다.
메모리(106)는 DRAM(도시하지 않음)과 같은 비-영속적 메모리를 포함할 수 있다. 메모리(106)는, 예를 들어, 애플리케이션 또는 다른 프로세싱 로직의 부분들의 실행 동안 프로세싱 로직 명령어, 상수 값, 변수 값을 저장할 수 있다. 예를 들어, 일 실시예에 있어서, CPU(102) 상에서 하나 이상의 동작을 수행하는 제어 로직의 부분은 CPU(102)에 의한 각자의 동작 부분의 실행 동안 메모리(106) 내 거주할 수 있다.
실행 동안, 각자의 애플리케이션, 운영 체제 함수, 프로세싱 로직 커맨드 및 시스템 소프트웨어는 메모리(106)에 거주할 수 있다. 운영 체제(108)에 핵심적인 제어 로직 커맨드는 일반적으로 실행 동안 메모리(106)에 거주할 수 있다. 예를 들어 커널 모드 드라이버(110) 및 소프트웨어 스케줄러(112)를 포함하는 다른 소프트웨어 커맨드는 또한 시스템(100)의 실행 동안 메모리(106)에 거주할 수 있다.
이러한 예에 있어서, 메모리(106)는 APD(104)에 커맨드를 보내도록 CPU(102)에 의해 사용되는 커맨드 버퍼(125)를 포함한다. 또한 메모리(106)는 프로세스 리스트 및 프로세스 정보(예를 들어, 액티브 리스트(152) 및 프로세스 제어 블록(154))를 포함하고 있다. 이들 리스트와 더불어 그 정보는 APD(104) 및/또는 관련 스케줄링 하드웨어에 스케줄링 정보를 통신하도록 CPU(102) 상에서 실행하는 스케줄링 소프트웨어에 의해 사용된다. 메모리(106)로의 액세스는 메모리(106)에 연결되어 있는 메모리 컨트롤러(140)에 의해 관리될 수 있다. 예를 들어, 메모리(106)에 쓰기 위해 또는 그로부터 읽기 위해, CPU(102)로부터 또는 다른 디바이스로부터의 요청은 메모리 컨트롤러(140)에 의해 관리된다.
시스템(100)의 다른 태양을 다시 참조하면, IOMMU(116)는 멀티-컨텍스트 메모리 관리 유닛이다.
여기서 사용되는 바와 같이, 컨텍스트는 커널이 실행되는 환경 및 동기화 및 메모리 관리가 정의되는 도메인으로 생각될 수 있다. 컨텍스트는 디바이스 세트, 그들 디바이스에 액세스가능한 메모리, 대응하는 메모리 속성, 및 메모리 오브젝트 상에서 커널(들) 또는 동작의 실행을 스케줄링하도록 사용되는 하나 이상의 커맨드-큐를 포함한다.
도 1a에 도시된 예를 다시 참조하면, IOMMU(116)는 APD(104)를 포함하는 디바이스에 대해 메모리 페이지 액세스를 위해 가상 대 물리적 어드레스 변환을 수행하는 로직을 포함한다. IOMMU(116)는 또한, 예를 들어, APD(104)와 같은 디바이스에 의한 페이지 액세스가 페이지 폴트의 결과를 초래할 때, 인터럽트를 발생시키는 로직을 포함할 수 있다. IOMMU(116)는 또한 변환 색인 버퍼(TLB)(118)를 포함하거나 그로의 액세스를 가질 수 있다. TLB(118)는, 예로서, 메모리(106) 내 데이터에 대하여 APD(104)에 의해 이뤄진 요청에 대해 물리적 메모리 어드레스로 논리적(즉, 가상) 메모리 어드레스의 변환을 가속화하도록 컨텐트 어드레싱가능한 메모리(CAM)에 구현될 수 있다.
도시된 예에 있어서, 통신 기반구조(109)는 필요에 따라 시스템(100)의 컴포넌트를 상호접속한다. 통신 기반구조(109)는 주변장치 컴포넌트 상호접속(PCI) 버스, 확장된 PCI(PCI-E) 버스, 어드밴스트 마이크로컨트롤러 버스 아키텍처(AMBA) 버스, 어드밴스트 그래픽 포트(AGP), 또는 다른 그러한 통신 기반구조 중 하나 이상(도시하지 않음)을 포함할 수 있다. 통신 기반구조(109)는 또한 이더넷, 또는 유사한 네트워크, 또는 애플리케이션의 데이터 전송 레이트 요건을 만족하는 어느 적합한 물리적 통신 기반구조를 포함할 수 있다. 통신 기반구조(109)는 컴퓨팅 시스템(100)의 컴포넌트를 포함하는 컴포넌트를 상호접속하는 기능성을 포함한다.
이 예에 있어서, 운영 체제(108)는 시스템(100)의 하드웨어 컴포넌트를 관리하고 공통 서비스를 제공하는 기능성을 포함한다. 다양한 실시예에 있어서, 운영 체제(108)는 CPU(102) 상에서 실행되고 공통 서비스를 제공할 수 있다. 이들 공통 서비스는, 예를 들어, CPU(102) 내 실행을 위한 애플리케이션 스케줄링, 폴트 관리, 인터럽트 서비스와 더불어, 다른 애플리케이션의 입력 및 출력 프로세싱을 포함할 수 있다.
일부 실시예에 있어서는, 인터럽트 컨트롤러(148)와 같은 인터럽트 컨트롤러에 의해 발생된 인터럽트에 기반하여, 운영 체제(108)가 적합한 인터럽트 취급 루틴을 인보크한다. 예를 들어, 페이지 폴트 인터럽트 검출시, 운영 체제(108)는 메모리(106) 내로 관련 페이지의 로딩을 개시하도록 그리고 대응하는 페이지 테이블을 업데이트하도록 인터럽트 핸들러를 인보크할 수 있다.
운영 체제(108)는 또한 하드웨어 컴포넌트로의 액세스가 운영 체제 관리된 커널 기능성을 통해 중재됨을 보장함으로써 시스템(100)을 보호하는 기능성을 포함할 수 있다. 실제로, 운영 체제(108)는 애플리케이션(111)과 같은 애플리케이션이 사용자 공간에서 CPU(102) 상에서 실행됨을 보장한다. 운영 체제(108)는 또한 애플리케이션(111)이 하드웨어 및/또는 입/출력 기능성에 액세스하도록 운영 체제에 의해 제공된 커널 기능성을 인보크함을 보장한다.
예로써, 애플리케이션(111)은 CPU(102) 상에 또한 실행되는 사용자 계산을 수행하도록 다양한 프로그램 또는 커맨드를 포함한다. CPU(102)는 APD(104) 상의 프로세싱을 위해 선택된 커맨드를 무결절성으로 보낼 수 있다.
하나의 예에 있어서, KMD(110)는 CPU(102) 또는 CPU(102) 상에서 실행되는 애플리케이션 또는 다른 로직이 통해 APD(104) 기능성을 인보크할 수 있는 애플리케이션 프로그램 인터페이스(API)를 구현한다. 예를 들어, KMD(110)는 APD(104)가 후속하여 커맨드를 검색해낼 커맨드 버퍼(125)에 CPU(102)로부터의 커맨드를 인큐잉할 수 있다. 부가적으로, KMD(110)는, SWS(112)와 함께, APD(104) 상에서 실행될 프로세스의 스케줄링을 수행할 수 있다. SWS(112)는, 예를 들어, APD 상에서 실행될 프로세스의 우선순위결정된 리스트를 유지하는 로직을 포함할 수 있다.
본 발명의 다른 실시예에 있어서, CPU(102) 상에서 실행되는 애플리케이션은 커맨드를 인큐잉할 때 KMD(110)를 전적으로 우회할 수 있다.
일부 실시예에 있어서, SWS(112)는 APD(104) 상에서 실행될 프로세스의 메모리(106)에 액티브 리스트(152)를 유지한다. SWS(112)는 또한 하드웨어에서 HWS(128)에 의해 관리될 액티브 리스트(152) 내 프로세스의 서브세트를 선택한다. 예시적 실시예에 있어서, 프로세스의 이러한 2 레벨 실행 리스트는 프로세스를 관리하는 융통성을 증가시키고 하드웨어가 프로세싱 환경에서의 변화에 신속히 응답할 수 있게 한다. 또 다른 실시예에 있어서, APD(104) 상에서 각각의 프로세스를 실행하는데 관련된 정보는 CPU(102)로부터 APD(104)로 프로세스 제어 블록(PCB)(154)을 통해 통신된다.
애플리케이션용 프로세싱 로직, 운영 체제, 및 시스템 소프트웨어는, 궁극적으로는 마스크워크/포토마스크의 발생을 통해 제조 프로세스를 구성 가능하게 하여 여기서 설명되는 발명의 태양을 구체화하는 하드웨어 디바이스를 발생시키도록, C와 같은 프로그래밍 언어로 그리고/또는 베릴로그, RTL 또는 넷리스트와 같은 하드웨어 기술 언어로 특정된 커맨드를 포함할 수 있다.
당업자는, 이 설명을 읽을 때, 컴퓨팅 시스템(100)이 도 1a에 도시된 것보다 더 많거나 더 적은 컴포넌트를 포함할 수 있음을 이해할 것이다. 예를 들어, 컴퓨팅 시스템(100)은 하나 이상의 입력 인터페이스, 비-휘발성 저장소, 하나 이상의 출력 인터페이스, 네트워크 인터페이스, 및 하나 이상의 디스플레이 또는 디스플레이 인터페이스를 포함할 수 있다.
도 1b는 도 1a에 도시된 APD(104)의 더 상세한 예시를 나타내는 일 실시예이다. 도 1b에 있어서, CP(124)는 CP 파이프라인(124a, 124b, 124c)을 포함할 수 있다. CP(124)는, 도 1a에 도시된, 커맨드 버퍼(125)로부터 입력으로서 제공되는 커맨드 리스트를 프로세싱하도록 구성될 수 있다. 도 1b의 전형적 동작에 있어서, CP 입력 0(124a)은 그래픽 파이프라인(162)으로의 커맨드를 구동하는데 책임이 있다. CP 입력 1 및 2(124b, 124c)는 계산 파이프라인(160)에 커맨드를 포워딩한다. 또한 HWS(128)의 동작을 제어하기 위한 컨트롤러 메커니즘(166)이 제공된다.
도 1b에 있어서, 그래픽 파이프라인(162)은 여기서 순차 파이프라인(164)이라고 지칭되는 블록 세트를 포함할 수 있다. 예로서, 순차 파이프라인(164)은 정점 그룹 변환기(VGT)(164a), 원시 어셈블러(PA)(164b), 스캔 컨버터(SC)(164c), 및 셰이더-엑스포트, 렌더-백 유닛(SX/RB)(176)을 포함한다. 순차 파이프라인(164) 내 각각의 블록은 그래픽 파이프라인(162) 내 그래픽 프로세싱의 다른 스테이지를 표현할 수 있다. 순차 파이프라인(164)은 고정 함수 하드웨어 파이프라인일 수 있다. 본 발명의 취지 및 범위 내에 또한 있을 다른 구현이 사용될 수 있다.
소량의 데이터만이 그래픽 파이프라인(162)에 입력으로서 제공될 수 있지만, 이러한 데이터는 그것이 그래픽 파이프라인(162)으로부터 출력으로서 제공될 때까지 증폭될 것이다. 그래픽 파이프라인(162)은 또한 CP 파이프라인(124a)으로부터 수신된 작업-항목 그룹 내 레인지에 걸쳐 카운트하기 위한 DC(166)를 포함한다. DC(166)를 통해 의뢰된 계산 작업은 그래픽 파이프라인(162)과 반-동기식이다.
계산 파이프라인(160)은 셰이더 DC(168, 170)를 포함한다. DC(168, 170)의 각각은 CP 파이프라인(124b, 124c)으로부터 수신된 작업 그룹 내 계산 레인지에 걸쳐 카운트하도록 구성된다.
도 1b에 예시된 DC(166, 168, 170)는 입력 작업 그룹을 수신하고, 작업 그룹을 웨이브프론트로 세분하고, 그 후 웨이브프론트를 셰이더 코어(122)에 포워딩한다.
그래픽 파이프라인(162)은 일반적으로 고정 함수 파이프라인이므로, 그 상태를 저장 및 복원하는 것이 어렵고, 결과로서, 그래픽 파이프라인(162)은 컨텍스트 스위칭하기가 어렵다. 그래서, 대부분 경우에 있어서, 여기서 논의되는 바와 같은 컨텍스트 스위칭은 그래픽 프로세스 간 컨텍스트 스위칭과 관련 있지 않다. 컨텍스트 스위칭될 수 있는 예외는 셰이더 코어(122)에서의 그래픽 작업에 대해서이다.
그래픽 파이프라인(162) 내 작업의 프로세싱이 완료된 후에, 완료된 작업은 렌더 백 유닛(176)을 통해 프로세싱되는데, 깊이 및 컬러 계산을 행하고 그 후 그 최종 결과를 메모리(130)에 쓴다.
셰이더 코어(122)는 그래픽 파이프라인(162) 및 계산 파이프라인(160)에 의해 공유될 수 있다. 셰이더 코어(122)는 웨이브프론트를 실행하도록 구성된 일반 프로세서일 수 있다. 하나의 예에 있어서, 계산 파이프라인(160) 내 모든 작업은 셰이더 코어(122) 내에서 프로세싱된다. 셰이더 코어(122)는 프로그램가능한 소프트웨어 코드를 실행하고 상태 데이터와 같이 다양한 형태의 데이터를 포함한다. 셰이더 코어(122)는 RW L2 캐시(174)에 결합되어 있다.
도 2는 본 발명의 일 실시예에 따라 예시적 방법(200)을 묘사하는 흐름도이다. 방법(200)은 도 2의 설명 곳곳에서 참조되는 도 1a 및 도 1b의 시스템(100) 상에서 동작할 수 있다. 하나의 예에 있어서, 방법(200)은 APD(104)의 RW L2 캐시(174)와 같이 APD의 캐시를 사전로딩하는데 사용될 수 있다. 방법(200)은 도시된 순서로 일어날 수도 그렇지 않을 수도 있고, 동작 모두를 요구할 수도 그렇지 않을 수도 있다.
방법(200)은 동작(202)에서 시작하고 동작(204)으로 계속 가서, 커맨드 메시지가 컨트롤러에 의해 수신된다. 일 실시예에 의하면, 호스트 프로세서는 메모리의 일부와 관련된 데이터를 포함하는 커맨드 메시지를 출력하도록 구성된다. 호스트 프로세서는 예를 들어 CPU(102)일 수 있다. 커맨드 메시지는 그래픽 메모리(130)와 같이 메모리의 일부와 관련된 데이터를 포함할 수 있다. 일 실시예에 의하면, 커맨드 메시지는 픽셀 연산, 기하구조 계산, 및 디스플레이로의 이미지 렌더링과 관련된 APD에 의해 프로세싱될 명령어를 포함한다. 일반적으로, 커맨드 메시지의 스트림은 컨트롤러에 의해 수신될 수 있다. 컨트롤러는, 국한되는 것은 아니지만, 예를 들어 APD(104)의 CP(124)일 수 있다. CP(124) 이외의 전용 컨트롤러가 커맨드 메시지를 수신하도록 구성될 수 있음을 당업자는 이해할 것이다.
동작(206)에 있어서, 커맨드 메시지는 예를 들어 커맨드 프로세서(124)에 의해 해석된다. 위에서 논의된 바와 같이, 커맨드 메시지는 APD에 의해 수행될 일련의 동작 또는 계산과 관련된 데이터를 포함할 수 있다. 커맨드 메시지는 명령어 리스트를 포함할 수 있고, 각각의 명령어는 APD(104)에 의한 명령어의 프로세싱 동안 액세스될 메모리의 일부와 관련된 데이터를 포함한다. 예를 들어, 커맨드 메시지는 디스플레이로의 이미지를 렌더링하는 프로세스 동안 사용될 수 있는 픽셀 데이터 또는 상수를 포함하고 있을 수 있는, 그래픽 메모리(130)의 일부에 대한 참조 포인터를 포함할 수 있다.
일 실시예에 의하면, 커맨드 메시지의 해석은 메모리의 어느 부분을 캐시로 사전로딩할지 결정하는 것을 포함한다. 일 실시예에 있어서, 사전로딩될 메모리의 부분은 참조 정보의 집약성에 기반하여 결정된다. 이러한 집약성은 APD가 같은 확률로 그 데이터 모두에 동시에 액세스하지는 않는다는 원리에 기반한다. 참조 정보의 집약성은 메모리의 일부의 시간적 집약성에 기반할 수 있다.
예를 들어, 커맨드 메시지가 메모리의 특정 부분을 참조하는 명령어를 포함하면, 메모리의 동일 부분은 가까운 장래에 또다시 참조될 확률이 높다. 참조 정보의 집약성은, 예를 들어, 공간 집약성에 기반할 수 있다. 예를 들면, 커맨드 메시지가 메모리의 특정 부분을 참조하는 명령어를 포함하면, 메모리의 인근 부분에 거주하는 데이터 또한 가까운 장래에 참조될 확률이 높다.
동작(208)에서, 사전-로딩이 필요로 되는지 결정된다. 도 2의 예에 있어서, 사전-로딩 결정은 CP(124)에 의해 수행된다. 일 실시예에 의하면, 컨트롤러(예를 들어, CP(124))는 캐시의 액세스 이력을 추적하도록 구성될 수 있다. 커맨드 메시지의 프로세싱 동안, 명령어는 메모리(130) 내 위치와 같이 메모리 위치에 액세스할 수 있다. 명령어가 메모리 위치에 액세스할 때, APD는 메모리 위치가 캐시에 복제되어 있는지 우선 체크한다. 특히, 메모리 액세스와 연관된 어드레스가 캐시 내 모든 태그에 비교된다. 소망의 메모리 위치가 캐시 내에서 찾아지면, 캐시 히트가 일어난다. APD(104)는 식별된 캐시 라인 내 데이터 또는 명령어와 같은 정보를 즉시 읽거나 쓴다. 소망 메모리 위치가 캐시 내 찾아지지 않으면, 이것은 캐시 미스로 생각되어, 그래픽 메모리(130)와 같이 또 다른 소스로부터 데이터 검색의 결과를 초래한다.
일 실시예에 의하면, 커맨드 메시지의 수신 및 해석시, CP(124)는 캐시 액세스 이력에 기반하여 사전로딩이 필요한지 결정하도록 구성된다. 캐시 히트 또는 캐시 미스의 결과를 초래한 데이터는 또다시 액세스될 확률이 높은 데이터라고 여겨진다. 이러한 데이터와 관련된 정보 및 그래픽 메모리(130)의 일부 내 그 위치는 CP(124)에 의해 데이터베이스에 로깅 및 저장된다. 커맨드 메시지의 수신 시, CP(124)는 데이터베이스에 저장된 캐시 액세스 이력과 커맨드 메시지의 명령어를 비교하도록 구성된다. 메모리 위치와 관련된 커맨드 메시지 데이터가 캐시 액세스 이력 데이터베이스 내 어느 데이터와 유사할 때, 사전로딩이 필요하다. 방법(200)은 사전로딩이 필요하다는 결정시 동작(210)으로 진행할 수 있다. 사전로딩이 필요하지 않으면, 방법(200)은 동작(214)에서 종료한다.
동작(210)에서, 사전로딩될 메모리의 부분이 결정된다. 예를 들어, 사전로딩될 메모리의 부분은 CP(124)에 의해 결정된다. 일 실시예에 의하면, 사전로딩될 메모리의 부분은 참조 정보의 집약성에 기반한다. 이전에 논의된 바와 같이, 사전로딩될 메모리의 부분은 메모리의 부분의 시간적 또는 공간적 집약성에 기반할 수 있다. CP(124)가 커맨드 메시지 명령어에서 참조된 메모리의 부분을 식별하고 나면, 메모리의 동일 부분은, 인접 또는 인근 메모리 블록에 거주하는 메모리와 함께, 사전로딩될 메모리의 부분으로 식별될 수 있다.
또 다른 실시예에 의하면, 사전로딩될 메모리의 부분은 캐시의 정책 정보에 기반한다. 캐시에 대한 정책 정보는 캐시 블록이 쓰일 때를 결정할 수 있다. 예를 들어, 캐시 블록과 연관된 정책 정보가 "읽기 전용에 할당"이면, 캐시 블록은 쓰기 동작 동안 수정되지 않을 것이다. 캐시 블록과 연관된 정책 정보가 "읽기 및 쓰기에 할당"이면, 그때 캐시 블록은 쓰기 및 읽기 동작 둘 다 동안 업데이트될 수 있다. 부가적으로, 시스템이 다수 캐시를 포함할 때, 정책 정보는 어느 캐시가 특정 정보를 저장하도록 사용되는지 결정할 수 있다. 캐시의 정책 정보는 사전로딩될 메모리의 식별된 부분이 캐시에 어떻게 저장될지 결정한다.
동작(212)에서, 인출 메시지가 출력된다. 예를 들어, 인출 메시지는 RW L2 캐시(174)와 같이 특정 캐시에 CP(124)에 의해 출력된다. 사전로딩될 메모리의 부분이 식별되고 나면, 인출 메시지는 정책 정보와 관련된 데이터를 포함하여 CP(124)에 의해 발생된다. 일 실시예에 의하면, 인출 메시지는 캐시가 정책 정보에 기반하여 메모리의 부분으로부터의 데이터를 로딩하도록 야기한다. 그 후 방법(200)은 동작(214)에서 종료한다.
도 3은 본 발명의 일 실시예에 따라 예시적 방법(300)을 묘사하는 흐름도이다. 방법(300)은 도 3의 설명 곳곳에서 참조되는 도 1a 및 도 1b의 시스템(100) 상에서 동작할 수 있다. 하나의 예에 있어서, 방법(300)은 APD(104)의 RW L2 캐시(174)와 같이 APD의 캐시를 사전로딩하는데 사용될 수 있다. 방법(300)은 도시된 순서로 일어날 수도 그렇지 않을 수도 있고, 동작 모두를 요구할 수도 그렇지 않을 수도 있다.
방법(300)은 동작(302)에서 시작하고 동작(304)으로 계속 가서, 커맨드 메시지가 컨트롤러에 의해 수신된다. 일 실시예에 의하면, 호스트 프로세서는 사전인출 명령어를 포함하는 커맨드 메시지를 출력하도록 구성된다. 호스트 프로세서는 예를 들어 CPU(102)일 수 있다. 일 실시예에 의하면, 커맨드 메시지는 캐시로 사전로딩될 메모리의 부분을 명시적으로 식별하는 사전로딩 명령어를 포함한다. 예를 들어, 사전로딩 명령어는 APD(104)의 RW L2 캐시(174)로 사전로딩될 메모리의 부분의 물리적 어드레스를 포함할 수 있다. 대안으로, 사전로딩 명령어는 RW L2 캐시(174)로 사전로딩될 메모리의 부분의 가상 어드레스를 포함할 수 있다. 가상 어드레스는 가상 메모리 내 메모리의 부분의 위치이다. 가상 어드레스는 여러 다른 물리적 어드레스에 매핑될 수 있다. 그 실시예에 있어서, CP(124)는 가상 어드레스를 메모리의 부분의 물리적 어드레스로 변환하기 위해 IOMMU(116)와 같은 메모리 관리 유닛(MMU)을 호출하도록 구성된다.
동작(306)에서, 사전로딩될 메모리의 부분이, 예를 들어, CP(124)에 의해 결정된다. 일 실시예에 의하면, 사전로딩될 메모리의 부분은 커맨드 메시지에 포함된 물리적 어드레스에 기반한다. 물리적 어드레스는 캐시로 사전로딩될 메모리의 부분의 위치를 명시적으로 식별한다. 사전로딩될 메모리 부분은 커맨드 메시지에 포함된 가상 어드레스에 기반한다. 커맨드 메시지에 포함된 가상 어드레스를 물리적 어드레스로 변환한 후에, 사전로딩될 메모리의 부분의 정확한 위치가 식별될 것이다.
일 실시예에 있어서, 사전로딩될 메모리의 부분은 또한 메모리의 부분의 시간적 또는 공간적 집약성에 기반할 수 있다. CP(124)가 물리적 어드레스 또는 가상 어드레스에 의해 식별된 메모리의 부분의 위치를 결정하고 나면, 메모리의 동일 부분은, 인접 또는 인근 메모리 블록에 거주하는 메모리와 함께, 사전로딩될 메모리의 부분으로 식별될 수 있다. 일 실시예에 있어서, 캐시에 대한 정책 정보는 식별된 메모리의 부분이 언제 그리고 얼만큼 캐시로 사전로딩될지 결정하도록 사용될 수 있다.
동작(308)에서, 인출 메시지는, 예를 들어, RW L2 캐시(174)의 캐시 컨트롤러에 CP(124)에 의해 출력된다. 사전로딩될 메모리의 부분이 식별되고 나면, 인출 메시지는 이 정보와 관련된 데이터를 포함하여 CP(124)에 의해 발생된다. 일 실시예에 의하면, 인출 메시지는 캐시가 메모리의 부분으로부터의 데이터를 로딩하도록 야기한다. 그 후 방법(300)은 동작(310)에서 종료한다.
본 발명은 하드웨어, 소프트웨어, 펌웨어 또는 그 어느 조합으로 구체화될 수 있다. 본 발명의 실시예 또는 그 일부는 하드웨어 기술 언어(HDL), 어셈블리 언어, C 언어 및 넷리스트 등과 같은 많은 프로그래밍 언어로 인코딩될 수 있다. 예를 들어, HDL, 예를 들어, 베릴로그는 본 발명의 하나 이상의 실시예의 태양을 구현하는 디바이스 예를 들어 프로세서, 주문형 반도체(ASIC), 및/또는 다른 하드웨어 엘리먼트를 합성, 시뮬레이팅 및 제조하도록 사용될 수 있다. 베릴로그 코드는 컨텐트-어웨어 심 카빙을 사용하여 프레임을 스케일링할 수 있는 프로세서를 모델링, 설계, 검증 및/또는 구현하도록 사용될 수 있다.
예를 들어, 베릴로그는 프레임이 컨텐트-어웨어 심 카빙을 사용하여 스케일링될 수 있도록 명령어를 실행하는데 사용될 수 있는 로직의 레지스터 트랜스퍼 레벨(RTL) 기술을 발생시키도록 사용될 수 있다. 그 후 로직의 RTL 기술은 소망 로직 또는 디바이스를 제조하는데 사용되는 데이터 예를 들어 그래픽 설계 시스템(GDS) 또는 GDS II 데이터를 발생시키도록 사용될 수 있다. 베릴로그 코드, RTL 기술 및/또는 GDS II 데이터는 컴퓨터 가독 매체에 저장될 수 있다. 본 발명의 태양을 수행하도록 로직에 의해 실행되는 명령어는 C 및 C++과 같은 다양한 프로그래밍 언어로 코딩되고 로직 또는 다른 디바이스에 의해 실행될 수 있는 오브젝트 코드로 컴파일링될 수 있다.
본 발명의 태양은, 전부 또는 일부, 컴퓨터 가독 매체 상에 저장될 수 있다. 컴퓨터 가독 매체 상에 저장된 명령어는 본 발명을 전부 또는 일부 수행하거나, 또는 본 발명을 전부 또는 일부 수행하도록 특히 적응되는 디바이스 예를 들어 프로세서, ASIC, 다른 하드웨어를 발생시키기 위해 적응되도록 프로세서를 적응시킬 수 있다. 이들 명령어는 또한 여기서 설명되는 발명의 태양을 구체화하는 하드웨어 디바이스를 발생시키도록 마스크워크/포토마스크의 발생을 통해 제조 프로세스를 궁극적으로 구성하도록 사용될 수 있다.
개요 및 요약 절이 아니라 상세한 설명 절이 청구범위를 해석하도록 사용되려는 의도임을 인식해야 한다. 개요 및 요약 절은 발명자(들)에 의해 고려되는 바와 같이 본 발명의 하나 이상의 그러나 모두는 아닌 전형적 실시예를 제시하며, 그리하여, 본 발명 및 첨부 청구범위를 어떠한 식으로도 한정하려는 의도는 아니다.
본 발명은 특정 기능 및 그 관계의 구현을 예시하는 기능적 구조 블록의 도움으로 위에서 설명되었다. 이들 기능적 구조 블록의 경계는 설명의 편의를 위해 여기서 임의로 정의되었다. 특정 기능 및 그 관계가 적절히 수행되는 한 대체 경계가 정의될 수 있다.
특정 실시예의 상기 설명은 타인이 본 발명의 일반적 개념으로부터 벗어남이 없이 과도한 실험 없이 당업자의 지식을 적용함으로써 그러한 특정 실시예의 다양한 응용을 위해 쉽게 수정 및/또는 적응할 수 있도록 그렇게 본 발명의 일반적 본성을 충분히 드러낼 것이다. 그래서, 그러한 적응 및 수정은, 여기서 제시된 가르침 및 가이드에 기반하여, 개시된 실시예의 균등물의 의미 및 범위 내에 있는 것으로 의도된다. 본 명세서의 어법 또는 용어는 그 가르침 및 가이드에 비추어 당업자에 의해 해석되도록 여기에서의 어법 또는 용어는 제한이 아닌 설명의 목적을 위한 것임을 이해해야 한다.
본 발명의 폭 및 범위는 위에서 설명된 전형적 실시예 중 어느 것에 의해서도 한정되어서는 안 되며, 이하의 청구범위 및 그들 균등물에 의해서만 정의되어야 한다.

Claims (30)

  1. 캐시에 전기적으로 결합된 가속화된 프로세싱 디바이스를 포함하는 시스템으로서,
    상기 시스템은 컨트롤러를 포함하고,
    상기 컨트롤러는,
    상기 가속화된 프로세싱 디바이스에 의한 프로세싱 중에 액세스되는 명령어들을 포함하는 커맨드 메시지를 수신하고, 상기 명령어들은 메모리의 복수의 부분들 중 일부에 관련된 데이터를 포함하며;
    액세스될 상기 메모리의 부분을 상기 캐시에 사전로딩(preloading)하기 위한 사전로딩 명령어를 상기 커맨드 메시지가 포함하는지 결정함으로써 상기 커맨드 메시지를 해석하고;
    상기 커맨드 메시지가 상기 사전로딩 명령어를 포함하는 것으로 결정되는 조건에서, 상기 메모리의 적어도 일부를 상기 캐시에 사전로딩하도록 결정하고;
    상기 커맨드 메시지가 상기 사전로딩 명령어를 포함하지 않는 것으로 결정되는 조건에서, 상기 커맨드 메시지의 명령어들을 캐시 액세스 이력(history)과 비교하고 그리고 상기 커맨드 메시지와 상기 캐시 액세스 이력의 비교에 기초하여 상기 메모리의 적어도 일부를 상기 캐시에 사전로딩하는 것을 결정하고;
    (i) 집약성(locality) 참조 정보 및 (ii) 상기 캐시의 정책 정보 중 적어도 하나에 기초하여 상기 메모리의 상기 복수의 부분들 중 어느 부분이 상기 캐시에 사전로딩되는지 결정하고;
    상기 일부의 컨텐트와 관련된 데이터를 포함하는 인출 메시지를 생성하며; 그리고
    상기 인출 메시지를 상기 캐시에 출력하는 것을 특징으로 하는
    가속화된 프로세싱 디바이스를 포함하는 시스템.
  2. 제1항에 있어서,
    상기 메모리의 일부와 관련된 데이터를 포함하는 상기 커맨드 메시지를 출력하도록 구성된 호스트 프로세서를 더 포함하는
    가속화된 프로세싱 디바이스를 포함하는 시스템.
  3. 제1항에 있어서,
    상기 정책 정보는:
    사전로딩될 상기 메모리의 일부가 상기 캐시에 저장되는 방법과; 그리고
    상기 캐시의 블록이 기입될 때, (i) 읽기 전용인지 또는 (2) 읽기 및 쓰기인지를 결정하고,
    상기 인출 메시지는 상기 캐시가 상기 정책 정보에 기반하여 상기 메모리의 상기 일부로부터의 상기 데이터를 로딩하도록 야기하는 것인
    가속화된 프로세싱 디바이스를 포함하는 시스템.
  4. 제1항에 있어서,
    상기 커맨드 메시지는 상기 집약성 참조 정보를 포함하는 것인
    가속화된 프로세싱 디바이스를 포함하는 시스템.
  5. 제1항에 있어서,
    상기 집약성 참조 정보는 상기 메모리의 상기 일부의 시간적 집약성에 기반하는 것인
    가속화된 프로세싱 디바이스를 포함하는 시스템.
  6. 제1항에 있어서,
    상기 집약성 참조 정보는 상기 메모리의 상기 일부의 공간적 집약성에 기반하는 것인
    가속화된 프로세싱 디바이스를 포함하는 시스템.
  7. 제1항에 있어서,
    상기 컨트롤러는, 또한, 상기 커맨드 메시지가 상기 메모리의 각각의 일부에 대한 물리적 어드레스를 갖는 사전로딩 명령어를 포함하는지 결정함으로써 상기 커맨드 메시지를 해석하는 것인
    가속화된 프로세싱 디바이스를 포함하는 시스템.
  8. 제1항에 있어서,
    상기 컨트롤러는, 또한, 상기 커맨드 메시지가 상기 메모리의 상기 일부에 대한 가상 어드레스를 갖는 사전로딩 명령어를 포함하는지 결정함으로써 상기 커맨드 메시지를 해석하는 것인
    가속화된 프로세싱 디바이스를 포함하는 시스템.
  9. 제8항에 있어서,
    상기 컨트롤러는, 또한, 상기 가상 어드레스를 상기 메모리의 상기 일부에 대한 물리적 어드레스로 변환하는 것인
    가속화된 프로세싱 디바이스를 포함하는 시스템.
  10. 캐시를 사전로딩하기 위한 컴퓨터로 구현되는 방법으로서,
    가속화된 프로세싱 디바이스에 의한 프로세싱 중에 액세스되는 명령어들을 포함하는 커맨드 메시지를 수신하는 단계 - 상기 명령어들은 메모리의 복수의 부분들 중 일부에 관련된 데이터를 포함하며 - 와;
    액세스될 상기 메모리의 부분을 상기 캐시에 사전로딩하기 위한 사전로딩 명령어를 상기 커맨드 메시지가 포함하는지 결정함으로써 상기 커맨드 메시지를 해석하는 단계와;
    상기 커맨드 메시지가 상기 사전로딩 명령어를 포함하는 것으로 결정되는 조건에서, 상기 메모리의 적어도 일부를 상기 캐시에 사전로딩하도록 결정하는 단계와;
    상기 커맨드 메시지가 상기 사전로딩 명령어를 포함하지 않는 것으로 결정되는 조건에서, 상기 커맨드 메시지의 명령어들을 캐시 액세스 이력과 비교하고 그리고 상기 커맨드 메시지와 상기 캐시 액세스 이력의 비교에 기초하여 상기 메모리의 적어도 일부를 상기 캐시에 사전로딩하는 것을 결정하는 단계와;
    (i) 식별된 집약성 참조 정보 및 (ii) 상기 캐시의 식별된 정책 정보 중 적어도 하나에 기초하여 상기 메모리의 상기 복수의 부분들 중 어느 부분이 상기 캐시에 사전로딩되는지 결정하는 단계와;
    상기 일부의 컨텐트와 관련된 데이터를 포함하는 인출 메시지를 생성하는 단계와; 그리고
    상기 인출 메시지를 상기 캐시에 전송하는 단계를 포함하는 것을 특징으로 하는
    컴퓨터로 구현되는 방법.
  11. 제10항에 있어서,
    상기 정책 정보는:
    사전로딩될 상기 메모리의 일부가 상기 캐시에 저장되는 방법과; 그리고
    상기 캐시의 블록이 기입될 때, (i) 읽기 전용인지 또는 (2) 읽기 및 쓰기인지를 결정하고,
    상기 인출 메시지는 상기 캐시가 상기 정책 정보에 기반하여 상기 메모리의 상기 일부로부터의 상기 데이터를 로딩하도록 야기하는 것인
    컴퓨터로 구현되는 방법.
  12. 제10항에 있어서,
    상기 커맨드 메시지는 상기 집약성 참조 정보를 포함하는 것인
    컴퓨터로 구현되는 방법.
  13. 제10항에 있어서,
    참조 정보의 상기 집약성은 상기 메모리의 상기 일부의 시간적 집약성에 기반하는 것인
    컴퓨터로 구현되는 방법.
  14. 제10항에 있어서,
    참조 정보의 상기 집약성은 상기 메모리의 상기 일부의 공간적 집약성에 기반하는 것인
    컴퓨터로 구현되는 방법.
  15. 제10항에 있어서,
    상기 커맨드 메시지를 해석하는 단계는, 상기 커맨드 메시지가 상기 메모리의 상기 일부에 대한 가상 어드레스를 갖는 사전로딩 명령어를 포함하는지 결정하는 단계를 더 포함하는 것인
    컴퓨터로 구현되는 방법.
  16. 제15항에 있어서,
    상기 커맨드 메시지가 상기 메모리의 상기 일부에 대한 가상 어드레스를 갖는 사전로딩 명령어를 포함하는지 결정하는 단계 이후에,
    상기 가상 어드레스를 상기 메모리의 일부에 대한 물리적 어드레스로 변환하는 단계를 더 포함하는 것인
    컴퓨터로 구현되는 방법.
  17. 제10항에 있어서,
    상기 커맨드 메시지를 해석하는 단계는, 상기 커맨드 메시지가 상기 메모리의 일부에 대한 물리적 어드레스를 갖는 사전로딩 명령어를 포함하는지 결정하는 단계를 더 포함하는 것인
    컴퓨터로 구현되는 방법.
  18. 삭제
  19. 삭제
  20. 삭제
  21. 삭제
  22. 삭제
  23. 삭제
  24. 삭제
  25. 삭제
  26. 삭제
  27. 삭제
  28. 삭제
  29. 삭제
  30. 삭제
KR1020147016898A 2011-12-13 2012-12-12 캐시를 사전로딩하기 위해 gpu 컨트롤러를 사용하기 위한 메커니즘 KR101868997B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/324,432 2011-12-13
US13/324,432 US9239793B2 (en) 2011-12-13 2011-12-13 Mechanism for using a GPU controller for preloading caches
PCT/IB2012/002938 WO2013108070A1 (en) 2011-12-13 2012-12-12 Mechanism for using a gpu controller for preloading caches

Publications (2)

Publication Number Publication Date
KR20140102709A KR20140102709A (ko) 2014-08-22
KR101868997B1 true KR101868997B1 (ko) 2018-06-20

Family

ID=48573113

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020147016898A KR101868997B1 (ko) 2011-12-13 2012-12-12 캐시를 사전로딩하기 위해 gpu 컨트롤러를 사용하기 위한 메커니즘

Country Status (6)

Country Link
US (1) US9239793B2 (ko)
EP (1) EP2791933B1 (ko)
JP (1) JP5973590B2 (ko)
KR (1) KR101868997B1 (ko)
CN (1) CN104025185B (ko)
WO (1) WO2013108070A1 (ko)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8842122B2 (en) * 2011-12-15 2014-09-23 Qualcomm Incorporated Graphics processing unit with command processor
US9342712B2 (en) * 2012-06-08 2016-05-17 Advanced Micro Devices, Inc. Method and system for accelerating cryptographic processing
US9092341B2 (en) 2012-07-10 2015-07-28 International Business Machines Corporation Methods of cache preloading on a partition or a context switch
US10922851B2 (en) * 2014-09-25 2021-02-16 The Boeing Company Virtual reality environment color and contour processing system
CN107423232B (zh) * 2016-05-24 2020-10-16 北京忆芯科技有限公司 Ftl快速访问方法与装置
CN106127673B (zh) * 2016-07-19 2019-02-12 腾讯科技(深圳)有限公司 一种视频处理方法、装置及计算机设备
US20180336034A1 (en) * 2017-05-17 2018-11-22 Hewlett Packard Enterprise Development Lp Near memory computing architecture
GB2567466B (en) * 2017-10-12 2020-01-22 Advanced Risc Mach Ltd Cache stashing in a data processing system
CN109634491A (zh) * 2018-12-14 2019-04-16 珠海市小源科技有限公司 一种双向分段加载数据并显示的方法、计算机装置及计算机可读存储介质
US10877896B2 (en) 2019-03-07 2020-12-29 Micron Technology, Inc. Adaptive readahead cache manager based on detected active streams of read commands
US11232533B2 (en) * 2019-03-15 2022-01-25 Intel Corporation Memory prefetching in multiple GPU environment
CN110187835B (zh) * 2019-05-24 2023-02-03 北京百度网讯科技有限公司 用于管理访问请求的方法、装置、设备和存储介质
CN111522771B (zh) * 2020-04-20 2023-08-15 北京百度网讯科技有限公司 眼底图像处理方法、终端设备及存储介质
US20230069890A1 (en) * 2021-09-03 2023-03-09 Advanced Micro Devices, Inc. Processing device and method of sharing storage between cache memory, local data storage and register files

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060085602A1 (en) * 2004-10-15 2006-04-20 Ramakrishna Huggahalli Method and apparatus for initiating CPU data prefetches by an external agent
US20110022817A1 (en) * 2009-07-27 2011-01-27 Advanced Micro Devices, Inc. Mapping Processing Logic Having Data-Parallel Threads Across Processors

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5761720A (en) 1996-03-15 1998-06-02 Rendition, Inc. Pixel engine pipeline processor data caching mechanism
US6347369B1 (en) * 1997-11-17 2002-02-12 Advanced Micro Devices, Inc. Method and circuit for single cycle multiple branch history table access
KR100291628B1 (ko) 1999-06-19 2001-05-15 윤덕용 3차원 그래픽 텍스쳐 맵핑용 캐쉬 메모리 및 그의 캐쉬 미스페널티 저감방법
US20050010726A1 (en) 2003-07-10 2005-01-13 Rai Barinder Singh Low overhead read buffer
US20050195200A1 (en) 2004-03-03 2005-09-08 Chuang Dan M. Embedded system with 3D graphics core and local pixel buffer
US7502913B2 (en) 2006-06-16 2009-03-10 Microsoft Corporation Switch prefetch in a multicore computer chip
US8325184B2 (en) * 2007-09-14 2012-12-04 Qualcomm Incorporated Fragment shader bypass in a graphics processing unit, and apparatus and method thereof
JP2009230374A (ja) * 2008-03-21 2009-10-08 Fujitsu Ltd 情報処理装置,プログラム,及び命令列生成方法
US20100123717A1 (en) 2008-11-20 2010-05-20 Via Technologies, Inc. Dynamic Scheduling in a Graphics Processor
US8489851B2 (en) 2008-12-11 2013-07-16 Nvidia Corporation Processing of read requests in a memory controller using pre-fetch mechanism
US20100153934A1 (en) * 2008-12-12 2010-06-17 Peter Lachner Prefetch for systems with heterogeneous architectures
US8171219B2 (en) * 2009-03-31 2012-05-01 Intel Corporation Method and system to perform caching based on file-level heuristics
US8140769B2 (en) * 2009-04-20 2012-03-20 Oracle America, Inc. Data prefetcher
US9582222B2 (en) 2009-04-30 2017-02-28 Western Digital Technologies, Inc. Pre-cache similarity-based delta compression for use in a data storage system
US8219758B2 (en) * 2009-07-10 2012-07-10 Apple Inc. Block-based non-transparent cache
US8803897B2 (en) 2009-09-03 2014-08-12 Advanced Micro Devices, Inc. Internal, processing-unit memory for general-purpose use
US20110072218A1 (en) * 2009-09-24 2011-03-24 Srilatha Manne Prefetch promotion mechanism to reduce cache pollution
CN101866318B (zh) * 2010-06-13 2012-02-22 北京北大众志微系统科技有限责任公司 一种高速缓存替换策略的管理系统及方法
US8937622B2 (en) 2010-09-20 2015-01-20 Qualcomm Incorporated Inter-processor communication techniques in a multiple-processor computing platform

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060085602A1 (en) * 2004-10-15 2006-04-20 Ramakrishna Huggahalli Method and apparatus for initiating CPU data prefetches by an external agent
US20110022817A1 (en) * 2009-07-27 2011-01-27 Advanced Micro Devices, Inc. Mapping Processing Logic Having Data-Parallel Threads Across Processors

Also Published As

Publication number Publication date
US9239793B2 (en) 2016-01-19
WO2013108070A1 (en) 2013-07-25
JP5973590B2 (ja) 2016-08-23
US20130151787A1 (en) 2013-06-13
EP2791933A4 (en) 2015-08-05
CN104025185A (zh) 2014-09-03
KR20140102709A (ko) 2014-08-22
EP2791933A1 (en) 2014-10-22
EP2791933B1 (en) 2018-09-05
CN104025185B (zh) 2017-08-01
JP2015505091A (ja) 2015-02-16

Similar Documents

Publication Publication Date Title
KR101868997B1 (ko) 캐시를 사전로딩하기 위해 gpu 컨트롤러를 사용하기 위한 메커니즘
US11741019B2 (en) Memory pools in a memory model for a unified computing system
KR101922681B1 (ko) 셰이더 코어에서 셰이더 자원 할당을 위한 정책
US9645854B2 (en) Dynamic work partitioning on heterogeneous processing devices
US8752064B2 (en) Optimizing communication of system call requests
US20120159039A1 (en) Generalized Control Registers
US20120246381A1 (en) Input Output Memory Management Unit (IOMMU) Two-Layer Addressing
US9256465B2 (en) Process device context switching
US11232536B2 (en) Thread prefetch mechanism
US8803891B2 (en) Method for preempting graphics tasks to accommodate compute tasks in an accelerated processing device (APD)
US20130145202A1 (en) Handling Virtual-to-Physical Address Translation Failures
KR20140001970A (ko) 결합된 cpu/gpu 아키텍처 시스템에서의 디바이스의 발견 및 토폴로지 보고
US20140040565A1 (en) Shared Memory Space in a Unified Memory Model
WO2012082777A1 (en) Managed task scheduling on an accelerated processing device (apd)
US20130155074A1 (en) Syscall mechanism for processor to processor calls
US20130135327A1 (en) Saving and Restoring Non-Shader State Using a Command Processor
US9329893B2 (en) Method for resuming an APD wavefront in which a subset of elements have faulted
US20130141446A1 (en) Method and Apparatus for Servicing Page Fault Exceptions
WO2013085794A1 (en) Method and apparatus for servicing page fault exceptions
US10324844B2 (en) Memory consistency in graphics memory hierarchy with relaxed ordering
WO2013148467A1 (en) Mapping memory instructions into a shared memory address space
US20130155079A1 (en) Saving and Restoring Shader Context State
WO2013090605A2 (en) Saving and restoring shader context state and resuming a faulted apd wavefront

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right