KR20170107061A - 멀티 코어 시스템에서 데이터 방문자 디렉토리에 액세스하는 방법 및 장치 - Google Patents

멀티 코어 시스템에서 데이터 방문자 디렉토리에 액세스하는 방법 및 장치 Download PDF

Info

Publication number
KR20170107061A
KR20170107061A KR1020177023526A KR20177023526A KR20170107061A KR 20170107061 A KR20170107061 A KR 20170107061A KR 1020177023526 A KR1020177023526 A KR 1020177023526A KR 20177023526 A KR20177023526 A KR 20177023526A KR 20170107061 A KR20170107061 A KR 20170107061A
Authority
KR
South Korea
Prior art keywords
entry
shared
single pointer
data block
visitor
Prior art date
Application number
KR1020177023526A
Other languages
English (en)
Other versions
KR102027391B1 (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 KR20170107061A publication Critical patent/KR20170107061A/ko
Application granted granted Critical
Publication of KR102027391B1 publication Critical patent/KR102027391B1/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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • G06F12/0822Copy directories
    • 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/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • 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/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • 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/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • G06F12/0828Cache consistency protocols using directory methods with concurrent directory accessing, i.e. handling multiple concurrent coherency transactions
    • 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/084Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
    • 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/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0846Cache with multiple tag or data arrays being simultaneously accessible
    • 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
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/28Using a specific disk cache architecture
    • G06F2212/283Plural cache memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/31Providing disk cache in a specific location of a storage system
    • G06F2212/314In storage network, e.g. network attached cache
    • 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/6032Way prediction in set-associative cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/62Details of cache specific to multiprocessor cache arrangements
    • G06F2212/621Coherency control relating to peripheral accessing, e.g. from DMA or I/O device

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)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

본 발명은 멀티 코어 시스템 내의 디렉토리 저장 장치에서 데이터 방문자 디렉토리에 액세스하는 방법, 디렉토리 캐시 장치, 멀티 코어 시스템, 및 디렉토리 저장 유닛을 개시한다. 방법은 제1 프로세서 코어에 의해 송신된, 데이터 방문자 디렉토리 내의, 제1 데이터 블록에 대응하는 엔트리를 액세스하는 데 사용되는 제1 액세스 요청을 수신하는 단계, 제1 액세스 요청에 따라, 단일 포인터 엔트리 어레이가 제1 데이터 블록에 대응하는 제1 단일 포인터 엔트리를 가진다고 결정하는 단계, 그리고 제1 단일 포인터 엔트리에 따라, 공유 엔트리 어레이가 제1 단일 포인터 엔트리와 연관된 제1 공유 엔트리를 가진다고 결정되는 때, 제1 공유 엔트리에 따라 제1 데이터 블록의 다수의 방문자를 결정하는 단계를 포함한다. 본 발명의 실시예에 따르면, 디렉토리에 의해 점유된 저장 리소스가 감소될 수 있다.

Description

