KR102479394B1 - 이종 프로세서 시스템 내 캐시들 간에 데이터 이동 - Google Patents

이종 프로세서 시스템 내 캐시들 간에 데이터 이동 Download PDF

Info

Publication number
KR102479394B1
KR102479394B1 KR1020177006265A KR20177006265A KR102479394B1 KR 102479394 B1 KR102479394 B1 KR 102479394B1 KR 1020177006265 A KR1020177006265 A KR 1020177006265A KR 20177006265 A KR20177006265 A KR 20177006265A KR 102479394 B1 KR102479394 B1 KR 102479394B1
Authority
KR
South Korea
Prior art keywords
cache
data items
processor
moving
data
Prior art date
Application number
KR1020177006265A
Other languages
English (en)
Other versions
KR20170041816A (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 KR20170041816A publication Critical patent/KR20170041816A/ko
Application granted granted Critical
Publication of KR102479394B1 publication Critical patent/KR102479394B1/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/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
    • 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/0813Multiuser, multiprocessor or multiprocessing cache systems with a network or matrix configuration
    • 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/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • G06F12/0835Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means for main memory peripheral accesses (e.g. I/O or DMA)
    • 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/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/15Use in a specific computing environment
    • G06F2212/154Networked environment
    • 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/50Control mechanisms for virtual memory, cache or TLB
    • G06F2212/502Control mechanisms for virtual memory, cache or TLB using adaptive policy
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/50Control mechanisms for virtual memory, cache or TLB
    • G06F2212/507Control mechanisms for virtual memory, cache or TLB using speculative control

Abstract

복수의 데이터 항목을 제1 캐시 또는 제2 캐시로 이동시키는 장치, 컴퓨터 판독가능 매체, 집적회로 및 방법이 제시된다. 방법은 제1 캐시가 복수의 데이터 항목들을 요청했다는 표시를 수신하는 단계를 포함한다. 방법은 제1 캐시가 복수의 데이터 항목들을 요청했음을 나타내는 정보를 저장하는 단계를 포함할 수 있다. 정보는 복수의 데이터 항목 각각에 대한 어드레스를 포함할 수 있다. 방법은, 적어도 저장된 정보에 기초하여, 복수의 데이터 항목들을 제2 캐시로 이동시킬 것을 결정하는 단계를 포함한다. 방법은 복수의 데이터 항목들을 제2 캐시로 이동시키는 단계를 포함한다. 방법은 제1 캐시가 복수의 데이터 항목을 요청하였다는 표시를 수신하는 것과 복수의 데이터 항목을 제2 캐시로 이동시키는 것 사이의 시간 간격을 결정하는 단계를 포함할 수 있다. 스크래치 패드 메모리가 개시된다.

Description

이종 프로세서 시스템 내 캐시들 간에 데이터 이동{MOVING DATA BETWEEN CACHES IN A HETEROGENEOUS PROCESSOR SYSTEM}
관련 출원에 대한 상호참조
본 출원은 2014년 8월 5일자로 출원된 미국 특허 출원 제14/452,058호에 대한 우선권을 주장한다.
개시된 실시예는 전반적으로 데이터를 캐시로 이동시키는 것에 관한 것으로, 특히, 데이터가 요청되기 전에 이종 프로세서 시스템에서 캐시에 데이터를 이동시키는 것에 관한 것이다.
일부 시스템은 이종 프로세서를 갖는다. 예를 들어, 중앙 처리 유닛(CPU) 및 다수 코어(이하 "CPU "및 "코어"는 상호교환적으로 사용될 수 있다)는 다수 코어를 흔히 포함하는 그래픽 처리 유닛(GPU)(이하 "GPU" 및 "코어"는 상호교환적으로 사용될 수 있다)를 포함할 수 있다. CPU와 GPU는 캐시를 흔히 포함하는 동일한 메모리를 공유할 수 있다. 캐시는, 주 메모리보다 액세스 시간을 덜 요구하고 하나 이상의 프로세서에 의해 사적으로 종종 사용되는 메모리의 더 작은 부분이다. 주 메모리의 부분들은 CPU 및 GPU의 캐시에 복사된다. 서로 상이한 프로세서들에 의해 사용되는 주 메모리 부분들의 다수의 복사들은 캐시 및 주 메모리를 일관되게 혹은 서로 코히런트하게 유지하는 방법에 대한 방법을 필요로 한다. 종종, 이종 시스템에서, 데이터는 CPU와 같은 제1 프로세서 유형의 캐시와 GPU와 같은 제2 프로세서 유형의 캐시 간에 이동된다.
복수의 데이터 항목을 제1 캐시 또는 제2 캐시로 이동시키는 장치, 컴퓨터 판독가능 매체, 집적회로 및 방법이 제시된다. 방법은 제1 캐시가 복수의 데이터 항목들을 요청했다는 표시를 수신하는 단계를 포함한다. 방법은 제1 캐시가 복수의 데이터 항목들을 요청했음을 나타내는 정보를 저장하는 단계를 포함할 수 있다. 정보는 복수의 데이터 항목 각각에 대한 어드레스를 포함할 수 있다. 방법은, 적어도 저장된 정보에 기초하여, 복수의 데이터 항목들을 제2 캐시로 이동시킬 것을 결정하는 단계, 및 복수의 데이터 항목들을 제2 캐시로 이동시키는 단계를 포함할 수 있다. 방법은 제1 캐시가 복수의 데이터 항목을 요청하였다는 표시를 수신하는 것과 복수의 데이터 항목을 제2 캐시로 이동시키는 것 사이의 시간 간격을 결정하는 단계를 포함할 수 있다. 스크래치 패드 메모리도 또한 개시된다.
복수의 데이터 항목들을 제1 캐시 또는 제2 캐시로 이동시키는 시스템이 개시된다. 시스템은 제1 캐시가 복수의 데이터 항목을 요청했다는 표시를 수신하도록 구성된다. 시스템은 제1 캐시가 복수의 데이터 항목들을 요청했음을 나타내는 정보를 저장하도록 구성된다. 정보는 복수의 데이터 항목 각각에 대한 어드레스를 포함할 수 있다. 시스템은, 적어도 저장된 정보에 기초하여, 복수의 데이터 항목들을 제2 캐시로 이동시킬 것을 결정하도록 구성된다. 시스템은 복수의 데이터 항목들을 제2 캐시로 이동시키도록 구성된다.
복수의 데이터 항목들을 제1 캐시 또는 제2 캐시로 이동시키기 위한 집적회로(IC)가 개시된다. IC는 하나 이상의 데이터 항목들 각각과 연관된 어드레스를 갖는 하나 이상의 데이터 항목들을 저장하도록 구성된 스크래치 패드 메모리를 포함한다. IC는, 하나 이상의 데이터 항목을 저장하도록 구성되고 하나 이상의 데이터 항목 중 데이터 항목을 스크래치 패드 메모리에 동시기입하도록 구성된, 제1 캐시를 포함할 수 있다. IC는, 하나 이상의 데이터 항목을 저장하도록 구성되고 또한 하나 이상의 데이터 항목 중 데이터 항목을 스크래치 패드 메모리에 동시기입하도록 구성되는, 제2 캐시를 포함한다. IC는 데이터 항목이 제1 캐시에 있다는 것에 기초하여 데이터 항목이 제2 캐시와 연관된 프로세서에 의해 요청될 것이라고 결정한 것에 기초하여 스크래치 패드 메모리로부터 제2 캐시로 데이터 항목을 이동시키도록 구성된 통신 검출기를 포함할 수 있다.
첨부된 도면과 관련하여 예로서 주어진 다음의 설명으로부터 더 상세히 이해될 수 있다:
도 1은 하나 이상의 개시된 실시예가 구현될 수 있는 예시적인 디바이스의 블록도이다;
도 2는 일부 실시예에 따라 이종 프로세서 시스템에서 캐시 주입을 위한 장치의 예를 도시한 개략도이다;
도 3a 및 도 3b는 일부 실시예에 따라 CPU 및 GPU가 실행할 수 있는 예시적인 컴퓨터 의사-코드를 개략적으로 도시한 것이다;
도 4a 및 도 4b는 CPU와 GPU 간의 데이터 이동을 개략적으로 도시한 것이다;
도 5는 이종 프로세서 시스템에서 캐시에 데이터를 이동시키는 방법을 도시한 것이다; 및
도 6은 이종 프로세서 시스템에서 캐시에 데이터를 이동시키는 시스템을 개략적으로 도시한 것이다.
도 1은 하나 이상의 개시된 실시예가 구현될 수 있는 예시적인 디바이스(100)의 블록도이다. 예시적인 디바이스(100)는 컴퓨터, 게이밍 디바이스, 핸드헬드 디바이스, 셋톱 박스, 텔레비전, 모바일 전화, 또는 태블릿 컴퓨터를 포함한다. 디바이스(100)는 프로세서(102), 메모리(104), 저장장치(106), 하나 이상의 입력 디바이스(108), 및 하나 이상의 출력 디바이스(110)를 포함한다. 선택적으로, 디바이스(10)는 입력 드라이버(112) 및 출력 드라이버(114)를 포함한다. 디바이스(100)는 도 1에 도시되지 않은 부가적인 구성성분을 포함할 수 있음이 이해된다.
도시된 바와 같이, 프로세서(102)는 서로 상이한 유형의 처리 유닛들, 예를 들면, 하나 이상의 코어(138)(즉, 제1 프로세서 유형)를 포함하는 하나 이상의 중앙 처리 유닛(CPU)(128), 및 하나 이상의 코어(134) 또는 GPU 코어(즉, 제2 프로세서 유형)를 포함하는 하나 이상의 처리 유닛(GPU)(130)을 포함한다. 당업자에게 알려진 바와 같이, CPU 및 GPU와 상이한 유형의 프로세서가 공지되어 있다. 이들 다른 프로세서는 예를 들면, 디지털 신호 프로세서, 애플리케이션 프로세서, 등을 포함한다. CPU(128) 및 GPU(130)는 동일한 다이 또는 다수의 다이 상에 위치될 수 있다. GPU(130)는 하나 이상의 코어(134)를 제어하는 명령어 프로세서(도시되지 않음)를 포함할 수 있다. 코어(134) 각각은 단일 명령 다수 데이터(SIMD) 처리 요소로서 수행하는 2 이상의 처리 요소(도시되지 않음)를 포함할 수 있다.
CPU(128)는 하나 이상의 코어(138) 및 하나 이상의 캐시(140)를 포함한다. GPU(130)는 하나 이상의 코어(134) 및 하나 이상의 캐시(136)를 포함한다. CPU(128) 및 GPU(130)는 동일한 다이, 혹은 다수의 다이 상에 위치될 수 있다. 각각의 프로세서 코어는 CPU(128)일 수 있고, 각각의 코어는 GPU(130)일 수 있다. GPU(130)는 하나 이상의 코어(134) 및 하나 이상의 캐시(136)를 포함한다. GPU(130) 및 CPU(128)는 다른 유형의 계산 유닛일 수 있다. 일부 실시예에서, 계산 유닛은 메모리 요청을 발생하는 다이의 일부를 포함한다. 메모리(104)는 프로세서(102)와 동일한 다이 상에 위치 될 수 있고, 또는 프로세서(102)와 별도로 위치될 수 있다. 메모리(104)는 휘발성 혹은 비휘발성 메모리, 예를 들어, 랜덤 액세스 메모리(RAM), 동적 RAM(DRAM), 또는 캐시를 포함할 수 있다. 메모리(104)는 하나 이상의 메모리 제어기(132) 및 하나 이상의 캐시(126)를 포함한다. 메모리 제어기(132)는 CPU 또는 다른 다이와 동일한 다이 상에 위치될 수 있다. 캐시(126)는 프로세서(102)와 연관되거나 메모리(104)와 연관될 수 있다. 캐시(126) 및 메모리(104)는 캐시(126) 및 메모리(104)에 코히런시를 제공하기 위한 통신 라인(도시되지 않음)을 포함한다. 캐시(126) 및 메모리(104)는 이하 개시되는 바와 같이 캐시 코히런시를 제공하기 위한 디렉토리(도시되지 않음)를 포함한다. 일부 실시예에서, 캐시(126)는 코히런시 프로토콜을 위해 구성된 제어기(도시되지 않음)를 포함한다.
저장장치(106)는 고정식 또는 착탈식 저장장치, 예를 들면, 하드 디스크 드라이브, 고체상태 드라이브, 광 디스크, 또는 플래시 드라이브를 포함할 수 있다. 예시적인 입력 디바이스(108)는 키보드, 키패드, 터치 스크린, 터치 패드, 검출기, 마이크로폰, 가속도계, 자이로스코프, 생체인식 스캐너, 또는 네트워크 연결(예를 들면, 무선 IEEE 802 신호 또는 블루투스의 송신 및/또는 수신을 위한 무선 로컬 영역 네트워크)를 포함한다. 예시적인 출력 디바이스(110)는 디스플레이, 스피커, 프린터, 햅틱 피드백 디바이스, 하나 이상의 라이트, 안테나, 또는 네트워크 연결(예를 들면, 무선 IEEE 802 신호의 송신 및/또는 수신을 위한 무선 로컬 영역 네트워크 카드)를 포함한다.
입력 드라이버(112)는 프로세서(102) 및 입력 디바이스(108)와 통신하며, 프로세서(102)가 입력 디바이스(108)로부터 입력을 수신할 수 있게 한다. 출력 드라이버(114)는 프로세서(102) 및 출력 디바이스(110)와 통신하며, 프로세서(102)가 출력 디바이스(110)에 출력을 보낼 수 있게 한다. 입력 드라이버(112) 및 출력 드라이버(114)는 선택적 구성성분이다.
도 2는 일부 실시예에 따라 이종프로세서 시스템에서 캐시 주입을 위한 시스템(200)의 예를 도시하는 개략도이다. 도 2에는 CPU(210), GPU(212), 캐시 통신 검출기(230), 메모리 테이블(290), 메모리 트래픽(280), 및 메모리(250)가 도시되어 있다. 통신 검출기(230)는 메모리 트래픽(280)의 적어도 일부를 모니터링하고, 메모리 트래픽(280)에 기초하여 CPU(210)의 캐시(218) 또는 GPU(212)의 캐시(220)에 데이터(270)를 이동할지 여부를 결정한다.
CPU(210)는 캐시(218)를 포함한다. CPU(210)는 CPU(128)와 같은 제1 프로세서 유형의 처리 유닛이다. 캐시(218)는 CPU(210)가 소비할 데이터(270.2) 및/또는 명령(300.1)(도 3a 참조)을 저장하는 캐시(218)이다. CPU(210)는 데이터(270.2)를 처리하기 위한 명령을 포함할 수 있는 명령(300.1)을 실행한다. 명령(300.1)은 도 3a의 의사-코드 또는 이외 다른 적합한 명령에 기초한다.
GPU(212)는 캐시(220)을 포함한다. GPU(212)는 GPU(130)와 같은 제2 프로세서 유형의 처리 유닛이다. 캐시(220)는 GPU(212)가 처리할 데이터(270.3) 및/또는 명령(300.2)(도 3b 참조)을 저장하는 캐시(220)이다. GPU(212)는 데이터(270.3)를 처리하기 위한 명령을 포함할 수 있는 명령(300.2)을 실행한다. 명령(300.2)은 도 3b의 의사-코드 또는 이외 다른 적합한 명령에 기초할 수 있다.
메모리 테이블(290)은 메모리 엔트리(292)를 포함하는 테이블이다. 메모리 엔트리(292)는 어드레스(272) 및 정보(294)를 포함한다. 메모리 테이블(290)은 메모리(250) 내에, 또는 통신 검출기(230)에 액세스가능한 다른 위치에 저장된다. 예를 들어, 통신 검출기(230)는 메모리 테이블(290) 또는 다른 데이터를 저장하기 위한 통신 검출기(230)와 연관된 캐시(도시되지 않음)를 가질 수 있다. 어드레스(292)는 메모리 엔트리(292)의 어드레스이다. 정보(294)는 메모리 엔트리(292)에 관한 정보를 포함한다. 예를 들어, 정보(294)는 어드레스(272)를 갖는 메모리 엔트리(292)가 캐시(218)에 로드되었음을 나타내는 정보(294)와 같은 정보(294)일 수 있다. 일부 실시예에서, 정보(294)는 데이터(270)가 캐시(218)와 캐시(220) 간에 이동되어진 회수 카운터 데이터(270)를 포함한다. 일부 실시예에서, 통신 검출기(230)는 메모리 테이블(290)과는 다른 데이터 구조를 사용한다.
통신 검출기(230)는 간격(232)을 결정 및/또는 저장한다. 일부 실시예에서, 간격(232)은 데이터(270)가 캐시(218)에 로드되었을 때와 데이터(270)가 캐시(220)에 의해 요청되었을 때 사이의 시간 간격(232)이다. 통신 검출기(230)는 데이터(270)를 CPU(210)의 캐시(218) 및/또는 GPU(212)의 캐시(220)로 이동시키도록 구성된다. 통신 검출기(230)는 메모리 트래픽(280)을 모니터하고 캐시(218) 및/또는 캐시(220)가 데이터(270)를 요청하기 전에 CPU(210)의 캐시(218) 및/또는 GPU(212)의 캐시(220)가 데이터(270)를 필요로 할 때를 예상한다. 통신 검출기(230)는 메모리 테이블(290)을 유지함으로써 메모리 트래픽(280)을 모니터링한다. 통신 검출기(230)는 메모리 테이블(290)에 메모리 엔트리(292)를 유지한다. 통신 검출기(230)는 데이터(270)가 현재 어느 캐시(218, 220)에 존재하고 있는가에 관한 정보, 데이터(270)가 얼마나 자주 사용되었는지에 대한 표시, 및 어드레스(272)와 연관된 데이터(272)를 캐시(218, 220)로 이동시킬지 여부를 결정하기 위해 통신 검출기(230)에 유용할 수 있는 그외 다른 정보(294)와 같은 정보(294)를 유지한다.
통신 검출기(230)는 CPU(210)의 캐시(218)와 GPU(212)의 캐시(220) 간에 데이터(270)의 이동을 검출하도록 구성된다. 통신 검출기(230)는 데이터(270)가 CPU(210)의 캐시(218)로부터 GPU(212)의 캐시(220)로 또는 그 반대로 이동될 때까지의 간격(232)을 결정하고, 결정된 간격(232)에 기초하여 데이터를 캐시(218)로 이동시킨다. 예를 들어, 통신 검출기(230)는 메모리 트래픽(280)을 모니터링하고, 메모리 테이블(290)을 유지한다. 메모리 테이블(290)은 데이터(270)가 언제 캐시(218)에 로드되어졌는가를 나타내는 메모리 엔트리(292)를 포함할 수 있다. 이어, 통신 검출기(230)는 캐시(220)가 메모리 엔트리(292)에 대응하는 데이터(270)를 언제 요청하였는지를 결정하기 위해 메모리 트래픽(280)을 모니터링한다. 통신 검출기(230)는 메모리 엔트리(292)가 캐시(218)에 의해 요청되거나 캐시에 로드되었을 때와 메모리 엔트리(218)가 캐시(220)에 의해 요청되거나 캐시에 로드되었을 때 사이의 간격(232)을 결정한다.
데이터(270)는 CPU(210)의 캐시(218)와 GPU(212)의 캐시(212) 간에 2번 이상 이동할 수 있다. 통신 검출기(230)는 결정된 간격(232)을 사용하여 한 캐시(218, 220)로부터 다른 캐시(218, 220)로 데이터(270)를 언제 이동 시킬지를 결정한다. 통신 검출기(230)는 캐시(218, 220)에 데이터(270)를 로드하기 위한 명령어를 메모리(250)에 보냄으로써 캐시(218)에 데이터(270)를 이동시킨다.
통신 검출기(230)는 메모리(250), CPU(210) 및/또는 GPU(212)의 일부로서 구현될 수 있다. 통신 검출기(230)는 소프트웨어, 펌웨어, 또는 전자 회로에 의해 구현될 수 있다. 통신 검출기(230)는 하나 이상의 부분으로 구현될 수 있다. 예를 들어, 통신 검출기(230)는 메모리(250)와 관련된 부분 및 CPU(210)와 관련된 부분을 가질 수 있다. 통신 검출기(230)는 부분 집적회로 및 부분 소프트웨어 또는 펌웨어 일 수 있다.
캐시(218, 220)는 후기입(write back) 캐시일 수 있다. 캐시(218, 220)는 동시기입(write-through) 캐시일 수 있다. 캐시(218, 220)는 코히런트 캐시(coherent cache) 시스템의 일부일 수 있다.
메모리(250)는 디렉토리 및 다른 캐시(도시되지 않음)를 포함한다. 메모리(250)는 코히런트 메모리 시스템의 캐시(218, 220) 부분을 갖는 중앙 메모리 계층의 부분이다. 일부 실시예에서, 메모리(250)는 L3 캐시이다. 메모리(250)는 어드레스(272)를 갖는 데이터(270)를 캐시(218, 220)에 로딩하기 위해 통신 검출기(230)로부터 명령을 취한다. 메모리(250)는 어드레스(272)에 의해 액세스되는 데이터(270)로 구성된다. 캐시(218, 220)는 코히런트 어드레스 시스템의 일부이거나 별도의 어드레스 시스템을 갖는다.
메모리 트래픽(280)은 메모리(250)에 대한 명령을 포함한다. 예를 들어, 메모리 트래픽(280)은 기입 요청, 판독 요청, 후기입 요청, 등을 포함할 수 있다.
일부 실시예에서, 캐시(218)와 캐시(220) 간에 직접적인 메모리 연결이 있다. 통신 검출기(230)는 2개의 캐시(218, 220) 간에 메모리 트래픽(280)을 모니터링하고, 2개의 캐시(218, 220) 간에 데이터(270)를 이동시키는 명령어를 보낸다.
도 3a 및 도 3b는 일부 실시예에 따라 CPU(210) 및 GPU(212)가 실행하는 컴퓨터 의사-코드의 예시적인 블록을 개략적으로 도시한다. 도 4a 및 도 4b는 CPU(210)와 GPU(212) 간에 데이터의 이동을 개략적으로 도시한다. 도 3a, 도 3b, 도 4a 및 도 4b는 서로 관련하여 설명된다. CPU(210)는 "data"에 대해 메모리(250) 내에 공간을 할당하는 명령 "data=malloc(...)"(302)을 실행함으로써 시작한다. "data"는, 예를 들면, 데이터(270.1 내지 270.N)에 저장되는 수백만 개의 숫자들의 어레이일 수 있다. CPU(210)는 "initialize(data)"(303)로 계속한다. CPU(210)가 데이터를 초기화하기 위해, CPU(210)는 데이터를 메모리(250)에서 CPU 캐시(218)로 이동시킬 것을 요청하며, 이는 도 4a에 도시되었다. 데이터(270.1 내지 270.N)는 CPU(210)가 데이터(270.1 내지 270.N)를 요청함에 의해 메모리(250)에서 캐시(218)로 이동되어졌다. 통신 검출기(230)는 데이터(270)를 모니터링하고 메모리 테이블(290)을 유지한다. 예를 들어, 통신 검출기(230)는 데이터(270.1 내지 270.N) 각각에 대한 엔트리를 만들고 정보(294)를 데이터(270)와 연관시킨다. 정보(294)는 CPU(210)가 데이터(270.1 내지 270.N)를 요청했고 데이터(270.1 내지 270.N)가 현재 캐시(218)에 있다는 표시를 포함할 수 있다.
CPU(210)는 do 루프를 시작하는 "do{"(304)로 계속한다. CPU(210)는 "kernel <<< blocks, threads >>>(data)"305로 계속한다. 이 명령어는 제어를 GPU(212)에 전송한다. GPU(212)는 의사-코드의 시작의 표시인 "kernel(){"(351)로 계속한다. GPU(212)는 "process(data)"(352)로 계속한다. GPU(212)는, 예를 들어, 데이터(270.1 내지 270.N)에 수백만 개의 숫자에 대해 계산을 수행한다. GPU(212)는 캐시(220)를 공유하는 다수의 처리 요소들로 구성될 수 있다. GPU(212)가 데이터를 처리하기 위해, GPU(212)의 캐시(220)는 데이터(270.1 내지 270.N)을 요청한다. 데이터(270.1 내지 270.N)는 GPU(212)가 데이터(270.1 내지 270.N)를 요청할 때 캐시(220)에 없기 때문에, 캐시(220)는 데이터(270.1 내지 270.N)를 요청한다. 데이터(270.1 내지 270.N)는 CPU(210)의 캐시(218)로부터 GPU(212)의 캐시(220)로 이동될 수 있다. 예를 들어, 메모리(250)의 디렉토리(도시되지 않음)는 캐시(218)가 데이터(270.1 내지 270.N)를 배출하라는 요청을 보내고, 데이터(270.1 내지 270.N)을 캐시(220)에 보낸다. 도 4b는 데이터(270.1 내지 270.N)가 GPU(212)에 의해 CPU(210)의 캐시 (218)로부터 GPU(212)의 캐시(220)로 이동되어진 것을 도시한다. 데이터(270.1 내지 270.N)의 일부 또는 전부는 CPU(210)의 캐시(218)에서 메모리(250)로 이동된 다음 메모리(250)에서 GPU(212)의 캐시(220)로 이동되어졌을 수도 있다. 통신 검출기(230)는 데이터(270.1 내지 270.N)의 이동을 모니터링하고, 데이터(270.1 내지 270.N)가 GPU(212)의 캐시(220)로 이동되었다는 것을 정보(294)에서 나타낸다. 일부 실시예에서, 통신 검출기(230)는 간격(232)을 결정한다.
GPU(212)는 제어를 CPU(210)로 다시 전송하는 "}"(353)로 계속한다. CPU(210)는 "re-process(data)"(306)로 계속한다. CPU(210)는 데이터(270.1 내지 270.N)를 재-처리하기 데이터(270.1 내지 270.N)를 다시 요청한다. 데이터(270.1 내지 270.N)는 GPU(212)의 캐시(220)로부터 CPU(210)의 캐시(218)로 이동된다. 데이터(270.1 내지 270.N)는 도 4a에 도시된 위치로 복귀할 수 있다. 통신 검출기(230)는 데이터(270.1 내지 270.N) 이동을 모니터링하고, 데이터(270.1 내지 270.N)가 GPU(212)의 캐시(220)로부터 CPU(210)의 캐시(218)로 이동되었다는 것을 상태(294)에서 나타낸다.
CPU(210)는 "{while(work left)"(307)로 계속한다. 일부 실시예에서, 남은 작업이 있으며 이 경우에 CPU(210)는 304로 복귀할 것이다.
CPU(210)는 이전처럼 do 루프의 시작인 "do{"(304)로 계속한다. CPU(210)는 "kernel<<block, threads>>>(data)"(305)로 계속한다. 이 명령어는, 전처럼, 제어를 GPU(212)에 전송한다. GPU(212)는 의사-코드의 시작의 표시인 "kernel(){"(351)로 계속한다. GPU(212)는 "process(data)"(352)로 계속한다. 예를 들어, GPU(212)는, 이전과 같이, 수백만 개의 숫자에 대해 계산을 수행한다. GPU(212)가 데이터를 처리하기 위해, GPU(212)는 데이터(270.1 내지 270.N)을 요청한다. 도 4b는 데이터(270.1 내지 270.N)가 캐시(218)에서 GPU(212)의 캐시(220)로 이동되어진 것을 도시한다.
일부 실시예에서, 통신 검출기(230)는 CPU(210) 및 GPU (212)에 의한 데이터(270.1 내지 270.N)의 처리 사이의 간격(232)이 GPU(212)가 데이터(270.1 내지 270.N)의 처리를 시작할 수 있음을 나타냈음을 결정함으로써 GPU(212)가 데이터(270.1 내지 270.N)의 처리를 시작하려고 했었음을 검출한다. 통신 검출기(230)는 데이터(270.1 내지 270.N) 이동을 모니터링하고, 데이터(270.1 내지 270.N)가 GPU(212)의 캐시(220)에 이동되었음을 정보(294)에서 나타낸다.
GPU(212)는 의사-코드(300.2)의 끝을 나타내는 "}"(353)로 계속한다. 제어는 CPU(210)로 복귀한다. CPU(210)는 "re-process(data)"(306)로 계속한다. 통신 검출기(230)는 CPU(210)가 데이터(270.1 내지 270.N)를 요청할 때 데이터가 이미 CPU(210)의 캐시(218)에 있도록 데이터(270.1 내지 270.N)를 CPU(210)의 캐시(218)로 이동시킬 수 있다. 일부 실시예에서, 데이터(270.1 내지 270.N)의 일부만이 "re-process(data)"이며, CPU(210)의 캐시(218)로 이동된다.
CPU(210)는 "post-process (data)"(308)로 계속한다. CPU(210)는 데이터(270.1 내지 270.N)의 일부 또는 전부를 처리한다. 일부 실시예에서, 새로운 데이터(270)는 CPU(210)에 의해 발생되고 처리될 수 있다. 통신 검출기(230)는 308에서 CPU(210)에 의해 처리되는 데이터(270.1 내지 270.N)의 일부 또는 전부를 이동시킬 수 있다. 의사-코드(300.1)는 종료할 수 있다. 의사-코드(300.1)는 307에서 루프를 계속하여 304로 되돌아갈 수도 있을 것인데, 이 경우 데이터(270.1 내지 270.N)는 캐시(218)(도 4a)와 캐시(220)(도 4b) 간에 서로 계속 이동할 것이다. 통신 검출기(230)는 메모리 트래픽(280)을 계속 모니터하고, 캐시(218, 220) 간에 서로 이동하는 데이터(270.1 내지 270.N)에 기초하여 간격(232)을 개선한다. 또한, 통신 검출기(230)는 메모리 트래픽(280)을 모니터링하고, 데이터(270.1 내지 270.N)를 다른 캐시(270.1 내지 270.N)로 이동시키는 것을 다른 표시자에 기초하여 결정할 수 있다. 예를 들어, 통신 검출기(230)는 다른 데이터 항목(도시되지 않음)이 캐시(218)에 의해 요청되었을 때 CPU(210)가 데이터(270.1 내지 270.N)로 완료되고 이에 따라 데이터(270.1 내지 270.N)가 캐시(220)로 이동될 것임을 결정할 수 있다.
도 5는 이종 프로세서 시스템에서 캐시로 데이터를 이동시키는 방법(500)을 도시한다. 방법(500)은 시작(502)에서 시작한다. 방법(500)은 제1 캐시가 복수의 데이터 항목을 요청했다는 표시를 수신하는 것으로 이어진다. 예를 들어, 도 4a 및 도 4b를 참조하면, CPU(210)는 캐시(218) 내에 없는 데이터(270.1 내지 270.N)을 요청할 수 있다. 캐시(218)는 메모리(250)로부터 데이터(270.1 내지 270.N)을 요청한다. 통신 검출기(230)는 캐시(218)로부터 데이터(270.1 및 270.N)의 메모리(250)로의 요청의 메모리 트래픽(280)을 검출한다.
방법(500)은 제1 캐시가 하나 이상의 데이터 항목을 요청했음을 나타내는 정보를 저장하는 것으로 이어진다(506). 예를 들어, 통신 검출기(230)는 데이터(270.1 내지 270.N)가 캐시(218)로 이동되었다는 것을 메모리 테이블(290)에 기록한다. 통신 검출기(230)는 데이터(270.1 내지 270.N)가 캐시(218)로 이동된 시간을 기록한다. 통신 검출기(230)는 데이터(210)가 기입되었는지 여부와 같은 다른 정보(294)를 저장할 수 있다. 일부 실시예에서, 통신 검출기(230)는 커널 완료 신호를 모니터하고 저장한다. 일부 실시예에서, 데이터(270.1 내지 270.N)의 일부 또는 전부는 캐시들(218 및 220) 간에 서로 이동된다. 통신 검출기(230)는 데이터(270.1 내지 270.N)가 캐시(218)로 얼마나 오랜동안 이동되었는가의 시간의 간격(232)과 언제 데이터(2701.1 내지 270.N)가 캐시(220)로 이동되었는가를 결정할 수 있다. 일부 실시예에서, 통신 검출기(230)는 동기화된 메모리 액세스를 모니터링하는 것에 기초하여 간격(232)을 결정한다. 일부 실시예에서, 통신 검출기(230)는 동기화된 메모리 액세스를 모니터링하는 것에만 기초하여 간격(232)을 결정한다. 일부 실시예에서, 통신 검출기(230)는 커널 완료 신호를 모니터링하는 것에 기초하여 간격(232)을 결정한다.
방법(500)은 하나 이상의 데이터 항목을 제2 캐시로 이동을 결정하는 것으로 이어진다(508). 예를 들어, 통신 검출기(230)는 간격(232)에 기초하여 데이터(270.1 내지 270.N)를 이동시킬 것을 결정한다. 예를 들어, 통신 검출기(230)는 간격(232)이 발생하였음을 결정하고 간격(232)을 지나 얼마간 시간을 대기하고, 이어 데이터(270.1 내지 270.N)를 이동하기로 결정한다. 통신 검출기(230)는 캐시(220)로부터의 메모리 트래픽(280)이 데이터(270.1 내지 270.N) 중 하나에 대한 요청을 포함한 것으로 결정한 후에 데이터(270.1 내지 270.N)를 이동시킬 것을 결정할 수 있다. 예를 들어, 캐시(220)는 270.1 내지 270.N이 캐시(218)에 존재할 때 데이터(270.1)에 대한 요청을 할 수 있다. 통신 검출기(230)는 메모리 트래픽(280)을 모니터링하고 캐시(220)가 데이터(270.1)를 요청하였다는 표시를 수신한 것에 기초하여 데이터(270.2 내지 270.N)를 캐시(220)에 이동시킬 것을 결정할 수 있다. 통신 검출기 (230)는 커널 완료 신호에 기초하여 데이터(270.2 내지 270.N)를 캐시(220)로 이동시킬 것을 결정할 수 있다. 예를 들어, 통신 검출기(230)는 데이터(270.2 내지 270.N)를 액세스하고 있었던 캐시(220)에서 실행하고 있는 커널로부터 커널 완료 신호가 수신된 것을 검출하고, 커널 완료 신호를 수신한 것에 기초하여, 통신 검출기(230)는 데이터(270.2 내지 270.N) 중 적어도 일부를 캐시(218)로 이동시킨다.
통신 검출기(230)는 메모리 트래픽(280)을 모니터링하고, 데이터(270.1 내지 270.N)가 후기입되어졌을 때 데이터(270.1 내지 270.N)가 캐시(220)로 이동되어야한다고 결정할 수 있다. 예를 들어, 통신 검출기(230)는 데이터(270.1 내지 270.100)가 후기입되었음을 검출할 수 있고, 이 결정에 기초하여, 데이터(270.1 내지 270.100)를 캐시(220)에 로드할 수 있다.
방법(500)은 하나 이상의 데이터 항목을 제2 캐시로 이동시키는 것으로 이어진다(510). 예를 들어, 통신 검출기(230)는 데이터(270.1 내지 270.N)가 캐시(220)에 로드될 것을 메모리(250)에 요청한다. 일부 실시예에서, 통신 검출기(230)는 데이터(270.1 내지 270.N)의 일부를 캐시(220)로 이동시키고, 이어 나중에 데이터(270.1 내지 270.N)의 제2 부분을 캐시(220)로 이동시킨다. 예를 들어, 통신 검출기(230)는 데이터(270.1 내지 270.100)를 캐시(220)로 이동시키고, 이어 270.101 내지 270.200을 캐시(220)로 이동시킨다. 통신 검출기(230)는 GPU(212)가 얼마나 오랜동안 데이터(270.1 내지 270.N)가 캐시(220) 내에 있을 것을 요구할 것인가의 추정에 기초하여 데이터(270.1 내지 270.N)에 부분들을 이동시킬 수 있다.
도 6은 이종프로세서 시스템에서 캐시로 데이터를 이동시키는 예시적인 시스템(600)을 개략적으로 도시한다. 시스템(600)은 스크래치 패드 메모리(602)를 포함한다. 스크래치 패드 메모리(602)는 어드레스(604), 실제 데이터(606), 및 다른 정보(608)를 기록하도록 구성된다. CPU(210) 및 GPU(212)는 이들이 각각 이들의 캐시(218, 220)에 데이터(270)를 기입할 때 데이터(270)가 또한 일부 선택된 데이터(270.1 내지 270.N)에 대해 스크래치 패드 메모리(602)의 실제 데이터(606)에 기입되도록 구성된다. 데이터(270)는 캐시(218, 220) 및 스크래치 패드 메모리(602) 내에 존재할 수 있다. 스크래치 패드 내 데이터(270)는 통신 검출기(230)가 데이터(270)를 이동시키기 전에 소유자 캐시(218, 220)가 데이터(270)에 다시 기입한다면 업데이트될 수 있다. 통신 검출기(230)는 데이터(270.1 내지 270.N)를 스크래치 패드로부터 캐시(218, 220) 중 하나에 이동시킬 수 있고, 데이터(270.1 내지 270.N)가 다른 캐시(218, 220)에 의해 소비될 때, 혹은 "kernel()}"(251)이 종료될 때 다른 캐시(218, 220) 내 데이터(270.1 내지 270.N)을 무효화한다. 다른 정보(608)는 어느 캐시(218, 220)가 데이터(606)를 소유하는지 및 데이터(606)가 유효한지의 표시를 포함할 수 있다.
본원 개시에 기초하여 많은 변형이 가능하다는 것을 이해해야 한다. 특징 및 요소가 특정 조합으로 상술되었지만, 각각의 특징 또는 요소는 다른 특징 및 요소없이 단독으로 또는 다른 특징 및 요소와 함께 또는 없이 다양한 조합으로 사용될 수 있다.
제공된 방법은 범용 컴퓨터, 프로세서, 또는 프로세서 코어에서 구현될 수 있다. 적합한 프로세서는, 예로서, 범용 프로세서, 그래픽스 처리 유닛(GPU), 전용 프로세서, 통상의 프로세서, 디지털 신호 프로세서(DSP), 복수의 마이크로프로세서, DSP 코어와 연관된 하나 이상의 마이크로프로세서, 제어기, 마이크로제어기, 응용특정 집적회로(ASIC), 필드 프로그래머블 게이트 어레이(FPGA) 회로, 임의의 다른 유형의 집적회로(IC), 및/또는 상태머신을 포함한다. 이러한 프로세서는 처리된 하드웨어 디스크립션 언어(HDL) 명령 및 넷리스트를 포함하는 다른 중간 데이터의 결과를 사용하여(이러한 명령은 컴퓨터 판독가능 매체에 저장될 수 있다) 제조 프로세스를 구성함으로써 제조될 수 있다. 이러한 처리의 결과는 개시된 실시예의 측면들을 구현하는 프로세서를 제조하기 위해 반도체 제조 프로세스에서 사용되는 마스크워크일 수 있다.
본원에서 제공되는 방법 또는 흐름도는 범용 컴퓨터 또는 프로세서에 의한 실행을 위해 컴퓨터 판독가능 저장 매체에 탑재된 컴퓨터 프로그램, 소프트웨어 또는 펌웨어로 구현될 수 있다. 일부 실시예에서, 컴퓨터 판독가능 저장 매체는 비-일시적 컴퓨터 판독가능 저장 매체이다. 컴퓨터 판독가능 저장 매체의 예로는 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 레지스터, 캐시 메모리, 반도체 메모리 디바이스, 내부 하드 디스크 및 착탈식 디스크와 같은 자기 매체, 자기-광학 매체, 및 CD-ROM 디스크 및 디지털 다기능 디스크(DVD)와 같은 광학 매체를 포함한다.

Claims (20)

  1. 복수의 데이터 항목(data item)들을 제1 프로세서와 연관된 제1 캐시 또는 제2 프로세서와 연관된 제2 캐시로 이동시키는 방법으로서,
    상기 방법은,
    상기 제1 프로세서 및 상기 제2 프로세서와 통신하는 통신 검출기에 의해, 상기 제1 캐시가 상기 복수의 데이터 항목들을 수신했다는 제1 표시를 수신하는 단계와;
    상기 통신 검출기에 의해, 상기 제1 캐시에서 수신된 상기 복수의 데이터 항목들에 대한 상기 제2 캐시로부터의 요청을 수신하는 단계와;
    상기 통신 검출기에 의해, 상기 제1 캐시가 상기 복수의 데이터 항목들을 수신한 시간을 표시하는 제1 정보를 저장하는 단계와, 여기서
    상기 제1 정보는 상기 복수의 데이터 항목들 각각에 대한 어드레스(address)를 포함하고;
    상기 통신 검출기에 의해, 상기 제2 캐시가 상기 복수의 데이터 항목들을 요청한 시간을 표시하는 제2 정보를 저장하는 단계와, 여기서
    상기 제2 정보는 상기 복수의 데이터 항목들 각각에 대한 상기 어드레스를 포함하고;
    상기 통신 검출기에 의해, 상기 복수의 데이터 항목들을 상기 제1 캐시로부터 상기 제2 캐시로 이동시키는 단계와;
    상기 통신 검출기에 의해, 상기 제1 캐시가 상기 복수의 데이터 항목들을 수신한 때로부터 상기 제2 캐시가 상기 복수의 데이터 항목들을 요청한 때까지의 시간의 양에 대응하는 시간 간격을 결정하는 단계와;
    상기 통신 검출기에 의해, 상기 복수의 데이터 항목들이 상기 제2 캐시로 이동된 이후 상기 제1 캐시가 상기 복수의 데이터 항목들을 다시 수신했다는 제2 표시를 수신하는 단계와;
    상기 통신 검출기에 의해, 상기 제2 표시에 기초하여 상기 제1 캐시가 상기 복수의 데이터 항목들을 다시 수신한 때를 표시하는 정보를 저장하는 단계와; 그리고
    상기 통신 검출기에 의해, 상기 제1 캐시가 상기 복수의 데이터 항목들을 다시 수신한 때 및 상기 시간 간격에 기초하여 상기 복수의 데이터 항목들을 상기 제1 캐시로부터 상기 제2 캐시로 이동시키는 단계를
    포함하는 것을 특징으로 하는 복수의 데이터 항목들을 제1 프로세서와 연관된 제1 캐시 또는 제2 프로세서와 연관된 제2 캐시로 이동시키는 방법.
  2. 제1항에 있어서,
    상기 방법은 또한,
    상기 통신 검출기에 의해, 상기 제1 캐시가 상기 복수의 데이터 항목들을 다시 수신한 때로부터 상기 제2 캐시가 상기 복수의 데이터 항목들을 다시 요청한 때까지의 추가적인 시간의 양에 기초하여 상기 시간 간격을 업데이트하는 단계와; 그리고
    상기 통신 검출기에 의해, 상기 제1 캐시가 상기 복수의 데이터 항목들을 다시 수신한 때 및 상기 업데이트된 시간 간격에 기초하여 상기 복수의 데이터 항목들을 상기 제2 캐시로 이동시키는 단계를
    포함하는 것을 특징으로 하는 복수의 데이터 항목들을 제1 프로세서와 연관된 제1 캐시 또는 제2 프로세서와 연관된 제2 캐시로 이동시키는 방법.
  3. 제1항에 있어서,
    상기 제2 캐시에 의한 요청은 메모리 판독 요청, 메모리 판독/기입 요청, 동기화된 메모리 판독 요청, 동기화된 메모리 판독/기입 요청, 및 커널 완료 신호 중 적어도 하나인 것을 특징으로 하는 복수의 데이터 항목들을 제1 프로세서와 연관된 제1 캐시 또는 제2 프로세서와 연관된 제2 캐시로 이동시키는 방법.
  4. 제1항에 있어서,
    상기 결정하는 단계는 또한,
    상기 통신 검출기에 의해, 상기 복수의 데이터 항목들의 서브세트가 상기 제1 캐시에서 수정되었다는 제3 표시를 수신하는 단계와; 그리고
    상기 통신 검출기에 의해, 상기 제3 표시를 수신하는 것에 기초하여 상기 복수의 데이터 항목들을 상기 제2 캐시로 이동시키는 단계를
    포함하는 것을 특징으로 하는 복수의 데이터 항목들을 제1 프로세서와 연관된 제1 캐시 또는 제2 프로세서와 연관된 제2 캐시로 이동시키는 방법.
  5. 제1항에 있어서,
    상기 제1 캐시는 제1 유형의 상기 제1 프로세서와 통신하고,
    상기 제2 캐시는 상기 제1 유형의 상기 제1 프로세서와는 다른 제2 유형의 상기 제2 프로세서와 통신하는 것을 특징으로 하는 복수의 데이터 항목들을 제1 프로세서와 연관된 제1 캐시 또는 제2 프로세서와 연관된 제2 캐시로 이동시키는 방법.
  6. 복수의 데이터 항목들을 제1 프로세서와 연관된 제1 캐시 또는 제2 프로세서와 연관된 제2 캐시로 이동시키기 위한 처리 디바이스로서,
    상기 처리 디바이스는,
    상기 제1 프로세서와 통신하는 상기 제1 캐시와;
    상기 제2 프로세서와 통신하는 상기 제2 캐시와; 그리고
    제1 유형의 상기 제1 프로세서 및 제2 유형의 상기 제2 프로세서와 통신하는 통신 검출기를 포함하고,
    상기 통신 검출기는,
    상기 제1 캐시가 상기 복수의 데이터 항목들을 수신했다는 제1 표시를 수신하는 것과;
    상기 제1 캐시에서 수신된 상기 복수의 데이터 항목들에 대한 상기 제2 캐시에 의한 요청을 수신하는 것과;
    상기 제1 캐시가 상기 복수의 데이터 항목들을 수신한 시간을 표시하는 제1 정보를 저장하는 것과, 여기서
    상기 제1 정보는 상기 복수의 데이터 항목들 각각에 대한 어드레스를 포함하고;
    상기 제2 캐시가 상기 복수의 데이터 항목들을 요청한 시간을 표시하는 제2 정보를 저장하는 것과, 여기서
    상기 제2 정보는 상기 복수의 데이터 항목들 각각에 대한 상기 어드레스를 포함하고;
    상기 복수의 데이터 항목들을 상기 제1 캐시로부터 상기 제2 캐시로 이동시키는 것과;
    상기 제1 캐시가 상기 복수의 데이터 항목들을 수신한 때로부터 상기 제2 캐시가 상기 복수의 데이터 항목들을 요청한 때까지의 시간의 양에 대응하는 시간 간격을 결정하는 것과;
    상기 복수의 데이터 항목들이 상기 제2 캐시로 이동된 이후 상기 제1 캐시가 상기 복수의 데이터 항목들을 다시 수신했다는 제2 표시를 수신하는 것과;
    상기 제2 표시에 기초하여 상기 제1 캐시가 상기 복수의 데이터 항목들을 다시 수신한 때를 표시하는 정보를 저장하는 것과; 그리고
    상기 제1 캐시가 상기 복수의 데이터 항목들을 다시 수신한 때 및 상기 시간 간격에 기초하여 상기 복수의 데이터 항목들을 상기 제1 캐시로부터 상기 제2 캐시로 이동시키는 것을
    수행하도록 구성되는 것을 특징으로 하는 복수의 데이터 항목들을 제1 프로세서와 연관된 제1 캐시 또는 제2 프로세서와 연관된 제2 캐시로 이동시키기 위한 처리 디바이스.
  7. 제6항에 있어서,
    상기 통신 검출기는 또한,
    상기 제1 캐시가 상기 복수의 데이터 항목들을 다시 수신한 때로부터 상기 제2 캐시가 상기 복수의 데이터 항목들을 다시 요청한 때까지의 추가적인 시간의 양에 기초하여 상기 시간 간격을 업데이트하는 것과; 그리고
    상기 제1 캐시가 상기 복수의 데이터 항목들을 다시 수신한 때 및 상기 업데이트된 시간 간격에 기초하여 상기 복수의 데이터 항목들을 상기 제2 캐시로 이동시키는 것을
    수행하도록 구성되는 것을 특징으로 하는 복수의 데이터 항목들을 제1 프로세서와 연관된 제1 캐시 또는 제2 프로세서와 연관된 제2 캐시로 이동시키기 위한 처리 디바이스.
  8. 제6항에 있어서,
    상기 제2 캐시에 의한 요청은 메모리 판독 요청, 메모리 판독/기입 요청, 동기화된 메모리 판독 요청, 동기화된 메모리 판독/기입 요청, 및 커널 완료 신호 중 적어도 하나인 것을 특징으로 하는 복수의 데이터 항목들을 제1 프로세서와 연관된 제1 캐시 또는 제2 프로세서와 연관된 제2 캐시로 이동시키기 위한 처리 디바이스.
  9. 제6항에 있어서,
    상기 통신 검출기에 의한 상기 결정은 또한,
    상기 복수의 데이터 항목들의 서브세트가 상기 제1 캐시에서 수정되었다는 제3 표시를 수신하는 것과; 그리고
    상기 제3 표시를 수신하는 것에 기초하여 상기 복수의 데이터 항목들을 상기 제2 캐시로 이동시키는 것을
    포함하는 것을 특징으로 하는 복수의 데이터 항목들을 제1 프로세서와 연관된 제1 캐시 또는 제2 프로세서와 연관된 제2 캐시로 이동시키기 위한 처리 디바이스.
  10. 제6항에 있어서,
    상기 통신 검출기는 또한,
    상기 복수의 데이터 항목들의 제1 부분을 상기 제2 캐시로 이동시키는 것과;
    소정 기간을 대기하는 것과; 그리고
    상기 복수의 데이터 항목들의 나머지 부분을 상기 제2 캐시로 이동시키는 것을
    수행하도록 구성되는 것을 특징으로 하는 복수의 데이터 항목들을 제1 프로세서와 연관된 제1 캐시 또는 제2 프로세서와 연관된 제2 캐시로 이동시키기 위한 처리 디바이스.
  11. 제1항에 있어서,
    상기 방법은 또한,
    상기 통신 검출기에 의해, 상기 제1 캐시가 상기 복수의 데이터 항목들을 다시 수신한 때 및 상기 시간 간격에 기초하여 상기 제2 캐시가 데이터를 요청하기 전에 상기 복수의 데이터 항목들을 상기 제1 캐시로부터 상기 제2 캐시로 이동시키는 단계를
    포함하는 것을 특징으로 하는 복수의 데이터 항목들을 제1 프로세서와 연관된 제1 캐시 또는 제2 프로세서와 연관된 제2 캐시로 이동시키는 방법.
  12. 제1항에 있어서,
    상기 방법은 또한,
    상기 통신 검출기에 의해, 상기 제1 캐시가 상기 복수의 데이터 항목들을 다시 수신한 때로부터 상기 시간 간격이 경과되었다고 결정하는 단계와; 그리고
    상기 통신 검출기에 의해, 상기 시간 간격이 경과된 이후 소정 기간 내에 상기 복수의 데이터 항목들을 상기 제1 캐시로부터 상기 제2 캐시로 이동시키는 단계를
    포함하는 것을 특징으로 하는 복수의 데이터 항목들을 제1 프로세서와 연관된 제1 캐시 또는 제2 프로세서와 연관된 제2 캐시로 이동시키는 방법.
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
KR1020177006265A 2014-08-05 2015-08-04 이종 프로세서 시스템 내 캐시들 간에 데이터 이동 KR102479394B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/452,058 US9652390B2 (en) 2014-08-05 2014-08-05 Moving data between caches in a heterogeneous processor system
US14/452,058 2014-08-05
PCT/US2015/043620 WO2016022566A1 (en) 2014-08-05 2015-08-04 Moving data between caches in a heterogeneous processor system

Publications (2)

Publication Number Publication Date
KR20170041816A KR20170041816A (ko) 2017-04-17
KR102479394B1 true KR102479394B1 (ko) 2022-12-20

Family

ID=55264432

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177006265A KR102479394B1 (ko) 2014-08-05 2015-08-04 이종 프로세서 시스템 내 캐시들 간에 데이터 이동

Country Status (5)

Country Link
US (1) US9652390B2 (ko)
EP (1) EP3178006B1 (ko)
JP (1) JP6453997B2 (ko)
KR (1) KR102479394B1 (ko)
WO (1) WO2016022566A1 (ko)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN207517054U (zh) 2017-01-04 2018-06-19 意法半导体股份有限公司 串流开关
US10402527B2 (en) 2017-01-04 2019-09-03 Stmicroelectronics S.R.L. Reconfigurable interconnect
US11520913B2 (en) * 2018-05-11 2022-12-06 International Business Machines Corporation Secure execution support for A.I. systems (and other heterogeneous systems)
US11029950B2 (en) 2019-07-03 2021-06-08 International Business Machines Corporation Reducing latency of common source data movement instructions
US11593609B2 (en) 2020-02-18 2023-02-28 Stmicroelectronics S.R.L. Vector quantization decoding hardware unit for real-time dynamic decompression for parameters of neural networks
US11531873B2 (en) 2020-06-23 2022-12-20 Stmicroelectronics S.R.L. Convolution acceleration with embedded vector decompression

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140040553A1 (en) * 2012-08-02 2014-02-06 Qualcomm Incorporated Cache data migration in a multicore processing system

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6704842B1 (en) * 2000-04-12 2004-03-09 Hewlett-Packard Development Company, L.P. Multi-processor system with proactive speculative data transfer
US6615322B2 (en) * 2001-06-21 2003-09-02 International Business Machines Corporation Two-stage request protocol for accessing remote memory data in a NUMA data processing system
US6633959B2 (en) * 2001-06-21 2003-10-14 International Business Machines Corporation Non-uniform memory access (NUMA) data processing system that provides notification of remote deallocation of shared data
US20040111563A1 (en) 2002-12-10 2004-06-10 Edirisooriya Samantha J. Method and apparatus for cache coherency between heterogeneous agents and limiting data transfers among symmetric processors
US7093080B2 (en) 2003-10-09 2006-08-15 International Business Machines Corporation Method and apparatus for coherent memory structure of heterogeneous processor systems
US7934054B1 (en) * 2005-11-15 2011-04-26 Oracle America, Inc. Re-fetching cache memory enabling alternative operational modes
US20090172353A1 (en) * 2007-12-28 2009-07-02 Optillel Solutions System and method for architecture-adaptable automatic parallelization of computing code
WO2010096263A2 (en) 2009-02-17 2010-08-26 Rambus Inc. Atomic-operation coalescing technique in multi-chip systems
US20110066830A1 (en) * 2009-09-11 2011-03-17 Andrew Wolfe Cache prefill on thread migration
US8782236B1 (en) * 2009-06-16 2014-07-15 Amazon Technologies, Inc. Managing resources using resource expiration data
KR101662829B1 (ko) 2009-11-19 2016-10-05 삼성전자주식회사 다중 프로세서 및 그것의 캐시 일관성 관리 장치 및 방법
JP2012064158A (ja) * 2010-09-17 2012-03-29 Toshiba Corp メモリ管理装置及びメモリ管理方法
US9218289B2 (en) 2012-08-06 2015-12-22 Qualcomm Incorporated Multi-core compute cache coherency with a release consistency memory ordering model
US20140205012A1 (en) * 2013-01-21 2014-07-24 Mediatek Inc. Method and apparatus using software engine and hardware engine collaborated with each other to achieve hybrid video encoding
US9325639B2 (en) * 2013-12-17 2016-04-26 At&T Intellectual Property I, L.P. Hierarchical caching system for lossless network packet capture applications
US10402331B2 (en) * 2014-05-29 2019-09-03 Samsung Electronics Co., Ltd. Systems and methods for implementing a tag-less shared cache and a larger backing cache

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140040553A1 (en) * 2012-08-02 2014-02-06 Qualcomm Incorporated Cache data migration in a multicore processing system

Also Published As

Publication number Publication date
US9652390B2 (en) 2017-05-16
JP2017527027A (ja) 2017-09-14
WO2016022566A1 (en) 2016-02-11
JP6453997B2 (ja) 2019-01-16
KR20170041816A (ko) 2017-04-17
EP3178006B1 (en) 2021-05-19
EP3178006A4 (en) 2018-01-24
EP3178006A1 (en) 2017-06-14
US20160041909A1 (en) 2016-02-11

Similar Documents

Publication Publication Date Title
KR102479394B1 (ko) 이종 프로세서 시스템 내 캐시들 간에 데이터 이동
US10740261B2 (en) System and method for early data pipeline lookup in large cache design
US8706973B2 (en) Unbounded transactional memory system and method
US9928168B2 (en) Non-volatile random access system memory with DRAM program caching
JP6280214B2 (ja) メモリで制御されるデータ移動及びタイミング
JP6859361B2 (ja) 中央処理ユニット(cpu)ベースシステムにおいて複数のラストレベルキャッシュ(llc)ラインを使用してメモリ帯域幅圧縮を行うこと
JP6170553B2 (ja) 異種プロセッサを使用するアプリケーションに低レイテンシを提供するためのシステムおよび方法
US9798498B2 (en) Method of operating memory controller and methods for devices having the same
EP3365811B1 (en) Columnar caching in tiered storage
US10198357B2 (en) Coherent interconnect for managing snoop operation and data processing apparatus including the same
CN113641596B (zh) 缓存管理方法、缓存管理装置、处理器
EP2901287B1 (en) System cache with sticky removal engine
US20140258643A1 (en) Method and system for maintaining release consistency in shared memory programming
US20220027327A1 (en) Distributed vfs with shared page cache
CA2787560C (en) System and method for locking data in a cache memory
US11687460B2 (en) Network cache injection for coherent GPUs
TW202326397A (zh) 編組資料一致性
US20140173225A1 (en) Reducing memory access time in parallel processors
US20140281234A1 (en) Serving memory requests in cache coherent heterogeneous systems
US20240111420A1 (en) Speculative dram request enabling and disabling
JP6565729B2 (ja) 演算処理装置、制御装置、情報処理装置及び情報処理装置の制御方法
JP2023507293A (ja) システムダイレクトメモリアクセスエンジンのオフロード
TWI521349B (zh) 攜帶式電子裝置資料寫入方法
CN114860723A (zh) 数据库的共享内存缓冲池处理方法、存储介质与设备

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
GRNT Written decision to grant