KR20140001827A - 메모리 영역을 충진하기 위한 프로세서 지원 - Google Patents

메모리 영역을 충진하기 위한 프로세서 지원 Download PDF

Info

Publication number
KR20140001827A
KR20140001827A KR1020137005611A KR20137005611A KR20140001827A KR 20140001827 A KR20140001827 A KR 20140001827A KR 1020137005611 A KR1020137005611 A KR 1020137005611A KR 20137005611 A KR20137005611 A KR 20137005611A KR 20140001827 A KR20140001827 A KR 20140001827A
Authority
KR
South Korea
Prior art keywords
memory
processing element
memory area
initialization
program
Prior art date
Application number
KR1020137005611A
Other languages
English (en)
Inventor
에릭 알. 카스폴
라우렌트 모리체티
Original Assignee
어드밴스드 마이크로 디바이시즈, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 어드밴스드 마이크로 디바이시즈, 인코포레이티드 filed Critical 어드밴스드 마이크로 디바이시즈, 인코포레이티드
Publication of KR20140001827A publication Critical patent/KR20140001827A/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • 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

Abstract

프로세서 및/또는 처리 요소들 간에 작업부하를 분배하는 것에 관한 기술이 개시된다. 적어도 제1 및 제2처리 요소를 구비하는 컴퓨터 시스템은 하나 이상의 메모리 영역을 초기화하는 요청을 제2처리 요소에 의해 처리하게 할 수 있다. 초기화는 제2처리 요소가 초기화될 특정 메모리 영역을 포함하는 메모리에 직접 액세스하는 것에 의해 달성될 수 있다. 따라서, 제2처리 요소가 메모리 영역이 초기화되게 하는 동안, 제1처리 요소는 다른 연산 작업을 자유로이 수행할 수 있다. 제1처리 요소와 연관된 캐시는 제2처리 요소가 초기화를 수행한 결과 방해받지 않아서 캐시로부터 데이터의 교체를 피할 수 있다.

Description

메모리 영역을 충진하기 위한 프로세서 지원{PROCESSOR SUPPORT FOR FILLING MEMORY REGIONS}
본 개시 내용은 컴퓨터 프로세서에 관한 것이고, 보다 상세하게는 메모리 영역을 충진(fill)하기 위한 요청을 수신하는 프로세서에 관한 것이다.
컴퓨터의 동작 동안, 메모리의 영역은 특정 값으로 초기화(충진)될 필요가 있다. 메모리 영역을 초기화하는 것은 특정 연산 자원을 취하며, 예를 들어, 초기화를 수행하는 프로세서는 값을 일련의 메모리 위치에 기록하여야 할 수 있으며 이는 시간을 소비할 수 있다. 이 초기화 동안, 프로세서는 다른 연산 작업을 수행할 수 없을 수 있다.
또한 메모리 초기화 동작은 프로세서와 연관된 캐시에 지장을 줄 수 있다. 캐시의 성능은 메모리 초기화 동안 캐시 내용이 교체되므로 프로세서에 의해 부정적으로 영향을 받을 수 있다. 예를 들어, (메모리 영역의 초기화가 시작되기 전에) 캐시의 미리 존재하는 내용의 일부 또는 전부가 초기화되는 메모리 영역의 내용으로 대체될 수 있는 것이 가능하다. 이러한 대체는 다른 메모리가 캐시에 이전에 존재한 데이터를 검색하기 위해 이후 액세스될 수 있을 때 프로그램 실행을 느리게 할 수 있다.
컴퓨터 시스템 또는 컴퓨팅 디바이스가 제1처리 요소로부터 제2처리 요소로 특정 메모리 동작을 분배할 수 있게 하는 방법 및 구조의 여러 실시예들이 본 명세서에 개시된다.
개시된 일 실시예에서, 초기화될 컴퓨팅 디바이스의 메모리 영역의 표시(indication)를 수신하는 동작과, 이 수신하는 동작에 응답하여 컴퓨팅 디바이스의 제2처리 요소에 의해 처리되는 메모리 영역의 초기화 동작을 포함하는 동작을 수행하기 위해 컴퓨팅 디바이스의 적어도 제1처리 요소에 의해 실행가능한 프로그램 명령을 저장한 컴퓨터 판독가능한 매체가 개시된다. 다른 실시예에서, 이 표시는 제1처리 요소에 의해 실행되는 제어 프로그램으로부터 수신된다.
다른 실시예는, 컴퓨팅 디바이스의 제1처리 요소에서 실행되는 제1프로그램이 초기화될 컴퓨팅 디바이스의 메모리 영역의 표시를 수신하는 단계와, 상기 수신하는 단계에 응답하여 상기 제1프로그램이 컴퓨팅 디바이스의 제2처리 요소에 의해 메모리 영역의 초기화를 처리하는 단계를 구비하는 방법을 포함한다. 다른 실시예에서, 제2처리 요소는 제1처리 요소가 메모리 영역에 직접 액세스함이 없이 메모리 영역을 초기화하기 위해 직접 메모리 액세스(DMA: direct memory access)를 사용한다.
또 다른 실시예는, 메인 메모리, 2차 저장 디바이스 및 적어도 제1 및 제2처리 요소를 구비하는 메모리 서브시스템을 포함하는 컴퓨터 시스템이며, 여기서 상기 2차 저장 디바이스는 컴퓨터 시스템으로 하여금 초기화될 메인 메모리 내 메모리 영역의 표시를 수신하게 하고 이 수신에 응답하여 컴퓨팅 디바이스의 제2처리 요소에 의해 처리되는 메모리 영역의 초기화를 수행하도록 제1처리 요소에 의해 실행가능한 프로그램 명령을 저장한다. 다른 실시예에서, 컴퓨터 시스템은 제1처리 요소와 연관된 캐시를 포함하며, 상기 캐시는 메인 메모리에 액세스하는 제1처리 요소에 응답하여 메인 메모리의 내용을 저장하도록 구성되고, 상기 메모리 영역을 초기화하는 것은 캐시가 메모리 영역의 초기화 후 내용을 저장하는 것을 초래하지 않는다.
도 1은 제1처리 요소로부터 제2처리 요소로 메모리 초기화를 분배하도록 구성된 컴퓨터 시스템의 일 실시예를 도시한 블록도;
도 2a 내지 도 2b는 초기화 전 및 후에 예시적인 메모리 영역을 도시한 블록도;
도 3a는 메모리 초기화를 수행하도록 구성된 제어 프로그램을 포함하는 메모리 서브시스템의 일 실시예를 도시한 블록도;
도 3b는 메모리 초기화를 수행하도록 구성된 운영 시스템(operating system)을 포함하는 메모리 서브시스템의 일 실시예를 도시한 블록도;
도 3c는 메모리 초기화를 수행하도록 구성된 자바 가상 기계(JAVA Virtual Machine) 프로그램을 포함하는 일 실시예를 도시한 블록도;
도 4는 메모리 초기화가 제1처리 요소로부터 제2처리 요소로 분배되는 방법의 일 실시예를 도시한 흐름도;
도 5는 메모리 초기화가 제1처리 요소로부터 제2처리 요소로 분배되는 컴퓨터 시스템의 일 실시예를 도시한 흐름도.
본 명세서는 "일 실시예" 또는 "실시예"라는 언급을 포함한다. "일 실시예" 또는 "실시예"라는 어구의 표현은 반드시 동일한 실시예를 언급하는 것은 아니다. 특정 특징, 구조 또는 특성은 본 개시 내용과 일치하는 임의의 적절한 방식으로 결합될 수 있다.
용어. 다음 문단은 (첨부된 청구범위를 포함하여) 본 개시 내용에 나오는 용어에 대한 정의 및/또는 문맥을 제공한다.
"포함하는" 또는 "구비하는". 이들 용어는 개방형 어구이다. 첨부된 청구범위에 사용된 바와 같이, 이들 용어는 추가적인 구조나 단계를 배제하지 않는다. "하나 이상의 처리 요소를 포함하는 장치..."라고 언급하는 청구범위를 생각해 보자. 이러한 청구범위는 장치가 추가적인 성분(예를 들어, 네트워크 인터페이스 유닛, 그래픽 회로 등)을 포함하는 것을 배제하지 않는다.
"∼하도록 구성된". 여러 유닛, 회로 또는 다른 성분은 작업 또는 작업들을 수행"하도록 구성된" 것으로 기술되거나 청구될 수 있다. 이러한 문맥에서, "∼하도록 구성된"은 유닛/회로/성분이 동작 동안 작업 또는 작업들을 수행하는 구조(예를 들어, 회로)를 포함하는 것을 표시하는 것에 의해 구조를 나타내는데 사용된다. 그리하여, 유닛/회로/성분은 특정 유닛/회로/성분이 현재 동작하지 않는(예를 들어, 온(on)이 아닌) 때에도 작업을 수행하도록 구성된 것이라고 말할 수 있다. "∼하도록 구성된"언어와 사용된 유닛/회로/성분은 하드웨어, 예를 들어, 회로, 동작을 구현하도록 실행가능한 프로그램 명령을 저장하는 메모리 등을 포함한다. 유닛/회로/성분이 하나 이상의 작업을 수행"하도록 구성된"이라는 언급은 이 유닛/회로/성분에 대해 35 U.S.C. §112, 제6문단을 명시적으로 상기시키려고 의도된 것은 아니다. 추가적으로, "∼하도록 구성된"은 당해 작업(들)을 수행할 수 있는 방식으로 동작하는 소프트웨어 및/또는 펌웨어(예를 들어, 소프트웨어를 실행하는 FPGA 또는 범용 목적 프로세서)에 의해 조작되는 일반 구조(예를 들어, 일반 회로)를 포함할 수 있다. 또한, "∼하도록 구성된"은 하나 이상의 작업을 구현하거나 수행하도록 적응된 디바이스(예를 들어, 집적 회로)를 제조하도록 제조 공정(예를 들어, 반도체 제조 시설)을 적응하는 것을 포함할 수 있다.
"처리 요소". 이 용어는 이 기술 분야에서 통상적으로 허용된 의미를 가지고 있으며 컴퓨터 명령을 실행할 수 있는 디바이스(예를 들어, 회로) 또는 디바이스의 조합을 포함한다. 처리 요소는 여러 실시예에서 단일 코어 프로세서, 다수 코어 프로세서의 코어, 또는 다수 코어 프로세서의 2개 이상의 코어의 그룹을 말한다.
"프로세서". 이 용어는 이 기술 분야에서 통상적으로 허용된 의미를 가지고 있으며 하나 이상의 처리 요소를 포함하는 디바이스를 포함한다. 프로세서는 제한 없이 CPU(central processing unit), 코프로세서(co-processor), 산술 처리 유닛(arithmetic processing unit), 그래픽 처리 유닛, DSP(digital signal processor) 등을 지칭 수 있다.
"제1", "제2" 등. 본 명세서에 사용된 바와 같이, 이들 용어는 이들에 따라오는 명사에 대한 라벨(label)로 사용되고 임의의 유형(예를 들어, 공간적, 시간적, 논리적 등)의 순서를 의미하는 것이 아니다. 예를 들어, 8개의 처리 요소 또는 코어를 구비하는 프로세서에서, 용어 "제1" 및 "제2" 처리 요소는 8개의 처리 요소 중 임의의 2개를 말하는데 사용될 수 있다. 다시 말해, "제1"및 "제2"처리 요소는 논리적 처리 요소들(0과 1)로 제한되는 것은 아니다.
"컴퓨터" 또는 "컴퓨터 시스템". 이 용어는 이 기술 분야에서 통상적으로 허용되는 의미를 가지고 있으며, 함께 동작하는 하나 이상의 컴퓨팅 디바이스와 이에 저장된 소프트웨어를 포함한다. 컴퓨팅 디바이스는 하나 이상의 처리 요소와 메모리 서브시스템을 포함한다. 메모리 서브시스템은 여러 작업을 수행하기 위해 하나 이상의 처리 요소에 의해 실행가능한 프로그램 명령을 저장할 수 있다.
"컴퓨터 판독가능한 매체". 본 명세서에 사용된 바와 같이, 이 용어는 컴퓨터 또는 컴퓨터 시스템에 의해 판독가능한 (비일시적(nontransitory), 유형적(tangible)) 매체를 말하며, 하드 드라이브, 광학 디스크, DVD, 휘발성 또는 비휘발성 RAM 디바이스, 홀로그래픽 저장매체, 프로그래밍가능한 메모리 등과 같은 자기, 광, 및 고체 저장 매체를 포함한다. 본 명세서에서 컴퓨터 판독가능한 매체에 적용되는 "비일시적"이라는 용어는 일시적인(비유형적인) 매체(예를 들어, 반송파)와 같은 35 U.S.C. §101 하에서 부적절한 것으로 간주되는 임의의 대상을 청구범위로부터 배제하기 위한 것일 뿐, 법정 대상인 것으로 간주되는 임의의 대상을 배제하려는 것이 전혀 아니다.
"운영 시스템". 이 용어는 이 기술 분야에서 통상적으로 허용되는 의미를 가지고 있으며, (예를 들어, 애플리케이션으로부터의 요청에 응답하여) 컴퓨터 시스템의 자원에 액세스를 제어하는 프로그램 또는 프로그램의 세트를 포함한다. 일부 실시예에서, 운영 시스템은 통신 디바이스, 저장 디바이스 등과 같은 I/O 디바이스에 액세스를 제어한다. 본 명세서에 기술된 바와 같이, 운영 시스템은 특정 실시예에서, 제2처리 요소로 하여금 메모리 초기화를 수행하게 하도록 실행가능한 명령을 포함할 수 있다.
"캐시". 이 용어는 이 기술 분야에 통상적으로 허용된 의미를 가지고 있으며, 데이터를 저장하는 메모리 또는 다른 저장매체를 포함하고 일부 다른 메모리 또는 저장매체에 대해 더 빠른 액세스를 제공하는 것에 의해 이 데이터에 대한 차후 요청을 개선시킬 수 있다.
"컴퓨터 시스템으로 하여금 동작을 수행하게 하는". 프로그램 명령의 실행은 "컴퓨터 시스템으로 하여금 동작을 수행하게 하는"것으로 기술되거나 청구될 수 있다. 이 어구는 실행될 때 해당 동작을 수행하는 명령과 실행될 때 동작을 수행하는 코드를 인스톨(install)하거나 인스턴스화(instantiate)하는 명령을 커버하는 것으로 광범위하게 해석되어야 한다. 예를 들어, 컴퓨터 판독가능한 매체는 컴퓨터 시스템으로 하여금 컴퓨터 시스템의 제1처리 요소로부터 컴퓨터 시스템의 제2처리 요소로 메모리 영역의 메모리 초기화를 분배하게 하도록 실행가능한 명령을 포함할 수 있다.
"실행가능한". 이 용어는 이 기술 분야에 통상적으로 허용된 의미를 가지고 있으며, 하나 이상의 특정 처리 요소(즉, 특정 명령 세트 아키텍처(ISA: instruction set architecture))와 연관된 포맷의 명령과, 처리 요소의 ISA에 대한 명령을 생성하기 위해 제어 프로그램(예를 들어, 자바 가상 기계)에 의해 해석될 수 있는 중간 포맷(예를 들어, 자바 바이트코드)의 명령을 포함한다. 이 정의에 따라, 제1처리 요소에서 "실행되는" 프로그램은 이 제1 요소에 의해 실행되는 명령의 적어도 일부를 가지고 있다(그러나, 이 프로그램의 다른 명령은 다른 요소에 의해 실행될 수 있다). 프로그램의 실행은 프로그램의 해석을 더 포함한다.
"애플리케이션 프로그래밍 인터페이스(API: Application Programming Interface)". 이 용어는 이 기술 분야에서 통상적으로 허용된 의미를 가지고 있으며, 소프트웨어가 다른 소프트웨어와 상호작용하게 하는 인터페이스를 포함한다. 프로그램은 애플리케이션, 라이브러리 루틴, 운영 시스템 등의 기능을 사용하기 위해 API 호출(call)을 할 수 있다.
* * *
본 명세서에 기술된 바와 같이, 컴퓨터 프로그램은 특정 데이터로 컴퓨터 메모리를 초기화(충진)하여 이에 의해 이 메모리에 의해 이전에 저장된 데이터를 소거할 필요성이 있을 수 있다. 일부 실시예에서, 메모리를 초기화할 필요성은 (새로운) 메모리의 할당을 수신하기 위한 요청에 따라 발생할 수 있다. 일 실시예에서, 자바 가상 기계(JVM: JAVA virtual machine) 프로그램(다른 자바 프로그램을 실행하는데 사용된)은 자바 프로그램이 블랭크(디폴트) 데이터로 이 메모리 영역을 사용하여 시작할 수 있도록 메모리 영역을 "제로 아웃(zero out)"할 수 있다. 다른 실시예에서, 운영 시스템은 예를 들어 유저 프로그램이 이 메모리에 액세스하기 전에 모두 제로(0)를 메모리에 덮어쓰기(overwrite)할 수 있다. (일부 실시예에서, 소거된 데이터는 패스워드, 신용 카드 번호, 또는 유저 프로그램이 액세스할 수 있는 것을 운영 시스템이 원치 않는 다른 데이터를 보유할 수 있다.) 다른 유형의 프로그램에 의해 많은 다른 유형의 메모리 초기화가 또한 고려되므로, 본 개시 내용은 운영 시스템 소프트웨어 또는 JVM으로 제한되는 것은 아니다. 초기화 동안 메모리 영역에 충진되는 데이터는 아래에 더 기술되는 바와 같이 모두 제로일 수 있으나 반드시 모두 제로일 필요는 없다.
일 실시예에서, 컴퓨터 시스템은 예를 들어 일반 목적 명령을 실행하도록 구성된 중앙 처리 유닛(CPU: central processing unit)과 같은 제1프로세서를 구비한다. 컴퓨터 시스템은 그래픽 명령과 같은 특수 목적 명령을 실행하도록 구성된 그래픽 처리 유닛(GPU: graphic processing unit)과 같은 제2 프로세서를 더 구비한다. 다른 실시예에서, 제1프로세서(또는 처리 요소)는 단일 디바이스, 패키지 또는 통합된 회로에서 CPU 및 GPU의 기능을 포함할 수 있다. 컴퓨터 시스템은 메모리 서브시스템을 더 구비한다. 일 실시예에서, 컴퓨터 시스템은 제2 프로세서에 의해 특정 명령 시퀀스가 수행되도록 구조화된다(즉, 프로그래밍된다). 이들 명령 시퀀스는 제1프로세서에 의해 실행된 명령에 의해 생성될 수 있고 메모리 초기화 루틴을 포함할 수 있다. 따라서, 제2 프로세서가 초기화를 수행하는 동안 제1프로세서는 다른 작업을 자유로이 수행할 수 있다. (예를 들어, 초기화될 메모리 영역은 곧바로 필요한 것이 아닐 수 있으므로 제2 프로세서가 메모리 초기화를 수행하는 동안 제1프로세서는 프로그램을 계속 실행할 수 있다. 제1프로세서의 성능을 개선시키는 것 외에, 본 명세서에 개시된 기술은 예를 들어 캐시로부터 데이터의 교체를 회피하는 것에 의해 제1프로세서와 연관된 데이터 캐시의 성능을 더 개선시킬 수 있다.
이제 도 1을 참조하면, 제1처리 요소로부터 제2처리 요소로 메모리 초기화를 분배하도록 구성된 컴퓨터 시스템(10)의 일 실시예가 도시되어 있다. 컴퓨터 시스템(10)은 버스(20)에 의해 링크된 제1처리 요소(100A)와 제2처리 요소(100B)를 포함한다. 일 실시예에서, 버스(20)는 처리 요소(100A, 100B)가 메모리 서브시스템(60) 내 하나 이상의 메모리 영역(64)에 액세스할 수 있게 한다. 메모리 서브시스템(60)은 여러 프로그램(62)을 포함할 수 있으며 그 일부는 처리 요소(100B)를 사용하여 메모리를 초기화하도록 요청하거나 초기화되게 하도록 실행가능하다. 추가적으로, 도 1에서 시각적으로 별개인 부품으로 도시되어 있지만, 메모리 서브시스템(60)의 일부 또는 전부는 처리 요소(100A), 처리 요소(100B)의 회로의 일부를 형성할 수 있거나, 처리 요소(100A, 100B)를 모두 포함하는 단일 디바이스의 일부일 수 있다. 일 실시예에서, 캐시(30)는 처리 요소(100A)에 액세스가능하고, 메모리 서브시스템(60)에 저장된 데이터에 대응하는 데이터를 저장하도록 구성된다. 일 실시예에서, 메모리 액세스 제어기(75)는 처리 요소(100A, 100B), 메모리 서브시스템(60)의 임의의 조합에 연결될 수 있고(또는 이로 구현될 수 있다) 버스(20)에 연결될 수 있다. 컴퓨터 시스템(10)은 여러 실시예에서 상이하게 구성될 수 있다.
처리 요소(100A, 100B)는 임의의 유형의 프로세서(예를 들어, 중앙 처리 유닛, 산술 처리 유닛, 그래픽 처리 유닛, 디지털 신호 처리 유닛 등)에 대응할 수 있다(또는 이 내에 위치될 수 있다). 일 실시예에서, 처리 요소(100A)는 중앙 처리 유닛(또는 하나 이상의 코어 그룹)이고, 처리 요소(100B)는 상이한 유형의 처리 유닛, 예를 들어, (하나 이상의 코어를 구비할 수 있는) 그래픽 처리 유닛이다. 일부 실시예에서, 처리 요소(100A, 100B)의 하나 또는 둘 모두는 다수의 코어를 포함할 수 있다. 다른 실시예에서, 처리 요소(100A, 100B)는 동일한 칩 위에 위치된 상이한 그룹의 하나 이상의 프로세서 코어일 수 있다. 처리 요소(100A, 100B)는 일부 실시예에서, 여러 처리 요소의 클러스터 또는 그룹을 포함할 수 있다(예를 들어, 처리 요소(100A)는 2개의 쿼드 코어 프로세서의 그룹일 수 있다).
일 실시예에서, 처리 요소를 메모리 서브시스템(60)에 연결하는 버스(20)는 노쓰브리지 버스(Northbridge bus)일 수 있거나 이 기술 분야에 통상의 지식을 가진 자에게 알려진 임의의 다른 프로세서 버스 또는 프로세서 상호연결부일 수 있다. 버스(20)는 일 실시예에서 동일한 칩 위에 위치될 수 있는 프로세서 코어들(하나 이상의 프로세서 코어 그룹) 사이 상호연결부이다. 그러나, 버스(20)는 단일 버스 또는 상호 연결부로 제한될 필요는 없으며, 하나 이상의 버스, (점대점) 상호연결부, 또는 본 명세서에 기술된 구조부에 데이터를 운반하는데 적절한 다른 통신 경로 및 디바이스의 임의의 조합일 수 있다.
메모리 서브시스템(60)은 하나 이상의 메모리 디바이스를 포함한다. 여러 실시예에서, 이들 메모리 디바이스는 RAM 모듈, 매립된 메모리(예를 들어, eDRAM), 고체 저장 디바이스, 하드 드라이브와 같은 2차 저장 디바이스, 그 용어가 본 명세서에 정의된 것과 같은 임의의 다른 컴퓨터 판독가능한 매체를 포함할 수 있다. 일 실시예에서, 메모리 서브시스템(60)은 메모리 서브시스템(60)의 하나 이상의 메모리 디바이스 내에 하나 이상의 메모리 영역(64)을 포함한다. 메모리 영역(64)은 반드시 고정된 사이즈 또는 위치인 것은 아니고, 대신 임의의 시작 위치와 종료 위치(또는 어드레스)를 가지는 메모리의 하나 이상의 부분을 지칭할 수 있다. 따라서, 일 특정 실시예에서, 제1 메모리 영역은 4000KB 크기인 일련의 메모리 위치일 수 있는 반면, 제2 메모리 영역은 32KB 크기인 일련의 메모리 위치이다. 일 실시예에서, 메모리 영역(64)은 다수의 메모리 디바이스에 걸칠 수 있다(또는 심지어 여러 유형의 메모리 디바이스에 걸칠 수 있다; 예를 들어, 단일 메모리 영역은 RAM 모듈과 하드 드라이브 상의 저장 공간을 포함할 수 있다). 메모리 영역은 물리적으로 또는 논리적으로 인접할 수도 있으나 아닐 수도 있다.
메모리 서브시스템(60)과 그 메모리 영역은 처리 요소(100A)에 의해 액세스가능하다. 예를 들어, 처리 요소(100A)는 버스(20)를 통해 메모리 서브시스템(60)으로부터 데이터를 검색(그리고 이에 데이터를 저장)할 수 있다. 여러 실시예에서, 본 명세서에서 아래 설명된 바와 같이 메모리 서브시스템(60)은 처리 요소(100B)에 의해서도 액세스가능하다. 여러 실시예에서, 메모리 서브시스템(60)은 하나 이상의 프로그램(62)을 저장한다. 프로그램(들)(62)은 컴퓨터 시스템(10)에서 실행가능한 임의의 프로그램(들)일 수 있다. 따라서, 여러 실시예에서, 프로그램(62)은 JVM, 운영 시스템, API 라이브러리, JVM 또는 운영 시스템에서 실행되는 유저 프로그램 등일 수 있다. 여러 실시예에서, 프로그램(62)은 본 명세서에 더 설명된 바와 같이 처리 요소(100A, 100B)로부터 메모리 초기화를 분배하는 능력을 구비할 수 있다.
메모리 액세스 제어기(75)는 일 실시예에서 메모리 서브시스템(60)에 연결되고, 여러 실시예에서 처리 요소(100)에 의해 메모리 서브시스템(60)에의 메모리 액세스를 제어하고 관리하고 조정하고 및/또는 가능하게 하도록 구성된다. 메모리 액세스 제어기(75)는 일 실시예에서 직접 메모리 액세스(DMA: direct memory access) 제어기이고 처리 요소(100A 및/또는 100B)를 구비하는 동일한 칩 위에 위치될 수 있다. 여러 실시예에서, 메모리 액세스 제어기(75)는 처리 요소(100A)에 의해 경고된, 통지된 또는 승인된 허가가 없으면 처리 요소(100B)가 메모리 영역(64)에 액세스하는 것을 제한할 수 있고, 이 허가가 있으면 액세스 제어기(75)는 메모리 서브시스템(60)의 일부(또는 전부) 영역에 액세스를 가능하게 할 수 있다. 메모리 액세스 제어기(75)는 일 실시예에서 버스(20)를 사용(및/또는 버스에 연결)하도록 구성될 수 있다.
캐시(30)는 처리 요소(100A)에 의해 액세스가능하고 메모리 서브시스템(60)에 대응하는 데이터를 보유하도록 구성된 캐시를 포함한다. 캐시(30)는 데이터에 더 빠른 액세스를 처리 요소(100A)에 제공하기 위하여 메모리 서브시스템(60)에 저장된 데이터의 서브세트를 보유하도록 구성될 수 있다. 여러 실시예에서, 캐시(30)는 L1, L2, L3를 포함하는 계층적 캐시 시스템 또는 다른 캐시를 포함할 수 있다. 캐시(30)는 처리 요소(100A) 내에 부분적으로 또는 전체적으로 위치될 수 있거나 여러 실시예에서 처리 요소(100A) 외부에 부분적으로 또는 전체적으로 위치될 수 있다(예를 들어, 일 실시예에서 캐시(30)는 처리 요소(100A) 내부에 L1 캐시와, 처리 요소(100A) 외부에 L2 캐시를 포함한다). 주어진 처리 요소와 "연관된" 캐시는 이 처리 요소에 의해 액세스되도록 구성된다.
일부 경우에, 캐시 동작은 캐시(30)에 이전에 저장된 데이터가 다른 데이터로 대체되게(또는 교체되게) 할 수 있다. 일부 실시예에서, 처리 요소(100A)가 메모리 서브시스템(60)의 메모리 영역에 직접 액세스할 때, 캐시(30)의 일부는 액세스된 데이터를 저장하는데 사용될 수 있다. 예를 들어, 처리 요소(100A)가 메모리 영역(64)을 초기화하기 위해 메모리 서브시스템(60)에 직접 액세스하는 경우, 캐시(30)에 이미 존재하는 데이터는 이 메모리 영역에 대해 새로이 초기화된 데이터에 의해 교체될 수 있다. 캐시로부터 교체된 데이터는 액세스하는데 더 긴 시간이 소요되어 더 긴 실행시간을 초래할 수 있다. 예를 들어, 이하 C 코드를 고려해보자:
Figure pct00001
이 코드(컴파일될 때 및 실행될 때)는 캐시되는 변수 "C"에 대한 데이터 값을 제일 먼저 초래할 수 있다. malloc()에의 호출은 8192바이트의 메모리를 초기화하게 하여 캐시로부터 "C"에 대한 값을 교체하게 할 수 있다. ("C"의 값을 변수 E에 할당하는) 그 다음 명령이 실행될 때, 캐시는 "미스(miss)"를 나타낼 수 있으며 이에 따라 더 낮은 레벨의 캐시 또는 더 먼 메모리로부터 변수 C의 값을 검색해야 해서 지연을 초래할 수 있다. C의 값이 제1 장소에 있는 캐시로부터 교체되지 않았다면, 이 지연은 회피될 수 있어서 성능을 가속시킬 수 있었을 것이다. 캐시(30)에 대한 데이터 교체/대체는 여러 실시예에서 최소 최근 사용된(LRU: least recently used) 대체를 포함하는 이 기술 분야에 통상의 지식을 가진 자에게 발생할 수 있는 임의의 개수의 하드웨어 또는 소프트웨어 구조를 포함하는 대체 정책에 의해 제어될 수 있다.
이제 도 2a를 참조하면, 초기화 전 메모리 영역(64)의 일례가 도시되어 있다. 도시된 바와 같이, 메모리 영역(64)은 복수의 메모리 위치(위치(212 내지 216)를 포함하는)를 포함하며, 각 메모리 위치는 여러 실시예에서 개별적으로 어드레스가능하고 주어진 데이터 값을 저장하도록 구성될 수 있다. 도시된 바와 같이, 메모리 위치(212)는 데이터(205)를 저장한다. 메모리 위치(212)에 있는 데이터(205)는 일부 실시예에서 컴퓨터 시스템(10)에 의해 실행되는 프로그램에 의해 이전에 기록되었을 수 있으며 또는 단순히 임의적(랜덤)일 수 있다.
도 2b에는, 초기화 후 메모리 영역(64)의 일례가 도시되어 있다. 이 예에서, 메모리 위치(212)에 있는 데이터(205)는 제로(0) 값을 가지는 비트 시퀀스로 이를 초기화하는 것에 의해 "제로 아웃"되었다. 본 명세서에 더 설명되는 바와 같이, 이 초기화는 특정 실시예에서 처리 요소(100b)에 의해 수행될 수 있다. "제로 아웃"은 단지 하나의 초기화 형태이며, 다른 초기화는 테스트 패턴(예를 들어, 모두 -1에 대응하는 값, 16진수 값(hex value) 0xDEADBEEF 등)으로 데이터를 기록하는 것을 포함할 수 있다. 초기화는 일부 실시예에서 자바 프로그래밍 언어 사양과 같은 외부 사양에 따라 일부 실시예에서 수행될 수 있다. 초기화는 전술된 데이터 유형과 값으로 제한되는 것은 아니고, 여러 실시예에서 하나 이상의 메모리 영역을 충진하는 임의의 데이터를 포함할 수 있다.
일부 실시예에서, 메모리 초기화는 (아마도 초기화 요청에 서비스를 제공하는 제어 프로그램의 재량으로) 특정 최소 사이즈의 메모리 영역을 초기화하는 것으로 제한될 수 있다. 예를 들어, 메모리 초기화는 1페이지(컴퓨터 시스템(10)의 운영 시스템에 의해 한정된 것, 예를 들어 8KB의 1페이지) 또는 캐시 라인의 폭 또는 주어진 고정된 사이즈(1024바이트와 같은) 등보다 더 작지 않은 메모리의 초기화 영역으로 제한될 수 있다. 이들 실시예에서, 메모리 초기화를 위한 최소 사이즈 임계값은 초기화를 수행하는데 제1처리 요소가 아니라 제2처리 요소를 사용하는 것이 여러 실시예에서 특정 피할 수 없는 오버헤드 비용을 수반할 수 있을 때 제2처리 요소를 사용하는 것에 의해 작은 메모리 영역을 초기화하는데 수반된 가능한 성능 페널티를 회피하도록 규정될 수 있다.
이제 도 3a를 참조하면, 메모리 서브시스템(60) 내에 유저 프로그램(304)과 제어 프로그램(310)을 구비하는 일 실시예를 도시한 블록도가 도시되어 있다. 일 실시예에서, 프로그램(304, 310)은 도 1에 대해 전술된 바와 같이 각 프로그램(62)이다. 여러 실시예에서, 유저 프로그램(304)은 메모리에 직접 액세스하고 메모리 영역(들)을 초기화하는 특권을 구비하지 않을 수 있는(또는 프로그래밍 및/또는 설계되지 않을 수 있는) 반면, 제어 프로그램(310)은 (예를 들어, 초기화 루틴(313)을 사용하여) 메모리 영역을 초기화하도록 실행가능하다. 예를 들어, 프로그램(304)은 자바 처리 및/또는 유저 애플리케이션일 수 있는 반면, 프로그램(310)은 JVM 또는 운영 시스템일 수 있다(아래 도 3b 내지 도 3c 설명 참조). 여러 실시예에서, 유저 프로그램(304)과 제어 프로그램(310)은 서브시스템(60)에 하나 이상의 메모리 디바이스 내에 저장된다(예를 들어, 제어 프로그램(310)은 하드 드라이브 상에 저장될 수 있고, 또 실행 동안 RAM 모듈에 (전체적으로 또는 부분적으로) 로딩될 수 있다).
제어 프로그램(310)은 여러 실시예에서 처리 요소(100A) 및/또는 처리 요소(100B)에 의해 실행가능한 명령을 포함하며, 즉 주어진 제어 프로그램(310)은 처리 요소(100A), 처리 요소(100B), 처리 요소(100A, 100B)의 일부 조합에 의해 실행가능한 명령을 포함할 수 있다. 예를 들어, 일 실시예에서, 제어 프로그램(310)은 처리 요소(100A, 100B)에 의해 실행가능한 단일 명령 세트 아키텍처(ISA)의 명령을 포함하는 반면, 다른 실시예에서, 제어 프로그램(310)은 처리 요소(100A)에 의해 실행가능한 제1 ISA의 명령을 포함하고 또한 처리 요소(100B)에 의해 실행가능한 제2 상이한 ISA의 명령을 포함한다. 메모리 초기화 루틴(313)은 일부 실시예에서 제어 프로그램(310)의 다른 부분과는 상이한 ISA의 명령을 포함할 수 있다.
일 실시예에서, 제어 프로그램(310)은 유저 프로그램(304)으로부터 메모리 요청(305)을 수신하도록 실행가능한 초기화 루틴(313)을 포함하는 프로그램 명령 세트를 포함한다. (다른 실시예에서, 제어 프로그램(310)은 내부적으로 메모리 요청(305)을 생성한다.) 메모리 초기화 루틴(313)은 (처리 요소(100A)가 아니라) 처리 요소(100B)로 하여금 초기화 요청(305)에 의해 특정될 수 있는 하나 이상의 메모리 영역(64)을 초기화하게 하도록 실행가능하다. 메모리 초기화 루틴(313)은 여러 실시예에서 OPENCL, JAVA, C++ 등과 같은 프로그램 언어에 기록된 코드에 대응하는 명령을 포함할 수 있다. 루틴(313)에 대응하는 코드는 여러 실시예에서 초기화 루틴(313)을 수행하기 위하여 해석 및/또는 컴파일될 수 있다.
OPENCL 코드가 처리 요소(100B)에 의해 실행가능한 명령을 생성하는데 어떻게 사용될 수 있는지에 대한 일례는 본 명세서에 참조 문헌으로 병합된 미국 출원 제12/785,052호(출원일: 2010년 5월 21일, 발명의 명칭: "DISTRIBUTING WORKLOADS IN A COMPUTING PLATFORM")에서 찾아볼 수 있다.
메모리 초기화 루틴(313)은 여러 실시예에서 처리 요소(100B)로 하여금 메모리 영역(64)을 초기화하게 하도록 실행될 수 있다. 일 실시예에서, 초기화 루틴(313)의 실행은 유저 프로그램(304)에 의해 생성될 수 있는 초기화 요청(305)에 응답하여 시작한다. 초기화 요청(305)은 여러 실시예에서 여러 형태를 취할 수 있고 초기화될 하나 이상의 메모리 영역(64)을 식별하거나 결정하는데 사용가능한 정보를 포함한다. 일 실시예에서, 요청(305)은 데이터 객체(object)의 명칭을 특정한다. 일 실시예에서, 초기화 요청(305)은 초기화될 메모리 공간의 메모리 베이스 어드레스와 오프셋 값(길이)을 포함한다. 다른 실시예에서, 초기화 요청(305)은 초기화될 메모리 베이스 "시작" 어드레스와 메모리 상한(ceiling) "종료" 어드레스를 포함한다. 그러나, 메모리 요청(305)은 이것으로 제한되는 것은 아니며 초기화될 하나 이상의 메모리 영역(64)을 결정하는데 사용가능한 임의의 정보를 포함할 수 있다.
실행 동안, 제어 프로그램(310)은 처리 요소(100A) 및/또는 처리 요소(100B)에 의해 실행되지만, 적어도 일 실시예에서, 초기화 루틴(313)의 실행은 초기화 요청(307)에 의하여 처리 요소(100B)에 의해서만 수행된다. 처리 요소(100B)에 의한 루틴(313)의 실행은 여러 실시예에서 상이한 방식으로 진행될 수 있다. 일 실시예에서, 제어 프로그램(310)의 부분은 처리 요소(100B)에 의한 루틴(313)의 실행을 "설정(set up)"하도록 처리 요소(100A)에 의해 실행가능할 수 있다. 처리 요소(100A)는 루틴(313)에의 참조를 포함하는 제어 메시지, 통지, 또는 명령을 처리 요소(100B)에 송신할 수 있다. 이러한 제어 메시지를 수신할 때, 처리 요소(100B)는 (예를 들어, 루틴(313)의 명령이 저장되어 있는 메모리 및/또는 캐시에 직접 액세스하는 것에 의해) 루틴(313)을 실행하도록 진행할 수 있다. 다른 실시예에서, 초기화 루틴(313)을 위한 명령은 단순히 버스(예를 들어 버스(20))에 놓여질 수 있으며 이 시간에 처리 요소(100B)는 이 명령을 인식하고 실행할 수 있다. 일 실시예에서, 처리 요소(100A)는 메모리 액세스 제어기(75)로 하여금 처리 요소(100B)가 메모리 영역(64)에 직접 액세스할 수 있도록 하는 구성 동작을 포함하는, 처리 요소(100B)를 위한 하나 이상의 구성 동작을 수행하는 (처리 요소(100A)의 ISA의) 명령을 실행할 수 있다. 여러 다른 기술이 이 기술 분야에서 통상의 지식을 가진 자에게 일어날 수 있는 바와 같이 처리 요소(100B)로 하여금 초기화 루틴(313)을 실행하게 하는데 더 사용될 수 있다.
초기 루틴(313)의 명령은 일 실시예에서 하나 이상의 메모리 영역이 초기화되게 하기 위하여 처리 요소(100B)에 의해 실행가능한 명령은 물론 초기화될 하나 이상의 메모리 영역(64)에의 하나 이상의 참조를 포함한다. 초기화된 메모리 영역을 충진하는 데이터는 전술된 바와 같이 모두 제로, 모두 -1, 패턴화된 데이터, 또는 임의의 다른 데이터일 수 있다. 일부 실시예에서, 초기화 루틴(313)의 일부(또는 전부)는 제어 프로그램(310)에 의해 동적으로 생성될 수 있다. 동적 생성은 일 실시예에서 메모리 요청(305)에 있는 정보에 응답하여 일어날 수 있다. 예를 들어, 메모리 요청(305)이 RAM의 8MB 부분이 초기화될 것을 특정하면, 초기화 루틴(313)의 적어도 일부는 이 8MB 값을 반영하도록 동적으로 수정될 수 있다.
초기화 루틴(313)은 여러 소프트웨어 프로그램의 일부로서 수행될 수 있고, 예를 들어, 일 실시예에서 루틴(313)은 라이브러리 루틴의 일부로 수행될 수 있고, 요청(305)은 애플리케이션 프로그래밍 인터페이스(API)의 사양에 따라 이루어진다. 다른 실시예에서, 루틴(313)은 (도 3c에 대하여 아래에서 더 설명되는 바와 같이) 자바 가비지 수집 과정(JAVA garbage collection process)의 일부로서 수행될 수 있다. 그러나, 초기화 루틴(313)은 전술된 프로그램의 유형으로 제한되는 것은 아니다.
이제 도 3b를 참조하면, 컴퓨터 시스템(10)의 운영 시스템(320)이 제1처리 요소로부터 제2처리 요소로 메모리 초기화를 분배하도록 구성된 일 실시예를 도시한 블록도가 도시되어 있다. 일 실시예에서, 운영 시스템(320)은 제어 프로그램(310)에 대하여 전술된 동작 중 어느 것 및 전부를 수행하도록 전체적으로 또는 부분적으로 동작할 수 있다. 여러 실시예에서, 운영 시스템(320)은 하나 이상의 메모리 영역(64)을 초기화하기 위해 하나 이상의 요청(305)을 수신, 생성 및/또는 처리할 수 있다. 일 실시예에서, 요청(305)은 운영 시스템(320) 내 라이브러리(또는 모듈)에 의해 수신될 수 있고, 이는 프로그램(62), 프로그램(304), 또는 심지어 운영 시스템(320) 그 자체와 같은 프로그램에 의해 호출될 수 있다. 이들 라이브러리는 여러 실시예에서 메모리 서브시스템(60)에서 하나 이상의 파일로 저장될 수 있고, C 프로그래밍 언어 함수 malloc() 및 init()에 대응하는 322 및 324와 같은 모듈을 위한 API 인터페이스를 포함할 수 있다. 예를 들어, 컴퓨터 시스템(10)에서 실행되는 프로그램(62)은 malloc() 루틴을 호출하는 것에 의해 이에 (더 많은) 메모리를 할당하도록 요청할 수 있다. 운영 시스템(320)은 일 실시예에서 (초기화 루틴(313)과 같은) 적절한 명령을 로딩하고 및/또는 동적으로 생성하고 이어서 로딩되거나 생성된 명령이 제2처리 요소(100B)에 의해 실행되게 하는 것에 의해 이 요청에 서비스를 제공할 수 있다. 이러한 초기화는 예를 들어 프로그램마다 새로이 할당된 메모리 블록에서 데이터 누락을 회피하기 위하여 보안 이유 때문에 바람직할 수 있다. init 모듈(324)은 일 실시예에서 메모리에 다른 프로세스를 로딩하는데 사용될 수 있고 이에 따라 메모리(305)를 위한 요청을 내부적으로 생성할 수 있다(이어서 이는 초기화 요청(307)이 처리 요소(100B)로 송신되게 할 수 있다).
이제 도 3c를 참조하면, 메모리 초기화가 제1처리 요소로부터 제2처리 요소로 분배되게 하도록 자바 가상 기계(JVM)(330)가 구성된 일 실시예를 도시한 블록도가 도시되어 있다. JVM(330)은 제어 프로그램(310)에 대하여 전술된 동작 중 어느 것 및 전부를 수행하도록 전체적으로 또는 부분적으로 동작될 수 있고, 메모리 서브시스템(60)(미도시)에 저장될 수 있다. 일 실시예에서, JVM(330)은 메모리 서브시스템(60)에 저장된 하나 이상의 자바 프로그램의 자바 바이트코드를 실행하도록 구성된다(따라서, 제어 프로그램(310)은 다른 프로그램을 실행할 수도 있고 이에 따라 이런 점에서 자바 프로그램으로 제한되는 것은 아니다.) 자바 바이트코드의 실행은 임의의 개수의 자바 객체(331)가 인스턴스화되고 및/또는 파괴되게 할 수 있다. 자바 객체에 대한 디폴트 초기 값은 JVM(330)의 여러 실시예에서 모두 제로로 설정될 수 있다. 이러한 초기화는 여러 실시예에서 (일부 실시예에서 초기화 루틴(313)에 전체적으로 또는 부분적으로 대응할 수 있는) 가비지 수집 과정(332) 및/또는 구성기 루틴(334)에 의해 수행될 수 있다. 일 실시예에서 가비지 수집 과정(332)의 마지막 단계로서, 하나 이상의 메모리 영역 전부는 메모리 영역을 제로 아웃시키는 것에 의해 차후 객체 할당을 하는데 이용가능하게 만들어질 수 있다(이에 따라 그 다음 가비지 수집이 추가적인 초기화된 메모리를 초래할 때까지 이미 초기화된 메모리의 저장을 보장한다). 또는 제로화는 여러 실시예에서 새로운 객체가 자바 유저 프로그램에 의해 할당될 때 한번에 하나씩 수행될 수 있다.
일 실시예에서, 가비지 수집 과정(332)은 어떤 자바 객체가 더 이상 사용되지 않는지 그리고 이 미사용된 객체에 대해 메모리를 할당 해제할 것인지를 결정한다. 이 메모리를 할당 해제하는 처리에서, JVM(330)은 제로 값을 포함하도록 하나 이상의 대응하는 메모리 영역을 초기화할 수 있다. JVM(330)은 또한 하나 이상의 구성기 루틴(들)(334)이 실행되게 할 수 있다. 구성기 루틴(들)(334)은 디폴트 루틴일 수 있고 JVM(330)에서 실행되는 하나 이상의 자바 프로그램에 자유로운 메모리 할당이 이루어질 것을 요구할 수 있으며, 이 자바 프로그램의 실행 동안 (여러 실시예에서 유저 프로그램(304)에 대응할 수 있는) 하나 이상의 메모리 영역(64)을 초기화할 수 있다. JVM(330)에 의해 메모리 영역의 초기화를 최적화하는 여러 기술과 변경이 이 기술 분야에 통상의 지식을 가진 자에게 일어날 수 있다. 예를 들어, JVM(330)은 더 큰 양의 메모리(예를 들어, 1MB)를 "제로"화하고 (클래스가 인스턴스화될 때마다 메모리를 초기화하는 것이 아니라) 새로이 생성된 자바 객체의 요구를 만족시키려는 필요에 따라 메모리를 분배하도록 구성될 수 있다.
여러 실시예에서, 운영 시스템(320)과 JVM(330)과는 다른 다수의 프로그램은 컴퓨터 시스템(10)으로 하여금 처리 요소(100A)로부터 처리 요소(100B)로 메모리 영역을 초기화하는 작업을 분배하게 할 수 있다. 컴퓨터 시스템(10)의 처리 요소에 의해 컴파일되고 실행(또는 해석)되도록 설계된 상이한 프로그래밍 언어는 메모리 초기화 분배(또는 오프로드) 능력을 이용하도록 설계된 API 루틴을 포함하는 라이브러리를 구비할 수 있다. 나아가, 컴파일러는 하이 레벨 소스 코드로부터 실행가능한 코드를 생성할 때 본 명세서에 설명된 기술을 사용하여 메모리 초기화를 분배하도록 설계될 수 있다. 컴파일러는 일 실시예에서 제1처리 요소로부터 제2처리 요소로 하나 이상의 메모리 충진 동작을 분배하는 것을 프로그램이 언제 수행하는 것이 유리한지를 결정하기 위해 학습법(heuristics)을 사용할 수 있다(예를 들어, 이 학습법에 대한 기초를 형성하는 요인은 메모리 영역의 사이즈(이 영역이 충분히 클 때에는 오프로드/분배할 수 있다), 얼마나 자주 그리고 얼마나 빨리 메모리 영역이 초기화 이후에 액세스되는지, 수행되는 초기화 이후 주어진 기간에 액세스되는 초기화 영역의 바이트의 수, 주어진 메모리 초기화를 오프로드하지 않고 캐시의 교체 결과 예상되는 캐시 미스의 양 등). 일부 실시예에서, 본 명세서에서 설명된 메모리 초기화 기술은 일부 경우에 소스 코드 프로그래머에 투명하며, 예를 들어, 소스 코드 프로그래머는 호출이 제1처리 요소로부터 제2처리 요소로 분배될 메모리를 초기화할 수 있는 것을 처리하는 라이브러리 루틴을 전혀 알지 못하고도 프로그래밍 언어의 사양에 따라 malloc()로의 C 프로그래밍 언어의 호출을 프로그래밍할 수 있다.
이제 도 4를 참조하면, 제1처리 요소에 의해 하나 이상의 메모리 영역의 초기화를 제2처리 요소로 오프로드하기 위한 방법(400)의 일 실시예의 흐름도가 도시되어 있다. 방법(400)은 컴퓨터 시스템(10) 또는 임의의 다른 적절한 컴퓨터 시스템 또는 아래에 설명되는 시스템(500)과 같은 컴퓨팅 디바이스에 의해 전체적으로 또는 부분적으로 수행될 수 있다. 단계(410)에서, 초기화될 하나 이상의 메모리 영역의 표시가 수신된다. 이 단계는 일 실시예에서, 예를 들어 프로그램(304)으로부터 메모리에 대한 요청을 수신하기 위해 제어 프로그램(310)을 실행하는 처리 요소(100A)에 의해 수행될 수 있다. 일 실시예에서, 단계(410)는 JVM(330)의 처리(332)와 같은 가비지 수집 과정에 의해 생성된 요청을 수신하는 것을 포함한다.
단계(420)에서, 단계(410)의 표시를 수신하는 것에 응답하여, 컴퓨터 시스템(10)은 처리 요소(100A)로부터 처리 요소(100B)로 요청된 메모리 영역의 초기화를 오프로드되게 한다. 일 실시예에서, 단계(420)는 처리 요소(100A)에 의해 수행되고 요청된 메모리 영역의 초기화를 처리 요소(100B)로 오프로드되게 한다. 단계(420)는 여러 실시예에서 처리 요소(100A)가 구성 동작을 수행하거나 또는 처리 요소(100B)로 하여금 메모리 영역(64)을 초기화(예를 들어, 초기화 루틴(313)을 실행하도록 처리 요소(100B)를 설정)하게 하는 방식으로 처리 요소(100B)와 상호작용하는 것을 더 포함할 수 있다.
단계(430)에서, 단계(410)의 초기화 요청이 오프로프된(즉, 분배된) 처리 요소는 표시된 하나 이상의 메모리 영역을 초기화한다. 일 실시예에서, 이 단계는 요청된 메모리 영역을 초기화하기 위해 (제어기(75)를 통해) 직접 메모리 액세스를 사용하여 처리 요소(100B)에 의해 수행된다. 따라서, 단계(430)의 여러 실시예에서 초기화는 처리 요소(100A)가 초기화될 메모리 영역에 대한 값을 직접 변경함이 없이 수행된다. 특정 실시예에서, 단계(430)는 제어 프로그램(310)의 하나 이상의 미리 결정된 규칙, 루틴 등에 따라 수행된다. 이들 규칙은 학습법(예를 들어 전술된 학습법)을 포함할 수 있다.
단계(440)에서, 컴퓨터 시스템(10)의 캐시의 하나 이상의 부분이 무효화될 수 있다. 다수의 처리 요소를 가지는 시스템(예를 들어, 컴퓨터 시스템(10))에서, 메모리 영역(64)에 있는 데이터의 복사본은 일부 실시예에서 메모리 계층(캐시(30)를 포함하는)에 저장될 수 있다. 메모리 영역(64)이 방법(400)에 따라 초기화되는 경우, 일부 경우에 및 일부 실시예에서 컴퓨터 시스템(10)의 캐시(예를 들어, 캐시(30))에 남아있는 초기화된 메모리 영역(64)에 대응하는 데이터의 진부한 복사본이 없는 것을 보장하기 위하여 캐시 무효 과정을 수행하는 것이 필요할 수 있다. 단계(440)는 여러 실시예에서 처리 요소(100A), 처리 요소(100B) 및/또는 메모리 액세스 제어기(75)에 의해 여러 방식으로 초기화될 수 있고, 이 기술 분야에 통상의 지식을 가진 자에게 알려진 여러 기술을 사용하여 수행될 수 있다.
이제 도 5를 참조하면, 전술된 여러 실시예를 구현할 수 있는 예시적인 컴퓨터 시스템(500)을 도시한 블록도가 도시되어 있다. 컴퓨터 시스템(500)의 성분은 전체적으로 또는 부분적으로 컴퓨터 시스템(10)의 성분과 동일하거나 유사할 수 있다. 예를 들어, 도시된 컴퓨터 시스템(500)은 메모리 서브시스템(60), 처리 요소(100A, 100B), 캐시(30) 및 메모리 액세스 제어기(75)를 포함한다. 컴퓨터 시스템(500)은 서버 시스템, 퍼스널 컴퓨터 시스템, 데스크톱 컴퓨터, 랩탑 또는 노트북 컴퓨터, 메인프레임 컴퓨터 시스템, 핸드헬드 컴퓨터, 워크스테이션, 네트워크 컴퓨터, 모바일 폰, 페이저(pager) 또는 퍼스널 데이터 어시스턴트(PDA: personal data assistant)와 같은 가전 디바이스를 포함하나 이로 제한되지 않는 여러 유형의 디바이스 중 어느 것일 수 있다. 컴퓨터 시스템(500)은 또한 저장 디바이스, 스위치, 모뎀, 라우터 등과 같은 임의의 유형의 네트워크 연결된 주변 디바이스일 수 있다. 단일 컴퓨터 시스템(500)이 편의를 위해 도 5에 도시되어 있으나, 시스템(500)은 함께 동작하는 2개 이상의 컴퓨터 시스템으로 구현될 수도 있다.
컴퓨터 시스템(500)의 일 실시예에서, 메모리 서브시스템(60)은 2차 저장 디바이스(455) 및 RAM 모듈(444, 446)을 포함한다. 일 실시예에서, 2차 저장 디바이스(455)는 컴퓨터 시스템으로 하여금 컴퓨터 시스템의 메모리에 있는 초기화될 메모리 영역의 표시를 수신하게 하고 이 표시를 수신하는 것에 응답하여 컴퓨팅 디바이스의 제2처리 요소(100B)에 의해 처리되는 메모리 영역의 초기화를 수행하도록 제1처리 요소(100A)에 의해 실행가능한 프로그램 명령을 저장한다. 처리 요소(100A, 100B)는 특정 실시예에서 이종(heterogeneous)(즉, 상이한 유형)이고, 예를 들어, 처리 요소(100A)는 중앙 처리 유닛(CPU)이고 처리 요소(100B)는 그래픽 처리 유닛(GPU)이다. 또한, 일 실시예에서, 캐시(30)는 처리 요소(100A)가 메모리에 액세스한 것에 응답하여 메모리 서브시스템(60)에 있는 하나 이상의 메모리 디바이스의 내용을 저장하도록 구성될 수 있고, 여기서 메모리 영역을 초기화하는 것은 캐시로 하여금 이 메모리 영역의 초기화 후 내용을 저장하게 하는 것을 포함하지 않는다(즉, 캐시(30)는 초기화된 메모리 영역에 대응하는 새로이 초기화된 데이터에 의해 캐시(30) 내에 다른 데이터의 교체를 회피할 수 있다). 메모리 액세스 제어기(75)는 여러 실시예에서 처리 요소(100B)가 메모리 서브시스템(60)에 있는 하나 이상의 메모리 디바이스에 직접 액세스를 제공하도록 구성될 수 있고, 메모리 영역을 초기화하는 것은 처리 요소(100B)가 메모리 액세스 제어기(75)를 사용하여 메모리 영역에 액세스하는 것을 포함하며, 초기화하는 것은 처리 요소(100A)가 메모리 영역에 액세스(즉, 변경)하는 것을 포함하지 않는다.
추가적으로, 일 실시예에서, I/O 디바이스(444)는 버스(20)를 통해 메모리 서브시스템(60)에 연결된다. 여러 실시예에서, I/O 디바이스는 다른 저장 디바이스(하드 드라이브, 광학 드라이브, 이동식 플래시 드라이브, 저장 어레이, SAN, 또는 이와 연관된 제어기), 네트워크 인터페이스 디바이스(예를 들어, LAN 또는 WAN), 또는 다른 디바이스(예를 들어, 그래픽, 유저 인터페이스 디바이스 등)를 포함할 수 있다. 일 실시예에서, 컴퓨터 시스템(500)은 네트워크 인터페이스 디바이스를 통해 네트워크에 연결된다. I/O 디바이스는 여러 실시예에 따라 다른 디바이스와 그 인터페이스에 연결되고 이와 통신하도록 구성될 수 있는 여러 유형의 인터페이스를 포함할 수 있다. 일 실시예에서, I/O 인터페이스는 전면측(front-side)으로부터 하나 이상의 배면측(back-side) 버스로 브리지 칩(예를 들어, 사우쓰브리지(Southbridge))이다.
메모리 서브시스템(60)은 여러 실시예에서 처리 요소(100A 및/또는 100B)에 의해 사용가능한 메모리를 포함한다. 서브시스템(60)에서 메모리는 하드 디스크 저장매체, 플로피 디스크 저장매체, 이동식 디스크 저장매체, 플래시 메모리, 랜덤 액세스 메모리(RAM-SRAM, EDO RAM, SDRAM, DDR SDRAM, RAMBUS RAM 등), 판독 전용 메모리(PROM, EEPROM 등) 등과 같은 상이한 물리적 메모리 매체를 사용하여 구현될 수 있다. 컴퓨터 시스템(500)에서 메모리는 RAM(444, 446)과 2차 저장매체(455)와 같은 저장매체로 제한되는 것은 아니며; 오히려 컴퓨터 시스템(500)은 미도시된 캐시 메모리와 I/O 디바이스(444) 상의 2차 저장매체(예를 들어, 하드 드라이브, 저장 어레이 등)와 같은 다른 형태의 저장매체를 더 포함할 수 있다. 일부 실시예에서, 이들 다른 형태의 저장매체는 처리 요소(100A 및/또는 100B)에 의해 실행가능한 프로그램 명령을 더 저장할 수 있다.
전술된 기술과 방법은 임의의 적절한 컴퓨터 판독가능한 매체에 저장된 컴퓨터 판독가능한 명령으로 구현될 수 있다. 이들 명령은 컴퓨터 시스템 및/또는 컴퓨팅 디바이스가 전술된 방식으로 동작하게 하는 소프트웨어일 수 있고, 메모리 서브시스템(60) 내 컴퓨터 판독가능한 매체에 (또는 메모리 서브시스템(60) 내에 있지 않는 다른 컴퓨터 판독가능한 매체에) 저장될 수 있다. 라이브러리 루틴, 가비지 수집 과정, 다른 소프트웨어 루틴 및 객체, 및 소프트웨어(62, 304, 310, 313, 320, 322, 324, 330, 331, 332, 334) 중 임의의 것이나 전부가 이 컴퓨터 판독가능한 매체에 저장될 수 있다. (문단 23에서 전술된 바와 같이, 이 매체는 비일시적인 매체일 수 있다.)
또한, 전술된 기술과 방법은 일부 실시예에서 하드웨어로 구현될 수 있다. 예를 들어, 일 실시예는 제2처리 요소에 의해 메모리 디바이스의 메모리 영역의 초기화를 처리하도록 구성된 메모리 초기화 회로를 포함하는 처리 요소이며, 여기서 초기화하는 것은 메모리 영역이 초기화되는 표시에 응답하여 수행된다. 하드웨어 실시예는 (예를 들어, 방법(400)과 같은) 전술된 알고리즘과 기술을 구현하도록 논리회로를 사용할 수 있다.
하드웨어 실시예는 하드웨어 생성 명령을 사용하여 생성될 수 있다. 예를 들어, 하드웨어 생성 명령은 Verilog 또는 VHDL과 같은 하이 레벨 설계 언어(design language)(HDL)의 하드웨어 기능의 동작 레벨 또는 RTL(register-transfer level) 설명을 기술하는 하나 이상의 데이터 구조를 개설할 수 있다. 이 설명은 합성 도구에 의해 판독될 수 있고 이 합성 도구는 네트리스트를 생성하기 위해 이 설명을 합성할 수 있다. 이 네트리스트는 메모리 초기화 분배/오프로드를 구현하도록 구성된 처리 요소(100A 및/또는 100B)의 기능을 나타내는 (예를 들어, 합성 라이브러리에 한정된) 게이트의 세트를 포함할 수 있다. 이 네트리스트는 마스크에 적용되는 기하학적 형상을 설명하는 데이터 세트를 생성하도록 배치되고 라우팅될 수 있다. 이 마스크는 하나 이상의 처리 요소(100A 및/또는 100B)에 대응하는 반도체 회로 또는 회로들을 생성하도록 여러 반도체 제조 단계에서 사용될 수 있다. 대안적으로, 데이터베이스는 원하는 대로 네트리스트(합성 라이브러리를 가지거나 없는) 또는 데이터 세트일 수 있다. 따라서, 하드웨어 생성 명령은 전술된 방법과 기술을 구현하는 프로세서 및/또는 처리 요소로 하여금 제조 기술 분야에서 통상의 지식을 가진 자에게 알려진 기술에 따라 생성되거나 형성될 수 있도록 실행될 수 있다. 추가적으로, 이러한 하드웨어 생성 명령은 (메모리 서브시스템(60)이나 다른 컴퓨터 판독가능한 매체 내일 수 있는) 임의의 적절한 컴퓨터 판독가능한 매체에 저장될 수 있다.
전술된 바와 같은 컴퓨터 판독가능한 저장 매체는 일부 실시예에서 프로그램에 의해 판독되는 명령을 저장하는데 사용되고 처리 요소(100A 및/또는 100B)를 포함하는 하드웨어를 제조하는데 직접 또는 간접 사용될 수 있다. 예를 들어, 이 명령은 Verilog 또는 VHDL과 같은 하이 레벨 설계 언어(design language)(HDL)의 하드웨어 기능의 동작 레벨 또는 RTL(register-transfer level) 설명을 기술하는 하나 이상의 데이터 구조를 개설할 수 있다. 이 설명은 합성 도구에 의해 판독될 수 있고 이 합성 도구는 네트리스트를 생성하기 위해 이 설명을 합성할 수 있다. 이 네트리스트는 처리 요소(100)의 기능, 메모리 초기화 유닛 및/또는 메모리 초기화 회로를 나타내는 (예를 들어, 합성 라이브러리에 한정된) 게이트의 세트를 포함할 수 있다. 이 네트리스트는 마스크에 적용되는 기하학적 형상을 설명하는 데이터 세트를 생성하도록 배치되고 라우팅될 수 있다. 이 마스크는 하드웨어 실시예에 대응하는 반도체 회로 또는 회로들을 생성하도록 여러 반도체 제조 단계에서 사용될 수 있다. 대안적으로, 데이터베이스는 원하는 대로 네트리스트(합성 라이브러리를 가지거나 없는) 또는 데이터 세트일 수 있다. 일 실시예는 데이터 구조에 의해 설명된 회로를 포함하는 집적 회로를 제조하도록 처리의 일부를 수행하도록 컴퓨터 시스템에서 실행가능한 프로그램에 의해 사용가능한 데이터 구조를 포함하는 (비일시적인) 컴퓨터 판독가능한 저장 매체이며, 여기서 데이터 구조에서 설명된 회로는 컴퓨팅 디바이스의 제1처리 요소가 아니라 컴퓨팅 디바이스의 제2처리 요소에 의해 메모리 디바이스의 메모리 영역의 초기화를 처리하도록 구성된 메모리 초기화 유닛을 포함하며, 상기 초기화하는 것은 메모리 영역이 초기화되는 표시에 응답하여 수행된다.
* * *
특정 실시예가 전술되었으나, 이들 실시예는 단 하나의 실시예만이 특정 특징에 대하여 설명되어 있는 경우에도 본 개시 내용의 범위를 제한하려는 것이 전혀 아니다. 본 개시 내용에 제공된 특징의 예는 달리 언급되지 않는 한 제한하는 것이 아니라 예시하는 것으로 의도된 것이다. 상기 설명은 본 개시 내용의 이익을 가지는 이 기술 분야에 통상의 지식을 가진 자에게 명백한 바와 같이 이러한 대안, 변형, 및 균등물을 포함하는 것으로 의도된다.
본 개시 내용의 범위는 본 명세서에 (명시적으로 또는 암시적으로) 개시된 어느 특징 또는 특징의 조합 또는 본 명세서에서 해결된 문제들 중 어느 것이나 전부를 완화하는 것이든 아니든 간에 그 임의의 일반화를 포함한다. 따라서, 새로운 청구범위는 본 출원(또는 그 우선권을 주장하는 출원)의 출원 경과 과정 동안 특징들의 임의의 조합으로 재구성될 수 있다. 특히 첨부된 청구범위에서 종속항에 있는 특징은 첨부된 청구범위에 나열된 특정 조합으로만이 아니라 임의의 적절한 방식으로 조합될 수 있다.

Claims (21)

  1. 비일시적인(non-transitory) 컴퓨터 판독가능한 매체로서, 초기화될 컴퓨팅 디바이스의 메모리 영역의 표시에 응답하여, 상기 컴퓨팅 디바이스의 제2처리 요소에 의해 처리되는 상기 메모리 영역의 초기화 동작을 포함하는 동작을 수행하도록 상기 컴퓨팅 디바이스의 적어도 제1처리 요소에 의해 실행가능한 프로그램 명령을 저장한 것인 비일시적인 컴퓨터 판독가능한 매체.
  2. 제1항에 있어서, 상기 메모리 영역의 표시는 상기 제1처리 요소에 의해 실행되는 제어 프로그램에 의해 제1프로그램으로부터 수신되는 것인 비일시적인 컴퓨터 판독가능한 매체.
  3. 제2항에 있어서, 상기 제어 프로그램은 상기 제1프로그램을 실행하는 것인 비일시적인 컴퓨터 판독가능한 매체.
  4. 제2항에 있어서, 상기 표시는 상기 제어 프로그램으로 동작가능한 하나 이상의 데이터 객체에 대응하는 메모리의 하나 이상의 메모리 영역을 특정하고,
    상기 동작은 상기 하나 이상의 메모리 영역의 모든 내용을 충진(fill)하는 것을 더 포함하는 것인 비일시적인 컴퓨터 판독가능한 매체.
  5. 제4항에 있어서, 상기 동작은,
    상기 제어 프로그램이 가비지 수집 과정의 일부로서 초기화될 메모리 영역의 복수의 표시를 생성하는 동작; 및
    상기 제2처리 요소에 의해 상기 복수의 메모리 영역의 초기화를 처리하게 하는 동작을 더 포함하고, 상기 초기화는 상기 복수의 메모리 영역의 모든 내용을 프로그래밍 언어 사양에 의해 특정된 디폴트 내용으로 충진하는 것을 포함하는 것인 비일시적인 컴퓨터 판독가능한 매체.
  6. 제2항에 있어서, 상기 제어 프로그램은 상기 비일시적인 컴퓨터 판독가능한 매체에 저장된 하나 이상의 라이브러리 파일을 포함하고, 상기 제어 프로그램이 상기 표시를 수신하는 동작은 상기 제어 프로그램이 애플리케이션 프로그래밍 인터페이스(API)를 통해 상기 표시를 수신하는 것을 포함하는 것인 비일시적인 컴퓨터 판독가능한 매체.
  7. 제1항에 있어서, 상기 초기화 동작은 상기 메모리 영역의 내용을 변경하도록 상기 제2처리 요소에 의해 실행가능한 하나 이상의 명령의 세트의 적어도 일부를 동적으로 생성하는 동작을 포함하는 것인 비일시적인 컴퓨터 판독가능한 매체.
  8. 제1항에 있어서, 상기 제2처리 요소에 의해 처리되는 상기 메모리 영역의 초기화 동작은 상기 컴퓨터 시스템의 캐시가 상기 초기화된 메모리 영역의 초기화 후 내용을 저장하지 않게 하고,
    상기 캐시는 상기 제1처리 요소가 상기 메모리 영역을 포함하는 상기 컴퓨터 시스템의 메모리에 액세스하는 동작에 응답하여 상기 메모리 영역의 내용을 저장하도록 구성된 것인 비일시적인 컴퓨터 판독가능한 매체.
  9. 제1항에 있어서, 상기 제1 및 제2처리 요소 중 적어도 하나의 처리 요소를 생성하도록 실행가능한 프로그램 명령을 더 포함하는 비일시적인 컴퓨터 판독가능한 매체.
  10. 초기화될 메모리 영역의 표시에 응답하여, 제1처리 요소에서 실행되는 제1프로그램이 제2처리 요소에 의해 상기 메모리 영역의 초기화를 처리하게 하는 단계를 포함하되, 컴퓨팅 디바이스는 상기 메모리 영역을 포함하는 메모리와 상기 제1 및 제2처리 요소를 포함하는 것인 방법.
  11. 제10항에 있어서, 상기 제1처리 요소가 상기 메모리 영역에 직접 액세스함이 없이 상기 제2처리 요소가 상기 메모리 영역을 초기화하도록 직접 메모리 액세스(DMA)를 사용하는 단계를 더 포함하는 방법.
  12. 제10항에 있어서, 상기 제1프로그램 내의 가비지 수집 과정에서 상기 표시를 생성하는 단계를 더 포함하는 방법.
  13. 제10항에 있어서, 상기 제1프로그램은 제어 프로그램이고, 상기 방법은 상기 제2처리 요소가 상기 제어 프로그램의 하나 이상의 학습 규칙에 따라 상기 메모리 영역을 초기화하는 단계를 더 포함하는 방법.
  14. 제10항에 있어서, 초기화될 상기 메모리 영역에 응답하여, 상기 컴퓨팅 디바이스가 상기 컴퓨팅 디바이스의 데이터 캐시의 하나 이상의 부분을 무효화하는 단계를 더 포함하되,
    상기 하나 이상의 무효화된 부분은 상기 메모리 영역의 초기화 전에 상기 메모리 영역의 내용에 대응하는 것인 방법.
  15. 컴퓨터 시스템으로서,
    메인 메모리를 구비하는 메모리 서브시스템;
    2차 저장 디바이스; 및
    적어도 제1 및 제2처리 요소를 포함하되,
    상기 2차 저장 디바이스는, 상기 컴퓨터 시스템으로 하여금, 초기화될 상기 메인 메모리의 메모리 영역의 표시에 응답하여, 상기 제2처리 요소에 의해 처리되는 상기 메모리 영역의 초기화 동작을 수행하도록 상기 제1처리 요소에 의해 실행가능한 프로그램 명령을 저장한 것인 컴퓨터 시스템.
  16. 제15항에 있어서, 상기 제1 및 제2처리 요소는 이종(heterogeneous)인 것인 컴퓨터 시스템.
  17. 제15항에 있어서, 상기 제1처리 요소와 연관된 캐시를 더 포함하되, 상기 캐시는 상기 제1처리 요소가 상기 메인 메모리에 액세스하는 동작에 응답하여 상기 메인 메모리의 내용을 저장하도록 구성되고;
    상기 메모리 영역의 상기 초기화 동작은 상기 캐시가 상기 메모리 영역의 초기화 후 내용을 저장하는 동작을 초래하지 않는 것인 컴퓨터 시스템.
  18. 제15항에 있어서, 상기 제2처리 요소가 상기 메인 메모리에 직접 액세스할 수 있도록 구성된 메모리 액세스 제어기를 더 포함하되,
    상기 메모리 영역의 상기 초기화 동작은 상기 제2처리 요소가 상기 메모리 액세스 제어기를 사용하여 상기 메모리 영역에 액세스하는 동작을 포함하며, 상기 초기화 동작은 상기 제1처리 요소가 상기 메모리 영역에 액세스하는 동작을 포함하지 않는 것인 컴퓨터 시스템.
  19. 처리 요소로서, 상기 처리 요소는 메모리 디바이스의 메모리 영역의 초기화가 제2처리 요소에 의해 처리되도록 구성된 메모리 초기화 회로를 포함하며, 상기 초기화 동작은 상기 메모리 영역이 초기화되는 표시에 응답하여 수행되는 것인 처리 요소.
  20. 데이터 구조를 포함하는 비일시적인 컴퓨터 판독가능한 저장 매체로서, 상기 데이터 구조는 상기 데이터 구조로 기술된 회로를 포함하는 집적 회로를 제조하도록 처리의 일부를 수행하도록 컴퓨터 시스템에서 실행가능한 프로그램에 의해 사용가능하고, 상기 데이터 구조로 기술된 상기 회로는,
    컴퓨팅 디바이스의 제1처리 요소가 아니라 상기 컴퓨팅 디바이스의 제2처리 요소에 의해 메모리 디바이스의 메모리 영역의 초기화를 처리하도록 구성된 메모리 초기화 유닛을 포함하며, 상기 초기화 동작은 상기 메모리 영역이 초기화되는 표시에 응답하여 수행되는 것인 비일시적인 컴퓨터 판독가능한 저장 매체.
  21. 제20항에 있어서, 상기 저장 매체는 HDL, Verilog 또는 GDSII 데이터 중 적어도 하나를 저장한 것인 비일시적인 컴퓨터 판독가능한 저장 매체.
KR1020137005611A 2010-08-03 2011-08-03 메모리 영역을 충진하기 위한 프로세서 지원 KR20140001827A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/849,724 2010-08-03
US12/849,724 US20120036301A1 (en) 2010-08-03 2010-08-03 Processor support for filling memory regions
PCT/US2011/046412 WO2012018906A1 (en) 2010-08-03 2011-08-03 Processor support for filling memory regions

Publications (1)

Publication Number Publication Date
KR20140001827A true KR20140001827A (ko) 2014-01-07

Family

ID=44504257

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137005611A KR20140001827A (ko) 2010-08-03 2011-08-03 메모리 영역을 충진하기 위한 프로세서 지원

Country Status (6)

Country Link
US (1) US20120036301A1 (ko)
EP (1) EP2601579A1 (ko)
JP (1) JP2013532880A (ko)
KR (1) KR20140001827A (ko)
CN (1) CN103140834A (ko)
WO (1) WO2012018906A1 (ko)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5407631B2 (ja) * 2009-07-21 2014-02-05 富士ゼロックス株式会社 回路情報生成装置、機能実行システム、及びプログラム
US9740623B2 (en) * 2013-03-15 2017-08-22 Intel Corporation Object liveness tracking for use in processing device cache
KR20160008885A (ko) * 2014-07-15 2016-01-25 삼성전자주식회사 전자 장치 및 전자 장치의 메모리 관리 방법
CN104932985A (zh) * 2015-06-26 2015-09-23 季锦诚 一种基于eDRAM的GPGPU寄存器文件系统
CN113127085A (zh) 2015-08-20 2021-07-16 美光科技公司 从nand媒体快速引导的固态存储装置
US10558364B2 (en) * 2017-10-16 2020-02-11 Alteryx, Inc. Memory allocation in a data analytics system

Family Cites Families (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5446860A (en) * 1993-01-11 1995-08-29 Hewlett-Packard Company Apparatus for determining a computer memory configuration of memory modules using presence detect bits shifted serially into a configuration register
JPH0822411A (ja) * 1994-07-08 1996-01-23 Fuji Xerox Co Ltd 画像メモリ初期化装置
JPH08161216A (ja) * 1994-12-09 1996-06-21 Toshiba Corp メモリ高速クリア機能を持つ情報処理装置
EP0863497A1 (en) * 1997-03-06 1998-09-09 Sony Computer Entertainment Inc. Graphic data generation device with frame buffer regions for normal and size reduced graphics data
US7676640B2 (en) * 2000-01-06 2010-03-09 Super Talent Electronics, Inc. Flash memory controller controlling various flash memory cells
US6760817B2 (en) * 2001-06-21 2004-07-06 International Business Machines Corporation Method and system for prefetching utilizing memory initiated prefetch write operations
JP2003131934A (ja) * 2001-10-26 2003-05-09 Seiko Epson Corp メモリ制御回路及び情報処理装置
US6993706B2 (en) * 2002-01-15 2006-01-31 International Business Machines Corporation Method, apparatus, and program for a state machine framework
US6976122B1 (en) * 2002-06-21 2005-12-13 Advanced Micro Devices, Inc. Dynamic idle counter threshold value for use in memory paging policy
US7259710B2 (en) * 2002-08-07 2007-08-21 Canon Information Systems Research Australia Pty Ltd User input device
JP4017178B2 (ja) * 2003-02-28 2007-12-05 スパンション エルエルシー フラッシュメモリ及びメモリ制御方法
US7159104B2 (en) * 2003-05-20 2007-01-02 Nvidia Corporation Simplified memory detection
EP1489507A1 (en) * 2003-06-19 2004-12-22 Texas Instruments Incorporated Memory preallocation
US9020801B2 (en) * 2003-08-11 2015-04-28 Scalemp Inc. Cluster-based operating system-agnostic virtual computing system
KR100703357B1 (ko) * 2003-08-16 2007-04-03 삼성전자주식회사 보조제어부를 구비하는 휴대용 단말기의 캐시메모리구현장치 및 방법
US7065606B2 (en) * 2003-09-04 2006-06-20 Lsi Logic Corporation Controller architecture for memory mapping
US7139863B1 (en) * 2003-09-26 2006-11-21 Storage Technology Corporation Method and system for improving usable life of memory devices using vector processing
JP2005128692A (ja) * 2003-10-22 2005-05-19 Matsushita Electric Ind Co Ltd シミュレータ及びシミュレーション方法
US7100003B2 (en) * 2003-11-24 2006-08-29 International Business Machines Corporation Method and apparatus for generating data for use in memory leak detection
JP4247233B2 (ja) * 2004-02-13 2009-04-02 ボッシュ株式会社 車両用データのバックアップ方法
US7539831B2 (en) * 2004-08-18 2009-05-26 Intel Corporation Method and system for performing memory clear and pre-fetch for managed runtimes
US7401202B1 (en) * 2004-09-14 2008-07-15 Azul Systems, Inc. Memory addressing
US7464243B2 (en) * 2004-12-21 2008-12-09 Cisco Technology, Inc. Method and apparatus for arbitrarily initializing a portion of memory
FR2880705A1 (fr) * 2005-01-10 2006-07-14 St Microelectronics Sa Procede de conception d'un peripherique compatible dma
US7315917B2 (en) * 2005-01-20 2008-01-01 Sandisk Corporation Scheduling of housekeeping operations in flash memory systems
US7406212B2 (en) * 2005-06-02 2008-07-29 Motorola, Inc. Method and system for parallel processing of Hough transform computations
US7409489B2 (en) * 2005-08-03 2008-08-05 Sandisk Corporation Scheduling of reclaim operations in non-volatile memory
GB0517305D0 (en) * 2005-08-24 2005-10-05 Ibm Method and apparatus for the defragmentation of a file system
US7596667B1 (en) * 2005-09-01 2009-09-29 Sun Microsystems, Inc. Method and apparatus for byte allocation accounting in a system having a multi-threaded application and a generational garbage collector that dynamically pre-tenures objects
JP4794957B2 (ja) * 2005-09-14 2011-10-19 任天堂株式会社 ゲームプログラム、ゲーム装置、ゲームシステム、およびゲーム処理方法
US20070143561A1 (en) * 2005-12-21 2007-06-21 Gorobets Sergey A Methods for adaptive file data handling in non-volatile memories with a directly mapped file storage system
US7515500B2 (en) * 2006-12-20 2009-04-07 Nokia Corporation Memory device performance enhancement through pre-erase mechanism
US20080204468A1 (en) * 2007-02-28 2008-08-28 Wenlong Li Graphics processor pipelined reduction operations
US20080215807A1 (en) * 2007-03-02 2008-09-04 Sony Corporation Video data system
US8286196B2 (en) * 2007-05-03 2012-10-09 Apple Inc. Parallel runtime execution on multiple processors
US20090089515A1 (en) * 2007-10-02 2009-04-02 Qualcomm Incorporated Memory Controller for Performing Memory Block Initialization and Copy
JP2009104300A (ja) * 2007-10-22 2009-05-14 Denso Corp データ処理装置及びプログラム
US8339404B2 (en) * 2007-11-29 2012-12-25 Accelereyes, Llc System for improving utilization of GPU resources
US7659768B2 (en) * 2007-12-28 2010-02-09 Advanced Micro Devices, Inc. Reduced leakage voltage level shifting circuit
JP5286943B2 (ja) * 2008-05-30 2013-09-11 富士通株式会社 メモリクリア機構
US8531471B2 (en) * 2008-11-13 2013-09-10 Intel Corporation Shared virtual memory

Also Published As

Publication number Publication date
EP2601579A1 (en) 2013-06-12
CN103140834A (zh) 2013-06-05
JP2013532880A (ja) 2013-08-19
WO2012018906A1 (en) 2012-02-09
US20120036301A1 (en) 2012-02-09

Similar Documents

Publication Publication Date Title
US9836409B2 (en) Seamless application access to hybrid main memory
KR100968188B1 (ko) 프로세서 자원의 가상화를 위한 시스템 및 방법
JP5528554B2 (ja) ブロックベースの非透過的キャッシュ
US20230196502A1 (en) Dynamic kernel memory space allocation
CN113448504A (zh) 具有用于实现内部固态驱动器操作的外部软件执行的固态驱动器
KR102434170B1 (ko) 하이브리드 메모리 시스템
JP2012522290A (ja) キャッシュにおけるウエイ割り当て及びウエイロックのための方法
KR20140001827A (ko) 메모리 영역을 충진하기 위한 프로세서 지원
WO2018063484A1 (en) Mass storage cache in non volatile level of multi-level system memory
US20220164303A1 (en) Optimizations of buffer invalidations to reduce memory management performance overhead
KR102443593B1 (ko) 하이브리드 메모리 시스템
JP2021149374A (ja) データ処理装置
CN112654965A (zh) 动态模块的外部分页和交换
US10108339B2 (en) Reduction of intermingling of input and output operations in solid state drives
Bakita et al. Enabling GPU memory oversubscription via transparent paging to an NVMe SSD
US20210191641A1 (en) Systems and methods for reducing instruction code memory footprint for multiple processes executed at a coprocessor
CN115576870A (zh) 用于多核处理器的方法和多核处理器
CN117632778A (zh) 电子装置和操作电子装置的方法
Halvorsen et al. Memory Management

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