KR102479394B1 - 이종 프로세서 시스템 내 캐시들 간에 데이터 이동 - Google Patents
이종 프로세서 시스템 내 캐시들 간에 데이터 이동 Download PDFInfo
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0811—Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0813—Multiuser, multiprocessor or multiprocessing cache systems with a network or matrix configuration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
- G06F12/0831—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
- G06F12/0835—Cache 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)
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
- G06F2212/1024—Latency reduction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/15—Use in a specific computing environment
- G06F2212/154—Networked environment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/28—Using a specific disk cache architecture
- G06F2212/283—Plural cache memories
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/50—Control mechanisms for virtual memory, cache or TLB
- G06F2212/502—Control mechanisms for virtual memory, cache or TLB using adaptive policy
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/50—Control mechanisms for virtual memory, cache or TLB
- G06F2212/507—Control mechanisms for virtual memory, cache or TLB using speculative control
Abstract
복수의 데이터 항목을 제1 캐시 또는 제2 캐시로 이동시키는 장치, 컴퓨터 판독가능 매체, 집적회로 및 방법이 제시된다. 방법은 제1 캐시가 복수의 데이터 항목들을 요청했다는 표시를 수신하는 단계를 포함한다. 방법은 제1 캐시가 복수의 데이터 항목들을 요청했음을 나타내는 정보를 저장하는 단계를 포함할 수 있다. 정보는 복수의 데이터 항목 각각에 대한 어드레스를 포함할 수 있다. 방법은, 적어도 저장된 정보에 기초하여, 복수의 데이터 항목들을 제2 캐시로 이동시킬 것을 결정하는 단계를 포함한다. 방법은 복수의 데이터 항목들을 제2 캐시로 이동시키는 단계를 포함한다. 방법은 제1 캐시가 복수의 데이터 항목을 요청하였다는 표시를 수신하는 것과 복수의 데이터 항목을 제2 캐시로 이동시키는 것 사이의 시간 간격을 결정하는 단계를 포함할 수 있다. 스크래치 패드 메모리가 개시된다.
Description
관련 출원에 대한 상호참조
본 출원은 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은 하나 이상의 개시된 실시예가 구현될 수 있는 예시적인 디바이스의 블록도이다;
도 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)
- 복수의 데이터 항목(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 캐시로 이동시키는 방법. - 제1항에 있어서,
상기 방법은 또한,
상기 통신 검출기에 의해, 상기 제1 캐시가 상기 복수의 데이터 항목들을 다시 수신한 때로부터 상기 제2 캐시가 상기 복수의 데이터 항목들을 다시 요청한 때까지의 추가적인 시간의 양에 기초하여 상기 시간 간격을 업데이트하는 단계와; 그리고
상기 통신 검출기에 의해, 상기 제1 캐시가 상기 복수의 데이터 항목들을 다시 수신한 때 및 상기 업데이트된 시간 간격에 기초하여 상기 복수의 데이터 항목들을 상기 제2 캐시로 이동시키는 단계를
포함하는 것을 특징으로 하는 복수의 데이터 항목들을 제1 프로세서와 연관된 제1 캐시 또는 제2 프로세서와 연관된 제2 캐시로 이동시키는 방법. - 제1항에 있어서,
상기 제2 캐시에 의한 요청은 메모리 판독 요청, 메모리 판독/기입 요청, 동기화된 메모리 판독 요청, 동기화된 메모리 판독/기입 요청, 및 커널 완료 신호 중 적어도 하나인 것을 특징으로 하는 복수의 데이터 항목들을 제1 프로세서와 연관된 제1 캐시 또는 제2 프로세서와 연관된 제2 캐시로 이동시키는 방법. - 제1항에 있어서,
상기 결정하는 단계는 또한,
상기 통신 검출기에 의해, 상기 복수의 데이터 항목들의 서브세트가 상기 제1 캐시에서 수정되었다는 제3 표시를 수신하는 단계와; 그리고
상기 통신 검출기에 의해, 상기 제3 표시를 수신하는 것에 기초하여 상기 복수의 데이터 항목들을 상기 제2 캐시로 이동시키는 단계를
포함하는 것을 특징으로 하는 복수의 데이터 항목들을 제1 프로세서와 연관된 제1 캐시 또는 제2 프로세서와 연관된 제2 캐시로 이동시키는 방법. - 제1항에 있어서,
상기 제1 캐시는 제1 유형의 상기 제1 프로세서와 통신하고,
상기 제2 캐시는 상기 제1 유형의 상기 제1 프로세서와는 다른 제2 유형의 상기 제2 프로세서와 통신하는 것을 특징으로 하는 복수의 데이터 항목들을 제1 프로세서와 연관된 제1 캐시 또는 제2 프로세서와 연관된 제2 캐시로 이동시키는 방법. - 복수의 데이터 항목들을 제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 캐시로 이동시키기 위한 처리 디바이스. - 제6항에 있어서,
상기 통신 검출기는 또한,
상기 제1 캐시가 상기 복수의 데이터 항목들을 다시 수신한 때로부터 상기 제2 캐시가 상기 복수의 데이터 항목들을 다시 요청한 때까지의 추가적인 시간의 양에 기초하여 상기 시간 간격을 업데이트하는 것과; 그리고
상기 제1 캐시가 상기 복수의 데이터 항목들을 다시 수신한 때 및 상기 업데이트된 시간 간격에 기초하여 상기 복수의 데이터 항목들을 상기 제2 캐시로 이동시키는 것을
수행하도록 구성되는 것을 특징으로 하는 복수의 데이터 항목들을 제1 프로세서와 연관된 제1 캐시 또는 제2 프로세서와 연관된 제2 캐시로 이동시키기 위한 처리 디바이스. - 제6항에 있어서,
상기 제2 캐시에 의한 요청은 메모리 판독 요청, 메모리 판독/기입 요청, 동기화된 메모리 판독 요청, 동기화된 메모리 판독/기입 요청, 및 커널 완료 신호 중 적어도 하나인 것을 특징으로 하는 복수의 데이터 항목들을 제1 프로세서와 연관된 제1 캐시 또는 제2 프로세서와 연관된 제2 캐시로 이동시키기 위한 처리 디바이스. - 제6항에 있어서,
상기 통신 검출기에 의한 상기 결정은 또한,
상기 복수의 데이터 항목들의 서브세트가 상기 제1 캐시에서 수정되었다는 제3 표시를 수신하는 것과; 그리고
상기 제3 표시를 수신하는 것에 기초하여 상기 복수의 데이터 항목들을 상기 제2 캐시로 이동시키는 것을
포함하는 것을 특징으로 하는 복수의 데이터 항목들을 제1 프로세서와 연관된 제1 캐시 또는 제2 프로세서와 연관된 제2 캐시로 이동시키기 위한 처리 디바이스. - 제6항에 있어서,
상기 통신 검출기는 또한,
상기 복수의 데이터 항목들의 제1 부분을 상기 제2 캐시로 이동시키는 것과;
소정 기간을 대기하는 것과; 그리고
상기 복수의 데이터 항목들의 나머지 부분을 상기 제2 캐시로 이동시키는 것을
수행하도록 구성되는 것을 특징으로 하는 복수의 데이터 항목들을 제1 프로세서와 연관된 제1 캐시 또는 제2 프로세서와 연관된 제2 캐시로 이동시키기 위한 처리 디바이스. - 제1항에 있어서,
상기 방법은 또한,
상기 통신 검출기에 의해, 상기 제1 캐시가 상기 복수의 데이터 항목들을 다시 수신한 때 및 상기 시간 간격에 기초하여 상기 제2 캐시가 데이터를 요청하기 전에 상기 복수의 데이터 항목들을 상기 제1 캐시로부터 상기 제2 캐시로 이동시키는 단계를
포함하는 것을 특징으로 하는 복수의 데이터 항목들을 제1 프로세서와 연관된 제1 캐시 또는 제2 프로세서와 연관된 제2 캐시로 이동시키는 방법. - 제1항에 있어서,
상기 방법은 또한,
상기 통신 검출기에 의해, 상기 제1 캐시가 상기 복수의 데이터 항목들을 다시 수신한 때로부터 상기 시간 간격이 경과되었다고 결정하는 단계와; 그리고
상기 통신 검출기에 의해, 상기 시간 간격이 경과된 이후 소정 기간 내에 상기 복수의 데이터 항목들을 상기 제1 캐시로부터 상기 제2 캐시로 이동시키는 단계를
포함하는 것을 특징으로 하는 복수의 데이터 항목들을 제1 프로세서와 연관된 제1 캐시 또는 제2 프로세서와 연관된 제2 캐시로 이동시키는 방법. - 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
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)
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)
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)
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 |
-
2014
- 2014-08-05 US US14/452,058 patent/US9652390B2/en active Active
-
2015
- 2015-08-04 WO PCT/US2015/043620 patent/WO2016022566A1/en active Application Filing
- 2015-08-04 JP JP2017506322A patent/JP6453997B2/ja active Active
- 2015-08-04 EP EP15828911.6A patent/EP3178006B1/en active Active
- 2015-08-04 KR KR1020177006265A patent/KR102479394B1/ko active IP Right Grant
Patent Citations (1)
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 |