멀티 코어 시스템에서 데이터 방문자 디렉토리에 액세스하는 방법 및 장치
본 발명은 정보 기술 분야에 관한 것으로, 보다 상세하게는 멀티 코어 시스템에서 데이터 방문자 디렉토리에 액세스하는 방법, 디렉토리 캐시 장치, 멀티 코어 시스템, 및 디렉토리 저장 유닛에 관한 것이다.
멀티 코어(Multi-Core) 프로세서 또는 많은 코어(Many Core) 프로세서의 애플리케이션에서, 프로세서의 하나 이상의 프로세서 코어에 의해 데이터 블록이 액세스되는 몇몇 시나리오가 존재한다. 이 시나리오에서, 데이터 블록은 일반적으로 공유 저장 공간에 저장되어, 하나 이상의 프로세서 코어에 의해 액세스될 수 있다. 데이터 블록에 대한 액세스를 가속하기 위해, 데이터 블록의 사본은 데이터 블록에 액세스한 하나 이상의 프로세서 코어의 프라이빗 캐시(private cache)에서 생성된다(즉, 데이터 블록이 프로세서 코어의 프라이빗 캐시에 저장된다). 이러한 방식으로, 데이터 블록에 액세스한 코어가 데이터 블록에 다시 액세스해야 하는 때, 코어는 코어의 프라이빗 캐시에서 데이터 블록을 판독해야만 한다. 데이터 블록의 사본이 하나 이상의 프로세서 코어에 있는, 액세스된 프라이빗 캐시에 저장되므로, 캐시 일관성(Cache Coherence) 문제로서 지칭되는, 사본의 일관성 문제를 해결하기 위해, 여러 코어의 프라이빗 캐시에 있는 데이터 블록 사본의 일관성이 유지되어야 한다. 캐시 일관성 문제를 해결하는 기본 원칙은, 코어의 데이터 블록의 사본이 변경되는 때, 다른 코어의 데이터 블록의 사본이 갱신되어야 하거나, 또는 데이터 블록이 비활성화되어야 한다(즉, 데이터 블록이 삭제된다). 따라서, 데이터 블록의 사본을 저장하는 멀티 코어 프로세서의 코어가 결정되어야 한다(즉, 데이터 블록의 방문자가 결정된다).
일반적으로 사용되는 캐시 일관성 솔루션은 스누핑 기반 일관성(snooping-based coherence) 솔루션과 디렉토리 기반 일관성 솔루션을 포함한다. 전자에 관해서, 코어 내의 데이터 블록의 사본이 변경되는 때, 데이터 블록의 사본을 갱신하거나 또는 데이터 블록을 비활성화하도록 이들 코어에 지시하도록, 데이터 블록이 변경된 것을 지시하는 방송 메시지가 데이터 블록의 사본이 저장된 다른 코어로 전송되어야 한다. 후자에 관해서, 데이터 블록의 액세스 디렉토리는 데이터 블록의 방문자(즉, 멀티 코어 프로세서 내의, 데이터 블록이 저장되는 코어) 리스트를 기록하는 데 사용된다. 코어의 데이터 블록의 사본이 변경되는 때, 데이터 블록이 변경되었음을 지시하는 알림 메시지가 다른 방문자에게만 전송된다. 스누핑 기반 일관성 솔루션은 성능 및 대역폭 병목 현상에 직면해 있는 반면에(메시지 방송은 많은 양의 처리 리소스 및 많은 양의 대역폭을 차지해야 한다), 디렉토리 기반 일관성 프로토콜은 확장성이 뛰어나 널리 적용된다.
종래의 디렉토리 기반 일관성 솔루션에서, 데이터 블록의 방문자 리스트는 벡터의 형태로 디렉토리에 기록된다. N개의 코어를 포함하는 멀티 코어 프로세서 시스템의 경우, 디렉토리의 각 디렉토리 엔트리는 하나의 N비트 벡터를 포함하고, 벡터의 각 비트가 1인지는 N개의 코어에 데이터 블록의 사본이 있는지를 지시한다. 이 메커니즘에서, 디렉토리 엔트리의 수량은 코어의 수량의 증가에 따라 선형적으로 증가하지만, 데이터 블록의 사본을 저장하는 데 사용되는 캐시의 크기는 코어의 수량의 증가에 따라 증가하지 않는다. 결과적으로, 코어의 수량이 증가함에 따라 데이터 블록에 의해 점유된 비트의 수량에 대한 디렉토리에 의해 점유된 비트의 수량의 비율이 증가한다. 결과적으로, 디렉토리를 저장하는 데 사용되는 스토리지(strage) 공간이 커지므로, 이는 온-칩(on-chip) 멀티 코어 프로세서에서의 캐시 공간에 대한 문제를 가져온다.
본 발명의 실시예는 데이터 방문자 디렉토리에 의해 점유된 스토리지 리소스를 감소시킬 수 있는, 멀티 코어 시스템에서 데이터 방문자 디렉토리에 액세스하는 방법, 디렉토리 캐시 장치, 멀티 코어 시스템, 및 디렉토리 저장 유닛을 제공한다.
제1 양태에 따르면, 멀티 코어 시스템에 적용되는, 멀티 코어 시스템에서 데이터 방문자 디렉토리에 액세스하기 위한 방법이 제공되고, 여기서 멀티 코어 시스템은 공유 데이터 캐시 및 다수의 프로세서 코어를 포함하고, 공유 데이터 캐시 내의 데이터 블록은 다수의 프로세서 코어 중 적어도 하나의 프로세서 코어에 복사되며, 멀티 코어 시스템은 데이터 방문자 디렉토리를 더 포함하고, 데이터 방문자 디렉토리는 공유 데이터 캐시의 데이터 블록의 방문자에 관한 정보를 기록하는 데 사용되며, 데이터 블록의 방문자는 데이터 블록의 사본이 저장된 프로세서 코어이고, 디렉토리는 단일 포인터 엔트리 어레이(single-pointer entry array) 및 공유 엔트리 어레이(sharing entry array)를 포함하고, 단일 포인터 엔트리 어레이 내의 각 단일 포인터 엔트리는 데이터 블록의 단일 방문자에 관한 정보를 기록하는 데 사용되거나, 또는 단일 포인터 엔트리와 공유 엔트리 어레이 내의 공유 엔트리 사이의 연관에 관한 정보를 기록하는 데 사용되고, 공유 엔트리 어레이 내의 각 공유 엔트리는 데이터 블록의 다수의 방문자에 관한 정보를 기록하는 데 사용되며, 방법은, 제1 프로세서 코어에 의해 송신된, 디렉토리 내의, 제1 데이터 블록에 대응하는 엔트리를 액세스하는 데 사용되는 제1 액세스 요청을 수신하는 단계, 제1 액세스 요청에 따라, 단일 포인터 엔트리 어레이가 제1 데이터 블록에 대응하는 제1 단일 포인터 엔트리를 가진다고 결정하는 단계, 그리고 제1 단일 포인터 엔트리에 따라, 공유 엔트리 어레이가 제1 단일 포인터 엔트리와 연관된 제1 공유 엔트리를 가진다고 결정되는 때, 제1 공유 엔트리에 따라 제1 데이터 블록의 다수의 방문자를 결정하는 단계를 포함한다.
제1 양태를 참조하여, 첫 번째 가능한 구현 방식으로, 단일 포인터 엔트리 어레이 내의 단일 포인터 엔트리는 또한, 데이터 블록이 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유됨을 지시하는 데 사용되며, 방법은, 제1 단일 포인터 엔트리에 따라, 공유 엔트리 어레이가 제1 단일 포인터 엔트리와 연관된 제1 공유 엔트리를 갖지 않는다고 결정되는 때, 제1 단일 포인터 엔트리에 따라, 제1 데이터 블록의 단일 방문자를 결정하거나 또는 제1 데이터 블록이 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유된다고 결정하는 단계를 더 포함한다.
제1 양태 또는 제1 양태의 첫 번째 가능한 구현 방식을 참조하여, 두 번째 가능한 구현 방식으로, 제1 프로세서 코어에 의해 송신된 제1 액세스 요청을 수신한 후에, 제1 액세스 요청에 따라, 단일 포인터 엔트리 어레이가 제1 데이터 블록에 대응하는 단일 포인터 엔트리를 갖지 않는다고 결정하는 단계, 그리고 단일 포인터 엔트리 어레이에서, 제1 데이터 블록에 대응하는 제1 단일 포인터 엔트리를 제1 데이터 블록에 할당하고, 제1 단일 포인터 엔트리에 제1 프로세서 코어에 관한 정보를 기록하는 단계를 더 포함한다.
제1 양태의 두 번째 가능한 구현 방식을 참조하여, 세 번째 가능한 구현 방식으로, 단일 포인터 엔트리 어레이에서, 제1 데이터 블록에 대응하는 제1 단일 포인터 엔트리를 제1 데이터 블록에 할당하고, 제1 단일 포인터 엔트리에 제1 프로세서 코어에 관한 정보를 기록하는 단계는, (1) 단일 포인터 엔트리 어레이가 미사용 단일 포인터 엔트리를 가지면, 단일 포인터 엔트리로서 미사용 단일 포인터 엔트리로부터 단일 포인터 엔트리를 선택하고, 제1 프로세서 코어에 관한 정보를 기록하는 단계, 또는 (2) 단일 포인터 엔트리 어레이가 미사용 단일 포인터 엔트리를 갖지 않으면 최소 최근 사용 원칙(principle of least recently used)에 따라 단일 포인터 엔트리를 선택하고, (2-1) 선택된 단일 포인터 엔트리가 공유 엔트리와 연관되지 않고 단일 방문자에 관한 정보를 기록하면, 기록된 단일 방문자에게 비활성화 메시지를 송신하고 선택된 단일 포인터 엔트리에 제1 프로세서 코어에 관한 정보를 기록하거나, 또는 (2-2) 선택된 단일 포인터 엔트리가 공유 엔트리와 연관되지 않고 선택된 단일 포인터 엔트리가 데이터 블록이 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유된다고 지시하면, 비활성화 메시지를 모든 프로세서 코어에 방송하고 선택된 단일 포인터 엔트리에 제1 프로세서 코어에 관한 정보를 기록하거나, 또는 (2-3) 선택된 단일 포인터 엔트리가 공유 엔트리와 연관되면, 선택된 단일 포인터 엔트리와 연관된 공유 엔트리에 따라, 연관된 공유 엔트리에 기록된 다수의 방문자를 결정하고, 기록된 다수의 방문자에게 비활성화 메시지를 전송하며, 선택된 단일 포인터 엔트리의 제1 프로세서 코어에 관한 정보를 기록하는 단계를 포함한다.
제1 양태의 두 번째 또는 세 번째 가능한 구현 방식을 참조하여, 네 번째 가능한 구현 방식으로, 제2 프로세서 코어에 의해 송신된, 디렉토리 내의, 제1 데이터 블록에 대응하는 엔트리를 액세스하는 데 사용되는 제2 액세스 요청을 수신하는 단계, 제2 액세스 요청에 따라, 단일 포인터 엔트리 어레이가 제1 데이터 블록에 대응하는 제1 단일 포인터 엔트리를 가진다고 결정하는 단계, 제1 단일 포인터 엔트리에 따라, 공유 엔트리 어레이가 제1 단일 포인터 엔트리와 연관된 공유 엔트리를 가지고 있지 않다고 결정되는 때, 제1 단일 포인터 엔트리에 따라, 제1 데이터 블록의 단일 방문자가 제1 프로세서 코어라고 결정하는 단계, 그리고 공유 엔트리 어레이에 제1 공유 엔트리를 할당하고, 제1 단일 포인터 엔트리와 제1 공유 엔트리 사이의 연관 관계를 확립하며, 제1 공유 엔트리에, 제1 프로세서 코어에 관한 정보 및 제2 프로세서 코어에 관한 정보를 기록하는 단계를 더 포함한다.
제1 양태의 네 번째 가능한 구현 방식을 참조하여, 다섯 번째 가능한 구현 방식으로, 공유 엔트리 어레이에 제1 공유 엔트리를 할당하는 것은, (1) 공유 엔트리 어레이가 미사용 공유 엔트리를 가지면, 제1 공유 엔트리로서 미사용 공유 엔트리로부터 공유 엔트리를 선택하는 단계, 또는 (2) 공유 엔트리 어레이가 미사용 공유 엔트리를 가지지 않고 단 하나의 방문자에 관한 정보를 기록하는 공유 엔트리를 가지면, 단 하나의 방문자에 관한 정보를 기록하는 공유 엔트리를 선택하고, 방문자에 관해 기록된 정보를 선택된 공유 엔트리와 연관된 단일 포인터 엔트리에 기입하는 단계, 또는 (3) 공유 엔트리 어레이가 미사용 공유 엔트리 또는 단 하나의 방문자에 관한 정보를 기록하는 공유 엔트리를 갖지 않으면 최소 최근 사용 원칙에 따라 공유 엔트리를 선택하고, (3-1) 선택된 공유 엔트리에 기록된 방문자의 수가 미리 결정된 임계치보다 더 크면, 데이터 블록이 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유됨을 지시하도록 선택된 공유 엔트리와 연관된 단일 포인터 엔트리를 설정하거나, 또는 (3-2) 선택된 공유 엔트리에 기록된 방문자의 수가 미리 결정된 임계치보다 크지 않으면, 기록된 방문자들 중 한 방문자에 관한 정보를 선택된 공유 엔트리와 연관된 단일 포인터 엔트리에 기입하고, 기록된 방문자들 중 다른 방문자들에게 비활성화 메시지를 송신하는 단계를 포함한다.
제1 양태 또는 제1 양태의 전술한 가능한 구현 방식 중 어느 하나를 참조하여, 여섯 번째 가능한 구현 방식으로, 단일 포인터 엔트리는, 태그, 공유 엔트리 연관 비트 및 단일 포인터를 포함하고, 태그는 데이터 블록에 대응하도록 사용되고, 공유 엔트리 연관 비트는 단일 포인터 엔트리가 공유 엔트리와 연관되는지를 지시하는 데 사용되며, 단일 포인터는, 데이터 블록이 단일 방문자를 갖는 때 데이터 블록의 단일 방문자에 관한 정보를 기록하고, 단일 포인터 엔트리가 공유 엔트리와 연관되는 때 단일 포인터 엔트리와 공유 엔트리 사이의 연관 관계에 관한 정보를 기록하는 데 사용되고, 공유 엔트리는, 데이터 블록의 다수의 방문자에 관한 정보를 기록하는 데 사용되는 공유자 기록 구조, 및 단일 포인터 항목을 연관시키는 데 사용되는 연관 구조를 포함한다.
제1 양태의 여섯 번째 가능한 구현 방식을 참조하여, 일곱 번째 가능한 구현 방식으로, 단일 포인트 엔트리는, 단일 포인터 엔트리가 공유 엔트리와 연관되지 않은 때, 데이터 블록이 단일 방문자를 가진다고 지시하거나 또는 데이터 블록이 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유된다고 지시하는 데 사용되는 전체 공유 비트(all sharing bit)를 더 포함한다.
제2 양태에 따르면, 멀티 코어 시스템 내에 있는 데이터 방문자 디렉토리를 저장하도록 구성된 디렉토리 저장 유닛 - 멀티 코어 시스템은 공유 데이터 캐시 및 다수의 프로세서 코어를 포함하고, 공유 데이터 캐시 내의 데이터 블록은 다수의 프로세서 코어 중 적어도 하나의 프로세서 코어에 복사되며, 데이터 방문자 디렉토리는 공유 데이터 캐시의 데이터 블록의 방문자에 관한 정보를 기록하는 데 사용되며, 데이터 블록의 방문자는 데이터 블록의 사본이 저장된 프로세서 코어이고, 디렉토리는 단일 포인터 엔트리 어레이 및 공유 엔트리 어레이를 포함하고, 단일 포인터 엔트리 어레이 내의 각 단일 포인터 엔트리는 데이터 블록의 단일 방문자에 관한 정보를 기록하는 데 사용되거나, 또는 단일 포인터 엔트리와 공유 엔트리 어레이 내의 공유 엔트리 사이의 연관에 관한 정보를 기록하는 데 사용되고, 공유 엔트리 어레이 내의 각 공유 엔트리는 데이터 블록의 다수의 방문자에 관한 정보를 기록하는 데 사용됨 -, 그리고 제1 프로세서 코어에 의해 송신된, 디렉토리 내의 제1 데이터 블록에 대응하는 엔트리를 액세스하는데 사용되는 제1 액세스 요청을 수신하고, 제1 액세스 요청에 따라, 단일 포인터 엔트리 어레이가 제1 데이터 블록에 대응하는 제1 단일 포인터 엔트리를 가진다고 결정하며, 제1 단일 포인터 엔트리에 따라, 공유 엔트리 어레이가 제1 단일 포인터 엔트리와 연관된 제1 공유 엔트리를 가진다고 결정되는 때, 제1 공유 엔트리에 따라 제1 데이터 블록의 다수의 방문자를 결정하도록 구성된 실행 유닛을 포함한다.
제2 양태를 참조하여, 첫 번째 가능한 구현 방식으로, 단일 포인터 엔트리 어레이 내의 단일 포인터 엔트리는 데이터 블록이 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유됨을 지시하는 데 더 사용되며, 실행 유닛은, 제1 단일 포인터 엔트리에 따라, 공유 엔트리 어레이가 제1 단일 포인터 엔트리와 연관된 제1 공유 엔트리를 갖지 않는다고 결정되는 때, 제1 단일 포인터 엔트리에 따라, 제1 데이터 블록의 단일 방문자를 결정하거나 또는 제1 데이터 블록이 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유된다고 결정하도록 더 구성된다.
제2 양태 또는 제2 양태의 첫 번째 가능한 구현 방식을 참조하여, 두 번째 가능한 구현 방식으로, 실행 유닛이 제1 프로세서 코어에 의해 송신된 제1 액세스 요청을 수신한 후에, 실행 유닛은, 제1 액세스 요청에 따라, 단일 포인터 엔트리 어레이가 제1 데이터 블록에 대응하는 단일 포인터 엔트리를 갖지 않는다고 결정하고, 단일 포인터 엔트리 어레이에서, 제1 데이터 블록에 대응하는 제1 단일 포인터 엔트리를 제1 데이터 블록에 할당하며, 제1 단일 포인터 엔트리에 제1 프로세서 코어에 관한 정보를 기록하도록 더 구성된다.
제2 양태의 두 번째 가능한 구현 방식을 참조하여, 세 번째 가능한 구현 방식으로, 실행 유닛은, (1) 단일 포인터 엔트리 어레이가 미사용 단일 포인터 엔트리를 가지면, 단일 포인터 엔트리로서 미사용 단일 포인터 엔트리로부터 단일 포인터 엔트리를 선택하고, 제1 프로세서 코어에 관한 정보를 기록하거나, 또는 (2) 단일 포인터 엔트리 어레이가 미사용 단일 포인터 엔트리를 갖지 않으면 최소 최근 사용 원칙(principle of least recently used)에 따라 단일 포인터 엔트리를 선택하며, (2-1) 선택된 단일 포인터 엔트리가 공유 엔트리와 연관되지 않고 단일 방문자에 관한 정보를 기록하면, 기록된 단일 방문자에게 비활성화 메시지를 송신하고 선택된 단일 포인터 엔트리에 제1 프로세서 코어에 관한 정보를 기록하거나, 또는 (2-2) 선택된 단일 포인터 엔트리가 공유 엔트리와 연관되지 않고 선택된 단일 포인터 엔트리가 데이터 블록이 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유된다고 지시하면, 비활성화 메시지를 모든 프로세서 코어에 방송하고 선택된 단일 포인터 엔트리에 제1 프로세서 코어에 관한 정보를 기록하거나, 또는 (2-3) 선택된 단일 포인터 엔트리가 공유 엔트리와 연관되면, 선택된 단일 포인터 엔트리와 연관된 공유 엔트리에 따라, 연관된 공유 엔트리에 기록된 다수의 방문자를 결정하고, 기록된 다수의 방문자에게 비활성화 메시지를 전송하며, 선택된 단일 포인터 엔트리의 제1 프로세서 코어에 관한 정보를 기록하도록 더 구성된다.
제2 양태의 두 번째 또는 세 번째 가능한 구현 방식을 참조하여, 네 번째 가능한 구현 방식으로, 실행 유닛은, 제2 프로세서 코어에 의해 송신된, 디렉토리 내의, 제1 데이터 블록에 대응하는 엔트리를 액세스하는데 사용되는 제2 액세스 요청을 수신하고, 제2 액세스 요청에 따라, 단일 포인터 엔트리 어레이가 제1 데이터 블록에 대응하는 제1 단일 포인터 엔트리를 가진다고 결정하며, 제1 단일 포인터 엔트리에 따라, 공유 엔트리 어레이가 제1 단일 포인터 엔트리와 연관된 공유 엔트리를 가지고 있지 않다고 결정되는 때, 제1 단일 포인터 엔트리에 따라, 제1 데이터 블록의 단일 방문자가 제1 프로세서 코어라고 결정하고, 공유 엔트리 어레이에 제1 공유 엔트리를 할당하고, 제1 단일 포인터 엔트리와 제1 공유 엔트리 사이의 연관 관계를 확립하며, 제1 공유 엔트리에, 제1 프로세서 코어에 관한 정보 및 제2 프로세서 코어에 관한 정보를 기록하도록 더 구성된다.
제2 양태의 네 번째 가능한 구현 방식을 참조하여, 다섯 번째 가능한 구현 방식으로, 실행 유닛은, (1) 공유 엔트리 어레이가 미사용 공유 엔트리를 가지면, 제1 공유 엔트리로서 미사용 공유 엔트리로부터 공유 엔트리를 선택하거나, 또는 (2) 공유 엔트리 어레이가 미사용 공유 엔트리를 가지지 않고 단 하나의 방문자에 관한 정보를 기록하는 공유 엔트리를 가지면, 단 하나의 방문자에 관한 정보를 기록하는 공유 엔트리를 선택하고, 방문자에 관해 기록된 정보를 선택된 공유 엔트리와 연관된 단일 포인터 엔트리에 기입하거나, 또는 (3) 공유 엔트리 어레이가 미사용 공유 엔트리 또는 단 하나의 방문자에 관한 정보를 기록하는 공유 엔트리를 갖지 않으면 최소 최근 사용 원칙에 따라 공유 엔트리를 선택하고, (3-1) 선택된 공유 엔트리에 기록된 방문자의 수가 미리 결정된 임계치보다 더 크면, 데이터 블록이 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유됨을 지시하도록 선택된 공유 엔트리와 연관된 단일 포인터 엔트리를 설정하거나, 또는 (3-2) 선택된 공유 엔트리에 기록된 방문자의 수가 미리 결정된 임계치보다 크지 않으면, 기록된 방문자들 중 한 방문자에 관한 정보를 선택된 공유 엔트리와 연관된 단일 포인터 엔트리에 기입하고, 기록된 방문자들 중 다른 방문자들에게 비활성화 메시지를 송신하도록 구성된다.
제2 양태 또는 제2 양태의 전술한 가능한 구현 방식 중 어느 하나를 참조하여, 여섯 번째 가능한 구현 방식으로, 단일 포인터 엔트리는, 태그, 공유 엔트리 연관 비트, 및 단일 포인터를 포함하고, 태그는 데이터 블록에 대응하도록 사용되고, 공유 엔트리 연관 비트는 단일 포인터 엔트리가 공유 엔트리와 연관되는지를 지시하는 데 사용되며, 단일 포인터는, 데이터 블록이 단일 방문자를 갖는 때 데이터 블록의 단일 방문자에 관한 정보를 기록하고, 단일 포인터 엔트리가 공유 엔트리와 연관되는 때 단일 포인터 엔트리와 공유 엔트리 사이의 연관 관계에 관한 정보를 기록하는 데 사용되고, 공유 엔트리는, 데이터 블록의 다수의 방문자에 관한 정보를 기록하는 데 사용되는 공유자 기록 구조, 및 단일 포인터 항목을 연관시키는 데 사용되는 연관 구조를 포함한다.
제2 양태의 여섯 번째 가능한 구현 방식을 참조하여, 일곱 번째 가능한 구현 방식으로, 단일 포인터 엔트리는, 단일 포인터 엔트리가 공유 엔트리와 연관되지 않은 때, 데이터 블록이 단일 방문자를 가진다고 지시하거나 또는 데이터 블록이 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유된다고 지시하는 데 사용되는 전체 공유 비트를 더 포함한다.
제3 양태에 따르면, 다중 프로세서 코어, 공유 데이터 캐시, 및 제2 양태 또는 제2 양태의 모든 가능한 구현 방식에 따른 디렉토리 캐시 장치를 포함하는 멀티 코어 시스템이 제공된다.
제4 양태에 따르면, 멀티 코어 시스템 내에 있는 디렉토리를 저장하도록 구성된 디렉토리 저장 유닛으로서, 멀티 코어 시스템은 공유 데이터 캐시 및 다수의 프로세서 코어를 포함하고, 공유 데이터 캐시 내의 데이터 블록은 다수의 프로세서 코어 중 적어도 하나의 프로세서 코어에 복사되며, 디렉토리는 공유 데이터 캐시의 데이터 블록의 방문자에 관한 정보를 기록하는 데 사용되며, 데이터 블록의 방문자는 데이터 블록의 사본이 저장된 프로세서 코어이고, 디렉토리는 단일 포인터 엔트리 어레이 및 공유 엔트리 어레이를 포함하며, 단일 포인터 엔트리 어레이 내의 각 단일 포인터 엔트리는 데이터 블록의 단일 방문자에 관한 정보를 기록하는 데 사용되거나, 또는 단일 포인터 엔트리와 공유 엔트리 어레이 내의 공유 엔트리 사이의 연관에 관한 정보를 기록하는 데 사용되고, 공유 엔트리 어레이 내의 각 공유 엔트리는 데이터 블록의 다수의 방문자에 관한 정보를 기록하는 데 사용된다.
제4 양태를 참조하여, 첫 번째 가능한 구현 방식으로, 단일 포인터 엔트리는, 태그, 공유 엔트리 연관 비트, 전체 공유 비트, 및 단일 포인터를 포함하고, 태그는 데이터 블록에 대응하도록 사용되며, 공유 엔트리 연관 비트는 단일 포인터 엔트리가 공유 엔트리와 연관되는지를 지시하는 데 사용되고, 전체 공유 비트는 단일 포인터 엔트리가 공유 엔트리와 연관되지 않는 때, 데이터 블록이 단일 방문자를 가진다고 지시하거나 또는 데이터 블록이 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유된다고 지시하는 데 사용되며, 단일 포인터는, 데이터 블록이 단일 방문자를 갖는 때 데이터 블록의 단일 방문자에 관한 정보를 기록하고, 단일 포인터 엔트리가 공유 엔트리와 연관되는 때 단일 포인터 엔트리와 공유 엔트리 사이의 연관 관계에 관한 정보를 기록하는 데 사용되고, 공유 엔트리는, 데이터 블록의 다수의 방문자에 관한 정보를 기록하는 데 사용되는 공유자 기록 구조, 및 단일 포인터 항목을 연관시키는 데 사용되는 연관 구조를 포함한다.
제4 양태의 첫 번째 가능한 구현 방식을 참조하여, 두 번째 가능한 구현 방식으로, 단일 포인터 엔트리는, 단일 포인터 엔트리가 공유 엔트리와 연관되지 않은 때, 데이터 블록이 단일 방문자를 가진다고 지시하거나 또는 데이터 블록이 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유된다고 지시하는 데 사용되는 전체 공유 비트를 더 포함한다.
제4 양태의 첫 번째 또는 두 번째 가능한 구현 방식을 참조하여, 세 번째 가능한 구현 방식으로, 공유자 기록 구조는 벡터이다.
전술한 기술적 해결책에 기초하여, 본 발명의 실시예에서, 단일 포인터 엔트리 어레이 및 공유 엔트리 어레이를 포함하는 디렉토리 구조가 사용된다. 데이터 블록이 단일 방문자만을 갖는 때, 단일 포인터 엔트리만이 방문자에 관한 정보를 기록하는 데 사용된다. 데이터 블록이 여러 방문자를 갖는 때, 방문자에 관한 정보는 단일 포인터 엔트리를 공유 엔트리와 연관시키는 방식으로 기록된다. 전술한 방식으로, 디렉토리 내의 디렉토리 엔트리의 평균 크기는 비교적 크게 압축될 수 있고 성능 손실은 비교적 작다. 따라서, 디렉토리에 의해 점유되는 스토리지 리소스가 감소될 수 있고 시스템 확장성이 향상될 수 있다.
이하, 본 발명의 실시예를 설명하기 위해 필요한 첨부 도면을 간략하게 설명한다. 명백하게, 다음의 설명에서의 첨부된 도면은 본 발명의 단지 일부 실시예를 나타내며, 당업자는 창조적인 노력 없이도 이들 도면으로부터 다른 도면을 유도할 수 있다.
도 1은 본 발명의 실시예들에서의 기술적 해결책들이 적용될 수 있는 멀티 코어 시스템의 개략도이다.
도 2는 본 발명의 일 실시예에 따른 디렉토리의 개략도이다.
도 3은 본 발명의 일 실시예에 따른 단일 포인터 엔트리의 개략도이다.
도 4는 본 발명의 일 실시예에 따른 공유 엔트리의 개략도이다.
도 5는 본 발명의 다른 실시예에 따른 디렉토리의 개략도이다.
도 6은 본 발명의 일 실시예에 따른 디렉토리 액세스 방법의 개략적인 순서도이다.
도 7a는 본 발명의 다른 실시예에 따른 디렉토리 액세스 방법의 개략적인 순서도이다.
도 7b는 본 발명의 또 다른 실시예에 따른 디렉토리 액세스 방법의 개략적인 순서도이다.
도 8은 본 발명의 또 다른 실시예에 따른 디렉토리 액세스 방법의 개략적인 순서도이다.
도 9a는 본 발명의 또 다른 실시예에 따른 디렉토리 액세스 방법의 개략적인 순서도이다.
도 9b는 본 발명의 일 실시예에 따라 공유 엔트리를 압축하는 개략도이다.
도 10은 본 발명의 일 실시예에 따른 디렉토리 캐시 장치의 개략적인 블록도이다.
도 11은 본 발명의 일 실시예에 따른 멀티 코어 시스템의 개략도이다.
이하, 본 발명의 실시예의 기술적 해결책을, 본 발명의 실시예들의 첨부 도면을 참조하여 명확하고 완전하게 설명한다. 명백하게, 설명된 실시예는 본 발명의 모든 실시예가 아닌 일부이다. 창의적인 노력없이 본 발명의 실시예에 기초하여 당업자에 의해 획득된 다른 모든 실시예는 본 발명의 보호 범위 내에 있다.
본 명세서 전체에서, "멀티 코어 프로세서 시스템" 또는 "멀티 코어 시스템"이란 용어는 다수의 프로세서 코어(Core)를 포함하는 프로세싱 시스템을 지칭한다. 이 시스템은 온-칩(on-chip) 멀티 코어 프로세서 또는 온-보드(on-board) 멀티 코어 프로세싱 시스템으로서 제공될 수 있다. 온-칩 멀티 코어 프로세서는 하나의 칩(Chip)에 다수의 프로세서 코어(Core)가 집적된 프로세서(Processor)이다. 온-보드 멀티 코어 프로세싱 시스템은 다수의 프로세서 코어의 각 코어를 프로세서에 개별적으로 패키징하고 회로 보드에 프로세서를 통합하여 형성된 프로세싱 시스템을 지칭한다.
본 명세서 전체에서, "프로세서 코어"라는 용어는 "processor core"의 약자이다. 코어(Core)는 커널이라고도 지칭되며 CPU(Central Processing Unit)의 가장 중요한 구성 요소이다. 코어는 특정 생산 공정을 사용하여 단결정 실리콘으로 만들어진다. CPU에서의 연산, 명령 수신/저장, 및 데이터 처리는 모두 프로세서 코어에 의해 실행된다. "다수의 프로세서 코어"라는 용어는 적어도 두 개의 프로세서 코어가 포함되어 있음을 의미한다. "다수의 프로세서 코어"는 선행 기술에서의 멀티 코어(Multi-Core) 및 많은 코어(Many Core) 애플리케이션의 범위를 포괄한다.
이 명세서에서, "디렉토리 캐시 장치"라고도 지칭되는, "디렉토리 캐시"라는 용어는 데이터 방문자 디렉토리를 멀티 코어 시스템에 저장하는 데 사용되는 저장 장치를 의미한다. 디렉토리 액세스 속도를 증가시키기 위해, 저장 장치는 일반적으로 캐시(Cache) 형태로 구현된다. 디렉토리 캐시는 적어도 두 가지 구현 방식으로 구현된다. 하나의 방식으로, 디렉토리 캐시는 프로세서 코어와 독립적으로 구현되고, 즉, 온-칩 멀티 코어 프로세싱 칩 상의 캐시(Cache)의 저장 공간의 일부가 할당되어, 디렉토리 저장용 캐시로서 사용된다. 다른 방식으로, 디렉토리 캐시는 분산 방식으로 구현되고, 즉, 디렉토리는 여러 블록으로 분할되고, 디렉토리 블록은 온-칩 멀티 코어 프로세싱 칩 상의 각 프로세서 코어 내부의 캐시에 개별적으로 저장된다.
이 명세서에서, "공유 데이터 캐시"라는 용어는 다수의 코어에 의해 공유되는 데이터 블록을 저장하는 데 사용되는 저장 장치를 지칭한다. 데이터 블록 액세스 속도를 증가시키기 위해, 저장 장치는 일반적으로 캐시(Cache)의 형태로 구현된다. 특정 구현 프로세스에서, 공유 데이터 캐시는 일반적으로 멀티 코어 프로세서 시스템 내의 레벨 2(L2) 캐시 또는 레벨 3(L3) 캐시를 참조한다.
이 명세서에서, "프라이빗 데이터 캐시"라는 용어는 프로세서 코어 내부의, 프로세서 코어의 프라이빗 데이터를 저장하는 데 사용되는 저장 장치를 지칭한다. 특정 구현 프로세스에서, 프라이빗 데이터 캐시는 일반적으로 멀티 코어 프로세서의 레벨 1(L1) 캐시를 지칭한다. 멀티 코어 프로세서의 구현에서, 프로세서 코어가 데이터 블록에 액세스하는 효율을 개선하기 위해, 프로세서 코어는 공유 데이터의 일부를 획득하고 공유 데이터의 이 부분을 프라이빗 데이터 캐시에 저장할 수 있다.
본 명세서 전체에서, "데이터 블록"이라는 용어는 각 프로세서 코어가 멀티 코어 프로세서 시스템 내의 데이터에 액세스하는 입상도(granularity)를 지칭한다. 특정 구현에서, 데이터 블록은 멀티 코어 프로세서 시스템의 공유 데이터 캐시에 저장된다. 따라서, 일반적인 경우에서, 데이터 블록의 입상도는 캐시 라인(즉, cache line)이다. 특정 구현에서, 데이터 블록의 입상도는 캐시 라인의 일부 또는 다수의 캐시 라인과 같이, 다른 형태로 제공될 수 있다. 세부 사항은 본 명세서 전체에서 제한되지 않는다.
본 명세서 전체에서, "디렉토리 구조" 또는 "데이터 방문자 디렉토리"라고도 지칭되는 "디렉토리"라는 용어는 데이터 블록의 방문자에 관한 정보가 기록되는 데이터 구조를 지칭한다. 특정 구현에서, 데이터 방문자 디렉토리는 단일 포인터 엔트리 어레이 및 공유 엔트리 어레이를 포함한다. 단일 포인터 엔트리 어레이는 다수의 단일 포인터 엔트리를 포함한다. 공유 엔트리 어레이는 다수의 공유 엔트리를 포함한다. 각 단일 포인터 엔트리에 기록된 컨텐츠는 데이터 블록의 방문자 수에 따라 다르다. 데이터 블록이 단일 방문자를 갖는 때, 데이터 블록의 단일 방문자에 관한 정보가 단일 포인터 엔트리에 기록된다. 데이터 블록이 다수의 방문자를 갖는 때, 단일 포인터 엔트리는 단일 포인터 엔트리와 단일 포인터 엔트리에 대응하는 공유 엔트리 사이의 연관에 관한 정보를 기록하는 데에도 사용된다. 데이터 블록이 다수의(둘 또는 그 이상의) 방문자를 갖는 때, 공유 엔트리는 데이터 블록의 다수의 방문자에 관한 정보를 기록하는 데 사용된다. "데이터 방문자 디렉토리"라는 용어는 하나 이상의 데이터 방문자 디렉토리 엔트리를 포함한다.
본 명세서 전체에서, "데이터 방문자 디렉토리 엔트리"라는 용어는 "데이터 방문자 디렉토리"의 구성 단위를 지칭한다. 디렉토리의 각 엔트리는 공유 데이터 캐시의 각 데이터 블록에 대응된다. 특정 구현에서, 데이터 방문자 디렉토리는 단일 포인터 엔트리 어레이 및 공유 엔트리 어레이를 포함한다. 따라서, 데이터 블록이 하나의 데이터 방문자만을 갖는 때, 데이터 블록에 대응하는 데이터 방문자 디렉토리 엔트리는 데이터 블록의 단일 방문자에 관한 정보가 기록되는 단일 포인터 엔트리를 참조한다. 데이터 블록이 다수의(둘 또는 그 이상의) 방문자를 갖는 때, 데이터 블록에 대응하는 데이터 방문자 디렉토리 엔트리는 단일 포인터 엔트리와 그 단일 포인터 엔트리에 대응하는 공유 엔트리 사이의 연관에 관한 정보가 기록된 단일 포인터 엔트리, 및 데이터 블록의 다수의 방문자에 관한 정보가 기록되는 공유 엔트리를 참조한다.
본 명세서 전체에서, "방문자"라는 용어는 데이터 블록에 액세스하는 프로세서 코어를 지칭한다. 예를 들어, 데이터 블록이 세 개의 프로세서 코어에 의해 액세스되는 때, 세 개의 프로세서 코어가 데이터 블록의 방문자라고 지칭된다.
본 명세서 전체에서, "액세스 요청"이라는 용어는 프로세서 코어에 의해 전송되는, 데이터 블록의 방문자에 관한 정보를 문의하는 데 사용되는 요청인, 디렉토리 액세스 요청을 지칭한다.
본 명세서 전체에서, "연관에 관한 정보"라는 용어는 데이터 블록이 적어도 둘의 방문자를 갖는 때, 데이터 블록에 대응하는 단일 포인터 엔트리에 단일 포인터 엔트리에 대응하는 공유 엔트리의 액세스 인덱스가 기록되는 것을 지칭한다. 액세스 인덱스는 데이터 블록의 단일 포인터 엔트리와 단일 포인터 엔트리에 대응하는 공유 엔트리 사이의 연관에 관한 정보라고 지칭된다. 연관에 관한 정보는 데이터 블록의 단일 포인터 엔트리와 단일 포인터 엔트리에 대응하는 공유 엔트리 사이에 연관 관계가 존재함을 지시한다.
본 명세서 전체에서, "최소 최근 사용(Least Recently Used, LRU) 원칙"이라는 용어는 엔트리(단일 포인터 엔트리 또는 공유 엔트리)가 데이터 블록에 할당되는 때, 원칙은 데이터 블록의 엔트리로서 사용되도록, 단일 포인터 엔트리 어레이 또는 공유 엔트리 어레이로부터, 최근 기간에 가장 적게 액세스되는 엔트리를 선택하는 데 사용되는 것을 지칭한다.
본 명세서 전체에서, "비활성화 메시지(invalidation message)"라는 용어는 엔트리 재할당 중에, 비활성화 메시지가 엔트리 내에 원래 기록된 방문자에게 전송되어, 원래의 데이터 블록을 비활성화하는 것을 지칭한다.
도 1은 본 발명의 실시예들에서 기술적 해결책들이 적용될 수 있는 멀티 코어 시스템의 개략도이다.
도 1에 도시된 바와 같이, 멀티 코어 시스템(100)은 다수의 프로세서 코어(110), 공유 데이터 캐시(120), 및 디렉토리 캐시(130)를 포함한다. 다수의 프로세서 코어(110)는 공유 데이터 캐시(120) 내의 데이터 블록(121)을 액세스할 수 있다. 데이터 블록(121)의 사본은 데이터 블록(121)에 액세스한 프로세서 코어(110)의 프라이빗 캐시(111)에 생성된다. 디렉토리 캐시(130)에서, 대응하는 디렉토리 엔트리(131)는 데이터 블록(121)에 대해, 데이터 블록(121)의 방문자 리스트를 기록하는 데 사용된다.
다시 말해, 공유 데이터 캐시(120) 내의 데이터 블록(121)은 다수의 프로세서 코어(110)의 적어도 하나의 프로세서 코어에 복사될 수 있다. 데이터 블록(121)의 방문자는 데이터 블록(121)의 사본이 저장되는 프로세서 코어이다.
디렉토리는 방문자 리스트가 기록되는 구조이다. 이에 기초하여, 디렉토리는 디렉토리 구조로서 표현될 수도 있다.
디렉토리는 디렉토리 캐시(Directory Cache)에 저장되고, 특히 디렉토리 캐시의 디렉토리 저장 유닛에 저장될 수 있다.
디렉토리 캐시는 중앙 집중화되거나 또는 분산될 수 있다. 따라서 디렉토리는 중앙 집중식 디렉토리일 수 있으며, 즉, 디렉토리를 저장하기 위해 멀티 코어 시스템(예를 들어, 멀티 코어 프로세서 칩)에 캐시 영역이 설정된다. 디렉토리는 분산 디렉토리일 수도 있으며, 즉, 디렉토리는 블록들로 분할되고, 블록 분할 후에 획득된 각 디렉토리 부분은 각 프로세서 코어에 저장된다. 예를 들어, 멀티 코어 시스템은 128개의 프로세서 코어를 포함한다고 가정하면, 디렉토리는 128개의 프로세서 코어에 각각 저장된 128개의 부분으로 분할될 수 있다.
도 2는 본 발명의 일 실시예에 따른 디렉토리(200)의 개략도이다.
도 2에 도시된 바와 같이, 디렉토리(200)는 단일 포인터 엔트리 어레이(210) 및 공유 엔트리 어레이(220)를 포함한다.
단일 포인터 엔트리 어레이(210)는 다수의 단일 포인터 엔트리를 포함하고, 공유 엔트리 어레이(220)는 다수의 공유 엔트리를 포함한다.
단일 포인터 엔트리 어레이(210) 내의 단일 포인터 엔트리는 데이터 블록의 단일 방문자에 관한 정보를 기록하거나, 또는 단일 엔트리와 공유 엔트리 어레이(220) 내의 공유 엔트리 사이의 연관에 관한 정보를 기록하는 데 사용된다. 즉, 단일 포인터 엔트리는 데이터 블록이 단일 방문자를 갖는 때의 데이터 블록의 단일 방문자에 관한 정보를 기록하거나, 또는 데이터 블록이 다수의 방문자를 갖는 때 단일 포인터 엔트리와 공유 엔트리 어레이(220)의 공유 엔트리 사이의 연관에 관한 정보를 기록할 수 있다. 공유 엔트리는 데이터 블록의 다수의 방문자에 관한 정보를 기록하는 데 사용된다.
스케일-아웃(scale-out) 애플리케이션에서, 대부분의 데이터는 단 하나의 방문자를 가진다. 데이터는 프라이빗 데이터일 수 있거나 또는 하나의 시구간 내에서 프라이빗한 특징을 나타낼 수 있다. 이에 기초하여, 대부분의 디렉토리 엔트리는 단일 포인터를 사용하여, 프로세서 코어에 관한 정보, 예를 들어, 프로세서 코어의 번호를 기록할 필요만 있고, 디렉토리 엔트리는 본 발명에서 단일 포인터 엔트리라고 지칭된다. 또한, 여러 방문자를 갖는 데이터를 추적하기 위해, 일부 디렉터리 엔트리는 여러 방문자를 추적하는 데 사용할 수 있는 하드웨어 구조(예를 들어, 벡터, 제한된 포인터, 또는 다른 형식)를 사용하고, 디렉토리 엔트리는 본 발명에서 공유 엔트리라고 지칭된다. 모든 단일 포인터 엔트리는 단일 포인터 엔트리 어레이를 구성하며, 전체 공유 엔트리는 공유 엔트리 어레이를 구성한다. 단일 포인터 엔트리 어레이에는 비교적 많은 수량의 엔트리가 있을 수 있고, 공유 엔트리 어레이에는 비교적 적은 수량의 엔트리가 있을 수 있다.
단일 포인터 엔트리는 비교적 적은 비트(bit)를 사용하여 하나의 방문자를 기록할 수 있다. 공유 엔트리는 비교적 많은 비트를 사용하여 다수의 방문자를 기록할 수 있다. 데이터 블록이 단일 방문자를 갖는 때, 단일 포인터 엔트리만이 데이터 블록의 단일 방문자를 기록하는 데 사용된다. 이 경우, 단일 포인터 엔트리는 공유 엔트리와 연관되지 않는다. 데이터 블록이 다수의 방문자를 갖는 때, 데이터 블록에 대응하는 단일 포인터 엔트리가 공유 엔트리와 연관되고, 연관된 공유 엔트리가 데이터 블록의 다수의 방문자를 기록하는 데 사용된다.
선택적으로, 공유 엔트리가 점유하는 저장 공간을 감소시키기 위해, 전체 공유 비트가 단일 포인터 엔트리에 더 설정될 수 있다. 공유 비트가 1로 설정되는 때, 데이터 블록은 멀티 코어 시스템의 모든 프로세서 코어에 의해 공유된다. 이 경우, 단일 포인터 엔트리는 공유 엔트리와 연관되지 않는다. 즉, 데이터 블록이 모든 프로세서 코어에서 공유되는 때, 단일 포인터 엔트리만이 사용되어야 하고, 공유 엔트리는 연관될 필요가 없다.
본 발명의 이 실시예에 따른 디렉토리는 단일 포인터 엔트리 어레이와 공유 엔트리 어레이를 포함하는 구조를 사용한다. 단일 방문자가 있는 때, 단일 포인터 엔트리만이 방문자에 관한 정보를 기록하는 데 사용된다. 다수의 방문자가 있는 때, 방문자에 관한 정보는 단일 포인터 엔트리를 공유 엔트리와 연관하는 방식으로 기록된다. 전술한 방식으로, 디렉토리 내의 디렉토리 엔트리의 평균 크기는 크게 압축될 수 있고, 성능 손실은 매우 작다. 따라서, 디렉토리에 의해 점유되는 스토리지 리소스가 감소될 수 있고 시스템 확장성이 향상될 수 있다.
도 3은 본 발명의 일 실시예에 따른 단일 포인터 엔트리의 개략도이다. 도 3에 도시된 바와 같이, 단일 포인터 엔트리는 태그(301), 공유 엔트리 연관 비트(302), 전체 공유 비트(all sharing bit)(303), 및 단일 포인터(304)를 포함할 수 있다.
태그(301)는 데이터 블록에 대응하는 데 사용된다. 예를 들어, 태그는 데이터 블록의 어드레스에 대응할 수 있으며, 특히 데이터 블록의 일부 어드레스 비트에 대응할 수 있다. 따라서, 데이터 블록의 어드레스와 태그 사이의 대응 관계에 따라, 데이터 블록에 대응하는 단일 포인터 엔트리가 검색될 수 있다.
공유 엔트리 연관 비트(302)는 단일 포인터 엔트리가 공유 엔트리와 연관되는지를 지시하는 데 사용된다. 예를 들어, 공유 엔트리 연관 비트의 값이 1인 것은 단일 포인터 엔트리와 연관된 공유 엔트리가 있음을 지시하고, 값이 0인 것은 단일 포인터 엔트리와 연관된 공유 엔트리가 없음을 지시한다.
전체 공유 비트(303)는 데이터 블록이 모든 프로세서 코어에 의해 공유되거나 또는 데이터 블록이 단일 방문자를 갖는다는 것을 지시하는 데 사용된다. 예를 들어, 전체 공유 비트(303)의 값이 1인 때, 데이터 블록은 모든 프로세서 코어에 의해 공유된다. 공유 엔트리 연관 비트가 0인 때, 즉, 공유 엔트리가 연관되지 않고, 전체 공유 비트가 0인 때, 데이터 블록은 단일 방문자를 갖는다.
단일 포인터(304)는 데이터 블록이 단일 방문자를 갖는 때 데이터 블록의 단일 방문자에 관한 정보를 기록하는 데 사용된다. 다수의 방문자가 있는 때, 단일 포인터(304)는 공유 엔트리를 가리키기 위해, 단일 포인터 엔트리와 공유 엔트리 사이의 연관에 관한 정보를 기록하는 데 사용된다. 단일 방문자에 관한 정보는 방문자의 식별자로서 표현될 수 있다. 예를 들어, 방문자(프로세서 코어)의 번호 또는 다른 식별자 정보가 사용될 수 있다. 단일 포인터 엔트리와 공유 엔트리 사이의 연관에 관한 정보는 포인터 또는 인덱스 정보로서 표현될 수 있다. 그 상세는 본 발명의 실시예에 한정되지 않는다.
예를 들어, 공유 엔트리 연관 비트가 0인 때, 즉, 공유 엔트리가 연관되지 않고 전체 공유 비트가 0인 때, 즉, 단일 방문자가 있는 때, 데이터 블록의 단일 방문자가 단일 포인터에 기록된다. 공유 엔트리 연관 비트가 1인 때, 즉, 공유 엔트리가 연관된 때, 공유 엔트리와의 연관에 관한 정보가 단일 포인터(304)에 기록된다. 연관에 관한 정보는 단일 포인터 엔트리와 연관된 공유 엔트리를 가리키는 데 사용된다.
도 4는 본 발명의 일 실시예에 따른 공유 엔트리의 개략도이다. 도 4에 도시된 바와 같이, 공유 엔트리는 공유자 기록 구조(401), 상위 어드레스(402), 및 방법(way) 선택 비트(403)를 포함할 수 있다. 상위 어드레스(402)와 방법 선택 비트(403)는 연관에 관한 정보를 지시하는 연관 구조이다.
공유자 기록 구조(401)는 데이터 블록의 다수의 방문자에 관한 정보를 기록하는 데 사용된다. 공유자 기록 구조는 다수의 방문자가 기록될 수 있는 벡터 또는 다른 구조일 수 있다.
연관 구조(상위 어드레스(402) 및 방법 선택 비트(403))는 단일 포인터 엔트리를 가리키는 데 사용된다.
데이터 블록이 단일 방문자를 갖는 경우가 비교적 많고 데이터 블록이 다수의 방문자를 갖는 경우가 비교적 적다. 따라서, 본 발명의 이 실시예에서, 단일 포인터 엔트리 어레이는 기본 어레이로서 사용되며, 공유 엔트리 어레이는 보조 어레이로서 사용된다. 도 5에 도시된 바와 같이, 단일 포인터 엔트리 어레이(510) 및 공유 엔트리 어레이(520) 각각은 캐시의 것과 유사한 세트 연관 구조를 사용한다. 세트의 수량(어레이의 각 행이 하나의 세트임)이 깊이(depth)라고 지칭된다. 방법의 수량(어레이의 각 열이 하나의 방법임)이 상관(correlation)이라고 지칭된다. 단일 포인터 엔트리 어레이는 비교적 큰 깊이이지만 적당한 상관을 가지므로, 액세스 전력 소비를 감소시킨다. 공유 엔트리 어레이는 상대적으로 작은 깊이를 갖지만 상대적으로 큰 상관을 가지므로, 공유 엔트리의 활용성을 향상시킨다. 디렉토리 액세스 중에, 액세스 요청의 어드레스 정보에 따라 단일 포인터 엔트리 어레이가 검색되고, 예를 들어, 단일 포인터 엔트리가 존재하는지 여부를 결정하기 위해 단일 포인터 엔트리의 태그가 검색된다. 후속하여, 단일 포인터 엔트리에 따라 공유 엔트리를 액세스하는 것과 공유 엔트리에 따라 단일 포인터 엔트리에 액세스하는 것은 "세트의 번호+방법의 번호"의 방식으로 구현될 수 있고, 특정 구현에서, 먼저 세트의 번호를 결정한 다음 방법의 번호를 결정하여 구현될 수 있다.
전술한 단일 포인터 엔트리의 모든 필드에서, 전체 공유 비트(303)는 선택적 필드임을 유의해야 한다. 데이터 블록이 멀티 코어 시스템의 모든 프로세서 코어에 의해 공유되는 때, 공유 엔트리 내의 공유자 기록 구조(401)는 데이터 블록이 모든 프로세서 코어에 의해 공유됨을 지시하는 데 사용될 수 있다. 공유 엔트리의 저장 공간을 감소시키기 위해, 전체 공유 비트(303)가 단일 포인터 엔트리에 추가된다. 전체 공유 비트(303)는 "멀티 코어 시스템 내의 모든 프로세서 코어에 의해 데이터 블록이 공유되는" 공유 시나리오를 지시하도록, 1로 설정된다.
도 6은 본 발명의 일 실시예에 따른 멀티 코어 시스템에서 데이터 방문자 디렉토리에 액세스하는 방법(600)의 개략적인 순서도이다. 디렉토리는 본 발명의 전술한 실시예에서의 디렉토리이다. 방법(600)은 디렉토리 캐시에 의해 실행될 수 있다.
S610. 제1 프로세서 코어에 의해 송신된, 디렉토리 내의, 제1 데이터 블록에 대응하는 엔트리를 액세스하는 데 사용되는 제1 액세스 요청을 수신한다.
제1 액세스 요청은 데이터 블록의 어드레스 정보를 포함할 수 있다. 디렉토리는 액세스 요청의 어드레스 정보에 따라 액세스될 수 있고, 데이터 블록에 대응하는 엔트리가 디렉토리에서 검색된다.
S620. 제1 액세스 요청에 따라, 단일 포인터 엔트리 어레이가 제1 데이터 블록에 대응하는 제1 단일 포인터 엔트리를 가진다고 결정한다.
제1 액세스 요청이 수신되는 때, 단일 포인터 엔트리 어레이가 먼저 액세스되어, 데이터 블록에 대응하는 단일 포인터 엔트리가 존재하는지를 결정한다. 구체적으로, 데이터 블록에 대응하는 단일 포인터 엔트리가 존재하는지를 결정하기 위해, 단일 포인터 엔트리 어레이가 액세스 요청 내의 어드레스 정보에 따라 검색될 수 있다. 예를 들어, 도 3에 도시된 단일 포인터 엔트리의 구조를 예로서 사용하여, 데이터 블록에 대응하는 단일 포인터 엔트리가 존재하는지를 결정하기 위해, 액세스 요청에 포함된 어드레스 정보가 단일 포인터 엔트리 내의 태그와 비교될 수 있다. 이 실시예에서, 단일 포인터 엔트리 어레이는 제1 데이터 블록에 대응하는 제1 단일 포인터 엔트리를 갖는다.
S630. 제1 단일 포인터 엔트리에 따라, 공유 엔트리 어레이가 제1 단일 포인터 엔트리와 연관된 제1 공유 엔트리를 가진다고 결정되는 때, 제1 공유 엔트리에 따라 제1 데이터 블록의 다수의 방문자를 결정한다.
데이터 블록(제1 데이터 블록으로 표현됨)이 대응하는 단일 포인터 엔트리(제1 단일 포인터 엔트리로 표현됨)를 갖는 때, 공유 엔트리 어레이가 제1 단일 포인터 엔트리와 연관된 공유 엔트리를 갖는지가 제1 단일 포인터 엔트리에 따라 결정된다. 예를 들어, 도 3에 도시된 단일 포인터 엔트리의 구조를 예로서 사용하여, 단일 포인터 엔트리 내의 공유 엔트리 연관 비트에 따라 단일 포인터 엔트리와 연관된 공유 엔트리가 있는지가 결정될 수 있다. 제1 단일 포인터 엔트리와 연관된 공유 엔트리가 있는 때, 즉, 제1 단일 포인터 엔트리가 공유 엔트리(제1 공유 엔트리로 표현됨)와 연관되어 있는 때, 제1 데이터 블록의 다수의 방문자가 제1 공유 엔트리에 따라 결정된다. 특히, 연관된 공유 엔트리는 단일 포인터 엔트리에 기록된 연관에 관한 정보, 예를 들어, 도 3에 도시된 구조에서 단일 포인터에 기록된 연관에 관한 정보에 따라 결정될 수 있고, 공유 엔트리로부터 데이터 블록의 다수의 방문자를 획득하기 위해 공유 엔트리가 액세스된다.
도 5에 도시된 디렉토리의 구조를 예로서 이용하여, 공유 엔트리는 다음과 같은 방식으로 단일 포인터 엔트리에 따라 액세스될 수 있다.
1. 공유 엔트리의 세트 번호를 획득하기 위해, 단일 포인터 엔트리가 속하는 세트의 수로부터 하위 비트가 추출된다.
단일 포인터 엔트리 어레이에는 비교적 많은 수량의 세트가 있고, 공유 엔트리 어레이에는 비교적 적은 수량의 세트가 있다. 따라서, 공유 엔트리의 세트 번호는 단일 포인터 엔트리의 세트 번호의 하위 비트에 따라 결정될 수 있다.
단일 포인터 엔트리 어레이는 4개의 방법과 64개의 세트를 포함하고 공유 엔트리 어레이는 8개의 방법과 16개의 세트를 포함한다고 가정한다.
현재 액세스된 단일 포인터 엔트리의 공유 엔트리 연관 비트가 1이면, 공유 엔트리가 연관되고 공유 엔트리 어레이는 액세스되어야 한다. 64 세트 단일 포인터 엔트리 어레이의 세트의 번호는 6비트(bit)를 포함하고, 단일 포인터 엔트리는 55번째 세트에 속하며, 세트의 번호는 b_110111(b는 이진수를 표현함)로 표현된다. 공유 엔트리 어레이는 총 16개의 세트를 포함하고 4비트를 갖는 세트 번호는 색인을 위해 요구된다. b_110111로부터 하위 4비트 b_0111이 추출되어, 대응하는 공유 엔트리가 공유 엔트리 어레이의 7번째 세트에 속한다는 것을 획득한다.
2. 하나의 세트에 있는 엔트리를 공유하는 다수의 방법을 판독하기 위해, 공유 엔트리 어레이가 액세스된다.
공유 엔트리 어레이의 7번째 세트는 이전 단계에서 획득된 세트 번호에 따라 액세스되어, 세트에서 8개의 공유 엔트리(8개의 방법)을 획득한다.
3. 방법 선택은 단일 포인터 엔트리의 단일 포인터에 따라 공유 엔트리의 다수의 방법에 대해 수행된다.
8개의 방법으로부터의 선택은 3비트가 필요하다. 단일 포인터의 값이 b_1100라고 가정하면, 단일 포인터의 값에서 하위 3비트, 즉, 4번째 방법이, 사용되어, 연관된 공유 엔트리를 획득할 수 있다.
본 발명의 이 실시예에서, 선택적으로, 도 7a에 도시된 바와 같이, 방법(600)은 다음을 더 포함할 수 있다.
S640. 제1 단일 포인터 엔트리에 따라, 공유 엔트리 어레이가 제1 단일 포인터 엔트리와 연관된 제1 공유 엔트리를 갖지 않는다고 결정되는 때, 제1 단일 포인터 엔트리에 따라, 제1 데이터 블록의 단일 방문자를 결정하거나 또는 제1 데이터 블록이 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유된다고 결정한다.
즉, 제1 단일 포인터 엔트리가 제1 공유 엔트리와 연관되지 않은 때, 제1 데이터 블록의 방문자는 오직 제1 단일 포인터 엔트리에 따라 결정된다. 구체적으로, 제1 단일 포인터 엔트리는 제1 데이터 블록의 단일 방문자를 기록하는 데 또는 제1 데이터 블록이 멀티 코어 시스템의 모든 프로세서 코어에 의해 공유됨을 지시하는 데 사용될 수 있다. 두 경우 모두, 공유 엔트리가 연관될 필요가 없고, 비교적 소수의 비트가 표현을 위해 사용될 수 있다. 특정 예를 들어, 전술한 실시예를 참조하고, 상세한 설명은 여기서 다시 설명되지 않는다.
본 발명의 실시예에 따른 디렉토리 액세스 방법에서, 단일 포인터 엔트리가 먼저 액세스되고, 단일 포인터 엔트리가 공유 엔트리와 연관되는 때, 연관된 공유 엔트리가 액세스된다. 데이터 블록이 단일 방문자를 갖는 때, 단일 방문자는 단일 포인터 엔트리에서 획득될 수 있다. 데이터 블록이 다수의 방문자를 갖는 때, 단일 포인터 엔트리와 연관된 공유 엔트리로부터 다수의 방문자가 획득될 수 있다. 이러한 방식으로, 디렉토리 내의 디렉토리 엔트리의 평균 크기는 크게 압축될 수 있고, 성능 손실은 매우 작다. 따라서, 디렉토리에 의해 점유되는 스토리지 리소스가 감소될 수 있고 시스템 확장성이 향상될 수 있다.
본 발명의 실시예에서, 단일 포인터 엔트리 어레이가 데이터 블록에 대응하는 단일 포인터 엔트리를 갖지 않는 때, 대응하는 단일 포인터 엔트리가 데이터 블록에 더 할당될 수 있다.
따라서, 선택적으로, 제1 프로세서 코어에 의해 전송된 제1 액세스 요청이 수신된 후에, 도 7b에 도시된 바와 같이, 방법(600)은,
S662. 제1 액세스 요청에 따라, 단일 포인터 엔트리 어레이가 제1 데이터 블록에 대응하는 단일 포인터 엔트리를 갖지 않는다고 결정한다.
S663. 단일 포인터 엔트리 어레이에서, 제1 데이터 블록에 대응하는 제1 단일 포인터 엔트리를 제1 데이터 블록에 할당하고, 제1 단일 포인터 엔트리에 제1 프로세서 코어에 관한 정보를 기록한다.
즉, 데이터 블록이 대응하는 단일 포인터 엔트리를 갖지 않는 때, 단일 포인터 엔트리가 데이터 블록에 할당될 수 있고, 할당된 단일 포인터 엔트리에 단일 방문자(즉, 제1 프로세서 코어)에 관한 정보가 기록된다.
특히, 단일 포인터 엔트리 어레이가 미사용 단일 포인터 엔트리를 가지면, 미사용 단일 포인터 엔트리로부터 단일 포인터 엔트리가 제1 단일 포인터 엔트리로서 선택되고, 제1 프로세서 코어에 관한 정보가 기록된다.
단일 포인터 엔트리 어레이가 미사용 단일 포인터 엔트리를 갖지 않으면, 단일 포인터 엔트리는 최소 최근 사용 원칙에 따라 선택된다.
선택된 단일 포인터 엔트리가 공유 엔트리와 연관되지 않고 단일 방문자에 관한 정보를 기록하면, 기록된 단일 방문자에게 비활성화 메시지가 송신되고 제1 프로세서 코어에 관한 정보가 선택된 단일 포인터 엔트리에 기록된다.
선택된 단일 포인터 엔트리가 공유 엔트리와 연관되지 않고 멀티 코어 시스템의 모든 프로세서 코어에 의해 데이터 블록이 공유된다고 지시하면, 비활성화 메시지가 모든 프로세서 코어에 방송되고, 제1 프로세서 코어에 관한 정보가 선택된 단일 포인터 엔트리에 기록된다.
선택된 단일 포인터 엔트리가 공유 엔트리와 연관되면, 연관된 공유 엔트리에 기록된 다수의 방문자는 선택된 단일 포인터 엔트리와 연관된 공유 엔트리에 따라 결정되고, 비활성화 메시지는 기록된 다수의 방문자에게 송신되고, 제1 프로세서 코어에 관한 정보가 선택된 단일 포인터 엔트리에 기록된다.
다음은 본 발명의 실시예에 따른 디렉토리 액세스 방법을 일례로서 상세히 설명한다.
도 8은 본 발명의 다른 실시예에 따른 디렉토리 액세스 방법의 개략적인 순서도이다.
801. 단일 포인터 엔트리 어레이에 액세스한다. 단일 포인터 엔트리가 적중되면, 단계(802)가 수행되거나, 또는 단일 포인터 엔트리가 적중되지 않으면, 단계(807)가 수행된다.
예를 들어, 단일 포인터 엔트리 및 공유 엔트리가 각각 도 3 및 도 4에 도시된 구조를 사용하는 때, 데이터 블록에 대응하는 단일 포인터 엔트리가 존재하는지를 결정하기 위해, 액세스 요청에 포함된 어드레스 정보는 단일 포인터 엔트리 내의 태그와 비교될 수 있다.
802. 단일 포인터 엔트리가 공유 엔트리와 연관되어 있는지를 결정하고, 그렇다면 단계(803)가 수행되거나, 또는 그렇지 않으면, 단계(804)가 수행된다.
예를 들어, 단일 포인터 엔트리가 공유 엔트리와 연관되는지가 적중된 단일 포인터 엔트리의 공유 엔트리 연관 비트에 따라 결정될 수 있다. 공유 엔트리 연관 비트가 1이면, 공유 엔트리가 연관되고, 공유 엔트리 연관 비트가 0이면, 공유 엔트리는 연관되지 않는다.
803. 연관된 공유 엔트리에 액세스하여 방문자 리스트를 획득한다.
예를 들어, 연관된 공유 엔트리의 공유자 기록 구조로부터 방문자 리스트를 획득하기 위해, 연관된 공유 엔트리는 단일 포인터 엔트리의 단일 포인터에 따라 발견될 수 있다.
804. 전체 공유가 구현되는지를 결정하고, 그렇다면, 단계(805)가 수행되거나, 또는 그렇지 않으면, 단계(806)가 수행된다.
공유 엔트리가 연관되지 않은 때, 데이터 블록이 모든 프로세서 코어에 의해 공유되는지가 결정된다. 예를 들어, 전체 공유가 구현되는지는 단일 포인터 엔트리의 전체 공유 비트에 따라 결정될 수 있다. 전체 공유 비트가 0이면, 데이터 블록은 단일 방문자를 갖고, 즉, 전체 공유가 구현되지 않는다. 전체 공유 비트가 1이면, 데이터 블록이 모든 프로세서 코어에 의해 공유되고, 즉, 전체 공유가 구현된다.
805. 모든 프로세서 코어에 의해 데이터 블록이 공유된다고 결정한다.
806. 단일 방문자를 획득한다.
예를 들어, 단일 방문자는 단일 포인터 엔트리의 단일 포인터로부터 획득될 수 있다.
807. 미사용 단일 포인터 엔트리가 있는지를 결정하고, 그렇다면, 단계(808)가 수행되거나, 또는 그렇지 않으면, 단계(809)가 수행된다.
808. 미사용 단일 포인터 엔트리를 선택하고 액세스하는 프로세서 코어에 관한 정보를 기록한다.
예를 들어, 프로세서 코어의 식별자가 기록될 수 있다. 예를 들어, 64개의 코어를 사용하면 6 비트 식별자가 사용될 수 있다.
809. 최소 최근 사용된 단일 포인터 엔트리를 선택하고, 선택된 단일 포인터 엔트리가 공유 엔트리와 연관되는지를 결정하며, 그렇다면, 단계(810)가 수행되거나, 또는 그렇지 않으면, 단계(811)가 수행된다.
810. 다수의 방문자를 비활성화하고 액세스하는 프로세서 코어에 관한 정보를 기록한다.
연관된 공유 엔트리에 기록된 여러 방문자는 연관된 공유 엔트리에 따라 결정된다. 비활성화 메시지가 여러 방문자에게 전송되고 액세스하는 프로세서 코어에 관한 정보가 선택한 단일 포인터 엔트리에 기록된다.
811. 선택된 단일 포인터 엔트리가 전체 공유를 지시하는지를 결정하고, 그렇다면, 단계(812)가 수행되거나, 또는 그렇지 않으면, 단계(813)이 수행된다.
812. 비활성화 메시지를 방송하고 액세스하는 프로세서 코어에 관한 정보를 선택된 단일 포인터 엔트리에 기록한다.
813. 단일 방문자를 비활성화하고 액세스하는 프로세서 코어에 관한 정보를 기록한다.
선택된 단일 포인터 엔트리 내에 기록된 단일 방문자가 결정되고, 비활성화 메시지가 단일 방문자에게 송신되며, 액세스하는 프로세서 코어에 관한 정보가 선택된 단일 포인터 엔트리에 기록된다.
본 발명의 실시예에서, 단일 포인터 엔트리(즉, 제1 단일 포인터 엔트리)가 데이터 블록(상기에 언급된 제1 데이터 블록)에 할당된 후, 제1 데이터 블록의 단일 방문자(즉, 제1 프로세서 코어)가 제1 단일 포인터 엔트리에 기록된다. 이 경우, 제1 데이터 블록은 제1 프로세서 코어에 의해 개인적으로 소유된다. 제1 데이터 블록이 다른 프로세서 코어(제1 프로세서 코어로서 표현됨)에 의해 액세스되는 때, 공유 엔트리 어레이에 공유 엔트리가 할당되어야 하고, 다수의 방문자(제1 프로세서 코어와 제2 프로세서 코어)에 관한 정보는 공유 엔트리를 사용하여 기록된다.
따라서, 선택적으로, 도 9a에 도시된 바와 같이, 방법(600)은 다음을 더 포함할 수 있다.
S671. 제2 프로세서 코어에 의해 송신된, 디렉토리 내의, 제1 데이터 블록에 대응하는 엔트리를 액세스하는 데 사용되는 제2 액세스 요청을 수신한다.
S672. 제2 액세스 요청에 따라, 단일 포인터 엔트리 어레이가 제1 데이터 블록에 대응하는 제1 단일 포인터 엔트리를 가진다고 결정한다.
S673. 제1 단일 포인터 엔트리에 따라, 공유 엔트리 어레이가 제1 단일 포인터 엔트리와 연관된 공유 엔트리를 가지고 있지 않다고 결정되는 때, 제1 단일 포인터 엔트리에 따라, 제1 데이터 블록의 단일 방문자가 제1 프로세서 코어라고 결정한다.
S674. 공유 엔트리 어레이에 제1 공유 엔트리를 할당하고, 제1 단일 포인터 엔트리와 제1 공유 엔트리 사이의 연관 관계를 확립하며, 제1 공유 엔트리에, 제1 프로세서 코어에 관한 정보 및 제2 프로세서 코어에 관한 정보를 기록한다.
구체적으로, 제1 공유 엔트리가 할당될 때, 공유 엔트리 어레이가 미사용 공유 엔트리를 가지면, 미사용 공유 엔트리로부터 제1 공유 엔트리로서 공유 엔트리가 선택된다.
공유 엔트리 어레이가 미사용 공유 엔트리를 갖지 않고 단 하나의 방문자에 관한 정보를 기록하는 공유 엔트리를 가지면, 단 하나의 방문자에 관한 정보를 기록하는 공유 엔트리가 선택되고, 방문자에 관해 기록된 정보는 선택된 공유 엔트리와 연관된 단일 포인터 엔트리에 기록된다.
공유 엔트리 어레이는 미사용 공유 엔트리 또는 단 하나의 방문자에 관한 정보를 기록하는 공유 엔트리를 갖지 않으면, 공유 엔트리는 최소 최근 사용 원칙에 따라 선택된다. 선택된 공유 엔트리 내에 기록된 방문자의 수량이 미리 결정된 임계치보다 더 크면, 선택된 공유 엔트리와 연관된 단일 포인터 엔트리가 데이터 블록이 멀티 코어 시스템의 모든 프로세서 코어에 의해 공유됨을 지시하도록 설정된다. 선택된 공유 엔트리 내에 기록된 방문자의 수량이 미리 결정된 임계치보다 크지 않으면, 기록된 방문자들 중 하나의 방문자에 관한 정보가 선택된 공유 엔트리와 연관된 단일 포인터 엔트리에 기록되고, 비활성화 메시지가 기록된 방문자들 중 다른 방문자들에게 송신된다.
즉, 공유 엔트리가 할당될 때, 미사용 공유 엔트리가 우선적으로 사용된다. 미사용 공유 엔트리가 없으면, 사용된 공유 엔트리를 회수되어야 하고 단 하나의 방문자를 기록하는 공유 엔트리가 우선적으로 선택된다. 단 하나의 방문자를 기록하는 공유 엔트리가 없으면, 최소 최근 사용된 공유 엔트리가 선택된다. 단 하나의 방문자를 기록하는 공유 엔트리가 회수되는 때, 단일 방문자는 연관된 단일 포인터 엔트리에 기록되어야 하므로, 방문자 정보가 손실되지 않는다. 다수의 방문자를 기록하는 공유 엔트리가 회수되는 때, 공유 리스트는 방문자의 수에 따라 상이한 방식으로 압축될 수 있고 연관된 단일 포인터 엔트리에 저장될 수 있다. 구체적으로, 방문자의 수가 미리 결정된 임계치보다 더 크면, 연관된 단일 포인터 엔트리는 데이터 블록이 모든 프로세서 코어에 의해 공유됨을 지시하도록 설정되고, 이는 상향 변환(up-conversion)으로 지칭될 수 있다. 방문자의 수가 미리 결정된 임계치보다 크지 않으면, 방문자들 중 한 방문자는 연관된 단일 포인터 엔트리에 기록되고, 비활성화 메시지가 다른 방문자에게 전송되며, 즉, 단 하나의 방문자가 보관되고, 이는 하향 변환(down-conversion)으로 지칭될 수 있다.
예를 들어, 도 9b에 도시된 바와 같이, 상향 변환이 수행되는 때, 연관된 단일 포인터 엔트리의 전체 공유 비트는 1로 설정되어, 데이터 블록이 모든 프로세서 코어에 의해 공유됨을 지시한다. 하향 변환이 수행되는 때, 단 하나의 방문자(도 9b에 도시된 번호 3 방문자)가 유지되고, 방문자는 연관된 단일 포인터 엔트리에 기록된다.
회수된 공유 엔트리는 다른 데이터 블록에 할당될 수 있다. 즉, 본 발명의 실시예에서 공유 엔트리는 데이터 공유의 변화에 따라 동적으로 할당될 수 있다. 이 방식으로, 디렉토리 리소스는 보다 융통성있게 활용되고, 디렉토리 리소스의 활용은 개선될 수 있다.
공유 엔트리가 회수되는 때, 공유 엔트리에 따라 단일 포인터 엔트리가 액세스되어야한다. 이 경우, 연관된 단일 포인터 엔트리는 공유 엔트리에 따라 결정될 수 있다. 구체적으로, 연관된 단일 포인터 엔트리는 공유 엔트리의 연관 구조에 따라 결정될 수 있다.
도 5에 도시된 디렉토리 구조를 예로서 사용하여, 단일 포인터 엔트리는 다음의 방식으로 공유 엔트리에 따라 액세스될 수 있다.
1. 단일 포인터 엔트리 어레이 내의 세트의 번호를 획득하기 위해, 공유 엔트리가 속한 세트의 번호 및 상위 어드레스가 함께 결합된다.
단일 포인터 엔트리 어레이에 비교적 많은 수량의 세트가 있고, 공유 엔트리 어레이에 비교적 적은 수량의 세트가 있다. 따라서, 상위 어드레스와 공유 엔트리의 세트 번호를 조합하여 단일 포인터 엔트리의 세트 번호가 획득되어야 한다.
단일 포인터 엔트리 어레이는 4개의 방법과 64개의 세트를 포함하고 공유 엔트리 어레이는 8개의 방법과 16개의 세트를 포함한다고 가정한다.
상위 어드레스가 b_10이고, 방법 선택 비트가 b_01인 다섯 번째 세트(b_0101)에 공유 엔트리가 속한다고 가정하면, 대응하는 단일 포인터 엔트리의 세트 번호는 공유 엔트리의 세트 수와 상위 어드레스를 결합하여 획득되며, b_100101, 즉, 37이다.
2. 한 세트 내의 단일 포인터 엔트리의 다수의 방법을 판독하기 위해, 단일 포인터 엔트리 어레이가 액세스된다.
단일 포인터 엔트리 어레이의 37번째 세트는 상기의 단계에서 획득된 세트 번호에 따라 액세스되어, 세트 내의 4개의 단일 포인터 엔트리(네 개의 방법)를 획득한다.
3. 방법 선택은 공유 엔트리 내의 방법 선택 비트에 따라 단일 포인터 엔트리의 다수의 방법에 대해 수행된다.
공유 엔트리의 방법 선택 비트는 방법 선택을 위해 사용되고, 방법 선택 비트는 b_01, 즉, 제1 방법이므로, 연관된 단일 포인터 엔트리를 획득한다.
본 발명의 다양한 실시예들에서, 상기의 프로세스들의 시퀀스 번호는 실행 순서를 의미하지 않는다는 것을 이해해야 한다. 프로세스의 실행 순서는 프로세스의 기능 및 본질적인 논리에 의해 결정되어야 하며, 본 발명의 실시예의 구현 프로세스에 대한 제한으로 해석되어서는 안된다.
도 10은 본 발명의 일 실시예에 따른 디렉토리 캐시 장치(1000)의 개략적인 블록도를 도시한다. 도 10에 도시된 바와 같이, 디렉토리 캐시 장치(1000)는 디렉토리 저장 유닛(1010)과 실행 유닛(1020)을 포함한다.
디렉토리 저장 유닛(1010)은 멀티 코어 시스템 내에 있는 디렉토리를 저장하도록 구성된다. 멀티 코어 시스템은 공유 데이터 캐시와 다수의 프로세서 코어를 포함한다. 공유 데이터 캐시의 데이터 블록은 다수의 프로세서 코어 중 적어도 하나의 프로세서 코어에 복사된다. 이 디렉토리는 공유 데이터 캐시 내의 데이터 블록의 방문자에 관한 정보를 기록하는 데 사용된다. 데이터 블록의 방문자는 데이터 블록의 사본이 저장되는 프로세서 코어이다. 디렉토리는 단일 포인터 엔트리 어레이 및 공유 엔트리 어레이를 포함하며, 단일 포인터 엔트리 어레이의 각 단일 포인터 엔트리는 데이터 블록의 단일 방문자에 관한 정보를 기록하거나, 단일 포인터 엔트리 및 공유 엔트리 어레이의 공유 엔트리를 포함하며 공유 엔트리 어레이의 각 공유 엔트리는 데이터 블록의 여러 방문자에 관한 정보를 기록하는 데 사용된다.
실행 유닛(1020)은, 제1 프로세서 코어에 의해 송신된, 디렉토리 내의 제1 데이터 블록에 대응하는 엔트리를 액세스하는데 사용되는 제1 액세스 요청을 수신하고, 제1 액세스 요청에 따라, 단일 포인터 엔트리 어레이가 제1 데이터 블록에 대응하는 제1 단일 포인터 엔트리를 가진다고 결정하며, 제1 단일 포인터 엔트리에 따라, 공유 엔트리 어레이가 제1 단일 포인터 엔트리와 연관된 제1 공유 엔트리를 가진다고 결정되는 때, 제1 공유 엔트리에 따라 제1 데이터 블록의 다수의 방문자를 결정하도록 구성된다.
본 발명의 실시예에 따른 디렉토리 캐시 장치에서, 단일 포인터 엔트리 어레이 및 공유 엔트리 어레이를 포함하는 디렉토리 구조가 사용된다. 다수의 방문자가 기록될 필요가 없는 때, 단일 포인터 엔트리는 공유 엔트리와 연관되지 않는다. 다수의 방문자가 기록되어야 하는 때, 단일 포인터 엔트리가 공유 엔트리와 연관된다. 이 방식으로, 디렉토리 내의 디렉토리 엔트리의 평균 크기는 크게 압축될 수 있고, 성능 손실은 매우 작다. 따라서, 디렉토리에 의해 점유되는 스토리지 리소스가 감소될 수 있고 시스템 확장성이 향상될 수 있다.
본 발명의 이 실시예에서, 선택적으로, 단일 포인터 엔트리는 태그, 공유 엔트리 연관 비트, 및 단일 포인터를 포함한다. 태그는 데이터 블록에 대응하는 데 사용된다. 공유 엔트리 연관 비트는 단일 포인터 엔트리가 공유 엔트리와 연관되는지를 지시하는 데 사용된다. 단일 포인터는 데이터 블록이 단일 방문자를 갖는 때 단일 방문자에 관한 정보를 기록하고 단일 포인터 엔트리가 공유 엔트리와 연관되는 때 단일 포인터 엔트리와 공유 엔트리 사이의 연관에 관한 정보를 기록하는 데 사용된다.
공유 엔트리는 공유자 기록 구조 및 연관 구조를 포함한다. 공유자 기록 구조는 데이터 블록의 다수의 방문자에 관한 정보를 기록하는 데 사용되고, 연결 구조는 단일 포인터 엔트리를 연관하는 데 사용된다.
본 발명의 이 실시예에서, 선택적으로, 단일 포인터 엔트리는 전체 공유 비트를 더 포함한다.
전체 공유 비트는 단일 포인터 엔트리가 공유 엔트리와 연관되지 않은 때 데이터 블록이 단일 방문자를 가짐을 지시하거나 또는 데이터 블록이 멀티 코어 시스템의 모든 프로세서 코어에 의해 공유됨을 지시하는 데 사용된다.
본 발명의 이 실시예에서, 단일 포인터 엔트리 어레이 내의 단일 포인터 엔트리는 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 데이터 블록이 공유됨을 지시하는 데 더 사용되고, 실행 유닛(1020)은, 제1 단일 포인터 엔트리에 따라, 공유 엔트리 어레이가 제1 단일 포인터 엔트리와 연관된 제1 공유 엔트리를 갖지 않는다고 결정되는 때, 제1 단일 포인터 엔트리에 따라, 제1 데이터 블록의 단일 방문자를 결정하거나 또는 제1 데이터 블록이 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유된다고 결정하도록 더 구성된다.
본 발명의 이 실시예에서, 선택적으로, 실행 유닛(1020)은 제1 프로세서 코어에 의해 송신된 제1 액세스 요청을 수신한 후에, 실행 유닛(1020)은, 제1 액세스 요청에 따라, 단일 포인터 엔트리 어레이가 제1 데이터 블록에 대응하는 단일 포인터 엔트리를 갖지 않는다고 결정하고, 단일 포인터 엔트리 어레이에서, 제1 데이터 블록에 대응하는 제1 단일 포인터 엔트리를 제1 데이터 블록에 할당하며, 제1 단일 포인터 엔트리에 제1 프로세서 코어에 관한 정보를 기록하도록 더 구성된다.
본 발명의 이 실시예에서, 선택적으로, 실행 유닛(1020)은, (1) 단일 포인터 엔트리 어레이가 미사용 단일 포인터 엔트리를 가지면, 단일 포인터 엔트리로서 미사용 단일 포인터 엔트리로부터 단일 포인터 엔트리를 선택하고, 제1 프로세서 코어에 관한 정보를 기록하거나, 또는 (2) 단일 포인터 엔트리 어레이가 미사용 단일 포인터 엔트리를 갖지 않으면 최소 최근 사용 원칙(principle of least recently used)에 따라 단일 포인터 엔트리를 선택하며, (2-1) 선택된 단일 포인터 엔트리가 공유 엔트리와 연관되지 않고 단일 방문자에 관한 정보를 기록하면, 기록된 단일 방문자에게 비활성화 메시지를 송신하고 선택된 단일 포인터 엔트리에 제1 프로세서 코어에 관한 정보를 기록하거나, 또는 (2-2) 선택된 단일 포인터 엔트리가 공유 엔트리와 연관되지 않고 선택된 단일 포인터 엔트리가 데이터 블록이 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유된다고 지시하면, 비활성화 메시지를 모든 프로세서 코어에 방송하고 선택된 단일 포인터 엔트리에 제1 프로세서 코어에 관한 정보를 기록하거나, 또는 (2-3) 선택된 단일 포인터 엔트리가 공유 엔트리와 연관되면, 선택된 단일 포인터 엔트리와 연관된 공유 엔트리에 따라, 연관된 공유 엔트리에 기록된 다수의 방문자를 결정하고, 기록된 다수의 방문자에게 비활성화 메시지를 전송하며, 선택된 단일 포인터 엔트리의 제1 프로세서 코어에 관한 정보를 기록하도록 더 구성된다.
본 발명의 이 실시예에서, 선택적으로, 실행 유닛(1020)은, 제2 프로세서 코어에 의해 송신된, 디렉토리 내의, 제1 데이터 블록에 대응하는 엔트리를 액세스하는데 사용되는 제2 액세스 요청을 수신하고, 제2 액세스 요청에 따라, 단일 포인터 엔트리 어레이가 제1 데이터 블록에 대응하는 제1 단일 포인터 엔트리를 가진다고 결정하며, 제1 단일 포인터 엔트리에 따라, 공유 엔트리 어레이가 제1 단일 포인터 엔트리와 연관된 공유 엔트리를 가지고 있지 않다고 결정되는 때, 제1 단일 포인터 엔트리에 따라, 제1 데이터 블록의 단일 방문자가 제1 프로세서 코어라고 결정하고, 공유 엔트리 어레이에 제1 공유 엔트리를 할당하고, 제1 단일 포인터 엔트리와 제1 공유 엔트리 사이의 연관 관계를 확립하며, 제1 공유 엔트리에, 제1 프로세서 코어에 관한 정보 및 제2 프로세서 코어에 관한 정보를 기록하도록 더 구성된다.
본 발명의 이 실시예에서, 선택적으로, 실행 유닛(1020)은, (1) 공유 엔트리 어레이가 미사용 공유 엔트리를 가지면, 제1 공유 엔트리로서 미사용 공유 엔트리로부터 공유 엔트리를 선택하거나, 또는 (2) 공유 엔트리 어레이가 미사용 공유 엔트리를 가지지 않고 단 하나의 방문자에 관한 정보를 기록하는 공유 엔트리를 가지면, 단 하나의 방문자에 관한 정보를 기록하는 공유 엔트리를 선택하고, 방문자에 관해 기록된 정보를 선택된 공유 엔트리와 연관된 단일 포인터 엔트리에 기입하거나, 또는 (3) 공유 엔트리 어레이가 미사용 공유 엔트리 또는 단 하나의 방문자에 관한 정보를 기록하는 공유 엔트리를 갖지 않으면 최소 최근 사용 원칙에 따라 공유 엔트리를 선택하고, (3-1) 선택된 공유 엔트리에 기록된 방문자의 수가 미리 결정된 임계치보다 더 크면, 데이터 블록이 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유됨을 지시하도록 선택된 공유 엔트리와 연관된 단일 포인터 엔트리를 설정하거나, 또는 (3-2) 선택된 공유 엔트리에 기록된 방문자의 수가 미리 결정된 임계치보다 크지 않으면, 기록된 방문자들 중 한 방문자에 관한 정보를 선택된 공유 엔트리와 연관된 단일 포인터 엔트리에 기입하고, 기록된 방문자들 중 다른 방문자들에게 비활성화 메시지를 송신하도록 구성된다.
본 발명의 이 실시예에서, 디렉토리 캐시 장치(1000) 내의 디렉토리 저장 유닛(1010)에 저장된 디렉토리는 본 발명의 전술한 실시예에 따른 디렉토리일 수 있다. 실행 유닛(1020)은 상기의 방법 실시예에서의 각 프로세스를 수행할 수 있다. 대응하는 구체적인 설명에 대해서, 전술한 실시예를 참조한다. 간결함을 위해, 상세한 설명은 여기서 다시 기술되지 않는다.
본 발명의 실시예는 멀티 코어 시스템을 더 제공한다. 도 11에 도시된 바와 같이, 본 발명의 전술한 실시예에서 멀티 코어 시스템(1100)은 다수의 프로세서 코어(1110), 공유 데이터 캐시(1120), 및 디렉토리 캐시 장치(1000)를 포함한다.
특히, 본 발명의 이 실시예의 멀티 코어 시스템(1100)은 멀티 코어 시스템(100)과 비교하여, 새로운 디렉토리 캐시 장치(1000)를 사용한다. 디렉토리 캐시 장치(1000)는 본 발명의 실시예에서 제공되는 새로운 디렉토리 구조를 포함한다.
당업자라면는 본 명세서에 개시된 실시예들에서 설명된 예들과 결합하여, 유닛들 및 알고리즘 단계들이 전자 하드웨어, 컴퓨터 소프트웨어, 또는 이들의 조합에 의해 구현될 수 있음을 인식할 수 있다. 하드웨어와 소프트웨어 사이의 상호 호환성을 명확하게 설명하기 위해, 전술 한 설명은 기능에 따른 각 예의 구성 및 단계를 일반적으로 설명된다. 기능이 하드웨어 또는 소프트웨어에 의해 수행되는지는 기술적 솔루션의 특정 응용 및 설계 제약 조건에 따라 다르다. 당업자는 각 특정 응용에 대해 기술된 기능을 구현하기 위해 상이한 방법을 사용할 수 있지만, 구현이 본 발명의 범위를 벗어나는 것으로 간주되어서는 안된다.
전술한 시스템, 장치, 및 유닛의 상세한 작업 프로세스를 위해, 전술한 방법 실시예에서 대응하는 프로세스가 참조될 수 있으며, 편리하고 간단한 설명을 위해, 상세한 설명은 여기에서 다시 기술되지 않는다는 것이 당업자에 의해 명확하게 이해될 수 있다.
본원에서 제공된 여러 실시예에서, 개시된 시스템, 장치, 및 방법은 다른 방식으로 구현될 수 있음을 이해해야 한다. 예를 들어, 설명된 장치 실시예는 단지 예시적인 것이다. 예를 들어, 유닛 구분은 논리적인 기능 구분일 뿐이며 실제 구현에서는 다른 구분일 수 있다. 예를 들어, 복수의 유닛 또는 구성 요소가 결합되거나 또는 다른 시스템에 통합되거나, 일부 특징이 무시되거나 또는 수행되지 않을 수 있다. 또한, 표시되거나 논의된 상호 연결 또는 직접 연결 또는 통신 연결은 일부 인터페이스를 통해 구현될 수 있다. 장치 또는 유닛 사이의 간접 연결 또는 통신 연결은 전자적, 기계적, 또는 다른 형태로 구현될 수 있다.
분리된 부분들로 기술된 유닛들은 물리적으로 분리될 수도 있거나 또는 그렇지 않을 수도 있으며, 유닛들로서 표시되는 부분들은 물리적 유닛일 수도 있거나 아닐 수도 있거으며, 하나의 위치에 위치되거나, 또는 복수의 네트워크 유닛 상에 분산될 수도 있다. 유닛의 일부 또는 전부는 본 발명의 실시예의 해결책의 목적을 달성하기 위해 실제 필요에 따라 선택될 수 있다.
또한, 본 발명의 실시예에서의 기능 유닛은 하나의 처리 유닛에 통합되거나, 각각의 유닛이 물리적으로 단독으로 존재할 수도 있거나, 또는 둘 이상의 유닛이 하나의 유닛으로 통합될 수도 있다. 통합 유닛은 하드웨어의 형태로 구현될 수 있거나, 또는 소프트웨어 기능 유닛의 형태로 구현될 수 있다.
통합 유닛이 소프트웨어 기능 유닛의 형태로 구현되고 독립적인 제품으로서 판매되거나 사용되는 때, 통합 유닛은 컴퓨터 판독가능 저장 매체에 저장될 수 있다. 이러한 이해에 기초하여, 본질적으로 본 발명의 기술적 해결책, 또는 종래 기술에 기여하는 부분, 또는 기술적 해결책의 전부 또는 일부는 소프트웨어 제품의 형태로 구현될 수 있다. 소프트웨어 제품은 저장 매체에 저장되고, 컴퓨터 장치(개인용 컴퓨터, 서버, 또는 네트워크 장치일 수 있음)가 본 발명의 실시예들에서 설명된 방법들의 단계들의 전부 또는 일부를 수행하도록 지시하기 위한 여러 명령들을 포함한다. 전술한 저장 매체는 USB 플래시 드라이브, 탈착식 하드 디스크, ROM(Read-Only Memory), RAM(Random Access Memory), 자기 디스크, 또는 광 디스크일 수 있다.
전술한 설명은 단지 본 발명의 특정 실시예에 불과하지만, 본 발명의 보호 범위를 제한하려는 것은 아니다. 본 발명에 개시된 기술적 범위 내에서 당업자가 용이하게 파악할 수 있는 모든 변형이나 치환은 본 발명의 보호 범위에 속한다. 따라서, 본 발명의 보호 범위는 청구 범위의 보호 범위의 대상이 된다.

