KR20090035001A - 다수의 소프트웨어 프로그램을 위한 타일드 캐시 - Google Patents

다수의 소프트웨어 프로그램을 위한 타일드 캐시 Download PDF

Info

Publication number
KR20090035001A
KR20090035001A KR1020097003795A KR20097003795A KR20090035001A KR 20090035001 A KR20090035001 A KR 20090035001A KR 1020097003795 A KR1020097003795 A KR 1020097003795A KR 20097003795 A KR20097003795 A KR 20097003795A KR 20090035001 A KR20090035001 A KR 20090035001A
Authority
KR
South Korea
Prior art keywords
tiles
program
cache
logical
tile
Prior art date
Application number
KR1020097003795A
Other languages
English (en)
Inventor
윈 두
궈팡 자오
춘 위
더 디쯔워 수
Original Assignee
퀄컴 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 퀄컴 인코포레이티드 filed Critical 퀄컴 인코포레이티드
Publication of KR20090035001A publication Critical patent/KR20090035001A/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/0864Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using pseudo-associative means, e.g. set-associative or hashing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • 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/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0842Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming

Landscapes

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

Abstract

다수의 소프트웨어 프로그램을 위한 명령들, 상수 값, 및 다른 유형의 데이터를 저장하는 캐싱 기술이 설명된다. 캐시는 다수의 프로그램을 위한 스토리지를 제공하고 다수의 타일들로 분할된다. 각 타일은 하나의 프로그램에 할당될 수 있다. 각 프로그램에는, 프로그램의 캐시 이용, 이용 가능한 타일, 및/또는 다른 인자들에 기초하여 임의의 개수의 타일들이 할당될 수도 있다. 캐시 제어기는, 프로그램들에 할당된 타일들을 식별하고 캐시를 액세스하기 위한 캐시 어드레스를 발생시킨다. 캐시는 물리 타일들로 분할될 수도 있다. 캐시 제어기는, 프로그램들에 논리 타일들을 할당할 수도 있고 캐시 내의 물리 타일들에 논리 타일들을 맵핑할 수도 있다. 논리 타일 및 물리 타일의 이용은 타일들의 할당 및 관리를 간단하게 할 수도 있다.
캐시, 캐시 제어기, 캐시 어드레스, 논리 타일, 물리 타일

Description

