KR100829287B1 - 소프트웨어에 의해 구현되는 캐시 메모리를 제공하는 방법및 장치 - Google Patents

소프트웨어에 의해 구현되는 캐시 메모리를 제공하는 방법및 장치 Download PDF

Info

Publication number
KR100829287B1
KR100829287B1 KR1020067006208A KR20067006208A KR100829287B1 KR 100829287 B1 KR100829287 B1 KR 100829287B1 KR 1020067006208 A KR1020067006208 A KR 1020067006208A KR 20067006208 A KR20067006208 A KR 20067006208A KR 100829287 B1 KR100829287 B1 KR 100829287B1
Authority
KR
South Korea
Prior art keywords
cache
memory
data
processor
processors
Prior art date
Application number
KR1020067006208A
Other languages
English (en)
Other versions
KR20060063977A (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 KR20060063977A publication Critical patent/KR20060063977A/ko
Application granted granted Critical
Publication of KR100829287B1 publication Critical patent/KR100829287B1/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
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • 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/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/601Reconfiguration of cache memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Stored Programmes (AREA)
  • Memory System (AREA)
  • Multi Processors (AREA)

Abstract

본 발명에 따른 방법 및 장치는 데이터 저장용 메인 메모리에 동작시 접속하고 이용할 데이터의 적어도 일부를 요청할 수 있는 프로세서 및 데이터를 프로세서에 의한 이용을 위해 프로세서에 저장될 수 있도록 프로세서와 동작시 접속하고 하드웨어 캐시 메모리가 아닌 로컬 메모리를 제공하며, 프로세서는 소프트웨어에 의해 시동되는 적어도 하나의 캐시 메모리 영역을 포함할 로컬 메모리를 구성하는 애플리케이션 프로그램 인터페이스를 실행하도록 동작한다.
프로세서, 로컬 메모리, 캐시 메모리 영역, 시동, 소프트웨어

Description

소프트웨어에 의해 구현되는 캐시 메모리를 제공하는 방법 및 장치{METHODS AND APPARATUS FOR PROVIDING A SOFTWARE IMPLEMENTED CACHE MEMORY}
본 발명은 외부 시스템 메모리(system memory)에 액세스(access)하는 수단을 갖는 프로세서(processor)의 로컬 메모리(local memory) 내부에 소프트웨어(software)에 의해 구현되는 캐시 메모리(cache memory)를 제공하는 방법 및 장치에 관한 것이다.
실시간 멀티미디어 애플리케이션(multimedia application)들이 점점 더 중요해지고 있다. 이러한 애플리케이션들은 매우 빠른 처리 속도, 예컨대 초당 수천 메가비트(megabit)의 데이터 처리를 요구한다. 일부 처리 시스템들은 빠른 처리 속도를 달성하기 위해서 싱글 프로세서(single processor)를 이용하는 반면에, 다른 처리 시스템들은 멀티-프로세서(multi-processor) 아키텍처(architecture)들을 이용하여 구현된다. 멀티-프로세서 시스템들 내에서, 다수의 서브-프로세서(sub-processor)들은 바람직한 처리 결과들을 획득하기 위해서 병렬로 (또는 적어도 일제히) 동작할 수 있다.
최근에는, 최첨단 컴퓨터 애플리케이션들이 점점 더 복잡해지고 있기 때문에, 더 빠른 컴퓨터 처리 데이터 효율에 대한 만족할 줄 모르는 바램이 존재하게 되었고, 처리 시스템들에 대한 수요가 점점 더 증가하고 있다. 그래픽스 애플리케이션(graphics application)들은 바람직한 비주얼(visual) 결과들을 획득하기 위해서 비교적 짧은 시간 간격 내에서의 방대한 수의 데이터 액세스들, 데이터 계산들, 및 데이터 조작들을 요구하기 때문에, 그래픽스 애플리케이션들은 처리 시스템에 대한 수요가 가장 높다. 종래의 프로세서들은 나노초(nanosecond) 이하에 속하는 매우 빠른 사이클 시간(예컨대, 마이크로프로세서(microprocessor)가 데이터를 조작할 수 있는 시간의 단위)을 갖지만, 메인 메모리(main memory)에 저장된 데이터를 액세스하는 데 요구되는 시간은 마이크로프로세서의 사이클 시간보다 상당히 길 수 있다. 예를 들면, 다이내믹 랜덤 액세스 메모리(Dynamic Random Access Memory; DRAM) 기술을 이용하여 구현되는 메인 메모리로부터 1 바이트(byte)의 데이터를 획득하는 데 요구되는 액세스 시간은 약 100 나노초에 속한다.
DRAM 메모리로의 비교적 긴 액세스 시간에 의해 부과된 보틀넥(bottleneck)을 개선하기 위해서, 이 기술분야에서 통상의 기술을 가진 자들은 캐시 메모리들을 이용한다. 캐시 메모리는 DRAM 메모리보다 상당히 더 빠르고, 메인 메모리에 의해 제공되는 데이터 저장 기능을 증대시킨다. 예를 들면, L2 캐시 메모리가 프로세서에 외부로부터 연결되거나 L1 캐시 메모리가 프로세서와 함께 내부로 연결될 수 있는데, 이러한 메모리들은 DRAM 기술을 이용하여 구현되는 메인(또는 시스템) 메모리보다 상당히 더 빠르다. L2 캐시 메모리는, 예를 들어 DRAM 기술보다 대략 두세배 더 빠른 스태틱 랜덤 액세스 메모리(Static Random Access Memory; SRAM) 기술을 이용하여 구현될 수 있다. L1 캐시 메모리는 L2 캐시 메모리보다 대개 더욱더 빠르다.
캐시 메모리의 비교적 높은 비용으로 인하여, 캐시 메모리들은 메인 메모리보다 일반적으로 더욱더 작다. 이에 따라, 종래의 알고리즘(algorithm)들은 캐시 메모리에 어떤 데이터가 저장되어야 하는지를 결정하는 데 이용된다. 이러한 종래의 알고리즘들은, 예를 들어 큰 실행 가능한 프로그램 및 관련된 데이터의 비교적 작은 부분들이 정해진 시간 내에 어떤 특정 지점에서 사용된다는 사실을 이용하는 "참조의 지역성(locality of reference)"의 이론적 개념을 기초로 할 수 있다. 이와 같이, 참조의 지역성의 개념에 따라서, 전반적으로 실행 가능한 프로그램의 단지 작은 부분들이 정해진 시간 내에 어떤 특정 지점에서 캐시 메모리에 저장된다.
캐시 메모리로의 데이터 저장을 제어하기 위해서, 참조의 지역성을 이용하는 것에 대한 알려진 알고리즘의 특징들 또는 어떤 다른 개념은 이 설명 내에 나타내기에 지나치게 많다. 그러나, 다양한 애플리케이션의 데이터 처리 목적들은 상당히 다를 수 있기 때문에, 어떤 알고리즘도 모든 애플리케이션에 적합하지 않다는 설명으로 충분하다. 또한, 데이터 저장 지역성이 취약하고/하거나 순차적 메모리 액세스가 적은 경우(예를 들면, 요구되는 프로그램 및 데이터의 부분들이 소정 정도로 랜덤하게 위치하는 경우)에서는, 캐시 메모리 구조를 사용하더라도 이점이 거의 없다.
캐시 메모리 구현에 대한 종래의 접근은 칩 상에 위치(L1 캐시)되거나 칩과 분리되어 위치(L2 캐시)되는 하드웨어 캐시 메모리(hardware cache memory)가 필요한데, 이러한 하드웨어 캐시 메모리는 비싸고, 상당한 공간을 차지한다. 따라서, 캐시 메모리 배치를 이용하려는 결정은 심사숙고 없이 이루어질 수 없다. 캐시 메모리 배치가 많은 경우에 유리한 성과를 가져올 것이라는 보증이 없기 때문에, 일부 처리 시스템들은 캐시 메모리 배치를 이용하지 않는다. 그러나, 하드웨어에 의해 구현되는 캐시 메모리를 이용하는 것을 결정할 경우, 참조의 지역성이 어느 정도 있는 경우에는 프로세싱 효율을 제한하는 문제점이 있다.
따라서, 캐시 메모리를 구현하기 위한 새로운 방법 및 장치에 대한 기술이 필요한데, 캐시 메모리를 구현하기 위한 새로운 방법 및 장치에 대한 기술은 비용과 공간의 사용이라는 점에서 불리한 비용 포함들을 초래함이 없이 하드웨어에 의해 구현되는 캐시 메모리의 이점의 적어도 일부를 활용할 수 있다.
처리 태스크(task)들을 실행하기 위한 로컬 메모리 및 시스템 메모리를 구비하며, 기존의 하드웨어 캐시 성능(cache capability)을 갖고 있지 못한 프로세서들에서, 바람직하지 않은 메모리 액세스 지연(memory access latency)이 일어날 수 있다. 이러한 지연 문제에 대한 발명의 솔루션은 프로세서의 로컬 메모리 내부에 소프트웨어에 의해 구현되는 캐시 성능을 제공하는 것이다. 본 발명의 하나 이상의 실시예들에 따르면, 하나 이상의 애플리케이션 프로그래밍 인터페이스(Application Programming Interface; API) 코드(code)를 프로그래밍함으로써 소프트웨어에 의해 구현되는 하나 이상의 다른 캐시 메모리들이 로컬 메모리 내부에서 시동될 수 있다. 더욱이, 다른 캐시 메모리 섹션(section)들의 수, 메모리마다의 캐시 라인(cache line)들의 수, 명령마다의 태그(tag) 비교들의 수, 라인 블록(line block) 크기 및 치환 방침(replacement policy)의 일정 측면들은 API 코드들을 통해 구성될 수 있다. 이는 이러한 파라미터(parameter)들이 고정된 하드웨어에 의한 실행과 비교해 상당한 이점을 제공한다.
본 발명의 적어도 일 실시예에 따른 방법 및 장치는, 조작되거나 다르게 사용되는 프로그램 코드 및 관련된 데이터와 같은, 데이터 저장용 메인 메모리에 동작시 접속을 위한 프로세서를 제공한다. 여기에서, 데이터(data)라는 용어는 애플리케이션 프로그램 코드(application program code), 시스템 레벨 프로그램 코드(system level program code), 조작되거나 다르게 사용되기 위한 데이터, 오퍼랜드 데이터(operand data), 데이터 스트림(data stream)들 등을 포함하도록 널리 정의된다. 프로세서는 사용 및/또는 실행을 위해 데이터의 적어도 일부를 요청하도록 동작한다. 데이터가 프로세서에 의한 이용을 위해 프로세서의 내부에 저장될 수 있도록, 로컬 메모리는 프로세서와 동작시 접속한다. 특히, 로컬 메모리는 하드웨어 캐시 메모리가 아니다. 프로세서는 소프트웨어에 의해 시동되는 적어도 하나의 캐시 메모리 영역을 포함하도록 로컬 메모리를 구성하는 애플리케이션 프로그램 인터페이스 코드를 실행하도록 동작한다. 바람직하게도, 프로세서는 다수의 다른 소프트웨어 캐시 메모리 영역을 시동하도록 동작한다.
더욱이, 프로세서는, 소프트웨어에 의해 시동되는 적어도 하나의 캐시 메모리 영역 내에 포함할 캐시 라인들의 수; 캐시 라인들의 크기; 데이터를 판독/기록(read/write)하기 위한 메인 메모리의 특정 영역들; 상술된 판독/기록 사이클 내의 메인 메모리로부터 판독되거나 메인 메모리에 기록될 수 있는 데이터의 데이터 크기; 및 캐시 라인 치환 방침을 포함하는 파라미터들 중 적어도 어느 하나를 애플리케이션 프로그램 인터페이스 코드를 이용하여 지정하도록 동작하는 것이 바람직하다.
프로세서는, (ⅰ) 캐시 적중률(cache hit ratio)과 캐시 액세스 빈도(cache access frequency) 중 적어도 어느 하나를 기초로 한 캐시 패널티(cache penalty)를 산출하고, (ⅱ) 산출 결과에 응답하여 소프트웨어에 의해 시동되는 캐시 메모리 영역의 파라미터들을 재구성하도록 동작될 수 있다.
다른 실시예들, 특징, 이점 등은 발명의 설명이 수반하는 도면들과 함께 취해지는 경우 기술분야의 통상의 지식을 가진 자에게 분명해질 것이다.
발명의 다양한 실시예들을 나타내기 위해서, 이해하기에 바람직한 도면들이 도시되어 있으나, 발명은 도시되어 있는 정해진 배치들과 수단으로 제한되지 않는다.
도 1은 본 발명의 하나 이상의 실시예들에 따른 처리 시스템을 나타내는 도면이다.
도 2는 본 발명의 하나 이상의 실시예들에 따른 소프트웨어에 의해 시동되는 하나 이상의 캐시 메모리들을 포함하는 도 1의 처리 시스템의 로컬 메모리를 나타내는 도면이다.
도 3은 본 발명의 하나 이상의 실시예들에 따른 도 1의 처리 시스템에 의해 수행될 수 있는 공정 단계들을 나타내는 흐름도이다.
도 4는 본 발명의 하나 이상의 실시예들에 따른 도 1의 처리 시스템에 의해 수행될 수 있는 공정 단계를 더 나타내는 흐름도이다.
도 5는 본 발명의 하나 이상의 실시예들에 따른 소프트웨어에 의해 구현되는 하나 이상의 캐시 메모리들을 갖는 도 2에 도시된 바와 같은 로컬 메모리를 하나 이상 포함할 수 있으며, 둘 이상의 서브-프로세서들을 갖는 멀티-처리 시스템이 구조를 나타내는 도면이다.
도 6은 본 발명의 하나 이상의 실시예들에 따른 멀티-프로세서 시스템을 구현하는데 이용될 수 있는 바람직한 프로세서 요소(Processor Element; PE)를 나타내는 블록도이다.
도 7은 본 발명의 하나 이상의 실시예들에 따른 도 6의 시스템의 전형적인 서브-처리 장치(Sub-Processing Unit; SPU)의 구조를 나타내는 블록도이다.
도 8은 본 발명의 하나 이상의 실시예들에 따른 도 6의 시스템의 처리 장치(Processing Unit; PU)의 구조를 나타내는 블록도이다.
도면을 참조하면, 동일한 부호들은 동일한 요소들을 가리킨다. 도 1은 본 발명의 하나 이상의 실시예들을 이용하기에 적합한 처리 시스템(100)을 도시한다. 간결함과 명쾌함의 목적들을 위해서, 도 1의 블록도가 장치(100)를 나타냄에 따라서 참조되어 설명될 것이나, 설명은 동일한 영향력을 갖는 다양한 측면의 방법에 쉽게 적용될 수 있다. 장치(100)는 프로세서(102), 로컬 메모리(104), 시스템 메모리(106; 예컨대, DRAM) 및 버스(108)를 포함하는 것이 바람직하다.
프로세서(102)는 시스템 메모리(106)로부터 데이터를 요청할 수 있고, 바람직한 결과를 획득하기 위해서 데이터를 조작할 수 있는 알려진 기술들 중 어떤 것이든지 이용하여 구현될 수 있다. 예를 들면, 프로세서(102)는, 스탠더드 마이크로프로세서(standard microprocessor)들, 분산 마이크로프로세서(distributed microprocessor)들 등을 포함하여, 소프트웨어 및/또는 펌웨어(firmware)를 실행할 수 있는 알려진 마이크로프로세서들 중 어떤 것이든지 이용하여 구현될 수 있다. 예로서, 프로세서(102)는, 그레이 스케일(grey scale) 정보, 컬러(color) 정보, 텍스처(texture) 데이터, 폴리곤(polygon)의 정보, 비디오 프레임(video frame) 정보 등을 포함하여, 픽셀 데이터(pixel data)와 같은 데이터를 요청하고 조작할 수 있는 그래픽스 프로세서일 수 있다.
특히, 로컬 메모리(104)는 프로세서(102)와 같이 동일한 칩(chip)에 위치된다. 그러나, 로컬 메모리(104)는, 하드웨어 캐시 메모리 기능을 구현하기 위한 온 칩 또는 오프 칩 하드웨어 캐시 회로(hardware cache circuit)들, 캐시 레지스터(cache register)들, 캐시 메모리 제어기(cache memory controller)들 등이 없다는 점에서, 기존의 하드웨어 캐시 메모리가 아니다. 온 칩 공간은 종종 제한되기 때문에, 로컬 메모리(104)의 크기는 시스템 메모리(106)보다 더욱더 작을 수 있다. 프로세서(102)는 프로그램 실행과 데이터 조작을 위해 시스템 메모리(106)로부터 버스(108)를 통하여 로컬 메모리(104)로 데이터(프로그램 데이터를 포함할 수 있는 데이터)를 카피(copy)하도록 데이터 액세스 요청들을 제공하는 것이 바람직하다. 데이터 액세스를 촉진하기 위한 메커니즘(mechanism)은 다이렉트 메모리 액세스(Direct Memory Access; DMA) 테크닉들과 같은 알려진 테크닉들 중 어떤 것이든지 이용하여 구현될 수 있다.
일부 경우들에 있어서, 로컬 메모리(104)의 제한된 크기는 특정 처리 기능을 완료하도록 시스템 메모리(106)로 다수의 데이터 액세스들을 요청할 수 있다. 예를 들면, 광선 추적법(raytracing; 픽셀 기반 이미지 렌더링(pixel based image rendering))에서 사용되는 잘 알려진 KD-트리 탐색(KD-tree search) 테크닉은 시스템 메모리의 내부에 1 MB의 데이터를 통하여 웰(well)로의 접근을 요청한다. 로컬 메모리는 1 MB보다 더욱더 작을 수 있고(약 256 KB), 로컬 메모리(104)로 카피될 수 있는 데이터의 증분량은 이보다 더욱더 작을 수 있기 때문에(128B), 시스템 메모리(106)로의 다수의 데이터 액세스들이 광선 추적법 기능을 완료하는 데 요청될 수 있다(부수적인 액세스 지연과 함께).
한편, 본 발명의 하나 이상의 실시예에 따르면, 시스템 메모리(106)로의 데이터 액세스들의 수는 로컬 메모리(104) 내부의 소프트웨어에 의해 구현되는 캐시에 의해 축소될 수 있다. 도 2는 처리 시스템(100)의 로컬 메모리(104)의 개념도를 나타낸다. 로컬 메모리(104)는 소프트웨어에 의해 시동되는 하나 이상의 캐시 메모리 영역들(120A, 120B, 120C, . . . 120N)을 포함할 수 있다. 소프트웨어에 의해 시동되는 캐시 메모리 영역들(120) 각각은 프로세서(102)에 의한 애플리케이션 프로그램 인터페이스(API) 코드의 실행에 의해 구현될 수 있다. 다시 한번 말하지만, 로컬 메모리(104)는, 하드웨어 캐시 메모리 기능을 구현하기 위한 온 칩 또는 오프 칩 하드웨어 캐시 회로(hardware cache circuit)들, 캐시 레지스터(cache register)들, 캐시 메모리 제어기(cache memory controller)들 등이 없다는 점에서, 기존의 하드웨어 캐시 메모리가 아니다. 그러나, 소프트웨어에 의해 시동되는 캐시 메모리 영역들(120)은, 이러한 하드웨어를 이용하여 구현되지 않고, 오히려 이러한 영역들이 소프트웨어 코드를 이용하여 형성된다. 예를 들면, 도 3을 참조하면, 프로세서(102)는 API 코드를 이용하여 소프트웨어 캐시(120A)의 다수의 파라미터들을 지정할 수 있다. 동작 300에서, 프로세서(102)는 캐시 엔트리 크기(cache entry size)를 지정할 수 있는데, 캐시 엔트리 크기는 소프트웨어에 의해 시동되는 캐시 메모리 영역(120A)에 포함할 캐시 라인들(122)의 수를 지시한다. 도 2에 도시된 바와 같이, 지정된 라인들의 어떤 수는, 예컨대 4일 수 있다. 또한, 프로세서(102)는 API 코드를 이용하여 라인 크기를 지정할 수 있는데, 라인 크기는 소프트웨어에 의해 시동되는 캐시 메모리 영역(들; 120A∼N) 내부에 각각의 캐시 라인(122)의 범위를 지정한다. 프로그래머(programmer)가 캐시 엔트리 크기와 라인 크기를 지정하도록 프로그램에서 이용할 수 있는 적합한 API 코드는:
char cache_buf[entry][line_size]
와 같이 표현될 수 있다.
또한, 시스템 메모리(106)의 특정 영역들을 정의하도록 시스템 메모리(106) 내부에 위치(일반적으로, 시작 위치)를 정의하기 위해서, 프로세서(102)는 메인 메모리(106)의 시스템 어드레스(system address)를 지정하는 것이 바람직하다(동작 302). 데이터는 이러한 영역들과 소프트웨어에 의해 시동되는 캐시 메모리 영역 (120A) 사이로부터 판독되거나, 사이에 기록된다. 또한, 프로세서(102)는 데이터 요소 전송 크기 (또는 요소 크기)를 지정하도록 동작하는 것이 바람직한데, 데이터 요소 전송 크기는 상술된 판독/기록 사이클 내의 시스템 메모리(106)로부터 판독되거나 시스템 메모리(106)에 기록되는 데이터 크기이다(동작 302). 예를 들면, 메인 메모리(106) 내에 지정된 시스템 어드레스는 1000이 될 수 있고, 데이터 요소 전송 크기는 100이 될 수 있다. 이에 따라, 시스템 메모리(106)는 특정 영역들: 영역 0, 영역 1, 영역 2 등으로 구분될 수 있고, 이 때 영역 0은 어드레스 1000으로부터 어드레스 1099까지에 이르고, 영역 1은 어드레스 1100으로부터 어드레스 1199까지에 이르며, 영역 2는 어드레스 1200으로부터 어드레스 1299까지에 이른다. 따라서, 시스템 메모리(106) 내의 실 어드레스는(real address): 실 어드레스 = 시스템 어드레스(또는 베이스 어드레스(base address)) + (데이터 요소 전송 크기) × 요소 ID와 같이 표현될 수 있다. 요소 ID는 시스템 메모리(106)의 영역들 중 특정한 하나의 영역에 부합하는 숫자인데, 예를 들면 ID = 0은 영역 0에 부합하고, ID = 1은 영역 1에 부합한다. 프로그래머가 시스템 어드레스 및 데이터 요소 크기를 지정하는데 이용할 수 있는 적합한 API 코드는:
void init_cache (unit address, unit size)
와 같이 표현될 수 있다.
주목할 것은, 프로세서(102)는 캐시 메모리의 내부에 데이터를 치환하는 것 에 대한 가장 최근에 사용된(Least Recently Used; LRU) 테크닉이나 다른 잘 알려진 알고리즘들 중 어떤 것들과 같은 데이터(또는 캐시 라인) 치환 방침을 지정하도록 동작하는 것이 바람직하다는 것이다(동작 304). 대안적인 실시예에서, "힌트(hint)"는, 각각의 라인이 치환에 대해 특정한 우선권을 부여하는 것과 같은 것에 의해서, 캐시 라인들이 다른 것들보다 앞서 치환되어야만 한다는 것을 지시할 수 있다. 예를 들면, 소프트웨어 캐시(120A)의 캐시 라인들(122A∼N) 각각은 어떤 라인들이 캐시 내의 다른 라인들보다 앞서는지 또는 다른 라인들의 뒤를 따르는지의 여부를 지시하는 우선 값을 부여받을 수 있다.
일단 캐시 엔트리 크기, 라인 크기, 시스템 어드레스 및 데이터 요소 크기 파라미터들이 API 코드에 의해 수립되면, 프로세서(102)는 로컬 메모리(104) 내부에 소프트웨어에 의해 시동되는 캐시 메모리 영역(102A)을 초기화하고 구성할 수 있다(동작 306). 그 후, 데이터는, 요소 ID를 지정하고 데이터가 판독되는지 또는 기록되는지의 여부를 지시하는 적합한 API 코드를 이용하여 소프트웨어 캐시 영역들(120)로부터 판독되거나 소프트웨어 캐시 영역들(120)에 기록될 수 있다. 프로그래머가 이와 같이 이용할 수 있는 적합한 API 코드는:
void *get_cache (int id, int control)
과 같이 표현될 수 있다.
소프트웨어에 의해 시동되는 캐시 메모리 영역(들)의 초기화 및 구성 후에, 프로세서(102)는 캐시 메모리 기능을 획득하기 위해서 적합한 프로그래밍 코드를 실행할 수 있다. 예를 들면, 도 4에 도시된 바와 같이, 동작 308에서 프로그램 코드는 특정 요소 ID를 지정함으로써 시스템 메모리(106)로부터의 판독을 지시할 수 있다. 동작 310에서, 결정은 바람직한 데이터가 소프트웨어 캐시(120)의 캐시 라인들(122) 중 하나의 내부에 포함되는지의 여부에 따라서 이루어진다. 이는, 각각의 캐시 라인(122)에 캐시 태그들을 부여하고 캐시 태그가 어떤 캐시 라인 내에 저장된 데이터에 부합하는지의 여부가 나타나도록 점검함으로써 획득될 수 있다. 만약 응답이 긍정적이라면, 공정 흐름은 동작 312으로 진행하고, 특정한 캐시 라인(122)의 상태는, 캐시 라인이 히트(hit)인 것을 지시, LRU 값들을 변경, 힌트(또는 우선권) 값들을 변경 등과 같이 수정된다. 그 후, 공정 흐름은 동작 322로 진행하고, 바람직한 데이터가 획득되고 처리될 수 있도록 히트인 캐시 라인의 로컬 메모리 내의 어드레스가 복귀된다.
동작 310으로 다시 향하여, 만약 캐시 태그들 부합과 결정 중 어느 것이든지 부정적이라면, 캐시 부적중(cache miss)이 발생하고, 공정 흐름은 동작 314로 진행한다. 동작 314에서, 치환 방침에 따르면, 캐시 라인이 치환되도록 선택된다. 예를 들면, 만약 가장 최근 사용된 테크닉이 이용된다면, 가장 최근의 히트인 캐시 라인이 선택된다. 동작 316에서, 결정은 선택된 캐시 라인이 순수(clean)한지의 여부에 따라 이루지는데, 캐시 라인이 순수하다는 것은 캐시 라인의 데이터가 수정되지 않았음을 의미한다. 만약 캐시 라인의 데이터가 순수하다면, 공정 흐름은 동작 318로 진행하고, 새로운 데이터는 지정된 요소 ID에 대응하는 시스템 메모리(106)으로부 터 판독되고 선택된 캐시 라인(122)에 저장된다. 그 후, 공정 흐름은 동작 322로 진행하고, 바람직한 데이터가 획득되고 조작될 수 있도록 선택된 캐시 라인의 로컬 메모리의 어드레스가 복귀된다.
동작 316으로 다시 향하여, 만약 선택된 캐시 라인의 데이터가 순수하지 않다면, 공정 흐름은 동작 320으로 진행하고, 캐시 라인의 데이터는 시스템 메모리로 후기록(write back)되고 요소 ID에 의해 지정된 새로운 데이터는 지정된 캐시 라인에 판독되고 기록된다. 그 후, 공정 흐름은 동작 322로 진행하고, 바람직한 데이터가 획득되고 조작되도록 선택된 캐시 라인의 로컬 메모리의 어드레스가 복귀된다.
소프트웨어에 의해 시동되는 캐시 메모리가 이용될 수 있는 더 추가된 예로서, 프로세서(102)는, 예를 들면 DRAM(106)이나 네트워크 접속으로부터 생겨난 데이터 스트림 내부에서, 위치 독립 코드(position independent code)에 대한 참조를 수신할 수 있다(도시되지 않음). 응답으로, 프로세서는 위치 독립 코드가 로컬 메모리(104)의 캐시 메모리 영역(120)에 위치되는지의 여부를 결정하고, 만약 그렇다면 캐시 메모리 영역(120)으로부터 위치 독립 코드를 복구한다. 그 후, 복구된 위치 독립 코드는, 예를 들어 실행 가능한 프로그램 내에서 이용될 수 있다.
주목할 것은, 캐시 메모리 영역을 수반한 소프트웨어를 실행하기 위한 API 코드가 상술된 바에 따라 이용될 수 있는 경우들이 전체적으로 설명하기에 지나치게 많다는 것이다. 한편, 예로서, 소프트웨어에 의해 시동되는 캐시 메모리 영역이 KD 트리 공정의 탐색 내에서 잎 부분의 노드(leaf node)를 찾는 데 있어 유용할 수 있다. 다음의 연산 부호(op-code)는, 프로그래머가 소프트웨어에 의해 시동되는 캐 시 메모리 영역 개념을 이용할 수 있는 방법을 나타낸다:
init _ cache (KDTREE_ADDRESS, sizeof (KDTree));
node = (DKTree*) get _ cache (id, READ);
while (node->nextid != -1) {
id = node->nextid;
node = get _ cache (id, READ);
}
본 발명의 하나 이상의 실시예들에 따르면, 프로세서(102)는 소프트웨어에 의해 시동되는 하나 이상의 캐시 메모리 영역들(120)과 관련된 캐시 적중률(cache hit ratio)과 캐시 액세스 빈도(cache access frequency) 중 적어도 어느 하나를 산출하도록 동작하는 것이 바람직하다. 캐시 적중률로서의 P는, 어느 데이터에 대한 요청들이 이루어진 경우 소프트웨어에 의해 시동되는 주어진 캐시 메모리 영역(120) 내에 바람직한 데이터가 존재할 비율을 지시하는 0과 1 사이의 값이다. 캐시 액세스 빈도로서의 N은 소프트웨어에 의해 시동되는 캐시 메모리 영역(120)이 액세스되는 초당 횟수를 지시하는 값이다. 캐시 패널티(cache penalty)는 다음의 등식:
캐시 패널티 = N × P × Chit + N × (1 - P) × Cmiss
에 따라 산출될 수 있고, Chit은 히트에 대한 캐시 패널티를 나타내고, Cmiss는 부적중(miss)에 대한 캐시 패널티를 나타낸다. 캐시 패널티는 소프트웨어에 의해 시동되는 캐시 메모리 영역(120)이 이익을 제공하고 있는지의 여부를 결정하도록 캐시를 가지지 않고 결합된 패널티와 비교될 수 있다. 만약 이익을 제공하고 있지 않거나 이익이 충분하지 않다면, 이익을 개선하기 위해서, 프로세서(102)는 소프트웨어에 의해 시동되는 캐시 메모리 영역(120)의 파라미터들을 재구성하도록 동작하는 것이 바람직하다. 게다가, 수정될 수 있는 파라미터들은 캐시 라인들의 수, 시스템 메모리의 특정 영역들의 정의(요소 ID), 데이터 요소 전송 크기, 캐시 라인 치환 방침 등을 포함하도록 수정될 수 있다.
예로서, 상술된 소프트웨어 캐시 메모리의 특징들 중 하나 이상을 실행하기에 적합한 프로그램이 아래에 제공된다:
/* 설정 */
#define CACHE_BUF_NUM 4 /* 캐시-웨이 수 */
#define CACHE_BUF_SIZE 15*1024 /* 캐시-뱅크 크기 */
/* 소프트웨어 캐시의 구조 영역 : 4way-SIMD-레지스트로서 이용 */
static vector signed int cache_simd_buf_tag; /* 태그-ID 보존 영역 */
static vector signed int cache_simd_buf_status; /* 상태 보존 영역 */
/* 1:dirty, 0: other */
static vector signed ing cache_simd_buf_tagnum; /* 캐시-라인 수 */
static vector signed int cache_simd_buf_elementsize; /* 캐시-라인 크기 */
static vector unsigned int cache_simd_buf_addr; /* 로컬 저장의 어드레스 */
static vector unsigned int cache_simd_buf_systemaddr; /* 메인 메모리의 어드레스 */
/* 연산용 데이터:스칼라 레지스터로서 이용 */
static unsigned int cache_buf_systemaddr; /* 메인 메모리의 어드레스 */
static unsigned int cache_buf_elementsize; /* 캐시-라인 크기 */
static singed int cache_buf_tagnum; /* 캐시-라인 수 */
/* 캐시 버퍼 영역 */
static char cache_buf[CACHE_BUF_SIZE];
/* 캐시 초기화 */
void init_cache(unsigned int system_address, unsigned int element_size)
/* system_address: 메인 메모리 상의 캐시 선두 어드레스
element_size: 캐시-라인 크기 */
{
/* 입력 값 에러 처리 */
if (element_size > CACHE_BUF_SIZE ││ element_size < 1) {
에러 처리
}
/* 캐시 설정 */
cache_buf_systemaddr = system_address; /* 메인 메모리 상의 캐시 선두 어드레스 */
cache_simd_buf_systemaddr = simd_splats(system_address); /* SIMD 레지스터의 4슬롯으로 설정 */
cache_buf_elementsize = element_size; /* 캐시-라인 크기 */
cache_simd_buf_elementsize = simd_splats(element_size); /* SIMD 레지스터의 4슬롯으로 설정 */
cache_buf_tagnum = CACHE_BUF_SIZE/element_size; /* 캐시-라인 수 */
cache_simd_buf_tag = simd_splats(-1); /* 태그 ID : 초기 값 */
cache_simd_buf_tag = simd_splats(0); /* 상태: 초기 값 */
cache_simd_buf_addr = simd_set(cache_buf[0], cache_buf[1], cache_buf[2], cache_buf[3]; /* 4슬롯으로 어드레스 값 설정 */
}
/* 캐시 액세스 */
void *get_cache_buf(int id, int control)
/* id: 요소ID
control: 0 판독, 1 기록 */
{
슬롯이 'id'와 'cache_simd_buf_tag' 사이에서 일치하는 것을 점검.
/* 캐시-히트 처리 */
복귀 값을 위해 'simd_ret_addr'로 로컬 어드레스 설정
if (첫번째 슬롯의 경우) {
cache_simd_buf_status = simd_insert(control, cache_simd_buf_status, 0); /* 상태 레지스터의 최초 슬롯으로 control 삽입 */
return((void*)simd_extract(simd_ret_addr, 0); /* 로컬 어드레스 레지스터의 첫번째 슬롯 값 복귀 */
}
else if (두번째 슬롯의 경우) {
'cache_simd_buf_tag'의 두번째 슬롯과 첫번째 슬롯을 교체 (LRU 알고리즘)
'cache_simd_buf_status'의 두번때 슬롯과 첫번째 슬롯을 교체(LRU 알고리즘)
'cache_simd_buf_addr'의 두번째 슬롯과 첫번째 슬롯을 교체(LRU 알고리즘)
cache_simd_buf_status = simd_insert(control, cache_simd_buf_status, 0); /* 상태 레지스트의 첫번째 슬롯으로 control 삽입 */
return((void*)simd_extract(simd_ret_addr, 1); /* 로컬 어드레스의 레지스터의 두번째 슬롯 값 복귀 */
}
else if (세번째 슬롯의 경우) {
'cache_simd_buf_tag'의 세번째 슬롯과 첫번째 슬롯 사이의 순환 (LRU 알고리즘)
'cache_simd_buf_status'의 세번째 슬롯과 첫번째 슬롯 사이의 순환 (LRU 알고리즘)
'cache_simd_buf_addr'의 세번째 슬롯과 첫번째 슬롯 사이의 순환 (LRU 알고리즘)
cache_simd_buf_status = simd_insert(control, cache_simd_buf_status, 0); /* 상태 레지스터의 첫번째 슬롯으로 control 삽입 */
return((void*)simd_extract(simd_ret_addr, 2); /* 로컬 어드레스 레지스터 의 세번째 슬롯 값 복귀 */
}
else if (네번째 슬롯의 경우) {
'cache_simd_buf_tag'의 네번째 슬롯과 첫번째 슬롯 사이의 순환 (LRU 알고리즘)
'cache_simd_buf_status'의 네번째 슬롯과 첫번째 슬롯 사이의 순환 (LRU 알고리즘)
'cache_simd_buf_addr'의 네번째 슬롯과 첫번째 슬롯 사이의 순환 (LRU 알고리즘)
cache_simd_buf_status = simd_insert(control, cache_simd_buf_status, 0); /* 상태 레지스터의 첫번째 슬롯으로 control 삽입 */
return((void*)simd_extract(simd_ret_addr, 3); /* 로컬 어드레스 레지스터의 네번째 슬롯 값 복귀 */
}
/* 캐시 부적중 처리: 네번째 슬롯 치환 */
cache_buf_addr = simd_extract(cache_simd_buf_addr, 3); /* 네번째 슬롯으로부터 캐시-로컬-어드레스 취득 */
if (캐시-상태가 기록되는 경우) {
/* 후기록 처리 */
cache_buf_tag = simd_extract(cache_simd_buf_tag, 3); /* 네번째 슬롯으로부터 태그ID 취득 */
system_address = cache_buf_systemaddr + cache_buf_tag * cache_buf_elementsize; /* 메인 메모리의 타깃 어드레스 산출 */
'cache_buf_addr'에 의해 지적된 로컬 저장 데이터로부터 'system_adress'에 의해 지적된 메인 메모리 데이터로 DMA 이행
'cache_simd_buf_status'의 네번째 슬롯의 상태 변경
}
/* 캐시 리필*/
new_tag = (id/cache_buf_tagnum)*cache_buf_tagnum;
system_address = cache_buf_systemaddr + new_tag*cache_buf_elementsize;
'cache_buf_addr'에 의해 지적된 로컬 저장 영역으로부터 'system_address'에 의해 지적된 메인 메모리 영역으로 DMA 이행
cache_simd_buf_tag = simd_insert(new_tag, cache_simd_buf_tag, 3); /* 네번째 슬롯으로 새로운 태그 설정 */
cache_simd_buf_status = simd_insert(control, cache_simd_buf_status, 3); /* 네번째 슬롯으로 새로운 상태 설정 */
return_address = cache_buf_addr + (id - new_tag) * cache_buf_elementsize;
return ((void*)return_address);
도 5를 참조하면, 도 1 내지 4에 대하여 상술된 개념들은 버스(108)에 의해 상호 연결된 다수의 프로세서들(102A∼D), 관련된 로컬 메모리들(104A∼D) 및 메인 메모리(106)를 포함하는 멀티-처리 시스템(100A)에 적용될 수 있다. 비록 네 개의 프로세서들(102)이 예로서 도시되었으나, 본 발명의 의도와 목적으로부터 분리되지 않는 범위 내의 어떠한 수의 프로세서들(102)도 이용될 수 있다. 프로세서들(102)은 알려진 기술들 중 어떤 것을 가지고 구현될 수 있고, 각각의 프로세서는 유사한 구조 또는 다른 구조일 수 있다.
멀티-프로세서 시스템용 바람직한 컴퓨터 아키텍처의 설명이 상술된 특징들 중 하나 이상을 수행하기에 적합한 것을 제공할 것이다. 하나 이상의 실시예들에 따르면, 멀티-프로세서 시스템은, 게임 시스템(game system)들, 가정용 단말기(home terminal)들, 개인용 컴퓨터 시스템(PC system)들, 서버 시스템(server system)들 및 워크스테이션(workstation)들과 같은 미디어-리치 애플리케이션(media-rich application)들의 독립 및/또는 분산 처리를 위해 사용할 수 있는 단일-칩 솔루션으로서 구현될 수 있다. 게임 시스템들과 가정용 단말기들과 같은 일부 애플리케이션들에서, 실시간 컴퓨팅(computing)은 필수이다. 예를 들면, 실시간에서, 분산 게이밍 애플리케이션(distributed gaming application), 하나 이상의 네트워킹 이미지 풂(networking image decompression), 3D 컴퓨터 그래픽들, 오디 오 제너레이션(audio generation), 네트워크 통신들, 물리적 시뮬레이션(physical simulation) 및 인공 지능 공정들은 실시간 경험의 일루전(illusion)을 이용자에게 제공하기에 충분히 빠르게 실행되어야 한다. 게다가, 멀티-프로세서 시스템의 각각의 프로세서는 짧고 예측가능한 시간 내에 태스크들을 완료해야 한다.
그리고, 끝으로, 이러한 컴퓨터 아키텍처에 따르면, 멀티-처리 컴퓨터 시스템의 모든 프로세서들은 공동의 컴퓨팅 모듈(또는 셀)로부터 구성된다. 이러한 공동의 컴퓨팅 모듈은 조화되는 구조를 가지며, 동일한 명령어 집합 아키텍처(instruction set architecture)를 이용하는 것이 바람직하다. 멀티-처리 컴퓨터 시스템은, 하나 이상의 클라이언트들, 서버들, PC들, 모바일 컴퓨터들, 게임 기계들, PDA들, 신호 변환 장치(set top box)들, 어플라이언스(appliance)들, 디지털 텔레비전들 및 컴퓨터 프로세서들을 이용하는 다른 장치들로 형성될 수 있다.
또한, 다수의 컴퓨터 시스템들은, 바랜다면, 네트워크의 구성요소들일 수 있다. 조화된 모듈러 구조는 멀티-처리 컴퓨터 시스템에 의해 애플리케이션들과 데이터의 효율적이고 고속의 처리 기능을 하고, 네트워크가 이용된다면, 네트워크를 통하여 애플리케이션들과 데이터의 신속한 전송 기능을 한다. 또한, 이러한 구조는 다양한 크기들과 처리 전력의 네트워크의 구성요소의 빌딩(building)과 이러한 구성요소들에 의한 처리를 위해 애플리케이션들의 준비를 간소화한다.
도 6을 참조하면, 베이직 처리 모듈은 프로세서 요소(PE; 500)이다. PE(500)는 입출력 인터페이스(I/O interface; 502), 처리 장치(PU; 504) 및 다수의 서브-처리 장치들(508)로 이루어진다. 로컬(또는 내부) PE 버스(512)는 PU(504), 서브- 처리 장치들(508) 및 메모리 인터페이스(511)로 데이터 및 애플리케이션들을 전송한다. 로컬 PE 버스(512)는, 예컨대 종래의 아키텍처를 가질 수 있거나, 패킷 교환 방식 네트워크(packet-switched network)로서 구현될 수 있다. 만약 패킷 교환 방식 네트워크로서 구현된다면, 더 많은 하드웨어를 요구하는 반면에 이용 가능한 대역폭(bandwidth)이 증가한다.
PE(500)는 디지털 논리를 구현하기 위한 다양한 방법들을 이용하여 구성될 수 있다. 한편, PE(500)는 실리콘 기판 상의 상보성 금속 산화막 반도체(Complementary Metal Oxide Semiconductor; CMOS)를 이용하는 단일 집적 회로로서 구성된다. 기판들용 대안 물질들은 갈륨 아시나이드(gallium arsinide), 갈륨 알루미늄 아시나이드(gallium aluminum arsinide) 및 광범위한 종류의 도펀트(dopant)들을 이용하는 소위 III-B 화합물들을 포함한다. 또한, PE(500)는 초전도 물질, 예컨대 초고속 단자속양자(Rapid Single-Flux-Quantum; RSFQ) 논리를 이용하여 구현될 수 있다.
PE(500)는 높은 대역폭의 메모리 접속(516)을 통해 공유(메인) 메모리(514)에 밀접하게 결합된다. 비록 메모리(514)가 다이내믹 랜덤 액세스 메모리(DRAM)인 것이 바람직하나, 메모리(513)는, 예컨대 스태틱 랜덤 액세스 메모리(SRAM), 마그네틱 랜덤 액세스 메모리(Magnetic Random Access Memory; MRAM), 광 메모리(optical memory), 홀로그래픽 메모리(holographic memory) 등과 같은 다른 수단들을 이용하여 구현될 수 있다.
PU(504)와 서브-처리 장치들(508)은, 다이렉트 메모리 액세스(DMA) 기능을 포함하는 메모리 흐름 제어기(Memory Flow Controller; MFC)에 각각 연결되는 것이 바람직한데, MFC는, 메모리 인터페이스(511)와 결합하여, DRAM(514) 및 PE(500)의 서브-처리 장치들(508)과 PU(504)의 사이의 데이터 전송을 원활하게 한다. 주목할 것은, DMAC 및/또는 메모리 인터페이스(511)는 서브-처리 장치들(508)과 PU(504)에 대하여 완전하게 또는 부분적으로 분산될 수 있다는 것이다. 실제로, DMAC 기능 및/또는 메모리 인터페이스(511) 기능은 서브-처리 장치들(508)과 PU(504)의 하나 이상(바람직하게는 모두)을 가지고 완전할 수 있다. 또한, 주목할 것은, DRAM(514)는 PE(500)에 대하여 완전하게 또는 부분적으로 분산될 수 있다는 것이다. 예를 들면, DRAM(514)는, 도시된 바와 같이, 칩과 분리되어 배치될 수 있거나, 집적되는 방법 내에서 칩 상에 배치될 수 있다.
PU(504)는, 예컨대 데이터와 애플리케이션들의 독립 처리가 가능한 표준 프로세서일 수 있다. 동작중, PU(504)는 서브-처리 장치들에 의해 데이터와 애플리케이션들의 처리를 예정하고 조정하는 것이 바람직하다. 서브-처리 장치들은 단일 명령 복수 데이터(Single Instruction Multiple Data; SIMD) 프로세서들인 것이 바람직하다. PU(504)의 제어하에서, 서브-처리 장치들은 병렬 및 독립 방식으로 이러한 데이터와 애플리케이션들의 처리를 수행한다. PU(504)는 파워 PC 코어(PowerPC core)를 이용하여 구현되는 것이 바람직한데, 파워 PC 코어는 축소 명령 집합 컴퓨팅(Reduced Instruction-Set Computing; RISC) 테크닉을 이용하는 마이크로프로세서 아키텍처이다. RISC는 단순한 명령들의 결합들을 이용하여 더 복잡한 명령들을 수행한다. 게다가, 프로세서용 타이밍(timing)은, 마이크로프로세서가 주어진 클록 속도(clock speed)를 위해 더 많은 명령들을 수행할 수 있도록 하는데, 더 단순하고 더 빠른 동작들을 기초로 할 수 있다.
주목할 것은, PU(504)는 서브-처리 장치들(508)에 의해 데이터와 애플리케이션들의 처리를 예정하고 조정하는 메인 처리 장치의 역할을 취하는 서브-처리 장치들(508) 중 어느 하나에 의해 구현될 수 있다는 것이다. 더욱이, 프로세서 요소(500)의 내부에 구현되는 PU가 하나 이상 존재할 수 있다.
이러한 모듈러 구조에 따르면, 특정한 컴퓨터 시스템에 의해 이용되는 PE(500)들의 수는 그 시스템에 의해 요청되는 처리 전력에 기초한다. 예를 들면, 서버는 네 개의 PE(500)들을 이용할 수 있고, 워크스테이션은 두 개의 PE(500)들을 이용할 수 있으며, PDA는 하나의 PE(500)를 이용할 수 있다. 특정한 소프트웨어 셀을 처리하는데 부여된 PE(500)의 서브-처리 장치들의 수는 셀 내부의 프로그램들과 데이터의 복잡성과 중요성에 좌우된다.
도 7은 서브-처리 장치(SPU; 508)의 바람직한 구조와 기능을 도시한다. SPU(508) 아키텍처는 (다수의 애플리케이션들 상의 높은 평균 성능을 획득하도록 계획된 )범용 프로세서들과 (단일 애플리케이션 상의 높은 성능을 획득하도록 계획된 )특수 목적용 프로세서들 사이의 공간을 채우는 것이 바람직하다. SPU(508)는 게임 애플리케이션들, 미디어 애플리케이션들, 광대역 시스템들 등 상의 높은 성능을 획득하고, 실시간 애플리케이션들의 프로그래머들에게 제어의 높은 정도를 제공하도록 계획된다. SPU(508)의 일부 가능성은 그래픽스 기하학 파이프라인(graphics geometry pipeline)들, 표면 분할, 고속 푸리에 변환(Fast Fourier Transform)들, 이미지 처리 키워드들, 스트림 처리, MPEG 부호화/해독화(encoding/decoding), 암호화(encryption), 복호화(decryption), 장치 드라이버 확장자(device driver extension)들, 모델링(modeling), 게임 물리학(game physics), 콘텐트 생성(content creation) 및 오디오 합성과 처리를 포함한다.
서브-처리 장치(508)는 두 개의 베이직 기능 장치들, 즉 SPU 코어(510A)와 메모리 흐름 제어기(MFC; 510B)를 포함한다. SPU 코어(510A)는 프로그램 실행, 데이터 조작 등을 수행하는 데 반해, MFC(510B)는 SPU 코어(510A)와 시스템의 DRAM(514)의 사이의 데이터 전송과 관련된 기능을 수행한다.
SPU 코어(510A)는 로컬 메모리(550), 명령 장치(IU; 552), 레지스터들(554), 하나 이상의 부동 소수점 실행 스테이지들(556) 및 하나 이상의 고정 소수점 실행 스테이지들(558)을 포함한다. 로컬 메모리(550)는 SRAM과 같은 포트가 하나인(single-ported) 랜덤 액세스 메모리를 이용하여 구현되는 것이 바람직하다. 캐시들을 이용함으로써, 프로세서들이 메모리로의 지연을 경감시키므로, SPU 코어(510A)는 캐시보다 비교적 작은 로컬 메모리(550)를 구현한다. 실제로, 실시간 애플리케이션들(및 기술된 다른 애플리케이션들)의 프로그래머들을 위해 조화되고 예측가능한 메모리 액세스 지연을 제공하기 위해서, SPU(508A) 내부의 캐시 메모리 아키텍처는 바람직하지 않다. 캐시 메모리의 캐시 히트/부적중 특징들은, 몇 사이클들로부터 몇백 사이클들로의 변경에 따라서, 휘발성 메모리 액세스 시간으로 끝난다. 어떤 휘발성은 바람직한 액세스 타이밍 예측성, 예를 들어 실시간 애플리케이션 프로그래밍을 약화시킨다. 지연 감춤(hiding)은 데이터 산출을 가지고 DMA 전 송들을 겹치기(overlapping)함으로써, 로컬 메모리 SRAM(550)에서 획득될 것이다. 이는 실시간 애플리케이션들의 프로그래밍을 위한 제어의 높은 정도를 제공한다. DMA 전송들과 오버헤드 결합된 지연과 명령이 캐시 부적중을 서비스하는 것의 지연을 초과하기 때문에, SRAM 로컬 메모리 어프로치는, DMA 전송 크기가 충분히 크고 충분히 예측가능한 경우(예컨대, 데이터가 요구되기 전에, DMA 명령이 발행될 수 있다)에, 이점을 획득한다
서브-처리 장치들(508) 중 주어진 어느 하나 상의 프로그램 러닝은 로컬 어드레스를 이용하여 관련된 로컬 메모리(550)를 참조하는 한편, 로컬 메모리(550)의 각각의 위치는, 또한 전반적인 시스템의 메모리 맵(map) 내부에 실 어드레스(RA)를 부여한다. 이는 권한 소프트웨어(Privilege Software)가, 하나의 로컬 메모리(550)와 또 다른 로컬 메모리(550) 사이의 DMA 전송들을 활성화하기 위해서, 공정의 유효 어드레스(Effective Address; EA)로 로컬 메모리(550)를 맵하는 것을 허가한다. 또한, PU(504)는 유효 어드레스를 이용하여 로컬 메모리(550)를 직접 액세스할 수 있다. 바람직한 실시예에서, 로컬 메모리(550)는 556 킬로바이트의 스토리지를 포함하고, 레지스터들(552)의 용량은 128×128 비트이다.
SPU 코어(504A)는 처리 파이프라인을 이용하여 구현되는 것이 바람직한데, 이 때, 논리 명령들은 파이프라인 방식으로 처리된다. 비록 명령들이 처리되는 경우에 파이프라인이 어떤 수의 스테이지들로 나뉘더라도, 파이프라인은 일반적으로, 하나 이상의 명령들 인출, 명령들 해독, 명령들 사이의 종속성 점검, 명령들 발행 및 명령들 실행을 포함한다. 이와 관련하여, IU(552)는 명령 버퍼, 명령 해독 회 로, 종속성 점검 회로 및 명령 발행 회로를 포함한다.
명령 버퍼는, 로컬 메모리(550)에 연결되고 인출된 명령들을 일시적으로 저장할 수 있는 다수의 레지스터들을 포함하는 것이 바람직하다. 명령 버퍼는, 모든 명령들이 한 집단으로서의 레지스터들로부터, 예컨대 실질적으로 동시에, 나오도록 동작하는 것이 바람직하다. 비록 명령 버퍼가 어떤 크기이더라도, 명령 버퍼는 약 둘 또는 셋의 레지스터들보다 크지 않은 크기인 것이 바람직하다.
일반적으로, 해독 회로는 명령들을 브레이크 다운(break down)하고, 부합하는 명령의 기능을 수행하는 논리 마이크로-동작(logical micro-operation)들을 발생시킨다. 예를 들면, 논리 마이크로-동작들은 산술 논리 동작(arithmetic and logical operation)들, 로컬 메모리(550)로의 로드 동작들과 저장 동작들, 레지스터 원시 오퍼랜드(source operand)들 및/또는 즉시 데이터 오퍼랜드(immediate data operand)들을 지정할 수 있다. 또한, 해독 회로는 명령을 이용하는, 예컨대 타깃 레지스터 어드레스(target register address)들, 조직 리소스(resource)들, 기능 장치들 및/또는 버스들과 같은 리소스들을 지시할 수 있다. 또한, 해독 회로는 리소스가 요구되는 명령 파이프라인 스테이지들을 지시하는 정보를 공급할 수 있다. 명령 해독 회로는 명령 버퍼의 레지스터들의 수와 동일한 명령들의 수를 실질적으로 동시에 해독하도록 동작하는 것이 바람직하다.
종속성 점검 회로는, 주어진 명령의 오퍼랜드들이 파이프라인의 다른 명령들의 오퍼랜드들에 종속되는지의 여부를 결정하기 위해 테스트를 수행하는 디지털 논리를 포함한다. 만약 종속된다면, 주어진 명령은 어떤 다른 명령들이 갱신될 때까 지(예컨대, 다른 명령들이 실행을 완료하도록 허가함으로써) 실행되지 않아야 한다. 종속성 점검 회로는, 해독 회로(112)로부터 동시에 배정된 다양한 명령들의 종속성들을 결정하는 것이 바람직하다.
명령 발행 회로는 부동 소수점 실행 스테이지들(556) 및/또는 고정 소수점 실행 스테이지들(558)로 명령들을 발행하도록 동작한다.
레지스터들(554)은, 128-엔트리 레지스터 파일과 같은 비교적 큰 단일화된 레지스터 파일로서 구현되는 것이 바람직하다. 이는 레지스터 결핍을 피하기 위해서 레지스터에 새 이름을 부여할 필요없이 깊은 파이프라인 고주파수 실행들을 고려한다. 새 이름을 부여하는 하드웨어는 전형적으로 처리 시스템의 영역과 전력의 상당한 부분을 소비한다. 이에 따라, 지연들이 소프트웨어 루프 펴짐(unrolling) 또는 다른 인터리빙(interleaving) 테크닉들에 의해 보상되는 경우, 유리한 동작이 획득될 수 있다.
바람직하게는, 클록 사이클마다 하나 이상의 명령이 발행되기 위해서, SPU 코어(510A)는 슈퍼스칼라 아키텍처(superscalar architecture)이다. SPU 코어(510A)는, 2와 3의 사이(둘 또는 셋의 명령들이 각각의 클록 사이클에 발행되는 것을 의미하는)와 같은 명령 버퍼로부터 동시의 명령 발행들의 수에 대응하는 정도로 슈퍼스칼라로서 동작하는 것이 바람직하다. 요구되는 처리 전력에 따라서, 부동 소수점 실행 스테이지들(556)과 고정 소수점 실행 스테이지들(558)들의 더 많은 또는 더 적은 수가 이용될 수 있다. 바람직한 실시예에서, 부동 소수점 실행 스테이지들(556)은 초당 320억 부동 소수점 연산들의 속도(32 GFLOPS)로 동작하고, 고정 소수 점 실행 스테이지들(558)은 초당 320억 연산들의 속도(32 GOPS)로 동작한다.
MFC(510B)는 버스 인터페이스 장치(BIU; 564), 메모리 관리 장치(MMU; 562) 및 직접 메모리 액세스 제어기(DMAC; 560)를 포함한다. DMAC(560)는 제외하고, MFC(510B)는, 낮은 전력 손실 설계 목적들에 부합하도록 SPU 코어(510A) 및 버스(512)와 비교하여 반주파수(반속도)로 실행하는 것이 바람직하다. MFC(510B)는 버스(512)로부터 SPU(508)로 도달하는 데이터와 명령들을 처리하도록 동작하고, DMAC를 위한 어드레스 변환 및 데이터 간섭성을 위한 스누프-동작들을 제공한다. BIU(564)는 버스(512)와 MMU(562) 및 DMAC(560) 사이의 인터페이스를 제공한다. 게다가, SPU(508; SPU 코어(510A)와 MFC(510B)를 포함하는)와 DMAC(560)는 버스(512)로 물리적 및/또는 논리적으로 접속된다.
MMU(562)는 메모리 액세스용 실 어드레스들로 유효 어드레스들(음 명령들로부터 취해진)을 변환하도록 동작하는 것이 바람직하다. 예를 들면, MMU(562)는 유료 어드레스의 고차 비트들(higher order bits)을 실 어드레스 비트들로 변환할 수 있다. 한편, 저차 어드레스 비트들(lower-order address bits)은 변환되지 않고, 실 어드레스를 형성하기 휘한 이용과 메모리로의 액세스 요청을 위한 논리적이고 물리적으로 고려되는 것이 바람직하다. 하나 이상의 실시예들에서, MMU(562)는 64-비트의 메모리 관리 모델에 기초하여 구현될 수 있고, 4K-바이트, 64K-바이트, 1M-바이트 및 16M-바이트의 페이지 크기들과 256MB 분할 크기들을 갖는 264 바이트의 효율적인 어드레스 공간을 제공할 수 있다. 바람직하게는, MMU(562)는, DMA 명령들 을 위해, 265 바이트까지의 가상 메모리 및 242 바이트(4 테라바이트(TeraBytes))까지의 물리적 메모리를 지원하도록 동작한다. MMU(562)의 하드웨어는 8-엔트리의 전체적인 연상 SLB, 256-엔트리의 4웨이 세트 연상 TLB 및 하드웨어 TLB 부적중 처리를 위해 이용되는 TLB용 4×4 치환 관리 테이블(Replacement Management Table; RMT)을 포함할 수 있다.
DMAC(560)은 SPU 코어(510A)와 PU(504) 및/또는 다른 SPU들과 같은 하나 이상의 다른 장치들로부터의 DMA 명령들을 관리하도록 동작하는 것이 바람직하다. DMA 명령들의 세 가지 카테고리들: 로컬 메모리(550)로부터 공유 메모리(514)로 데이터를 이동하는데 사용하는 Put 명령들; 공유 메모리(514)로부터 로컬 메모리(550)로 데이터를 이동하도록 동작하는 Get 명령들; 및 SLI 명령들과 동조 명령들을 포함하는 저장 제어 명령들;일 수 있다. 동조 명령들은 원자 명령(atomic command)들, 송출 신호 명령(send signal command)들 및 전용 배리어 명령(dedicated barrier)들을 포함할 수 있다. DMA 명령들에 대하여, MMU(562)는 실 어드레스로 유효 어드레스를 변환하고, 실 어드레스는 BIU(564)로 전송된다.
SPU 코어(510A)는 DMAC(560) 내부의 인터페이스를 가지고 통신(DMA 명령들, 상태 등을 송신)하는 데 채널 인터페이스와 데이터 인터페이스를 이용하는 것이 바람직하다. SPU 코어(510A)는 DMAC(560)의 DMA 대기열로 채널 인터페이스를 통하여 DMA 명령들을 배정한다. 일단 DMA 명령이 DMA 대기열에 있으면, DMA 명령은 DMAC(560) 내부의 발행 및 완료 논리에 의해 처리된다. DMA 명령을 위한 모든 버스 변환들이 완료된 경우, 완료 신호는 채널 인터페이스를 통하여 SPU 코어(510A)로 후송출된다.
도 8은 PU(504)의 바람직한 구조 및 기능을 도시한다. PU(504)는 두 개의 베이직 기능 장치들, PU 코어(504A) 및 메모리 흐름 제어기(MFC; 504B)를 포함한다. PU 코어(504A)는 프로그램 실행, 데이터 조작, 멀티-프로세서 관리 기능들 등을 수행하는 한편, MFC(504B)는 PU 코어(504A)와 시스템(100)의 메모리 공간 사이의 데이터 변환과 관련된 기능들을 수행한다.
PU 코어(504A)는 L1 캐시(570), 명령 장치(572), 레지스터들(574), 하나 이상의 부동 소수점 실행 스테이지(576) 및 하나 이상의 고정 소수점 실행 스테이지들(578)을 포함할 수 있다. L1 캐시는, 공유 메모리(106), 프로세서들(102) 또는 MFC(504B)를 통한 메모리 공간의 다른 부분들로부터 수신된 데이터에 데이터 캐싱 기능성을 제공한다. PU 코어(504A)는 슈퍼파이프라인(superpipeline)으로서 구현되는 것이 바람직하기 때문에, 명령 장치(572)는, 불러옴, 복호화, 종속성 점검, 발행 등을 포함하는 다수의 스테이지들을 가진 명령 파이프라인으로서 구현되는 것이 바람직하다. 또한, PU 코어(504A)는 슈퍼스칼라 구성인 것이 바람직하여, 클록 사이클당 명령 장치(572)로부터 하나 이상의 명령이 발행된다. 높은 처리 전력을 획득하기 위해서, 부동 소수점 실행 스테이지들(576)과 고정 소수점 실행 스테이지들(578)은 파이프라인 구성의 다수의 스테이지들을 포함한다. 요구되는 처리 전력에 따라서, 더 많은 또는 더 적은 수의 부동 소수점 실행 스테이지들(576)과 고정 소수점 실행 스테이지들(578)이 이용될 수 있다.
MFC(504B)는 버스 인터페이스 장치(BIU; 580), L2 캐시 메모리, 캐시할 수 없는 장치(Non-Cachable Unit; NCU; 584), 코어 인터페이스 장치(Core Interface Unit; CIU; 586) 및 메모리 관리 장치(MMU; 588)를 포함한다. 낮은 전력 손실 설계 목적들에 부합하도록, 대부분의 MFC(504B)는 PU 코어(504A) 및 버스(108)와 비교하여 반주파수(반속도)로 실행한다.
BIU(580)는 버스(108) 및 L2 캐시(582)와 NCU(584) 논리 블록들 사이의 인터페이스를 제공한다. 끝으로, 간섭성 메모리 동작들을 완전하게 수행하기 위해서, BIU(580)는 버스(108) 상에서 모장치(Master device) 뿐만 아니라 자장치(Slave device)로서 동작할 수 있다. 모장치로서의 BIU(580)는 L2 캐시(582)와 NCU(584)를 대신하여 서비스를 위해 버스(108)로 로드/저장 요청들을 발신할 수 있다. 또한, BIU(580)는 버스(108)로 전송될 수 있는 총 명령들의 수를 제한하는 명령들용 흐름 제어 메커니즘을 실행할 수 있다. 버스(108)상의 데이터 동작들은 8 비트(beat)로 설계될 수 있고, 이에 따라, BIU(580)은 128 바이트의 캐시-라인들과 간섭성을 우회하여 설계되는 것이 바람직하고, 동기화 정밀성(synchronization granularity)은 128KB이다.
L2 캐시 메모리(582)(와 하드웨어 논리 지원)는 512KB의 데이터를 캐시로 설계하는 것이 바람직하다. 예를 들면, L2 캐시(582)는 캐시할 수 있는 로드들/저장들, 데이터 이전-인출(data pre-fetch)들, 명령 인출들, 명령 이전-인출들, 캐시 동작들 및 배리어 동작들을 처리할 수 있다. L2 캐시(582)는 8-웨이 세트 연상 시스템인 것이 바람직하다. L2 캐시(582)는 6개의 캐스트아웃 대기열들(예컨대, 6개 의 RC 기계들) 및 8개의(64-바이트 와이드) 저장 대기열들에 부합하는 6개의 리로드(reload) 대기열을 포함할 수 있다. L2 캐시(582)는 L1 캐시(570) 내의 데이터의 일부 또는 전부의 백업 카피를 제공하도록 동작할 수 있다. 유리하게도, 처리 노드들이 핫 교체(hot-swap)된 경우, 이러한 L2 캐시(582)는 상태(들)를 재저장하는 데 유용하다. 또한, 이러한 구성은 L1 캐시(570)가 보다 소수의 포트들을 가지고 더 빠르게 동작하는 것을 가능하게 하고, 더 빠른 캐시 간 변환들을 가능하게 한다(요청들이 L2 캐시(582)에서 정지할 수 있기 때문에). 또한, 이러한 구성은 L2 캐시 메모리(582)로 캐시 간섭성 관리가 통과하도록 메커니즘을 제공한다.
NCU(584)는 CIU(586), L2 캐시 메모리(582) 및 BIU(580)와 인터페이스하고, PU 코어(504A)와 메모리 시스템 사이의 캐시할 수 없는 동작들을 위한 대기/버퍼링 회로로서 일반적으로 기능을 한다. NCU(584)는, 캐시-억제 로드/저장들, 배리어 동작들 및 캐시 간섭성 동작들과 같은 L2 캐시(582)에 의해 처리되지 않는 PU 코어(504A)를 가지고 모든 통신들을 처리하는 것이 바람직하다. NCU(584)는 상술된 전력 손실 목적들에 부합하도록 반속도로 실행되는 것이 바람직하다.
CIU(586)는 MFC(504B)와 PU 코어(504A)의 경계에 배치되고, 실행 스테이지들(576, 578), 명령 장치(572) 및 MMU 장치(588)로부터 도달되고 L2 캐시(582)와 NCU(584)로 진행하는 요청들을 위한 라우팅(routing), 중재(arbitration) 및 흐름 기준점(flow control point)으로서 기능을 한다. PU 코어(504A)와 MMU(588)는 전속력으로 실행하는 것이 바람직한 반면에, L2 캐시(582)와 NCU(584)는 2:1의 속력 비율로 사용한다. 게다가, 주파수 경계(frequency boundary)는 CIU(586) 내에 존재하 고, 주파수 경계의 기능들 중 어느 하나는 두 개의 주파수 도메인(domain)들 사이의 데이터 요청들과 리로드들을 촉진시킴으로써, 주파수 교차를 적절하게 처리하는 데 있다.
CIU(586)는 세 개의 기능 블록들: 로드 장치, 저장 장치 및 리로드 장치로 구성된다. 더욱이, 데이터 이전-인출 기능은 CIU(586)에 의해 수행되고, 로드 장치의 일부 기능인 것이 바람직하다. CIU(586)는: (ⅰ) PU 코어(504A)와 MMU(588)로부터의 로드 및 저장 요청들 수용; (ⅱ) 전속력 클록 주파수로부터 반속도로 요청들 변환(2:1 클록 주파수 변환); (ⅲ) L2 캐시(582)로 캐시할 수 있는 요청들 발송 및 NCU(584)로 캐시할 수 없는 요청들 발송; (ⅳ) L2 캐시(582)와 NCU(584)로의 요청들 사이를 공정하게 중재; (ⅴ) 요청들이 타깃 윈도우로 수신되고 오버플로우가 방지되도록 L2 캐시(582)와 NCU(584)로 배정을 통하여 흐름 제어 제공; (ⅵ) 로드 복귀 데이터 수용 및 실행 스테이지들(576, 578), 명령 장치(572) 또는 MMU(588)로 로드 복귀 데이터 발송; (ⅶ) 실행 스테이지들(576, 578), 명령 장치(572) 또는 MMU(588)로 스누프 요청들 통과; 및 (ⅷ) 반속도로부터 전속력으로 로드 복귀 데이터와 스누프 트래픽 변환.
MMU(588)는, 제 2 레벨 어드레스 변환 기능과 같은 것에 의해서, PU 코어(540A)를 위한 어드레스 변환을 제공하는 것이 바람직하다. 제 1 레벨의 변환은 분리 명령과 MMU(588)보다 더욱더 작고 빠를 수 있는 데이터 ERAT(Effective to Real Address Translation; 유효 어드레스로부터 실 어드레스로의 변환) 어레이들에 의해 PU 코어(504A) 내에 제공되는 것이 바람직하다.
바람직한 실시예에서, PU(504)는 64-비트 실행을 가지고, 4∼6㎓, 10F04(Fan-out-of-four)에서 동작한다. 레지스터들은 64 비트로 긴 것이 바람직하고, 유효 어드레스들은 64 비트로 길다. 명령 장치(570)에서, 레지스터들(572)과 실행 스테이지들(574, 576)은 (RISC) 컴퓨팅 테크닉을 획득하기 위해 파워 PC 기술을 이용하여 구현되는 것이 바람직하다.
이러한 컴퓨터 시스템의 모듈러 구조에 관한 부가적인 세부사항은 전체적으로 참조된 미국특허 제6,526,491호에 개시되어 있다.
본 발명의 적어도 하나의 실시예에 더 따르면, 상술된 방법 및 장치는 도면에 도시된 적합한 하드웨어를 이용하여 획득될 수 있다. 어떤 하드웨어는, 소프트웨어 및/또는 펌웨어 프로그램들을 실행하고, 프로그램 가능 판독용 메모리들(Programmable Read Only Memories; PROMs), 프로그램 가능 어레이 논리 장치들(Programmable Array Logic Devices; PALs) 등과 같은 하나 이상의 프로그램 가능 장치들 또는 시스템들을 실행하도록 동작하는 표준 디지털 회로, 알려진 프로세서들 중 어떤 것과 같은 알려진 기술들 중 어떤 것이든 이용하여 구현될 수 있다. 더욱이, 도면에 도시된 장치가 일정 기능 블록들로 구분되어 나타나 있으나, 어떤 블록들은 분리 회로에 의해 구현 및/또는 하나 이상의 기능 장치들에 결합될 수 있다. 게다가, 발명의 다양한 실시예들이 수송성 및/또는 분배를 위한 적합한 저장 매체 및 미디어(플로피 디스크(들), 메모리 칩(들) 등과 같은)에 저장될 수 있는 소프트웨어 및/또는 펌웨어 프로그램(들)에 의해 구현될 수 있다.
상술된 바와 같이, 본 발명의 다양한 실시예들이 프로세서의 로컬 메모리 내의 캐시 메모리의 소프트웨어 실행을 제공한다. 다른 캐시 메모리 섹션들의 수, 메모리마다의 캐시 라인들의 수, 명령마다의 태그 비교들의 수, 라인 블록 크기 및 치환 방침의 일정 측면들이 API 코드들을 통하여 구성될 수 있다. 이에 따라, 이러한 파라미터들이 고정된 하드웨어 실행과 비교할 때 상당한 이점을 제공한다. 더욱이, 캐시 적중률 및 액세스 빈도를 모니터하고 캐시 패널티를 산출함으로써, 처리 성능을 개선을 위해 캐시 구성(예컨대, 상기에 리스트된 캐시 파라미터들 및/또한 다른 파라미터들) 소프트웨어를 통하여 자동적으로 조절하는 것이 가능하다.
유리하게도, 소프트웨어에 의해 구현되는 캐시 메모리를 제공하는 방법 및 장치는, 프로그래머가, 프로세서 디자이너/제조자가 칩 공간의 소비 및 이용에 의하여 불리한 비용 포함관계를 초래할 필요없이 하드웨어에 의해 구현되는 캐시 메모리의 이점들 중 적어도 일부를 활용하도록 한다. 더욱이, 메모리 효율성, 처리 효율들 및 처리 품질에서 상당한 증가가 획득된다.
비록 본 발명이 특정 실시예들을 참조하여 설명되었으나, 이러한 실시예들은 본 발명의 원리들과 적용들을 도시한 것에 불과하다. 따라서, 다수의 수정이 도시된 실시예들에서 이루어질 수 있고, 첨부된 특허청구범위에 의해 정의됨에 따라 본 발명의 의도와 목적으로부터 분리되지 않고 다른 배열들이 구현될 수 있다.
본 발명은 외부 시스템 메모리로의 액세스를 갖는 프로세서의 로컬 메모리 내부에 소프트웨어에 의해 구현되는 캐시 메모리를 제공하는 기술에 적용할 수 있다.

Claims (48)

  1. 메인 메모리(main memory)에 연결될 수 있고 상기 메인 메모리에 저장된 데이터를 획득하도록 동작하는 프로세서(processor); 및
    상기 프로세서에 의한 이용을 위해 상기 데이터가 저장될 수 있도록 상기 프로세서와 동작시 접속하고, 하드웨어 캐시 메모리(hardware cache memory)가 아닌 로컬 메모리(local memory);를 포함하며,
    상기 프로세서는 소프트웨어에 의해 시동(invoke)되는 적어도 하나의 캐시 메모리 영역을 포함하도록 상기 로컬 메모리를 구성하고, 캐시 적중률(cache hit ratio)과 캐시 액세스 빈도(cache access frequency) 중 적어도 어느 하나를 기초로 한 캐시 패널티(cache penalty)를 산출하도록 동작하며, 상기 산출 결과에 응답하여 상기 소프트웨어에 의해 시동되는 캐시 메모리 영역의 파라미터들을 재구성하도록 동작하는 것을 특징으로 하는 장치.
  2. 제 1항에 있어서, 상기 프로세서는 애플리케이션 프로그램 인터페이스 코드를 실행함으로써 상기 적어도 하나의 캐시 메모리 영역을 포함하도록 로컬 메모리를 구성하는 것을 특징으로 하는 장치.
  3. 삭제
  4. 삭제
  5. 삭제
  6. 삭제
  7. 제 1항에 있어서, 상기 프로세서는 소프트웨어에 의해 시동되는 복수의 독립된 캐시 메모리를 포함하도록 상기 로컬 메모리를 구성하는 것을 특징으로 하는 장치.
  8. 삭제
  9. 삭제
  10. 제1항 또는 2항에 있어서, 상기 소프트웨어에 의해 시동되는 캐시 메모리 영역의 파라미터들은,
    상기 소프트웨어에 의해 시동되는 적어도 하나의 캐시 메모리 영역 내에 포함할 캐시 라인들의 수;
    상기 캐시 라인들의 크기;
    상기 데이터를 판독/기록하기 위한 상기 메인 메모리의 특정 영역들;
    각각의 판독/기록 사이클 내에서 상기 메인 메모리로부터 판독되거나 상기 메인 메모리에 기록될 수 있는 상기 데이터의 데이터 크기; 및
    캐시 라인 치환 방침; 중 적어도 어느 하나를 포함하는 것을 특징으로 하는 장치.
  11. 데이터를 저장하도록 동작하는 메인 메모리;
    상기 메인 메모리에 각각 연결될 수 있고 상기 메인 메모리로부터 상기 데이터의 적어도 일부를 획득하도록 동작하는 다수의 프로세서들; 및
    각각의 상기 프로세서와 함께 칩 상에 배치되고, 상기 프로세서에 의한 이용을 위해 상기 데이터가 저장될 수 있도록 상기 프로세서와 동작시 접속하며, 하드웨어 캐시 메모리가 아닌 각각의 로컬 메모리;를 포함하며,
    상기 프로세서들은 동일한 구조를 가지며, 상기 프로세서들 각각은 공통의 애플리케이션 프로그램 인터페이스 코드를 실행함으로써 적어도 하나의 캐시 메모리 영역을 포함하도록 각 로컬 메모리를 구성할 수 있는 것을 특징으로 하는 캐시 메모리 시스템.
  12. 제 11항에 있어서, 상기 프로세서들 중 적어도 하나는 애플리케이션 프로그램 인터페이스의 코드를 실행함으로써 복수의 독립된 캐시 메모리 영역을 포함하도록 대응하는 로컬 메모리를 구성하는 것을 특징으로 하는 캐시 메모리 시스템.
  13. 제 11항에 있어서, 상기 프로세서들 중 적어도 하나는,
    상기 소프트웨어에 의해 시동되는 적어도 하나의 캐시 메모리 영역 내에 포함할 캐시 라인들의 수;
    상기 캐시 라인들의 크기;
    상기 데이터를 판독/기록하기 위한 상기 메인 메모리의 특정 영역들;
    각각의 판독/기록 사이클 내에서 상기 메인 메모리로부터 판독되거나 상기 메인 메모리에 기록될 수 있는 상기 데이터의 데이터 크기; 및
    캐시 라인 치환 방침;을 포함하는 파라미터들 중 적어도 어느 하나를 상기 애플리케이션 프로그램 인터페이스 코드를 이용하여 지정하도록 동작하는 것을 특징으로 하는 캐시 메모리 시스템.
  14. 제 11항에 있어서,
    상기 프로세서들 중 적어도 어느 하나는 캐시 적중률과 캐시 액세스 빈도 중 적어도 어느 하나를 기초로 한 캐시 패널티를 산출하도록 동작하며,
    상기 프로세서들 중 적어도 어느 하나는 상기 산출 결과에 응답하여 상기 소프트웨어에 의해 시동되는 캐시 메모리 영역의 파라미터들을 재구성하도록 동작하는 것을 특징으로 하는 캐시 메모리 시스템.
  15. 소프트웨어에 의해 시동되는 적어도 하나의 캐시 메모리 영역을 포함하도록 하드웨어 캐시 메모리가 아닌 로컬 메모리를 구성하기 위해서 프로세서 상의 애플리케이션 프로그램 인터페이스 코드를 실행하는 단계;
    캐시 적중률과 캐시 액세스 빈도 중 적어도 어느 하나를 기초로 한 캐시 패널티를 산출하는 단계; 및
    상기 산출 결과에 응답하여 상기 소프트웨어에 의해 시동되는 캐시 메모리 영역의 파라미터들을 재구성하는 단계;를 포함하고,
    상기 프로세서는 메인 메모리에 연결될 수 있고 상기 프로세서의 의한 상기 로컬 메모리 내에서의 이용을 위해 상기 메인 메모리로부터 데이터를 획득하도록 동작하는 것을 특징으로 하는 방법.
  16. 제 15항에 있어서, 상기 프로세서는 애플리케이션 프로그램 인터페이스 코드를 실행함으로써 상기 적어도 하나의 캐시 메모리 영역을 포함하도록 로컬 메모리를 구성하는 것을 특징으로 하는 방법.
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
  21. 삭제
  22. 제15항에 있어서, 상기 소프트웨어에 의해 시동되는 캐시 메모리 영역의 상기 파라미터들은,
    상기 소프트웨어에 의해 시동되는 적어도 하나의 캐시 메모리 영역 내에 포함할 캐시 라인들의 수;
    상기 캐시 라인들의 크기;
    상기 데이터를 판독/기록하기 위한 상기 메인 메모리의 특정 영역들;
    상기 판독/기록 사이클 내의 상기 메인 메모리로부터 판독되거나 상기 메인 메모리에 기록될 수 있는 상기 데이터의 데이터 사이즈; 및
    캐시 라인 치환 방침; 중 적어도 어느 하나를 포함하는 것을 특징으로 하는 방법.
  23. 하드웨어 캐시 메모리가 아닌 로컬 메모리를 구비하는 프로세서에서,
    소프트웨어에 의해 시동되는 적어도 하나의 캐시 메모리 영역을 포함하도록 상기 로컬 메모리를 구성하는 동작;
    캐시 적중률과 캐시 액세스 빈도 중 적어도 어느 하나를 기초로 한 캐시 패널티를 산출하는 동작; 및
    상기 산출 결과에 응답하여 상기 소프트웨어에 의해 시동되는 캐시 메모리 영역의 파라미터들을 재구성하는 동작을 포함하는 동작들을 실행시키도록 동작되는 소프트웨어 프로그램을 구비하는 저장 매체로서,
    상기 프로세서는 데이터 저장용 메인 메모리에 접속할 수 있고 상기 프로세서에 의한 상기 로컬 메모리 내에서의 이용을 위해 상기 메인 메모리로부터 상기 데이터의 적어도 일부를 획득하도록 동작하는 것을 특징으로 하는 저장 매체.
  24. 삭제
  25. 삭제
  26. 삭제
  27. 삭제
  28. 삭제
  29. 삭제
  30. 제23항에 있어서, 상기 소프트웨어에 의해 시동되는 캐시 메모리 영역의 상기 파라미터들은,
    상기 소프트웨어에 의해 시동되는 적어도 하나의 캐시 메모리 영역 내에 포함할 캐시 라인들의 수;
    캐시 라인들의 크기;
    상기 데이터를 판독/기록하기 위한 상기 메인 메모리의 특정 영역들;
    각각의 판독/기록 사이클 내에서 상기 메인 메모리로부터 판독되거나 상기 메인 메모리에 기록될 수 있는 상기 데이터의 데이터 크기; 및
    캐시 라인 치환 방침; 중 적어도 어느 하나를 포함하는 것을 특징으로 하는 저장 매체.
  31. 삭제
  32. 삭제
  33. 캐시 메모리가 실장된 하드웨어에 연결되고 메인 메모리에 연결될 수 있으며, 상기 캐시 메모리에 저장하기 위해 상기 메인 메모리로부터 데이터를 획득하도록 동작하는 적어도 하나의 메인 프로세서(main processor);
    상기 적어도 하나의 메인 프로세서에 각각 연결되고, 상기 메인 메모리에 연결될 수 있으며, 상기 메인 메모리로부터 상기 데이터의 적어도 일부를 획득하도록 동작하는 다수의 서브-프로세서들(sub-processors);
    각각의 서브-프로세서에 대응하여 칩 상에 배치되고 상기 데이터가 상기 서브-프로세서에 의한 이용을 위해 저장될 수 있도록 상기 각 서브-프로세서와 접속 가능하며, 하드웨어 캐시 메모리가 아닌 각각의 로컬 메모리;를 포함하며,
    상기 서브-프로세서들 각각은 소프트웨어에 의해 시동되는 적어도 하나의 캐시 메모리 영역을 포함할 상기 각각의 로컬 메모리를 구성하는 것을 특징으로 하는 장치.
  34. 제 33항에 있어서, 상기 메인 프로세서, 상기 하드웨어 캐시 메모리, 상기 서브-프로세서들 및 상기 로컬 메모리들은 동일한 반도체 칩 상에 배치되는 것을 특징으로 하는 장치.
  35. 제 34항에 있어서, 상기 메인 메모리 또한 상기 동일한 반도체 칩 상에 배치되는 것을 특징으로 하는 장치.
  36. 제 33항에 있어서, 상기 서브-프로세서들 각각은,
    상기 소프트웨어에 의해 시동되는 적어도 하나의 캐시 메모리 영역 내에 포함할 캐시 라인들의 수;
    상기 캐시 라인들의 크기;
    상기 데이터를 판독/기록하기 위한 상기 메인 메모리의 특정 영역들;
    각각의 판독/기록 사이클 내에서 상기 메인 메모리로부터 판독되거나 상기 메인 메모리에 기록할 수 있는 상기 데이터의 데이터 크기; 및
    캐시 라인 치환 방침;을 포함하는 파라미터들 중 적어도 어느 하나를 지정하도록 동작하는 것을 특징으로 하는 장치.
  37. 제 33항에 있어서, 상기 서브-프로세서는 소프트웨어에 의해 시동되는 다수의 다른 캐시 메모리 영역을 포함하도록 상기 로컬 메모리를 구성하는 것을 특징으로 하는 장치.
  38. 삭제
  39. 삭제
  40. 삭제
  41. 삭제
  42. 제33항에 있어서, 상기 각 서브-프로세서의 로컬 메모리에 각각 대응하는 직접 메모리 액세스 제어기(Direct Memory Access Controller; DMAC)를 더 구비하는 것을 특징으로 하는 장치.
  43. 제33항에 있어서, 상기 서브-프로세서는 애플리케이션 프로그램 인터페이스 코드를 실행함으로써 적어도 하나의 캐시 메모리 영역을 포함하도록 로컬 메모리를 구성하는 것을 특징으로 하는 장치.
  44. 제33항에 있어서, 상기 각 서브-프로세서는 동일한 구조를 가지며, 공통의 애플리케이션 프로그램 인터페이스 코드를 실행함으로써 상기 캐시 메모리 영역을 구성하는 것을 특징으로 하는 장치.
  45. 제33항에 있어서, 상기 서브-프로세서는 캐시 적중률(cache hit ratio)과 캐시 액세스 빈도(cache access frequency) 중 적어도 어느 하나를 기초로 한 캐시 패널티(cache penalty)를 산출하며, 상기 산출 결과에 응답하여 상기 소프트웨어에 의해 시동되는 캐시 메모리 영역의 파라미터들을 재구성하는 것을 특징으로 하는 장치.
  46. 데이터를 저장하도록 동작 가능한 메인 메모리;
    상기 메인 메모리와 각각 접속되도록 동작 가능하며, 상기 메인 메모리로부터 적어도 상기 데이터의 일부를 얻도록 동작 가능한 복수의 프로세서; 및
    상기 복수의 프로세서 각각에 대응하여 칩 상에 배치되고, 프로세서에 의해 사용되는 데이터를 저장하도록 상기 각각의 프로세서에 접속 가능한, 하드웨어 캐시 메모리가 아닌 복수의 로컬 메모리;를 포함하며,
    상기 복수의 프로세서는 병렬적으로 복수의 애플리케이션을 실행할 수 있고,
    상기 복수의 로컬 메모리는 대응하는 프로세서에서의 애플리케이션의 실행 내용에 대응하여 선택적으로 소프트웨어 캐시 메모리 영역이 포함되도록 구성되는 것을 특징으로 하는 캐시 메모리 시스템.
  47. 데이터를 저장하도록 동작 가능한 메인 메모리;
    상기 메인 메모리와 각각 접속되도록 동작 가능하며, 상기 메인 메모리로부터 적어도 상기 데이터의 일부를 얻도록 동작 가능한 복수의 프로세서; 및
    상기 복수의 프로세서 각각에 대응하여 칩 상에 배치되고, 프로세서에 의해 사용되는 데이터를 저장하도록 상기 각각의 프로세서에 접속 가능한, 하드웨어 캐시 메모리가 아닌 복수의 로컬 메모리;를 포함하며, 상기 복수의 프로세서는 병렬적으로 복수의 애플리케이션을 실행할 수 있는 시스템에 있어서,
    상기 복수의 프로세서에 있어서의 각각의 애플리케이션 실행 내용에 대응하여 상기 복수의 로컬 메모리에 대해 선택적으로 소프트웨어 캐시를 구성하는 것을 특징으로 하는 캐시 메모리 실장 방법.
  48. 데이터를 저장하도록 동작 가능한 메인 메모리;
    상기 메인 메모리와 각각 접속되도록 동작 가능하며, 상기 메인 메모리로부터 적어도 상기 데이터의 일부를 얻도록 동작 가능한 복수의 프로세서; 및
    상기 복수의 프로세서 각각에 대응하여 칩 상에 배치되고, 프로세서에 의해 사용되는 데이터를 저장하도록 상기 각각의 프로세서에 접속 가능한, 하드웨어 캐시 메모리가 아닌 복수의 로컬 메모리;를 포함하며, 상기 복수의 프로세서는 병렬적으로 복수의 애플리케이션을 실행할 수 있는 시스템에 있어서,
    상기 복수의 프로세서에 있어서의 각각의 애플리케이션 실행 내용에 대응하여 상기 복수의 로컬 메모리에 대해 선택적으로 소프트웨어 캐시를 구성하는 처리를 컴퓨터에 실행시키는 것을 특징으로 하는 프로그램이 기록된 기록 매체.
KR1020067006208A 2004-05-28 2005-05-26 소프트웨어에 의해 구현되는 캐시 메모리를 제공하는 방법및 장치 KR100829287B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US57544404P 2004-05-28 2004-05-28
US60/575,444 2004-05-28

Publications (2)

Publication Number Publication Date
KR20060063977A KR20060063977A (ko) 2006-06-12
KR100829287B1 true KR100829287B1 (ko) 2008-05-13

Family

ID=35451049

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020067006208A KR100829287B1 (ko) 2004-05-28 2005-05-26 소프트웨어에 의해 구현되는 캐시 메모리를 제공하는 방법및 장치

Country Status (9)

Country Link
US (1) US7526608B2 (ko)
EP (1) EP1658564B1 (ko)
JP (1) JP3802042B2 (ko)
KR (1) KR100829287B1 (ko)
CN (1) CN100451996C (ko)
AT (1) ATE483202T1 (ko)
DE (1) DE602005023827D1 (ko)
TW (1) TWI264642B (ko)
WO (1) WO2005116839A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101257192B1 (ko) 2011-07-28 2013-04-22 손상훈 비닐하우스용 운반장치

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7644239B2 (en) 2004-05-03 2010-01-05 Microsoft Corporation Non-volatile memory cache performance improvement
US7490197B2 (en) 2004-10-21 2009-02-10 Microsoft Corporation Using external memory devices to improve system performance
JP2006309338A (ja) * 2005-04-26 2006-11-09 Toshiba Corp データ変換器モジュール
JP4855710B2 (ja) * 2005-04-28 2012-01-18 株式会社東芝 ソフトウェアのプラグイン方法、および、アプリケーションプログラム
US8914557B2 (en) 2005-12-16 2014-12-16 Microsoft Corporation Optimizing write and wear performance for a memory
US7581064B1 (en) * 2006-04-24 2009-08-25 Vmware, Inc. Utilizing cache information to manage memory access and cache utilization
US7434002B1 (en) * 2006-04-24 2008-10-07 Vmware, Inc. Utilizing cache information to manage memory access and cache utilization
US20080005473A1 (en) * 2006-06-30 2008-01-03 Tong Chen Compiler assisted re-configurable software implemented cache
US8370575B2 (en) * 2006-09-07 2013-02-05 International Business Machines Corporation Optimized software cache lookup for SIMD architectures
US9176886B2 (en) * 2006-10-30 2015-11-03 Hewlett-Packard Development Company, L.P. Method and system for filling cache memory for cache memory initialization
US7711904B2 (en) * 2007-03-22 2010-05-04 International Business Machines Corporation System, method and computer program product for executing a cache replacement algorithm
US8631203B2 (en) * 2007-12-10 2014-01-14 Microsoft Corporation Management of external memory functioning as virtual cache
US8423989B2 (en) * 2008-05-02 2013-04-16 Synchonoss Technologies, Inc. Software parameter management
US8868844B2 (en) * 2008-06-25 2014-10-21 International Business Machines Corporation System and method for a software managed cache in a multiprocessing environment
US8819651B2 (en) * 2008-07-22 2014-08-26 International Business Machines Corporation Efficient software cache accessing with handle reuse
US9032151B2 (en) 2008-09-15 2015-05-12 Microsoft Technology Licensing, Llc Method and system for ensuring reliability of cache data and metadata subsequent to a reboot
US7953774B2 (en) 2008-09-19 2011-05-31 Microsoft Corporation Aggregation of write traffic to a data store
US8949529B2 (en) * 2009-12-30 2015-02-03 International Business Machines Corporation Customizing function behavior based on cache and scheduling parameters of a memory argument
JP5489884B2 (ja) * 2010-06-30 2014-05-14 インターナショナル・ビジネス・マシーンズ・コーポレーション 命令実行装置、命令実行方法、及び命令実行プログラム
US20120297256A1 (en) * 2011-05-20 2012-11-22 Qualcomm Incorporated Large Ram Cache
US9158685B2 (en) 2012-09-11 2015-10-13 Apple Inc. System cache with cache hint control
EP2881918B1 (en) * 2013-12-06 2018-02-07 My Virtual Reality Software AS Method for visualizing three-dimensional data
JP6384375B2 (ja) * 2015-03-23 2018-09-05 富士通株式会社 情報処理装置、記憶装置制御方法、記憶装置制御プログラム及び情報処理システム
WO2018009240A2 (en) * 2015-11-12 2018-01-11 University Of Rochester Superconducting system architecture for high-performance energy-efficient cryogenic computing
US10893096B2 (en) 2018-05-17 2021-01-12 International Business Machines Corporation Optimizing dynamical resource allocations using a data heat map in disaggregated data centers
US10841367B2 (en) 2018-05-17 2020-11-17 International Business Machines Corporation Optimizing dynamical resource allocations for cache-dependent workloads in disaggregated data centers
US10936374B2 (en) * 2018-05-17 2021-03-02 International Business Machines Corporation Optimizing dynamic resource allocations for memory-dependent workloads in disaggregated data centers
US11221886B2 (en) 2018-05-17 2022-01-11 International Business Machines Corporation Optimizing dynamical resource allocations for cache-friendly workloads in disaggregated data centers
US10977085B2 (en) 2018-05-17 2021-04-13 International Business Machines Corporation Optimizing dynamical resource allocations in disaggregated data centers
US11330042B2 (en) 2018-05-17 2022-05-10 International Business Machines Corporation Optimizing dynamic resource allocations for storage-dependent workloads in disaggregated data centers
US10601903B2 (en) 2018-05-17 2020-03-24 International Business Machines Corporation Optimizing dynamical resource allocations based on locality of resources in disaggregated data centers
CN109118422B (zh) * 2018-07-10 2023-05-05 西安科技大学 一种嵌入式移动图形处理器的纹理Cache及处理方法
US20210311871A1 (en) 2020-04-06 2021-10-07 Samsung Electronics Co., Ltd. System and method for aggregating server memory

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2002077846A1 (en) * 2001-03-22 2002-10-03 Sony Computer Entertainment Inc. System and method for data synchronization for a computer architecture for broadband networks
WO2002079995A1 (en) * 2001-03-30 2002-10-10 Cirrus Logic, Inc. Systems and methods using a system-on-a-chip with soft cache

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0416767A3 (en) * 1989-09-08 1992-04-29 Digital Equipment Corporation Position independent code location system
EP0777183B1 (en) 1995-12-01 2002-07-31 Hewlett-Packard Company, A Delaware Corporation Computer cache system
US5966734A (en) * 1996-10-18 1999-10-12 Samsung Electronics Co., Ltd. Resizable and relocatable memory scratch pad as a cache slice
US6526491B2 (en) 2001-03-22 2003-02-25 Sony Corporation Entertainment Inc. Memory protection system and method for computer architecture for broadband networks
US6745295B2 (en) 2001-04-19 2004-06-01 International Business Machines Corporation Designing a cache with adaptive reconfiguration

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2002077846A1 (en) * 2001-03-22 2002-10-03 Sony Computer Entertainment Inc. System and method for data synchronization for a computer architecture for broadband networks
WO2002079995A1 (en) * 2001-03-30 2002-10-10 Cirrus Logic, Inc. Systems and methods using a system-on-a-chip with soft cache

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101257192B1 (ko) 2011-07-28 2013-04-22 손상훈 비닐하우스용 운반장치

Also Published As

Publication number Publication date
EP1658564B1 (en) 2010-09-29
ATE483202T1 (de) 2010-10-15
JP3802042B2 (ja) 2006-07-26
JP2005339557A (ja) 2005-12-08
EP1658564A1 (en) 2006-05-24
TWI264642B (en) 2006-10-21
CN100451996C (zh) 2009-01-14
DE602005023827D1 (de) 2010-11-11
CN1806231A (zh) 2006-07-19
US20050268038A1 (en) 2005-12-01
WO2005116839A1 (en) 2005-12-08
EP1658564A4 (en) 2008-12-31
KR20060063977A (ko) 2006-06-12
US7526608B2 (en) 2009-04-28
TW200609726A (en) 2006-03-16

Similar Documents

Publication Publication Date Title
KR100829287B1 (ko) 소프트웨어에 의해 구현되는 캐시 메모리를 제공하는 방법및 장치
US7386687B2 (en) Methods and apparatus for managing a shared memory in a multi-processor system
EP1854016B1 (en) Methods and apparatus for synchronizing data access to a local memory in a multi-processor system
US7644255B2 (en) Method and apparatus for enable/disable control of SIMD processor slices
EP1834245B1 (en) Methods and apparatus for list transfers using dma transfers in a multi-processor system
US7689784B2 (en) Methods and apparatus for dynamic linking program overlay
JP4243318B2 (ja) ソフトウェアとハードウエアで同時にキャッシュフィルする方法と装置
US7818724B2 (en) Methods and apparatus for instruction set emulation
US7685601B2 (en) Methods and apparatus for segmented stack management in a processor system
US20080052504A1 (en) Method and system for rebooting a processor in a multi-processor system
EP1846829A1 (en) Methods and apparatus for address translation from an external device to a memory of a processor
JP2006172468A (ja) システム内部のデータ転送を処理する装置および方法
US20060179436A1 (en) Methods and apparatus for providing a task change application programming interface
US7818507B2 (en) Methods and apparatus for facilitating coherency management in distributed multi-processor system
JP4024271B2 (ja) マルチプロセッサシステムにおいて命令を処理するための方法と装置

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: 20130502

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20140418

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20150416

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20160418

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20170421

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20180418

Year of fee payment: 11