KR102282135B1 - 영구적 저장 펜스 프로세서, 방법, 시스템, 및 명령어 - Google Patents

영구적 저장 펜스 프로세서, 방법, 시스템, 및 명령어 Download PDF

Info

Publication number
KR102282135B1
KR102282135B1 KR1020177005384A KR20177005384A KR102282135B1 KR 102282135 B1 KR102282135 B1 KR 102282135B1 KR 1020177005384 A KR1020177005384 A KR 1020177005384A KR 20177005384 A KR20177005384 A KR 20177005384A KR 102282135 B1 KR102282135 B1 KR 102282135B1
Authority
KR
South Korea
Prior art keywords
store
persistent
instruction
persistent storage
fence
Prior art date
Application number
KR1020177005384A
Other languages
English (en)
Other versions
KR20170039237A (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 KR20170039237A publication Critical patent/KR20170039237A/ko
Application granted granted Critical
Publication of KR102282135B1 publication Critical patent/KR102282135B1/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/0804Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
    • 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
    • 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/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • G06F9/3855
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
    • G06F9/3859
    • 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/466Transaction processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code

Abstract

한 양태의 프로세서는, 영구적 저장 펜스 명령어를 디코딩하는 디코드 유닛을 포함한다. 프로세서는 또한, 디코드 유닛과 커플링되는 메모리 서브시스템 모듈을 포함한다. 메모리 서브시스템 모듈은, 영구적 저장 펜스 명령어에 응답하여, 모든 후속하는 저장 명령어의 데이터가 영구적 스토리지에 영구적으로 저장되기 이전에, 영구적 저장 펜스 명령어에 대응하는 주어진 데이터가 영구적 스토리지에 영구적으로 저장되는 것을 보장한다. 후속하는 저장 명령어는, 원래의 프로그램 순서에서 영구적 저장 펜스 명령어 뒤에 발생한다. 다른 프로세서, 방법, 시스템, 및 제조 물품이 또한 개시된다.

Description

영구적 저장 펜스 프로세서, 방법, 시스템, 및 명령어{PERSISTENT STORE FENCE PROCESSORS, METHODS, SYSTEMS, AND INSTRUCTIONS}
본원에서 설명되는 실시형태는 일반적으로 데이터의 저장에 관한 것이다. 특히, 본원에서 설명되는 실시형태는 일반적으로 영구적 메모리(persistent memory)에서의 데이터의 저장에 관한 것이다.
프로세서는 일반적으로 메모리에 액세스하는 명령어를 실행하도록 동작가능하다. 예를 들면, 프로세서는 메인 메모리로부터 데이터를 로딩 또는 판독하는 로드 명령어 및/또는 데이터를 메인 메모리에 기록하는 또는 다르게 저장하는 저장 명령어를 실행할 수도 있다.
미국 캘리포니아 산타클라라(Santa Clara)의 인텔 코포레이션(Intel Corporation)에 의해 2014년 6월에 발행된 Intel® 64 and IA-32 Architectures Software Developer's Manual Combined Volumes: 1, 2A, 2B, 2C, 3A, 3B and 3C, Order Number: 325462-051US는 저장 동작을 직렬화하기 위한 SFENCE (store fence; 저장 펜스) 명령어를 설명한다. SFENCE 명령어는, SFENCE 명령어 이전에 발행된 모든 메모리 저장 명령어(store-to-memory instruction)에 대한 직렬화 동작을 수행할 수도 있다. 이 직렬화 동작은, 프로그램 순서에서 SFENCE 명령어에 선행하는 모든 저장 명령어가, SFENCE 명령어에 후행하는 임의의 저장 명령어보다 먼저 전역적으로 보이게 되는 것을 보장할 수도 있다.
본 발명은, 실시형태를 예시하기 위해 사용되는 하기의 설명 및 첨부의 도면을 참조하는 것에 의해 가장 잘 이해될 수도 있다. 도면에서,
도 1은, 본 발명의 실시형태가 구현될 수도 있는 컴퓨터 시스템의 실시형태의 블록도이다.
도 2는, 영구적 저장 펜스 명령어의 실시형태를 수행하도록 동작가능한 프로세서의 실시형태의 블록도이다.
도 3은 영구적 저장 펜스 명령어의 실시형태를 수행하는 방법의 실시형태의 블록 흐름도이다.
도 4는 영구적 저장 펜스 버퍼의 예시적인 실시형태를 구비하는 메모리 서브시스템 모듈의 예시적인 실시형태의 블록도이다.
도 5는, 상이한 영구적 저장 펜스 명령어에 대응하는 데이터를 구비하는 영구적 저장 펜스 버퍼에 대한 캐시 라인의 예시적인 실시형태의 블록도이다.
도 6은 데이터 및 우선 기록 로그(write-ahead log)를 구비하는 영구적인 메모리의 실시형태의 블록도이다.
도 7은, 본원에서 개시되는 바와 같은 영구적 저장 펜스 명령어 없이 수행되는 로그 우선 기록(write-ahead logging)의 하나의 가능한 방법의 블록 흐름도이다.
도 8은 영구적 저장 펜스 명령어의 실시형태와 함께 수행되는 로그 우선 기록의 방법의 예시적인 실시형태의 블록 흐름도이다.
도 9는 영구적 저장 펜스 버퍼의 실시형태에 대한 다양하고 적절한 위치를 예시하는 블록도이다.
도 10a는 순차적 파이프라인(in-order pipeline)의 실시형태 및 레지스터 리네이밍 비순차 발행/실행 파이프라인(register renaming out-of-order issue/execution pipeline)의 실시형태를 예시하는 블록도이다.
도 10b는, 실행 엔진 유닛에 커플링되는 프론트 엔드 유닛을 포함하며 양자가 메모리 유닛에 커플링되는 프로세서 코어의 실시형태의 블록도이다.
도 11a는, 다이 상의 인터커넥트 네트워크(on-die interconnect network)로의 자신의 연결, 및 레벨 2(Level 2; L2) 캐시의 자신의 로컬 서브셋과 함께, 단일의 프로세서 코어의 실시형태의 블록도이다.
도 11b는 도 11a의 프로세서 코어의 일부의 확대도의 실시형태의 블록도이다.
도 12는, 하나보다 많은 코어를 구비할 수도 있는, 통합 메모리 컨트롤러를 구비할 수도 있는, 그리고 통합 그래픽을 구비할 수도 있는 프로세서의 실시형태의 블록도이다.
도 13은 컴퓨터 아키텍쳐의 제1 실시형태의 블록도이다.
도 14는 컴퓨터 아키텍쳐의 제2 실시형태의 블록도이다.
도 15는 컴퓨터 아키텍쳐의 제3 실시형태의 블록도이다.
도 16은 시스템 온 칩 아키텍쳐의 실시형태의 블록도이다.
도 17은, 본 발명의 실시형태에 따른, 소스 명령어 세트의 이진 명령어를 타겟 명령어 세트의 이진 명령어로 변환하는 소프트웨어 명령어 컨버터의 사용의 블록도이다.
영구적 저장 펜스 명령어, 명령어를 실행하는 프로세서, 명령어를 프로세싱 또는 실행할 때 프로세서에 의해 수행되는 방법, 및 명령어를 프로세싱 또는 실행하는 하나 이상의 프로세서를 통합하는 시스템이 본원에서 개시된다. 하기의 설명에서, 다수의 특정한 상세(예를 들면, 특정한 명령어 동작, 프로세서 구성, 마이크로아키텍쳐 상세, 동작의 시퀀스, 명령어의 사용, 등등)가 개시된다. 그러나, 실시형태는 이들 특정 상세 없이도 실시될 수도 있다. 다른 경우에서, 본 설명의 이해를 모호하게 하는 것을 방지 하기 위해, 널리 공지된 회로, 구조체 및 기술은 상세히 나타내어지지 않는다.
도 1은, 본 발명의 실시형태가 구현될 수도 있는 컴퓨터 시스템(100)의 실시형태의 블록도이다. 컴퓨터 시스템은, 프로세서(102), 옵션적인(optional) 휘발성 또는 다르게는 비영구적 스토리지(122), 및 불휘발성 또는 다르게는 영구적 스토리지(124)를 포함한다. 비영구적 스토리지(122)는 필수적인 것이 아니라 옵션적인 것이다. 프로세서는, 예를 들면, 하나 이상의 버스 또는 다른 인터커넥트, 하나 이상의 허브 또는 다른 칩셋 컴포넌트, 이들의 조합, 등등과 같은 하나 이상의 인터커넥션 구조체(120)에 의해 비영구적 스토리지(122) 및 영구적 스토리지(124)와 커플링될 수도 있다. 프로세서를 기술 분야에서 공지된 휘발성 및 불휘발성 메모리와 커플링하는 다양한 방식이 적절하다.
휘발성 메모리는, 전력이 인가되지 않는 경우 자신의 컨텐츠를 손실하는 메모리 또는 스토리지의 타입을 나타낸다. 대조적으로, 불휘발성 메모리는 전력이 인가되지 않는 경우에도 자신의 컨텐츠를 장기간 동안 유지할 수 있는 메모리 또는 스토리지의 타입을 나타낸다. 예를 들면, 전력 없이 수 주, 여러 달, 또는 여러 해 이후에도 데이터가 불휘발성 메모리로부터 판독될 수도 있다. 적절한 타입의 비영구적 스토리지의 예는, 동적 랜덤 액세스 메모리(dynamic random access memory; DRAM) 및 미래에 개발되는 타입을 포함하는 RAM의 다른 형태를 포함하지만, 그러나 이들로 한정되지는 않는다. 적절한 타입의 영구적 스토리지의 예는, 하드 디스크, 자기 테이프, 다른 타입의 자기 스토리지 디바이스, 플래시 메모리, 다른 타입의 리드 온리 메모리(read-only memory; ROM), 광학 디스크, 강유전체 RAM(ferroelectric RAM; F-RAM), 및 자기저항 RAM, 및 미래에 개발되는 다른 타입을 포함하지만, 그러나 이들로 한정되지는 않는다.
몇몇 실시형태에서, 비영구적 스토리지(122) 및 영구적 스토리지(124) 양자는, 옵션적으로, 1차 스토리지(primary storage)로서 함께 또는 일괄적으로 사용될 수도 있고 양자는 프로세서에 의해 액세스될 수도 있다(예를 들면, 프로세서에 의해 주소지정가능할 수도 있다). 다른 실시형태에서, 비영구적 스토리지(122)는 옵션적으로 생략될 수도 있고, 영구적 스토리지(124)는 프로세서에 의해 액세스될 수 있는(예를 들면, 프로세서에 의해 주소지정가능할 수도 있는) 1차 스토리지로서 사용될 수도 있다. 또 다른 실시형태에서, 비영구적 스토리지(122)는 1차 스토리지(예를 들면, 메인 메모리)로서 개발될 수도 있고 영구적 스토리지는 2차 또는 보조 스토리지로서 개발될 수도 있지만, 영구적 스토리지는 프로세서에 의해 액세스될 수 있다(예를 들면, 프로세서에 의해 주소지정가능할 수도 있다).
프로세서(102)는 명령어 세트(104)를 구비한다. 명령어 세트는 프로세서의 명령어 세트 아키텍쳐(instruction set architecture; ISA)의 일부이고 프로세서가 실행하도록 동작할 수 있는 네이티브 명령어(native instruction)를 포함한다. 명령어 세트의 명령어는, 명령어 세트의 이러한 명령어로부터 디코딩된 마이크로명령어 또는 다른 명령어와는 대조적으로, 실행을 위해 프로세서로 제공되는 마이크로명령어, 어셈블리 언어 명령어, 또는 머신 레벨 명령어를 나타낸다. 도시되는 바와 같이, 명령어 세트는 비영구적 및/또는 영구적 스토리지로부터 데이터를 로드 또는 판독하는 하나 이상의 로드 명령어(106)를 포함할 수도 있다. 명령어 세트는 또한 비영구적 및/또는 영구적 스토리지에서 데이터를 이동, 기록, 또는 다르게는 저장하는 하나 이상의 저장 명령어(108)를 포함한다.
프로세서는 명령어 세트의 명령어를 프로세싱하는 파이프라인(112)을 구비한다. 예로서, 파이프라인은 명령어를 페치(fetch)하는 명령어 페치 유닛, 명령어를 디코딩하는 디코드 유닛, 디코딩된 명령어를 실행하는 하나 이상의 실행 유닛을 포함할 수도 있다. 기술 분야에서 공지된 다양하고 상이한 프로세서 파이프라인 설계가 적절하다. 본 발명의 범위는 임의의 공지의 파이프라인 설계로 제한되지 않는다. 프로세서는 또한, 비영구적 및/또는 영구적 스토리지와 인터페이싱하는 메모리 서브시스템(114)을 구비한다. 메모리 서브시스템은, 하나 이상의 캐시(118)(예를 들면, 하나 이상의 레벨의 캐시)를 포함할 수도 있다. 예를 들면, 소정의 프로세서는 파이프라인에 상대적으로 더 가깝고 및/또는 영구적 스토리지로부터 더 먼 결합된 레벨 1(L1) 명령어 및 데이터 캐시, 및 파이프라인으로부터 상대적으로 더 멀고 및/또는 영구적 스토리지에 더 가까운 레벨 2(L2) 데이터 캐시를 구비한다. 다른 프로세서는 단일 레벨의 캐시, 또는 세 개 또는 그 이상의 상이한 레벨의 캐시를 구비할 수도 있다. 각각의 캐시는 특정한 구현예에 대해 소망되는 바와 같은 명령어 및/또는 데이터를 유지할 수도 있다.
캐시(들)(118)에 대한 하나의 이유는, 비영구적 및/또는 영구적 스토리지의 데이터에 대한 프로세서에 의한 액세스의 레이턴시를 감소시키는 것을 돕는 것이다. 비영구적 및/또는 영구적 스토리지의 데이터에 대한 액세스는 일반적으로 캐시(들)의 데이터에 대한 액세스보다 상당히 더 느린 경향이 있다. 예를 들면, 캐시(들)의 데이터에 대한 일반적인 액세스는 단지 수 프로세서 클록 싸이클이 걸리지만, 반면 1차 스토리지의 데이터에 대한 액세스는 대표적으로 수십 내지 수백 클록 싸이클이 걸릴 수도 있다. 결과적으로, 성능 향상을 돕기 위해, 프로세서는 소정 데이터(예를 들면, 공간적 및/또는 시간적 위치를 갖는 데이터)를, 그 동일한 데이터가 가까운 미래에 다시 필요로 되는 경우 비영구적 및/또는 영구적 스토리지로부터 더욱 느리게 대신 캐시(들)로부터 재빨리 그 데이터가 액세스될 수 있도록, 비영구적 및/또는 영구적 스토리지로부터 캐시(들) 안으로 가져올 수도 있다.
또한, 저장 명령어(들)(108)는 데이터를 프로세서로부터 비영구적 및/또는 영구적 스토리지로 직접적으로 및/또는 바로 저장하지 않을 수도 있다. 대신, 데이터는 먼저 캐시(들)(118)에 캐싱 또는 저장될 수도 있다. 또 다시, 이것은, 가까운 미래에 데이터가 다시 필요로 되는 경우, 데이터를 프로세서에 가깝게 유지하는 것을 도울 수도 있고 및/또는 스토리지에 대한 더 긴 레이턴시 액세스를 방지하는 것을 도울 수도 있다. 프로세서의 메모리 서브시스템은, 시스템의 모든 엔티티(예를 들면, 다른 프로세서)가 데이터의 정확한 현재 버전을 보도록 데이터가 적절한 시간에 비영구적 및/또는 영구적 스토리지에 일관성 있게(coherently) 저장되는 것을 보장하는 것을 돕기 위한 캐시 일관성(cache coherency) 메커니즘 또는 모듈(116)을 구비할 수도 있다. 예로서, 캐시 일관성 메커니즘 또는 모듈은, 캐시 라인이 수정되는, 배타적인, 공유되는, 또는 무효의 네 상태 중 하나에 있는 MESI 프로토콜을 구현하는 것을 도울 수도 있다.
데이터를 영구적 스토리지(124)(예를 들면, 불휘발성 메모리)에 저장하는 하나의 이점은, 데이터의 영구성 또는 영속성이다. 영구성 또는 영속성은 일반적으로, 저장되는 데이터가 전력 손실, 오퍼레이팅 시스템 오류, 시스템 고장, 프로세서 오류, 또는 대부분의 다른 타입의 에러의 경우(예를 들면, 이 경우 컴퓨터 시스템은 재부팅되는 것을 필요로 한다)에도 손실되지 않는다는 것을 의미한다. 일단 데이터가 영구적 스토리지에 저장되면, 전력의 손실, 오퍼레이팅 시스템 오류, 또는 등등이 존재하는 경우에도, 데이터는 통상적으로 유지된다. 또한, 프로세서에 장애가 발생하거나 또는 다르게는 하드웨어 장애로 인해 컴퓨터 시스템에 장애가 발생하는 경우에도, 영구적 스토리지가 작동하는 한, 데이터를 복구하는 것이 일반적으로 가능할 수도 있다. 대조적으로, 비영구적 스토리지(122)에(예를 들면, 휘발성 메모리에) 저장되는 데이터는 일반적으로 영구적이거나 영속적인 것으로 간주되지 않는다. 마찬가지로, 캐시(들)(118)뿐만 아니라 로드/저장 버퍼 및/또는 프로세서의 다양한 다른 일시적 캐싱 및/또는 버퍼링 구조체(간략화를 위해 예시에서는 도시되지 않음)에 저장되는 데이터도 또한 영구적이거나 또는 영속적인 것으로 일반적으로 간주되지 않는다. 비영구적 스토리지, 캐시(들), 및 등등에 저장되는 이러한 데이터는, 전력의 손실, 오퍼레이팅 시스템 오류, 시스템 고장, 프로세서 오류, 및 소정의 다른 타입의 에러의 경우에 손실될 수도 있다.
또한, 소정의 애플리케이션 및/또는 구현예는 데이터가 영구적으로 또는 영속적으로 저장되는 것을 필요로 한다. 예를 들면, 소정의 데이터베이스 애플리케이션 및/또는 데이터 트랜잭션에서, 데이터를 손실하지 않는 것이 아주 중요하다. 또한, 몇몇 애플리케이션 및/또는 구현예에서, 데이터를 특정한 순서로 영구적으로 및/또는 영속적으로 저장하는 것이(예를 들면, 데이터의 한 조각을 데이터의 다른 조각 앞에 영구적으로 및/또는 영속적으로 저장하는 것이) 유용할 수도 있다. 예로서, 이것은, 로그 우선 기록, 다른 직렬 저장 알고리즘, 및 등등의 한 구현예에서의 경우일 수도 있다. 몇몇 실시형태에서, 프로세서의 명령어 세트(104)는, 데이터의 후속하는 저장이 영구적 스토리지(124)에 대해 수행되기 이전에 데이터의 관련된 저장이 영구적 스토리지(124)에 대해 수행되는 것을 야기하거나 또는 보장하기 위해 영구적 저장 펜스 명령어(110)의 실시형태를 포함할 수도 있다.
도 2는, 영구적 저장 펜스 명령어(210)의 실시형태를 수행하도록 동작가능한 프로세서(202)의 실시형태의 블록도이다. 몇몇 실시형태에서, 프로세서는 범용 프로세서(예를 들면, 데스크탑, 랩탑, 또는 다른 컴퓨터에서 사용되는 타입의 중앙 프로세싱 유닛(central processing unit; CPU) 또는 범용 마이크로프로세서)일 수도 있다. 대안적으로, 프로세서는 특수 목적의 프로세서일 수도 있다. 적절한 특수 목적의 프로세서의 예는, 네트워크 프로세서, 통신 프로세서, 암호 프로세서, 그래픽 프로세서, 코프로세서, 임베딩된 프로세서, 디지털 신호 프로세서(digital signal processor; DSP), 및 컨트롤러(예를 들면, 마이크로컨트롤러)를 포함하지만, 그러나 이들로 제한되지는 않는다. 프로세서는, 다양한 복합 명령어 세트 컴퓨팅(complex instruction set computing; CISC) 아키텍쳐, 축약형 명령어 세트 컴퓨팅(reduced instruction set computing; RISC) 아키텍쳐, 아주 긴 명령어 워드(very long instruction word; VLIW) 아키텍쳐, 하이브리드 아키텍쳐, 다른 타입의 아키텍쳐를 구비할 수도 있거나, 또는 상이한 아키텍쳐의 조합을 구비할 수도 있다(예를 들면, 상이한 코어가 상이한 아키텍쳐를 구비할 수도 있다).
동작 동안, 프로세서(202)는 코드(230)(예를 들면, 프로그램)를 실시, 실행, 또는 수행할 수도 있다. 예를 들면, 코드는, 영구적 스토리지(224) 및/또는 옵션적인 비영구적 메모리(도시되지 않음)로부터 프로세서 안으로 페칭, 로딩, 또는 다르게는 수신될 수도 있다. 영구적 스토리지(224)는, 그것이 일반적으로 프로세서의 일부가 아니다는 것을 나타내기 위해 점선으로 도시된다. 코드는 다양하고 상이한 명령어를 포함할 수도 있다. 이들 명령어 중에서, 코드는 영구적 저장 펜스 명령어(210)를 포함한다. 몇몇 실시형태에서, 영구적 저장 펜스 명령어는 옵션적으로 그 자체가, 데이터를 영구적 스토리지(224)로 이동, 기록, 또는 다르게는 저장하기 위한 영구적 저장 명령어일 수도 있다(예를 들면, 명령어(210)는 영구적 저장 및 영구적 저장 펜스 명령어일 수도 있다). 이러한 영구적 저장 및 영구적 저장 펜스 명령어(210)는, 관련된 데이터를 영구적 스토리지(224)에 저장하기 위한 옵션적인 관련된 영구적 저장 동작(228)을 구비할 수도 있다. 이러한 실시형태에서, 명령어(210)는, 영구적 스토리지에 저장될 데이터를 구비하는 소스 오퍼랜드(source operand)를 (예를 들면, 하나 이상의 필드 또는 비트의 세트를 통해) 명시적으로 명시할 수도 있거나, 또는 다르게는 나타낼 수도 있다(예를 들면, 암시적으로 나타낼 수도 있다). 명령어(210)는, 데이터가 저장될 영구적 스토리지(224)의 어드레스 또는 다른 위치를 (예를 들면, 하나 이상의 필드 또는 비트의 세트를 통해) 명시적으로 명시할 수도 있거나, 또는 다르게는 나타낼 수도 있다(예를 들면, 암시적으로 나타낼 수도 있다). 몇몇 실시형태에서, 영구적 스토리지(224)는 프로세서의 명령어 세트의 명령어에 의해 주소지정가능할 수도 있다는 것을 주목한다. 대안적으로, 다른 실시형태에서, 영구적 저장 펜스 명령어는 관련된 영구적 저장 동작(228)을 구비하지 않을 수도 있다. 예를 들면, 영구적 저장 펜스 명령어는, 데이터를 영구적 스토리지(224)에 저장하도록 동작가능한 별개의 그러나 관련된 영구적 저장 명령어(208E)와 함께 작동하도록 설계 또는 의도될 수도 있다. 예를 들면, 별개의 영구적 저장 명령어(208E)는, 원래의 프로그램 또는 코드 순서에서 영구적 저장 펜스 명령어(210) 앞에(예를 들면, 바로 앞에)(또는 대안적으로, 뒤에(예를 들면, 바로 뒤에)) 있도록 설계될 수도 있거나 또는 암시적으로 이해될 수도 있다. 코드는 또한, 프로그램 순서에서 영구적 저장 펜스 명령어(210)보다 나중에 및/또는 뒤에 발생하는 하나 이상의 영구적 저장 명령어(208L)의 세트를 포함할 수도 있다. 더 앞선 영구적 저장 명령어(208E)는 또한, 원래의 프로그램 또는 코드 순서에서 나중의 영구적 저장 명령어(들)(208L) 전체 보다 더 앞서 및/또는 이전에 발생한다.
다시 도 2를 참조하면, 프로세서는 디코드 유닛 또는 디코더(226)를 포함한다. 디코드 유닛은 영구적 저장 펜스 명령어(210)를 수신 및 디코딩할 수도 있다. 영구적 저장 펜스 명령어는, 매크로명령어, 어셈블리 언어 명령어, 머신 코드 명령어, 또는 프로세서의 명령어 세트의 다른 명령어 또는 제어 신호를 나타낼 수도 있다. 디코드 유닛은, 상대적으로 상위 레벨의 영구적 저장 펜스 명령어를 반영하고, 나타내고, 및/또는 상대적으로 상위 레벨의 영구적 저장 펜스 명령어로부터 유도되는 하나 이상의 상대적으로 하위 레벨의 명령어 또는 제어 신호(예를 들면, 하나 이상의 마이크로명령어, 마이크로동작, 마이크로코드 엔트리 포인트, 디코딩된 명령어 또는 제어 신호, 등등)를 출력할 수도 있다. 몇몇 실시형태에서, 디코드 유닛은, 명령어를 수신하기 위한 하나 이상의 입력 구조체(예를 들면, 포트(들), 인터커넥트(들), 인터페이스), 명령어를 인식하고 디코딩하도록 하나 이상의 입력 구조체와 커플링되는 명령어 인식 및 디코드 로직, 및 하위 레벨의 명령어(들) 또는 제어 신호(들)를 출력하도록 명령어 인식 및 디코드 로직과 커플링되는 하나 이상의의 출력 구조체(예를 들면, 포트(들), 인터커넥트(들), 인터페이스)를 포함할 수도 있다. 디코드 유닛은, 마이크로코드 리드 온리 메모리(ROM), 룩업 테이블, 하드웨어 구현물, 프로그래머블 로직 어레이(programmable logic array; PLA), 및 기술 분야에서 공지된 디코드 유닛을 구현하기 위해 사용되는 다른 메커니즘을 포함하는, 그러나 이들로 한정되지는 않는 다양하고 상이한 메커니즘을 사용하여 구현될 수도 있다.
몇몇 실시형태에서, 영구적 저장 펜스 명령어가 디코드 유닛에 직접적으로 제공되는 대신, 명령어 에뮬레이터, 변환기(translator), 모퍼(morpher), 인터프리터(interpreter), 또는 다른 명령어 변환(conversion) 모듈이 옵션적으로 사용될 수도 있다. 다양한 타입의 명령어 변환 모듈이 기술 분야에서 공지되어 있으며 소프트웨어, 하드웨어, 펌웨어, 또는 이들의 조합으로 구현될 수도 있다. 몇몇 실시형태에서, 명령어 변환 모듈은, 예를 들면, 별개의 다이 및/또는 메모리와 같이 프로세서 외부에 (예를 들면, 정적, 동적, 또는 런타임 에뮬레이션 모듈로서) 위치될 수도 있다. 예로서, 명령어 변환 모듈은 제1 명령어 세트를 구비할 수도 있는 영구적 저장 펜스 명령어를 수신할 수도 있고, 영구적 저장 펜스 명령어를, 제2의 상이한 명령어 세트를 구비할 수도 있는 하나 이상의 대응하는 중간 명령어 또는 제어 신호로 에뮬레이팅, 변환(translate), 모핑, 해석, 또는 다르게는 변환(convert)할 수도 있다. 제2 명령어 세트의 하나 이상의 중간 명령어 또는 제어 신호는 디코드 유닛(예를 들면, 디코드 유닛(226))으로 제공될 수도 있는데, 디코드 유닛은 제2 명령어 세트의 하나 이상의 중간 명령어 또는 제어 신호를, 프로세서(예를 들면, 메모리 서브시스템 모듈)의 네이티브 하드웨어에 의해 실행가능한 하나 이상의 하위 레벨의 명령어 또는 제어 신호로 디코딩할 수도 있다.
도 2를 다시 참조하면, 메모리 서브시스템 모듈(214)이 디코드 유닛(226)과 커플링된다. 메모리 서브시스템 모듈은, 영구적 저장 펜스 명령어를 나타내는 및/또는 영구적 저장 펜스 명령어로부터 유도되는 하나 이상의 디코딩된 또는 변환된 명령어 또는 제어 신호를 수신할 수도 있다. 영구적 저장 펜스 명령어가 영구적 저장 및 영구적 저장 펜스 명령어인 실시형태에서, 메모리 서브시스템 모듈은 또한, 명령어(210)에 의해 명시되는 또는 나타내어지는 소스 오퍼랜드에 관한 데이터 및 데이터가 저장될 명령어(210)에 의해 명시되는 또는 나타내어지는 영구적 스토리지(224)의 어드레스 또는 위치의 표시(indication)를 수신할 수도 있다. 메모리 서브시스템 모듈은, 영구적 저장 펜스 명령어에 응답하여 및/또는 그 영구적 저장 펜스 명령어의 결과로서(예를 들면, 하나 이상의 명령어 또는 명령어로부터 디코딩되는 제어 신호에 응답하여), 영구적 저장 펜스 명령어에 대응하는 주어진 저장 동작(예를 들면, 저장 동작(228) 또는 저장 명령어(208E))의 데이터가, 모든 나중의 또는 후속하는 저장 동작 및/또는 명령어(즉, 원래의 프로그램 순서에서 주어진 저장 동작 이후에 발생하는 것들)로부터의 데이터가 영구적 스토리지에 영구적으로 및/또는 영속적으로 저장되기 이전에, 영구적 스토리지(224)에 영구적으로 및/또는 영속적으로 저장되는 것을 야기하도록 및/또는 보장하도록 동작한다. 몇몇 실시형태에서, 영구적 저장 펜스 명령어는, 모든 선행하는 저장 동작 및/또는 명령어의 데이터가, 모든 나중의 또는 후속하는 저장 동작 및/또는 명령어로부터의 데이터 이전에 영구적 스토리지에 영구적으로 및/또는 영속적으로 저장되는 것을 야기 및/또는 보장하지 않을 수도 있지만, 대신 이 규제(fencing)는 주어진 저장 동작에 대해서만 선택적으로 수행될 수도 있다. 즉, 모든 선행하는 저장 명령어 및/또는 동작을 규제할(fence) 필요는 없지만, 대신 주어진 저장 명령어 및/또는 동작에 대해서만 규제할 필요가 있다. 이것은, 모든 선행하는 저장 명령어 및/또는 동작을 규제하는 더 높은 수행 비용을 방지하는 것을 도울 수도 있다. 몇몇 실시형태에서, 이들 다른 규제되지 않은 저장 명령어(non-fenced store instruction) 및/또는 동작은 프로세서 캐시(들)에 저장될 수도 있지만, 반면 주어진 규제된 저장 명령어 및/또는 동작은 비일시적일 수도 있고 캐시(들)를 바이패스할 수도 있고 상이한 영구적 저장 펜스 버퍼(예를 들면, 버퍼(446))에 저장될 수도 있다.
몇몇 실시형태에서, 영구적 저장 펜스 명령어는, 주어진 저장 동작(예를 들면, 저장 동작(228))을 구비하는 영구적 저장 및 영구적 저장 펜스 명령어이다. 이러한 실시형태에서, 몇몇 경우에, 영구적 저장 및 영구적 저장 펜스 명령어는 비일시적 명령어일 수도 있으며, 그 실행은, 프로세서의 하나 이상의 캐시(도시되지 않음)에 저장되는 것을 바이패스하여 저장되지 않고, 데이터가 영구적 메모리(224)에 저장되게 하도록 동작한다. 다른 실시형태에서, 주어진 저장 동작은, 영구적 저장 펜스 명령어 이전 또는 이후의(예를 들면, 바로 이전 또는 이후의) 별개의 그러나 관련된 명령어(예를 들면, 저장 명령어(208E))에 대응할 수도 있다. 몇몇 실시형태에서, 영구적 저장 펜스 명령어는 주어진 저장 동작의 대응하는 데이터가 새로운 전용의 영구적 저장 펜스 버퍼(예를 들면, 도 4의 버퍼(446))에 저장되게 한다. 몇몇 실시형태에서, 버퍼는, 옵션적으로, 프로세서의 하나 이상의 캐시(들)에 의해 사용되는 캐시 일관성 프로토콜만을 기록할 수도 있고 및/또는 그 캐시 일관성 프로토콜을 구현하지 않을 수도 있다(예를 들면, 프로세서에 의해 구현되는 MESI 프로토콜을 사용하지 않을 수도 있다). 몇몇 실시형태에서, 하기에서 더 설명되는 바와 같이, 영구적 저장 펜스 버퍼는, 상이한 영구적 저장 펜스 명령어에 대응하는 데이터가 동일한 캐시 라인에 저장 또는 결합되는 것을 허용하도록 기록 결합을 구현할 수도 있다. 몇몇 실시형태에서, 하기에서 더 설명되는 바와 같이, 영구적 저장 펜스 명령어는, 로그 우선 기록의 성능을 향상시키기 위해, 우선 기록 로그에 데이터를 저장하도록 사용될 수도 있다.
메모리 서브시스템 모듈 및/또는 프로세서는, 영구적 저장 펜스 명령어에 응답하여 및/또는 영구적 저장 펜스 명령어의 결과로서(예를 들면, 영구적 저장 펜스 명령어로부터 디코딩되는 하나 이상의 명령어 또는 제어 신호에 응답하여) 영구적 저장 펜스 명령어를 수행하도록 및/또는 결과를 저장하도록 동작가능한 특정한 또는 특별한 로직(예를 들면, 트랜지스터, 집적 회로, 또는 펌웨어(예를 들면, 불휘발성 메모리에 저장되는 명령어) 및/또는 소프트웨어와 잠재적으로 결합되는 다른 하드웨어)을 포함할 수도 있다. 일 양태에서, 메모리 서브시스템 모듈은 또한, 일반적으로, 디코딩된 영구적 저장 펜스 명령어를 실행하기 위한 실행 유닛으로서 및/또는 디코딩된 영구적 저장 펜스 명령어를 수행하기 위한 유닛으로서 간주될 수도 있다. 몇몇 실시형태에서, 메모리 서브시스템 모듈은, 적절한 구현예의 예시적인 예인 도 4 및 도 5 중 하나 이상에 대해 도시되고 설명되는 회로부 또는 로직을 포함할 수도 있지만, 본 발명의 범위는 그렇게 한정되지는 않는다.
유익하게는, 영구적인 저장 펜스 동작은, 주어진 저장 동작으로부터의 데이터가 모든 후속하는 저장 동작으로부터의 데이터 이전에 영구적 스토리지에 저장되는 것을 야기하도록, 보장하도록, 또는 보증하도록 사용될 수도 있다. 일단 데이터가 영구적 스토리지에 있으면, 그것은 영구적이고 및/또는 영속적이다. 이것은 소정의 구현예에서 소정의 이점을 제공할 수도 있다. 예를 들면, 이것은, 하기에서 더 논의되는 바와 같이, 로그 우선 기록을 수행하는 효율성을 증가시키는 것을 도울 수도 있지만, 본 발명의 범위는 그렇게 한정되지는 않는다. 다른 경우에, 이것은, 다양한 다른 타입의 알고리즘에 대한 및/또는 다른 이유 때문에 영구적 저장을 직렬화하도록 사용될 수도 있다.
배경 섹션에서 논의되는 SFENCE 명령어와 비교하여, SFENCE 명령어는 영구적 스토리지에 대한 저장을 직렬화하지 않고 및/또는 영구성 또는 영속성을 직렬화하지 않는다. 대신, SFENCE 명령어는 메인 메모리(예를 들면, DRAM 또는 다른 휘발성 메모리)에 대한 저장의 전역적 가시성을 규제 또는 직렬화하도록 사용될 수도 있지만, 그러나 이러한 데이터는 소정의 조건(예를 들면, 전력 오류, 오퍼레이팅 시스템 오류, 프로세서 오류, 시스템 고장, 등등)의 경우에 손실될 수도 있다. 결과적으로, 이러한 명령어는 데이터 저장 동작의 영구성 또는 영속성을 직렬화할 수 없다. 또한, SFENCE 명령어는 모든 후속하는 저장 명령어에 대한 모든 선행하는 저장 명령어를 규제 또는 직렬화하고, 반면 몇몇 실시형태에서, 영구적 저장 펜스 명령어는, 모든 후속하는 저장 명령어 및/또는 동작에 대한 단일의 주어진 대응하는 저장 명령어 및/또는 동작만을 직렬화할 수도 있다.
설명을 모호하게 하는 것을 방지하기 위해, 상대적으로 간단한 프로세서(202)가 도시되고 설명되었다. 그러나, 프로세서는 옵션적으로 다른 널리 공지된 프로세서 컴포넌트를 포함할 수도 있다. 이러한 컴포넌트의 가능한 예는, 범용 레지스터, 스테이터스 레지스터(종종, 플래그 레지스터로 칭해짐), 시스템 제어 레지스터, 명령어 페치 유닛, 프리페치(prefetch) 버퍼, 명령어 변환 색인 버퍼(translation lookaside buffer; TLB), 데이터 TLB, 분기 예측 유닛(branch prediction unit), 부동소수점 실행 유닛, SIMD 또는 벡터 실행 유닛, 비순차 실행 지원 유닛(예를 들면, 명령어 스케줄링 유닛), 레지스터 리네임 및/또는 할당 유닛, 명령어 디스패치(dispatch) 유닛, 재정열 버퍼(reorder buffer; ROB), 예약 스테이션, 메모리 오더 버퍼(memory order buffer), 회수 유닛(retirement unit), 등등), 버스 인터페이스 유닛, 어드레스 생성 유닛, 디버그 유닛, 성능 모니터 유닛, 전력 관리 유닛, 프로세서에 포함되는 다른 컴포넌트, 및 이들의 다양한 조합을 포함하지만, 그러나 이들로 한정되지는 않는다. 이러한 컴포넌트는, 기술 분야에서 공지된 다양하고 상이한 적절한 조합 및/또는 구성에서 함께 커플링될 수도 있다. 실시형태는 임의의 공지된 이러한 조합 또는 구성으로 제한되지 않는다. 또한, 프로세서에 포함될 수도 있는 실시형태는, 적어도 하나가 영구적 저장 펜스 명령어를 수행하도록 동작하는 다수의 코어를 구비한다.
도 3은 영구적 저장 펜스 명령어의 실시형태를 수행하는 방법(340)의 실시형태의 블록 흐름도이다. 다양한 실시형태에서, 방법은, 프로세서, 명령어 프로세싱 장치, 또는 다른 디지털 로직 디바이스에 의해 수행될 수도 있다. 몇몇 실시형태에서, 방법(340)은 도 1의 프로세서(102) 및/또는 도 2의 프로세서(202)에 의해 및/또는 내에서 수행될 수도 있다. 프로세서(102, 202)에 대한 본원에서 설명되는 컴포넌트, 피쳐, 및 특정한 옵션적 상세는, 옵션적으로, 방법(340)에 적용된다. 대안적으로, 방법(340)은 유사한 또는 상이한 프로세서 또는 장치에 의해 및/또는 내에서 수행될 수도 있다. 또한, 프로세서(102, 202)는 방법(340)과 동일한, 유사한, 또는 상이한 방법을 수행할 수도 있다.
방법은, 블록(341)에서, 영구적 저장 펜스 명령어를 수신하는 것을 포함한다. 다양한 양태에서, 명령어는 프로세서 또는 그 일부(예를 들면, 명령어 페치 유닛, 디코드 유닛, 버스 인터페이스 유닛, 등등)에서 수신될 수도 있다. 다양한 양태에서, 명령어는 프로세서 외부(off-processor) 및/또는 다이 외부(off-die) 소스로부터(예를 들면, 메모리, 인터커넥트, 등등으로부터), 또는 프로세서 상의(on-processor) 및/또는 다이 상의(on-die) 소스로부터(예를 들면, 명령어 캐시, 명령어 큐, 등등으로부터) 수신될 수도 있다.
방법은, 블록(342)에서, 모든 후속하는 저장 명령어(즉, 이것은 원래의 프로그램 순서에서 영구적 저장 명령어에 후속한다)로부터의 데이터가 영구적 스토리지에 영구적으로 저장되기 이전에, 영구적 저장 펜스 명령어에 대응하는 또는 관련되는 주어진 데이터가 영구적 스토리지에 영구적으로 저장되는 것을 보증하는 것, 보장하는 것, 강제하는 것, 또는 다르게는 야기하는 것을 포함한다. 몇몇 실시형태에서, 방법은 또한, (예를 들면, 영구적 저장 및 영구적 저장 펜스 명령어의 경우에) 영구적 저장 명령어에 응답하여 주어진 데이터를 저장하는 것을 포함할 수도 있지만, 그러나 이것이 필수적인 것은 아니다. 몇몇 실시형태에서, 명령어는 주어진 데이터가 프로세서 캐시를 바이패스하여 영구적 저장 펜스 버퍼(예를 들면, 버퍼(446))에 비일시적으로 저장되게 할 수도 있지만, 그러나 본 발명의 범위는 그렇게 한정되지는 않는다.
도 4는 메모리 서브시스템 모듈(414)의 예시적인 실시형태의 블록도이며 영구적 저장 펜스 버퍼(446)의 예시적인 실시형태를 예시한다. 영구적 스토리지(424)는 메모리 서브시스템 모듈과 커플링된다. 영구적 스토리지는 앞서 설명된 것들과 유사할 수도 있거나 또는 동일할 수도 있다.
하나 이상의 디코딩된 영구적 저장 펜스 명령어 및/또는 동작(411)의 세트는 메모리 서브시스템 모듈(414)로 제공될 수도 있다. 이 예에서, 간략화를 위해, 디코딩되어 통합되었던 영구적 저장 펜스 명령어가 영구적 저장 동작(예를 들면, 저장 동작(228))이다는 것이 가정되지만, 본 발명의 범위는 그렇게 한정되지는 않는다. 메모리 서브시스템 모듈은 영구적 저장 펜스 버퍼(446) 및 대응하는 영구적 저장 펜스 버퍼 관리 유닛(444)을 포함한다. 버퍼 관리 유닛은, 영구적 저장 펜스 버퍼를 관리하도록, 예를 들면, 버퍼에서의 데이터의 저장, 및 버퍼로부터의 데이터의 플러싱 또는 다른 제거를 관리하도록 동작한다. 관리 유닛은, 하드웨어(예를 들면, 집적 회로부, 트랜지스터 또는 다른 회로 엘리먼트, 등등), 펌웨어(예를 들면, ROM, EPROM, 플래시 메모리, 또는 다른 영구적 또는 불휘발성 메모리 및 그 안에 포함되는 마이크로코드, 마이크로명령어, 또는 다른 하위 레벨 명령어), 소프트웨어(예를 들면, 메모리에 저장되는 상위 레벨 명령어), 또는 이들의 조합(펌웨어 및/또는 소프트웨어 중 하나 이상과 잠재적으로 결합되는 하드웨어)으로 구현될 수도 있다.
영구적 저장 펜스 버퍼(446)는, 영구적 저장 펜스 명령어와 관련되는 데이터(예를 들면, 저장 동작(228) 또는 저장 명령어(208E)로부터의 데이터)를 일시적으로 버퍼링하도록 또는 저장하도록 동작한다. 본 발명의 범위는 영구적 저장 펜스 버퍼를 위한 임의의 특정한 타입의 메모리로 제한되지 않는다. 예를 들면, 정적 랜덤 액세스 메모리(static random access memory; SRAM), 프로세서 캐시를 구현하기 위해 사용되는 메모리의 타입, 및 등등과 같은 다양한 타입의 휘발성 메모리가 적절하다. 사실상, 프로세서와 함께 다이 상에 제조될 수 있는 임의의 타입의 메모리 또는 스토리지 디바이스가 잠재적으로 적절하다. 몇몇 실시형태에서, 영구적 저장 펜스 버퍼는, 옵션적으로, 프로세서 캐시와 유사하게 편재될 수도 있고 복수의 캐시 라인(448)을 구비할 수도 있다. 도시되는 바와 같이, 영구적 저장 펜스 버퍼는 캐시 라인 0(448-0), 캐시 라인 L(448-L), 내지 캐시 라인 N(448-N)을 구비할 수도 있는데, 여기서 N은 특정한 구현예에 적절한 임의의 소망의 수를 나타낼 수도 있다. 몇몇 실시형태에서, 대략 약 4개에서부터 수백 개까지의, 또는 약 8개에서부터 약 128개까지의 캐시 라인이 존재할 수도 있지만, 그러나 본 발명의 범위는 그렇게 한정되지는 않는다.
몇몇 실시형태에서, 프로세서 캐시(들)와는 대조적으로, 영구적 저장 펜스 버퍼는, 옵션적으로, 기록 전용이지만 그러나 보통은 판독불가능할 수도 있다. 예를 들면, 프로세서(예를 들면, 코어)는, 보통은, 메모리 명령어로부터 일반적인 유저 레벨 로드를 수행하여 영구적 저장 펜스 버퍼로부터 데이터를 로드 또는 판독할 수 없을 수도 있다. 프로세서는, 예를 들면, 디버깅 또는 테스팅 동안(예를 들면, 내장 자체 테스트(built-in self test; BIST)를 통해), 소정의 제한된 환경 하에서, 영구적 저장 펜스 버퍼의 컨텐츠를 판독할 수 있을 수도 있다는 것이 인식되어야 한다. 몇몇 실시형태에서, 영구적 저장 펜스를 구현하기 위해 사용될 수도 있는 캐시(들)(418)에서 캐시 일관성을 유지하는 것에 관련되는 동작 이외에는 영구적 저장 펜스 버퍼에서 캐시 일관성이 유지되지 않을 수도 있다. 예를 들면, 캐시(들)는 MESI 프로토콜을 구현할 수도 있지만(예를 들면, 캐시의 캐시 라인 각각은 두 개의 MESI 비트를 구비할 수도 있지만), 그러나 영구적 저장 펜스 버퍼는 그렇지 않을 수도 있다(예를 들면, 버퍼의 캐시 라인은 두 개의 MESI 비트를 구비하지 않을 수도 있다).
캐시 일관성 모듈(416)은 영구적 저장 펜스 버퍼 관리 유닛(444)과 커플링된다. 몇몇 실시형태에서, 캐시 일관성 모듈이 프로세서의 하나 이상의 캐시(418)로부터 캐시 라인을 축출할(evict) 것을, 플러싱할 것을, 또는 다르게는 제거할 것을 결정하는 경우, 캐시 일관성 모듈은, 캐시(들)로부터 캐시 라인을 실제로 플러싱하거나 또는 제거하기 이전에, 영구적 저장 펜스 버퍼 관리 유닛으로 표시, 통지, 또는 다른 신호(450)(예를 들면, 캐시 라인 신호를 플러싱하려는 의도)를 제공할 수도 있다. 신호(450)는, 캐시 라인이 캐시(들)로부터 플러싱 또는 다르게는 제거될 것이다는 것을 관리 유닛에게 나타낼 수도 있거나, 통지할 수도 있거나, 전달할 수도 있거나, 또는 다르게는 시그널링할 수도 있고, 캐시(들)로부터의 캐시 라인이 플러싱되어 영구적으로 되기 이전에, 관리 유닛이 버퍼로부터 하나 이상의 캐시 라인을 플러싱하는 것 또는 다르게는 제거하는 것 또는 영구적 메모리에 저장하는 것을 허용하는 것을 도울 수도 있다. 몇몇 실시형태에서, 영구적인 저장 펜스를 유지하기 위해, 영구적 저장 펜스 버퍼 관리 유닛은, 캐시 라인(예를 들면, 캐시 라인 L(448-L))을 영구적 저장 펜스 버퍼로부터 영구적 스토리지로 플러싱하거나, 축출하거나 또는 다르게는 제거하기 위해, 버퍼 플러싱, 축출, 또는 다른 제거 동작(452)을 수행할 수도 있거나 또는 저장할 수도 있다. 몇몇 실시형태에서, 프로세서 및/또는 메모리 서브시스템 모듈은, 신호(450)와 관련되는 캐시 플러싱 또는 다른 캐시 라인 제거 동작(454)이 캐시(들)(418)부터 캐시 라인을 영구적 스토리지로 플러싱하도록 수행되기 이전에, 관련된 영구적 저장 펜스 명령어에 응답하여, 이것이 발생하는 것을 보증 및/또는 보장 및/또는 야기할 수도 있다. 버퍼는, 캐시 라인이 축출 또는 플러싱될 것이다는 캐시 일관성 모듈로부터의 신호에 기초하여 백그라운드에서 영구적 메모리로 투명하게 플러싱될 수도 있다. 몇몇 실시형태에서, 전체 영구적 저장 펜스 버퍼는, 옵션적으로, 임의의 캐시 라인이 캐시(들)로부터 영구적 스토리지로 플로싱되는 경우 영구적 스토리지로 플러싱될 수도 있다. 이것은 상대적으로 간단한 구현예를 제공하는 것을 도울 수도 있다. 다른 실시형태에서, 개개의 대응하는 캐시 라인이 캐시(들)로부터 플러싱되는 것에 기초하여 버퍼의 개개의 캐시 라인이 영구적 스토리지로 선택적으로 플러싱되는 것을 허용하기 위해, 추가적인 정보가 영구적 저장 펜스 버퍼에 옵션적으로 저장될 수도 있다.
몇몇 실시형태에서, 영구적 저장 펜스 버퍼의 데이터는, 캐시 라인이 캐시(들)로부터 영구적 스토리지로 플러싱 또는 제거되려고 하기 직전까지 및/또는 후속하는 저장 동작이 영구적 스토리지에 영구적으로 저장되게 되려고 하기 직전까지, 영구적 스토리지로 플러싱되거나 또는 제거될 필요가 없을 수도 있다. 일반적으로, 필요로 되는 경우를 제외하고 버퍼의 플러싱을 방지하는 것은, 상대적으로 긴 레이턴시 메모리 액세스를 방지하는 것을 돕는다. 유익하게는, 영구적 저장 펜스 버퍼는, 영구적 저장 펜스 명령어에 대응하는 데이터가 영구적 스토리지에 저장되어 영구적으로 되는 것을 대기할 필요성을 방지하는 것을 도울 수도 있다. 이러한 데이터가 영구적 스토리지에 직접적으로 저장되었다면, 일반적으로 훨씬 더 긴 레이턴시 동작이 일반적으로 필요로 될 것이다(예를 들면, 영구적 메모리에 데이터를 저장하는 것은 종종 대략 수십 내지 수백 클록 싸이클을 필요로 한다). 몇몇 실시형태에서, 데이터는 단지 수 클록 싸이클(예를 들면, 단지 약 5 클록 싸이클) 내에 영구적 저장 펜스 버퍼에 저장될 수도 있다.
몇몇 실시형태에서, 상이한 영구적 저장 펜스 명령어 사이에 영구적인 순서 요건이 옵션적으로 존재하지 않을 수도 있다. 몇몇 실시형태에서, 이것은, 옵션적으로, 다수의 상이한 영구적 저장 펜스 명령어에 대응하는 데이터가 영구적 저장 펜스 버퍼의 동일한 캐시 라인에 저장되는 것을 허용하는 것에 의해 영구적 저장 펜스 명령어의 더욱 더 효율적인 구현을 허용하는 것을 도울 수도 있다.
도 5는, 상이한 영구적 저장 펜스 명령어(511-1, 511-2)에 대응하는 데이터(560-1, 560-2)를 구비하는 영구적 저장 펜스 버퍼에 대한 캐시 라인(548)의 예시적인 실시형태, 및 하나 이상의 인터커넥트(520) 상의 동일한 신호 또는 싸이클에서 영구적 메모리(524)에 대한 캐시 라인의 캐시 라인 저장 동작(552)의 예시적인 실시형태의 블록도이다. 제1 영구적 저장 펜스 명령어(511-1)는, 캐시 라인에 저장될 수도 있는 제1의 관련된 또는 대응하는 데이터(560-1)를 구비할 수도 있다. 마찬가지로, 제2 영구적 저장 펜스 명령어(511-2)는, 데이터(560-1)와 동일한 시간에 캐시 라인에 저장될 수도 있는 제2의 관련된 또는 대응하는 데이터(560-2)를 구비할 수도 있다. 몇몇 실시형태에서, 이것은 영구적 저장 펜스 버퍼에서의 기록 결합 동작을 통해 수행될 수도 있다. 즉, 영구적 저장 펜스 버퍼는 기록 결합 버퍼를 나타낼 수도 있다.
차후, 적절한 시간에 (예를 들면, 캐시 일관성 모듈로부터 수신되는 캐시 라인 신호를 플러싱하는 의도에 기초하여), 캐시 라인(548)은 플러싱, 축출, 또는 다르게는 제거될 수도 있거나 또는 캐시 라인 저장 동작(552)을 통해 영구적 스토리지(524)에 저장될 수도 있다. 캐시 라인 저장 동작은, 상이한 영구적 저장 펜스 명령어(511-1, 511-2)에 대응하는 제1 데이터(560-1) 및 제2 데이터(560-2)를 구비하는 캐시 라인을 저장할 수도 있다. 몇몇 실시형태에서, 캐시 라인 저장 동작은 하나 이상의 인터커넥트(520) 상의 하나 이상의 싸이클 또는 신호의 단일의 및/또는 공통 세트에서 수행될 수도 있다(예를 들면, 데이터(560-1 및 560-2) 둘 다는 하나 이상의 버스 싸이클(들)의 동일한 세트 상에서 진행한다). 즉, 다수의 상이한 영구적 저장 펜스 명령어에 대응하는 데이터는, 동일한 버스 또는 인터커넥트 싸이클에서 영구적 메모리에 기록 또는 다르게는 저장될 수도 있다. 간략화를 위해, 이 예에서는 단지 두 개의 상이한 영구적 저장 펜스 명령어로부터의 데이터가 설명되지만, 몇몇 경우에서는, 세 개 이상의 상이한 영구적 저장 펜스 명령어로부터의 데이터가 동일한 캐시 라인에서 잠재적으로 결합될 수도 있다. 유익하게는, 동일한 캐시 라인의 상이한 영구적 저장 펜스 명령어에 대응하는 데이터를 결합하는 그리고 영구적 메모리에 대해 단일의 캐시 라인 기록을 수행하는 이러한 능력은, 영구적 메모리에 대한 하나 이상의 상대적으로 긴 레이턴시 저장을 방지하거나 또는 제거하는 것을 도울 수도 있다. 게다가, 이것은 또한, 영구적 메모리로 이어지는 하나 이상의 인터커넥트 상에서의 대역폭의 양을 감소시키는 것을 도울 수도 있다.
프로세서 및/또는 메모리 서브시스템 유닛은 영구적 저장 펜스 버퍼에 대한 데이터의 순차적 저장을 수행할 수도 있고, 데이터가 영구적 저장 펜스 버퍼로부터 후속하여 플러싱되거나 또는 제거되는 경우, 동일한 캐시 라인의 모든 데이터는 영구적 스토리지에 원자적으로(atomically) 기록될 수도 있다. 순차적인 것에 의해, 데이터가, 대응하는 영구적 저장 펜스 명령어의 원래의 프로그램 순서와 동일한 순서로 영구적 저장 펜스 버퍼에 저장될 수도 있다는 것이 의미된다. 몇몇 실시형태에서, 언더라인의 영구적 메모리 시스템에서 메모리 병렬화를 완전히 활용하기 위해, 상이한 캐시 라인이 영구적 저장 펜스 버퍼로부터 비순차적으로 플러싱 또는 제거될 수도 있다. 비순차적인 것에 의해, 데이터가, 대응하는 영구적 저장 펜스 명령어의 원래의 프로그램 순서와는 상이한 순서로 영구적 저장 펜스 버퍼로부터 플러싱 또는 제거될 수도 있다는 것이 의미된다.
몇몇 실시형태에서, 본원에서 개시되는 명령어 및 프로세서는 로그 우선 기록의 효율성을 향상시키기 위해 사용될 수도 있다. 로그 우선 기록은, 데이터를 수정할 때, 원자성, 및 영속성/영구성을 달성하기 위한 공지의 기술이다. 도 6은 데이터(664) 및 우선 기록 로그(662)를 구비하는 영구적인 메모리(624)의 실시형태의 블록도이다. 영구적 메모리는 앞서 설명된 타입의 영구적 메모리 중 임의의 것을 나타낼 수도 있다. 데이터는 컴퓨터 시스템, 데이터베이스, 또는 등등에서 사용되는 다양하고 상이한 타입의 데이터를 나타낼 수도 있다. 적절한 데이터의 예는, 파일, 레코드, 데이터 구조, 테이블, 데이터베이스 레코드, 이미지, 비디오, 및 등등을 포함하지만, 그러나 이들로 한정되지는 않는다. 우선 기록 로그는, 일반적으로, 데이터와는 상이한 영구적 메모리의 영역에 위치된다. 예시에서, 우선 기록 로그가, 옵션적으로는, 데이터와는 상이한 영구적 스토리지(예를 들면, 상이한 디스크) 상에 위치 또는 저장될 수도 있다는 것을 나타내기 위해, 점선이 사용된다. 이것은 또한, (예를 들면, 디스크 오류의 경우에) 데이터 영속성/영구성을 보장하는 것을 도울 수도 있지만, 그러나 필수적인 것은 아니다.
로그 우선 기록에서, 데이터 및/또는 데이터에 대한 수정은, 데이터에 대한 수정이 영구적 메모리의 데이터를 덮어 실제로 저장되기 이전에, 우선 기록 로그에 기록될 수도 있다. 예를 들면, 데이터의 주어진 조각(670)이 변경 또는 수정되기 이전에, 데이터의 주어진 조각의 수정되지 않은 사본(668)이 우선 기록 로그(662)에 저장될 수도 있다. 이 방식에서, 데이터의 주어진 조각이 프로세서 내에서 수정되고 있는 동안 데이터의 주어진 조각이 비영구적(예를 들면, 휘발성) 메모리(예를 들면, 프로세서 캐시)로부터 손실되게 할 수 있는 전력의 손실 또는 다른 이벤트가 발생하더라도, 데이터의 주어진 조각의 사본은 이벤트가 발생한 이후 우선 기록 로그로부터 복구될 수도 있다. 유익하게는, 이것은, 전력 오류 또는 다양한 다른 잠재적으로 재난적인(disastrous) 에러에도 불구하고 수정되고 있는 동안 데이터의 주어진 조각이 손실되는 것을 방지하는 것을 도울 수도 있다. 추가로 예시하기 위해, 컴퓨터 시스템이 전력 손실 또는 재난적 에러를 경험할 때 데이터의 세트를 수정하는 동작을, 프로그램이 수행하고 있는 중에 있다면, 재시동 및 재부팅시, 프로그램은, 일반적으로, 동작이 완전히 완료되었는지, 부분적으로 완료되었는지, 또는 완전히 실패했는지의 여부를 아는 것을 필요로 한다. 로그 우선 기록이 사용되었다면, 에러가 발생하기 이전에 동작의 어떤 부분이 실제로 완료되었는지를 결정하기 위해 프로그램은 우선 기록 로그를 검사할 수 있다. 프로그램은, 동작을 어떻게 진행할지를 및/또는 동작을 어떻게 계속할지를 또는 어떻게 재시작할지를 결정하기 위해 이 정보를 사용할 수도 있다. 예를 들면, 프로그램은, 우선 기록 로그로부터 결정되는 바와 같은 제1 미완성 수정으로 시작하는 동작을 재시도할 수도 있다.
로그 우선 기록은, 종종, 데이터의 다수의 상이한 조각이 동일한 트랜잭션 내에서 수정되는 트랜잭션으로서 구현된다. 데이터의 상이한 조각 모두가 성공적으로 로깅되고, 수정되고, 데이터의 수정된 조각이 영구적 메모리에 저장된 이후에만, 트랜잭션이 성공적으로 완료된다. 일반적으로, 트랜잭션이 완전히 성공적으로 완료되는 경우에만, 트랜잭션이 "커밋된다(committed)". 트랜잭션을 커밋하는 것은 기본적으로, 전체 트랜잭션이 성공적으로 완료되었다는 것을 선언하고 및/또는 시도된 수정 모두가 성공적으로 완료되었고 영구적 메모리에 저장되었다는 것을 나타낸다. 이때, 우선 기록 로그에 저장 또는 보존되는 데이터는 더 이상 필요하지 않은데, 재난적 이벤트가 발생하는 경우에도, 수정된 데이터 모두가 이미 영구적 메모리에 저장되었기 때문이다. 로그 우선 기록은 변경 또는 수정 중에 데이터의 주어진 세트에 영구성 및/또는 영속성을 제공하는데, 데이터의 주어진 세트에 대해 임의의 변경이 이루어지기 전에 데이터의 주어진 세트의 사본이 영구적 메모리에 저장되기 때문이다. 또한, 로그 우선 기록은 원자성을 제공하는데, 데이터의 주어진 세트가 전체 트랜잭션을 커밋하는 것 또는 커밋하지 않는 것 중 어느 하나에 의해 트랜잭션 동안 완전히 업데이트되는 것 또는 업데이트되지 않는 것 중 어느 하나로 되기 때문이다.
로그 우선 기록에서, 두 개의 영구성 순서가 일반적으로 유지되어야 한다. 먼저, 로그 영구성 순서가 일반적으로 유지되어야 한다. 로그 영구성 순서에 따르면, 수정되어야 하는 원래의 데이터는, 대응하는 수정된 데이터가 영구적 스토리지에 저장되기 이전에 영구적 스토리지의 우선 기록 로그에 영구적으로 저장되어야 한다. 다르게는, 수정된 데이터가 영구적 스토리지에서 원래의 데이터를 덮어 저장되고, 수정될 원래의 데이터가 캐시(들)에 있고 아직 영구적 스토리지의 우선 기록 로그에 저장되지 않은 경우, 재난적 이벤트(예를 들면, 전력 오류)가 발생하면, 수정될 데이터는 보존되지 않고 손실될 수도 있고 그에 의해 트랜잭션의 성공적이지 않은 완료의 경우에 복구를 못하게 된다. 일반적으로 유지되어야 하는 제2 영구성 순서는 커밋 영구성 순서이다. 커밋 영구성 순서에 따르면, 트랜잭션에서의 모든 수정된 데이터는, 커밋 표시가 영구적 스토리지의 우선 기록 로그에 영구적으로 저장되기 이전에, 영구적 스토리지에 영구적으로 저장되어야 한다. 다르게는, 몇몇 수정된 데이터가 캐시(들)에 저장되는 동안 커밋 표시가 영구적 스토리지의 우선 기록 로그에 영구적으로 저장되면, 이 수정된 데이터는, 트랜잭션이 성공적으로 완료했다는 것을 우선 기록 로그의 커밋 표시가 나타낼지라도, 재난적 이벤트 동안 손실될 수도 있다. 하나의 도전과제는, 적절한 예방책이 취해지지 않으면, 하나 이상의 프로세서 캐시에서의 데이터의 캐싱이 두 개의 영구성 순서 중 하나 이상을 위반할 수도 있다는 것이다. 캐시는 일반적으로 휘발성 또는 다르게는 비영구적 스토리지로 구현되고 재난적 이벤트에 취약하다.
도 7은, 본원에서 개시되는 영구적 저장 펜스 명령어 없이 수행되는 로그 우선 기록의 하나의 가능한 방법(772)의 블록 흐름도이다. 블록(773)에서, 수정 또는 변경될 영구적 스토리지의 데이터가 영구적 스토리지의 우선 기록 로그에 저장된다. 하나 이상의 캐시가 프로세서에 존재하는 것으로 인해, 수정될 데이터는 실제로 우선 기록 로그에 바로 저장되지 않을 수도 있고 대신 이들 하나 이상의 캐시에 캐싱될 수도 있다. 이들 프로세서 캐시는 비영구적 스토리지를 나타내며 소정의 이벤트가 발생하는 경우(예를 들면, 전력의 손실, 등등) 자신의 컨텐츠를 잃어버릴 수도 있다.
블록(774)에서, 수정될 데이터는 하나 이상의 캐시로부터 영구적 스토리지로 제거된다(예를 들면, 플러싱된다). 예를 들면, 이것은 캐시 라인 플러싱 타입의 명령어를 통해 수행될 수도 있다. 이것은 일반적으로 로그 영구성 순서를 만족시키기 위해 필요로 된다. 이 접근방식에서의 하나의 단점은, 너무 많은 시간이 걸리고 및/또는 영구적 메모리에 기록 또는 저장하는 데 필요로 되는 시간(예를 들면, 대략 수십 내지 수백 클록 싸이클)으로 인해 높은 레이턴시를 갖는다는 것이다.
그 다음, 블록(775)에서, 수정될 데이터가 실제로 수정될 수도 있다. 블록(775)에서의 데이터의 수정은, 블록(774)에서, 수정될 데이터가 하나 이상의 캐시로부터 영구적 스토리지로 제거되고, 그에 의해, 수정될 데이터의 사본이 프로세서 캐시에 저장되는 대신 영구적 스토리지에 영구적으로 저장되는 것을 보장한 이후에 발생한다는 것을 유의한다. 이것은, 앞서 설명된 바와 같이, 데이터 영구성/영속성을 보장하는 것을 돕는다.
블록(776)에서, 수정될 데이터가 더 존재하는지 또는 그렇지 않은지의 여부에 대한 결정이 이루어진다. 수정될 데이터가 더 존재하면(즉, 블록(776)에서의 결정이 "예"이면), 방법은 블록(773-775)을 재방문할 수도 있다. 역으로, 이 트랜잭션에서 수정될 데이터가 더 이상 존재하지 않으면(즉, 블록(776)의 결정이 "아니오"이면), 방법은 블록(777)으로 진행할 수도 있다. 블록(773)에서 수정될 데이터가 우선 기록 로그에 저장되는 시간과 블록(775)에서 데이터가 실제로 수정되는 시간 사이에서 수정되는 데이터의 각각의 조각의 경우, 수정될 데이터는 블록(775)에서 캐시(들)로부터 영구적 스토리지로 플러싱되는 것을(즉, 캐시 대신 영구적 스토리지의 우선 기록 로그에 실제로 저장되는 것을) 필요로 한다는 것을 유의한다. 이들 모든 플러싱에서의 단점은, 수행에 너무 많은 시간이 걸린다는 것이다.
블록(777)에서, 모든 수정된 데이터는 캐시(들)로부터 영구적 스토리지로 제거된다(예를 들면, 플러싱된다). 이것은, 블록(775)에서 데이터의 수정이, 수정된 데이터를 영구적 스토리지에 실제로 저장하지 않고 대신 캐시(들)에 저장할 수도 있기 때문에, 수행된다. 이것은, 일반적으로, 커밋 영구성 순서를 만족시키기 위해, 커밋 표시가 영구적 스토리지의 우선 기록 로그에 저장되기 이전에 행해지는 것을 필요로 한다.
그 다음, 블록(778)에서, 커밋 표시는 우선 기록 로그에 저장될 수도 있다. 커밋 표시는, 앞서 설명된 바와 같이, 트랜잭션이 성공적으로 완료되었다는 것을 나타낼 수도 있다. 블록(779)에서, 커밋 표시는 캐시(들)로부터 영구적 스토리지로 제거될 수도 있다(예를 들면, 플러싱될 수도 있다).
커밋 표시가 우선 기록 로그에 기록되기 이전에 재난적 이벤트가 발생하면, 트랜잭션의 모든 부분적 데이터 업데이트는 우선 기록 로그의 원래의 데이터를 사용하여 그들의 원래의 데이터로 복구될 수도 있다. 역으로, 커밋 표시가 우선 기록 로그에 저장된 이후 재난적 이벤트가 발생하면, 모든 데이터 업데이트가 성공적으로 완료되었기 때문에, 복구에 대한 필요성은 존재하지 않는다.
앞서 설명된 바와 같이, 블록(775)에서의 각각의 데이터 업데이트 이전에 블록(774)에서의 캐시(들)로부터의 수정될 데이터의 제거(예를 들면, 플러싱)는, 과도한 양의 시간을 필요로 하는 경향이 있다. 몇몇 실시형태에서, 업데이트된 데이터가 통상적으로 캐시에 머무르기 때문에, 수정된 데이터가 캐시(들)로부터 영구적 스토리지로 실제로 다시 저장될 때까지, 수정될 데이터를 캐시(들)로부터 영구적 스토리지로 제거할(예를 들면, 플러싱할) 필요성이 존재하지 않을 수도 있는데, 수정된 데이터가 캐시(들)로부터 영구적 스토리지로 실제로 다시 저장되는 것은, 많은 구현예에서, (예를 들면, 프로그램에서의 데이터 위치로 인해) 상대적으로 드물다. 이러한 구현예에서, 블록(774) 데이터의 이러한 제거(예를 들면, 플러싱)를 생략하는 것에 의해, 상당히 더 효율적인 로그 우선 기록이 달성될 수도 있다. 불행히도, 캐시(들)로부터 영구적 스토리지로의 수정된 데이터의 라이트 백(write-back)은, 일반적으로, 하드웨어에 의해(예를 들면, 캐시 일관성 모듈에 의해) 수행되고 따라서 많은 구현예에서 소프트웨어의 제어 하에 있지 않다. 몇몇 적절한 구현예는 대안적으로 소프트웨어 제어 캐시 일관성을 수행할 수도 있다는 것을 유의한다.
도 8은 영구적 저장 펜스 명령어의 실시형태와 함께 수행되는 로그 우선 기록의 방법(880)의 예시적인 실시형태의 블록 흐름도이다. 몇몇 실시형태에서, 수정 또는 변경될 영구적 스토리지의 데이터는, 블록(881)에서, 영구적 저장 펜스 명령어의 실시형태를 통해(또는 영구적 저장 펜스 명령어의 실시형태와 연계하여) 영구적 스토리지의 우선 기록 로그에 저장될 수도 있다. 앞서 설명된 바와 같이, 영구적 저장 펜스 명령어 자체가 데이터를 저장할 수도 있거나, 또는 대응하는 별개의 저장 명령어가 데이터를 저장할 수도 있다. 몇몇 실시형태에서, 데이터는 처음 및/또는 일시적으로 영구적 저장 펜스 버퍼(예를 들면, 버퍼(446))에 저장될 수도 있다. 몇몇 실시형태에서, 영구적 저장 펜스 명령어는 비일시적 명령어일 수도 있고 데이터는 프로세서 캐시를 바이패스할 수도 있다. 이것은, 데이터가 캐시(들)에서 공간을 차지하는 것 및/또는 캐시(들)를 오염시키는 것을 방지하는 것을 도울 수도 있다.
그 다음, 블록(882)에서, 수정될 데이터가 실제로 수정될 수도 있다. 이 수정된 데이터는 처음 및/또는 일시적으로 프로세서 캐시에 캐싱될 수도 있다.
유의미하게는, 블록(883)에서, 프로세서는, 영구적 저장 펜스 명령어에 응답하여, 수정된 데이터가 캐시(들)로부터 제거되어(예를 들면, 플러싱되어, 축출되어, 등등으로 되어) 영구적 스토리지에 영구적으로 저장되기 이전에, 수정될 데이터가 제거되어(예를 들면, 플러싱되어, 축출되어, 등등으로 되어) 영구적 스토리지에 영구적으로 저장되는 것을 보장, 보증, 또는 강제할 수도 있다. 유익하게는, 도 7의 블록(774)에서 수행되었기 때문에, 수정될 데이터를 캐시(들)로부터 영구적 스토리지로 플러싱 또는 다르게는 제거할 필요가 없다. 유의미하게는, 이것은, 수정되는 데이터의 각각의 조각에 대한 상대적으로 큰 레이턴시 메모리 액세스 동작(예를 들면, 수십 내지 수백 클록 싸이클)을 방지하는 것을 도울 수도 있다. 영구적 펜스 명령어는, 로그 영구성 순서가 여전히 유지되는 것을 보장할 수도 있다. 많은 경우에, 수정된 데이터가 영구적 스토리지에 영구적으로 저장되는 경우가 아니면 또는 저장될 때까지 수정될 데이터는 영구적 스토리지에 실제로 영구적으로 저장되지 않을 수도 있다는 것을 유의할 가치가 있다. 수정된 데이터가 영구적 스토리지에 저장되지 않으면, 명령어는, 수정될 데이터가 영구적 스토리지에 저장된다는 것을 보장하지 않는다.
블록(884)에서, 수정될 데이터가 더 존재하는지 또는 그렇지 않은지의 여부에 대한 결정이 이루어진다. 수정될 데이터가 더 존재하면(즉, 블록(884)에서의 결정이 "예"이면), 방법은 블록(881-883)을 재방문할 수도 있다. 역으로, 이 트랜잭션에서 수정될 데이터가 더 이상 존재하지 않으면(즉, 블록(884)의 결정이 "아니오"이면), 방법은 블록(885)으로 진행할 수도 있다.
블록(885)에서, 모든 수정된 데이터는 캐시(들)로부터 영구적 스토리지로 제거된다(예를 들면, 플러싱된다). 이것은, 블록(882)에서 데이터의 수정이, 수정된 데이터를 영구적 스토리지에 실제로 저장하지 않고 대신 캐시(들)에 저장할 수도 있기 때문에, 수행된다. 그 다음, 블록(886)에서, 커밋 표시는 우선 기록 로그에 저장될 수도 있다. 블록(887)에서, 커밋 표시는 캐시(들)로부터 영구적 스토리지로 제거될 수도 있다(예를 들면, 플러싱될 수도 있다).
유익하게는, 영구적 저장 펜스 명령어의 사용은, 수정되는 데이터의 각각의 조각에 대한 상대적으로 큰 레이턴시 메모리 액세스 동작을 방지하는 것을 도울 수도 있다. 몇몇 실시형태에서, 모든 수정된 데이터가 캐시(들)에 적합될 수 있거나 또는 저장될 수 있으면, 알고리즘은, 커밋 시간에 모든 수정된 데이터를 캐시(들)로부터 영구적 스토리지로 플러싱하기 이전에, 데이터를 영구적 저장 펜스 버퍼로부터 영구적 스토리지로 한 번만 플러싱 또는 제거할 수도 있다. 또한, 몇몇 실시형태에서, 영구적 저장 펜스 버퍼가 상이한 영구적 저장 펜스 명령어에 대응하는 결합 데이터를 동일한 캐시 라인에서 기록할 수 있으면, 이것은 또한, 영구적 스토리지에 대한 어떤 긴 레이턴시 데이터 기록을 방지하는 것을 도울 수도 있다.
몇몇 실시형태에서, 소프트웨어는 캐시 라인 단위로 시퀀스 번호를 갖는 우선 기록 로그를 구현할 수도 있다. 영구적 저장 펜스 버퍼로부터 캐시 라인의 플러싱 또는 제거 동안 시스템 고장의 경우, 정확한 시퀀스 번호를 갖는 연속하는 로그만이 데이터를 복구하는 데 사용될 수도 있다. 예를 들면, 시퀀스 번호 1, 2, 3, 및 5가 존재할 수도 있지만, 시퀀스 번호 4는 누락될 수도 있다. 복구를 행할 때, 시퀀스 번호는, 복구하는 데 어떤 것이 필요로 되고 어떤 것이 필요로 되지 않는지에 관한 정보를 갖는다.
상기의 설명이 로그 우선 기록을 강조하였지만, 본 발명의 범위는 그렇게 제한되지 않는다는 것이 인식되어야 한다. 본원에서 설명되는 영구적 저장 펜스 명령어는 범용 명령어이며 다양하고 상이한 목적을 위해 사용될 수도 있다. 또한, 로그 우선 기록과 유사한 또는 관련된 기술도 또한 본원에서 설명되는 영구적 저장 펜스 명령어로부터 이익을 얻을 수도 있다. 예를 들면, 데이터가 수정되기 이전에 데이터의 사본을 상이한 영구적 메모리 위치에 저장하는 다른 기술, 업데이트 동안 데이터의 원자성 및 영속성을 제공하는 다른 기술, 및 등등이 잠재적으로 이익을 얻을 수도 있다. 또한 이익을 얻을 수도 있는 다른 기술의 예는, 섀도우 페이징, 파일 시스템 업데이트에서의 저널링(journaling), 및 등등을 포함하지만, 그러나 이들로 한정되지는 않는다.
도 9는 영구적 저장 펜스 버퍼의 실시형태에 대한 적절한 위치의 다양한 예를 예시하는 블록도이다. 컴퓨터 시스템은, 통상적으로, 영구적 스토리지로의 저장 도중에 데이터가 거치게 되는 다수의 상이한 타입의 컴포넌트를 구비한다. 예시된 예에서, 이들 컴포넌트는 저장 버퍼(992), 캐시 또는 캐시 계층(918)의 하나 이상의 레벨(예를 들면, L1 캐시(993) 및 L2 캐시(994)를 포함함), 메모리 컨트롤러(996), 및 마지막으로 영구적 스토리지(924)를 포함한다. 저장은, 프로세서 파이프라인과 영구적 스토리지 사이의 이들 또는 다른 컴포넌트 또는 하드웨어 구조체 중 임의의 것에서 잠재적으로 캐싱 또는 버퍼링될 수도 있다.
영구적 저장 펜스 버퍼는 이들 컴포넌트 또는 하드웨어 구조체 중에서 및/또는 프로세서 파이프라인과 영구적 스토리지 사이의 다양하고 상이한 거리에서 다양하게 위치될 수도 있다. 특정한 위치에 따라, 그 하드웨어 구조체로부터 플러싱되는 또는 제거되는 데이터는, 영구적 저장 펜스 버퍼로부터의 데이터의 플러싱 또는 제거를 유도할 수도 있다. 일반적으로, 영구적 저장 펜스 버퍼가 프로세서 파이프라인에 더 가까울수록, 프로그램 순서에서 후속하는 비영구적 저장 펜스 명령어가 데이터를 캐시에 저장할 수 있기 이전에 영구적 저장 펜스 버퍼에 저장되는 데 데이터가 필요로 하는 영구적 저장 펜스 명령어 레이턴시는 더 낮다. 한편, 영구적 저장 펜스 버퍼가 프로세서 파이프라인에 더 가까울수록, 영구적 저장 펜스 버퍼 플러싱 동작은 더 빈번할 것이고(예를 들면, 버퍼 이전에 캐싱이 거의 없기 때문), 이러한 영구적 저장 펜스 버퍼 플러싱 동작의 레이턴시는 더 크다(예를 들면, 영구적 저장 펜스 버퍼로부터 영구적 스토리지까지 더 긴 경로가 존재하기 때문).
몇몇 실시형태에서, 참조 부호 A에서 도시되는 바와 같이, 영구적 저장 펜스 버퍼는, 저장 버퍼(992)의 출력과 영구적 스토리지(924)로의 입력 사이의 다양한 장소에 위치 또는 배치될 수도 있다. 몇몇 실시형태에서, 참조 부호 B에서 도시되는 바와 같이, 영구적 저장 펜스 버퍼는, 옵션적으로, 프로세서 파이프라인에 가장 가까운 제1 레벨 캐시(예를 들면, L1 캐시(993))의 출력과 메모리 컨트롤러(996)의 출력 사이의 다양한 장소에 위치 또는 배치될 수도 있다. 몇몇 실시형태에서, 참조 부호 C에서 도시되는 바와 같이, 영구적 저장 펜스 버퍼는, 옵션적으로, 최종 레벨 캐시(예를 들면, L2 캐시(994) 또는 대안적으로 L3 캐시)의 출력과 메모리 컨트롤러의 입력 사이에 위치 또는 배치될 수도 있다. 몇몇 실시형태에서, 참조 부호 D에서 도시되는 바와 같이, 영구적 저장 펜스 버퍼는, 옵션적으로, 두 개의 상이한 레벨의 캐시 사이에(예를 들면, L1 캐시와 L2 캐시 사이에) 위치 또는 배치될 수도 있다. 일 양태에서, L1 캐시는 제1 코어(990-1)에 전용될 수도 있고, 반면 L2 캐시는 제1 코어 및 제2 코어(990-2)에 의해 공유될 수도 있다. 몇몇 실시형태에서, 참조 부호 E에서 도시되는 바와 같이, 영구적 저장 펜스 버퍼는, 옵션적으로, 메모리 컨트롤러 내에 위치 또는 배치될 수도 있다. 본 발명의 범위는 영구적 저장 펜스 버퍼의 임의의 공지의 위치로 제한되지 않는다. 영구적 저장 펜스 버퍼의 소망의 위치는, 기술 분야의 숙련된 그리고 본 개시의 이익을 갖는 자에 의한 과도한 실험 없이, 영구적 저장 펜스 명령어 레이턴시, 영구적 저장 펜스 버퍼 플러싱 오버헤드, 또는 다른 고려사항의 상대적 절충에 기초하여 특정한 구현예의 요구를 만족시키도록 결정될 수도 있다.
멀티 코어 시스템 상에서, 다른 설계 선택은, 영구적 저장 펜스 버퍼를 공유 컴포넌트 또는 하드웨어 구조체 또는 코어 마다의 사적인 또는 전용의 컴포넌트 또는 하드웨어 구조체에 배치하는 것이다. 사적인/전용 하드웨어 구조체는 프로세스 파이프라인에 더 가깝고, 공유된 하드웨어 구조체는 영구적 스토리지에 더 가깝다. 영구적 저장 펜스 버퍼를 공유된 하드웨어 구조체에 배치하는 것은, 상이한 소프트웨어 쓰레드로부터의 데이터 업데이트 변경으로 인해 더 많은 영구적 저장 펜스 버퍼 플러싱을 도입하는 경향이 있을 수도 있다. 한편, 영구적 저장 펜스 버퍼를 사적인 하드웨어 구조체에 배치하는 것은, 소프트웨어 쓰레드의 오퍼레이팅 시스템 컨텍스트 전환에서 영구적 저장 펜스 버퍼를 상이한 코어로의 플러싱하는 것을 수반하는 경향이 있을 수도 있다. 그것은, 오퍼레이팅 시스템 컨텍스트 전환으로 이어질 수도 있는 모든 하드웨어 인터럽트 및/또는 예외(exception)에 대해 영구적 저장 펜스 버퍼를 플러싱하는 하드웨어를 수반할 수도 있다. 몇몇 실시형태에서, 영구적 저장 펜스 버퍼는, 옵션적으로, 캐시 라인 어드레스 해싱에 기초하여 복수의 슬라이스로 구획될 수도 있다. 이것은, 임의의 캐시 슬라이스의 캐시 데이터의 축출의 경우에, 영구적 저장 펜스 버퍼가 모든 캐시 슬라이스에서 플러싱되는 것을 허용할 수도 있다.
예시적인 코어 아키텍쳐 , 프로세서, 및 컴퓨터 아키텍쳐
프로세서 코어는, 상이한 목적을 위해, 그리고 상이한 프로세서에서 상이한 방식으로 구현될 수도 있다. 예를 들면, 이러한 코어의 구현예는 다음을 포함할 수도 있다: 1) 범용 컴퓨팅을 위해 의도되는 범용 순차 코어; 2) 범용 컴퓨팅을 위해 의도되는 고성능의 범용 비순차 코어; 3) 그래픽 및/또는 과학적(쓰루풋) 컴퓨팅을 위해 주로 의도되는 특수 목적의 코어. 상이한 프로세서의 구현예는 다음을 포함할 수도 있다: 1) 범용 컴퓨팅을 위해 의도되는 하나 이상의 범용 순차 코어 및/또는 범용 컴퓨팅을 위해 의도되는 하나 이상의 범용 비순차 코어를 포함하는 CPU; 및 2) 그래픽 및/또는 과학적(쓰루풋)인 것을 위해 주로 의도되는 하나 이상의 특수 목적의 코어를 포함하는 코프로세서. 이러한 상이한 프로세서는 상이한 컴퓨터 시스템 아키텍쳐로 이어지는데, 상이한 컴퓨터 시스템 아키텍쳐는 다음을 포함한다: 1) CPU와는 별개의 칩 상의 코프로세서; 2) CPU와 동일 패키지의 별개의 다이 상의 코프로세서; 3) CPU와 동일 다이 상의 코프로세서(이 경우, 이러한 코프로세서는, 종종, 특수 목적의 로직, 예컨대 통합 그래픽 및/또는 과학적(쓰루풋) 로직으로서, 또는 특수 목적의 코어로서 칭해진다); 및 4) 동일한 다이 상에 설명된 CPU(종종 애플리케이션 코어(들) 또는 애플리케이션 프로세서(들)로 칭해짐), 상기 설명된 코프로세서, 및 추가적인 기능성을 포함할 수도 있는 시스템 온 칩. 예시적인 코어 아키텍쳐가 다음에 설명되고, 예시적인 프로세서 및 컴퓨터 아키텍쳐의 설명이 후속한다.
예시적인 코어 아키텍쳐
순차 및 비순차 코어 블록도
도 10a는, 본 발명의 실시형태에 따른, 예시적인 순차 파이프라인 및 예시적인 레지스터 리네이밍 비순차 발행/실행 파이프라인 둘 다를 예시하는 블록도이다. 도 10b는, 본 발명의 실시형태에 따른, 프로세서에 포함될 예시적인 레지스터 리네이밍 비순차 발행/실행 실행 아키텍쳐 코어 및 순차 아키텍쳐 코어의 예시적인 실시형태 둘 다를 예시하는 블록도이다. 도 10a 및 도 10b에서의 실선 박스는 순차 파이프라인 및 순차 코어를 예시하고, 반면 점선 박스의 옵션적 부가부는 레지스터 리네이밍 비순차 발행/실행 실행 파이프라인 및 코어를 예시한다. 순차 양태가 비순차 양태의 서브셋이다는 것을 고려하여, 비순차 양태가 설명될 것이다.
도 10a에서, 프로세서 파이프라인(1000)은, 페치 단계(1002), 길이 디코드 단계(1004), 디코드 단계(1006), 할당 단계(1008), 리네이밍 단계(1010), 스케줄링(디스패치 또는 발행으로도 또한 알려짐) 단계(1012), 레지스터 판독/메모리 판독 단계(1014), 실행 단계(1016), 라이트 백/메모리 기록 단계(1018), 예외 핸들링 단계(1022), 및 커밋 단계(1024)를 포함한다.
도 10b는, 실행 엔진 유닛(1050)에 커플링되는 프론트 엔드 유닛(1030)을 포함하며 양자가 메모리 유닛(1070)에 커플링되는 프로세서 코어(1090)의 실시형태의 블록도이다. 코어(1090)는, 축약형 명령어 세트 컴퓨팅(RISC) 코어, 복합 명령어 세트 컴퓨팅(CISC) 코어, 아주 긴 명령어 워드(VLIW) 코어, 또는 하이브리드 또는 대안적인 코어 타입일 수도 있다. 또 다른 옵션으로서, 코어(1090)는, 예를 들면, 네트워크 또는 통신 코어, 압축 엔진, 코프로세서 코어, 범용 컴퓨팅 그래픽 프로세싱 유닛(general purpose computing graphics processing unit; GPGPU) 코어, 그래픽 코어, 또는 등등과 같은 특수 목적의 코어일 수도 있다.
프론트 엔드 유닛(1030)은 명령어 캐시 유닛(1034)에 커플링되는 분기 예측 유닛(1032)를 포함하는데, 명령어 캐시 유닛(1034)은 명령어 변환 색인 버퍼(TLB)(1036)에 커플링되고, 명령어 변환 색인 버퍼(TLB)(1036)는 명령어 페치 유닛(1038)에 커플링되고, 명령어 페치 유닛(1038)은 디코드 유닛(1040)에 커플링된다. 디코드 유닛(1040)(또는 디코더)은 명령어를 디코딩할 수도 있고, 출력으로서 하나 이상의 마이크로 동작, 마이크로 코드 엔트리 포인트, 마이크로명령어, 다른 명령어, 또는 다른 제어 신호를 생성할 수도 있는데, 이들은 원래의 명령어로부터 디코딩되거나, 또는 다르게는 원래의 명령어를 반영하거나, 또는 원래의 명령어로부터 유도된다. 디코드 유닛(1040)은 다양하고 상이한 메커니즘을 사용하여 구현될 수도 있다. 적절한 메커니즘의 예는, 룩업 테이블, 하드웨어 구현, 프로그래머블 로직 어레이(programmable logic array; PLA), 마이크로코드 리드 온리 메모리(ROM), 등등을 포함하지만, 그러나 이들로 한정되지는 않는다. 일 실시형태에서, 코어(1090)는, 소정의 매크로명령어에 대한 마이크로코드를 저장하는 마이크로코드 ROM 또는 다른 매체를 (예를 들면, 디코드 유닛(1040)에 또는 다르게는 프론트 엔드 유닛(1030) 내에) 포함한다. 디코드 유닛(1040)은 실행 엔진 유닛(1050)의 리네임/할당기(rename/allocator) 유닛(1052)에 커플링된다.
실행 엔진 유닛(1050)은, 회수 유닛(1054) 및 하나 이상의 스케줄러 유닛(들)(1056)의 세트에 커플링되는 리네임/할당기 유닛(1052)을 포함한다. 스케줄러 유닛(들)(1056)은, 예약 스테이션(reservations station), 중앙 명령어 윈도우, 등등을 포함하는 임의의 수의 상이한 스케줄러를 나타낸다. 스케줄러 유닛(들)(1056)은 물리적 레지스터 파일(들) 유닛(들)(1058)에 커플링된다. 물리적 레지스터 파일(들) 유닛(1058)의 각각은, 하나 이상의 물리적 레지스터 파일을 나타내는데, 이들 중 상이한 물리적 레지스터 파일은 하나 이상의 상이한 데이터 타입, 예컨대 스칼라 정수(scalar integer), 스칼라 부동 소수점(scalar floating point), 묶음 정수(packed integer), 묶음 부동 소수점, 벡터 정수, 벡터 부동 소수점, 스테이터스(예를 들면, 실행될 다음 명령어의 어드레스인 명령어 포인터), 등등을 저장한다. 일 실시형태에서, 물리적 레지스터 파일(들) 유닛(1058)은, 벡터 레지스터 유닛, 기록 마스크 레지스터 유닛, 및 스칼라 레지스터 유닛을 포함한다. 이들 레지스터 유닛은 아키텍쳐의 벡터 레지스터, 벡터 마스크 레지스터, 및 범용 레지스터를 제공할 수도 있다. 물리적 레지스터 파일(들) 유닛(들)(1058)은, (예를 들면, 재정열 버퍼(들) 및 회수 레지스터 파일(들)을 사용하여; 미래의 파일(들), 히스토리 버퍼(들), 및 회수 레지스터 파일(들)을 사용하여; 레지스터 맵 및 레지스터의 풀(pool)을 사용하여; 등등을 사용하여) 레지스터 리네이밍 및 비순차 실행이 구현될 수도 있는 다양한 방식을 예시하기 위해 회수 유닛(1054)에 의해 중첩된다. 회수 유닛(1054) 및 물리적 레지스터 파일(들) 유닛(들)(1058)은 실행 클러스터(들)(1060)에 커플링된다. 실행 클러스터(들)(1060)는 하나 이상의 실행 유닛(1062)의 세트 및 하나 이상의 메모리 액세스 유닛(1064)의 세트를 포함한다. 실행 유닛(1062)은 다양한 동작(예를 들면, 시프트, 가산, 감산, 승산)을 수행할 수도 있고 다양한 타입의 데이터(예를 들면, 스칼라 부동 소수점, 묶음 정수, 묶음 부동 소수점, 벡터 정수, 벡터 부동 소수점)에 대해 수행될 수도 있다. 몇몇 실시형태가, 특정 기능 또는 기능의 세트에 전용되는 다수의 실행 유닛을 포함할 수도 있지만, 다른 실시형태는 단지 하나의 실행 유닛만을 또는 모두가 모든 기능을 수행하는 다수의 실행 유닛을 포함할 수도 있다. 소정의 실시형태가 소정 타입의 데이터/동작에 대해 별개의 파이프라인(예를 들면, 자기 자신의 스케줄러 유닛, 물리적 레지스터 파일(들) 유닛, 및/또는 실행 클러스터를 각각 구비하는 스칼라 정수 파이프라인, 스칼라 부동 소수점/묶음 정수/묶음 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 메모리 액세스 파이프라인 - 별개의 메모리 액세스 파이프라인의 경우, 이 파이프라인의 실행 클러스터만이 메모리 액세스 유닛(들)(1064)을 구비하는 소정의 실시형태가 구현된다)을 생성하기 때문에, 스케줄러 유닛(들)(1056), 물리적 레지스터 파일(들) 유닛(들)(1058), 및 실행 클러스터(들)(1060)은 어쩌면 복수인 것으로 도시된다. 별개의 파이프라인이 사용되는 경우, 이들 파이프라인 중 하나 이상은 비순차 발행/실행이고 나머지는 순차이다는 것이 또한 이해되어야 한다.
메모리 액세스 유닛(1064)의 세트는 메모리 유닛(1070)에 커플링되는데, 메모리 유닛(1070)은, 레벨 2(L2) 캐시 유닛(1076)에 커플링되는 데이터 캐시 유닛(1074)에 커플링되는 데이터 TLB 유닛(1072)을 포함한다. 하나의 예시적인 실시형태에서, 메모리 액세스 유닛(1064)은, 로드 유닛, 저장 어드레스 유닛, 및 저장 데이터 유닛을 포함할 수도 있는데, 이들 각각은 메모리 유닛(1070)의 데이터 TLB 유닛(1072)에 커플링된다. 명령어 캐시 유닛(1034)은 또한 메모리 유닛(1070)의 레벨 2(L2) 캐시 유닛(1076)에 커플링된다. L2 캐시 유닛(1076)은 하나 이상의 다른 레벨의 캐시에 커플링되고 결국에는 메인 메모리에 커플링된다.
예로서, 예시적인 레지스터 리네이밍 비순차 발행/실행 실행 코어 아키텍쳐는 파이프라인(10000을 다음과 같이 구현할 수도 있다: 1) 명령어 페치(1038)가 페치 및 길이 디코딩 단계(1002 및 1004)를 수행한다; 2) 디코드 유닛(1040)이 디코드 단계(1006)를 수행한다; 3) 리네임/할당기 유닛(1052)이 할당 단계(1008) 및 리네이밍 단계(1010)를 수행한다; 4) 스케줄러 유닛(들)(1056)이 스케줄 단계(1012)를 수행한다; 5) 물리적 레지스터 파일(들) 유닛(들)(1058) 및 메모리 유닛(1070)이 레지스터 판독/메모리 판독 단계(1014)를 수행한다; 실행 클러스터(1060)가 실행 단계(1016)를 수행한다; 6) 메모리 유닛(1070) 및 물리적 레지스터 파일(들) 유닛(들)(1058)이 라이트 백/메모리 기록 단계(1018)를 수행한다; 7) 다양한 유닛이 예외 핸들링 단계(1022)에서 수반된다; 그리고 8) 회수 유닛(1054) 및 물리적 레지스터 파일(들) 유닛(들)(1058)이 커밋 단계(1024)를 수행한다.
코어(1090)는, 본원에서 설명되는 명령어를 비롯하여, 하나 이상의 명령어 세트(예를 들면, x86 명령어 세트(신규의 버전에서 추가된 몇몇 확장안을 가짐); 미국 캘리포니아 써니베일(Sunnyvale)의 MIPS Technologies의 MIPS 명령어 세트; 미국 캘리포니아 써니베일의 ARM Holdings의 ARM 명령어 세트(NEON과 같은 옵션적인 부가적 확장안을 가짐)를 지원할 수도 있다. 일 실시형태에서, 코어(1090)는 묶음 데이터 명령어 세트 확장안(예를 들면, AVX1, AVX2)을 지원하는 로직을 포함하고, 그에 의해, 많은 멀티미디어 애플리케이션에 의해 사용되는 동작이 묶음 데이터를 사용하여 수행되는 것을 허용한다.
코어는 멀티쓰레딩(동작 또는 쓰레드의 두 개 이상의 병렬 세트를 실행함)을 지원할 수도 있고, 시분할 멀티쓰레딩, 동시적 멀티쓰레딩(이 경우 단일의 물리적 코어는, 물리적 코어가 동시에 멀티쓰레딩하고 있는 쓰레드의 각각에 대한 논리적 코어를 제공한다), 또는 이들의 조합(예를 들면, 예컨대 Intel® 하이퍼쓰레딩 기술과 같은 시분할 페칭과 디코딩 및 그 이후의 동시적 멀티쓰레딩)을 비롯한 다양한 방식으로 그렇게 할 수도 있다는 것이 이해되어야 한다.
레지스터 리네이밍이 비순차 실행의 맥락에서 설명되지만, 레지스터 리네이밍은 순차 아키텍쳐에서 사용될 수도 있다는 것이 이해되어야 한다. 프로세서의 예시된 실시형태가 별개의 명령어 및 데이터 캐시 유닛(1034/1074) 및 공유된 L2 캐시 유닛(1076)을 또한 포함하지만, 대안적인 실시형태는, 명령어 및 데이터 둘 다에 대해, 예를 들면, 레벨 1(L1) 내부 캐시, 또는 다중 레벨의 내부 캐시와 같은 단일의 내부 캐시를 구비할 수도 있다. 몇몇 실시형태에서, 시스템은 내부 캐시 및 코어 및/또는 프로세서 외부에 있는 외부 캐시의 조합을 포함할 수도 있다. 대안적으로, 모든 캐시는 코어 및/또는 프로세서 외부에 있을 수도 있다.
구체적인 예시적 순차 코어 아키텍쳐
도 11a 및 도 11b는 더 구체적인 예시적 순차 코어 아키텍쳐의 블록도를 예시하는데, 코어는 칩의 여러 개의 로직 블록(동일한 타입 및/또는 상이한 타입의 다른 코어를 포함함) 중 하나일 것이다. 로직 블록은, 고대역폭 인터커넥트 네트워크(예를 들면, 링 네트워크)를 통해, 애플리케이션에 따라, 몇몇 고정된 기능 로직, 메모리 I/O 인터페이스, 및 다른 필요한 로직과 통신한다.
도 11a는, 다이 상의 인터커넥트 네트워크(1102)로의 자신의 연결, 및 레벨 2(L2) 캐시(1104)의 자신의 로컬 서브셋과 함께, 단일의 프로세서 코어의 실시형태의 블록도이다. 일 실시형태에서, 명령어 디코더(1100)는 묶음 데이터 명령어 세트 확장안을 갖는 x86 명령어 세트를 지원한다. L1 캐시(1106)는, 스칼라 및 벡터 유닛 안으로의 캐시 메모리에 대한 저레이턴시 액세스를 허용한다. 일 실시형태에서 (설계를 단순화하기 위해), 스칼라 유닛(1108) 및 벡터 유닛(1110)이 별개의 레지스터 세트(각각, 스칼라 레지스터(1112) 및 벡터 레지스터(1114))를 사용하고 이들 사이에서 전송되는 데이터가 메모리에 기록되고 그 다음 레벨 1(L1) 캐시(1106)로부터 다시 판독되지만, 본 발명의 대안적인 실시형태는 상이한 접근방식을 사용할 수도 있다(예를 들면, 단일의 레지스터 세트를 사용할 수도 있거나 또는 기록 및 재판독되지 않고 두 개의 레지스터 사이에서 데이터가 전송되는 것을 허용하는 통신 경로를 포함할 수도 있다).
L2 캐시(1104)의 로컬 서브셋은, 프로세서 코어당 하나씩, 별개의 로컬 서브셋으로 분할되는 전역적 L2 캐시의 일부이다. 각각의 프로세서 코어는, L2 캐시(1104) 중 자기 고유의 서브셋으로의 직접 액세스 경로를 갖는다. 프로세서 코어에 의해 판독되는 데이터는 자신의 L2 캐시 서브셋(1104)에 저장되고, 자기 자신의 로컬 L2 캐시 서브셋에 액세스하는 다른 프로세서 코어와 병렬로, 재빨리 액세스될 수 있다. 프로세서 코어에 의해 기록되는 데이터는 자기 자신의 L2 캐시 서브셋(1104)에 저장되고, 필요하다면, 다른 서브셋으로부터 플러싱된다. 링 네트워크는 공유된 데이터에 대한 일관성을 보장한다. 링 네트워크는, 프로세서 코어, L2 캐시 및 다른 로직 블록과 같은 에이전트가 칩 내에서 서로 통신하는 것을 허용하도록 양방향이다. 각각의 링 데이터 경로는 방향당 1012 비트 폭이다.
도 11b는, 본 발명의 실시형태에 따른, 도 11a의 프로세서 코어의 일부의 확대도이다. 도 11b는, L1 캐시(1104)의 L1 데이터 캐시(1106A) 부분뿐만 아니라, 벡터 유닛(1110) 및 벡터 레지스터(1114)에 관한 자세한 세부사항을 포함한다. 구체적으로는, 벡터 유닛(1110)은, 정수, 단정밀도 부동 소수점, 및 배정밀도 부동 소수점 명령어 중 하나 이상을 실행하는 16 와이드 벡터 프로세싱 유닛(vector processing unit; VPU)(16 와이드 ALU(1128) 참조)이다. VPU는, 스위즐 유닛(swizzle unit; 1120)을 통한 레지스터 입력의 스위즐링(swizzling), 수치 변환 유닛(1122A-1122B)을 통한 수치 변환, 및 메모리 입력에 대한 복제 유닛(1124)을 통한 복제를 지원한다. 기록 마스크 레지스터(1126)는 결과적으로 나타나는 벡터 기록을 예측하는 것을 허용한다.
통합 메모리 컨트롤러 및 그래픽을 갖는 프로세서
도 12는, 본 발명의 실시형태에 따른, 하나보다 많은 코어를 구비할 수도 있고, 통합 메모리 컨트롤러를 구비할 수도 있고, 통합 그래픽을 구비할 수도 있는 프로세서(1200)의 블록도이다. 도 12의 실선 박스는, 단일의 코어(1202A), 시스템 에이전트(1210), 하나 이상의 버스 컨트롤러 유닛(1216)의 세트를 갖는 프로세서(1200)를 예시하고, 반면, 점선 박스의 옵션적인 부가부는, 다수의 코어(1202A-1202N), 시스템 에이전트 유닛(1210)의 하나 이상의 통합 메모리 컨트롤러 유닛(들)(1214)의 세트, 및 특수 목적 로직(1208)을 갖는 대안적인 프로세서(1200)를 예시한다.
따라서, 프로세서(1200)의 상이한 구현예는 다음을 포함한다: 1) 특수 목적의 로직(1208)이 통합 그래픽 및/또는 과학적(쓰루풋) 로직(이것은 하나 이상의 코어를 포함할 수도 있다)이고, 코어(1202A-1202N)가 하나 이상의 범용 코어(예를 들면, 범용 순차 코어, 범용 비순차 코어, 이 둘의 조합)인 CPU; 2) 코어(1202A-1202N)가, 그래픽 및/또는 과학적(쓰루풋)인 것을 위해 주로 의도되는 아주 많은 수의 특수 목적의 코어인 코프로세서; 및 3) 코어(1202A-1202N)가 아주 많은 수의 범용 순차 코어인 코프로세서. 따라서, 프로세서(1200)는, 예를 들면, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU(범용 그래픽 프로세싱 유닛), 높은 스루풋의 많은 통합 코어(many integrated core; MIC) 코프로세서(30개 이상의 코어를 포함함), 임베딩된 프로세서, 또는 등등과 같은, 범용 프로세서, 코프로세서 또는 특수 목적의 프로세서일 수도 있다. 프로세서는 하나 이상의 칩 상에서 구현될 수도 있다. 프로세서(1200)는 하나 이상의 기판 중 일부일 수도 있고 및/또는, 예를 들면, BiCMOS, CMOS, 또는 NMOS와 같은 다수의 프로세스 기술 중 임의의 것을 사용하여 하나 이상의 기판 상에서 구현될 수도 있다.
메모리 계층은, 코어 내의 하나 이상의 레벨의 캐시, 하나 이상의 공유된 캐시 유닛(1206)의 세트, 및 통합 메모리 컨트롤러 유닛(1214)의 세트에 커플링되는 외부 메모리(도시되지 않음)를 포함한다. 공유된 캐시 유닛(1206)의 세트는 하나 이상의 중간 레벨 캐시, 예컨대 레벨 2(L2), 레벨 3(L3), 레벨 4(L4), 또는 다른 레벨의 캐시, 최종 레벨 캐시(LLC), 및/또는 이들의 조합을 포함할 수도 있다. 일 실시형태에서 링 기반의 인터커넥트 유닛(1212)이 통합 그래픽 로직(1208), 공유된 캐시 유닛(1206)의 세트, 및 시스템 에이전트 유닛(1210)/통합 메모리 컨트롤러 유닛(들)(1214)을 인터커넥트하지만, 대안적인 실시형태는 이러한 유닛을 인터커넥팅하기 위한 임의의 수의 널리 공지된 기술을 사용할 수도 있다. 일 실시형태에서, 하나 이상의 캐시 유닛(1206)과 코어(1202A-1202N) 사이에서 일관성이 유지된다.
몇몇 실시형태에서, 코어(1202A-1202N) 중 하나 이상은 다중 쓰레딩에 대응할 수 있다. 시스템 에이전트(1210)는 코어(1202A-1202N)를 조정하고 동작시키는 컴포넌트를 포함한다. 시스템 에이전트 유닛(1210)은, 예를 들면 전력 제어 유닛(power control unit; PCU) 및 디스플레이 유닛을 포함할 수도 있다. PCU는, 코어(1202A-1202N) 및 통합 그래픽 로직(1208)의 전력 상태를 조절하는 데 필요한 로직 및 컴포넌트일 수도 있거나 또는 그 로직 및 컴포넌트를 포함할 수도 있다. 디스플레이 유닛은 하나 이상의 외부적으로 연결된 디스플레이를 구동하기 위한 것이다.
코어(1202A-1202N)는, 아키텍쳐 명령어 세트의 관점에서 동질성(homogenous)일 수도 있거나 또는 이질성(heterogeneous)일 수도 있다; 즉, 코어(1202A-1202N) 중 둘 이상은 동일한 명령어 세트를 실행할 수 있지만, 반면 다른 것은 그 명령어 세트의 서브셋 또는 상이한 명령어 세트만을 실행할 수도 있다.
예시적인 컴퓨터 아키텍쳐
도 13 내지 도 16은 예시적인 컴퓨터 아키텍쳐의 블록도이다. 랩탑, 데스크탑, 핸드헬드 PC, 개인 휴대형 정보 단말, 엔지니어링 워크스테이션, 서버, 네트워크 디바이스, 네트워크 허브, 스위치, 임베딩된 프로세서, 디지털 신호 프로세서(digital signal processor; DSP), 그래픽 디바이스, 비디오 게임 디바이스, 셋탑 박스, 마이크로 컨트롤러, 셀 폰, 휴대형 미디어 플레이어, 핸드 헬드 디바이스, 및 다양한 다른 전자 디바이스에 대해 기술 분야에서 공지된 다른 시스템 설계 및 구성도 또한 적절하다. 일반적으로, 프로세서 및/또는 본원에서 개시되는 바와 같은 다른 실행 로직을 통합할 수 있는 아주 다양한 시스템 또는 전자 디바이스가 일반적으로 적절하다.
이제 도 13을 참조하면, 본 발명의 실시형태에 따른, 예시적 시스템(1300)의 블록도가 도시된다. 시스템(1300)은, 컨트롤러 허브(1320)에 커플링되는 하나 이상의 프로세서(1310, 1315)를 포함할 수도 있다. 일 실시형태에서, 컨트롤러 허브(1320)는 그래픽 메모리 컨트롤러 허브(graphics memory controller hub; GMCH)(1390) 및 입/출력 허브(Input/Output Hub; IOH)(1350)(이것은 별개의 칩 상에 있을 수도 있다)를 포함하고; GMCH(1390)는, 메모리(1340) 및 코프로세서(1345)가 커플링되는 메모리 및 그래픽 컨트롤러를 포함하고; IOH(1350)는 입/출력(I/O) 디바이스(1360)를 GMCH(1390)에 커플링한다. 대안적으로, 메모리 및 그래픽 컨트롤러 중 하나 또는 양자는 (본원에서 설명되는 바와 같이) 프로세서 내에 통합되고, 메모리(1340) 및 코프로세서(1345)는 프로세서(1310), 및 IOH(1350)를 갖는 단일의 칩의 컨트롤러 허브(1320)에 직접적으로 커플링된다.
추가적인 프로세서(1315)의 옵션적 성질은 도 13에서 점선으로 표시된다. 각각의 프로세서(1310, 1315)는 본원에서 설명되는 프로세싱 코어 중 하나 이상을 포함할 수도 있고 프로세서(1200)의 어떤 버전일 수도 있다.
메모리(1340)는, 예를 들면, 동적 랜덤 액세스 메모리(DRAM), 상변화 메모리(phase change memory; PCM), 또는 이 둘의 조합일 수도 있다. 적어도 하나의 실시형태의 경우, 컨트롤러 허브(1320)는 멀티 드롭 버스(multi-drop bus), 예컨대 프론트사이드 버스(frontside bus; FSB), 퀵패쓰 인터커넥트(QuickPath Interconnect; QPI)와 같은 포인트 투 포인트 인터페이스, 또는 유사한 연결(1395)을 통해 프로세서(들)(1310, 1315)와 통신한다.
일 실시형태에서, 코프로세서(1345)는, 예를 들면, 높은 쓰루풋의 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베딩된 프로세서, 또는 등등과 같은 특수 목적의 프로세서이다. 일 실시형태에서, 컨트롤러 허브(1320)는 통합 그래픽 가속기를 포함할 수도 있다.
아키텍쳐 특성, 마이크로아키텍쳐 특성, 열 특성, 전력 소비 특성, 및 등등을 포함하는 장점을 갖는 메트릭(metric)의 스펙트럼의 관점에서 물리적 리소스(1310, 1315) 사이에 다양한 차이가 존재할 수 있다.
일 실시형태에서, 프로세서(1310)는 일반적인 타입의 데이터 프로세싱 동작을 제어하는 명령어를 실행한다. 코프로세서 명령어는 명령어 내에 임베딩될 수도 있다. 프로세서(1310)는 이들 코프로세서 명령어를, 부착된 코프로세서(1345)에 의해 실행되어야 하는 타입인 것으로 인지한다. 따라서, 프로세서(1310)는 이들 코프로세서 명령어(또는 코프로세서 명령어를 나타내는 제어 신호)를 코프로세서 버스 또는 다른 인터커넥트 상에서 코프로세서(1345)로 발행한다. 코프로세서(들)(1345)는 수신된 코프로세서 명령어를 받아들여 실행한다.
이제 도 14를 참조하면, 본 발명의 실시형태에 따른, 제1의 더 구체적인 예시적 시스템(1400)의 블록도가 도시된다. 도 14에서 도시되는 바와 같이, 다중프로세서 시스템(1400)은 포인트 투 포인트 인터커넥트 시스템이고, 포인트 투 포인트 인터커넥트(1450)를 통해 커플링되는 제1 프로세서(1470) 및 제2 프로세서(1480)를 포함한다. 프로세서(1470 및 1480) 각각은 프로세서(1200)의 어떤 버전일 수도 있다. 본 발명의 일 실시형태에서, 프로세서(1470 및 1480)는 각각 프로세서(1310 및 1315)이고, 한편 코프로세서(1438)는 코프로세서(1345)이다. 다른 실시형태에서, 프로세서(1470 및 1480)는 각각 프로세서(1310) 및 코프로세서(1345)이다.
집적된 메모리 컨트롤러 유닛(integrated memory controller; IMC)(1472 및 1482)을 각각 포함하는 프로세서(1470 및 1480)가 도시된다. 프로세서(1470)는 자신의 버스 컨트롤러 유닛의 일부로서 포인트 투 포인트(P-P) 인터페이스(1476 및 1478)를 또한 포함하며; 마찬가지로, 제2 프로세서(1480)는 P-P 인터페이스(1486 및 1488)를 포함한다. 프로세서(1470, 1480)는 P-P 인터페이스 회로(1478, 1488)를 사용하여 포인트 투 포인트(P-P) 인터페이스(1450)를 통해 정보를 교환할 수도 있다. 도 14에서 도시되는 바와 같이, IMC(1472 및 1482)는 프로세서를, 각각의 메모리, 즉 각각의 프로세서에 로컬하게 부착된 메인 메모리의 일부일 수도 있는, 메모리(1432) 및 메모리(1434)에 커플링한다.
프로세서(1470, 1480) 각각은 포인트 투 포인트 인터페이스 회로(1476, 1494, 1486, 1498)를 사용하여 개개의 P-P 인터페이스(1452, 1454)를 통해 칩셋(1490)과 정보를 교환할 수도 있다. 칩셋(1490)은, 옵션적으로, 고성능 인터페이스(1439)를 통해, 코프로세서(1438)와 정보를 교환할 수도 있다. 일 실시형태에서, 코프로세서(1438)는, 예를 들면, 높은 쓰루풋의 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베딩된 프로세서, 또는 등등과 같은 특수 목적의 프로세서이다.
공유된 캐시(도시되지 않음)는 어느 하나의 프로세서 내에 또는 양 프로세서 밖에 포함될 수도 있지만, P-P 인터커넥트를 통해 프로세서와 여전히 연결될 수도 있어서, 프로세서가 저전력 모드에 놓여지면 어느 하나의 또는 양 프로세서의 로컬 캐시 정보가 공유된 캐시에 저장될 수도 있다.
칩셋(1490)은 인터페이스(1496)를 통해 제1 버스(1416)에 커플링될 수도 있다. 일 실시형태에서, 제1 버스(1416)는 주변장치 컴포넌트 인터커넥트(Peripheral Component Interconnect; PCI) 버스, 또는 PCI 익스프레스 버스 또는 다른 3세대 I/O 인터커넥트 버스와 같은 버스일 수도 있지만, 본 발명의 범위는 그렇게 제한되는 것은 아니다.
도 14에서 도시되는 바와 같이, 다양한 I/O 디바이스(1414)는, 제1 버스(1416)를 제2 버스(1420)에 커플링하는 버스 브리지(1418)와 함께, 제1 버스(1416)에 커플링될 수도 있다. 일 실시형태에서, 하나 이상의 추가적인 프로세서(들)(1415), 예컨대 코프로세서, 높은 쓰루풋의 MIC 프로세서, GPGPU, (예를 들면, 그래픽 가속기 또는 디지털 신호 프로세싱(digital signal processing; DSP) 유닛과 같은) 가속기, 필드 프로그래머블 게이트 어레이, 또는 임의의 다른 프로세서는 제1 버스(1416)에 커플링된다. 일 실시형태에서, 제2 버스(1420)는 로우 핀 카운트(low pin count: LPC) 버스를 포함한다. 일 실시형태에서, 예를 들면, 키보드 및/또는 마우스(1422), 통신 디바이스(1427) 및, 저장 유닛(1428) 예컨대 명령어/코드 및 데이터(1430)를 포함할 수도 있는 디스크 드라이브 또는 다른 대용량 디바이스를 포함하는 다양한 디바이스가 제2 버스(1420)에 커플링될 수도 있다. 또한, 오디오 I/O(1424)가 제2 버스(1420)에 커플링될 수도 있다. 다른 아키텍쳐도 가능하다는 것을 유의한다. 예를 들면, 도 14의 포인트 투 포인트 아키텍쳐 대신, 시스템은 멀티 드롭 버스 또는 다른 이러한 아키텍쳐를 구현할 수도 있다.
이제 도 15를 참조하면, 본 발명의 실시형태에 따른, 제2의 더 구체적인 예시적 시스템(1500)의 블록도가 도시된다. 도 14 및 도 15의 유사한 엘리먼트는 유사한 도면 부호를 가지며, 도 15의 다른 양태를 모호하게 하는 것을 방지하기 위해, 도 14의 소정의 양태는 도 15에서 생략되었다.
도 15는, 프로세서(1470, 1480)가 통합 메모리 및 I/O 제어 로직(control logic; "CL")(1472 및 1482)을 각각 포함할 수도 있다는 것을 예시한다. 따라서, CL(1472, 1482)은 통합 메모리 컨트롤러 유닛을 포함하고 I/O 제어 로직을 포함한다. 도 15는, 메모리(1432, 1434)가 CL(1472, 1482)에 커플링되는 것뿐만 아니라 I/O 디바이스(1514)가 제어 로직(1472, 1482)에 또한 커플링되는 것을 예시한다. 레거시 I/O 디바이스(1515)는 칩셋(1490)에 커플링된다.
이제 도 16을 참조하면, 본 발명의 실시형태에 따른, SoC(1600)의 블록도가 도시된다. 도 12의 유사한 엘리먼트는 유사한 도면 부호를 갖는다. 또한, 점선 박스는 더 진보된 SoC 상의 옵션적 피쳐이다. 도 16에서, 인터커넥트 유닛(들)(1602)은: 하나 이상의 코어(202A-202N)의 세트 및 공유된 캐시 유닛(들)(1206)을 포함하는 애플리케이션 프로세서(1610); 시스템 에이전트 유닛(1210); 버스 컨트롤러 유닛(들)(1216); 통합 메모리 컨트롤러 유닛(들)(1214); 통합 그래픽 로직, 이미지 프로세서, 오디오 프로세서, 및 비디오 프로세서를 포함할 수도 있는 하나 이상의 코프로세서(1620)의 세트; 정적 랜덤 액세스 메모리(SRAM) 유닛(1630); 직접 메모리 액세스(direct memory access; DMA) 유닛(1632); 및 하나 이상의 외부 디스플레이에 커플링하기 위한 디스플레이 유닛(1640)에 커플링된다. 일 실시형태에서, 코프로세서(들)(1620)는, 예를 들면, 네트워크 또는 통신 프로세서, 압축 엔진, GPGPU, 높은 출력의 MIC 프로세서, 임베딩된 프로세서, 또는 등등과 같은 특수 목적의 프로세서를 포함한다.
본원에서 개시되는 메커니즘의 실시형태는, 하드웨어로, 소프트웨어로 구현될 수도 있거나, 또는 이러한 구현 접근방식의 조합으로 구현될 수도 있다. 본 발명의 실시형태는, 적어도 하나의 프로세서, 스토리지 시스템(휘발성 및 불휘발성 메모리 및/또는 스토리지 엘리먼트를 포함함), 적어도 하나의 입력 디바이스, 및 적어도 하나의 출력 디바이스를 포함하는 프로그래머블 시스템 상에서 실행하는 컴퓨터 프로그램 또는 프로그램 코드로서 구현될 수도 있다.
도 14에서 예시되는 코드(1430)와 같은 프로그램 코드는, 본원에서 설명되는 기능을 수행하기 위한 그리고 출력 정보를 생성하기 위한 명령어를 입력하도록 적용될 수도 있다. 출력 정보는 하나 이상의 출력 디바이스에 공지의 방식으로 적용될 수도 있다. 이 적용의 목적을 위해, 프로세싱 시스템은, 예를 들면; 디지털 신호 프로세서(DSP), 마이크로컨트롤러, 주문형 반도체(application specific integrated circuit; ASIC), 또는 마이크로프로세서와 같은 프로세서를 구비하는 임의의 시스템을 포함한다.
프로그램 코드는, 프로세싱 시스템과 통신하기 위해 하이 레벨의 절차적 또는 객체 지향 프로그래밍 언어로 구현될 수도 있다. 프로그램 코드는 또한, 필요하다면, 어셈블리 또는 머신 언어로 구현될 수도 있다. 실제, 본원에서 설명되는 메커니즘은 범위에서 임의의 특정한 프로그래밍 언어로 제한되지 않는다. 어느 경우든, 언어는 컴파일식 또는 인터프리트식 언어일 수도 있다.
적어도 하나의 실시형태의 하나 이상의 양태는, 프로세서 내의 다양한 로직을 나타내는 머신 판독가능 매체에 저장되는 대표적인 명령어에 의해 구현될 수도 있는데, 그 명령어는 머신에 의한 판독시 머신으로 하여금 본원에서 설명되는 기술을 수행하기 위한 로직을 만들게 한다. "IP 코어"로서 알려진 이러한 표현은, 유형의 머신 판독가능 매체 상에 저장되고, 다양한 고객 또는 제조 설비로 공급되어 로직 또는 프로세서를 실제로 만드는 제조 머신으로 로딩될 수도 있다.
이러한 머신 판독가능 저장 매체는, 머신 또는 디바이스에 의해 제조되는 또는 형성되는 물품의 비일시적이고 유형의 장치를 포함할 수도 있는데, 하드 디스크, 플로피 디스크, 광학 디스크, 컴팩트 디스크 리드 온리 메모리(compact disk read-only memory; CD-ROM), 재기록 가능한 컴팩트 디스크(compact disk rewritable; CD-RW), 및 광자기(magneto-optical) 디스크를 포함하는 임의의 다른 타입의 디스크와 같은 저장 매체, 리드 온리 메모리(ROM), 랜덤 액세스 메모리(random access memory; RAM) 예컨대 동적 랜덤 액세스 메모리(DRAM), 정적 랜덤 액세스 메모리(SRAM), 소거가능한 프로그래머블 리드 온리 메모리(erasable programmable read-only memory; EPROM), 플래시 메모리, 전기적으로 소거가능한 프로그래머블 리드 온리 메모리(electrically erasable programmable read-only memory; EEPROM), 상변화 메모리(PCM), 자기 또는 광학 카드와 같은 반도체 디바이스, 또는 전자적 명령어를 저장하기에 적합한 임의의 다른 타입의 매체를 제한 없이 포함한다.
따라서, 본 발명의 실시형태는 또한, 본원에서 설명되는 구조체, 회로, 장치, 프로세서, 및/또는 시스템 피쳐를 정의하는 하드웨어 기술 언어(Hardware Description Language; HDL)와 같은 명령어를 포함하는 또는 설계 데이터를 포함하는 비일시적이고 유형의 머신 판독가능 매체를 포함한다. 이러한 실시형태는 또한 프로그램 제품으로서 칭해질 수도 있다.
에뮬레이션(이진 변환, 코드 모핑, 등등을 포함함)
몇몇 경우에, 명령어를 소스 명령어 세트로부터 목표 명령어 세트로 변환하기 위해, 명령어 컨버터가 사용될 수도 있다. 예를 들면, 명령어 컨버터는, 명령어 또는 코어에 의해 프로세싱될 하나 이상의 다른 명령어를 (예를 들면, 정적 이진 변환, 동적 컴파일을 포함하는 동적 이진 변환을 사용하여) 변환(translate), 모핑, 에뮬레이팅, 또는 다르게는 변환(convert)할 수도 있다. 명령어 컨버터는 소프트웨어로, 하드웨어로, 펌웨어로, 또는 이들의 조합으로 구현될 수도 있다. 명령어 컨버터는, 프로세서 상에(on processor), 프로세서 외부에(off processor), 또는 일부는 프로세서 상에 일부는 프로세서 외부에 있을 수도 있다.
도 17은, 본 발명의 실시형태에 따른, 소스 명령어 세트의 이진 명령어를 타겟 명령어 세트의 이진 명령어로 변환하는 소프트웨어 명령어 컨버터의 사용을 대조하는 블록도이다. 예시된 실시형태에서, 명령어 컨버터는 소프트웨어 명령어 컨버터이지만, 대안적으로, 명령어 컨버터는 소프트웨어로, 펌웨어로, 하드웨어로, 또는 이들의 다양한 조합으로 구현될 수도 있다. 도 17은, 적어도 하나의 x86 명령어 세트 코어(1716)를 갖는 프로세서에 의해 네이티브하게 실행될 수도 있는 x86 이진 코드(1706)를 생성하기 위해, 하이 레벨 언어(1702)의 프로그램이 x86 컴파일러(1704)를 사용하여 컴파일될 수도 있다는 것을 도시한다. 적어도 하나의 x86 명령어 세트 코어(1716)를 갖는 프로세서는, 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 결과를 달성하기 위해, (1) 인텔 x86 명령어 세트 코어의 명령어 세트의 상당한 부분 또는 (2) 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서 상에서 실행하도록 겨냥된 애플리케이션 또는 다른 소프트웨어의 오브젝트 코드 버전을 호환가능하게 실행하는 것에 의해 또는 다르게는 프로세싱하는 것에 의해, 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 기능을 수행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(1704)는, 추가적인 연결 프로세싱(linkage processing)을 가지고 또는 추가적인 연결 프로세싱 없이, 적어도 하나의 x86 명령어 세트 코어(1716)를 갖는 프로세서 상에서 실행될 수 있는 x86 이진 코드(1706)(예를 들면, 오브젝트 코드)를 생성하도록 동작가능한 컴파일러를 나타낸다. 마찬가지로, 도 17은, 적어도 하나의 x86 명령어 세트 코어(1714)가 없는 프로세서(예를 들면, 미국 캘리포니아 써니베일의 MIPS Technologies의 MIPS 명령어 세트를 실행하는 및/또는 미국 캘리포니아 써니베일의 ARM Holdings의 ARM 명령어 세트를 실행하는 코어를 갖는 프로세서)에 의해 네이티브하게 실행될 수도 있는 대안적인 명령어 세트 이진 코드(1710)를 생성하기 위해, 하이 레벨 언어(1702)의 프로그램이 대안적인 명령어 세트 컴파일러(1708)를 사용하여 컴파일될 수도 있다는 것을 도시한다. 명령어 컨버터(1712)는, x86 이진 코드(1706)를, x86 명령어 세트 코어(1714)가 없는 프로세서에 의해 네이티브하게 실행될 수도 있는 코드로 변환하기 위해 사용된다. 이 변환된 코드는, 이것에 대응하는 명령어 컨버터를 만들기가 어렵기 때문에, 대안적인 명령어 세트 이진 코드(1710)와 동일하지 않을 수도 있지만; 그러나, 변환된 코드는 일반적인 동작을 달성할 것이고 대안적인 명령어 세트로부터의 명령어로 구성될 것이다. 따라서, 명령어 컨버터(1712)는, x86 이진 코드(1706)를 실행하기 위한 x86 명령어 세트 프로세서 또는 코어를 구비하지 않는 프로세서 또는 다른 전자 디바이스를, 에뮬레이션, 시뮬레이션 또는 임의의 다른 프로세스를 통해, 허용하는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타낸다.
도 1, 도 4 내지 도 6, 및 도 9 중 임의의 것에 대해 설명되는 컴포넌트, 피쳐, 및 상세는 또한, 도 2 및 도 3 중 임의의 것에 옵션적으로 적용될 수도 있다. 또한, 장치 중 임의의 것에 대해 설명되는 컴포넌트, 피쳐, 및 상세는 또한, 실시형태에서, 이러한 장치에 의해 및/또는 이러한 장치를 통해 수행될 수도 있는 방법 중 임의의 것에 옵션적으로 적용될 수도 있다. 본원에서 설명되는 프로세서 중 임의의 것은, 본원에서 개시되는 컴퓨터 시스템 중 임의의 것에 포함될 수도 있다.
상세한 설명 및 청구범위에서, 용어 "커플링되는" 및/또는 "연결되는"은 그들의 파생어와 함께 사용될 수도 있다. 이들 용어는 서로 동의어로서 의도되지 않는다. 대신, 몇몇 실시형태에서, "연결되는"은, 2개 이상의 엘리먼트가 서로 물리적으로 및/또는 전기적으로 직접 접촉하는 것을 나타내기 위해 사용될 수도 있다. "커플링되는"은, 2개 이상의 엘리먼트가 서로 물리적으로 및/또는 전기적으로 직접 접촉하는 것을 의미할 수도 있다. 그러나, "커플링되는"은, 2개 이상의 엘리먼트가 서로 직접적으로 접촉되지는 않지만, 여전히 서로 함께 동작하거나 또는 상호작용하는 것을 또한 의미할 수도 있다. 예를 들면, 한 유닛은, 하나 이상의 중재 컴포넌트(intervening component)를 통해 디코드 유닛과 커플링될 수도 있다. 도면에서, 화살표는 연결 및 커플링을 나타내기 위해 사용된다.
용어 "및/또는"이 사용될 수도 있다. 본원에서 사용되는 바와 같이, 용어 "및/또는"은 하나 또는 나머지 하나 또는 둘 다를 의미한다(예를 들면, A 및/또는 B는, A 또는 B 또는 A와 B 둘 다를 의미한다).
상기의 설명에서는, 실시형태의 완전한 이해를 제공하기 위해 특정 상세가 개시되었다. 그러나, 다른 실시형태는 이들 특정 상세 없이도 실시될 수도 있다. 본 발명의 범위는 상기에서 제공되는 특정한 예에 의해 결정되지 않을 것이며, 하기의 청구범위에 의해서만 결정될 것이다. 다른 경우에, 널리 공지된 회로, 구조체, 디바이스, 및 동작은, 설명의 이해를 모호하게 하는 것을 방지하기 위해, 블록도 형태로 및/또는 상세 없이 도시되었다. 적절한 것으로 간주되는 경우, 참조 부호, 또는 참조 부호의 말단부는, 대응하는 또는 유사한 엘리먼트를 나타내기 위해 도면 사이에서 반복되었는데, 대응하는 또는 유사한 엘리먼트는, 그렇지 않다고 명시되지 않는 한 또는 명확하게 명백하지 않는 한, 유사한 또는 동일한 특성을 옵션적으로 가질 수도 있다.
소정의 동작은 하드웨어 컴포넌트에 의해 수행될 수도 있거나, 또는 동작을 수행하는 명령어로 프로그래밍된 머신, 회로, 또는 하드웨어 컴포넌트(예를 들면, 프로세서, 프로세서의 일부, 회로, 등등)를 초래할 수도 있는 및/또는 이러한 머신, 회로, 또는 하드웨어 컴포넌트로 나타날 수도 있는 머신 실행가능 또는 회로 실행가능 명령어로 구현될 수도 있다. 동작은 또한, 옵션적으로, 하드웨어와 소프트웨어의 조합에 의해 수행될 수도 있다. 프로세서, 머신, 회로, 또는 하드웨어는 특정한 또는 특별한 회로부를 포함할 수도 있거나 또는 다른 로직(예를 들면, 펌웨어 및/또는 소프트웨어와 잠재적으로 결합되는 하드웨어)는 명령어를 실행하도록 및/또는 프로세싱하도록 그리고 명령어에 응답하여 결과를 저장하도록 동작가능하다.
몇몇 실시형태는, 머신 판독가능 매체를 포함하는 제조 물품(예를 들면, 컴퓨터 프로그램 제품)을 포함한다. 매체는, 머신에 의해 판독가능한 형태로 정보를 제공하는, 예를 들면, 저장하는 메커니즘을 포함할 수도 있다. 머신 판독가능 매체는, 머신에 의해 실행되면 및/또는 실행되는 경우, 머신으로 하여금, 본원에서 개시되는 동작, 방법, 또는 기술 중 하나를 수행하게 하도록 및/또는 본원에서 개시되는 동작, 방법, 또는 기술 중 하나를 수행하는 머신으로 나타나도록 동작가능한 명령어 또는 명령어의 시퀀스를 제공할 수도 있거나, 또는 이러한 명령어 또는 명령어의 시퀀스를 저장할 수도 있다.
몇몇 실시형태에서, 머신 판독가능 매체는 비일시적 머신 판독가능 저장 매체를 포함할 수도 있다. 예를 들면, 비일시적 머신 판독가능 저장 매체는, 플로피 디스켓, 광학적 저장 매체, 광학 디스크, 광학적 데이터 스토리지 디바이스, CD-ROM, 자기 디스크, 광자기 디스크, 리드 온리 메모리(ROM), 프로그래머블 ROM(programmable ROM; PROM), 소거가능한 프로그래머블 ROM(EPROM), 전자적으로 소거가능한 프로그래머블 ROM(EEPROM), 랜덤 액세스 메모리(RAM), 정적 RAM(SRAM), 동적 RAM(DRAM), 래시(Rash) 메모리, 상변화 메모리, 상변화 데이터 저장 물질, 불휘발성 메모리, 불휘발성 스토리지 디바이스, 비일시적 메모리, 비일시적 데이터 저장 디바이스, 또는 등등을 포함할 수도 있다. 비일시적 머신 판독가능 저장 매체는 일시적으로 전파된 신호로 구성되지 않는다. 몇몇 실시형태에서, 저장 매체는, 고체를 포함하는 유형의 매체를 포함할 수도 있다.
적절한 머신의 예는, 범용 프로세서, 특수 목적의 프로세서, 디지털 로직 회로, 집적 회로, 또는 등등을 포함하지만, 그러나 이들로 한정되지는 않는다. 적절한 머신의 여전히 다른 예는, 프로세서, 디지털 로직 회로, 또는 집적 회로를 포함하는 컴퓨터 시스템 또는 다른 전자 디바이스를 포함한다. 이러한 컴퓨터 시스템 또는 전자 디바이스의 예는, 데스크탑 컴퓨터, 랩탑 컴퓨터, 노트북 컴퓨터, 태블릿 컴퓨터, 넷북, 스마트폰, 셀룰러 폰, 네트워크 디바이스(예를 들면, 라우터 및 스위치), 모바일 인터넷 디바이스(Mobile Internet device; MID), 미디어 플레이어, 스마트 텔레비전, 넷탑, 셋탑 박스, 및 비디오 게임 컨트롤러를 포함하지만, 그러나 이들로 한정되지는 않는다.
본 명세서 전체에 걸친 "일 실시형태", "한 실시형태", "하나 이상의 실시형태", "몇몇 실시형태"에 대한 언급은, 예를 들면, 특정한 피쳐가 본 발명의 실시에서 포함될 수도 있지만 그러나 포함되도록 필수적으로 요구되지는 않는다는 것을 나타낸다. 마찬가지로, 설명에서, 다양한 피쳐는, 본 개시를 간소화하고 다양한 발명적 양태의 이해를 보조하는 목적을 위해, 때때로 단일의 실시형태, 도면, 또는 그 설명에서 함께 그룹화된다. 그러나, 본 개시의 방법은, 본 발명이 각각의 청구항에서 명시적으로 열거되는 것보다 더 많은 피쳐를 요구한다는 의도를 반영하는 것으로 해석되어선 안된다. 대신, 후속하는 청구범위가 반영하는 바와 같이, 발명적 양태는 단일의 개시된 실시형태의 모든 피쳐보다 더 적은 피쳐에서 존재한다. 따라서, 상세한 설명에 후속하는 청구범위는 이 상세한 설명에 명시적으로 통합되며, 각각의 청구항은 본 발명의 개별적인 실시형태로서 독자적으로 기재된다.
예시적인 실시형태
하기의 예는 추가적인 실시형태에 관련된다. 예에서의 구체적 사항은 하나 이상의 다른 실시형태의 임의의 곳에서 사용될 수도 있다.
예 1은, 영구적 저장 펜스 명령어를 디코딩하는 디코드 유닛을 포함하는 프로세서 또는 다른 장치이다. 장치는 또한, 디코드 유닛과 커플링되는 메모리 서브시스템 모듈을 포함한다. 메모리 서브시스템 모듈은, 영구적 저장 펜스 명령어에 응답하여, 원래의 프로그램 순서에서 영구적 저장 펜스 명령어 뒤에 발생하는 모든 후속하는 저장 명령어의 데이터가 영구적 스토리지에 영구적으로 저장되기 이전에, 영구적 저장 펜스 명령어에 대응하는 주어진 데이터가 영구적 스토리지에 영구적으로 저장되는 것을 보장한다.
예 2는 예 1의 프로세서를 포함하는데, 옵션적으로, 영구적 저장 펜스 명령어는, 주어진 데이터를 구비하는 소스 오퍼랜드를 나타내는 그리고 주어진 데이터가 저장될 영구적 스토리지에서의 위치를 나타내는 저장 및 영구적 저장 펜스 명령어를 포함한다.
예 3은 예 1의 프로세서를 포함하는데, 옵션적으로, 주어진 데이터는, 영구적 저장 펜스 명령어에 대해 암시적으로, 원래의 프로그램 순서에서 영구적 저장 펜스 명령어 직전 및 직후 중 하나에 있을 저장 명령어의 소스 오퍼랜드에 포함된다.
예 4는 예 1 내지 예 3 중 어느 하나의 프로세서를 포함하는데, 옵션적으로, 메모리 서브시스템 모듈은, 영구적 저장 펜스 명령어에 응답하여, 원래의 프로그램 순서에서 영구적 저장 펜스 명령어 이전에 발생하는 모든 이전 명령어의 데이터가, 후속하는 저장 명령어의 데이터 이전에 영구적 스토리지에 영구적으로 저장되는 것을 보장하지 않는다.
예 5는 예 1 내지 예 3 중 어느 하나의 프로세서를 포함하는데, 하나 이상의 캐시의 세트를 더 포함한다. 또한, 옵션적으로, 메모리 서브시스템 모듈은, 영구적 저장 펜스 명령어에 응답하여, 주어진 데이터가 하나 이상의 캐시의 세트를 바이패스하게 한다.
예 6은 예 1 내지 예 5 중 어느 하나의 프로세서를 포함하는데, 영구적 저장 펜스 버퍼를 더 포함하고, 옵션적으로, 메모리 서브시스템 모듈은, 영구적 저장 펜스 명령어에 응답하여, 주어진 데이터가 영구적 저장 펜스 버퍼에 저장되게 한다.
예 7은 예 6의 프로세서를 포함하는데, 캐시 라인이 캐시로부터 제거되기 이전에 캐시 라인을 캐시로부터 제거하려는 의도를 나타내는 신호에 기초하여 적어도 하나의 캐시 라인을 영구적 저장 펜스 버퍼로부터 영구적 스토리지에 저장하는 영구적 저장 펜스 버퍼 관리 유닛을 더 포함한다.
예 8은 예 6 또는 예 7 중 어느 하나의 프로세서를 포함하는데, 옵션적으로, 영구적 저장 펜스 버퍼는, 제2 영구적 저장 펜스 명령어에 대응하는 제2 데이터가, 주어진 데이터와 동일한 영구적 저장 펜스 버퍼의 캐시 라인에 저장되는 것을 허용하는 기록 결합 버퍼를 포함한다.
예 9는 예 6 내지 예 8 중 어느 하나의 프로세서를 포함하는데, 옵션적으로, 프로세서의 명령어 세트는, 영구적 저장 펜스 버퍼로부터 데이터를 판독하는 유저 레벨 로드 명령어를 포함하지 않는다.
예 10은 예 6 내지 예 9 중 어느 하나의 프로세서를 포함하는데, 옵션적으로, 영구적 저장 펜스 버퍼는 캐시 일관성 프로토콜을 구현하지 않는다.
예 11은 예 1 내지 예 6 중 어느 하나의 프로세서를 포함하는데, 옵션적으로, 프로세서는, 프로세서를 영구적 스토리지와 커플링하기 위해 사용될 인터커넥트 상에서 송신될 하나 이상의 싸이클의 공통 세트에서, 제2 영구적 저장 펜스 명령어에 대응하는 제2 데이터 및 주어진 데이터를 구비하는 캐시 라인을 영구적 스토리지에 저장한다.
예 12는 영구적 저장 펜스 명령어를 수신하는 것을 포함하는 프로세서에서의 방법이다. 방법은, 영구적 저장 펜스 명령어에 응답하여, 원래의 프로그램 순서에서 영구적 저장 펜스 명령어 뒤에 발생하는 모든 후속하는 저장 명령어의 데이터가 영구적 스토리지에 영구적으로 저장되기 이전에, 영구적 저장 펜스 명령어에 대응하는 주어진 데이터가 영구적 스토리지에 영구적으로 저장되는 것을 보장하는 것을 포함한다.
예 13은 예 12의 방법을 포함하는데, 명령어를 수신하는 것은, 주어진 데이터를 구비하는 소스 오퍼랜드를 나타내는 그리고 주어진 데이터가 저장될 영구적 스토리지에서의 위치를 나타내는 저장 및 영구적 저장 펜스 명령어를 수신하는 것을 포함한다.
예 14는 예 12의 방법을 포함하는데, 주어진 데이터를 구비하는 소스 오퍼랜드를 나타내는 저장 명령어를 수신하는 것을 더 포함하고, 옵션적으로, 저장 명령어는 원래의 프로그램 순서에서 영구적 저장 펜스 명령어 직전 및 직후 중 하나에 있다.
예 15는 예 12 내지 예 14 중 어느 하나의 방법을 포함하는데, 영구적 저장 펜스 명령어에 응답하여, 주어진 데이터가 프로세서의 하나 이상의 캐시의 세트를 바이패스하게 하는 것을 더 포함한다.
예 16은 예 12 내지 예 15 중 어느 하나의 방법을 포함하는데, 옵션적으로, 보장하는 것은, 모든 후속하는 저장 명령어의 데이터가 영구적 스토리지에 영구적으로 저장되기 이전에 모든 이전의 저장 명령어의 데이터가 영구적 스토리지에 영구적으로 저장되는 것을 보장하지 않으면서, 상기 후속하는 저장 명령어의 데이터가 영구적 스토리지에 영구적으로 저장되기 이전에 주어진 데이터가 영구적 스토리지에 영구적으로 저장되는 것을 보장하는 것을 포함한다. 이전의 저장 명령어는, 원래의 프로그램 순서에서 영구적 저장 펜스 명령어 이전에 발생한다.
예 17은 예 12 내지 예 16 중 어느 하나의 방법을 포함하는데, 인터커넥트 상에서 송신되는 하나 이상의 싸이클의 공통 세트에서, 제2 영구적 저장 펜스 명령어에 대응하는 제2 데이터 및 주어진 데이터를 구비하는 캐시 라인을 영구적 스토리지에 저장하는 것을 더 포함한다.
예 18은 예 12 내지 예 17 중 어느 하나의 방법을 포함하는데, 영구적 저장 펜스 명령어에 응답하여, 영구적 저장 펜스 버퍼에 주어진 데이터를 저장하는 것을 더 포함한다. 또한, 옵션적으로, 프로세서의 명령어 세트는, 영구적 저장 펜스 버퍼로부터 데이터를 로드하는 유저 레벨 로드 명령어를 포함하지 않는다.
예 19는 예 18의 방법을 포함하는데, 캐시로부터 캐시 라인을 제거하려는 의도를 나타내는 신호를 수신하는 것, 및 신호를 수신한 이후, 그리고 캐시 라인이 캐시로부터 영구적 스토리지로 제거되기 이전에, 적어도 하나의 캐시 라인을 영구적 저장 펜스 버퍼로부터 영구적 스토리지로 저장한다.
예 20은 예 18 및 예 19 중 어느 하나의 방법을 포함하는데, 옵션적으로, 주어진 데이터를 영구적 저장 펜스 버퍼에 저장하는 것은, 제2 영구적 저장 펜스 명령어에 대응하는 제2 데이터를 구비하는 영구적 저장 펜스 버퍼의 캐시 라인에 주어진 데이터를 저장하는 것을 포함한다.
예 21은 예 12 내지 예 20 중 어느 하나의 방법을 포함하는데, 주어진 데이터를 영구적 메모리의 우선 기록 로그에 저장하는 것을 더 포함한다.
예 22는, 인터커넥트, 및 인터커넥트와 커플링되는 영구적 스토리지를 포함하는 명령어를 프로세싱하는 시스템이다. 영구적 스토리지는 로그 우선 기록 알고리즘의 명령어의 세트를 저장한다. 명령어의 세트는, 영구적 스토리지에서의 위치를 나타내는 그리고 주어진 데이터를 영구적 스토리지의 우선 기록 로그에 저장하는 로그 우선 기록 알고리즘에 의해 사용되는 저장 및 영구적 저장 펜스 명령어를 포함한다. 시스템은 또한 인터커넥트와 커플링되는 프로세서를 포함한다. 프로세서는 저장 및 영구적 저장 펜스 명령어를 수신한다. 프로세서는, 저장 및 영구적 저장 펜스 명령어에 응답하여, 원래의 프로그램 순서에서 로그 우선 기록 알고리즘의 저장 및 영구적 저장 펜스 명령어 뒤에 발생하는 모든 후속하는 저장 명령어의 데이터가 영구적 스토리지에 영구적으로 저장되기 이전에, 주어진 데이터가 영구적 스토리지에 영구적으로 저장되는 것을 보장한다.
예 23은 예 22의 시스템을 포함하는데, 옵션적으로, 영구적 저장 및 영구적 저장 펜스 명령어는, 주어진 데이터가 프로세서의 하나 이상의 캐시의 세트를 바이패스하게 하는 비일시적 명령어를 포함한다.
예 24는, 비일시적 머신 판독가능 저장 매체를 포함하는 제조 물품이다. 비일시적 머신 판독가능 저장 매체는 저장 및 영구적 저장 펜스 명령어를 저장한다. 저장 및 영구적 저장 펜스 명령어는, 주어진 데이터를 구비하는 소스 오퍼랜드를 나타내고 그리고 주어진 데이터가 저장될 영구적 스토리지에서의 위치를 나타낸다. 저장 및 영구적 저장 펜스 명령어는, 머신에 의해 실행되는 경우, 머신으로 하여금, 원래의 프로그램 순서에서 영구적 저장 펜스 명령어 뒤에 발생하는 모든 후속하는 저장 명령어의 데이터가 영구적 스토리지에 영구적으로 저장되기 이전에, 주어진 데이터가 영구적 스토리지에 영구적으로 저장되는 것을 보장하는 것을 포함하는 동작을 수행하게 한다.
예 25는 예 24의 제조 물품을 포함하는데, 옵션적으로, 저장 및 영구적 저장 펜스 명령어는, 머신에 의해 실행되는 경우, 원래의 프로그램 순서에서 저장 및 영구적 저장 펜스 명령어 이전에 발생하는 모든 이전의 저장 명령어의 데이터가, 후속하는 저장 명령어의 데이터 이전에 영구적 스토리지에 영구적으로 저장되는 것을 보장하게 하지 않는다.
예 26은, 예 12 내지 예 21 중 어느 하나의 방법을 수행하도록 동작하는 프로세서 또는 다른 장치이다.
예 27은, 예 12 내지 예 21 중 어느 하나의 방법을 수행하기 위한 수단을 포함하는 프로세서 또는 다른 장치이다.
예 28은, 예 12 내지 예 21 중 어느 하나의 방법을 수행하는 모듈을 포함하는 프로세서 또는 다른 장치이다.
예 29는, 예 12 내지 예 21 중 어느 하나의 방법을 수행하기 위한 모듈 및/또는 유닛 및/또는 로직 및/또는 회로부 및/또는 수단의 임의의 조합을 포함하는 프로세서이다.
예 30은, 프로세서, 컴퓨터 시스템, 전자 디바이스, 또는 다른 머신에 의해 실행되는 경우 및/또는 이들에 의한 실행시, 머신으로 하여금 예 12 내지 예 21 중 어느 하나의 방법을 수행하게 하는 명령어를 옵션적으로 저장하는 또는 다르게는 제공하는 옵션적으로 비일시적인 머신 판독가능 매체를 포함하는 제조 물품이다.
예 31은, 버스 또는 다른 인터커넥트 - 예 1 내지 예 11 중 어느 하나의 프로세서는 인터커넥트와 커플링됨 - , 및 동적 랜덤 액세스 메모리(DRAM), 네트워크 인터페이스, 그래픽 칩, 무선 통신 칩, 이동 통신용 글로벌 시스템(Global System for Mobile Communications; GSM) 안테나, 상변화 메모리, 및 비디오 카메라로부터 선택되는, 인터커넥트와 커플링되는 적어도 하나의 컴포넌트를 포함하는 컴퓨터 시스템, 다른 전자 디바이스, 또는 다른 장치이다.
예 32는 실질적으로 본원에서 설명되는 바와 같은 프로세서 또는 다른 장치이다.
예 33은, 실질적으로 본원에서 설명되는 바와 같은 임의의 방법을 수행하도록 동작하는 프로세서 또는 다른 장치이다.
예 34는, 실질적으로 본원에서 설명되는 바와 같은 임의의 영구적 저장 펜스 명령어를 수행하도록 동작하는 프로세서 또는 다른 장치이다.