다수의 소프트웨어 프로그램을 위한 타일드 캐시{TILED CACHE FOR MULTIPLE SOFTWARE PROGRAMS}
배경
I. 기술 분야
본 명세서는 일반적으로 일렉트로닉스에 관한 것으로서, 보다 상세하게는 다수의 소프트웨어 프로그램을 위한 스토리지를 제공하는 기술에 관한 것이다.
II. 기술 배경
많은 전자 디바이스는 다수의 소프트웨어 프로그램을 병렬로 실행할 수 있다. 예를 들어, 그래픽 프로세서는, 비디오 게임, 그래픽, 이미징 등과 같은 애플리케이션을 위해 다수의 그래픽 프로그램을 실행할 수도 있다. 각 프로그램은 명령들의 시퀀스이다. 프로그램 카운터가 각 프로그램에 대해 유지될 수도 있고, 그 프로그램에 대해 실행되는 현재의 명령을 포인팅할 수도 있다.
실행 중인 프로그램이 클 수도 있고, 따라서 대용량 스토리지 유닛에 저장될 수도 있다. 동작 속도를 개선하기 위해, 각 프로그램의 작은 부분은, 대용량 스토리지 유닛으로부터 프로세서에 더 가깝게 배치된 패스트 메모리 (fast memory) 인 명령 캐시 상으로 로딩될 수도 있다. 명령 캐시는 실행 중인 모든 프로그램에 대한 명령들을 저장할 수도 있다. 명령 캐시의 이용을 개선하기 위해, 프로 그램은 캐시 내에서 동일한 어드레스 공간을 공유할 수도 있다. 이는, 그 다음에 각 캐시 로케이션이 임의의 프로그램에 대한 명령을 저장하는 것을 허용한다.
하나의 캐시 내에 다수의 프로그램에 대한 명령들을 저장하는데 있어서 중요한 이슈는, 프로그램들 사이의 "명령 스래싱 (instruction thrashing)" 이다. 명령 스래싱은, 2 이상의 프로그램이 캐시의 동일한 로케이션에 대해 경쟁하고 그 명령들이 서로 계속해서 오버라이팅되는 현상이다. 명령 스래싱은 과도한 캐시 미스 (miss) 를 초래한다. 캐시 미스는, 원하는 명령이 캐시에서 발견되지 않을 때마다 발생한다. 통상적으로 캐시가 우선 명령으로 채워지고, 그 다음에 이 명령이 검색 및 실행되기 때문에, 캐시 미스는 명령의 실행에 있어서 지연을 야기시킨다. 명령 스래싱은 영향받는 모든 프로그램들에 대한 성능에 불리한 영향을 줄 수도 있다.
개요
본 명세서에는 다수의 소프트웨어 프로그램에 대한 명령들, 상수 값들, 및 다른 유형의 데이터를 캐시 내에 저장하는 기술이 설명된다. 이 기술은, 프로그램들 사이에서의 트래싱을 방지하며, 또한 프로그램들 사이에서 이용 가능한 캐시 스토리지 공간의 효율적인 공유를 허용한다.
일 실시형태에서, 장치는 캐시 및 캐시 제어기를 포함한다. 캐시는 다수의 프로그램을 위해 스토리지를 제공하고, 다수의 타일 (tile) 들로 구획된다. 각 타일은 하나의 프로그램에 할당될 수 있다. 각 프로그램에는, 프로그램의 캐시 사용, 이용 가능한 타일, 및/또는 다른 인자들에 기초하여 임의의 개수의 타 일이 할당될 수도 있다. 캐시 제어기는 프로그램들에 할당된 타일들을 식별하고, 캐시를 액세스하기 위한 캐시 어드레스를 발생시킨다.
일 실시형태에서, 캐시는 다수의 물리 타일 (physical tile) 로 분할된다. 캐시 제어기는 프로그램들에 논리 타일 (logical tile) 들을 할당하고, 캐시 내의 물리 타일들에 대해 논리 타일들을 맵핑한다. 논리 타일들 및 물리 타일들의 이용은 프로그램들에 대한 타일들의 할당 및 타일들의 관리를 간단하게 할 수도 있다. 캐시 제어기는 프로그램에 대한 프로그램 카운터를 수신하고, 이 프로그램 카운터에 기초하여 논리 타일 어드레스를 도출하고, 논리 타일 어드레스 및 물리 타일들에 대한 논리 타일들의 맵핑에 기초하여 물리 타일 어드레스를 발생시키며, 이 물리 타일 어드레스를 이용하여 캐시 어드레스를 형성한다. 그러면, 캐시 제어기에 의해 결정된 캐시 어드레스에서 캐시로부터 원하는 명령이 검색된다.
이하에서는 본 발명의 각종 양태 밀 실시형태를 더욱 상세히 설명한다.
도면의 간단한 설명
본 발명의 양태 및 실시형태는 도면과 함께 취해졌을 때 아래에 진술된 상세한 설명으로부터 더 명백하게 될 것이며, 도면에서, 동일한 참조 부호는 동일한 대상을 나타낸다.
도 1 은 그래픽 시스템의 블록도를 나타낸다.
도 2 는 그래픽 시스템 내의 쉐이더 코어 (shader core) 의 블록도를 나타낸다.
도 3 은 타일 아키텍처를 갖는 캐시에 대한 논리 타일 및 물리 타일을 나타 낸다.
도 4 는 쉐이더 코어 내의 스레드 스케줄러 및 명령 캐시를 나타낸다.
도 5 는 논리 타일 룩-업 테이블 및 물리 어드레스 룩-업 테이블을 나타낸다.
도 6 은 논리 타일에 대한 프로그램의 직접 맵핑을 나타낸다.
도 7 은 명령 캐시를 위한 어드레스 발생을 나타낸다.
도 8 은 명령 캐시 내의 태그 RAM 및 명령 RAM 을 나타낸다.
도 9 는 무선 디바이스의 블록도를 나타낸다.
상세한 설명
본 명세서에서 "예시적인" 이란 단어는 "예, 예시, 또는 예증으로서 제공되는" 을 의미하는 것으로 이용된다. "예시적인" 것으로서 본 명세서에서 설명되는 임의의 실시형태 또는 설계는 다른 실시형태 또는 설계들에 비해 반드시 바람직하거나 유리한 것으로서 해석할 필요는 없다.
본 명세서에 설명된 캐싱 기술은, 다수의 소프트웨어 프로그램을 병렬로 실행할 수 있는 각종 시스템 및 디바이스에 이용될 수도 있다. 예를 들어, 이 기술은 연산 디바이스, 통신 디바이스 등에 이용될 수도 있다. 명확함을 위해, 이 기술은 그래픽 시스템용으로 이하에서 구체적으로 설명된다.
도 1 은 그래픽 시스템 (100) 의 블록도를 나타내는데, 그래픽 시스템은 연산 시스템, 무선 통신 시스템 (예를 들어, 셀룰러 전화기) 등과 같은 독립형 시스템 (stand-alone system) 또는 더 큰 시스템의 일부일 수도 있다. 그래픽 시스 템 (100) 은, 각각 0 내지 P-1 의 프로그램 ID 들을 갖는 P 개의 그래픽 프로그램/애플리케이션 (110a 내지 110p) 을 지원하며, 여기서 P 는 임의의 정수 값일 수도 있다. 프로그램 (110a 내지 11Op) 은 병렬로 실행될 수도 있고, 비디오 게임, 그래픽, 및/또는 다른 애플리케이션을 위한 것일 수도 있다.
그래픽 프로세서 (120) 는 프로그램 (110a 내지 110p) 에 대한 프로세싱을 수행한다. 그래픽 프로세서 (120) 는, 예를 들어 자동으로 그리고 프로그램에 대해 투명하게 각 프로그램의 프로세싱을 일련의 스레드로 스플릿팅할 수도 있다. 스레드 (또는 실행의 스레드) 는 하나 이상의 명령들 세트로 수행될 수도 있는 특정한 태스크를 나타낸다. 스레드는, 프로그램이 상이한 유닛에 의해 동시에 수행된 다수의 태스크를 갖는 것을 허용하고, 상이한 프로그램이 자원을 공유하는 것을 또한 허용한다.
도 1 에 도시된 실시형태에서, 그래픽 프로세서 (120) 는, 쉐이더 코어 (130), 텍스처 (texture) 엔진 (140), 및 캐시 메모리 시스템 (150) 을 포함한다. 일반적으로, 코어는 집적 회로 내의 프로세싱 유닛을 지칭한다. "코어", "엔진", "머신", "프로세서" 및 "프로세싱 유닛" 이라는 용어는 종종 상호교환적으로 이용된다. 쉐이더 코어 (130) 는, 라이팅 (lighting) 및 섀도잉 (shadowing) 등을 포함하는 매우 복잡한 그래픽 동작인 쉐이딩과 같은 그래픽 동작을 수행할 수도 있다. 텍스처 엔진 (140) 은, 텍스처 이미지의 컬러를 갖는 픽셀의 컬러의 변형을 포함하는 다른 복잡한 그래픽 동작인 텍스처 맵핑과 같은 그래픽 동작을 수행할 수도 있다. 캐시 메모리 시스템 (150) 은, 쉐이더 코어 (130) 및 텍스처 엔진 (140) 에 대한 명령들 및/또는 데이터를 저장할 수 있는 고속 메모리인 하나 이상의 캐시를 포함할 수도 있다. 그래픽 프로세서 (120) 는 다른 프로세싱 및 제어 유닛, 엔진, 및 메모리를 포함할 수도 있다. 또한, 그래픽 프로세서 (120) 는, OpenGL (Open Graphics Library), Direct3D 등과 같은 소프트웨어 인터페이스를 구현할 수도 있다. OpenGL 은, 공개적으로 이용 가능한 2004 년 10 월 22 일자 버전 2.0 의 "The OpenGL® Graphics System: A Specification," 이라는 제목의 문헌에서 설명된다.
주 메모리 (160) 는 그래픽 프로세서 (120) 로부터 더욱 멀리 배치된 크고, 더 느린 메모리 (예를 들어, 오프-칩) 이다. 주 메모리 (160) 는 캐시 메모리 시스템 (150) 내의 캐시 안으로 로딩될 수도 있는 명령들 및 데이터를 저장한다. 주 메모리 (160) 는 그래픽 프로세서 (120) 에 의해 실행 중인 프로그램들 모두를 저장할 수도 있다.
도 2 는 도 1 의 쉐이더 코어 (130) 의 실시형태의 블록도를 나타낸다. 쉐이더 코어 (130) 내에서, 멀티플렉서 (Mux; 208) 는 프로그램들 (110a 내지 110p) 로부터 스레드를 수신하고, 스레드 스케줄러 및 콘텍스트 레지스터 (210) 에 이들 스레드를 제공한다. 스레드 스케줄러 (210) 는 스레드의 실행을 스케줄링하고 관리하도록 각종 기능을 수행한다. 스레드 스케줄러 (210) 는, 새로운 스레드를 수용할지 여부, 각 수용된 스레드에 대해 레지스터 맵 테이블을 생성할지 여부, 및 스레드의 자원을 할당할지 여부를 결정한다. 레지스터 맵 테이블은 논리 레지스터 어드레스와 물리 레지스트 파일 어드레스 사이에서 맵핑을 나타낸 다. 각 스레드에 대하여, 스레드 스케줄러 (210) 는, 그 스레드에 필요한 자원이 준비되었는지 여부를 결정하고, 스레드에 대한 임의의 자원 (예를 들어, 명령, 레지스터 파일, 또는 텍스처 판독) 이 준비되지 않은 경우 슬립 큐 (sleep queue) 로 스레드를 푸싱하며, 자원들 모두가 준비된 경우 슬립 큐로부터 활성 큐 (active queue) 로 스레드를 이동시킨다. 스레드 스케줄러 (210) 는 로드 제어 유닛 (212) 과 인터페이스하여 스레드에 대한 자원을 동기화한다.
또한, 스레드 스케줄러 (210) 는 스레드의 실행을 관리한다. 스레드 스케줄러 (210) 는, 명령 캐시 (220) 로부터 각 스레드에 대한 명령(들)을 페치하고 (fetch), 필요하다면 각 명령을 디코딩하며, 스레드에 대한 흐름 제어를 수행한다. 스레드 스케줄러 (210) 는, 실행을 위해 활성 스레드를 선택하고, 선택된 스레드들 사이의 판독/기록 포트 충돌 (conflict) 을 체크하며, 충돌이 존재하지 않으면 산술 로직 유닛 (arithmetic logic unit: ALU)(216) 으로 하나의 스레드에 대한 명령(들)을 전송하고 로드 제어 유닛 (212) 으로 다른 스레드에 대한 명령(들)을 전송한다. 스레드 스케줄러 (210) 는, 각 스레드에 대한 프로그램 카운터를 유지하고, 명령들이 실행되거나 프로그램 흐름이 변경됨에 따라 이 카운터를 업데이트한다. 또한, 스레드 스케줄러 (210) 는 미싱 (missing) 명령들을 페치하라는 요청을 이슈하고 (issue), 완료된 스레드를 제거한다.
명령 캐시 (220) 는 프로그램들 (11Oa 내지 11Op) 에 대한 명령들을 저장한다. 이들 명령들은 각 스레드에 대해 수행될 특정 동작을 나타낸다. 각 동작은 산술 연산, 초등 함수, 메모리 액세스 동작 등일 수도 있다. 명령 캐시 (220) 는, 필요에 따라 로드 제어 유닛 (212) 을 통해 캐시 메모리 시스템 (150) 및/또는 주 메모리 (160) 로부터의 명령들로 로딩될 수도 있다.
ALU (216) 는 덧셈, 뺄셈, 곱셈, 곱셈-누산 (multiply and accumulate), 절대치, 부정, 비교, 포화 등과 같은 산술 연산을 수행한다. 또한, ALU (216) 는, AND, OR, XOR 등과 같은 논리 동작을 수행할 수도 있다. 또한, ALU (216) 는, 예를 들어 정수로부터 부동 소숫점수 (floating point number) 로의 포맷 변환 및 부동 소숫점수로부터 정수로의 포맷 변환을 수행할 수도 있다. 상수 버퍼 (constant buffer; 218) 는 ALU (216) 에 의해 이용된 상수 값 (예를 들어, 스케일 인자, 필터 가중치 등) 을 저장한다.
로드 제어 유닛 (212) 은 쉐이더 코어 (130) 내의 각종 유닛에 대한 명령들 및 데이터의 흐름을 제어한다. 로드 제어 유닛 (212) 은, 캐시 메모리 시스템 (150) 과 인터페이스하고, 명령 캐시 (220), 상수 버퍼 (218), 및 레지스터 파일 뱅크/출력 버퍼 (222) 에 캐시 메모리 시스템 (150) 으로부터의 명령들 및 데이터로 로딩한다. 또한, 로드 제어 유닛 (212) 은 출력 버퍼 (222) 내의 데이터를 캐시 메모리 시스템 (150) 에 보관한다. 또한, 로드 제어 유닛 (212) 은 텍스처 엔진 (140) 에 명령들을 제공하고, 이 텍스처 엔진으로부터의 결과를 수신한다. 출력 버퍼 (222) 는 ALU (216) 및 텍스처 엔진 (140) 으로부터의 중간 결과 및 최종 결과를 저장한다. 디멀티플렉서 (Demux; 224) 는 출력 버퍼 (222) 로부터 실행된 스레드에 대한 최종 결과를 수신하고, 이들 결과를 프로그램 (110a 내지 11Op) 에 제공한다.
일 실시형태에서, 명령 캐시 (220) 는 캐시를 공유하는 프로그램들 사이의 명령 스래싱을 방지할 수 있는 타일 아키텍처로 구현된다. 또한, 타일 아키텍처는 이용 가능한 캐시 스토리지 공간이 모든 프로그램들 사이에서 효율적으로 공유되는 것을 허용한다. 타일 아키텍처는 명령 캐시 (220) 를 다수 (T) 의 타일로 분할한다. 일 실시형태에서, T 개의 타일은 동일한 사이즈를 갖고, 각 타일은 미리 결정된 개수의 캐시 라인을 포함한다. 캐시 라인은 임의의 사이즈일 수도 있고, 임의의 개수의 명령들을 저장할 수도 있다. 통상적으로, 캐시 라인은 하나의 클록 사이클에서 다른 메모리로부터 채워지거나 다른 메모리에 보관될 수 있다. 본 실시형태에서, 각 프로그램은 프로그램의 캐시 이용 및 이용 가능한 타일에 기초하여 하나 이상의 타일로 할당될 수도 있다. 다른 실시형태에서, 타일은 고정되거나 설정될 수도 있는 상이한 사이즈를 갖는다. 본 실시형태에서, 각 프로그램에는 프로그램의 캐시 이용 및 이용 가능한 타일에 기초하여 적절한 사이즈의 하나의 타일 (또는 가능하게는 다수의 타일) 이 할당될 수도 있다. 명확함을 위해, 다음의 설명은 T 개의 동등한-사이즈의 타일이 있는 실시형태에 관한 것이다. 간략화를 위해, 다음 설명은, 각 타일이 K 개의 명령들을 저장할 수 있다고 가정한다 (여기서, K 는 임의의 값일 수 있음).
도 3 은 명령 캐시 (220) 에 대한 논리 타일 및 물리 타일의 실시형태를 나타낸다. 본 실시형태에서, 명령 캐시 (220) 는 가상 캐시 (310) 로서 프로그램에 대해 나타난다. 가상 캐시 (310) 는 T 개의 논리 타일 0 내지 논리 타일 T-1 을 포함한다. 각 프로그램에는 임의의 개수의 연속 논리 타일이 할당될 수도 있다. 도 3 에 도시된 예에서, 프로그램 0 에는 논리 타일 0 및 논리 타일 1 이 할당되고, 프로그램 1 에는 논리 타일 2 내지 논리 타일 5 등이 할당된다.
명령 캐시 (220) 는 프로그램에 대한 명령들을 저장하는 물리 캐시 (320) 를 구현한다. 물리 캐시 (320) 는 T 개의 물리 타일 0 내지 물리 타일 T-1 을 포함하는데, 각 물리 타일은 K 개의 명령들을 저장할 수 있다. 각 논리 타일은 하나의 물리 타일에 맵핑된다. 몇몇 논리 타일에 대한 예시적인 맵핑이 도 3 에 도시된다. 본 예에서, 물리 타일 0 은 논리 타일 1 에 대한 명령들을 저장하고, 물리 타일 1 은 논리 타일 T-2 등 에 대한 명령들을 저장하는 등이다.
논리 타일 및 물리 타일의 이용은 프로그램에 대한 타일의 할당 및 타일의 관리를 간단하게 할 수도 있다. 예를 들어, 주어진 프로그램에는, 물리 타일들 사이에서 명령들을 전송하지 않고, 룩-업 테이블을 간단하게 업데이트함으로써 추가의, 더 적은, 또는 상이한 논리 타일이 할당될 수도 있다. 후술되는 바와 같이, 각 프로그램에 대한 연속적인 논리 타일의 할당은 어드레스의 발생을 간단하게 할 수도 있다.
도 4 는 도 3 의 스레드 스케줄러 (210) 및 명령 캐시 (220) 의 실시형태를 나타낸다. 스레드 스케줄러 (210) 내에서, 스레드 관리자 (410) 는 실행될 스레드를 수신하고, 이 스레드에 대한 프로그램 ID 및 프로그램 카운터를 제공한다. 프로그램 ID 는 스레드가 속하는 프로그램을 식별한다. 프로그램 카운터는, 원하는 명령으로서 지칭되는 스레드를 실행시키기 위한 현재의 명령을 나타낸다.
캐시 제어기 (420) 는, 논리 타일 및 물리 타일을 관리하고, 캐시 어드레스 를 발생시킨다. 캐시 제어기 (420) 내에서, 논리 타일 룩-업 테이블 (LUT; 430) 은 프로그램 ID 를 수신하고, 이 프로그램에 할당된 논리 타일의 개수 뿐만 아니라 첫 번째 논리 타일을 제공한다. 도 3 에 도시된 예에 있어서, 룩-업 테이블 (430) 은 프로그램 1 에 대한 첫 번째 논리 타일로서 '2', 및 할당된 논리 타일의 개수로서 '4' 를 제공한다. 어드레스 발생기 (440) 는, 프로그램 카운터, 첫 번째 논리 타일 및 할당된 타일의 개수를 수신한다. 어드레스 발생기 (440) 는, 원하는 명령, 이 원하는 명령에 대한 논리 타일 내의 오프셋, 및 명령 태그를 포함하는 논리 타일의 어드레스를 제공한다. 물리 어드레스 룩-업 테이블 (450) 은, 논리 타일 어드레스를 수신하고, 이 논리 타일 어드레스에 대해 맵핑된 물리 타일의 어드레스를 제공한다. 이하, 캐시 제어기 (420) 내 유닛의 동작이 설명된다.
명령 캐시 (220) 는, 명령 RAM (460), 태그 RAM (470), 및 비교 로직 (480) 을 포함한다. 태그 RAM (470) 은, 논리 타일 어드레스를 수신하고, 이 논리 타일 어드레스에 대해 명령 RAM (460) 내에 현재 저장된 프로그램의 섹션을 나타내는 태그를 제공한다. 비교 로직 (480) 은, 태그 RAM (470) 으로부터 저장된 태그, 및 어드레스 발생기 (440) 로부터의 명령 태그를 수신한다. 비교 로직 (480) 은, 2 개의 태그를 비교하고, 2 개의 태그가 동일하다면 캐시 히트 (hit) 를 제공하고, 2 개의 태그가 동일하지 않으면 캐시 미스를 제공한다. 캐시 히트는, 원하는 명령을 포함하는 프로그램 섹션이 명령 RAM (460) 내에 저장되는 것을 의미한다. 스레드 스케줄러 (210) 는, 비교 로직 (480) 으로부터 캐시 미스/히트 표 시자를 수신하고, 캐시 히트가 존재하는 경우 원하는 명령의 실행을 스케줄링하며, 캐시 미스가 존재하는 경우 명령의 실행을 정지한다 (stall). 이하, 명령 캐시 (220) 내 유닛의 동작이 설명된다.
도 5 는 도 4 의 캐시 제어기 (420) 내의 논리 타일 룩-업 테이블 (430) 및 물리 어드레스 룩-업 테이블 (450) 의 실시형태를 나타낸다. 본 실시형태에서, 논리 타일 룩-업 테이블 (430) 은 각 프로그램에 대해 하나의 엔트리를 포함하며, P 개의 프로그램에 대해 P 개의 엔트리를 포함한다. P 개의 엔트리는 프로그램 ID 로 인덱싱될 수도 있다. 각 프로그램에 대한 엔트리는, 이 프로그램에 할당된 첫 번째 논리 타일에 대한 일 영역 및 이 프로그램에 할당된 논리 타일의 개수에 대한 다른 영역을 포함한다. 도 3 에 도시된 예에서, 프로그램 0 에는 논리 타일 0 으로 시작하는 2 개의 논리 타일이 할당되고, 프로그램 1 에는 논리 타일 2 로 시작하는 4 개의 논리 타일이 할당되고, 프로그램 2 에는 논리 타일 6 으로 시작하는 8 개의 논리 타일이 할당되는 등이다. 각 프로그램에는 연속적인 논리 타일이 할당되어, 어드레스 발생을 간단하게 할 수도 있다. 그러나, 프로그램에는 예를 들어, 임의의 순서로 논리 타일이 할당될 수도 있다 (예를 들어, 논리 타일 0 이 임의의 프로그램에 할당될 수도 있다).
도 5 에 도시된 실시형태에서, 물리 어드레스 룩-업 테이블 (450) 은 각 논리 타일에 대해 하나의 엔트리를 포함하며, T 개의 논리 타일에 대해 T 개의 엔트리를 포함한다. T 개의 엔트리는 논리 타일 어드레스로 인덱싱될 수도 있다. 각 논리 타일에 대한 엔트리는, 논리 타일이 맵핑되는 물리 타일을 나타낸다. 도 3 에 도시된 예에서, 논리 타일 0 은 물리 타일 3 에 맵핑되고, 논리 타일 1 은 물리 타일 0 에 맵핑되고, 논리 타일 2 는 물리 타일 i 에 맵핑되고, 논리 타일 3 은 물리 타일 T-3 에 맵핑되는 등이다. 후술되는 바와 같이, 룩-업 테이블들 (430 및 450) 은, 프로그램에 추가의 논리 타일, 더 적은 논리 타일 및/또는 상이한 논리 타일이 할당될 때마다 업데이트될 수도 있다.
도 6 은 직접 맵핑 방식을 위해 그 할당된 논리 타일에 대한 프로그램의 예시적인 맵핑을 나타낸다. 프로그램은 L 개의 논리 타일에 할당되고, 여기서 L 은 임의의 양의 정수 값일 수도 있다. 그러나, 어드레스 연산을 간단하게 하기 위해, L 은 2 의 거듭제곱 (예를 들어, 2, 4, 8 등) 일 수도 있다. 일반적으로, L 개의 할당된 논리 타일은 T 개의 이용 가능한 논리 타일 중 임의의 것일 수도 있다. 이하 설명을 간단히 하기 위해, L 개의 할당된 논리 타일은 논리 타일 0 내지 논리 타일 L-1 이다.
프로그램은 순차적으로 넘버링된 섹션으로 분할될 수도 있는데, 각 섹션은 하나의 물리 타일의 사이즈와 동일하다. 직접 맵핑 방식에서, 프로그램의 각 섹션은 하나의 할당된 논리 타일에 맵핑된다. 예를 들어, 프로그램의 섹션 0, 섹션 L, 섹션 2L 등은 할당된 논리 타일 0 에 맵핑될 수도 있고, 프로그램의 섹션 1, 섹션 L+l, 섹션 2L+1 등은 할당된 논리 타일 1 등에 맵핑될 수도 있다. 일반적으로, 프로그램 섹션 x 는 할당된 논리 타일 y 에 맵핑될 수도 있고, 여기서 y = (x MOD L) 및 MOD L 은 모듈로-L 동작을 나타낸다.
또한, 프로그램의 섹션은 태그에 의해 식별된다. 섹션 0 내지 섹션 L-1 은 태그 0 을 갖고, 섹션 L 내지 섹션 2L-1 은 태그 1 을 갖는 등이다. 태그 RAM 은 각 논리 타일에 저장되는 프로그램 섹션의 태그를 저장한다. 도 6 에 도시된 예에서, 태그 RAM 은, 논리 타일 0 이 태그 2 를 갖는 프로그램 섹션 2L 을 저장하고, 논리 타일 1 이 태그 0 등을 갖는 프로그램 섹션 1 을 저장하는 것을 나타낸다.
직접 맵핑 방식은, 원하는 명령이 명령 캐시 (220) 내에 저장되는지 여부를 결정하기 위해 비교 동작의 수를 감소시킨다. 원하는 명령이 하나의 할당된 논리 타일에만 저장될 수 있기 때문에, 원하는 명령이 명령 캐시 (220) 내에 저장되는지 여부를 결정하도록 하나의 비교 동작 만이 수행될 수도 있다. 다른 실시형태에서, N-방향 세트 연관 방식이 이용되고, 프로그램의 각 섹션은 N 개의 가능한 논리 타일 중 어느 하나에 맵핑될 수도 있다 (여기서, N > 1). 원하는 명령이 그 명령을 위한 N 개의 가능한 논리 타일 중 어느 하나에 저장되는지 여부를 결정하기 위해, 최대 N 개의 비교 동작이 수행될 수도 있다. 명확함을 위해, 이하에서는 직접 맵핑된 방식이 설명된다.
도 7 은 명령 캐시 (220) 를 위한 어드레스 발생을 나타낸다. 프로그램 카운터는, 미리 결정된 수의 비트를 포함하고, k 개의 최하위 비트 (LSB) 및 m 개의 최상위 비트 (MSB) 로 분할된다. k 는 각 물리 타일의 사이즈에 의해 결정되며, K = 2k 로서 주어질 수도 있는데, 여기서 K 는 명령들 수의 단위로 주어진 타일 사이즈이다. m 은 프로그램 카운터의 나머지 비트이다.
프로그램 카운터의 k 개의 LSB 는 물리 타일에 대한 오프셋으로서 이용된다. 프로그램 카운터의 m 개의 MSB 는, 원하는 명령을 포함하는 프로그램 섹션 (또는, 단순히, 원하는 프로그램 섹션) 의 시작 어드레스인 베이스 어드레스로서 이용된다. 이 베이스 어드레스는, 원하는 프로그램 섹션을 포함하는 논리 타일 및 이 섹션의 태그를 결정하는데 이용된다.
원하는 프로그램 섹션이 맵핑되는 논리 타일은 다음과 같이 결정될 수도 있다:
논리 타일 어드레스 = (베이스 어드레스 MOD L) + 첫 번째 논리 타일 어드레스
이 논리 타일과 연관된 물리 타일은 논리 타일 어드레스를 찾음으로써 다음과 같이 획득될 수도 있다:
물리 타일 어드레스 = LUT (논리 타일 어드레스)
여기서, LUT ( ) 는 룩-업 동작을 나타낸다.
원하는 프로그램 섹션의 태그는 다음과 같이 결정될 수도 있다:
명령 태그 = 베이스 어드레스 DIV L
여기서, DIV 는 몫 (quotient) 을 제공하는 동작을 나타낸다. L 이 2 의 거듭 제곱, 또는 L = 2l 이면, 수학식 1 에서의 MOD 동작은 베이스 어드레스의 l 개의 LSB 를 제공하고, 수학식 3 에서의 DIV 동작은 베이스 어드레스의 나머지 m-l 개의 MSB 를 제공한다.
캐시 어드레스는 물리 타일 어드레스를 오프셋과 연관시킴으로써 다음과 같이 획득된다:
캐시 어드레스 = 물리 타일 어드레스 ∥오프셋
여기서, "∥" 은 연관 (concatenation) 동작을 나타낸다.
도 8 은 도 4 의 명령 캐시 (220) 내 태그 RAM (470) 의 일 실시형태를 나타낸다. 태그 RAM (470) 은 각 논리 타일에 대해 하나의 엔트리를 포함하며, T 개의 논리 타일에 대해 T 개의 엔트리를 포함한다. T 개의 엔트리는 도 4 의 어드레스 발생기 (440) 로부터의 논리 타일 어드레스에 의해 인덱싱될 수도 있다. 도 8 에 도시된 실시형태에서, 각 논리 타일에 대한 엔트리는 태그 및 유효한 비트를 포함한다. 태그는 논리 타일 (또는 실제로 논리 타일과 연관된 물리 타일) 내에 저장된 프로그램 섹션의 베이스 어드레스를 나타낸다. 도 3 에 도시된 예에서, 논리 타일 0 에 대한 엔트리는 물리 타일 3 내에 저장된 프로그램 섹션의 태그를 저장하고, 논리 타일 1 에 대한 엔트리는 물리 타일 0 에 저장된 프로그램 섹션의 태그를 저장하는 등이다. 각 논리 타일에 대한 유효한 비트는, 논리 타일이 프로그램 섹션을 현재 저장하는지 여부를 나타낸다. 프로그램에 새로운 논리 타일이 할당되는 경우, 유효한 비트는 '0' 으로 설정되어 논리 타일에 대한 유효한 데이터가 없는 것을 나타낼 수도 있다. 유효한 비트가 '1' 로 설정될 수도 있고, 태그는 프로그램 섹션과 논리 타일을 채운 후에 업데이트될 수도 있다.
원하는 명령이 주어진 논리 타일 내에 저장되는지 여부를 결정하기 위해, 그 논리 타일에 대한 태그가 태그 RAM (470) 으로부터 획득되고, 어드레스 발생기 (440) 로부터의 명령 태그와 비교된다. 2 개의 태그가 매칭되고 유효한 비트가 '1' 이면, 캐시 히트가 존재한다. 이 경우, 원하는 명령은, 논리 타일 내에 저장되고, 이 명령에 대한 캐시 어드레스에서 명령 RAM (460) 으로부터 검색될 수도 있다. 캐시 어드레스는 타일에 대한 오프셋 뿐만 아니라 적절한 물리 타일을 포함한다. 캐시 미스가 존재하면, 물리 타일은 원하는 명령을 포함하는 프로그램 섹션으로 채워질 수도 있다. 그 다음에, 연관된 논리 타일에 대한 태그는 물리 타일 안으로 로딩된 프로그램 섹션의 태그와 함께 업데이트된다.
예로서, 어드레스 발생기 (440) 는, 논리 타일 b 에 맵핑되는 프로그램 섹션 a 내에 원하는 명령이 있는 것을 나타낼 수도 있다. 물리 어드레스 룩-업 테이블 (450) 은, 논리 타일 b 가 물리 타일 c 에 맵핑되는 것을 나타낼 수도 있다. 태그 RAM (470) 이, 논리 타일 b 내에 저장된 프로그램 섹션이 태그 a 를 갖는 것을 나타내면, 캐시 히트가 존재하고, 원하는 명령은 물리 타일 c 로부터 검색될 수도 있다. 반대로, 태그 RAM (470) 이, 논리 타일 b 에 저장된 프로그램 섹션이 a 외의 태그를 갖는 것을 나타내면, 캐시 미스가 존재한다. 그 다음에, 프로그램 섹션 a 는 물리 타일 c 안으로 로딩될 수도 있고, 태그 RAM (470) 은 논리 타일 b 에 대한 태그 a 를 저장하도록 업데이트될 수도 있다.
도 4 및 도 8 에 도시된 실시형태에서, 태그 RAM (470) 내의 태그는 논리 타일 어드레스로 인덱싱된다. 이 실시형태는, 논리 타일 어드레스가 물리 타일 어드레스 전에 이용 가능하기 때문에 태그 RAM (470) 내의 태그의 더 이른 룩-업을 허용한다. 다른 실시형태에서, 태그 RAM (470) 내의 태그는 물리 타일 어드레스로 인덱싱된다. 태그가 인덱싱되는 방식은, 프로그램에 논리 타일이 할당되고, 재할당되며, 할당해제 (de-assign) 될 때마다 태그가 업데이트되는 방법에 영향을 줄 수도 있다.
또한, 도 8 은 명령 캐시 (220) 내 명령 RAM (460) 의 실시형태를 나타낸다. 본 실시형태에서, 각 캐시 라인은 2 개의 엔트리를 포함하고, 각 엔트리는 하나의 명령을 저장한다. 각 타일은, 0 내지 K-1 의 오프셋과 연관되는 K 개의 엔트리에 대해 K/2 개의 캐시 라인을 포함한다. 도 7 에서 발생된 캐시 어드레스는, 명령 RAM (460) 내에서 특정 타일에 대한 물리 타일 어드레스 및 이 타일 내 특정 엔트리에 대한 오프셋을 포함한다. 일반적으로, 타일은 임의의 개수의 캐시 라인을 포함할 수도 있고, 각 캐시 라인은 임의의 사이즈일 수도 있으며 임의의 개수의 명령들을 저장할 수도 있다.
논리 타일은 실행 중인 프로그램의 개수, 이들 프로그램의 캐시 이용, 이용 가능한 논리 타일, 및/또는 다른 인자들에 기초하여 프로그램에 동적으로 할당 및 할당해제될 수도 있다. 프로그램이 실행으로부터 은퇴 (retire) 하면, 이 프로그램에 할당된 논리 타일은 다른 프로그램으로 재할당될 수도 있다. 새로운 프 로그램이 활성화되면, 논리 타일을 다른 프로그램으로부터 가져오고 이 새로운 프로그램에 할당할 수도 있다.
다음 동작들이 지원될 수도 있다:
1. 프로그램에 동일한 수의 논리 타일을 재할당,
2. 프로그램에 추가의 논리 타일을 할당,
3. 프로그램으로부터 논리 타일의 할당해제,
4. 프로그램의 은퇴, 및
5. 새로운 프로그램의 활성화.
프로그램에는, 예를 들어 다른 프로그램이 은퇴하거나 새로운 프로그램이 활성화되는 경우, 동일한 개수의 논리 타일이 재할당될 수도 있다. 이 경우, 논리 타일 룩-업 테이블 (430) 은 프로그램에 대한 새로운 첫 번째 논리 타일로 업데이트된다. 물리 어드레스 룩-업 테이블 (450) 은, 오래된 논리 타일 어드레스/로케이션으로부터 새로운 논리 타일 어드레스로 물리 타일 어드레스를 이동시킴으로써 업데이트된다. 또한, 태그 RAM (470) 은 오래된 논리 타일 어드레스로부터 새로운 논리 타일 어드레스로 이 태그들을 이동시킴으로써 업데이트된다.
프로그램에는, 예를 들어 논리 타일이 이용 가능해지고/지거나 프로그램의 캐시 사용이 증가하는 경우, 추가의 논리 타일이 할당될 수도 있다. 이 경우, 논리 타일 룩-업 테이블 (430) 은 프로그램에 대해 새로운 개수의 할당된 논리 타일 (새로운 L 값) 로 업데이트된다. 명령 RAM (460) 내에 현재 저장된 프로그램 섹션의 태그는 새로운 L 값을 이용하여 재연산되고, 태그 RAM (470) 내의 적절 한 논리 타일 어드레스 내에 저장된다. 새롭게 할당된 논리 타일에 대한 유효한 비트는 '0' 으로 설정되어, 이들 논리 타일에 대한 유효한 데이터가 없는 것을 나타낼 수도 있다.
프로그램에는, 예를 들어 새로운 프로그램이 활성화되는 경우 몇몇 논리 타일이 할당해제될 수도 있다. 이 경우, 논리 타일 룩-업 테이블 (430) 은 프로그램에 대해 새로운 개수의 할당된 논리 타일 (새로운 L 값) 로 업데이트된다. 명령 RAM (460) 내에 현재 저장된 프로그램 섹션의 태그는 새로운 L 값으로 재연산된다. 현재 할당된 논리 타일에 대한 태그는 태그 RAM (470) 내의 적절한 논리 타일 어드레스 내에 저장된다. 할당해제된 논리 타일에 대한 태그는 폐기된다.
프로그램은, 프로그램의 실행이 완료되는 경우 은퇴될 수도 있다. 프로그램에 할당된 논리 타일들 모두는 다시 요구 (reclaime) 되고 다른 프로그램에 할당될 수도 있다. 논리 타일 룩-업 테이블 (430) 은 프로그램에 대해 0 개의 할당된 논리 타일 (L=0) 로 업데이트될 수도 있다.
새로운 프로그램은 활성화되고, 하나 이상의 논리 타일이 할당될 수도 있다. 논리 타일 룩-업 테이블 (430) 은 첫 번째 논리 타일 및 새로운 프로그램에 할당된 논리 타일의 개수로 업데이트될 수도 있다. 새롭게 할당된 논리 타일에 대한 유효한 비트는 '0' 으로 설정될 수도 있다.
상기 동작의 임의의 조합은 임의의 주어진 순간에서 수행될 수도 있다. 예를 들어, 프로그램의 은퇴는 남아있는 프로그램에 대한 논리 타일의 할당 및/또는 재할당을 초래할 수도 있다. 새로운 프로그램의 활성화는 다른 프로그램에 대한 논리 타일의 할당해제 및/또는 재할당을 초래할 수도 있다. 일 예와 같이, 논리 타일은 도 5 에 도시된 바와 같이 프로그램에 초기에 할당될 수도 있다. 그 다음에, 프로그램 2 는 실행으로부터 은퇴될 수도 있고, 이 프로그램에 할당된 8 개의 논리 타일은 다른 프로그램에 재할당될 수도 있다. 예를 들어, 프로그램 0 에는 논리 타일 0 내지 논리 타일 7 이 할당될 수도 있고, 프로그램 1 에는 논리 타일 8 내지 논리 타일 11 이 할당될 수도 있고, 프로그램 3 에는 논리 타일 12 내지 논리 타일 17 이 할당될 수도 있다. 본 예에서, 프로그램 0 에는 6 개의 추가 논리 타일이 할당되고, 프로그램 1 에는 논리 타일이 재할당되며, 프로그램 3 에는 2 개의 추가 논리 타일이 할당된다. 룩-업 테이블들 (430 및 450) 및 태그 RAM (470) 은 전술된 바와 같이 이들 프로그램에 대해 업데이트될 수도 있다.
명확함을 위해, 논리 타일 및 물리 타일을 이용하는 명령 캐시 (220) 의 특정 실시형태가 전술되었다. 다른 실시형태에서, 논리 타일이 이용되지 않고, 프로그램에는 물리 타일이 할당되지 않으며, 어느 프로그램이 그 할당된 물리 타일에 직접 맵핑된다. 룩-업 테이블은, 물리 타일이 각 프로그램에 할당되는지를 식별하는데 이용될 수도 있다.
타일드 캐시 (tiled cache) 는 타일 아키텍처로 구현되는 캐시이다. 일반적으로, 타일드 캐시는 동일한 사이즈 또는 상이한 사이즈를 가질 수도 있는 임의의 개수의 타일을 포함할 수도 있다. 프로그램에는 논리 타일 또는 물리 타일이 할당될 수도 있고, 직접 맵핑되거나 N-방향 세트 연관을 이용하여 할당된 타 일에 맵핑될 수도 있다. 태그 RAM 은, 논리 타일 어드레스 또는 물리 타일 어드레스로 인덱싱된 태그를 저장할 수도 있다. 일반적으로, 타일 캐시는 각종 방식으로 구현될 수도 있다. 타일드 캐시에 대한 각종 유닛의 동작은 타일드 캐시의 디자인에 의해 결정될 수도 있고, 타일드 캐시의 디자인에 매칭될 수도 있다.
타일드 캐시는 각종 유형의 데이터를 저장하는데 이용될 수도 있다. 도 2 에 도시된 실시형태에서, 명령 캐시 (220) 및 상수 버퍼 (218) 각각은 타일드 캐시로 구현될 수도 있다. 또한, 하나 이상의 타일드 캐시는 캐시 메모리 시스템 (150) 에서 예를 들어 픽셀, 텍스터 맵 등과 같은 각종 유형의 데이터를 저장하는데 이용될 수도 있다.
타일드 캐시는, 캐시를 공유하는 프로그램들 사이의 트래싱 방지, 태그 비교를 위한 저 전력 소비, 더 작은 집적 회로 (IC) 영역 등과 같은 어떤 이점을 제공할 수도 있다.
본 명세서에 설명된 캐싱 기술은, 무선 통신, 연산, 네트워킹, 개인용 전자기기 등 용으로 이용될 수도 있다. 이하, 무선 통신을 위한 이 기술의 예시적인 이용이 설명된다.
도 9 는 무선 통신 시스템 내 무선 디바이스 (900) 의 실시형태의 블록도이다. 무선 디바이스 (900) 는, 셀룰러 전화기, 단말기, 핸드셋, PDA, 또는 몇몇 다른 디바이스일 수도 있다. 무선 통신 시스템은, CDMA (Code Division Multiple Access) 시스템, GSM (Global System for Mobile Communications) 시스 템, 또는 몇몇 다른 시스템일 수도 있다.
무선 디바이스 (900) 는 수신 경로 및 송신 경로를 통해 양방향 통신을 제공할 수 있다. 수신 경로 상에서, 기지국에 의해 송신된 신호는 안테나 (912) 에 의해 수신되고, 수신기 (RCVR; 914) 로 제공된다. 수신기 (914) 는 수신된 신호를 컨디셔닝 및 디지털화하고, 이후의 프로세싱을 위해 디지털 섹션 (920) 에 샘플을 제공한다. 송신 경로 상에서, 송신기 (TMTR; 916) 는 디지털 섹션 (920) 으로부터 송신될 데이터를 수신하고, 이 데이터를 프로세싱 및 컨디셔닝하며, 안테나 (912) 를 통해 기지국으로 송신되는 변조된 신호를 발생시킨다.
디지털 섹션 (920) 은, 예를 들어 모뎀 프로세서 (922), 비디오 프로세서 (924), 애플리케이션 프로세서 (926), 디스플레이 프로세서 (928), 제어기/프로세서 (930), 그래픽 프로세서 (940), 및 외장형 버스 인터페이스 (EBI; 960) 와 같은 각종 프로세싱 및 인터페이스 유닛을 포함한다. 모뎀 프로세서 (922) 는 데이터 송신 및 수신을 위해 프로세싱, 예를 들어 인코딩, 변조, 복조, 및 디코딩을 수행한다. 비디오 프로세서 (924) 는, 캠코더, 비디오 플레이백, 및 화상 회의와 같은 비디오 애플리케이션을 위해 비디오 콘텐츠 (예를 들어, 스틸 이미지, 동영상, 및 움직이는 텍스트) 에 대한 프로세싱을 수행한다. 애플리케이션 프로세서 (926) 는, 다-방향 콜, 웹 브라우징, 미디어 플레이어, 및 사용자 인터페이스와 같은 각종 애플리케이션을 위한 프로세싱을 수행한다. 디스플레이 프로세서 (928) 는 디스플레이 유닛 (980) 상에 비디오, 그래픽, 및 텍스트를 디스플레이하기 위한 프로세싱을 수행한다. 제어기/프로세서 (930) 는 디지털 섹션 (920) 내의 각종 프로세싱 및 인터페이스 유닛의 동작을 지시할 수도 있다.
그래픽 프로세서 (940) 는 그래픽 애플리케이션을 위한 프로세싱을 수행하고, 전술된 바와 같이 구현될 수도 있다. 예를 들어, 그래픽 프로세서 (940) 는 도 2 및 도 4 의 스레드 스케줄러 (210) 및 명령 캐시 (220) 를 포함할 수도 있다. 캐시 메모리 시스템 (950) 은 그래픽 프로세서 (940) 를 위해 명령들 및/또는 데이터를 저장한다. EBI (960) 는 디지털 섹션 (920) 과 주 메모리 (970) 사이에서 데이터의 전송을 실시한다.
디지털 섹션 (920) 은 하나 이상의 디지털 신호 프로세서 (DSP), 마이크로-프로세서, 감소된 명령 세트 컴퓨터 (RISC) 등으로 구현될 수도 있다. 또한, 디지털 섹션 (920) 은 하나 이상의 주문형 집적 회로 (ASIC) 또는 몇몇 다른 유형의 집적 회로 (IC) 상에서 제작될 수도 있다.
본 명세서에 설명된 캐싱 기술은 각종 하드웨어 유닛에서 구현될 수도 있다. 예를 들어, 캐시는, ASIC, 디지털 신호 프로세싱 디바이스 (DSPD), 프로그래머블 로직 회로 (PLD), 필드 프로그래머블 게이트 어레이 (FPGA), 프로세서, 제어기, 마이크로-제어기, 마이크로프로세서, 및 다른 전자 유닛으로 구현될 수도 있다.
캐싱 기술의 일부는 펌웨어 및/또는 소프트웨어에서 구현될 수도 있다. 예를 들어, 타일드 캐시의 관리 및 제어는, 본 명세서에 설명된 기능을 수행하는 펌웨어 및/또는 소프트웨어 모듈 (예를 들어, 절차, 기능 등) 로 구현될 수도 있다. 펌웨어 및/또는 소프트웨어 코드는 메모리 (예를 들어, 도 9 의 메모리 (970)) 내에 저장되고, 프로세서 (예를 들어, 프로세서 (930)) 에 의해 실행될 수 도 있다. 메모리는 프로세서 내에서 또는 이 프로세서에 대한 외부에서 구현될 수도 있다.
개시되어 있는 실시형태들에 대한 상기의 설명은 당업자로 하여금 본 발명을 제조 또는 이용할 수 있도록 제공된다. 당업자는 이들 실시형태에 대한 다양한 변형들을 명백히 알 수 있으며, 여기에서 정의된 일반적인 원리들은 본 발명의 사상 또는 범위를 벗어나지 않고도 다른 실시형태들에 적용될 수도 있다. 따라서, 본 발명은 여기에서 설명된 실시형태들에 제한되는 것이 아니라, 이하 청구항에 의해 정의된 바와 같은 원리 및 신규한 특징들과 부합하는 최광의 범위를 부여하려는 것이다.

