KR101121487B1 - 멀티-클래스 데이터 캐시 정책들 - Google Patents

멀티-클래스 데이터 캐시 정책들 Download PDF

Info

Publication number
KR101121487B1
KR101121487B1 KR1020090112619A KR20090112619A KR101121487B1 KR 101121487 B1 KR101121487 B1 KR 101121487B1 KR 1020090112619 A KR1020090112619 A KR 1020090112619A KR 20090112619 A KR20090112619 A KR 20090112619A KR 101121487 B1 KR101121487 B1 KR 101121487B1
Authority
KR
South Korea
Prior art keywords
data
cache
cache line
entry
tag
Prior art date
Application number
KR1020090112619A
Other languages
English (en)
Other versions
KR20100057516A (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 KR20100057516A publication Critical patent/KR20100057516A/ko
Application granted granted Critical
Publication of KR101121487B1 publication Critical patent/KR101121487B1/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/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/126Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
    • 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
    • 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/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/128Replacement control using replacement algorithms adapted to multidimensional cache systems, e.g. set-associative, multicache, multiset or multilevel
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

본 발명의 일 실시예는 데이터를 그 데이터의 데이터 클래스에 기초하여 데이터 캐시로부터 축출하는 메커니즘을 설명한다. 데이터 캐시 내의 캐시 라인들에 저장된 데이터는 해당 데이터의 재이용 가능성을 반영하는 데이터 클래스들에 기초하여 분류된다. 데이터 클래스들은 태그 스토어에 저장되며, 태그 스토어 내의 각각의 태그는 데이터 캐시 내의 단일 캐시 라인에 대응한다. 명령과 관련된 데이터를 위해 캐시 라인을 예약하는 경우에, 태그 룩업 유닛은 어느 데이터를 축출할지를 결정하기 위해 태그 스토어 내의 데이터 클래스들을 조사한다. 재이용 가능성이 낮은 데이터는 재이용 가능성이 높은 데이터보다 높은 우선순위로 축출된다. 유용하게, 재이용 가능성이 낮은 데이터 클래스에 속하는 데이터를 축출하는 것은 시스템 내의 캐시 미스들의 수를 감소시킨다.
태그 저장 유닛, 데이터 축출, 캐시 라인, 엔트리, 태그 룩업 유닛

Description

멀티-클래스 데이터 캐시 정책들{MULTI-CLASS DATA CACHE POLICIES}
본 발명은 전반적으로 메모리 관리의 분야에 관한 것으로서, 보다 구체적으로는, 멀티-클래스 데이터 캐시 정책들(multi-class data cache policies)에 관한 것이다.
소정의 처리 유닛들 내의 메모리 서브시스템의 하나의 요소는 레벨 2 캐시 메모리(본 명세서에서, "L2 캐시" 라고 지칭됨)이다. L2 캐시는 외부 메모리(예를 들면, 프레임 버퍼 메모리)와 메모리 서브시스템의 내부 클라이언트들(본 명세서에서 "클라이언트들" 이라고 지칭됨) 사이의 중간 포인트로서 기능하는 커다란 온칩(on-chip) 메모리이다. L2 캐시는 다양한 클라이언트들에 의해 이용되는 데이터를 일시적으로 저장한다. 이러한 데이터는 외부 메모리(본 명세서에서 "DRAM" 이라고 지칭됨)로부터 검색되거나, 또는 외부 메모리에 기입될 수 있다. 클라이언트들은 소정의 동작들을 수행하는 동안 L2 캐시에 저장되는 데이터를 재이용할 수 있다.
판독 동작 동안, 클라이언트는 L2 캐시에 현재 저장되지 않아, DRAM으로부터 검색되어야 하는 데이터를 L2 캐시로부터 요청할 수 있다. 데이터가 DRAM으로부터 검색되어야 하는 판독 동작은, 데이터가 L2 캐시로부터 직접 검색되는 판독 동작보다 훨씬 더 많은 클록 사이클들로 처리된다. 따라서, 다수의 판독 동작을 위해 DRAM으로부터 데이터가 검색되어야 하는 경우, 전체 시스템 성능은 심각한 영향을 받을 수 있다. 그러나, L2 캐시에 할당된 메모리 공간은 제한되기 때문에, L2 캐시에 상주하는 데이터는, 클라이언트들에 의해 송신된 미래의 판독 또는 기입 동작들을 위해 메모리 공간을 비워두도록(free up) 정기적으로 축출(eviction)될 필요가 있다. L2 캐시에 상주하는 데이터가 충분히 빈번하게 축출되지 않는다면, 미래의 판독 및 기입 동작들은, 그러한 동작들을 처리하기 위한 공간이 L2 캐시에 있을 때까지, 스톨(stall)되어야 한다. 다시, 그러한 역학(dynamic)은 전체 시스템 성능에 커다란 영향을 미칠 수 있다.
통상적으로, 종래의 축출 스킴들은, 최근에 최소로 이용된 데이터(least recently used data)가 캐시로부터 축출되는 정책을 구현한다. 그러나, 데이터의 이용 패턴들이 변화되는 소정의 시스템들에서, 그러한 접근법은 미래의 판독 및 기입 동작들을 위한 공간을 마련하기 위해 데이터를 신속하게 축출하는 것과, 외부 메모리에 대한 데이터 요청들이 회피될 수 있도록 데이터가 재이용을 위해 캐시 내에 충분히 오래 남아있는 것을 허용하는 것 사이의 적절한 균형을 이루지 못하게 할 수 있다.
전술한 내용이 예시하는 바와 같이, 본 기술 분야에서는, L2 캐시와 같은 중 간 캐시로부터 어느 데이터가 먼저 축출되어야 하는지를 결정하기 위한 보다 효율적인 메카니즘이 필요하다.
본 발명의 일 실시예는 하나 이상의 클라이언트들 및 외부 메모리에 연결된 중간 캐시로부터 데이터를 축출하는 방법을 개시한다. 본 방법은 관련된 메모리 어드레스를 포함하는 클라이언트로부터 명령을 수신하는 단계, 메모리 어드레스에 근거하여 명령과 관련된 데이터를 저장하기 위해 중간 캐시 내의 하나 이상의 캐시 라인들을 식별하는 단계, 하나 이상의 캐시 라인들에 대해 캐시 미스가 존재함을 결정하는 단계, 및 하나 이상의 캐시 라인들에 상주하는 데이터의 적어도 일부가 축출되도록 하거나, 또는 하나 이상의 캐시 라인들에 상주하는 데이터와 관련된 하나 이상의 축출 클래스들에 근거하여 명령을 스톨링하는 단계를 포함하며, 각각의 축출 클래스는 축출 클래스와 관련된 데이터가 클라이언트 또는 상이한 클라이언트에 의해 재이용될 상이한 가능성을 반영한다.
개시된 방법의 한 가지 이점은, 데이터 캐시에 저장된 데이터와 관련된 데이터 클래스는 태그 룩업 유닛(tag look-up unit)으로 하여금, 입력되는 판독 또는 기입 명령과 관련된 데이터를 위한 공간을 마련할 때 재이용을 위한 최소의 가능성을 갖는 데이터를 축출하도록 한다. 이러한 데이터 축출 메카니즘은 시스템 내의 클라이언트들에 의해 재이용될 수 있는 데이터의 조기(early) 축출로부터 초래되는 캐시 미스들의 수를 감소시킨다.
위에서 인용된 본 발명의 특징들이 상세히 이해될 수 있는 방식이 되도록, 위에서 간략히 요약된 본 발명의 보다 특정한 설명이 실시예들을 참조하여 제공될 수 있고, 첨부 도면들에 그 일부가 도시된다. 그러나, 첨부된 도면들은 본 발명의 전형적인 실시예들만을 도시할 뿐, 본 발명의 영역을 제한하는 것으로 고려되지 않으며, 본 발명은 다른 동일하게 유효한 실시예들을 허용할 수 있다.
이하의 설명에서, 본 발명에 대한 보다 완전한 이해를 제공하기 위해, 다양한 특정 세부 사항들이 개시된다. 그러나, 당업자라면, 본 발명은 하나 이상의 이들 특정 세부 사항들 없이도 실시될 수 있음을 명백히 알 것이다. 다른 경우, 본 발명을 불명료하게 하지 않도록, 잘 알려진 특징들은 기술되지 않는다.
시스템 개요
도 1은 본 발명의 하나 이상의 양상들을 구현하도록 구성된 컴퓨터 시스템(100)을 도시하는 블록도이다. 컴퓨터 시스템(100)은 메모리 브리지(105)를 통한 버스 경로를 경유하여 통신하는 중앙 처리 유닛(CPU)(102) 및 시스템 메모리(104)를 포함한다. 도 1에 도시된 바와 같이, 메모리 브리지(105)는 CPU(102) 내에 통합될 수 있다. 대안적으로, 메모리 브리지(105)는 버스를 경유하여 CPU(102)에 접속되는 종래의 디바이스, 예를 들면, 노스브리지 칩(Northbridge chip)일 수 있다. 메모리 브리지(105)는 통신 경로(106)(예를 들면, 하이퍼트랜스포트 링크(HyperTransport link))를 경유하여 I/O(입력/출력) 브리지(107)에 접속된다. 예를 들면, 사우스브리지 칩(Southbridge chip)일 수 있는 I/O 브리지(107) 는 하나 이상의 사용자 입력 디바이스들(108)(예를 들면, 키보드, 마우스)로부터의 사용자 입력을 수신하고, 그 입력을 경로(106) 및 메모리 브리지(105)를 경유하여 CPU(102)에 전달한다. 병렬 처리 서브시스템(112)은 버스 또는 다른 통신 경로(113)(예를 들면, PCI Express, AGP(Accelerated Graphics Port), 또는 하이퍼트랜스포트 링크)를 경유하여 메모리 브리지(105)에 연결되며, 일 실시예에서, 병렬 처리 서브시스템(112)은 픽셀들을 디스플레이 디바이스(110)(예를 들면, 종래의 CRT 또는 LCD 기반 모니터)에 전달하는 그래픽 서브시스템이다. 시스템 디스크(114)가 또한 I/O 브리지(107)에 접속된다. 스위치(116)는 I/O 브리지(107)와, 네트워크 어댑터(118) 및 다양한 애드인 카드들(120, 121)과 같은 다른 컴포넌트들 사이의 접속들을 제공한다. USB 또는 다른 포트 접속들, CD 드라이브들, DVD 드라이브들, 녹화 장치들 등을 포함하는 (명시적으로 도시되지 않은) 다른 컴포넌트들이 I/O 브리지(107)에 또한 접속될 수 있다. 도 1에서의 다양한 컴포넌트들을 상호접속하는 통신 경로들은, PCI(Peripheral Component Interconnect), PCI Express(PCI-E), AGP(Accelerated Graphics Port), 하이퍼트랜스포트(HyperTransport)와 같은 임의의 적절한 프로토콜들, 또는 임의의 다른 버스 또는 점대점 통신 프로토콜(들)을 이용하여 구현될 수 있으며, 상이한 디바이스들 사이의 접속들은 본 기술 분야에 알려진 다른 프로토콜들을 이용할 수 있다.
일 실시예에서, 병렬 처리 서브시스템(112)은 예를 들면, 비디오 출력 회로를 포함하는, 그래픽 및 비디오 처리를 위해 최적화된 회로를 통합하며, 그래픽 처리 유닛(GPU)을 구성한다. 다른 실시예에서, 병렬 처리 서브시스템(112)은 본 명 세서에서 보다 상세히 기술된 기초 계산 아키텍처를 보존하면서, 범용 처리를 위해 최적화된 회로를 통합한다. 또 다른 실시예에서, 병렬 처리 서브시스템(112)은 메모리 브리지(105), CPU(102) 및 I/O 브리지(107)와 같은 하나 이상의 다른 시스템 요소들과 통합되어, 시스템 온 칩(system on chip; SoC)을 형성할 수 있다.
본 명세서에서 도시된 시스템은 예시적인 것이며, 수정 및 변경이 가능함을 이해할 것이다. 브리지들의 수 및 배열을 포함하는 접속 토폴로지는 원하는 대로 변경될 수 있다. 예컨대, 몇몇 실시예에서, 시스템 메모리(104)는 CPU(102)에, 브리지를 통해서가 아니라 직접 접속되며, 다른 디바이스들은 메모리 브리지(105) 및 CPU(102)를 경유하여 시스템 메모리(104)와 통신한다. 다른 대안적인 토폴로지에서, 병렬 처리 서브시스템(112)은 메모리 브리지(105)에 접속되지 않고, I/O 브리지(107)에 접속되거나 또는 CPU(102)에 직접 접속된다. 또 다른 실시예에서, CPU(102), I/O 브리지(107), 병렬 처리 서브시스템(112) 및 메모리 브리지(105) 중 하나 이상은 하나 이상의 칩에 통합될 수 있다. 본 명세서에서 도시된 특정 컴포넌트들은 선택적인 것이며, 예컨대, 임의의 수의 애드인 카드들 또는 주변 디바이스들이 지원될 수 있다. 몇몇 실시예에서, 스위치(116)는 제거되며, 네트워크 어댑터(118) 및 애드인 카드들(120, 121)은 I/O 브리지(107)에 직접 접속된다.
도 2는 본 발명의 일 실시예에 따른, 병렬 처리 서브시스템(112)를 도시한다. 도시된 바와 같이, 병렬 처리 서브시스템(112)은, 각각이 로컬 병렬 처리(PP) 메모리(204)에 접속된 하나 이상의 병렬 처리 유닛들(PPU들)(202)을 포함한다. 일반적으로, 병렬 처리 서브시스템은 U개의 PPU들을 포함하며, 여기서 U≥1이다. (본 명세서에서, 필요한 경우, 유사한 객체들의 다수의 인스턴스들은, 객체를 식별하는 참조 번호들과, 인스턴스를 식별하는 삽입 번호들을 이용하여 표기된다.) PPU들(202) 및 병렬 처리 메모리들(204)은, 프로그램가능한 프로세서들, ASIC들(application specific integrated circuits), 또는 메모리 디바이스들과 같은 하나 이상의 집적 회로 디바이스들을 이용하여 구현되거나, 또는 기술적으로 실현가능성 있는 임의의 그외의 방법으로 구현된다.
도 1을 다시 참조하면, 일부 실시예들에서, 병렬 처리 서브시스템(112)의 PPU들(202)의 일부 또는 전부는, 픽셀 데이터를 저장하고 업데이트하기 위해 (예를 들어, 종래의 프레임 버퍼를 포함하는 그래픽 메모리로서 이용될 수 있는) 로컬 병렬 처리 메모리(204)와 상호작용하고, 픽셀 데이터를 디스플레이 디바이스(110)에 전달하는 등, CPU(102) 및/또는 시스템 메모리(104)에 의해 제공되는 그래픽 데이터로부터 픽셀 데이터를 생성하는 것과 관련된 다양한 작업들을 수행하도록 구성될 수 있는 렌더링 파이프라인들을 갖는 그래픽 프로세서들이다. 일부 실시예들에서, 병렬 처리 서브시스템(112)은 그래픽 프로세서들로서 동작하는 하나 이상의 PPU들(202) 및 범용 연산들에 이용되는 하나 이상의 그외의 PPU들(202)을 포함할 수 있다. PPU들은 동일하거나 상이할 수 있으며, 각각의 PPU는 자신의 전용 병렬 처리 메모리 디바이스(들)을 가질 수 있거나, 전용 병렬 처리 메모리 디바이스(들)을 갖지 않을 수 있다. 하나 이상의 PPU들(202)은 데이터를 디스플레이 디바이스(110)에 출력하거나 각각의 PPU(202)는 데이터를 하나 이상의 디스플레이 디바이스(110)에 출력할 수 있다.
동작에서, CPU(102)는 컴퓨터 시스템(100)의 마스터 프로세서이며, 그외의 시스템 컴포넌트들의 동작을 제어하고 조정한다. 특히, CPU(102)는 PPU들(202)의 동작을 제어하는 명령들을 발행한다. 일부 실시예들에서, CPU(102)는 각각의 PPU(202)에 대한 명령들의 스트림을, 시스템 메모리(104), 병렬 처리 메모리(204), 또는 CPU(102) 및 PPU(202) 모두에 의해 액세스가능한 다른 저장 위치에 위치될 수 있는 명령 버퍼(도 1 또는 도 2에 명확하게 도시되지 않음)에 기입한다. PPU(202)는 명령 버퍼로부터 명령 스트림을 판독하고, 그 후 CPU(102)의 동작과 관련하여 동기적으로 명령들을 실행한다. CPU(102)는 또한 PPU들(202)이 명령 버퍼의 명령들에 응답하여 판독할 수 있는 데이터 버퍼들을 생성할 수 있다. 각각의 명령 및 데이터 버퍼는 PPU들(202) 각각에 의해 판독될 수 있다.
다시 도 2를 참조하면, 각각의 PPU(202)는, 메모리 브리지(105)에 (또는, 하나의 대안의 실시예에서, CPU(102)에 직접) 접속되는 통신 경로(113)를 통해 컴퓨터 시스템(100)의 나머지 부분과 통신하는 I/O(입력/출력) 유닛을 포함한다. 컴퓨터 시스템(100)의 나머지 부분으로의 PPU(202)의 접속은 또한 변화될 수 있다. 일부 실시예들에서, 병렬 처리 서브시스템(112)은 컴퓨터 시스템(100)의 확장 슬롯으로 삽입될 수 있는 애드인 카드로서 구현된다. 그외의 실시예들에서, PPU(202)는 메모리 브리지(105) 또는 I/O 브리지(107)와 같은 버스 브리지를 갖는 단일 칩 상에 집적될 수 있다. 또 다른 실시예들에서, PPU(202)의 일부 또는 전부는 CPU(102)를 갖는 단일 칩 상에 집적될 수 있다.
일 실시예에서, 통신 경로(113)는, 본 기술분야에 주지된 바와 같이, 각각의 PPU(202)에 전용 레인들이 할당되는 PCI-E 링크이다. 그외의 통신 경로들이 또한 이용될 수 있다. I/O 유닛(205)은 전송용 패킷(또는 그외의 신호들)을 통신 경로(113) 상에 생성하고, 또한 모든 인입하는 패킷들(또는 그외의 신호들)을 통신 경로(113)로부터 수신하여, 인입하는 패킷들을 PPU(202)의 적절한 컴포넌트로 보낸다. 예를 들어, 처리 작업들과 관련된 명령들은 호스트 인터페이스(206)로 보내질 수 있는 한편, 메모리 동작들(예를 들어, 병렬 처리 메모리(204)에 대한 판독 또는 그에의 기입)은 메모리 크로스바 유닛(210)으로 보내질 수 있다. 호스트 인터페이스(206)는 각각의 명령 버퍼를 판독하고, 명령 버퍼에 의해 특정된 작업을 프런트 엔드(212)로 출력한다.
각각의 PPU(202)는 고성능 병렬 처리 아키텍처를 구현한다는 장점을 갖는다. 상세하게 도시된 바와 같이, PPU(202(0))는 C개의 일반 처리 클러스터들(GPC들)(208)을 포함하는 처리 클러스터 어레이(230)를 포함하며, 여기서 C≥1이다. 각각의 GPC(208)는 다수의(예를 들어, 수백 또는 수천개의) 스레드들을 동시에 실행할 수 있으며, 여기서 각각의 스레드는 프로그램의 인스턴스이다. 다양한 어플리케이션들에서, 상이한 GPC들(208)이 상이한 유형들의 프로그램들을 처리하거나 상이한 유형들의 연산들을 처리하기 위해 할당될 수 있다. 예를 들어, 그래픽 어플리케이션에서, GPC들(208)의 제1 세트는 테셀레이션(tessellation) 동작들을 수행하고 패치들(patches)에 대해 프리미티브 토폴로지(primitive topology)를 생성하도록 할당될 수 있고, GPC들(208)의 제2 세트는 프리미티브 토폴로지들에 대한 패치 파라미터들을 평가하는 테셀레이션 셰이딩을 수행하고 정점 위치들(vertex positions) 및 그외의 정점당 속성들(per-vertex attributes)을 결정하도록 할당될 수 있다. GPC들(208)의 할당은 각각의 유형의 프로그램 또는 연산에 대해 발생하는 작업량에 따라 변화할 수 있다. 대안적으로, GPC들(208)은 상이한 처리 작업들 사이에서 전환하는 타임 슬라이스(time-slice) 방식을 이용하여 처리 작업들을 수행하도록 할당될 수 있다.
GPC들(208)은 실행될 처리 작업들을, 처리 작업들을 정의하는 명령들을 프런트 엔드 유닛(212)로부터 수신하는 작업 분배 유닛(200)을 통해 수신한다. 처리 작업들은 처리될 데이터, 예를 들어, 표면(패치) 데이터, 초기 데이터, 정점 데이터, 및/또는 픽셀 데이터에 대한 포인터들뿐만 아니라 상태 파라미터들 및 데이터가 처리되는 방법(예를 들어, 어느 프로그램이 실행될 것인지)을 정의하는 명령들을 포함한다. 작업 분배 유닛(200)은 처리 작업들에 대응하는 포인터들을 인출하도록 구성될 수 있고, 프런트 엔드(212)로부터 포인터들을 수신할 수 있거나, 프런트 엔드(212)로부터 데이터를 직접 수신할 수 있다. 일부 실시예들에서, 인덱스들은 어레이에서의 데이터의 위치를 특정한다. 프런트 엔드(212)는, 명령 버퍼에 의해 특정된 처리가 개시되기 전에 GPC들(208)이 유효 상태로 구성되는 것을 보장한다.
예를 들어, PPU(202)가 그래픽 처리에 이용되는 경우, 각각의 패치에 대한 처리 작업량이 대략 동일한 크기의 작업들로 분할되어, 다수의 GPC들(208)로 테셀레이션 처리의 분배를 가능케 한다. 작업 분배 유닛(200)은 처리를 위한 다수의 GPC들(208)로 작업들을 제공할 수 있는 주파수로 작업들을 출력하도록 구성될 수 있다. 본 발명의 일부 실시예에서, GPC들(208)의 부분들은 상이한 유형들의 처리를 수행하도록 구성된다. 예를 들어, 제1 부분은 정점 셰이딩 및 토폴로지 생성을 수행하도록 구성될 수 있고, 제2 부분은 테셀레이션 및 기하학 셰이딩을 수행하도록 구성될 수 있으며, 제3 부분은 렌더링된 화상을 생성하기 위해 스크린에서 픽셀 셰이딩을 수행하도록 구성될 수 있다. 상이한 유형들의 처리 작업들을 효율적으로 수행하기 위해 GPC들(208)의 부분들을 할당하는 능력은, 그러한 상이한 유형들의 처리 작업들에 의해 생성된 데이터의 임의의 확장 및 수축을 수용한다. GPC들(208)에 의해 만들어진 중간 데이터는 버퍼링되어, 다운스트림 GPC(208)에 의해 데이터가 수용되는 레이트가 업스트림 GPC(208)에 의해 데이터가 만들어지는 레이트보다 늦어지는 경우, 중간 데이터가 최소한의 스톨링(stalling)을 갖고 GPC들(208) 사이에 전송되게 할 수 있다.
메모리 인터페이스(214)는 각각이 병렬 처리 메모리(204)의 일부분에 접속된 D개의 메모리 파티션 유닛들로 파티션될 수 있으며, 여기서, D≥1이다. 병렬 처리 메모리(204)의 각각의 부분은 일반적으로 하나 이상의 메모리 디바이스들(예를 들어, DRAM(220))을 포함한다. 본 기술분야의 당업자는 DRAM(220)이 그외의 적절한 저장 디바이스들로 대체될 수 있으며, 일반적으로 종래의 설계일 수 있음을 이해할 것이다. 따라서, 상세한 설명은 생략된다. 프레임 버퍼 또는 텍스처 맵들과 같은 렌더링 타겟들은 DRAM들(220)에 걸쳐서 저장될 수 있고, 파티션 유닛(215)들이 각각의 렌더링 타겟의 부분들을 기입하여 병렬 처리 메모리(204)의 이용가능한 대역폭을 효율적으로 이용하게 한다.
GPC들(208) 중 어느 하나는, 병렬 처리 메모리(204) 내의 파티션 유닛들(215)의 임의의 것에 기입되는 데이터를 처리할 수 있다. 크로스바 유닛(210)은 각각의 GPC(208)의 출력을 임의의 파티션 유닛(214)의 입력 또는 추가의 처리를 위해 다른 GPC(208)로 보내도록 구성된다. GPC들(208)은 크로스바 유닛(210)을 통해 메모리 인터페이스(214)와 통신하여 다양한 외부 메모리 디바이스들에 대해 판독 또는 기입한다. 일 실시예에서, 크로스바 유닛(210)은 로컬 병렬 처리 메모리(204)에 대한 접속뿐만 아니라 I/O 유닛(205)과 통신하기 위한 메모리 인터페이스(214)에 대한 접속을 가짐으로써, 상이한 GPC들(208) 내의 처리 코어들이 시스템 메모리(104) 또는 PPU(202)에 대하여 로컬이 아닌 그외의 메모리와 통신하게 한다. 크로스바 유닛(210)은 GPC들(208)과 파티션 유닛(215) 간의 트래픽 스트림(traffic stream)을 분리하기 위해 가상 채널들을 이용할 수 있다.
다시, GPC들(208)은, 선형 및 비선형 데이터 변환, 비디오 및/또는 오디오 데이터의 필터링, 모델링 동작들(예를 들어, 객체들의 위치, 속도 및 그외의 속성을 결정하기 위해 물리학의 법칙을 적용), 이미지 렌더링 동작들(예를 들어, 테셀레이션 셰이더, 정점 셰이더, 기하학 셰이더, 및/또는 픽셀 셰이더 프로그램들) 등을 포함하지만 이것으로 제한되는 것은 아닌 광범위한 어플리케이션들과 관련된 처리 작업들을 실행하도록 프로그램될 수 있다. PPU들(202)은 데이터를 시스템 메모리(104) 및/또는 로컬 병렬 처리 메모리들(204)로부터 내부(온칩) 메모리로 전달할 수 있고, 데이터를 처리할 수 있고, 결과 데이터를 다시 시스템 메모리(104) 및/또는 로컬 병렬 처리 메모리들(204)에 기입할 수 있으며, 여기서 그러한 데이터는, CPU(102) 또는 다른 병렬 처리 서브시스템(112)을 포함하는, 그외의 시스템 컴포넌트들에 의해 액세스될 수 있다.
PPU(202)는 로컬 메모리가 제공되지 않는 경우를 포함하여 임의의 양의 로컬 병렬 처리 메모리(204)를 구비할 수 있으며, 로컬 메모리와 시스템 메모리를 임의의 조합으로 이용할 수 있다. 예를 들어, PPU(202)는 통합된 메모리 아키텍처(UMA) 실시예에서의 그래픽 프로세서일 수 있다. 이러한 실시예들에서, 전용 그래픽 (병렬 처리) 메모리가 거의 또는 전혀 제공되지 않을 수 있고, PPU(202)는 시스템 메모리를 배타적으로 또는 거의 배타적으로 사용할 수 있다. UMA 실시예들에서, PPU(202)는 브리지 칩 또는 프로세서 칩 내로 통합될 수 있거나, 브리지 칩 또는 다른 통신 수단들을 통해 시스템 메모리에 PPU(202)를 접속하는 고속 링크(예를 들어, PCI-E)를 갖는 개별 칩으로서 제공될 수 있다.
전술한 바와 같이, 임의 수의 PPU(202)가 병렬 처리 서브시스템(112)에 포함될 수 있다. 예를 들어, 다수의 PPU(202)가 단일 애드인 카드에 제공될 수 있거나, 또는 다수의 애드인 카드가 통신 경로(113)에 접속될 수 있거나, 또는 하나 이상의 PPU(202)가 브리지 칩 내로 통합될 수 있다. 멀티-PPU 시스템 내의 PPU들(202)은 서로 동일하거나 또는 상이할 수 있다. 예를 들어, 상이한 PPU들(202)은 상이한 수의 처리 코어들, 상이한 양의 로컬 병렬 처리 메모리 등을 가질 수 있다. 다수의 PPU(202)가 존재하는 경우, PPU들은 단일 PPU(202)와 가능한 것보다 높은 처리율로 데이터를 처리하도록 병렬로 동작될 수 있다. 하나 이상의 PPU(202)를 포함하는 시스템들은 데스크톱, 랩톱, 또는 핸드헬드 개인용 컴퓨터, 서버, 워크스테이션, 게임 콘솔, 임베디드 시스템 등을 포함하는, 다양한 구성 및 폼 팩터(form factor)로 구현될 수 있다.
처리 클러스터 어레이 개요
도 3a는 본 발명의 일 실시예에 따른, 도 2의 PPU들(202) 중 하나의 PPU 내의 GPC(208)의 블록도이다. 각각의 GPC(208)는 많은 수의 스레드를 병렬로 실행하도록 구성될 수 있고, 여기서 "스레드"라는 용어는 특정 세트의 입력 데이터에 대해 실행되는 특정 프로그램의 인스턴스(instance)를 가리킨다. 일부 실시예들에서, 복수의 독립적인 명령어 유닛들을 제공하지 않고 많은 다수의 스레드의 병렬 실행을 지원하기 위해 SIMD(single-instruction, multiple-data) 명령어 발행 기술들이 이용된다. 다른 실시예들에서, GPC들(208) 중 각각의 GPC 내의 처리 엔진들의 세트에 명령어들을 발행하도록 구성된 공통 명령어 유닛을 이용하여, 많은 수의 일반적으로 동기화된 스레드의 병렬 실행을 지원하기 위해 SIMT(single-instruction, multiple-thread) 기술들이 이용된다. 모든 처리 엔진들이 통상적으로 동일한 명령어들을 실행하는 SIMD 실행 체제와 달리, SIMT 실행은 상이한 스레드들이 주어진 스레드 프로그램을 통해 분기하는 실행 경로들을 더 용이하게 뒤따를 수 있게 한다. 이 기술분야의 통상의 기술자들은, SIMD 처리 체제가 SIMT 처리 체제의 기능적 서브세트를 표현한다는 것을 이해할 것이다.
그래픽 애플리케이션들에서, GPC(208)는 프리미티브 설정, 래스터화(rasterization), 및 z 컬링(culling)을 포함할 수 있지만 이에 제한되지 않는 스크린 공간 그래픽 처리 기능들을 수행하기 위해 프리미티브 엔진을 구현하도록 구성될 수 있다. 프리미티브 엔진은 작업 분배 유닛(200)으로부터 처리 작업을 수신하고, 처리 작업이 프리미티브 엔진에 의해 수행되는 동작들을 필요로 하지 않을 때, 처리 작업은 프리미티브 엔진을 통해 파이프라인 관리자(305)에 전달된다. GPC(208)의 동작은 유리하게는 처리 작업들을 스트리밍 멀티프로세서들(SPM들)(310)에 분배하는 파이프라인 관리자(305)를 통해 제어된다. 파이프라인 관리자(305)는 또한 SPM들(310)에 의한 처리된 데이터 출력을 위한 목적지들을 특정함으로써 작업 분배 크로스바(330)를 제어하도록 구성될 수 있다.
일 실시예에서, 각각의 GPC(208)는 M개의 SPM들(310)을 포함하며, 여기서, M≥1이고, 각각의 SPM(310)은 하나 이상의 스레드 그룹을 처리하도록 구성된다. 또한, 이 기술분야에 알려져 있는 바와 같이, 각각의 SPM(310)은 유리하게는 파이프라인될 수 있는 동일한 세트의 기능 유닛들(예를 들어, 산술 로직 유닛들 등)을 포함함으로써, 이전 명령어가 완료되기 전에 새로운 명령어가 발행될 수 있게 한다. 기능 유닛들의 임의 조합이 제공될 수 있다. 일 실시예에서, 기능 유닛들은 정수 및 부동 소수점 산술(예를 들어, 덧셈 및 곱셈), 비교 연산들, 부울 연산들(AND, OR, XOR), 비트 시프팅, 및 다양한 대수 함수들(예를 들어, 평면 보간법(planar interpolation), 삼각법(trigonometric), 지수, 및 로그 함수들 등)의 계산을 포함하는 다양한 연산들을 지원하며, 동일한 기능 유닛 하드웨어가 상이한 연산들을 수행하는 데 이용될 수 있다.
특정 GPC(208)에 전송된 일련의 명령어들은 본 명세서에서 이전에 정의한 바와 같이, 스레드를 구성하며, SPM(310) 내의 병렬 처리 엔진들(도시되지 않음)에 걸쳐서 동시에 실행하는 스레드들의 특정 수의 모음(collection)을 본 명세서에서는 "스레드 그룹"이라고 부른다. 본 명세서에서 이용되는 바와 같이, "스레드 그룹"은 상이한 입력 데이터에 대해 동일한 프로그램을 동시에 실행하는 스레드들의 그룹을 가리키며, 그 그룹의 각각의 스레드는 SPM(310) 내의 상이한 처리 엔진에 할당된다. 스레드 그룹은 SPM(310) 내의 처리 엔진들의 수보다 적은 스레드들을 포함할 수 있으며, 이 경우, 일부 처리 엔진들은 그 스레드 그룹이 처리되고 있는 사이클들 동안 유휴 상태일 것이다. 스레드 그룹은 또한 SPM(310) 내의 처리 엔진들의 수보다 많은 스레드들을 포함할 수 있으며, 이 경우, 다수의 클록 사이클들에 걸쳐 처리가 일어날 것이다. 각각의 SPM(310)은 최대 G개의 스레드 그룹들을 동시에 지원할 수 있기 때문에, 최대 G×M개의 스레드 그룹들이 임의의 주어진 시간에 GPC(208)에서 실행될 수 있다는 것은 자명하다.
배타적인 로컬 어드레스 공간이 각각의 스레드에 대해 이용가능하며, 공유된 퍼-CTA 어드레스 공간이 CTA 내의 스레드들 사이에 데이터를 전달하는 데 이용된다. 퍼-스레드 로컬 어드레스 공간 및 퍼-CTA 어드레스 공간에 저장된 데이터가 L1 캐시(320)에 저장되고, L1 캐시(320)에 데이터를 유지하는 것을 지원하기 위해 축출 정책(eviction policy)이 이용될 수 있다. 각각의 SPM(310)은 로드 및 저장 동작들을 수행하는 데 이용되는 대응하는 L1 캐시(320)의 공간을 이용한다. 각각의 SPM(310)은 또한 스레드들 사이에 데이터를 전달하는 데 이용될 수 있고 모든 GPC들(208) 사이에 공유되는 파티션 유닛들(215) 내의 L2 캐시들과의 액세스를 갖는다. 마지막으로, SPM들(310)은 또한 예를 들어 병렬 처리 메모리(204) 및/또는 시스템 메모리(104)를 포함할 수 있는 오프-칩 "전역" 메모리와의 액세스를 갖는다. L2 캐시는 전역 메모리에 기입되고 전역 메모리로부터 판독되는 데이터를 저장하는 데 이용될 수 있다. PPU(202)의 외부에 있는 임의의 메모리가 전역 메모리로서 이용될 수 있다는 것을 이해해야 한다.
그래픽 애플리케이션들에서, GPC(208)는 각각의 SPM(310)이 텍스처 맵핑 동작들, 예를 들어, 텍스처 샘플 위치들의 결정, 텍스처 데이터의 판독, 및 텍스처 데이터의 필터링을 수행하기 위해 텍스처 유닛(315)에 연결되도록 구성될 수 있다. 텍스처 데이터는 필요에 따라 메모리 인터페이스(214)를 통해 판독되고, L2 캐시, 병렬 처리 메모리(204), 또는 시스템 메모리(104)로부터 인출된다. 텍스처 유닛(315)은 내부 캐시에 텍스처 데이터를 저장하도록 구성될 수 있다. 일부 실시예들에서, 텍스처 유닛(315)은 L1 캐시(320)에 연결되고, 텍스처 데이터는 L1 캐시(320)에 저장된다. 각각의 SPM(310)은 추가 처리를 위해 다른 GPC(208)에 처리된 작업을 제공하기 위해 또는 처리된 작업을 크로스바 유닛(210)을 통해 L2 캐시, 병렬 처리 메모리(204), 또는 시스템 메모리(104)에 저장하기 위해 처리된 작업들을 작업 분배 크로스바(330)에 출력한다. preROP(pre-raster operations)(325)는 SPM(310)으로부터 데이터를 수신하고, 파티션 유닛들(215) 내의 ROP 유닛들에 데이터를 보내고, 색 블렌딩을 위한 최적화를 수행하고, 픽셀 컬러 데이터를 조직하고, 어드레스 변환을 수행하도록 구성된다.
본 명세서에 설명된 코어 아키텍처는 예시이며, 변형 및 수정이 가능하다는 것을 알 것이다. 임의 수의 처리 엔진들, 예를 들어, 프리미티브 엔진들(304), SPM들(310), 텍스처 유닛들(315), 또는 preROP들(325)이 GPC(208) 내에 포함될 수 있다. 또한, 하나의 GPC(208)만이 도시되어 있지만, 실행 거동이 GPC(208)가 특정 처리 작업을 수신하는 것에 의존하지 않도록 PPU(202)는 유리하게 서로 기능적으로 유사한 임의 수의 GPC(208)를 포함할 수 있다. 또한, 각각의 GPC(208)는 유리하게는 별개의 독특한 처리 엔진들, L1 캐시들(320) 등을 이용하는 다른 GPC들(208)에 독립적으로 동작한다.
도 3b는 본 발명의 일 실시예에 따른, 도 2의 PPU들(202) 중 하나의 PPU 내의 파티션 유닛(215)의 블록도이다. 도시된 바와 같이, 파티션 유닛(215)은 L2 캐시(350), 프레임 버퍼(FB)(355) 및 래스터 연산 유닛(raster operations unit; ROP)(360)을 포함한다. L2 캐시(350)는 크로스바 유닛(210) 및 ROP(360)로부터 수신된 로드 및 저장 동작들을 수행하도록 구성되는 판독/기입 캐시이다. 판독 미스들 및 긴급 회신(writeback) 요청들이 처리를 위해 L2 캐시(350)에 의해 FB(355)에 출력된다. 더티 업데이트들(dirty updates)이 또한 기회주의적인 처리를 위해 FB(355)에 전송된다. FB(355)는 병렬 처리 메모리(204)와 직접 인터페이스함으로써, 판독 및 기입 요청들을 출력하고 병렬 처리 메모리(204)로부터 판독된 데이터를 수신한다.
그래픽 애플리케이션들에서, ROP(360)는 스텐실, z 테스트, 블렌딩 등과 같은 래스터 동작들을 수행하는 처리 유닛이고, 그래픽 메모리 내의 저장을 위해 처리된 그래픽 데이터로서 픽셀 데이터를 출력한다. 본 발명의 일부 실시예들에서, ROP(360)는 파티션 유닛(215) 대신에 각각의 GPC(208) 내에 포함되며, 픽셀 판독 및 기입 요청들이 픽셀 프래그먼트(fragment) 데이터 대신에 크로스바 유닛(210)을 거쳐서 전송된다.
처리된 그래픽 데이터는 디스플레이 디바이스(110) 상에 표시될 수 있거나, CPU(102)에 의해 또는 병렬 처리 서브시스템(112) 내의 처리 엔티티들 중 하나의 엔티티에 의해 추가 처리를 위해 라우팅될 수 있다. 각각의 파티션 유닛(215)은 래스터 동작들의 처리를 분배하기 위해서 ROP(360)를 포함한다. 일부 실시예들에서, ROP(360)는 메모리에 기입되는 z 또는 컬러 데이터를 압축하고 메모리로부터 판독되는 z 또는 컬러 데이터를 압축해제하도록 구성될 수 있다.
이 기술분야의 통상의 기술자들은, 도 1, 도 2, 도 3a 및 도 3b에서 설명된 아키텍처는 결코 본 발명의 범위를 한정하는 것이 아니며, 본 명세서에 교시된 기술들은 본 발명의 범위를 벗어나지 않고 하나 이상의 CPU, 하나 이상의 멀티 코어 CPU, 하나 이상의 PPU(202), 하나 이상의 GPC(208), 하나 이상의 그래픽 또는 특수 목적 처리 유닛들 등(이것들로 한정하지 않음)을 포함하는 임의의 적절하게 구성된 처리 유닛에 구현될 수 있다는 것을 이해할 것이다.
데이터 클래스 기반 축출 정책들
도 4는 본 발명의 일 실시예에 따른, 도 3b의 파티션 유닛(215)의 상세한 블록도이다. 도시된 바와 같이 파티션 유닛(215)은 L2 캐시(350), FB(355) 및 ROP(360)를 포함한다. L2 캐시(350)는 L2 캐시 슬라이스(402)를 포함한다. 도 3b와 함께 설명되는 바와 같이, L2 캐시(350)는 판독 및 기입 명령들의 보다 효율적인 처리를 위해 둘 이상의 슬라이스들로 분리될 수 있다. L2 캐시 슬라이스(402) 는 L2 캐시(350)의 이러한 하나의 슬라이스이다. L2 캐시 슬라이스(402)는 크로스바 명령 버퍼(404), ROP 명령 버퍼(406), 아비터(arbiter)(408), 태그 룩업 유닛(410), 태그 스토어(412), 데이터 캐시(414), 판독 데이터 버퍼(416) 및 기입 데이터 버퍼(418)를 포함한다.
동작 시에, L2 캐시 슬라이스(402)는 GPC들(208) 및 ROP(360) 등의 병렬 처리 서브시스템(112) 내의 다양한 클라이언트들로부터 판독 및 기입 명령들을 수신한다. GPC들(208)을 통해 수신된 판독 및 기입 명령들은 크로스바 유닛(210)을 통해 송신된다. 기입 명령의 경우, 기입 명령과 관련된 데이터가 또한 L2 캐시 슬라이스(402)에 송신된다.
L2 캐시 슬라이스(402)에 의해 수신된 각각의 판독 또는 기입 명령은 데이터 캐시(414) 내의 캐시 라인들의 세트와 관련된 메모리 어드레스를 포함하고, 판독 또는 기입 명령과 관련된 데이터는 저장될 수 있다. 일 실시예에서, 데이터 캐시(414)는 물리적으로 인덱스되고 태그된 64KB 세트의 연합 데이터 캐시(physically-indexed and tagged 64 KB set associative data cache)이다. 데이터 캐시(414)는 4개의 세그먼트들로 분할되는데, 각각의 세그먼트는 32개의 로우(row)를 갖고 각각의 로우는 32B의 16 캐시 라인들을 갖는다. 캐시 라인은, 판독 및 기입 명령들과 관련된 데이터가 저장되는 데이터 캐시(414) 내의 물리적 장소이다. 임의의 주어진 클럭 사이클에서, 데이터 캐시(414)의 캐시 라인은 비어 있을 수 있거나, 상주 데이터를 포함할 수 있거나, 또는 처리 중인 명령에 대하여 예약되어 있을 수 있다. 본 발명의 일 실시예에서, 명령과 관련된 데이터의 크기 로 인하여, 명령과 관련된 데이터를 저장하는데 다수의 캐시 라인들이 예약될 필요가 있을 수 있다. 본 명세서에서 설명된 기법들은 다수의 캐시 라인들에 저장되어야 할 데이터에 용이하게 확장될 수 있다.
L2 캐시 슬라이스(402)에 의해 수신된 판독 또는 기입 명령은 또한 수신된 명령과 관련된 데이터의 데이터 클래스를 포함한다. 명령과 관련된 데이터의 데이터 클래스는 특정 명령을 송신하는 클라이언트에 의해 결정되고, 본 명세서에서 매우 상세하게 설명되는 바와 같이, 병렬 처리 서브시스템(112) 내의 그 데이터의 재이용 가능성을 반영한다.
크로스바 명령 버퍼(404)는 크로스바 유닛(210)에 연결되고, 크로스바 유닛(210)을 통해 상이한 GPC들(208)로부터 판독 및 기입 명령들을 수신하도록 구성된다. ROP 명령 버퍼(406)는 ROP(360)에 연결되고 ROP(360)로부터 판독 및 기입 명령들을 수신하도록 구성된다. 크로스바 명령 버퍼(404) 및 ROP 명령 버퍼(406)는 FIFO(first-in-first-out) 버퍼들이고, 즉, 명령 버퍼들에 의해 수신된 명령들은 그 명령들이 크로스바 유닛(210) 또는 ROP(360)로부터 수신된 순서대로 출력된다. 크로스바 명령 버퍼(404) 및 ROP 명령 버퍼(406)는 또한 아비터(408)에 연결된다. 아비터(408)는 크로스바 명령 버퍼(404) 또는 ROP 명령 버퍼(406)로부터 소정의 명령을 선택하기 위하여 표준 중재(arbitration) 기법들을 사용하고, 선택된 명령을 처리를 위해 태그 룩업 유닛(410)에 송신하도록 구성된다.
태그 룩업 유닛(410)은 아비터(408)로부터 수신된 명령과 관련된 데이터에 대하여 데이터 캐시(414)에 캐시 라인 이용가능성이 있는지의 여부를 결정하도록 구성된다. 태그 룩업 유닛(410)은 또한 가능한 경우, 데이터 캐시(414)에 상주하는 데이터가 축출되도록 함으로써 새롭게 수신된 판독 또는 기입 명령과 관련된 데이터에 대하여 캐시 라인들을 이용가능하게 하도록 구성된다. 일단 데이터 캐시(414) 내의 하나 이상의 캐시 라인들이 이러한 데이터에 대하여 이용가능하면, 태그 룩업 유닛(410)은 상기 명령과 관련된 데이터에 대하여 데이터 캐시(414)의 식별된 캐시 라인을 예약하도록 구성된다.
데이터 캐시(414)의 각각의 캐시 라인은 태그 스토어(412) 내에 대응하는 엔트리를 갖고, 태그 스토어 내의 각각의 엔트리는 상태부, 및 태그부를 포함한다. 태그 스토어 내의 엔트리의 상태부는 그 엔트리에 대응하는 캐시 라인의 특정 상태를 나타낸다. 엔트리의 상태부는 유효(valid), 더티 비트(dirty bit) 및 핀드 비트(pinned bit)를 포함한다. 유효 비트는 설정된 경우, 그 특정 엔트리에 대응하는 캐시 라인이 유효 데이터를 저장하고 있다는 것을 나타낸다. 더티 비트는 설정된 경우, 그 특정 엔트리에 대응하는 캐시 라인이 더티 데이터를 저장하고 있다는 것을 나타낸다. 핀드 비트는 설정된 경우, 그 특정 엔트리에 대응하는 캐시 라인이 핀드 데이터, 즉, L2 캐시(350)에 의해 현재 사용되는 데이터를 저장하고 있다는 것을 나타낸다. 엔트리의 태그부는 그 특정 엔트리와 관련된 캐시 라인 내에 저장된 데이터의 데이터 클래스를 포함한다. 본 명세서에서 전에 나타낸 바와 같이, L2 캐시(350)의 캐시 시맨틱스(simentics)는 3개의 데이터 클래스: 축출_우선(evict_first), 축출_표준(evict_normal) 및 축출_최종(evict_last)을 포함하도록 확장된다. 축출_우선 데이터 클래스에 속하는 데이터 캐시(414)의 캐시 라인 내에 저장된 데이터는 통상 L2 캐시(350)를 사용하는 임의의 클라이언트에 의한 재이용 가능성이 없거나 낮다. 재이용 가능성이 낮기 때문에, 이 데이터는 후속하는 캐시 미스(miss)들을 일으킬 높은 위험성 없이, 다른 데이터를 위한 공간을 마련하기 위해 데이터 캐시(414)로부터 빠르게 축출될 수 있다. 축출_표준 데이터 클래스에 속하는 데이터 캐시(414)의 캐시 라인 내에 저장된 데이터는 통상 L2 캐시(350)를 사용하는 클라이언트들에 의해 어느 정도의 재이용 가능성이 있다. 재이용 가능성으로 인해, 이 데이터는 후속하는 캐시 미스들을 아주 많이 유발하지 않으면서, 축출_우선 데이터 클래스에 속하는 데이터보다 낮은 우선도로 축출될 수 있다. 축출_최종 데이터 클래스에 속하는 데이터 캐시(414)의 캐시 라인 내에 저장된 데이터는 통상 L2 캐시(350)를 사용하는 클라이언트들에 의한 재이용 가능성이 높다. 재이용 가능성이 높기 때문에, 이 데이터는 다른 데이터를 위한 공간을 마련하기 위해 축출되어서는 안 되는데, 이것이 후속하는 캐시 미스를 일으킬 높은 위험성을 가질 수 있기 때문이다. 다른 실시예들에서는, L2 캐시(350) 시맨틱스가 병렬 처리 서브시스템(112)의 요구사항들에 기초하여 다른 데이터 클래스들을 포함하도록 확장될 수 있다.
캐시 라인에 저장된 데이터는 또한 "클린(clean)" 또는 "더티(dirty)", 및 "핀드(pinned)" 및 "언핀드(unpinned)"로 분류된다. 저장된 데이터는 그 데이터가 병렬 처리 메모리(204) 내의 대응하는 데이터와 일관성이 있다면(coherent) 클린이라고 간주된다. 저장된 데이터는 그 데이터가 병렬 처리 메모리(204) 내의 대응하는 데이터와 일관성이 없다면 더티라고 간주된다. 잘 알려진 바와 같이, 더티 데 이터는 축출되기 전에 클린으로 되어야 한다. 언핀드 데이터는 현재 사용되고 있지 않은 데이터 캐시(414)의 캐시 라인에 저장된 데이터를 구성한다. 핀드 데이터는 L2에 의해 현재 사용되고 있는 데이터 캐시(414)의 캐시 라인에 저장된 데이터를 구성한다. 핀드 데이터는 사용 중이기 때문에, 이 데이터는 축출되어서는 안 된다. 상주 데이터를 갖는 데이터 캐시(414)의 캐시 라인과 관련된 태그 스토어(412) 내의 엔트리의 유효 비트가 설정된다. 상주 데이터를 갖지 않는 데이터 캐시(414)의 캐시 라인과 관련된 태그 스토어(412) 내의 엔트리의 유효 비트는 클리어(clear)된다.
판독 명령들의 경우, 판독 데이터 버퍼(416)는 데이터 캐시(414)로부터 수신된 처리된 판독 명령과 관련된 데이터를, 그 데이터가 크로스바 유닛(210)을 통해 GPC들(208)에, 또는 경우에 따라서 ROP(360)에 다시 송신될 때까지 저장하도록 구성된다. 기입 명령들의 경우, 기입 데이터 버퍼(418)는 크로스바 유닛(210)을 통해 GPC들(208)로부터, 또는 경우에 따라서 ROP(360)로부터 수신된 기입 명령과 관련된 데이터를, 그 데이터가 데이터 캐시(414)의 대응하는 예약된 캐시 라인에 송신될 때까지 저장하도록 구성된다.
본 명세서에서 이전에 나타낸 바와 같이, 아비터(408)로부터 명령을 수신하면, 태그 룩업 유닛(410)은 수신된 명령과 관련된 데이터가 아마도(potentially) 저장될 수 있는 데이터 캐시(414) 내의 캐시 라인들의 세트를 식별하도록 구성된다. 이러한 캐시 라인들의 세트(본 명세서에서 "식별된 캐시 라인들"로 지칭됨)는 표준의 세트-연합 캐싱 기법들을 이용하는 판독 또는 기입 명령에 포함된 메모리 어드레스에 기초하여 결정된다(메모리 어드레스는 병렬 처리 메모리(204) 내의 실제 위치를 나타내고, 병렬 처리 메모리(204)로부터 데이터가 판독되거나, 이것에 데이터가 최종적으로 기입됨). 판독 명령의 경우, 태그 룩업 유닛(410)은 그 명령과 관련된 데이터가 식별된 캐시 라인들 중 하나의 라인 내에 현재 상주하는지의 여부를 다음에 결정한다. 만일 그렇다면, 캐시 히트가 있다는 것을 의미하고, 태그 룩업 유닛(410)은 요청된 데이터가 데이터 캐시(414)로부터 판독 데이터 버퍼(416)로 송신되도록 하고, 여기에서 데이터는 그 데이터가 요청하는 클라이언트에 반환될 때까지 저장된다. 기입 명령의 경우, 태그 룩업 유닛(410)은 먼저 그 명령과 관련된 데이터가 식별된 캐시 라인들 중 하나의 라인 내에 현재 상주하는 데이터 위에 기입될 수 있는지의 여부를 결정한다. 만일 그렇다면, 다시 캐시 히트가 있다는 것을 의미하고, 태그 룩업 유닛(410)은 기입 데이터 버퍼(418)에 저장된 명령과 관련된 데이터가 데이터 캐시(414)의 관련된 위치에 기입되도록 한다.
캐시 미스의 경우, 명령과 관련된 데이터가 식별된 캐시 라인들 중 하나에 상주하지 않거나(판독 명령의 경우) 또는 그것에 기입될 수 없다는 것을 의미하고(기입 명령의 경우), 태그 룩업 유닛(410)은 식별된 캐시 라인들 중 하나의 라인이 비어 있는지의 여부를 결정한다. 식별된 개시 라인들 중 하나가 비어 있으면, 태그 룩업 유닛(410)은 판독 또는 기입 명령과 관련된 데이터를 위해 비어 있는 캐시 라인을 예약한다. 식별된 캐시 라인들 중 비어 있는 라인이 없으면, 태그 룩업 유닛(410)은 식별된 캐시 라인들에 상주하는 데이터의 데이터 클래스에 기초하여 일련의 캐시 축출 정책들을 구현한다.
태그 룩업 유닛(410)은 먼저 식별된 캐시 라인들의 각각과 관련된 태그 스토어(412) 내의 엔트리들을 검사하여 캐시 라인들 중 임의의 라인이 클린, 언핀드 및 축출_우선인 상주 데이터를 갖는지의 여부를 결정한다. 클린, 언핀드 및 축출_우선인 상주 데이터를 갖는 임의의 캐시 라인과 관련된 태그 스토어(412) 내의 엔트리의 상태부는 설정 유효 비트, 클리어 더티 비트 및 클리어 핀드 비트를 가져야 한다. 이러한 엔트리의 태그부는 관련된 캐시 라인에 저장된 데이터가 축출_우선 데이터 클래스에 속한다는 것을 나타내야 한다. 임의의 그러한 캐시 라인들이 존재하면, 태그 룩업 유닛(410)은 최근에 최소로 사용된 클린, 언핀드 및 축출_우선 데이터가 데이터 캐시(414)로부터 축출되도록 한다. 그 데이터를 축출한 후, 태그 룩업 유닛(410)은 명령과 관련된 데이터를 위해 결과적으로 비게 된 캐시 라인을 예약해 둔다.
식별된 캐시 라인들에 상주하는 데이터의 어느 것도 클린, 언핀드 및 축출_우선(clean, unpinned and evict_first)이 아니라면, 태그 룩업 유닛(410)은 식별된 캐시 라인들 각각과 관련된 태그 스토어(412)에 있는 엔트리들을 검사하여 캐시 라인들 중 어느 것이 클린, 언핀드 및 축출_표준(clean, unpinned and evict_normal)인 상주 데이터(유효 비트로 설정됨)를 갖는지를 판정한다. 클린, 언핀드 및 축출_표준인 상주 데이터를 갖는 임의의 캐시 라인과 관련된 태그 스토어(412)에 있는 엔트리의 상태부는 설정 유효 비트, 클리어 더티 비트 및 클리어 핀드 비트를 가져야 한다. 임의의 그러한 엔트리의 태그 부분은 관련 캐시 라인에 저장된 데이터가 축출_표준 데이터 클래스에 속한 것임을 나타내어야 한다. 그러 한 캐시 라인들이 존재한다면, 태그 룩업 유닛(410)은 최근에 최소로 사용된 클린, 언핀드 및 축출_표준 데이터가 데이터 캐시(414)로부터 축출되게 한다. 그 데이터를 축출한 후, 태그 룩업 유닛(410)은 명령과 관련된 데이터를 위해 결과적으로 비게 된 캐시 라인을 예약해 둔다.
일 실시예에서, 식별된 캐시 라인들에 상주하는 데이터의 어느 것도 클린, 언핀드 및 축출_우선 데이터 또는 클린, 언핀드 및 축출_표준 데이터가 아니라면, 식별된 캐시 라인들 중 하나에 존재하는 데이터가 데이터 캐시(414)로부터 축출될 수 있을 때까지 명령이 스톨된다.
다른 실시예에서, 식별된 캐시 라인들에 존재하는 데이터의 어느 것도 클린, 언핀드 및 축출_우선 데이터 또는 클린, 언핀드 및 축출_표준 데이터가 아니라면, 태그 룩업 유닛(410)은 명령과 관련된 데이터가 축출_최종 데이터 클래스에 속하는지의 여부를 결정한다. 명령과 관련된 데이터가 축출_최종 데이터 클래스에 속하지 않는다면, 식별된 캐시 라인들 중 하나에 상주하는 데이터가 데이터 캐시(414)로부터 축출될 수 있을 때까지 명령이 스톨된다. 그러나, 명령과 관련된 데이터가 축출_최종 데이터 클래스에 속한다면, 태그 룩업 유닛(410)은 식별된 캐시 라인들 각각과 관련된 태그 스토어(412)에 있는 엔트리들을 검사하여 캐시 라인들 중 하나가 클린, 언핀드 및 축출_최종인 상주 데이터를 갖는지의 여부를 결정한다. 클린, 언핀드 및 축출_최종인 상주 데이터를 갖는 캐시 라인과 관련된 태그 스토어(412)에 있는 엔트리의 상태부는 설정 유효 비트, 클리어 더티 비트 및 클리어 핀드 비트를 가져야 한다. 그러한 엔트리의 태그부는 관련 캐시 라인에 저장된 데이터가 축출_최종 데이터 클래스에 속한 것임을 나타내어야 한다. 일 실시예에서, 임의의 그러한 캐시 라인들이 존재한다면, 태그 룩업 유닛(410)은 최근에 최소로 사용된 클린, 언핀드 및 축출_최종 데이터가 데이터 캐시(414)로부터 축출되게 한다. 그 데이터를 축출한 후, 태그 룩업 유닛(410)은 명령과 관련된 데이터를 위해 결과적으로 비게 된 캐시 라인을 예약해 둔다.
다른 실시예에서, 축출_최종 데이터 클래스에 속하는 데이터가 데이터 캐시(414)로부터 축출될 수 없다면, 태그 룩업 유닛(410)은 최근에 최소로 사용된 클린, 언핀드 및 축출_최종 데이터를 클린, 언핀드 및 축출_표준 데이터로 재분류한다. 관련 캐시 라인에 상주하는 데이터의 데이터 클래스를 변경함으로써, 태그 룩업 유닛(410)은 전술한 캐시 축출 정책에 기초하여 그 상주 데이터를 축출할 수 있다. 태그 룩업 유닛(410)은 최근에 최소로 사용된 클린, 언핀드 및 축출_표준 데이터를 데이터 캐시(414)로부터 축출한다. 그 축출_표준 데이터를 축출한 후, 전술한 바와 같이, 태그 룩업 유닛(410)은 명령과 관련된 데이터를 위해 빈 캐시 라인을 예약해 둔다.
명령과 관련된 데이터를 위해 캐시 라인을 예약하기 위해서, 태그 룩업 유닛(410)은 예약된 캐시 라인과 관련된 엔트리 내에 핀드 비트를 설정한다. 그후 태그 룩업 유닛(410)은 명령과 관련된 데이터의 데이터 클래스를 반영하기 위해서 예약된 캐시 라인과 관련된 엔트리 내의 태그부와, 예약된 캐시 라인의 메모리 어드레스 태그를 업데이트한다. 판독 명령을 위한 적절한 캐시 라인이 예약되면, 태그 룩업 유닛(410)은 판독 명령과 관련된 데이터에 대한 데이터 요청을 FB(355)에 전송한다. FB(355)는 미래의 클럭 사이클에서 예약된 캐시 라인에 판독 명령과 관련된 데이터를 전송한다. 기입 명령의 경우, 기입 명령과 관련된 데이터는 기입 데이터 버퍼(418)로부터 전송되어 예약된 캐시 라인에 저장된다. 그후 태그 룩업 유닛(410)은 데이터의 데이터 클래스에 기초하여 기입 명령과 관련된 데이터도 병렬 처리 메모리(204)에 저장되어야 하는지의 여부를 결정한다. 데이터가 병렬 처리 메모리(204)에 저장되어야 한다면, 태그 룩업 유닛(410)은 더티 데이터 통지를 FB(355)에 전송한다. 태그 룩업 유닛(410)은 또한 예약된 캐시 라인과 관련된 엔트리 내에 더티 비트를 설정한다. 그 응답으로, FB(355)는 미래의 클럭 사이클에서 예약된 캐시 라인으로부터 병렬 처리 메모리(204)에 데이터를 전송한다. 데이터가 수신되면, 핀드 비트가 클리어된다.
다른 실시예에서, 태그 스토어(422)에 있는 엔트리의 상태부는 그 엔트리에 대응하는 캐시 라인에 있는 데이터가 클린 및 언핀드인 경우를 나타내는 단일 비트 등을 포함하나 이에 제한되지 않는 어떤 기술적으로 실현가능한 방식으로 구현될 수 있다. 그러므로, 당업자라면 본원에 포함된 어느 것도 본 발명의 범위를 제한하고자 하는 것이 아니라는 것을 이해할 것이다.
일부 실시예에서, 병렬 처리 서브시스템(112) 내의 클라이언트들에 의해서 L2 캐시 슬라이스(402)에 판독 명령들이 전송될 수 있는데, 전술한 바와 같이 FB(355)에 연결된 병렬 처리 메모리(204)로부터 검색되는 것과는 달리, 이들 명령과 관련된 데이터는 시스템 메모리(104)나 컴퓨터 시스템(100) 내의 다른 GPU(또는 PPU)와 관련된 메모리로부터 검색되어 데이터 캐시(414)에 일시적으로 저장된다. 마찬가지로, 일부 실시예에서, GPC들(208) 또는 ROP(360)에 의해서 L2 캐시 슬라이스(402)에 기입 명령들이 전송될 수 있는데, 전술한 바와 같이 FB(355)에 연결된 병렬 처리 메모리(204)에 기입되는 것과는 달리, 이들 명령과 관련된 데이터는 시스템 메모리(104)나 컴퓨터 시스템(100) 내의 다른 GPU(또는 PPU)와 관련된 메모리에 기입되기 전에 데이터 캐시(414)에 일시적으로 저장된다. 그러한 모든 실시예에서, 전술한 바와 같이 판독 또는 기입 명령들과 관련된 데이터가 데이터 캐시(414)에 캐시되고 데이터 캐시(414)로부터 축출되는 방식은 변함없이 유지된다. 따라서, 그러한 모든 실시예는 본 발명의 범위 내에 있다.
도 5a 내지 도 5d는 본 발명의 일 실시예에 따라 도 4의 데이터 캐시(414)의 데이터 입출력의 흐름을 관리하기 위한 방법 단계들의 흐름도를 나타낸다. 도 1 내지 도 4와 관련하여 방법 단계들을 설명하였으나, 당업자라면 어떤 식으로든 방법 단계들을 실행하도록 구성된 시스템은 모두 본 발명의 범위 내에 있다는 것을 알 것이다.
방법(500)은 단계(502)에서 개시하는데, 이 단계에서, L2 캐시 슬라이스(402)는 시스템(100) 내의 클라이언트로부터 판독 또는 기입 명령을 수신한다. 도 4와 관련하여 설명한 바와 같이, L2 캐시 슬라이스(402)에 의해 수신된 각 명령은 데이터 캐시(414) 내에 위치한 캐시 라인 세트와 관련된 메모리 어드레스를 포함하며, 명령과 관련된 데이터가 저장될 수 있다. L2 캐시 슬라이스(402)에 의해 수신된 명령은 또한 명령과 관련된 데이터의 데이터 클래스를 포함한다. 단계(504)에서, 경우에 따라서 크로스바 명령 버퍼(404)나 ROP 명령 버퍼(406)에 명 령이 저장된다.
단계(506)에서, 명령이 기입 명령이라면, 방법(500)은 단계(508)로 진행하는데, 이 단계에서, 그 명령과 관련된 데이터가 L2 캐시 슬라이스(402)에 의해 수신되어 기입 데이터 버퍼(418)에 저장된다. 단계(506)에서, 명령이 판독 명령이라면, 방법(500)은 바로 단계(510)로 진행한다. 단계(510)에서, 단계(502)에서 L2 캐시 슬라이스(402)에 의해 수신된 명령은 표준 중재 기술을 이용하여 아비터(408)에 의해 선택되고 태그 룩업 유닛(410)에 전송되어 처리된다.
단계(512)에서, 태그 룩업 유닛(410)은 데이터 캐시(414) 내의 캐시 라인 세트를 식별하는데, 여기서 선택된 명령과 관련된 데이터는 그 명령에 포함된 메모리 어드레스에 기초하여 세트 연합 캐시 기술을 이용하여 저장될 수 있다. 또한, 이 캐시 라인 세트는 "식별된 캐시 라인들"이라고 한다. 단계(514)에서, 태그 룩업 유닛(410)은 캐시 미스가 있는지의 여부를 결정한다. 명령과 관련된 데이터가 식별된 캐시 라인들 중 하나 내에 현재 상주하지 않는다면 캐시 미스가 있는 것이다. 캐시 미스의 경우, 방법 단계(500)는 단계(516)로 진행한다.
단계(516)에서, 태그 룩업 유닛(410)은 식별된 캐시 라인들 중 하나가 비어 있는지(캐시 라인이 현재 이용가능하다는 것을 의미)의 여부를 결정한다. 식별된 캐시 라인들의 어느 것도 비어 있지 않다(캐시 라인이 현재 더티 또는 핀드라는 것을 의미한다)면, 방법(500)은 단계(518)로 진행한다. 단계(518)에서, 태그 룩업 유닛(410)은 식별된 캐시 라인들에 대응하는 태그 스토어(412)에 있는 태그들을 검사하여, 있다면 이들 캐시 라인들 중 어느 것이 클린, 언핀드 및 축출_우선 데이터 클래스인 상주 데이터를 갖는지를 결정한다. 캐시 라인들의 어느 것도 클린, 언핀드 및 축출_우선 데이터 클래스인 상주 데이터를 갖지 않는다면, 방법(500)은 단계(520)로 진행한다. 단계(520)에서, 태그 룩업 유닛(410)은 식별된 캐시 라인들에 대응하는 태그 스토어에 있는 태그들을 검사하여, 있다면 이들 캐시 라인들 중 어느 것이 클린, 언핀드 및 축출_표준 데이터 클래스인 상주 데이터를 갖는지를 결정한다. 캐시 라인들의 어느 것도 클린, 언핀드 및 축출_표준인 상주 데이터를 갖지 않는다면, 방법(500)은 단계(522)로 진행한다.
단계(522)에서, 태그 룩업 유닛(410)은 명령에 포함된 데이터 클래스를 검사하여, 명령과 관련된 데이터가 축출_최종 데이터 클래스인지의 여부를 결정한다. 명령과 관련된 데이터의 데이터 클래스가 축출_최종 데이터 클래스라면, 방법(500)은 단계(524)로 진행하는데, 이 단계에서, 태그 룩업 유닛(410)은 식별된 캐시 라인들에 대응하는 태그 스토어(412)에 있는 태그들을 검사하여, 있다면 이들 캐시 라인들 중 어느 것이 클린, 언핀드 및 축출_최종 데이터 클래스인 상주 데이터를 갖는지를 결정한다. 식별된 캐시 라인들 중 하나 이상이 클린, 언핀드 및 축출_최종 데이터 클래스인 상주 데이터를 갖는다면, 클린, 언핀드 및 축출_최종 클래스인 최근에 최소로 사용된 상주 데이터를 갖는 캐시 라인을 축출하기 위해 선택한다.
단계(526)에서, 태그 룩업 유닛(410)은 명령과 관련된 데이터를 위해 선택된 캐시 라인을 예약한다. 도 4와 관련하여 설명된 바와 같이, 명령과 관련된 데이터를 위해 캐시 라인을 예약하기 위해, 태그 룩업 유닛(410)은 선택된 캐시 라인과 관련된 엔트리 내에 유효 비트 부분을 설정한다. 그후 태그 룩업 유닛은 선택된 캐시 라인과 관련된 엔트리 내의 태그 부분을 업데이트하여 명령과 관련된 데이터의 데이터 클래스를 반영한다.
단계(528)에서, 태그 룩업 유닛(410)은 명령이 기입 명령인지의 여부를 결정한다. 명령이 기입 명령이면, 방법(500)은 단계(530)로 진행하여, 여기서 기입 명령과 관련된 데이터가 기입 데이터 버퍼(418)로부터 예약된 캐시 라인으로 전송된다. 단계(532)에서, 태그 룩업 유닛(410)은 명령과 관련된 데이터의 데이터 클래스를 분석하여 데이터가 저장을 위한 외부 메모리로 전송되어야 하는지의 여부를 결정한다. 일 실시예에서, 축출_최종 데이터 클래스의 데이터는 큐잉된 데이터이고 저장을 위한 외부 메모리에 전송되어서는 안되는 반면, 축출_우선 및 축출_표준 데이터 클래스의 데이터는 저장을 위한 외부 메모리에 전송되어야 한다. 데이터가 저장을 위한 외부 메모리에 전송되어야 하면, 단계(534)에서, 태그 룩업 유닛(410)은 더티 데이터 통지를 프레임 버퍼 로직(355)에 전송한다. 프레임 버퍼 로직(355)는 효율적인 클록 사이클에서 다시 더티 데이터를 외부 메모리에 전송한다. 단계(532)에서, 태그 룩업 유닛(410)은 데이터가 저장을 위한 외부 메모리에 전송되어서는 안된다고 결정한 후 방법(500)은 종료한다.
이제 단계(530)로 돌아가서, 명령이 판독 명령이면, 방법(500)은 단계(536)으로 진행하고, 여기서 태그 룩업 유닛(410)은 데이터 요구 통지를 프레임 버퍼 로직(355)으로 전송한다. 프레임 버퍼 로직(355)은 효율적인 클록 사이클에서 요구된 데이터를 단계(526)에서 예약된 캐시 라인에 다시 전송한다. 그후 방법(500)은 종료한다.
이제 단계(524)로 돌아가서, 캐시 라인들 중 어느 것도 클린, 언핀드 및 축출_최종 데이터 클래스의 상주 데이터를 갖지 않는다면, 명령은 단계(525)에서 스톨되고, 방법(500)은 앞서 본원에 기재된 단계(516)로 돌아간다. 마찬가지로, 단계(522)로 돌아가서, 명령과 관련된 데이터의 데이터 클래스가 축출_최종이 아니면, 명령은 단계(525)에서 스톨되고, 방법(500)은 이전에 본원에 설명된 단계(516)로 돌아간다.
이제 단계(520)로 다시 돌아가서, 하나 이상의 식별된 캐시 라인들이 클린, 언핀드 및 축출_표준 데이터 클래스의 상주 데이터를 가지면, 클린, 언핀드 및 축출_표준 데이터 클래스의 최근에 최소로 사용된 상주 데이터를 갖는 캐시 라인이 축출을 위해 선택된다. 방법(500)은 그 후 이전에 본원에 설명된 단계(526)로 바로 진행한다. 마찬가지로, 단계(518)로 다시 돌아가서, 하나 이상의 식별된 캐시 라인들이 클린, 언핀드 및 축출_우선 데이터 클래스의 상주 데이터를 가지면, 클린, 언핀드 및 축출_우선 데이터 클래스의 최근에 최소로 사용된 상주 데이터를 갖는 캐시 라인이 축출을 위해 선택된다. 방법(500)은 그 후 이전에 본원에 설명된 단계(526)로 바로 진행한다.
이제 단계(516)를 다시 참조하면, 데이터 캐시(414) 내의 캐시 라인이 이용가능하면 방법(500)은 이전에 본원에 기재된 단계(528)로 바로 진행한다. 마지막으로, 단계(514)를 다시 참조하여, 캐시 히트(캐시 미스와 반대)가 존재하면, 방법(500)은 단계(538)로 바로 진행한다. 단계(538)에서, 태그 룩업 유닛(410)은 명령이 기입 명령인지의 여부를 결정한다. 명령이 기입 명령이면, 방법(500)은 단 계(540)로 진행하여, 여기서 기입 명령과 관련된 데이터가 기입 데이터 버퍼(418)로부터 미리 예약된 캐시 라인에 전송된다. 단계(538)에서, 명령이 판독 명령이면, 단계(542)에서, 태그 룩업 유닛(410)은 미리 예약된 캐시 라인 내에 저장된 데이터가 판독 데이터 버퍼(416)로 전송되게 한다. 단계(544)에서, 판독 데이터 버퍼(416)로부터의 데이터는 단계(502)에서 판독 명령을 전송한 클라이언트로 전송된다.
요약하면, 클라이언트에 의해 L2 캐시 슬라이스로 전송되는 각각의 판독 또는 기입 명령은 메모리 어드레스 및 그 특별한 명령과 관련된 데이터의 데이터 클래스를 포함한다. L2 캐시 슬라이스 내의 태그 룩업 유닛은 그러한 명령에 포함된 메모리 어드레스를 분석하여 명령과 관련된 데이터가 저장될 수 있는 가능한 캐시 라인들의 세트를 결정한다. 태그 룩업 유닛은 또한 가능한 캐시 라인들의 각각과 관련된, 태그 스토어에 저장된 그들을 분석하여 명령과 관련된 데이터에 대해 예약될 수 있는 적어도 하나의 캐시 라인을 식별한다. 하나의 가능한 캐시 라인들 중 하나가 비어 있으면, 태그 룩업 유닛은 요구되거나 기입된 데이터에 대한 해당 캐시 라인들을 예약한다. 특정 명령에 대해 캐시 라인을 예약할 때, 태그 룩업 유닛은 그 명령과 관련된 데이터의 데이터 클래스를 그 캐시 라인에 대응하는 태그 스토어 내의 엔트리의 태그부에 저장한다.
그러나, 식별된 캐시 라인들의 어느 것도 비어있지 않으면, 태그 룩업 유닛은 식별된 캐시 라인들 중 어느 것이 클린, 언핀드이고 축출_우선 데이터 클래스에 속하는 상주 데이터를 갖는지를 결정한다. 하나 이상의 식별된 라인들의 데이터는 모든 이들 기준을 충족시키면, 태그 룩업 유닛은 최근에 최소로 사용된 클린, 언핀드, 축출_우선 데이터가 축출되게 하고 요구되거나 기입된 데이터에 대한 관련 캐시 라인을 예약한다. 식별된 캐시 라인들 내의 데이터 중 어느 것도 이들 기준 모두를 충족시키지 않으면, 태그 룩업 유닛은 식별된 캐시 라인들 중 어느 것이 클린, 언핀드이고 축출_표준 데이터 클래스에 속하는 상주 데이터를 갖는지를 결정한다. 하나 이상의 식별된 라인들 내의 데이터가 이들 기준 모두를 충족시키면, 태그 룩업 유닛은 가장 덜 최근에 사용된 클린, 언핀드, 축출_표준 데이터가 축출되게 하고 요구되거나 기입된 데이터에 대한 관련 캐시 라인을 예약한다. 식별된 캐시 라인들 내의 데이터 중 어느 것도 이들 기준들 모두를 충족시키지 않으면, 판독 또는 기입 명령은 식별된 라인들 중 하나 내의 데이터가 축출될 수 있을 때까지 스톨된다.
바람직하게는, 데이터 캐시 내에 저장된 데이터와 관련된 데이터 클래스는 태그 룩업 유닛으로 하여금 판독 또는 기입 명령과 관련된 데이터에 대한 장소를 형성할 때 재이용에 대한 최소한의 가능성을 갖는 데이터를 축출하게 한다. 이러한 데이터 축출 메카니즘은 시스템 내의 클라이언트들에 의해 재이용될 수 있는 데이터의 초기 축출의 결과로서의 캐시 미스들의 수를 감소시킨다. 또한, 데이터 캐시는 자주 재이용되지만 그 데이터에 적절한 데이터 클래스를 첨부하여 외부 메모리에 전송될 필요가 없는 데이터를 저장하는데 이용될 수 있다. 이는 그 데이터를 저장하기 위한 추가의 데이터 저장 구조들을 필요 없게 한다.
상기는 본 발명의 실시예들에 관한 것이지만, 본 발명의 기타 및 추가의 실 시예들이 그 기본 범위를 벗어나지 않고 고안될 수 있다. 예를 들어, 본 발명의 양상들은 하드웨어 또는 소프트웨어 또는 하드웨어와 소프트웨어의 조합으로 구현될 수 있다. 본 발명의 일 실시예는 컴퓨터 시스템과 함께 사용하기 위한 프로그램 제품으로서 구현될 수 있다. 프로그램 제품의 프로그램(들)은 실시예들의 기능들(본원에 기재된 방법들 포함)을 정의하고 각종 컴퓨터 판독가능 저장 매체 상에 포함될 수 있다. 예시적인 컴퓨터 판독가능한 저장 매체는: (i) 정보가 영구적으로 저장되는 비기록가능 저장 매체(예를 들어, CD-ROM 드라이브에 의해 판독가능한 CD-ROM 디스크들, 플래시 메모리, ROM 칩들 또는 임의 유형의 고체 상태 불휘발성 반도체 메모리 등의 컴퓨터 내의 판독 전용 메모리); 및 (ii) 변경가능한 정보가 저장되는 기록가능한 저장 매체(예를 들어, 하드 디스크 드라이브 또는 디스켓 드라이브 내의 플로피 디스크들 또는 임의 유형의 고체 상태 랜덤 액세스 반도체 메모리)를 포함하나 이에 제한되지 않는다. 그러한 컴퓨터 판독가능한 저장 매체는, 본 발명의 기능들에 관한 컴퓨터 판독가능한 명령어들을 포함할 때, 본 발명의 실시예들이 된다. 따라서, 본 발명의 범위는 이어지는 청구범위에 의해 결정된다.
도 1은 본 발명의 하나 이상의 양상들을 구현하도록 구성된 컴퓨터 시스템을 도시하는 블록도.
도 2는 본 발명의 일 실시예에 따른, 도 1의 컴퓨터 시스템을 위한 병렬 처리 서브시스템의 블록도.
도 3a는 본 발명의 일 실시예에 따른, 도 2의 PPU들 중 하나 내의 GPC의 블록도.
도 3b는 본 발명의 일 실시예에 따른, 도 2의 PPU들 중 하나 내의 파티션 유닛의 블록도.
도 4는 본 발명의 일 실시예에 따른, 도 3b의 파티션 유닛의 상세 블록도.
도 5a-도 5d는 본 발명의 일 실시예에 따른, 도 4의 데이터 캐시 내부 및 외부로의 데이터 흐름을 관리하는 방법 단계들의 흐름도를 개시하는 도면.
<도면의 주요 부분에 대한 부호의 설명>
200: 작업 분배 유닛
230: 처리 클러스터 어레이
210: 크로스바 유닛
214: 메모리 인터페이스
215: 파티션 유닛
204: PP 메모리

Claims (17)

  1. 삭제
  2. 삭제
  3. 하나 이상의 클라이언트 및 외부 메모리에 연결된 중간 캐시(intermediary cache)로부터 데이터를 축출(evict)하기 위한 시스템으로서,
    하나 이상의 데이터 캐시 유닛;
    상기 하나 이상의 데이터 캐시 유닛과 관련된 복수의 캐시 라인 각각에 대해 상이한 엔트리를 저장하도록 구성된 태그 저장 유닛 - 각각의 엔트리는 상기 엔트리에 대응하는 캐시 라인에 저장된 데이터와 관련된 축출 클래스를 나타내는 태그 및 상기 엔트리에 대응하는 상기 캐시 라인 내의 데이터가 클린(clean) 및 언핀드(unpinned)인지의 여부를 나타내는 상태부를 포함하며, 상기 축출 클래스는 상기 엔트리에 대응하는 캐시 라인에 저장된 데이터가 상기 하나 이상의 클라이언트에 의해 재이용될 가능성을 나타냄 - ; 및
    상기 하나 이상의 데이터 캐시 유닛 및 상기 태그 저장 유닛에 연결되고, 관련된 메모리 어드레스를 포함하는 명령을 클라이언트로부터 수신하고, 상기 메모리 어드레스에 기초하여 상기 명령과 관련된 데이터를 저장하기 위해 상기 하나 이상의 데이터 캐시 유닛 내의 하나 이상의 캐시 라인을 식별하고, 상기 하나 이상의 캐시 라인에 대하여 캐시 미스(cache miss)가 있다고 결정하고, 상기 하나 이상의 캐시 라인 중 적어도 하나의 캐시 라인에 상주하는 데이터가, 상기 적어도 하나의 캐시 라인에 대응하는 태그 저장 유닛 내의 엔트리에 포함된 적어도 하나의 캐시 라인에 저장된 데이터와 관련된 축출 클래스에 기초하여 축출되게 하도록 구성되는 태그 룩업 유닛
    을 포함하고,
    상기 적어도 하나의 캐시 라인에 대응하는 상기 태그 저장 유닛 내의 엔트리에 포함된 태그는, 상기 적어도 하나의 캐시 라인에 저장된 데이터가 축출-우선(evict-first) 클래스에 속한다는 것을 나타내고, 상기 엔트리에 포함된 상태부는 상기 적어도 하나의 캐시 라인에 저장된 데이터가 클린 및 언핀드임을 나타내고, 상기 태그 룩업 유닛은 상기 적어도 하나의 캐시 라인 내의 데이터가 상기 하나 이상의 캐시 라인 내의 최근에 최소로 사용된, 클린, 언핀드 및 축출-우선 데이터라는 것을 결정하고, 그 다음에 상기 적어도 하나의 캐시 라인 내의 데이터가 축출되게 하도록 구성되는 시스템.
  4. 하나 이상의 클라이언트 및 외부 메모리에 연결된 중간 캐시로부터 데이터를 축출하기 위한 시스템으로서,
    하나 이상의 데이터 캐시 유닛;
    상기 하나 이상의 데이터 캐시 유닛과 관련된 복수의 캐시 라인 각각에 대해 상이한 엔트리를 저장하도록 구성된 태그 저장 유닛 - 각각의 엔트리는 상기 엔트리에 대응하는 캐시 라인에 저장된 데이터와 관련된 축출 클래스를 나타내는 태그 및 상기 엔트리에 대응하는 상기 캐시 라인 내의 데이터가 클린 및 언핀드인지의 여부를 나타내는 상태부를 포함하며, 상기 축출 클래스는 상기 엔트리에 대응하는 캐시 라인에 저장된 데이터가 상기 하나 이상의 클라이언트에 의해 재이용될 가능성을 나타냄 - ; 및
    상기 하나 이상의 데이터 캐시 유닛 및 상기 태그 저장 유닛에 연결되고, 관련된 메모리 어드레스를 포함하는 명령을 클라이언트로부터 수신하고, 상기 메모리 어드레스에 기초하여 상기 명령과 관련된 데이터를 저장하기 위해 상기 하나 이상의 데이터 캐시 유닛 내의 하나 이상의 캐시 라인을 식별하고, 상기 하나 이상의 캐시 라인에 대하여 캐시 미스가 있다고 결정하고, 상기 하나 이상의 캐시 라인 중 적어도 하나의 캐시 라인에 상주하는 데이터가, 상기 적어도 하나의 캐시 라인에 대응하는 태그 저장 유닛 내의 엔트리에 포함된 적어도 하나의 캐시 라인에 저장된 데이터와 관련된 축출 클래스에 기초하여 축출되게 하도록 구성되는 태그 룩업 유닛
    을 포함하고,
    상기 적어도 하나의 캐시 라인에 대응하는 상기 태그 저장 유닛 내의 엔트리에 포함된 태그는, 상기 적어도 하나의 캐시 라인에 저장된 데이터가 축출-표준(evict-normal) 클래스에 속한다는 것을 나타내고, 상기 엔트리에 포함된 상태부는 상기 적어도 하나의 캐시 라인에 저장된 데이터가 클린 및 언핀드임을 나타내고, 상기 태그 룩업 유닛은 상기 적어도 하나의 캐시 라인 내의 데이터가 상기 하나 이상의 캐시 라인 내의 최근에 최소로 사용된, 클린, 언핀드 및 축출-표준 데이터라는 것을 결정하고, 그 다음에 상기 적어도 하나의 캐시 라인 내의 데이터가 축출되게 하도록 구성되는 시스템.
  5. 하나 이상의 클라이언트 및 외부 메모리에 연결된 중간 캐시로부터 데이터를 축출하기 위한 시스템으로서,
    하나 이상의 데이터 캐시 유닛;
    상기 하나 이상의 데이터 캐시 유닛과 관련된 복수의 캐시 라인 각각에 대해 상이한 엔트리를 저장하도록 구성된 태그 저장 유닛 - 각각의 엔트리는 상기 엔트리에 대응하는 캐시 라인에 저장된 데이터와 관련된 축출 클래스를 나타내는 태그 및 상기 엔트리에 대응하는 상기 캐시 라인 내의 데이터가 클린 및 언핀드인지의 여부를 나타내는 상태부를 포함하며, 상기 축출 클래스는 상기 엔트리에 대응하는 캐시 라인에 저장된 데이터가 상기 하나 이상의 클라이언트에 의해 재이용될 가능성을 나타냄 - ; 및
    상기 하나 이상의 데이터 캐시 유닛 및 상기 태그 저장 유닛에 연결되고, 관련된 메모리 어드레스를 포함하는 명령을 클라이언트로부터 수신하고, 상기 메모리 어드레스에 기초하여 상기 명령과 관련된 데이터를 저장하기 위해 상기 하나 이상의 데이터 캐시 유닛 내의 하나 이상의 캐시 라인을 식별하고, 상기 하나 이상의 캐시 라인에 대하여 캐시 미스가 있다고 결정하고, 상기 하나 이상의 캐시 라인 중 적어도 하나의 캐시 라인에 상주하는 데이터가, 상기 적어도 하나의 캐시 라인에 대응하는 태그 저장 유닛 내의 엔트리에 포함된 적어도 하나의 캐시 라인에 저장된 데이터와 관련된 축출 클래스에 기초하여 축출되게 하도록 구성되는 태그 룩업 유닛
    을 포함하고,
    상기 태그 룩업 유닛은 상기 명령과 관련된 데이터가 축출-최종 클래스에 속하는 것을 결정하도록 구성되고, 상기 적어도 하나의 캐시 라인에 대응하는 상기 태그 저장 유닛 내의 엔트리에 포함된 태그는 상기 적어도 하나의 캐시 라인에 저장된 데이터가 축출-최종 클래스에 속한다는 것을 나타내며, 상기 엔트리에 포함된 상태부는 상기 적어도 하나의 캐시 라인에 저장된 데이터가 클린 및 언핀드임을 나타내며, 상기 태그 룩업 유닛은 상기 적어도 하나의 캐시 라인 내의 데이터가 상기 하나 이상의 캐시 라인 내의 최근에 최소로 사용된, 클린, 언핀드 및 축출-최종 데이터라는 것을 결정하고, 그 다음에 상기 적어도 하나의 캐시 라인 내의 데이터가 축출되게 하도록 구성되는 시스템.
  6. 하나 이상의 클라이언트 및 외부 메모리에 연결된 중간 캐시로부터 데이터를 축출하기 위한 시스템으로서,
    하나 이상의 데이터 캐시 유닛;
    상기 하나 이상의 데이터 캐시 유닛과 관련된 복수의 캐시 라인 각각에 대해 상이한 엔트리를 저장하도록 구성된 태그 저장 유닛 - 각각의 엔트리는 상기 엔트리에 대응하는 캐시 라인에 저장된 데이터와 관련된 축출 클래스를 나타내는 태그 및 상기 엔트리에 대응하는 상기 캐시 라인 내의 데이터가 클린 및 언핀드인지의 여부를 나타내는 상태부를 포함하며, 상기 축출 클래스는 상기 엔트리에 대응하는 캐시 라인에 저장된 데이터가 상기 하나 이상의 클라이언트에 의해 재이용될 가능성을 나타냄 - ; 및
    상기 하나 이상의 데이터 캐시 유닛 및 상기 태그 저장 유닛에 연결되고, 관련된 메모리 어드레스를 포함하는 명령을 클라이언트로부터 수신하고, 상기 메모리 어드레스에 기초하여 상기 명령과 관련된 데이터를 저장하기 위해 상기 하나 이상의 데이터 캐시 유닛 내의 하나 이상의 캐시 라인을 식별하고, 상기 하나 이상의 캐시 라인에 대하여 캐시 미스가 있다고 결정하고, 상기 하나 이상의 캐시 라인 중 적어도 하나의 캐시 라인에 상주하는 데이터가, 상기 적어도 하나의 캐시 라인에 대응하는 태그 저장 유닛 내의 엔트리에 포함된 적어도 하나의 캐시 라인에 저장된 데이터와 관련된 축출 클래스에 기초하여 축출되게 하도록 구성되는 태그 룩업 유닛
    을 포함하고,
    상기 적어도 하나의 캐시 라인에 저장된 데이터는 축출-최종 클래스에 속하며, 상기 태그 룩업 유닛은 상기 데이터를 축출-표준 클래스에 속하는 것으로서 재분류하도록 구성되며, 상기 적어도 하나의 캐시 라인에 대응하는 상기 태그 저장 유닛 내의 엔트리에 포함된 상태부는 상기 적어도 하나의 캐시 라인에 저장된 데이터가 클린 및 언핀드임을 나타내고, 상기 태그 룩업 유닛은 상기 적어도 하나의 캐시 라인 내의 데이터가 상기 하나 이상의 캐시 라인 내의 최근에 최소로 사용된, 클린, 언핀드 및 축출-표준 데이터라는 것을 결정하고, 그 다음에 상기 적어도 하나의 캐시 라인 내의 데이터가 축출되게 하도록 더 구성되는 시스템.
  7. 제3항 내지 제6항 중 어느 한 항에 있어서,
    상기 태그 룩업 유닛은 상기 적어도 하나의 캐시 라인에 상주하는 데이터에 대해 클린 통지를 프레임 버퍼 로직으로 전송하고, 상기 명령과 관련된 데이터를 위해 상기 적어도 하나의 캐시 라인을 예약하도록 더 구성되는 시스템.
  8. 삭제
  9. 삭제
  10. 삭제
  11. 컴퓨팅 디바이스로서,
    하나 이상의 클라이언트;
    중간 캐시 - 상기 중간 캐시는,
    하나 이상의 데이터 캐시 유닛,
    상기 하나 이상의 데이터 캐시 유닛과 관련된 복수의 캐시 라인 각각에 대해 상이한 엔트리를 저장하도록 구성된 태그 저장 유닛 - 각각의 엔트리는 상기 엔트리에 대응하는 상기 캐시 라인에 저장된 데이터와 관련된 축출 클래스를 나타내는 태그 및 상기 엔트리에 대응하는 상기 캐시 라인 내의 데이터가 클린 및 언핀드인지의 여부를 나타내는 상태부를 포함하며, 상기 축출 클래스는 상기 엔트리에 대응하는 캐시 라인에 저장된 데이터가 상기 하나 이상의 클라이언트에 의해 재이용될 가능성을 나타냄 - , 및
    상기 하나 이상의 데이터 캐시 유닛에 연결된 태그 룩업 유닛을 포함함 -;
    상기 중간 캐시에 연결된 외부 메모리; 및
    상기 하나 이상의 클라이언트를 상기 중간 캐시에 연결하는 크로스바 유닛
    을 포함하며,
    상기 태그 룩업 유닛은,
    관련된 메모리 어드레스를 포함하는 명령을 클라이언트로부터 수신하고,
    상기 메모리 어드레스에 기초하여 상기 명령과 관련된 데이터를 저장하기 위해 상기 하나 이상의 데이터 캐시 유닛 내의 하나 이상의 캐시 라인을 식별하고,
    상기 하나 이상의 캐시 라인에 대하여 캐시 미스가 있다고 결정하고,
    상기 하나 이상의 캐시 라인 중 적어도 하나의 캐시 라인에 상주하는 데이터가, 상기 적어도 하나의 캐시 라인에 대응하는 상기 태그 저장 유닛 내의 엔트리에 포함된 적어도 하나의 캐시 라인에 저장된 데이터와 관련된 축출 클래스에 기초하여 축출되게 하도록 구성되고,
    상기 적어도 하나의 캐시 라인에 대응하는 상기 태그 저장 유닛 내의 엔트리에 포함된 태그는, 상기 적어도 하나의 캐시 라인에 저장된 데이터가 축출-우선 클래스에 속한다는 것을 나타내고, 상기 엔트리에 포함된 상태부는 상기 적어도 하나의 캐시 라인에 저장된 데이터가 클린 및 언핀드임을 나타내고, 상기 태그 룩업 유닛은 상기 적어도 하나의 캐시 라인 내의 데이터가 상기 하나 이상의 캐시 라인 내의 최근에 최소로 사용된, 클린, 언핀드 및 축출-우선 데이터라는 것을 결정하고, 그 다음에 상기 적어도 하나의 캐시 라인 내의 데이터가 축출되게 하도록 구성되는, 컴퓨팅 디바이스.
  12. 컴퓨팅 디바이스로서,
    하나 이상의 클라이언트;
    중간 캐시 - 상기 중간 캐시는,
    하나 이상의 데이터 캐시 유닛,
    상기 하나 이상의 데이터 캐시 유닛과 관련된 복수의 캐시 라인 각각에 대해 상이한 엔트리를 저장하도록 구성된 태그 저장 유닛 - 각각의 엔트리는 상기 엔트리에 대응하는 상기 캐시 라인에 저장된 데이터와 관련된 축출 클래스를 나타내는 태그 및 상기 엔트리에 대응하는 상기 캐시 라인 내의 데이터가 클린 및 언핀드인지의 여부를 나타내는 상태부를 포함하며, 상기 축출 클래스는 상기 엔트리에 대응하는 캐시 라인에 저장된 데이터가 상기 하나 이상의 클라이언트에 의해 재이용될 가능성을 나타냄 - , 및
    상기 하나 이상의 데이터 캐시 유닛에 연결된 태그 룩업 유닛을 포함함 -;
    상기 중간 캐시에 연결된 외부 메모리; 및
    상기 하나 이상의 클라이언트를 상기 중간 캐시에 연결하는 크로스바 유닛
    을 포함하며,
    상기 태그 룩업 유닛은,
    관련된 메모리 어드레스를 포함하는 명령을 클라이언트로부터 수신하고,
    상기 메모리 어드레스에 기초하여 상기 명령과 관련된 데이터를 저장하기 위해 상기 하나 이상의 데이터 캐시 유닛 내의 하나 이상의 캐시 라인을 식별하고,
    상기 하나 이상의 캐시 라인에 대하여 캐시 미스가 있다고 결정하고,
    상기 하나 이상의 캐시 라인 중 적어도 하나의 캐시 라인에 상주하는 데이터가, 상기 적어도 하나의 캐시 라인에 대응하는 상기 태그 저장 유닛 내의 엔트리에 포함된 적어도 하나의 캐시 라인에 저장된 데이터와 관련된 축출 클래스에 기초하여 축출되게 하도록 구성되고,
    상기 적어도 하나의 캐시 라인에 대응하는 상기 태그 저장 유닛 내의 엔트리에 포함된 태그는, 상기 적어도 하나의 캐시 라인에 저장된 데이터가 축출-표준 클래스에 속한다는 것을 나타내고, 상기 엔트리에 포함된 상태부는 상기 적어도 하나의 캐시 라인에 저장된 데이터가 클린 및 언핀드임을 나타내고, 상기 태그 룩업 유닛은 상기 적어도 하나의 캐시 라인 내의 데이터가 상기 하나 이상의 캐시 라인 내의 최근에 최소로 사용된, 클린, 언핀드 및 축출-표준 데이터라는 것을 결정하고, 그 다음에 상기 적어도 하나의 캐시 라인 내의 데이터가 축출되게 하도록 구성되는, 컴퓨팅 디바이스.
  13. 컴퓨팅 디바이스로서,
    하나 이상의 클라이언트;
    중간 캐시 - 상기 중간 캐시는,
    하나 이상의 데이터 캐시 유닛,
    상기 하나 이상의 데이터 캐시 유닛과 관련된 복수의 캐시 라인 각각에 대해 상이한 엔트리를 저장하도록 구성된 태그 저장 유닛 - 각각의 엔트리는 상기 엔트리에 대응하는 상기 캐시 라인에 저장된 데이터와 관련된 축출 클래스를 나타내는 태그 및 상기 엔트리에 대응하는 상기 캐시 라인 내의 데이터가 클린 및 언핀드인지의 여부를 나타내는 상태부를 포함하며, 상기 축출 클래스는 상기 엔트리에 대응하는 캐시 라인에 저장된 데이터가 상기 하나 이상의 클라이언트에 의해 재이용될 가능성을 나타냄 - , 및
    상기 하나 이상의 데이터 캐시 유닛에 연결된 태그 룩업 유닛을 포함함 -;
    상기 중간 캐시에 연결된 외부 메모리; 및
    상기 하나 이상의 클라이언트를 상기 중간 캐시에 연결하는 크로스바 유닛
    을 포함하며,
    상기 태그 룩업 유닛은,
    관련된 메모리 어드레스를 포함하는 명령을 클라이언트로부터 수신하고,
    상기 메모리 어드레스에 기초하여 상기 명령과 관련된 데이터를 저장하기 위해 상기 하나 이상의 데이터 캐시 유닛 내의 하나 이상의 캐시 라인을 식별하고,
    상기 하나 이상의 캐시 라인에 대하여 캐시 미스가 있다고 결정하고,
    상기 하나 이상의 캐시 라인 중 적어도 하나의 캐시 라인에 상주하는 데이터가, 상기 적어도 하나의 캐시 라인에 대응하는 상기 태그 저장 유닛 내의 엔트리에 포함된 적어도 하나의 캐시 라인에 저장된 데이터와 관련된 축출 클래스에 기초하여 축출되게 하도록 구성되고,
    상기 태그 룩업 유닛은 상기 명령과 관련된 데이터가 축출-최종 클래스에 속하는 것을 결정하도록 구성되고, 상기 적어도 하나의 캐시 라인에 대응하는 상기 태그 저장 유닛 내의 엔트리에 포함된 태그는 상기 적어도 하나의 캐시 라인에 저장된 데이터가 축출-최종 클래스에 속한다는 것을 나타내며, 상기 엔트리에 포함된 상태부는 상기 적어도 하나의 캐시 라인에 저장된 데이터가 클린 및 언핀드임을 나타내며, 상기 태그 룩업 유닛은 상기 적어도 하나의 캐시 라인 내의 데이터가 상기 하나 이상의 캐시 라인 내의 최근에 최소로 사용된, 클린, 언핀드 및 축출-최종 데이터라는 것을 결정하고, 그 다음에 상기 적어도 하나의 캐시 라인 내의 데이터가 축출되게 하도록 구성되는, 컴퓨팅 디바이스.
  14. 컴퓨팅 디바이스로서,
    하나 이상의 클라이언트;
    중간 캐시 - 상기 중간 캐시는,
    하나 이상의 데이터 캐시 유닛,
    상기 하나 이상의 데이터 캐시 유닛과 관련된 복수의 캐시 라인 각각에 대해 상이한 엔트리를 저장하도록 구성된 태그 저장 유닛 - 각각의 엔트리는 상기 엔트리에 대응하는 상기 캐시 라인에 저장된 데이터와 관련된 축출 클래스를 나타내는 태그 및 상기 엔트리에 대응하는 상기 캐시 라인 내의 데이터가 클린 및 언핀드인지의 여부를 나타내는 상태부를 포함하며, 상기 축출 클래스는 상기 엔트리에 대응하는 캐시 라인에 저장된 데이터가 상기 하나 이상의 클라이언트에 의해 재이용될 가능성을 나타냄 - , 및
    상기 하나 이상의 데이터 캐시 유닛에 연결된 태그 룩업 유닛을 포함함 -;
    상기 중간 캐시에 연결된 외부 메모리; 및
    상기 하나 이상의 클라이언트를 상기 중간 캐시에 연결하는 크로스바 유닛
    을 포함하며,
    상기 태그 룩업 유닛은,
    관련된 메모리 어드레스를 포함하는 명령을 클라이언트로부터 수신하고,
    상기 메모리 어드레스에 기초하여 상기 명령과 관련된 데이터를 저장하기 위해 상기 하나 이상의 데이터 캐시 유닛 내의 하나 이상의 캐시 라인을 식별하고,
    상기 하나 이상의 캐시 라인에 대하여 캐시 미스가 있다고 결정하고,
    상기 하나 이상의 캐시 라인 중 적어도 하나의 캐시 라인에 상주하는 데이터가, 상기 적어도 하나의 캐시 라인에 대응하는 상기 태그 저장 유닛 내의 엔트리에 포함된 적어도 하나의 캐시 라인에 저장된 데이터와 관련된 축출 클래스에 기초하여 축출되게 하도록 구성되고,
    상기 적어도 하나의 캐시 라인에 저장된 데이터는 축출-최종 클래스에 속하며, 상기 태그 룩업 유닛은 상기 데이터를 축출-표준 클래스에 속하는 것으로서 재분류하도록 구성되며, 상기 적어도 하나의 캐시 라인에 대응하는 상기 태그 저장 유닛 내의 엔트리에 포함된 상태부는 상기 적어도 하나의 캐시 라인에 저장된 데이터가 클린 및 언핀드임을 나타내고, 상기 태그 룩업 유닛은 상기 적어도 하나의 캐시 라인 내의 데이터가 상기 하나 이상의 캐시 라인 내의 최근에 최소로 사용된, 클린, 언핀드 및 축출-표준 데이터라는 것을 결정하고, 그 다음에 상기 적어도 하나의 캐시 라인 내의 데이터가 축출되게 하도록 더 구성되는, 컴퓨팅 디바이스.
  15. 제11항 내지 제14항 중 어느 한 항에 있어서,
    상기 상태부는 유효 플래그, 더티(dirty) 플래그, 및 핀드(pinned) 플래그를 포함하는, 컴퓨팅 디바이스.
  16. 제11항 내지 제14항 중 어느 한 항에 있어서,
    상기 태그 룩업 유닛은 상기 적어도 하나의 캐시 라인에 상주하는 데이터에 대해 클린 통지를 프레임 버퍼 로직으로 전송하고, 상기 명령과 관련된 데이터를 위해 상기 적어도 하나의 캐시 라인을 예약하도록 더 구성되는, 컴퓨팅 디바이스.
  17. 제3항 내지 제6항 중 어느 한 항에 있어서,
    상기 상태부는 유효 플래그, 더티 플래그, 및 핀드 플래그를 포함하는 시스템.
KR1020090112619A 2008-11-21 2009-11-20 멀티-클래스 데이터 캐시 정책들 KR101121487B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/276,154 US8868838B1 (en) 2008-11-21 2008-11-21 Multi-class data cache policies
US12/276,154 2008-11-21

Publications (2)

Publication Number Publication Date
KR20100057516A KR20100057516A (ko) 2010-05-31
KR101121487B1 true KR101121487B1 (ko) 2012-02-28

Family

ID=41565470

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020090112619A KR101121487B1 (ko) 2008-11-21 2009-11-20 멀티-클래스 데이터 캐시 정책들

Country Status (6)

Country Link
US (1) US8868838B1 (ko)
JP (1) JP5229968B2 (ko)
KR (1) KR101121487B1 (ko)
CN (1) CN101739357B (ko)
DE (1) DE102009046847A1 (ko)
GB (1) GB2465474B (ko)

Families Citing this family (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101449256B (zh) 2006-04-12 2013-12-25 索夫特机械公司 对载明并行和依赖运算的指令矩阵进行处理的装置和方法
EP2523101B1 (en) 2006-11-14 2014-06-04 Soft Machines, Inc. Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes
KR101064178B1 (ko) * 2010-08-24 2011-09-14 한국과학기술원 버퍼 캐시 관리 시스템 및 방법
US10228949B2 (en) 2010-09-17 2019-03-12 Intel Corporation Single cycle multi-branch prediction including shadow cache for early far branch prediction
JP5837507B2 (ja) 2010-12-03 2015-12-24 株式会社ディジタルメディアプロフェッショナル 画像処理装置
WO2012135041A2 (en) 2011-03-25 2012-10-04 Soft Machines, Inc. Register file segments for supporting code block execution by using virtual cores instantiated by partitionable engines
TWI520070B (zh) 2011-03-25 2016-02-01 軟體機器公司 使用可分割引擎實體化的虛擬核心以支援程式碼區塊執行的記憶體片段
WO2012135031A2 (en) 2011-03-25 2012-10-04 Soft Machines, Inc. Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
JP2012203881A (ja) * 2011-03-28 2012-10-22 Fujitsu Ltd ストレージ装置及びストレージ制御装置
CN103649931B (zh) 2011-05-20 2016-10-12 索夫特机械公司 用于支持由多个引擎执行指令序列的互连结构
WO2012162188A2 (en) 2011-05-20 2012-11-29 Soft Machines, Inc. Decentralized allocation of resources and interconnect structures to support the execution of instruction sequences by a plurality of engines
WO2013077876A1 (en) 2011-11-22 2013-05-30 Soft Machines, Inc. A microprocessor accelerated code optimizer
KR101703401B1 (ko) 2011-11-22 2017-02-06 소프트 머신즈, 인크. 다중 엔진 마이크로프로세서용 가속 코드 최적화기
US9720829B2 (en) * 2011-12-29 2017-08-01 Intel Corporation Online learning based algorithms to increase retention and reuse of GPU-generated dynamic surfaces in outer-level caches
US8930674B2 (en) 2012-03-07 2015-01-06 Soft Machines, Inc. Systems and methods for accessing a unified translation lookaside buffer
CN103309818B (zh) * 2012-03-09 2015-07-29 腾讯科技(深圳)有限公司 存储数据的方法及装置
US9229873B2 (en) 2012-07-30 2016-01-05 Soft Machines, Inc. Systems and methods for supporting a plurality of load and store accesses of a cache
US9430410B2 (en) 2012-07-30 2016-08-30 Soft Machines, Inc. Systems and methods for supporting a plurality of load accesses of a cache in a single cycle
US9916253B2 (en) 2012-07-30 2018-03-13 Intel Corporation Method and apparatus for supporting a plurality of load accesses of a cache in a single cycle to maintain throughput
US9740612B2 (en) 2012-07-30 2017-08-22 Intel Corporation Systems and methods for maintaining the coherency of a store coalescing cache and a load cache
US9710399B2 (en) 2012-07-30 2017-07-18 Intel Corporation Systems and methods for flushing a cache with modified data
US9311251B2 (en) 2012-08-27 2016-04-12 Apple Inc. System cache with sticky allocation
US20140089600A1 (en) * 2012-09-27 2014-03-27 Apple Inc. System cache with data pending state
US9678882B2 (en) 2012-10-11 2017-06-13 Intel Corporation Systems and methods for non-blocking implementation of cache flush instructions
US9372811B2 (en) * 2012-12-13 2016-06-21 Arm Limited Retention priority based cache replacement policy
CN103092920B (zh) * 2012-12-26 2017-04-12 新浪网技术(中国)有限公司 半结构化数据的存储方法及存储系统
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
EP2972836B1 (en) 2013-03-15 2022-11-09 Intel Corporation A method for emulating a guest centralized flag architecture by using a native distributed flag architecture
WO2014151018A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for executing multithreaded instructions grouped onto blocks
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
CN103336844B (zh) * 2013-07-22 2016-12-28 广西师范大学 大数据rd分割方法
US10152410B2 (en) * 2014-03-28 2018-12-11 Empire Technology Development Llc Magnetoresistive random-access memory cache write management
US9866498B2 (en) * 2014-12-23 2018-01-09 Intel Corporation Technologies for network packet cache management
US10866901B2 (en) 2018-06-02 2020-12-15 International Business Machines Corporation Invalidating CKD data tracks prior to unpinning, wherein upon destaging invalid track image from cache to a track of data on storage drive, the track of data on the storage drive is unpinned which enables destages of data from the cache to the track of data on the storage drive going forward
US11544063B2 (en) 2018-11-21 2023-01-03 SK Hynix Inc. Memory system and data processing system including the same
KR102684940B1 (ko) * 2018-11-21 2024-07-17 에스케이하이닉스 주식회사 데이터 처리 시스템
US11099989B2 (en) 2019-03-12 2021-08-24 International Business Machines Corporation Coherency maintenance via physical cache coordinate comparison
US10831661B2 (en) 2019-04-10 2020-11-10 International Business Machines Corporation Coherent cache with simultaneous data requests in same addressable index

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR19990026501A (ko) * 1997-09-25 1999-04-15 구자홍 분산 공유 메모리의 캐시 일관성 제어방법 및 장치
KR20050000350A (ko) * 2003-06-23 2005-01-03 마이크로소프트 코포레이션 캐쉬 엔트리를 무효화하기 위한 일반적인 의존성 모델
KR100514677B1 (ko) 2002-10-16 2005-09-14 인터내셔널 비지네스 머신즈 코포레이션 컴퓨터 시스템 및 캐시 라인 대체 방법
KR100617663B1 (ko) 2001-09-14 2006-08-28 썬 마이크로시스템즈, 인코포레이티드 캐시 메모리 내 태그 액세스 및 데이터 액세스의 분리방법 및 장치

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3236287B2 (ja) 1990-11-29 2001-12-10 キヤノン株式会社 マルチプロセッサシステム
JPH04215151A (ja) 1990-12-13 1992-08-05 Nec Commun Syst Ltd キャッシュ制御方式
JPH06348595A (ja) * 1993-06-07 1994-12-22 Hitachi Ltd キャッシュ装置
JPH0728706A (ja) 1993-07-14 1995-01-31 Sumitomo Electric Ind Ltd キャッシュメモリ装置
US5893920A (en) * 1996-09-30 1999-04-13 International Business Machines Corporation System and method for cache management in mobile user file systems
US6223256B1 (en) * 1997-07-22 2001-04-24 Hewlett-Packard Company Computer cache memory with classes and dynamic selection of replacement algorithms
GB2385174B (en) 1999-01-19 2003-11-26 Advanced Risc Mach Ltd Memory control within data processing systems
JP2002024088A (ja) 2000-07-07 2002-01-25 Matsushita Electric Ind Co Ltd データ処理装置
JP2002140234A (ja) * 2000-11-02 2002-05-17 Hitachi Ltd キャッシュ装置
US7027064B2 (en) * 2002-02-28 2006-04-11 Sun Microsystems, Inc. Active block write-back from SRAM cache to DRAM
JP2004145780A (ja) 2002-10-28 2004-05-20 Mitsubishi Electric Corp マルチプロセッサ・キャッシュ装置
JP2004326187A (ja) * 2003-04-21 2004-11-18 Matsushita Electric Ind Co Ltd 情報処理装置およびその制御方法
US7024521B2 (en) 2003-04-24 2006-04-04 Newisys, Inc Managing sparse directory evictions in multiprocessor systems via memory locking
US7010649B2 (en) * 2003-10-14 2006-03-07 International Business Machines Corporation Performance of a cache by including a tag that stores an indication of a previously requested address by the processor not stored in the cache
JP2006048447A (ja) * 2004-08-05 2006-02-16 Matsushita Electric Ind Co Ltd キャッシュメモリ装置およびそれを用いる集積回路ならびにデータのキャッシュメモリ方法およびプログラム
US7380065B2 (en) 2005-03-30 2008-05-27 International Business Machines Corporation Performance of a cache by detecting cache lines that have been reused
US7536513B2 (en) * 2005-03-31 2009-05-19 International Business Machines Corporation Data processing system, cache system and method for issuing a request on an interconnect fabric without reference to a lower level cache based upon a tagged cache state
US7793049B2 (en) 2007-10-30 2010-09-07 International Business Machines Corporation Mechanism for data cache replacement based on region policies
US8464009B2 (en) 2008-06-04 2013-06-11 Oracle America, Inc. Method for memory interleave support with a ceiling mask
US20100079454A1 (en) 2008-09-29 2010-04-01 Legakis Justin S Single Pass Tessellation

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR19990026501A (ko) * 1997-09-25 1999-04-15 구자홍 분산 공유 메모리의 캐시 일관성 제어방법 및 장치
KR100617663B1 (ko) 2001-09-14 2006-08-28 썬 마이크로시스템즈, 인코포레이티드 캐시 메모리 내 태그 액세스 및 데이터 액세스의 분리방법 및 장치
KR100514677B1 (ko) 2002-10-16 2005-09-14 인터내셔널 비지네스 머신즈 코포레이션 컴퓨터 시스템 및 캐시 라인 대체 방법
KR20050000350A (ko) * 2003-06-23 2005-01-03 마이크로소프트 코포레이션 캐쉬 엔트리를 무효화하기 위한 일반적인 의존성 모델

Also Published As

Publication number Publication date
US8868838B1 (en) 2014-10-21
CN101739357A (zh) 2010-06-16
JP5229968B2 (ja) 2013-07-03
JP2010123130A (ja) 2010-06-03
CN101739357B (zh) 2012-08-29
GB2465474B (en) 2011-08-31
GB2465474A (en) 2010-05-26
GB0920187D0 (en) 2010-01-06
KR20100057516A (ko) 2010-05-31
DE102009046847A1 (de) 2010-05-27

Similar Documents

Publication Publication Date Title
KR101121487B1 (ko) 멀티-클래스 데이터 캐시 정책들
US8244984B1 (en) System and method for cleaning dirty data in an intermediate cache using a data class dependent eviction policy
US8949541B2 (en) Techniques for evicting dirty data from a cache using a notification sorter and count thresholds
US8131931B1 (en) Configurable cache occupancy policy
US8060700B1 (en) System, method and frame buffer logic for evicting dirty data from a cache using counters and data types
US9639466B2 (en) Control mechanism for fine-tuned cache to backing-store synchronization
US8700862B2 (en) Compression status bit cache and backing store
KR101086507B1 (ko) Cpu 트래픽을 스페셜로서 마킹하는 것에 의한 데드락 회피
US9952977B2 (en) Cache operations and policies for a multi-threaded client
US8135926B1 (en) Cache-based control of atomic operations in conjunction with an external ALU block
US8917271B2 (en) Redistribution of generated geometric primitives
US8760460B1 (en) Hardware-managed virtual buffers using a shared memory for load distribution
US8595437B1 (en) Compression status bit cache with deterministic isochronous latency
US8108610B1 (en) Cache-based control of atomic operations in conjunction with an external ALU block
US20140118366A1 (en) Scheduling cache traffic in a tile-based architecture
US8504773B1 (en) Storing dynamically sized buffers within a cache
US8341358B1 (en) System and method for cleaning dirty data in a cache via frame buffer logic
US8234478B1 (en) Using a data cache array as a DRAM load/store buffer
US9697006B2 (en) Technique for performing memory access operations via texture hardware
US8539130B2 (en) Virtual channels for effective packet transfer
US20180322078A1 (en) Unified cache for diverse memory traffic
US20130160021A1 (en) Signaling, ordering, and execution of dynamically generated tasks in a processing system
US9436969B2 (en) Time slice processing of tessellation and geometry shaders
US9720858B2 (en) Technique for performing memory access operations via texture hardware
US8788761B2 (en) System and method for explicitly managing cache coherence

Legal Events

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

Payment date: 20150106

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20160104

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20170102

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20180110

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20190102

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20200102

Year of fee payment: 9