Claims (28)

  1. 프로세서로서,
    영구적 저장 펜스 명령어(persistent store fence instruction)를 디코딩하는 디코드 유닛과,
    상기 디코드 유닛과 커플링되고, 하나 이상의 캐시 및, 저장 버퍼와 메모리 컨트롤러 중 적어도 하나를 포함하는 메모리 서브시스템을 포함하되,
    상기 영구적 저장 펜스 명령어를 디코딩하는 것은 상기 메모리 서브시스템으로 하여금, 원래의 프로그램 순서에서 상기 영구적 저장 펜스 명령어 뒤에 발생하는 모든 후속하는 저장 명령어의 데이터가 영구적 스토리지에 영구적으로 저장되기 이전에, 상기 영구적 저장 펜스 명령어에 대응하는 주어진 데이터가 상기 영구적 스토리지에 영구적으로 저장되는 것을 보장하게 하고,
    상기 영구적 저장 펜스 명령어를 디코딩하는 것은 상기 메모리 서브시스템으로 하여금, 상기 원래의 프로그램 순서에서 상기 영구적 저장 펜스 명령어 앞에 발생하는, 상기 주어진 데이터를 저장하는 데 사용되지 않는 임의의 이전의 저장 명령어의 데이터가, 상기 영구적 저장 펜스 명령어와 가장 최근의 이전의 영구적 저장 펜스 명령어 사이에 상기 주어진 데이터를 저장하는 데 사용되지 않는 적어도 하나의 이전의 저장 명령어가 존재하는 경우에도, 상기 후속하는 저장 명령어의 데이터 이전에 상기 영구적 스토리지에 영구적으로 저장되는 것을 보장하지 않도록 함 - 을 포함하는,
    프로세서.
  2. 제1항에 있어서,
    상기 영구적 저장 펜스 명령어는, 상기 주어진 데이터를 구비하는 소스 오퍼랜드(source operand)를 나타내고 상기 주어진 데이터가 저장될 상기 영구적 스토리지에서의 위치를 나타내는 저장 및 영구적 저장 펜스 명령어를 포함하는,
    프로세서.
  3. 제1항에 있어서,
    상기 주어진 데이터는, 상기 영구적 저장 펜스 명령어에 대해 암시적으로, 상기 원래의 프로그램 순서에서 상기 영구적 저장 펜스 명령어 직전 및 직후 중 하나에 있을 저장 명령어의 소스 오퍼랜드에 포함되는,
    프로세서.
  4. 삭제
  5. 제1항에 있어서,
    상기 메모리 서브시스템은, 상기 영구적 저장 펜스 명령어에 응답하여, 상기 주어진 데이터가 상기 하나 이상의 캐시의 세트를 바이패스하게 하는,
    프로세서.
  6. 제1항에 있어서,
    영구적 저장 펜스 버퍼를 더 포함하고, 상기 메모리 서브시스템은, 상기 영구적 저장 펜스 명령어에 응답하여, 상기 주어진 데이터가 상기 영구적 저장 펜스 버퍼에 저장되게 하는,
    프로세서.
  7. 제6항에 있어서,
    주어진 캐시 라인이 주어진 캐시로부터 제거되기 이전에 상기 주어진 캐시 라인을 상기 주어진 캐시로부터 제거하려는 의도를 나타내는 신호에 기초하여 적어도 하나의 캐시 라인을 상기 영구적 저장 펜스 버퍼로부터 상기 영구적 스토리지에 저장하는 영구적 저장 펜스 버퍼 관리 유닛을 더 포함하는,
    프로세서.
  8. 제6항에 있어서,
    상기 영구적 저장 펜스 버퍼는, 제2 영구적 저장 펜스 명령어에 대응하는 제2 데이터가, 상기 주어진 데이터와 동일한 상기 영구적 저장 펜스 버퍼의 캐시 라인에 저장되는 것을 허용하는 기록 결합 버퍼를 포함하는,
    프로세서.
  9. 제6항에 있어서,
    상기 프로세서의 명령어 세트는, 상기 영구적 저장 펜스 버퍼로부터 데이터를 판독하는 유저 레벨 로드 명령어를 포함하지 않는,
    프로세서.
  10. 제6항에 있어서,
    상기 영구적 저장 펜스 버퍼는 캐시 일관성 프로토콜(cache coherency protocol)을 구현하지 않는,
    프로세서.
  11. 제1항에 있어서,
    상기 프로세서는, 상기 프로세서를 상기 영구적 스토리지와 커플링하는 데 사용될 인터커넥트 상에서 송신될 하나 이상의 싸이클의 공통 세트에서, 제2 영구적 저장 펜스 명령어에 대응하는 제2 데이터 및 상기 주어진 데이터를 구비하는 캐시 라인을 상기 영구적 스토리지에 함께 저장하는,
    프로세서.
  12. 프로세서에서의 방법으로서,
    영구적 저장 펜스 명령어를 수신하는 단계와,
    상기 영구적 저장 펜스 명령어에 응답하여, 원래의 프로그램 순서에서 상기 영구적 저장 펜스 명령어 뒤에 발생하는 모든 후속하는 저장 명령어의 데이터가 영구적 스토리지에 영구적으로 저장되기 이전에, 상기 영구적 저장 펜스 명령어에 대응하는 주어진 데이터가 상기 영구적 스토리지에 영구적으로 저장되는 것을 보장하는 단계 - 상기 보장하는 단계는, 상기 원래의 프로그램 순서에서 상기 영구적 저장 펜스 명령어 앞에 그리고 상기 영구적 저장 펜스 명령어와 가장 최근의 이전의 영구적 저장 펜스 명령어 사이에 발생하는 상기 주어진 데이터를 저장하는 데 사용되지 않는 임의의 이전의 저장 명령어의 데이터가, 상기 주어진 데이터를 저장하는 데 사용되지 않는 적어도 하나의 이전의 저장 명령어가 존재하는 경우에도, 상기 모든 후속하는 저장 명령어의 데이터가 상기 영구적 스토리지에 영구적으로 저장되기 이전에 상기 영구적 스토리지에 영구적으로 저장되는 것을 보장하지 않음 - 를 포함하는,
    방법.
  13. 제12항에 있어서,
    상기 영구적 저장 펜스 명령어를 수신하는 단계는, 상기 주어진 데이터를 구비하는 소스 오퍼랜드를 나타내고 상기 주어진 데이터가 저장될 상기 영구적 스토리지에서의 위치를 나타내는 저장 및 영구적 저장 펜스 명령어를 수신하는 단계를 포함하는,
    방법.
  14. 제12항에 있어서,
    상기 주어진 데이터를 구비하는 소스 오퍼랜드를 나타내는 주어진 저장 명령어를 수신하는 단계를 더 포함하고, 상기 주어진 저장 명령어는 상기 원래의 프로그램 순서에서 상기 영구적 저장 펜스 명령어 직전 및 직후 중 하나에 있는,
    방법.
  15. 제12항에 있어서,
    상기 영구적 저장 펜스 명령어에 응답하여, 상기 주어진 데이터가 상기 프로세서의 하나 이상의 캐시의 세트를 바이패스하게 하는 단계를 더 포함하는,
    방법.
  16. 삭제
  17. 제12항에 있어서,
    인터커넥트 상에서, 제2 영구적 저장 펜스 명령어에 대응하는 제2 데이터 및 상기 주어진 데이터를 구비하는 캐시 라인을 상기 영구적 스토리지에 함께 저장하는 단계를 더 포함하는,
    방법.
  18. 제12항에 있어서,
    상기 영구적 저장 펜스 명령어에 응답하여 상기 주어진 데이터를 영구적 저장 펜스 버퍼에 저장하는 단계를 더 포함하고, 상기 프로세서의 명령어 세트는, 상기 영구적 저장 펜스 버퍼로부터 데이터를 로드하는 유저 레벨 로드 명령어를 포함하지 않는,
    방법.

  19. 제18항에 있어서,
    캐시로부터 주어진 캐시 라인을 제거하려는 의도를 나타내는 신호를 수신하는 단계와,
    상기 신호를 수신한 이후, 그리고 상기 주어진 캐시 라인이 상기 캐시로부터 상기 영구적 스토리지로 이동되기 이전에, 적어도 하나의 캐시 라인을 상기 영구적 저장 펜스 버퍼로부터 상기 영구적 스토리지로 저장하는 단계를 더 포함하는,
    방법.
  20. 제 18 항에 있어서,
    상기 주어진 데이터를 영구적 저장 펜스 버퍼에 저장하는 단계는 제 2 영구적 저장 펜스 명령어에 대응하는 제 2 데이터를 갖는 상기 영구적 저장 펜스 버퍼의 캐시 라인에 상기 주어진 데이터를 저장하는 단계를 포함하는,
    방법.
  21. 제12항에 있어서,
    상기 주어진 데이터를 상기 영구적 스토리지의 우선 기록 로그(write-ahead log)에 저장하는 단계를 더 포함하는,
    방법.
  22. 명령어를 프로세싱하는 시스템으로서,
    인터커넥트와,
    상기 인터커넥트와 커플링되는 영구적 스토리지 - 상기 영구적 스토리지는 우선 기록 로그(write-ahead logging) 알고리즘의 명령어의 세트를 저장하고, 상기 명령어의 세트는, 상기 영구적 스토리지에서의 위치를 나타내고 주어진 데이터를 상기 영구적 스토리지의 우선 기록 로그에 저장하기 위해 상기 우선 기록 로그 알고리즘에 의해 사용되는 저장 및 영구적 저장 펜스 명령어를 포함함 - 와,
    상기 인터커넥트와 커플링되는 프로세서 - 상기 프로세서는 상기 저장 및 영구적 저장 펜스 명령어를 수신하고, 상기 프로세서는, 상기 저장 및 영구적 저장 펜스 명령어에 응답하여, 원래의 프로그램 순서에서 상기 우선 기록 로그 알고리즘의 상기 저장 및 영구적 저장 펜스 명령어 뒤에 발생하는 모든 후속하는 저장 명령어의 데이터가 상기 영구적 스토리지에 영구적으로 저장되기 이전에, 상기 주어진 데이터가 상기 영구적 스토리지에 영구적으로 저장되는 것을 보장하나, 상기 원래의 프로그램 순서에서 상기 우선 기록 로그 알고리즘의 상기 저장 및 영구적 저장 펜스 명령어 앞에 그리고 가장 최근의 저장 및 영구적 저장 펜스 명령어 뒤에 발생하는 모든 이전의 저장 명령어의 데이터가, 상기 모든 후속하는 저장 명령어의 데이터가 상기 영구적 스토리지에 영구적으로 저장되기 이전에, 적어도 하나의 이전의 저장 명령어가 존재하는 경우에도, 상기 영구적 스토리지에 영구적으로 저장되는 것을 보장하지 않도록 함 - 를 포함하는,
    시스템.
  23. 제22항에 있어서,
    상기 영구적 저장 및 영구적 저장 펜스 명령어는, 상기 주어진 데이터가 상기 프로세서의 하나 이상의 캐시의 세트를 바이패스하게 하는 비일시적 명령어를 포함하는,
    시스템.
  24. 비일시적 머신 판독가능 저장 매체를 포함하는 제조 물품으로서,
    상기 비일시적 머신 판독가능 저장 매체는 저장 명령어 및 영구적 저장 펜스 명령어를 저장하고,
    상기 저장 명령어 및 상기 영구적 저장 펜스 명령어는 주어진 데이터를 구비하는 소스 오퍼랜드를 나타내고 상기 주어진 데이터가 저장될 영구적 스토리지에서의 위치를 나타내며,
    상기 저장 명령어 및 상기 영구적 저장 펜스 명령어는 머신에 의해 실행되는 경우, 상기 머신으로 하여금,
    원래의 프로그램 순서에서 상기 영구적 저장 펜스 명령어 뒤에 발생하는 모든 후속하는 저장 명령어의 데이터가 상기 영구적 스토리지에 영구적으로 저장되기 이전에, 상기 주어진 데이터가 상기 영구적 스토리지에 영구적으로 저장되는 것을 보장하나, 상기 원래의 프로그램 순서에서 상기 저장 명령어 및 상기 영구적 저장 펜스 명령어 앞에 그리고 가장 최근의 저장 명령어 및 영구적 저장 펜스 명령어 뒤에 발생하는 모든 이전의 저장 명령어의 데이터가, 상기 모든 후속하는 저장 명령어의 데이터가 상기 영구적 스토리지에 영구적으로 저장되기 이전에, 적어도 하나의 이전의 저장 명령어가 존재하는 경우에도, 상기 영구적 스토리지에 영구적으로 저장되는 것을 보장하지 않도록 하는 동작을 수행하게 하는,
    제조 물품.
  25. 삭제
  26. 프로세서로서,
    영구적 저장 펜스 명령어를 디코딩하는 디코드 유닛과,
    상기 디코드 유닛과 커플링되는 실행 유닛을 포함하되,
    상기 실행 유닛은 상기 영구적 저장 펜스 명령어에 응답하여, 원래의 프로그램 순서에서 상기 영구적 저장 펜스 명령어 뒤에 발생하는 모든 후속하는 저장 명령어의 데이터가 영구적 스토리지에 영구적으로 저장되기 이전에, 상기 영구적 저장 펜스 명령어에 대응하는 주어진 데이터가 상기 영구적 스토리지에 영구적으로 저장되는 것을 보장하고,
    상기 실행 유닛은 상기 영구적 저장 펜스 명령어에 응답하여, 상기 원래의 프로그램 순서에서 상기 영구적 저장 펜스 명령어 앞에 그리고 가장 최근의 이전의 영구적 저장 펜스 명령어 뒤에 발생하는 모드 이전의 저장 명령어의 데이터가, 상기 후속하는 저장 명령어의 데이터 앞에 상기 영구적 스토리지에 영구적으로 저장되는 것을 보장하지 않도록 하는,
    프로세서.
  27. 제26항에 있어서,
    상기 영구적 저장 펜스 명령어는, 상기 주어진 데이터를 구비하는 소스 오퍼랜드(source operand)를 나타내고 상기 주어진 데이터가 저장될 상기 영구적 스토리지에서의 위치를 나타내는 저장 및 영구적 저장 펜스 명령어를 포함하는,
    프로세서.
  28. 제26항에 있어서,
    상기 영구적 저장 펜스 명령어를 페치하는 명령어 페치 유닛을 더 포함하고,
    상기 실행 유닛은, 상기 영구적 저장 펜스 명령어에 응답하여, 상기 원래의 프로그램 순서에서 상기 영구적 저장 펜스 명령어 앞에 그리고 가장 최근의 이전의 영구적 저장 펜스 명령어 뒤에 발생하는 모든 이전의 저장 명령어의 데이터가, 상기 후속하는 저장 명령어의 데이터 앞에 상기 영구적 스토리지에 영구적으로 저장되는 것을 보장하지 않도록 하는,
    프로세서.