Claims (21)

  1. 멀티 코어 시스템에 적용되는, 멀티 코어 시스템에서 데이터 방문자 디렉토리에 액세스하기 위한 방법으로서,
    상기 멀티 코어 시스템은 공유 데이터 캐시 및 다수의 프로세서 코어를 포함하고, 상기 공유 데이터 캐시 내의 데이터 블록은 상기 다수의 프로세서 코어 중 적어도 하나의 프로세서 코어에 복사되며, 상기 멀티 코어 시스템은 데이터 방문자 디렉토리를 더 포함하고, 상기 데이터 방문자 디렉토리는 상기 공유 데이터 캐시의 데이터 블록의 방문자에 관한 정보를 기록하는 데 사용되며, 상기 데이터 블록의 방문자는 상기 데이터 블록의 사본이 저장된 프로세서 코어이고,
    상기 데이터 방문자 디렉토리는 단일 포인터 엔트리 어레이(single-pointer entry array) 및 공유 엔트리 어레이(sharing entry array)를 포함하고, 상기 단일 포인터 엔트리 어레이 내의 각 단일 포인터 엔트리는 데이터 블록의 단일 방문자에 관한 정보를 기록하는 데 사용되거나, 또는 상기 단일 포인터 엔트리와 상기 공유 엔트리 어레이 내의 공유 엔트리 사이의 연관에 관한 정보를 기록하는 데 사용되고, 상기 공유 엔트리 어레이 내의 각 공유 엔트리는 데이터 블록의 다수의 방문자에 관한 정보를 기록하는 데 사용되며, 상기 방법은,
    제1 프로세서 코어에 의해 송신된, 상기 데이터 방문자 디렉토리 내의, 제1 데이터 블록에 대응하는 엔트리를 액세스하는 데 사용되는 제1 액세스 요청을 수신하는 단계,
    상기 제1 액세스 요청에 따라, 상기 단일 포인터 엔트리 어레이가 상기 제1 데이터 블록에 대응하는 제1 단일 포인터 엔트리를 가진다고 결정하는 단계, 그리고
    상기 제1 단일 포인터 엔트리에 따라, 상기 공유 엔트리 어레이가 상기 제1 단일 포인터 엔트리와 연관된 제1 공유 엔트리를 가진다고 결정되는 때, 상기 제1 공유 엔트리에 따라 상기 제1 데이터 블록의 다수의 방문자를 결정하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서,
    상기 단일 포인터 엔트리 어레이 내의 상기 단일 포인터 엔트리는 또한, 상기 데이터 블록이 상기 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유됨을 지시하는 데 사용되며, 상기 방법은,
    상기 제1 단일 포인터 엔트리에 따라, 상기 공유 엔트리 어레이가 상기 제1 단일 포인터 엔트리와 연관된 제1 공유 엔트리를 갖지 않는다고 결정되는 때, 상기 제1 단일 포인터 엔트리에 따라, 상기 제1 데이터 블록의 단일 방문자를 결정하거나 또는 상기 제1 데이터 블록이 상기 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유된다고 결정하는 단계
    를 더 포함하는 방법.
  3. 제1항 또는 제2항에 있어서,
    제1 프로세서 코어에 의해 송신된 제1 액세스 요청을 수신한 후에,
    상기 제1 액세스 요청에 따라, 상기 단일 포인터 엔트리 어레이가 상기 제1 데이터 블록에 대응하는 단일 포인터 엔트리를 갖지 않는다고 결정하는 단계, 그리고
    상기 단일 포인터 엔트리 어레이에서, 상기 제1 데이터 블록에 대응하는 상기 제1 단일 포인터 엔트리를 상기 제1 데이터 블록에 할당하고, 상기 제1 단일 포인터 엔트리에 상기 제1 프로세서 코어에 관한 정보를 기록하는 단계
    를 더 포함하는 방법.
  4. 제3항에 있어서,
    상기 단일 포인터 엔트리 어레이에서, 상기 제1 데이터 블록에 대응하는 상기 제1 단일 포인터 엔트리를 상기 제1 데이터 블록에 할당하고, 상기 제1 단일 포인터 엔트리에 상기 제1 프로세서 코어에 관한 정보를 기록하는 단계는,
    (1) 상기 단일 포인터 엔트리 어레이가 미사용 단일 포인터 엔트리를 가지면, 상기 단일 포인터 엔트리로서 상기 미사용 단일 포인터 엔트리로부터 단일 포인터 엔트리를 선택하고, 상기 제1 프로세서 코어에 관한 정보를 기록하는 단계, 또는
    (2) 상기 단일 포인터 엔트리 어레이가 미사용 단일 포인터 엔트리를 갖지 않으면 최소 최근 사용 원칙(principle of least recently used)에 따라 단일 포인터 엔트리를 선택하고, (2-1) 상기 선택된 단일 포인터 엔트리가 공유 엔트리와 연관되지 않고 단일 방문자에 관한 정보를 기록하면, 상기 기록된 단일 방문자에게 비활성화 메시지를 송신하고 상기 선택된 단일 포인터 엔트리에 상기 제1 프로세서 코어에 관한 정보를 기록하거나, 또는 (2-2) 상기 선택된 단일 포인터 엔트리가 공유 엔트리와 연관되지 않고 상기 선택된 단일 포인터 엔트리가 상기 데이터 블록이 상기 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유된다고 지시하면, 비활성화 메시지를 모든 프로세서 코어에 방송하고 상기 선택된 단일 포인터 엔트리에 제1 프로세서 코어에 관한 정보를 기록하거나, 또는 (2-3) 상기 선택된 단일 포인터 엔트리가 공유 엔트리와 연관되면, 상기 선택된 단일 포인터 엔트리와 연관된 상기 공유 엔트리에 따라, 상기 연관된 공유 엔트리에 기록된 상기 다수의 방문자를 결정하고, 상기 기록된 다수의 방문자에게 비활성화 메시지를 전송하며, 상기 선택된 단일 포인터 엔트리의 상기 제1 프로세서 코어에 관한 정보를 기록하는 단계
    를 포함하는,
    방법.
  5. 제3항 또는 제4항에 있어서,
    제2 프로세서 코어에 의해 송신된, 상기 데이터 방문자 디렉토리 내의, 상기 제1 데이터 블록에 대응하는 엔트리를 액세스하는 데 사용되는 제2 액세스 요청을 수신하는 단계,
    상기 제2 액세스 요청에 따라, 상기 단일 포인터 엔트리 어레이가 상기 제1 데이터 블록에 대응하는 상기 제1 단일 포인터 엔트리를 가진다고 결정하는 단계,
    상기 제1 단일 포인터 엔트리에 따라, 상기 공유 엔트리 어레이가 상기 제1 단일 포인터 엔트리와 연관된 공유 엔트리를 가지고 있지 않다고 결정되는 때, 상기 제1 단일 포인터 엔트리에 따라, 상기 제1 데이터 블록의 단일 방문자가 상기 제1 프로세서 코어라고 결정하는 단계, 그리고
    상기 공유 엔트리 어레이에 상기 제1 공유 엔트리를 할당하고, 상기 제1 단일 포인터 엔트리와 상기 제1 공유 엔트리 사이의 연관 관계를 확립하며, 상기 제1 공유 엔트리에, 상기 제1 프로세서 코어에 관한 정보 및 상기 제2 프로세서 코어에 관한 정보를 기록하는 단계
    를 더 포함하는 방법.
  6. 제5항에 있어서,
    상기 공유 엔트리 어레이에 상기 제1 공유 엔트리를 할당하는 것은,
    (1) 상기 공유 엔트리 어레이가 미사용 공유 엔트리를 가지면, 상기 제1 공유 엔트리로서 상기 미사용 공유 엔트리로부터 공유 엔트리를 선택하는 단계, 또는
    (2) 상기 공유 엔트리 어레이가 미사용 공유 엔트리를 가지지 않고 단 하나의 방문자에 관한 정보를 기록하는 공유 엔트리를 가지면, 상기 단 하나의 방문자에 관한 정보를 기록하는 상기 공유 엔트리를 선택하고, 상기 방문자에 관해 기록된 정보를 상기 선택된 공유 엔트리와 연관된 단일 포인터 엔트리에 기입하는 단계, 또는
    (3) 상기 공유 엔트리 어레이가 미사용 공유 엔트리 또는 단 하나의 방문자에 관한 정보를 기록하는 공유 엔트리를 갖지 않으면 상기 최소 최근 사용 원칙에 따라 공유 엔트리를 선택하고, (3-1) 상기 선택된 공유 엔트리에 기록된 방문자의 수가 미리 결정된 임계치보다 더 크면, 상기 데이터 블록이 상기 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유됨을 지시하도록 상기 선택된 공유 엔트리와 연관된 단일 포인터 엔트리를 설정하거나, 또는 (3-2) 상기 선택된 공유 엔트리에 기록된 방문자의 수가 미리 결정된 임계치보다 크지 않으면, 상기 기록된 방문자들 중 한 방문자에 관한 정보를 상기 선택된 공유 엔트리와 연관된 단일 포인터 엔트리에 기입하고, 기록된 방문자들 중 다른 방문자들에게 비활성화 메시지를 송신하는 단계를 포함하는,
    방법.
  7. 제1항 내지 제6항 중 어느 한 항에 있어서,
    상기 단일 포인터 엔트리는, 태그, 공유 엔트리 연관 비트 및 단일 포인터를 포함하고, 상기 태그는 상기 데이터 블록에 대응하도록 사용되고, 상기 공유 엔트리 연관 비트는 상기 단일 포인터 엔트리가 상기 공유 엔트리와 연관되는지를 지시하는 데 사용되며, 상기 단일 포인터는, 상기 데이터 블록이 상기 단일 방문자를 갖는 때 상기 데이터 블록의 단일 방문자에 관한 정보를 기록하고, 상기 단일 포인터 엔트리가 상기 공유 엔트리와 연관되는 때 상기 단일 포인터 엔트리와 상기 공유 엔트리 사이의 연관 관계에 관한 정보를 기록하는 데 사용되고,
    상기 공유 엔트리는, 상기 데이터 블록의 다수의 방문자에 관한 정보를 기록하는 데 사용되는 공유자 기록 구조, 및 상기 단일 포인터 항목을 연관시키는 데 사용되는 연관 구조를 포함하는, 방법.
  8. 제7항에 있어서,
    상기 단일 포인트 엔트리는, 상기 단일 포인터 엔트리가 상기 공유 엔트리와 연관되지 않은 때, 상기 데이터 블록이 상기 단일 방문자를 가진다고 지시하거나 또는 상기 데이터 블록이 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유된다고 지시하는 데 사용되는 전체 공유 비트(all sharing bit)를 더 포함하는,
    방법.
  9. 멀티 코어 시스템 내에 있는 데이터 방문자 디렉토리를 저장하도록 구성된 디렉토리 저장 유닛 - 상기 멀티 코어 시스템은 공유 데이터 캐시 및 다수의 프로세서 코어를 포함하고, 상기 공유 데이터 캐시 내의 데이터 블록은 상기 다수의 프로세서 코어 중 적어도 하나의 프로세서 코어에 복사되며, 상기 데이터 방문자 디렉토리는 상기 공유 데이터 캐시의 데이터 블록의 방문자에 관한 정보를 기록하는 데 사용되며, 상기 데이터 블록의 방문자는 상기 데이터 블록의 사본이 저장된 프로세서 코어이고, 상기 데이터 방문자 디렉토리는 단일 포인터 엔트리 어레이 및 공유 엔트리 어레이를 포함하고, 상기 단일 포인터 엔트리 어레이 내의 각 단일 포인터 엔트리는 데이터 블록의 단일 방문자에 관한 정보를 기록하는 데 사용되거나, 또는 상기 단일 포인터 엔트리와 상기 공유 엔트리 어레이 내의 공유 엔트리 사이의 연관에 관한 정보를 기록하는 데 사용되고, 상기 공유 엔트리 어레이 내의 각 공유 엔트리는 데이터 블록의 다수의 방문자에 관한 정보를 기록하는 데 사용됨 -, 그리고
    제1 프로세서 코어에 의해 송신된, 상기 데이터 방문자 디렉토리 내의 제1 데이터 블록에 대응하는 엔트리를 액세스하는데 사용되는 제1 액세스 요청을 수신하고, 상기 제1 액세스 요청에 따라, 상기 단일 포인터 엔트리 어레이가 상기 제1 데이터 블록에 대응하는 제1 단일 포인터 엔트리를 가진다고 결정하며, 상기 제1 단일 포인터 엔트리에 따라, 상기 공유 엔트리 어레이가 상기 제1 단일 포인터 엔트리와 연관된 제1 공유 엔트리를 가진다고 결정되는 때, 상기 제1 공유 엔트리에 따라 상기 제1 데이터 블록의 다수의 방문자를 결정하도록 구성된 실행 유닛
    을 포함하는 디렉토리 캐시 장치.
  10. 제9항에 있어서,
    상기 단일 포인터 엔트리 어레이 내의 상기 단일 포인터 엔트리는 상기 데이터 블록이 상기 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유됨을 지시하는 데 더 사용되며,
    상기 실행 유닛은,
    상기 제1 단일 포인터 엔트리에 따라, 상기 공유 엔트리 어레이가 상기 제1 단일 포인터 엔트리와 연관된 제1 공유 엔트리를 갖지 않는다고 결정되는 때, 상기 제1 단일 포인터 엔트리에 따라, 상기 제1 데이터 블록의 단일 방문자를 결정하거나 또는 상기 제1 데이터 블록이 상기 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유된다고 결정하도록 더 구성된,
    디렉토리 캐시 장치.
  11. 제9항 또는 제10항에 있어서,
    상기 실행 유닛이 상기 제1 프로세서 코어에 의해 송신된 제1 액세스 요청을 수신한 후에, 상기 실행 유닛은,
    상기 제1 액세스 요청에 따라, 상기 단일 포인터 엔트리 어레이가 상기 제1 데이터 블록에 대응하는 단일 포인터 엔트리를 갖지 않는다고 결정하고,
    상기 단일 포인터 엔트리 어레이에서, 상기 제1 데이터 블록에 대응하는 상기 제1 단일 포인터 엔트리를 상기 제1 데이터 블록에 할당하며, 상기 제1 단일 포인터 엔트리에 상기 제1 프로세서 코어에 관한 정보를 기록하도록 더 구성된,
    디렉토리 캐시 장치.
  12. 제11항에 있어서,
    상기 실행 유닛은,
    (1) 상기 단일 포인터 엔트리 어레이가 미사용 단일 포인터 엔트리를 가지면, 상기 단일 포인터 엔트리로서 상기 미사용 단일 포인터 엔트리로부터 단일 포인터 엔트리를 선택하고, 상기 제1 프로세서 코어에 관한 정보를 기록하거나, 또는
    (2) 상기 단일 포인터 엔트리 어레이가 미사용 단일 포인터 엔트리를 갖지 않으면 최소 최근 사용 원칙(principle of least recently used)에 따라 단일 포인터 엔트리를 선택하며, (2-1) 상기 선택된 단일 포인터 엔트리가 공유 엔트리와 연관되지 않고 단일 방문자에 관한 정보를 기록하면, 상기 기록된 단일 방문자에게 비활성화 메시지를 송신하고 상기 선택된 단일 포인터 엔트리에 상기 제1 프로세서 코어에 관한 정보를 기록하거나, 또는 (2-2) 상기 선택된 단일 포인터 엔트리가 공유 엔트리와 연관되지 않고 상기 선택된 단일 포인터 엔트리가 상기 데이터 블록이 상기 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유된다고 지시하면, 비활성화 메시지를 모든 프로세서 코어에 방송하고 상기 선택된 단일 포인터 엔트리에 제1 프로세서 코어에 관한 정보를 기록하거나, 또는 (2-3) 상기 선택된 단일 포인터 엔트리가 공유 엔트리와 연관되면, 상기 선택된 단일 포인터 엔트리와 연관된 상기 공유 엔트리에 따라, 상기 연관된 공유 엔트리에 기록된 상기 다수의 방문자를 결정하고, 상기 기록된 다수의 방문자에게 비활성화 메시지를 전송하며, 상기 선택된 단일 포인터 엔트리의 상기 제1 프로세서 코어에 관한 정보를 기록하도록 더 구성된,
    디렉토리 캐시 장치.
  13. 제11항 또는 제12항에 있어서,
    상기 실행 유닛은,
    제2 프로세서 코어에 의해 송신된, 상기 데이터 방문자 디렉토리 내의, 상기 제1 데이터 블록에 대응하는 엔트리를 액세스하는데 사용되는 제2 액세스 요청을 수신하고,
    상기 제2 액세스 요청에 따라, 상기 단일 포인터 엔트리 어레이가 상기 제1 데이터 블록에 대응하는 상기 제1 단일 포인터 엔트리를 가진다고 결정하며,
    상기 제1 단일 포인터 엔트리에 따라, 상기 공유 엔트리 어레이가 상기 제1 단일 포인터 엔트리와 연관된 공유 엔트리를 가지고 있지 않다고 결정되는 때, 상기 제1 단일 포인터 엔트리에 따라, 상기 제1 데이터 블록의 단일 방문자가 상기 제1 프로세서 코어라고 결정하고,
    상기 공유 엔트리 어레이에 상기 제1 공유 엔트리를 할당하고, 상기 제1 단일 포인터 엔트리와 상기 제1 공유 엔트리 사이의 연관 관계를 확립하며, 상기 제1 공유 엔트리에, 상기 제1 프로세서 코어에 관한 정보 및 상기 제2 프로세서 코어에 관한 정보를 기록하도록 더 구성된,
    디렉토리 캐시 장치.
  14. 제13항에 있어서,
    상기 실행 유닛은,
    (1) 상기 공유 엔트리 어레이가 미사용 공유 엔트리를 가지면, 상기 제1 공유 엔트리로서 상기 미사용 공유 엔트리로부터 공유 엔트리를 선택하거나, 또는
    (2) 상기 공유 엔트리 어레이가 미사용 공유 엔트리를 가지지 않고 단 하나의 방문자에 관한 정보를 기록하는 공유 엔트리를 가지면, 상기 단 하나의 방문자에 관한 정보를 기록하는 상기 공유 엔트리를 선택하고, 상기 방문자에 관해 기록된 정보를 상기 선택된 공유 엔트리와 연관된 단일 포인터 엔트리에 기입하거나, 또는
    (3) 상기 공유 엔트리 어레이가 미사용 공유 엔트리 또는 단 하나의 방문자에 관한 정보를 기록하는 공유 엔트리를 갖지 않으면 상기 최소 최근 사용 원칙에 따라 공유 엔트리를 선택하고, (3-1) 상기 선택된 공유 엔트리에 기록된 방문자의 수가 미리 결정된 임계치보다 더 크면, 상기 데이터 블록이 상기 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유됨을 지시하도록 상기 선택된 공유 엔트리와 연관된 단일 포인터 엔트리를 설정하거나, 또는 (3-2) 상기 선택된 공유 엔트리에 기록된 방문자의 수가 미리 결정된 임계치보다 크지 않으면, 상기 기록된 방문자들 중 한 방문자에 관한 정보를 상기 선택된 공유 엔트리와 연관된 단일 포인터 엔트리에 기입하고, 기록된 방문자들 중 다른 방문자들에게 비활성화 메시지를 송신하도록 구성된,
    디렉토리 캐시 장치.
  15. 제9항 내지 제14항 중 어느 한 항에 있어서,
    상기 단일 포인터 엔트리는, 태그, 공유 엔트리 연관 비트, 및 단일 포인터를 포함하고, 상기 태그는 상기 데이터 블록에 대응하도록 사용되고, 상기 공유 엔트리 연관 비트는 상기 단일 포인터 엔트리가 상기 공유 엔트리와 연관되는지를 지시하는 데 사용되며, 상기 단일 포인터는, 상기 데이터 블록이 상기 단일 방문자를 갖는 때 상기 데이터 블록의 단일 방문자에 관한 정보를 기록하고, 상기 단일 포인터 엔트리가 상기 공유 엔트리와 연관되는 때 상기 단일 포인터 엔트리와 상기 공유 엔트리 사이의 연관 관계에 관한 정보를 기록하는 데 사용되고,
    상기 공유 엔트리는, 상기 데이터 블록의 다수의 방문자에 관한 정보를 기록하는 데 사용되는 공유자 기록 구조, 및 상기 단일 포인터 항목을 연관시키는 데 사용되는 연관 구조를 포함하는,
    디렉토리 캐시 장치.
  16. 제15항에 있어서,
    상기 단일 포인터 엔트리는, 상기 단일 포인터 엔트리가 상기 공유 엔트리와 연관되지 않은 때, 상기 데이터 블록이 상기 단일 방문자를 가진다고 지시하거나 또는 상기 데이터 블록이 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유된다고 지시하는 데 사용되는 전체 공유 비트를 더 포함하는,
    디렉토리 캐시 장치.
  17. 다중 프로세서 코어, 공유 데이터 캐시, 및 제9항 내지 제16항 중 어느 한 항에 따른 디렉토리 캐시 장치를 포함하는 멀티 코어 시스템.
  18. 멀티 코어 시스템 내에 있는 데이터 방문자 디렉토리를 저장하도록 구성된 디렉토리 저장 유닛으로서, 상기 멀티 코어 시스템은 공유 데이터 캐시 및 다수의 프로세서 코어를 포함하고, 상기 공유 데이터 캐시 내의 데이터 블록은 상기 다수의 프로세서 코어 중 적어도 하나의 프로세서 코어에 복사되며, 상기 데이터 방문자 디렉토리는 상기 공유 데이터 캐시의 데이터 블록의 방문자에 관한 정보를 기록하는 데 사용되며, 상기 데이터 블록의 방문자는 상기 데이터 블록의 사본이 저장된 프로세서 코어이고,
    상기 데이터 방문자 디렉토리는 단일 포인터 엔트리 어레이 및 공유 엔트리 어레이를 포함하며,
    상기 단일 포인터 엔트리 어레이 내의 각 단일 포인터 엔트리는 데이터 블록의 단일 방문자에 관한 정보를 기록하는 데 사용되거나, 또는 상기 단일 포인터 엔트리와 상기 공유 엔트리 어레이 내의 공유 엔트리 사이의 연관에 관한 정보를 기록하는 데 사용되고,
    상기 공유 엔트리 어레이 내의 각 공유 엔트리는 데이터 블록의 다수의 방문자에 관한 정보를 기록하는 데 사용되는,
    디렉토리 저장 유닛.
  19. 제18항에 있어서,
    상기 단일 포인터 엔트리는, 태그, 공유 엔트리 연관 비트 및 단일 포인터를 포함하고, 상기 태그는 상기 데이터 블록에 대응하도록 사용되고, 상기 공유 엔트리 연관 비트는 상기 단일 포인터 엔트리가 상기 공유 엔트리와 연관되는지를 지시하는 데 사용되고, 상기 단일 포인터는, 상기 데이터 블록이 상기 단일 방문자를 갖는 때 상기 데이터 블록의 단일 방문자에 관한 정보를 기록하고, 상기 단일 포인터 엔트리가 상기 공유 엔트리와 연관되는 때 상기 단일 포인터 엔트리와 상기 공유 엔트리 사이의 연관 관계에 관한 정보를 기록하는 데 사용되고,
    상기 공유 엔트리는, 상기 데이터 블록의 다수의 방문자에 관한 정보를 기록하는 데 사용되는 공유자 기록 구조, 및 상기 단일 포인터 항목을 연관시키는 데 사용되는 연관 구조를 포함하는,
    디렉토리 저장 유닛.
  20. 제19항에 있어서,
    상기 단일 포인터 엔트리는, 상기 단일 포인터 엔트리가 상기 공유 엔트리와 연관되지 않은 때, 상기 데이터 블록이 상기 단일 방문자를 가진다고 지시하거나 또는 상기 데이터 블록이 멀티 코어 시스템 내의 모든 프로세서 코어에 의해 공유된다고 지시하는 데 사용되는 전체 공유 비트를 더 포함하는,
    디렉토리 저장 유닛.
  21. 제19항 또는 제20항에 있어서,
    상기 공유자 기록 구조는 벡터인, 디렉토리 저장 유닛.
KR1020177023526A 2015-02-16 2015-02-16 멀티 코어 시스템에서 데이터 방문자 디렉토리에 액세스하는 방법 및 장치 KR102027391B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2015/073192 WO2016131175A1 (zh) 2015-02-16 2015-02-16 多核系统中数据访问者目录的访问方法及设备

Publications (2)

Publication Number Publication Date
KR20170107061A true KR20170107061A (ko) 2017-09-22
KR102027391B1 KR102027391B1 (ko) 2019-10-01

Family

ID=56691906

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177023526A KR102027391B1 (ko) 2015-02-16 2015-02-16 멀티 코어 시스템에서 데이터 방문자 디렉토리에 액세스하는 방법 및 장치

Country Status (8)

Country Link
US (1) US20170364442A1 (ko)
EP (1) EP3249539B1 (ko)
JP (1) JP6343722B2 (ko)
KR (1) KR102027391B1 (ko)
CN (1) CN106164874B (ko)
CA (1) CA2976132A1 (ko)
SG (1) SG11201706340TA (ko)
WO (1) WO2016131175A1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109684237B (zh) * 2018-11-20 2021-06-01 华为技术有限公司 基于多核处理器的数据访问方法和装置
CN112825072B (zh) * 2019-11-21 2023-02-17 青岛海信移动通信技术股份有限公司 通信终端以及数据共享方法
CN114880254A (zh) * 2022-04-02 2022-08-09 锐捷网络股份有限公司 一种表项读取方法、装置及网络设备
CN117807016A (zh) * 2024-03-01 2024-04-02 上海励驰半导体有限公司 多核异构系统与外部设备的通信方法、设备、存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1091524A (ja) * 1996-06-18 1998-04-10 Internatl Business Mach Corp <Ibm> キャッシュ・コヒーレンシを維持するための方法及び装置
JP2007193805A (ja) * 2006-01-18 2007-08-02 Internatl Business Mach Corp <Ibm> デュアル・システム・ディレクトリ構造体を有するマルチプロセッサ・システムおよび方法
US20110138128A1 (en) * 2009-12-07 2011-06-09 Yen-Kuang Chen Technique for tracking shared data in a multi-core processor or multi-processor system
US20140032848A1 (en) * 2011-09-09 2014-01-30 University Of Rochester Sharing Pattern-Based Directory Coherence for Multicore Scalability ("SPACE")
US20140229680A1 (en) * 2013-02-11 2014-08-14 Empire Technology Development Llc Aggregating Cache Eviction Notifications to a Directory

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5197139A (en) * 1990-04-05 1993-03-23 International Business Machines Corporation Cache management for multi-processor systems utilizing bulk cross-invalidate
JP3132749B2 (ja) * 1994-12-05 2001-02-05 インターナショナル・ビジネス・マシーンズ・コーポレ−ション マルチプロセッサ・データ処理システム
US7509391B1 (en) * 1999-11-23 2009-03-24 Texas Instruments Incorporated Unified memory management system for multi processor heterogeneous architecture
US6922755B1 (en) * 2000-02-18 2005-07-26 International Business Machines Corporation Directory tree multinode computer system
US6725343B2 (en) * 2000-10-05 2004-04-20 Hewlett-Packard Development Company, L.P. System and method for generating cache coherence directory entries and error correction codes in a multiprocessor system
US6895476B2 (en) * 2002-10-03 2005-05-17 Hewlett-Packard Development Company, L.P. Retry-based late race resolution mechanism for a computer system
US20050273571A1 (en) * 2004-06-02 2005-12-08 Lyon Thomas L Distributed virtual multiprocessor
US7376793B2 (en) * 2005-07-21 2008-05-20 Sun Microsystems, Inc. Cache coherence protocol with speculative writestream
US20070079072A1 (en) * 2005-09-30 2007-04-05 Collier Josh D Preemptive eviction of cache lines from a directory
US8195890B1 (en) * 2006-08-22 2012-06-05 Sawyer Law Group, P.C. Method for maintaining cache coherence using a distributed directory with event driven updates
US8065487B2 (en) * 2007-03-21 2011-11-22 International Business Machines Corporation Structure for shared cache eviction
US7840759B2 (en) * 2007-03-21 2010-11-23 International Business Machines Corporation Shared cache eviction
CN100543687C (zh) * 2007-09-04 2009-09-23 杭州华三通信技术有限公司 一种多核系统的资源管理方法和控制核
US20110004729A1 (en) * 2007-12-19 2011-01-06 3Leaf Systems, Inc. Block Caching for Cache-Coherent Distributed Shared Memory
US8607237B2 (en) * 2008-06-02 2013-12-10 Microsoft Corporation Collection with local lists for a multi-processor system
US8140825B2 (en) * 2008-08-05 2012-03-20 International Business Machines Corporation Systems and methods for selectively closing pages in a memory
CN101859281A (zh) * 2009-04-13 2010-10-13 廖鑫 基于集中式目录的嵌入式多核缓存一致性方法
US9361297B2 (en) * 2009-07-30 2016-06-07 Adobe Systems Incorporated Web service-based, data binding abstraction method
US9830265B2 (en) * 2013-11-20 2017-11-28 Netspeed Systems, Inc. Reuse of directory entries for holding state information through use of multiple formats
CN104133785B (zh) * 2014-07-30 2017-03-08 浪潮集团有限公司 采用混合目录的双控存储服务器的缓存一致性实现方法
CN107003932B (zh) * 2014-09-29 2020-01-10 华为技术有限公司 多核处理器系统的缓存目录处理方法和目录控制器

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1091524A (ja) * 1996-06-18 1998-04-10 Internatl Business Mach Corp <Ibm> キャッシュ・コヒーレンシを維持するための方法及び装置
JP2007193805A (ja) * 2006-01-18 2007-08-02 Internatl Business Mach Corp <Ibm> デュアル・システム・ディレクトリ構造体を有するマルチプロセッサ・システムおよび方法
US20110138128A1 (en) * 2009-12-07 2011-06-09 Yen-Kuang Chen Technique for tracking shared data in a multi-core processor or multi-processor system
US20140032848A1 (en) * 2011-09-09 2014-01-30 University Of Rochester Sharing Pattern-Based Directory Coherence for Multicore Scalability ("SPACE")
US20140229680A1 (en) * 2013-02-11 2014-08-14 Empire Technology Development Llc Aggregating Cache Eviction Notifications to a Directory

Also Published As

Publication number Publication date
US20170364442A1 (en) 2017-12-21
JP6343722B2 (ja) 2018-06-13
CN106164874A (zh) 2016-11-23
CA2976132A1 (en) 2016-08-25
BR112017017306A2 (pt) 2019-12-17
CN106164874B (zh) 2020-04-03
EP3249539A4 (en) 2018-01-24
JP2018508894A (ja) 2018-03-29
EP3249539A1 (en) 2017-11-29
WO2016131175A1 (zh) 2016-08-25
CN111488293A (zh) 2020-08-04
KR102027391B1 (ko) 2019-10-01
EP3249539B1 (en) 2021-08-18
SG11201706340TA (en) 2017-09-28

Similar Documents

Publication Publication Date Title
US7249152B2 (en) Dynamic disk space management by multiple database server instances in a cluster configuration
US10795826B2 (en) Translation lookaside buffer management method and multi-core processor
US10402327B2 (en) Network-aware cache coherence protocol enhancement
US20190026225A1 (en) Multiple chip multiprocessor cache coherence operation method and multiple chip multiprocessor
US20150058570A1 (en) Method of constructing share-f state in local domain of multi-level cache coherency domain system
CN107341114B (zh) 一种目录管理的方法、节点控制器和系统
CN109684237B (zh) 基于多核处理器的数据访问方法和装置
US20170364442A1 (en) Method for accessing data visitor directory in multi-core system and device
CN103294611A (zh) 一种基于有限数据一致性状态的服务器节点数据缓存方法
CN109960662B (zh) 一种内存回收方法及设备
US11231964B2 (en) Computing device shared resource lock allocation
CN110059026B (zh) 一种目录处理方法、装置及存储系统
KR101303079B1 (ko) 멀티-코어 기반의 가상화 환경에서 캐쉬 일관성을 제어하는 장치 및 방법
CN115794368A (zh) 业务系统、内存管理方法及装置
CN111488293B (zh) 多核系统中数据访问者目录的访问方法及设备
US20230100746A1 (en) Multi-level partitioned snoop filter
KR101233109B1 (ko) 캐쉬 일관성을 맞추기 위해 멀티 코어들 간에 발생하는 통신량을 감소시키는 시스템 및 방법
US11726915B2 (en) Distributed coherence directory subsystem with exclusive data regions
WO2024082702A1 (zh) 数据处理方法、装置、芯片以及计算机可读存储介质
JP4240658B2 (ja) 分散データ管理システム
US9286238B1 (en) System, apparatus, and method of cache management
CN116700881A (zh) 一种数据处理方法和设备
BR112017017306B1 (pt) Método para acessar dados em um sistema com múltiplos núcleos, dispositivo de cache de diretório, sistema com múltiplos núcleos, e unidade de armazenagem de diretório

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