Claims (28)

  1. 다수의 프로그램들을 위한 스토리지를 제공하도록 동작하고 다수의 타일들로 분할된 캐시로서, 각 타일이 하나의 프로그램에 할당될 수 있는, 상기 캐시; 및
    상기 다수의 프로그램들에 할당된 타일들을 식별하고 상기 캐시를 액세스하는 캐시 어드레스들을 발생시키도록 동작하는 캐시 제어기를 포함하는, 장치.
  2. 제 1 항에 있어서,
    각 프로그램에는 적어도 하나의 연속 타일이 할당되는, 장치.
  3. 제 1 항에 있어서,
    각 프로그램에는 적어도 하나의 타일이 할당되고, 상기 각 프로그램은 직접 맵핑에 기초하여 상기 적어도 하나의 타일에 맵핑되는, 장치.
  4. 제 1 항에 있어서,
    각 프로그램에는 적어도 하나의 타일이 할당되고, 상기 각 프로그램은 N-방향 세트 연관 맵핑에 기초하여 상기 적어도 하나의 타일에 맵핑되며, N 이 1 보다 큰, 장치.
  5. 제 1 항에 있어서,
    상기 캐시는 다수의 물리 타일들로 분할되고,
    상기 캐시 제어기는, 상기 다수의 프로그램들에 논리 타일들을 할당하고 상기 물리 타일들에 상기 논리 타일들을 맵핑하는, 장치.
  6. 제 5 항에 있어서,
    상기 캐시 제어기는 상기 다수의 프로그램들에 할당된 논리 타일들을 식별하도록 동작하는 룩-업 테이블을 포함하는, 장치.
  7. 제 6 항에 있어서,
    각 프로그램에는 적어도 하나의 연속 논리 타일이 할당되고,
    상기 룩-업 테이블은 각 프로그램에 할당된 첫 번째 논리 타일 및 논리 타일들의 개수를 저장하는, 장치.
  8. 제 5 항에 있어서,
    상기 캐시 제어기는 상기 물리 타일들에 대한 상기 논리 타일들의 맵핑을 저장하도록 동작하는 룩-업 테이블을 포함하는, 장치.
  9. 제 5 항에 있어서,
    상기 캐시 제어기는, 일 프로그램에 대한 프로그램 카운터를 수신하고 상기 프로그램 카운터에 대응하는 논리 타일 어드레스를 제공하도록 동작하는 어드레스 발생기를 포함하는, 장치.
  10. 제 9 항에 있어서,
    상기 어드레스 발생기는 또한, 상기 프로그램에 할당된 적어도 하나의 논리 타일에 대한 상기 프로그램의 직접 맵핑에 기초하여 상기 프로그램 카운터에 대한 태그를 결정하는, 장치.
  11. 제 5 항에 있어서,
    상기 캐시 제어기는,
    일 프로그램에 대한 프로그램 카운터를 수신하고,
    상기 프로그램 카운터로부터 프로그램 섹션에 대한 베이스 어드레스를 획득하고,
    상기 베이스 어드레스, 상기 프로그램에 할당된 첫 번째 논리 타일, 및 상기 프로그램에 할당된 논리 타일들의 개수를 이용하여 논리 타일 어드레스를 도출하며,
    상기 베이스 어드레스 및 상기 프로그램에 할당된 논리 타일들의 개수를 이용하여 상기 프로그램 카운터에 대한 태그를 도출하도록 동작하는 어드레스 발생기를 포함하는, 장치.
  12. 제 1 항에 있어서,
    상기 캐시 제어기는, 프로그램이 활성화 된다는 표시를 수신하고 상기 프로그램에 적어도 하나의 타일을 할당하는, 장치.
  13. 제 12 항에 있어서,
    상기 캐시 제어기는, 프로그램이 은퇴 (retiring) 한다는 표시를 수신하고 상기 적어도 하나의 타일을 적어도 하나의 다른 프로그램에 재할당하는, 장치.
  14. 제 1 항에 있어서,
    상기 캐시는,
    상기 다수의 프로그램들을 위한 스토리지를 제공하도록 동작하고, 상기 다수의 타일들로 분할된 제 1 메모리; 및
    상기 제 1 메모리 내의 상기 다수의 타일들에 대한 태그들을 저장하도록 동작하는 제 2 메모리를 포함하는, 장치.
  15. 제 1 항에 있어서,
    상기 캐시는 상기 다수의 프로그램들에 대한 명령들을 저장하도록 동작하는, 장치.
  16. 제 1 항에 있어서,
    상기 캐시는 상기 다수의 프로그램들에 대한 상수 값들을 저장하도록 동작하 는, 장치.
  17. 다수의 프로그램들을 위한 스토리지를 제공하도록 동작하고 다수의 타일들로 분할된 캐시로서, 각 타일이 하나의 프로그램에 할당될 수 있는, 상기 캐시; 및
    상기 다수의 프로그램들에 할당된 타일들을 식별하고 상기 캐시를 액세스하는 캐시 어드레스들을 발생시키도록 동작하는 캐시 제어기를 포함하는, 집적 회로.
  18. 제 17 항에 있어서,
    상기 캐시는 다수의 물리 타일들로 분할되고,
    상기 캐시 제어기는, 상기 다수의 프로그램들에 논리 타일들을 할당하고 상기 물리 타일들에 상기 논리 타일들을 맵핑하는, 집적 회로.
  19. 제 18 항에 있어서,
    상기 캐시 제어기는,
    일 프로그램에 대한 프로그램 카운터를 수신하고,
    상기 프로그램 카운터에 기초하여 논리 타일 어드레스를 도출하고,
    상기 논리 타일 어드레스 및 물리 타일들에 대한 논리 타일들의 맵핑에 기초하여 물리 타일 어드레스를 발생시키는, 집적 회로.
  20. 다수의 프로그램들에 캐시 내의 다수의 타일들을 할당하는 단계로서, 각 타 일이 하나의 프로그램에 할당될 수 있는, 상기 다수의 프로그램들에 캐시 내 다수의 타일들을 할당하는 단계;
    상기 다수의 프로그램들 중 하나의 프로그램으로부터 액세스 요청을 수신하는 단계;
    상기 프로그램에 할당된 적어도 하나의 타일을 식별하는 단계; 및
    상기 프로그램에 할당된 상기 적어도 하나의 타일에 기초하여 캐시 어드레스를 발생시키는 단계를 포함하는, 방법.
  21. 제 20 항에 있어서,
    상기 다수의 프로그램들에 캐시 내 다수의 타일들을 할당하는 단계는,
    상기 다수의 프로그램들에 논리 타일들을 할당하는 단계, 및
    상기 캐시 내에서 물리 타일들에 상기 논리 타일들을 맵핑하는 단계를 포함하는, 방법.
  22. 제 21 항에 있어서,
    상기 캐시 어드레스를 발생시키는 단계는,
    상기 프로그램에 대한 프로그램 카운터를 수신하는 단계,
    상기 프로그램 카운터에 기초하여 논리 타일 어드레스를 도출하는 단계, 및
    상기 논리 타일 어드레스 및 물리 타일들에 대한 논리 타일들의 상기 맵핑에 기초하여 물리 타일 어드레스를 발생시키는 단계를 포함하는, 방법.
  23. 다수의 프로그램들에 캐시 내 다수의 타일들을 할당하는 수단으로서, 각 타일이 하나의 프로그램에 할당될 수 있는, 상기 다수의 프로그램들에 캐시 내 다수의 타일들을 할당하는 수단;
    상기 다수의 프로그램들 중 하나의 프로그램으로부터 액세스 요청을 수신하는 수단;
    상기 프로그램에 할당된 적어도 하나의 타일을 식별하는 수단; 및
    상기 프로그램에 할당된 상기 적어도 하나의 타일에 기초하여 캐시 어드레스를 발생시키는 수단을 포함하는, 장치.
  24. 제 23 항에 있어서,
    상기 다수의 프로그램들에 캐시 내 다수의 타일들을 할당하는 수단은,
    상기 다수의 프로그램들에 논리 타일들을 할당하는 수단, 및
    상기 캐시 내의 물리 타일들에 상기 논리 타일들을 맵핑하는 수단을 포함하는, 장치.
  25. 제 24 항에 있어서,
    상기 캐시 어드레스를 발생시키는 수단은,
    상기 프로그램에 대한 프로그램 카운터를 수신하는 수단,
    상기 프로그램 카운터에 기초하여 논리 타일 어드레스를 도출하는 수단, 및
    상기 논리 타일 어드레스 및 상기 물리 타일들에 대한 논리 타일들의 맵핑에 기초하여 물리 타일 어드레스를 발생시키는 수단을 포함하는, 장치.
  26. 그래픽 동작들을 수행하도록 동작하고, 명령 캐시 및 캐시 제어기를 포함하는 그래픽 프로세서를 포함하며,
    상기 명령 캐시는, 다수의 프로그램들을 위한 명령들을 저장하도록 동작하고 다수의 타일들로 분할되며, 각 타일이 하나의 프로그램에 할당될 수 있으며,
    상기 캐시 제어기는, 상기 다수의 프로그램들에 할당된 타일들을 식별하고 상기 명령 캐시를 액세스하기 위한 캐시 어드레스들을 발생시키도록 동작하는, 무선 디바이스.
  27. 제 26 항에 있어서,
    상기 명령 캐시는 다수의 물리 타일들로 분할되고,
    상기 캐시 제어기는, 상기 다수의 프로그램들에 논리 타일들을 할당하고 상기 물리 타일들에 상기 논리 타일들을 맵핑하는, 무선 디바이스.
  28. 제 27 항에 있어서,
    상기 캐시 제어기는,
    일 프로그램에 대한 프로그램 카운터를 수신하고,
    상기 프로그램 카운터에 기초하여 논리 타일 어드레스를 도출하며,
    상기 논리 타일 어드레스 및 물리 타일들에 대한 논리 타일들의 맵핑에 기초하여 물리 타일 어드레스를 발생시키는, 무선 디바이스.
KR1020097003795A 2006-07-25 2007-07-24 다수의 소프트웨어 프로그램을 위한 타일드 캐시 KR20090035001A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/493,444 2006-07-25
US11/493,444 US8035650B2 (en) 2006-07-25 2006-07-25 Tiled cache for multiple software programs

Publications (1)

Publication Number Publication Date
KR20090035001A true KR20090035001A (ko) 2009-04-08

Family

ID=38658538

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097003795A KR20090035001A (ko) 2006-07-25 2007-07-24 다수의 소프트웨어 프로그램을 위한 타일드 캐시

Country Status (6)

Country Link
US (1) US8035650B2 (ko)
EP (1) EP2049986A1 (ko)
JP (1) JP2009545080A (ko)
KR (1) KR20090035001A (ko)
CN (1) CN101495961A (ko)
WO (1) WO2008014289A1 (ko)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8022960B2 (en) * 2007-02-22 2011-09-20 Qualcomm Incorporated Dynamic configurable texture cache for multi-texturing
JP5166955B2 (ja) * 2008-04-24 2013-03-21 キヤノン株式会社 情報処理装置、情報処理方法、及び、情報処理プログラム
US8521963B1 (en) * 2009-09-21 2013-08-27 Tilera Corporation Managing cache coherence
US20120151232A1 (en) * 2010-12-12 2012-06-14 Fish Iii Russell Hamilton CPU in Memory Cache Architecture
CN103309818B (zh) * 2012-03-09 2015-07-29 腾讯科技(深圳)有限公司 存储数据的方法及装置
US9754560B2 (en) * 2012-08-20 2017-09-05 Open Invention Network, Llc Pooling and tiling data images from memory to draw windows on a display device
EP3014472B1 (en) * 2013-06-24 2018-04-18 Hewlett-Packard Enterprise Development LP Generating a logical representation from a physical flow
US9569862B2 (en) * 2014-08-15 2017-02-14 Qualcomm Incorporated Bandwidth reduction using texture lookup by adaptive shading
KR102263326B1 (ko) 2014-09-18 2021-06-09 삼성전자주식회사 그래픽 프로세싱 유닛 및 이를 이용한 그래픽 데이터 처리 방법
KR102354848B1 (ko) 2014-11-28 2022-01-21 삼성전자주식회사 캐시 메모리 장치 및 이를 포함하는 전자 시스템
CA3077811C (en) 2015-03-24 2024-02-27 Illumina, Inc. Methods, carrier assemblies, and systems for imaging samples for biological or chemical analysis
EP3345108B1 (en) * 2015-09-01 2020-11-04 Flex Logix Technologies, Inc. Block memory layout and architecture for programmable logic ic, and method of operating same
US10607390B2 (en) * 2016-12-14 2020-03-31 Nvidia Corporation Techniques for tiling compute work with graphics work
GB2569269B (en) 2017-10-20 2020-07-15 Graphcore Ltd Synchronization in a multi-tile processing arrangement
US10776281B2 (en) * 2018-10-04 2020-09-15 International Business Machines Corporation Snoop invalidate filter for distributed memory management unit to reduce snoop invalidate latency
CN112230845A (zh) 2019-07-15 2021-01-15 美光科技公司 存储器子系统中基于子组写计数的损耗均衡
US11360885B2 (en) * 2019-07-15 2022-06-14 Micron Technology, Inc. Wear leveling based on sub-group write counts in a memory sub-system
CN114063917B (zh) * 2021-11-11 2024-01-30 天津兆讯电子技术有限公司 快速读取程序数据的方法和微控制器
CN117130662A (zh) * 2023-09-19 2023-11-28 摩尔线程智能科技(北京)有限责任公司 一种指令读取方法及l2指令缓存、电子设备和存储介质

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5282274A (en) * 1990-05-24 1994-01-25 International Business Machines Corporation Translation of multiple virtual pages upon a TLB miss
US5559975A (en) * 1994-06-01 1996-09-24 Advanced Micro Devices, Inc. Program counter update mechanism
US6871264B2 (en) * 2002-03-06 2005-03-22 Hewlett-Packard Development Company, L.P. System and method for dynamic processor core and cache partitioning on large-scale multithreaded, multiprocessor integrated circuits
US6912623B2 (en) * 2002-06-04 2005-06-28 Sandbridge Technologies, Inc. Method and apparatus for multithreaded cache with simplified implementation of cache replacement policy
JP4664586B2 (ja) * 2002-11-11 2011-04-06 パナソニック株式会社 キャッシュ制御装置、キャッシュ制御方法、コンピュータシステム
JP2005071046A (ja) * 2003-08-22 2005-03-17 Toyota Motor Corp キャッシュメモリの使用方法
US7117290B2 (en) 2003-09-03 2006-10-03 Advanced Micro Devices, Inc. MicroTLB and micro tag for reducing power in a processor
US7685365B2 (en) * 2004-09-30 2010-03-23 Intel Corporation Transactional memory execution utilizing virtual memory
KR100652705B1 (ko) * 2004-12-30 2006-12-01 엘지전자 주식회사 이동 통신 단말기의 영상 화질 개선 장치 및 그 방법

Also Published As

Publication number Publication date
WO2008014289A1 (en) 2008-01-31
CN101495961A (zh) 2009-07-29
US8035650B2 (en) 2011-10-11
EP2049986A1 (en) 2009-04-22
US20080028152A1 (en) 2008-01-31
JP2009545080A (ja) 2009-12-17

Similar Documents

Publication Publication Date Title
KR20090035001A (ko) 다수의 소프트웨어 프로그램을 위한 타일드 캐시
KR101118486B1 (ko) 온-디맨드 멀티 스레드 멀티미디어 프로세서
EP2648156B1 (en) Method and apparatus with dynamic graphics surface memory allocation
US7533237B1 (en) Off-chip memory allocation for a unified shader
US6856320B1 (en) Demand-based memory system for graphics applications
US8069308B2 (en) Cache pooling for computing systems
US7509391B1 (en) Unified memory management system for multi processor heterogeneous architecture
US8843705B2 (en) Read and write aware cache with a read portion and a write portion of a tag and status array
US7533236B1 (en) Off-chip out of order memory allocation for a unified shader
US11216385B2 (en) Application processor, system-on chip and method of operating memory management unit
CN112540939A (zh) 存储管理装置、存储管理方法、处理器和计算机系统
US20240111669A1 (en) Allocation of memory within a data type-specific memory heap
US9171525B2 (en) Graphics processing unit with a texture return buffer and a texture queue
US20170322887A1 (en) Method to control cache replacement for decoupled data fetch
US9165396B2 (en) Graphics processing unit with a texture return buffer and a texture queue
US20220066946A1 (en) Techniques to improve translation lookaside buffer reach by leveraging idle resources
US20140168227A1 (en) System and method for versioning buffer states and graphics processing unit incorporating the same
JP2008090673A (ja) キャッシュメモリ制御装置
JP2004310739A (ja) 半導体装置

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application