KR1020177005384A 2014-09-26 2015-08-31 영구적 저장 펜스 프로세서, 방법, 시스템, 및 명령어 KR102282135B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/498,178 US10489158B2 (en) 2014-09-26 2014-09-26 Processors, methods, systems, and instructions to selectively fence only persistent storage of given data relative to subsequent stores
US14/498,178 2014-09-26
PCT/US2015/047741 WO2016048592A1 (en) 2014-09-26 2015-08-31 Persistent store fence processors, methods, systems, and instructions

Publications (2)

Publication Number Publication Date
KR20170039237A KR20170039237A (ko) 2017-04-10
KR102282135B1 true KR102282135B1 (ko) 2021-07-26

Family

ID=55581784

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177005384A KR102282135B1 (ko) 2014-09-26 2015-08-31 영구적 저장 펜스 프로세서, 방법, 시스템, 및 명령어

Country Status (7)

Country Link
US (1) US10489158B2 (ko)
EP (1) EP3198403A4 (ko)
JP (1) JP2017532643A (ko)
KR (1) KR102282135B1 (ko)
CN (1) CN106575218B (ko)
TW (1) TWI598821B (ko)
WO (1) WO2016048592A1 (ko)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10489158B2 (en) 2014-09-26 2019-11-26 Intel Corporation Processors, methods, systems, and instructions to selectively fence only persistent storage of given data relative to subsequent stores
US9971686B2 (en) 2015-02-23 2018-05-15 Intel Corporation Vector cache line write back processors, methods, systems, and instructions
US10303477B2 (en) * 2015-06-26 2019-05-28 Intel Corporation Persistent commit processors, methods, systems, and instructions
JP6674085B2 (ja) * 2015-08-12 2020-04-01 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US10127243B2 (en) * 2015-09-22 2018-11-13 International Business Machines Corporation Fast recovery using self-describing replica files in a distributed storage system
US9747174B2 (en) 2015-12-11 2017-08-29 Microsoft Technology Licensing, Llc Tail of logs in persistent main memory
US10254967B2 (en) * 2016-01-13 2019-04-09 Sandisk Technologies Llc Data path control for non-volatile memory
US10324650B2 (en) * 2016-09-23 2019-06-18 Advanced Micro Devices, Inc. Scoped persistence barriers for non-volatile memories
US11216396B2 (en) 2016-09-29 2022-01-04 Intel Corporation Persistent memory write semantics on PCIe with existing TLP definition
CN107885671B (zh) * 2016-09-30 2021-09-14 华为技术有限公司 一种非易失性内存的持久化方法和计算设备
US10528255B2 (en) 2016-11-11 2020-01-07 Sandisk Technologies Llc Interface for non-volatile memory
US10528286B2 (en) 2016-11-11 2020-01-07 Sandisk Technologies Llc Interface for non-volatile memory
US10528267B2 (en) 2016-11-11 2020-01-07 Sandisk Technologies Llc Command queue for storage operations
US10409603B2 (en) * 2016-12-30 2019-09-10 Intel Corporation Processors, methods, systems, and instructions to check and store indications of whether memory addresses are in persistent memory
US11106468B2 (en) * 2017-05-23 2021-08-31 Eta Scale Ab System and method for non-speculative reordering of load accesses
US11436087B2 (en) * 2017-05-31 2022-09-06 Everspin Technologies, Inc. Systems and methods for implementing and managing persistent memory
US10282298B2 (en) 2017-06-13 2019-05-07 Microsoft Technology Licensing, Llc Store buffer supporting direct stores to a coherence point
US10303603B2 (en) * 2017-06-13 2019-05-28 Microsoft Technology Licensing, Llc Low power multi-core coherency
US10936441B2 (en) 2017-12-15 2021-03-02 Microsoft Technology Licensing, Llc Write-ahead style logging in a persistent memory device
US11016669B2 (en) * 2018-05-01 2021-05-25 Qualcomm Incorporated Persistent write data for energy-backed memory
CN110647480B (zh) * 2018-06-26 2023-10-13 华为技术有限公司 数据处理方法、远程直接访存网卡和设备
US20200210186A1 (en) * 2018-12-27 2020-07-02 Intel Corporation Apparatus and method for non-spatial store and scatter instructions
TWI767175B (zh) 2019-01-31 2022-06-11 美商萬國商業機器公司 用於處理輸入輸出儲存指令之資料處理系統、方法及電腦程式產品
TWI773959B (zh) 2019-01-31 2022-08-11 美商萬國商業機器公司 用於處理輸入輸出儲存指令之資料處理系統、方法及電腦程式產品
US11416397B2 (en) * 2019-10-14 2022-08-16 Intel Corporation Global persistent flush
US11392380B2 (en) * 2019-12-28 2022-07-19 Intel Corporation Apparatuses, methods, and systems to precisely monitor memory store accesses
CN111857825A (zh) 2020-07-20 2020-10-30 北京百度网讯科技有限公司 指令执行方法、装置、电子设备和计算机可读存储介质
US11847048B2 (en) * 2020-09-24 2023-12-19 Advanced Micro Devices, Inc. Method and apparatus for providing persistence to remote non-volatile memory
US11853605B2 (en) 2021-09-17 2023-12-26 Micron Technology, Inc. Database persistence

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020169947A1 (en) 2001-05-11 2002-11-14 Gianfranco Bilardi Scalable processer
US20030084259A1 (en) 1999-12-30 2003-05-01 Intel Corporation MFENCE and LFENCE micro-architectural implementation method and system
US20120254120A1 (en) * 2011-03-31 2012-10-04 International Business Machines Corporation Logging system using persistent memory
US20140281196A1 (en) 2013-03-15 2014-09-18 Martin G. Dixon Processors, methods, and systems to relax synchronization of accesses to shared memory
US20140281269A1 (en) 2013-03-13 2014-09-18 Hewlett-Packard Development Company, L.P. Non-volatile memory update tracking

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1265132A3 (en) 1994-12-02 2005-02-09 Intel Corporation Microprocessor with packing operation of composite operands
US6073210A (en) 1998-03-31 2000-06-06 Intel Corporation Synchronization of weakly ordered write combining operations using a fencing mechanism
US6546462B1 (en) 1999-12-30 2003-04-08 Intel Corporation CLFLUSH micro-architectural implementation method and system
US6708269B1 (en) 1999-12-30 2004-03-16 Intel Corporation Method and apparatus for multi-mode fencing in a microprocessor system
US7243200B2 (en) 2004-07-15 2007-07-10 International Business Machines Corporation Establishing command order in an out of order DMA command queue
US7606998B2 (en) 2004-09-10 2009-10-20 Cavium Networks, Inc. Store instruction ordering for multi-core processor
US8909871B2 (en) 2006-08-03 2014-12-09 International Business Machines Corporation Data processing system and method for reducing cache pollution by write stream memory access patterns
JP4983919B2 (ja) * 2007-06-20 2012-07-25 富士通株式会社 演算処理装置および演算処理装置の制御方法
US8219741B2 (en) 2008-10-24 2012-07-10 Microsoft Corporation Hardware and operating system support for persistent memory on a memory bus
US10430298B2 (en) 2010-10-28 2019-10-01 Microsoft Technology Licensing, Llc Versatile in-memory database recovery using logical log records
WO2013147820A1 (en) 2012-03-29 2013-10-03 Intel Corporation System and method for managing persistence with a multi-level memory hierarchy including non-volatile memory
US9081606B2 (en) 2012-11-13 2015-07-14 International Business Machines Corporation Asynchronous persistent stores for transactions
US9547594B2 (en) 2013-03-15 2017-01-17 Intel Corporation Instructions to mark beginning and end of non transactional code region requiring write back to persistent storage
US9367472B2 (en) * 2013-06-10 2016-06-14 Oracle International Corporation Observation of data in persistent memory
US9423959B2 (en) 2013-06-29 2016-08-23 Intel Corporation Method and apparatus for store durability and ordering in a persistent memory architecture
WO2015012871A1 (en) * 2013-07-26 2015-01-29 Intel Corporation Methods and apparatus for supporting persistent memory
US20150095578A1 (en) * 2013-09-27 2015-04-02 Kshitij Doshi Instructions and logic to provide memory fence and store functionality
US10489158B2 (en) 2014-09-26 2019-11-26 Intel Corporation Processors, methods, systems, and instructions to selectively fence only persistent storage of given data relative to subsequent stores

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030084259A1 (en) 1999-12-30 2003-05-01 Intel Corporation MFENCE and LFENCE micro-architectural implementation method and system
US20020169947A1 (en) 2001-05-11 2002-11-14 Gianfranco Bilardi Scalable processer
US20120254120A1 (en) * 2011-03-31 2012-10-04 International Business Machines Corporation Logging system using persistent memory
US20140281269A1 (en) 2013-03-13 2014-09-18 Hewlett-Packard Development Company, L.P. Non-volatile memory update tracking
US20140281196A1 (en) 2013-03-15 2014-09-18 Martin G. Dixon Processors, methods, and systems to relax synchronization of accesses to shared memory

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
S. Thakkur et al., "Internet Streaming SIMD Extensions", Computer, IEEE Computer Society, vol. 32, no. 12, 1 December 1999.

Also Published As

Publication number Publication date
WO2016048592A1 (en) 2016-03-31
CN106575218A (zh) 2017-04-19
CN106575218B (zh) 2020-06-26
EP3198403A1 (en) 2017-08-02
KR20170039237A (ko) 2017-04-10
EP3198403A4 (en) 2018-05-30
US10489158B2 (en) 2019-11-26
US20160092223A1 (en) 2016-03-31
TWI598821B (zh) 2017-09-11
TW201624279A (zh) 2016-07-01
JP2017532643A (ja) 2017-11-02

Similar Documents

Publication Publication Date Title
KR102282135B1 (ko) 영구적 저장 펜스 프로세서, 방법, 시스템, 및 명령어
CN108292221B (zh) 事务结束加上持续性提交指令、处理器、方法和系统
US10409603B2 (en) Processors, methods, systems, and instructions to check and store indications of whether memory addresses are in persistent memory
US20170097826A1 (en) System, Method, and Apparatus for Improving Throughput of Consecutive Transactional Memory Regions
US9870209B2 (en) Instruction and logic for reducing data cache evictions in an out-of-order processor
US9471494B2 (en) Method and apparatus for cache line write back operation
US10296343B2 (en) Hybrid atomicity support for a binary translation based microprocessor
US10540178B2 (en) Eliminating redundant stores using a protection designator and a clear designator
US10768680B2 (en) Hardware apparatuses and methods to perform transactional power management
US9971599B2 (en) Instruction and logic for support of code modification
US20150134932A1 (en) Structure access processors, methods, systems, and instructions
KR101806279B1 (ko) 명령어 순서 강제 명령어들의 쌍들, 프로세서들, 방법들, 및 시스템들
KR20170001568A (ko) 영구 커밋 프로세서들, 방법들, 시스템들 및 명령어들
US11048516B2 (en) Systems, methods, and apparatuses for last branch record support compatible with binary translation and speculative execution using an architectural bit array and a write bit array
US20200310798A1 (en) Technology For Providing Memory Atomicity With Low Overhead
US10635465B2 (en) Apparatuses and methods to prevent execution of a modified instruction

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant