KR20210122043A - 프리페처들을 동적으로 활성화 및/또는 비활성화하기 위한 방법들 및 장치들 - Google Patents

프리페처들을 동적으로 활성화 및/또는 비활성화하기 위한 방법들 및 장치들 Download PDF

Info

Publication number
KR20210122043A
KR20210122043A KR1020200173180A KR20200173180A KR20210122043A KR 20210122043 A KR20210122043 A KR 20210122043A KR 1020200173180 A KR1020200173180 A KR 1020200173180A KR 20200173180 A KR20200173180 A KR 20200173180A KR 20210122043 A KR20210122043 A KR 20210122043A
Authority
KR
South Korea
Prior art keywords
prefetcher
telemetry
core
prefetcher state
phase
Prior art date
Application number
KR1020200173180A
Other languages
English (en)
Inventor
한나 알람
리오르 펠레드
라파엘 미즈라히
아미르 레이보비츠
조나단 베이멜
제임스 헤르메르딩 2세
지라드 올스왕
미칼 모란
모란 페리
아이도 카라바니
수드히어 나이르
하다스 베자
아비샤이 와그너
로넨 라페르돈
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 KR20210122043A publication Critical patent/KR20210122043A/ko

Links

Images

Classifications

    • 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 or look ahead
    • G06F9/3802Instruction prefetching
    • 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/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • 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
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • 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 or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • 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/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/505Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3024Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/81Threshold
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/88Monitoring involving counting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6026Prefetching based on access pattern detection, e.g. stride based prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/654Look-ahead translation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Quality & Reliability (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Debugging And Monitoring (AREA)

Abstract

프리페처들을 동적으로 활성화 및/또는 비활성화하기 위한 개시된 방법들, 장치들, 및 제조 물품들이 개시된다. 예시적인 장치는 중앙 처리 유닛 내의 코어의 카운터에 대응하는 원격측정 데이터에 액세스하기 위한 인터페이스 - 카운터는 중앙 처리 유닛에서 실행되는 워크로드의 제1 페이즈에 대응함 -; 및 원격측정 데이터에 기초하여 후속 페이즈에 대한 프리페처 상태를 선택하기 위한 프리페처 상태 선택기를 포함하고, 인터페이스는 중앙 처리 유닛 내의 코어에게 프리페처 상태에 따라 후속 페이즈에서 동작할 것을 명령한다.

Description

프리페처들을 동적으로 활성화 및/또는 비활성화하기 위한 방법들 및 장치들{METHODS AND APPARATUS TO DYNAMICALLY ENABLE AND/OR DISABLE PREFETCHERS}
관련 출원
본 특허는 2020년 3월 27일자로 출원된 미국 가특허 출원 제63/000,975호의 미국 특허 출원으로부터 나온 것이다. 미국 가특허 출원 제63/000,975호는 그 전체내용이 여기에 참조로 포함된다. 미국 가특허 출원 제63/000,975호에 대한 우선권이 여기에 주장된다.
기술 분야
본 개시내용은 일반적으로 프로세서들에 관한 것으로, 더 구체적으로는 프리페처들을 동적으로 활성화(enable) 및/또는 비활성화(disable)하기 위한 방법들 및 장치들에 관한 것이다.
프리페처(prefetcher)는 중앙 처리 유닛에 의해 사용될 확률이 높은, 메모리 내에 저장된 데이터를 캐싱함으로써 중앙 처리 유닛의 동작 속도를 높이는, 중앙 처리 유닛에 의해 수행되는 프로토콜이다. 이러한 방식에서, 중앙 처리 유닛은 메모리를 검색하기 전에 캐시에서 데이터를 검색할 수 있다. 중앙 처리 유닛은 메모리로부터 데이터를 획득하는 것보다 더 빠르게 캐시로부터 데이터를 획득할 수 있기 때문에, 중앙 처리 유닛이 메모리가 아닌 캐시에서 데이터를 찾을 때, 중앙 처리 유닛은 더 빠르게 및/또는 더 효율적으로 동작한다.
도 1은 본 명세서에 개시된 예들과 관련하여 설명된 중앙 처리 유닛의 예시적인 구현의 블록도이다.
도 2는 도 1의 프리페처 제어기의 예시적인 구현의 블록도이다.
도 3a - 도 3b는 도 1의 프리페처 제어기를 구현하기 위해 실행될 수 있는 예시적인 머신 판독가능한 명령어들을 표현하는 흐름도를 도시한다.
도 4는 도 1의 머신 러닝 모델 트레이너를 구현하기 위해 실행될 수 있는 예시적인 머신 판독가능한 명령어들을 표현하는 흐름도를 도시한다.
도 5는 도 1의 프리페처 제어기를 구현하기 위해 실행될 수 있는 예시적인 머신 판독가능한 명령어들을 표현하는 흐름도를 도시한다.
도 6은 도 1의 프리페처 제어기 및/또는 머신 러닝 트레이너를 구현하기 위해 도 3a, 도 3b, 도 4 및/또는 도 5의 명령어들을 실행하도록 구조화된 예시적인 프로세서 플랫폼의 블록도이다.
도면들은 비례에 맞지 않는다. 일반적으로, 동일하거나 유사한 부분들을 지칭하기 위해, 도면(들) 및 첨부된 설명 전체에 걸쳐 동일한 참조번호들이 사용될 것이다.
설명어 "제1", "제2", "제3" 등은 별개로 언급될 수 있는 복수의 요소 또는 컴포넌트를 식별할 때 여기에서 사용된다. 사용의 맥락에 기초하여 다르게 명시되거나 이해되지 않는 한, 그러한 설명어들은 우선순위 또는 시간적 순서화의 어떤 의미도 전가하도록 의도되는 것이 아니라, 개시된 예들을 쉽게 이해하기 위해 복수의 요소 또는 컴포넌트를 개별적으로 참조하기 위한 레이블로서만 의도된다. 일부 예들에서, 설명어 "제1"은 상세한 설명에서 요소를 지칭하기 위해 사용될 수 있는 반면, 동일한 요소는 "제2" 또는 "제3"과 같은 다른 설명어와 함께 청구항에서 참조될 수 있다. 이러한 경우들에서, 이러한 설명어들은 단순히 복수의 요소 또는 컴포넌트를 쉽게 참조하기 위해 사용된다는 점을 이해해야 한다.
중앙 처리 유닛(CPU)은 프로그램 또는 워크로드를 구성하는 명령어들을 실행하는 전자 회로이다. CPU는 메인 메모리로부터의 데이터에 액세스함으로써 명령어들을 실행하기 위한 하나 이상의 프로세서 코어를 포함할 수 있다. 메인 메모리로부터의 데이터에 액세스하는 데에는 시간(예를 들어, 대기시간)이 걸리기 때문에, 하나 이상의 프로세서 코어는 메모리로부터 데이터를 획득하고 그것을 캐시에 로컬로 저장할 수 있다. 캐시는 메인 메모리보다 작고 빠르다. 이러한 방식으로, 프로세서 코어들은 메인 메모리와 덜 빈번하게 인터페이싱함으로써 더 짧은 대기시간으로 캐시에서 로컬로 데이터를 사용 및/조작할 수 있다.
대기시간을 더 감소시키고/거나 성능을 더 증대하기 위해, 프로세서 코어는 프리페처를 구현할 수 있다. 프리페처, 프리페처 프로토콜, 또는 프리페치는 데이터 및/또는 명령어가 필요하기 전에 프로세서 코어가 메모리로부터 데이터 또는 명령어들을 프리페치하는 프로토콜이다. 예를 들어, 명령어들이 코어에 의해 실행되기 전에, 프리페치 프로토콜은 메모리로부터 데이터 및/또는 코드 섹션들을 획득하고, 획득된 데이터 또는 코드를 캐시에 저장한다. 활성화 및/또는 비활성화될 수 있는 복수의 유형의 프리페처가 존재할 수 있다(예를 들어, 레벨 1(L1) 프리페처, 레벨 2(L2) 프리페처, 레벨 3(L3) 프리페처 등). 프리페처 프로토콜이 나중에 코어에 의해 사용되는 데이터를 프리페치하는 경우, 성능 및 대기시간이 향상된다. 그러나, 코어에 의해 사용되지 않는 데이터를 프리페치(예를 들어, 쓸모없는 프리페칭, 잘못된 프리페칭 등)하는 프리페처 프로토콜에 의해, 코어들은 추가 메모리 대역폭을 소비하며, 이는 캐시 스래싱(cache thrashing)을 야기할 수 있고 추가 전력을 필요로 할 수 있다. 일부 워크로드들은 쓸모없는 프리페칭의 경향이 더 강하고, 프리페처가 비활성화될 때 개선을 나타낸다. 따라서, 본 명세서에 개시된 예들은 워크로드의 페이즈들에서 샘플링된 원격측정 데이터(telemetry data)에 기초하여 하나 이상의 프리페처를 동적으로 활성화 및/또는 비활성화한다. 원격측정 데이터는 코어들 및/또는 CPU의 임의의 다른 컴포넌트(예를 들어, 언코어)의 성능을 모니터링하기 위해 사용되는 데이터를 포함한다.
원격측정 데이터를 결정하기 위해, 본 명세서에 개시된 예들은 성능 카운터들로부터 카운트들을 획득하여, 예를 들어 현재 샘플 페이즈 또는 이전 샘플 페이즈에 기초하여 초 당 명령어들, 쓸모없는 프리페치들, 코어 및 언코어 내의 스트레스 원격측정, 캐시 적중률 등을 식별할 수 있다. 각각의 페이즈는 원격측정 데이터가 샘플링 및/또는 처리되는 시점을 표현한다(예를 들어, 500 밀리초마다). 본 명세서에 개시된 예들은 현재 페이즈 및/또는 이전 페이즈들로부터의 그러한 원격측정 데이터를 사용하여, 후속 페이즈에 대한 하나 이상의 프리페처 프로토콜을 활성화 또는 비활성화하고, 그에 의해 CPU에서의 프리페처 사용의 효율성 및/또는 유용성을 증가시킨다. 여기에 개시된 일부 예들에서, 머신 러닝 모델(예를 들어, DL 모델, 신경망, 및/또는 임의의 다른 AI 기반 모델)은 알려진 원격측정 트레이닝 데이터에 기초하여 CPU의 코어들에 대해 프리페처가 활성화되어야 하는지 또는 비활성화되어야 하는지를 선택하도록 트레이닝될 수 있다. 이러한 방식으로, 본 명세서에 개시된 예들은 현재 페이즈 및/또는 이전 페이즈들의 원격측정 데이터에 기초하여 트레이닝된 모델을 사용하여 후속 페이즈가 프리페처를 활성화해야 하는지 또는 비활성화해야 하는지를 결정하기 위해 사용될 수 있다. 현재 페이즈는 원격측정 데이터가 샘플링 및/또는 처리되는 현재 시간에 대응하고, 이전 페이즈들은 이전 원격측정 데이터가 샘플링 및/또는 처리된 이전 시점들에 대응한다.
도 1은 예시적인 중앙 처리 유닛(CPU)(100)의 예시적인 구현의 블록도이다. 도 1의 예시적인 CPU(100)는 예시적인 코어(들)(102), 예시적인 카운터(들)(104), 예시적인 모델 특정 레지스터(들)(MSR(들))(106), 예시적인 메모리(108), 예시적인 애플리케이션(110), 및 예시적인 프리페처 제어기(112))를 포함한다. 예시적인 CPU(100)는 예시적인 ML 모델 트레이너(114)로부터 트레이닝된 모델들(예를 들어, 머신 러닝(ML) 모델들, 트레이닝된 신경망 데이터 등)을 수신한다.
도 1의 예시적인 CPU(100)는 임베디드 시스템, 필드 프로그래밍가능한 게이트 어레이, 공유 메모리 제어기, 네트워크 온-칩, 네트워크화된 시스템, 및/또는 하드웨어(예를 들어, 반도체 기반) 프로세서, 메모리 및/또는 캐시를 포함하는 임의의 다른 회로일 수 있다. 예시적인 CPU(100)는 예시적인 애플리케이션(110)을 구현하기 위한 명령어들을 실행하기 위해 프로세서 리소스들(예를 들어, 예시적인 메모리(108), 레지스터(들), 및/또는 예시적인 프로세서 코어(들)(102)의 논리 회로)를 이용한다.
도 1의 예시적인 프로세서 코어(들)(102)는 (예를 들어, 데이터를 판독 및/또는 기입함으로써) 예시적인 애플리케이션(110)으로부터의 명령어들(예를 들어, 워크로드)을 실행한다. 일부 예들에서, 코어(들)는 하나 이상의 프리페처(예를 들어, L1 프리페처, L2 프리페처 등)를 사용할 수 있다. 프리페처는 메모리(108)에 대한 액세스들을 예측하고, 예측된 데이터를 메모리(108)로부터 페치하고, 데이터를 미리 로컬 캐시(예를 들어, 코어(들)(102)의 캐시)에 저장하여, 메모리 대기시간을 완화한다. 일부 프리페처들(예를 들어, 레벨 3(L3) 캐시 프리페처)는 예측 깊이(예를 들어, 얼마나 많은 데이터를 미리 수집할지) 및/또는 레이트(예를 들어, 프리페처 정도)의 측면에서 더 공격적이다. 따라서, 이러한 프리페처들은 메모리 대역폭을 소비하는 잘못된 데이터를 미리 획득(예를 들어, 잘못된 프리페치들을 획득)할 가능성이 높고, 이는 캐시 스래싱을 유발하고 전력 소비를 증가시킨다. 일부 워크로드들 또는 실행 페이즈들(예를 들어, 코어(들)(102)에 의해 실행되는 명령어들)은 다른 것들보다 비효율적인 프리페칭의 경향이 더 강하고, 하나 이상의 프리페처가 비활성화될 때 더 효율적으로 작동한다. 따라서, 아래에서 더 설명되는 바와 같이, 예시적인 프리페처 제어기(112)는 코어(들)(102)의 원격측정 데이터에 기초하여 다가오는 페이즈에 대해 프리페처를 활성화할지 또는 비활성화할지를 동적으로 결정한다.
도 1의 예시적인 코어(들)(102)는 MSR(106) 및/또는 카운터(104)를 포함한다. 예시적인 이벤트 카운터(들)(104)는 광범위한 이벤트(예를 들어, 출력 동작들의 완료, 폐기된 명령어들의 수, 클록 사이클들, CPU 클록 데이터, L3 CPU 스톨(stall) 및/또는 캐시 미스(cache miss)의 총 수, L2 CPU 스톨 및/또는 캐시 미스의 총 수, L1 CPU 스톨 및/또는 캐시 미스의 총 수, LS 라인 출력 등) 중 임의의 것 또는 전부를 모니터링하는 성능 카운터이다. 이벤트 카운터(들)(104)는 레지스터, 코어(들)(102) 상의 메모리, 콘텐츠 어드레스가능 메모리(CAM) 구조 등에서 구현될 수 있다. 이벤트 카운터(들)(104) 내의 카운트들에 대응하는 데이터는 프리페처들을 동적으로 활성화 및/또는 비활성화하기 위해 예시적인 프리페처 제어기(112)에 의해 사용되는 원격측정 데이터의 일부이다.
도 1의 MSR(106)은 프리페처가 현재 페이즈 동안 활성화되는지 또는 워크로드의 후속 페이즈 동안 활성화될 것인지에 대응하는 값을 저장하는 레지스터이다. 아래에서 더 설명되는 바와 같이, 예시적인 프리페처 제어기(112)는 프리페처를 활성화 및/또는 비활성화하기 위한 결정이 내려진 후에 코어(들)(102)의 MSR(106)에 저장된 값을 변경한다. 이러한 방식으로, 코어(들)(102)는 프리페처(들)를 활성화 및/또는 비활성화하기 위해, 주기적으로, 비주기적으로, 및/또는 트리거에 기초하여 MSR(106) 내의 값을 판독할 수 있다.
도 1의 예시적인 메모리(108)는 예시적인 CPU(100)의 메모리이다. 그러나, 그것은 대안적으로 CPU 외부에 있지만 CPU에 액세스할 수 있는 메모리일 수 있다(예를 들어, 오프 칩 메모리). 메모리(108)는 예시적인 애플리케이션(110)이 예시적인 코어(102)를 사용하여 액세스할 수 있는 데이터를 저장한다. 프리페처가 활성화될 때, 코어(102)는 애플리케이션이 데이터를 호출하기 전에 코어(102)로부터 데이터에 액세스한다. 코어(102)는 명령어들을 실행하는 데 사용하기 위해 로컬 캐시들에 데이터를 저장한다.
도 1의 예시적인 애플리케이션(110)은 하나 이상의 태스크를 수행하기 위한 하나 이상의 계산 페이즈를 나타낼 수 있다. 예시적인 애플리케이션(110)은 하나 이상의 태스크를 수행하기 위한 명령어들을 수행하기 위해 코어의 리소스들을 사용한다.
도 1의 예시적인 프리페처 제어기(112)는 CPU(100)의 다양한 원격측정 데이터(예를 들어, 원격측정 메트릭)를 샘플링하고, CPU(100)의 현재 및/또는 이전 원격측정 메트릭에 기초하여 후속 페이즈 동안 CPU 성능에 대한 프리페처의 유용성 예측을 수행한다. 예를 들어, 프리페처 제어기(112)는 원격측정 데이터(예를 들어, 코어(들)(102) 및 언코어(예를 들어, 코어(102) 외부의 CPU(100)의 컴포넌트들)의 동작에 대응하는 데이터)에 기초하여 프리페처를 활성화할지 또는 비활성화할지를 결정하기 위해 애플리케이션(110)의 명령어들을 실행할 때 코어(들)(102)의 성능을 모니터링한다. 일부 예들에서, 프리페처 제어기(112)는 현재 페이즈에서 코어(들)(102)의 카운터(들)(104)로부터 원격측정 메트릭(예를 들어, 이전 상태로부터 폐기된 명령어들의 수, 및 이전 상태 이후의 시간의 양)을 샘플링하기 위한 프로토콜을 수행하는 제1 모드를 구현한다. 예시적인 프리페처 제어기(112)는 원격측정 메트릭 및 현재 프리페처 상태(예를 들어, 활성화)에 기초하여 코어(들)(102)의 원격측정 점수(예를 들어, 초 당 명령어들(instructions per second)(IPS)(예를 들어, 폐기된 명령어들의 수를 시간으로 나눈 값))를 결정한다. 제1 모드에서, 프리페처 제어기(112)는 코어(들)(102)에 걸쳐 원격측정 점수들을 집계하고, 동일한 프리페처 상태(예를 들어, 활성화)에 대응하는 이전 집계 점수들을 갖는 집계 점수에 대응하는 제1 값(예를 들어, 점수)을 결정하고, 집계 점수를 프리페처 상태(예를 들어, 비활성화)에 대응하는 집계 점수에 대응하는 제2 값과 비교한다. 값은 평균 집계 점수, 가중 평균 집계 점수, 둘 이상의 집계 점수에 기초하는 경험적 값 등일 수 있다. 예를 들어, 동일한 프리페처 상태(예를 들어, 활성화)에 대한 이전 집계 점수들이 0.6 및 0.8인 경우, 프리페처 제어기(112)는 프리페처 상태(예를 들어, 활성화)의 평균 집계 점수가 0.7이라고 결정할 수 있다. 예시적인 프리페처 제어기(112)는 어느 값이 더 높은지에 기초하여 다음 페이즈의 프리페처 상태를 선택한다(예를 들어, 비활성화된 프리페처 상태의 IPS가 더 높은 경우, 프리페처 제어기(112)는 다음 프리페처 상태를 비활성화로 선택할 것이다). 일부 예들에서, 프리페처 제어기(112)는 추가적으로 또는 대안적으로 집계 원격측정 점수들 및/또는 각각의 코어(102)의 원격측정 점수를 반대 프리페처 상태의 제2 값과 비교한다(예를 들어, 제1 프리페처 상태가 활성화인 경우, 반대 프리페처 상태는 비활성화임). 예시적인 프리페처 제어기(112)는 결정된 프리페처 상태에 대응하는 값을 코어(들)(102)의 MSR(들)(106)에 기입한다. 이러한 방식으로, 예시적인 코어(들)(102)는 MSR(들)(106)에 저장된 값에 기초하여 프리페처(들)를 활성화 또는 비활성화할 것이다.
다른 예들에서, 프리페처 제어기(112)는 (a) 현재 페이즈에서의 코어(들)(102)의 카운터(들)(104)로부터의 원격측정 데이터(예를 들어, 이전 상태 이후의 시간의 양, L1, L2, 및/또는 L3 미스 및/또는 스톨의 수, 프리페치되었지만 사용되지 않은 라인들의 수 등을 포함하는 메트릭), 및 (b) 언코어 원격측정 데이터(예를 들어, 콤보 박스 활동, 콤보 미스 활동, 콤보 박스 미스 점유율 등을 포함하는 CPU(100)로부터의 메트릭)를 샘플링하기 위한 프로토콜을 수행하는 제2 모드를 구현한다. 예시적인 프리페처 제어기(112)는 ML 모델(예를 들어, 신경망)에서 샘플링된 원격측정 메트릭을 사용하여 다음 페이즈가 프리페처(들)를 활성화해야 하는지 또는 비활성화해야 하는지를 추정한다. 예를 들어, 신경망은 현재 페이즈의 IPS, 사이클 당 L3 미스의 수, 명령어 당 버퍼로부터의 오프 코어 요청들의 수, 및 명령어 당 높은 점유율 사이클들의 수에 기초하여 프리페처(들)를 활성화하는 것이 더 효율적인지 또는 비활성화하는 것이 더 효율적인지를 추정하도록 트레이닝될 수 있다. 제2 모드에서, 프리페처 제어기(112)는 코어 당 ML 모델에 원격측정 데이터를 입력하여, N개의 코어에 대응하는 N개의 출력 프리페처 상태를 야기한다. 일부 예들에서, 프리페처 제어기(112)는 과반수 출력(majority output)(예를 들어, 활성화 또는 비활성화에 대응하는 출력)에 기초하여 모든 코어(들)(102)에 대한 프리페처를 전역적으로 활성화 또는 비활성화한다. 일부 예들에서, 프리페처 제어기(112)는 대응하는 출력에 기초하여 각각의 코어에 대한 프리페처(들)를 활성화 또는 비활성화한다(예를 들어, 후속 페이즈에 대해, ML 출력이 활성화에 대응할 때 제1 코어에 대한 프리페처(들)를 활성화하고, ML 출력이 비활성화에 대응할 때 제2 코어에 대한 프리페처(들)를 비활성화함). 제1 또는 제2 모드 중 어느 하나에서, 프리페처 제어기(112)는 사용자 및/또는 제조자 선호도에 기초하여 임의의 주파수(예를 들어, 더 길거나 더 짧은 샘플링 페이즈들에 대응함)에서 샘플링할 수 있다. 더 높은 주파수에서의 샘플링은 프리페처 제어기(112)를 활성화하여, 더 짧은 페이즈들을 검출하고, 증가된 계산 수로 인한 오버헤드 증가의 대가로, 프리페처 상태를 변화시킬만한 워크로드의 변화에 더 빠르게 반응한다. 더 낮은 주파수에서의 샘플링은, 프리페처 제어기(112)의 반응 시간을 감소시키지만, 감소된 계산 수로 인해 오버헤드를 낮춘다.
일부 예들에서, 프리페처 제어기(112)는 사용자 선호도들 및/또는 특정의 미리 설정된 이벤트들에 기초하여 샘플 주파수를 동적으로 조절한다. 예를 들어, 프리페처 제어기(112)의 리소스들이 낮은 경우(예를 들어, 이용가능한 프로세서 리소스들, 메모리 등의 양이 하나 이상의 임계값 미만인 경우), 예시적인 프리페처 제어기(112)는 샘플링 주파수를 감소시킬 수 있고, 리소스들이 높을 때(예를 들어, 하나 이상의 임계값 초과), 프리페처 제어기(112)는 샘플링 주파수를 증가시킬 수 있다. 다른 예에서, 프리페처 제어기(112)는 코어(들)(102)에 의해 실행되고 있는 프로토콜 및/또는 명령어들에 기초하여 샘플링 주파수를 조절할 수 있다. 예를 들어, 일부 프로토콜들 및/또는 명령어들은 쓸모없는 프리페치들, 코어 및 언코어의 스트레스 원격측정, 캐시 적중률에 더 중요한 것 및/또는 더 경향이 강한 것으로서 플래그 지정될 수 있다. 그러한 예들에서, 프리페처 제어기(112)는 그러한 프로토콜들 및/또는 명령어들이 실행 중일 때 샘플 주파수를 증가시킬 수 있고, 그러한 프로토콜들 및/또는 명령어들이 실행 중이지 않을 때 주파수를 감소시킬 수 있다. 일부 예들에서, 프리페처 제어기(112)는 프리페처 상태들 사이의 변화량에 기초하여 주파수를 조절할 수 있다. 예를 들어, 임계 백분율을 초과하는 과거 X개의 프리페처 상태가 대응하는 이전 프리페처 상태로부터의 변경에 대응하는 경우, 프리페처 제어기(112)는 샘플 주파수를 증가시키거나 높은 샘플 주파수를 적용할 수 있다. 이러한 예들에서, 임계 백분율을 초과하는 과거 X개의 프리페처 상태가 대응하는 이전 프리페처 상태로부터의 변경에 대응하지 않는 경우, 프리페처 제어기(112)는 샘플 주파수를 감소시키거나 낮은 샘플 주파수를 적용할 수 있다.
도 1의 예시적인 ML 모델 트레이너(114)는 현재 페이즈의 원격측정 데이터 및/또는 과거 페이즈들의 원격측정 데이터에 기초하여 후속 페이즈 동안 하나 이상의 프리페처를 활성화하는 것이 더 효율적일지 또는 비활성화하는 것이 더 효율적일지를 예측할 수 있도록 ML 모델(예를 들어, 신경망, DL 모델, 및/또는 임의의 다른 유형의 AI 기반 모델)을 트레이닝한다. 도 1의 예에서, ML 모델 트레이너(114)는 CPU(100)로부터 원격으로 (예를 들어, 오프사이트 서버 또는 컴퓨팅 디바이스에) 위치한다. 그러나, 일부 예들에서, ML 모델 트레이너(114)는 CPU(100)에서 구현될 수 있다. ML 모델 트레이너(114)가 모델을 트레이닝한 후, ML 모델 트레이너(114)는 모델(예를 들어, CPU(100)에서 로컬로 트레이닝된 모델을 구현하는 데 사용되는 모델 데이터)을 CPU(100)에 배치한다. 예를 들어, ML 모델 트레이너(114)는 프리페처 제어기(112)가 처음 생성 및/또는 제조될 때 모델을 트레이닝하고 CPU(100)에 배치할 수 있다. 추가적으로 또는 대안적으로, ML 모델 트레이너(114)는 소프트웨어 기반 업데이트의 일부로서 및/또는 CPU(100)로부터의 요청의 일부로서 프리페처 제어기(112)에 모델을 무선으로 배치할 수 있다.
도 1의 예시적인 ML 모델 트레이너(114)는 모델을 트레이닝하기 위해, 레이블링된 트레이닝 데이터를 사용한다. 레이블링된 트레이닝 데이터는 더 효율적인 프리페처 상태(예를 들어, 활성화 또는 비활성화)로 레이블링된 원격측정 데이터에 대응한다. 예시적인 ML 모델 트레이너(114)는, 프리페처(들)를 활성화하여 그리고/또는 프리페처(들)을 비활성화하여 다수의 워크로드를 실행했고 대응하는 원격측정 데이터를 측정한 하나 이상의 디바이스(들)로부터 레이블링된 트레이닝 데이터를 획득한다. 이러한 방식으로, 하나 이상의 디바이스는 어느 원격측정 데이터가 더 효율적인 프리페처 상태에 대응하는지를 결정하기 위해, 프리페처(들)를 온으로 그리고/또는 프리페처(들)를 오프로 하여 수행된 다양한 워크로드들의 상이한 페이즈의 결과들을 비교할 수 있다. 모델을 트레이닝하기 위해 사용되는 트레이닝 원격측정 데이터의 수 및/또는 유형은 사용자 및/또는 제조자 선호도에 기초한다. 메트릭이 적을수록 과적합(overfitting)을 방지하고 더 빠른 반면, 메트릭이 많을수록 더 정확한 결과를 야기할 수 있다.
일부 예들에서, 도 1의 ML 모델 트레이너(114)는 단순 로지스틱 회귀로부터 고급 장단기 기억(long short term memory)(LSTM) 모델에 이르기까지 수 개의 러닝 모델을 탐색할 수 있고, 상이한 원격측정 데이터의 상대적 유용성을 평가할 수 있다. 예를 들어, ML 모델 트레이너(114)는 역방향 피처 선택을 사용하여 카운터들의 제1 서브세트를 결정할 수 있으며, 여기서 카운터들의 전체 세트가 선택되고, 각각의 반복에서 최하위 피처가 누락되는 반복 프로세스가 수행된다. ML 모델 트레이너(114)가 임계량 초과의 결과 열화가 보여진 것으로 결정한 후, ML 모델 트레이너(114)는 IPS, 사이클 당 L3 미스, 명령어 당 오프-코어 버퍼 요청들, 및 명령어 당 높은 점유율 사이클 수에 대응하는 원격측정 데이터에 기초하여 신경망을 생성할 수 있다. 이러한 예에서, ML 모델 트레이너(114)는 오프라인으로 트레이닝된 자동 회귀 네트워크에 나머지 메트릭을 피드하고, 추론 페이즈를 수행한다. 출력은 코어 당 프리페처 활성화/비활성화 결정이다. 예를 들어, ML 모델 트레이너(114)는 3개의 계층을 갖도록 신경망을 트레이닝할 수 있다. 제1 계층은 자동 회귀 네트워크일 수 있다(예를 들어, 모델은 현재 샘플만 보는 대신에, X개의 이전 타임 스탬프를 고려할 수 있음). 제2 계층은 예측을 최적화하기 위한 추가된 뉴런의 임계 수에 기초하는 비선형성 지수 선형 유닛(nonlinearity exponential linear unit)(ELU) 활성화를 갖는 중간-은닉 계층(middle-hidden layer)일 수 있다(예를 들어, x <= 0이면 ELU = e^(x)-1, 그렇지 않으면 x). 제3 계층은 (예를 들어, 결과를 0과 1 사이의 확률로 변경하기 위해) 시그모이드 함수로서 동작하는 신호 뉴런일 수 있다. 이러한 방식으로, 프리페처 제어기(112)는 확률에 기초하여 출력이 활성화에 대응하는지 또는 비활성화에 대응하는지를 결정할 수 있다(예를 들어, 출력이 0.5 미만이면 프리페처가 비활성화되어야 하고, 출력이 0.5 초과이면 프리페처가 활성화되어야 함).
도 2는 도 1의 프리페처 제어기(112)의 예시적인 구현의 블록도이다. 예시적인 프리페처 제어기(112)는 예시적인 인터페이스(200), 예시적인 타이머(202), 예시적인 슬립 상태 선택기(204), 예시적인 점수 결정기(206), 예시적인 프리페처 상태 선택기(208), 예시적인 모델(210), 및 예시적인 큐(212)를 포함한다.
도 2의 예시적인 인터페이스(200)는 예시적인 코어(들)(102) 및/또는 CPU(100)의 다른 컴포넌트들로부터 원격측정 데이터(예를 들어, 코어(들)(102) 및 언코어(예를 들어, 코어(102) 외부의 CPU(100)의 컴포넌트들)의 동작에 대응하는 메트릭)를 획득한다. 추가적으로, 예시적인 인터페이스(200)는 저장소(예를 들어, MSR(106), 예시적인 저장소(206) 및/또는 다른 저장소)로부터 프리페처 상태(예를 들어, 현재 페이즈의 프리페처 상태)를 획득한다. 추가적으로, 예시적인 인터페이스(200)는 코어에게 선택된 프리페처 상태에 따라 동작할 것을 명령하기 위해, 코어(들)(102)와 인터페이스한다. 일부 예들에서, 인터페이스(200)는 ML 모델 트레이너(114)로부터 모델 데이터(예를 들어, 머신 러닝 모델 데이터)를 획득한다. 모델 데이터는 트레이닝된 모델을 구현하기 위해 모델(210)을 조절하는 방법에 대응한다.
도 2의 예시적인 타이머(202)는 시간의 양을 추적한다. 일부 예들에서, 타이머(202)는 예시적인 CPU(100) 및/또는 하나 이상의 코어(들)(102)의 카운터 또는 클록에 기초하여 시간을 추적한다. 예시적인 타이머(202)는 임계 시간량이 경과할 때까지의 시간을 추적한다. 이러한 방식으로, 예시적인 프리페처 제어기(112)는 슬립 모드 또는 저전력 모드와 웨이크 또는 고전력 모드 사이에서 전환할 수 있다. 임계 시간량은 프리페처 제어기(112)의 샘플링 주파수에 기초할 수 있다. 예시적인 슬립 상태 선택기(204)는 타이머(202)에 의해 추적된 시간에 기초하여 조절되는 슬립 상태를 선택한다. 예를 들어, 슬립 상태 선택기(204)는 프리페처 상태가 선택된 후에 슬립 모드에 진입하고, 타이머(202)가 임계 시간량의 발생을 식별한 후에 슬립 모드를 벗어난다(예를 들어, 웨이크업).
도 2의 예시적인 점수 결정기(206)는 획득된 원격측정 메트릭에 기초하여 현재 페이즈에 대한 코어(들)(102)에 대한 원격측정 점수들을 결정한다. 예를 들어, 예시적인 점수 결정기(206)는 각각의 코어의 폐기된 명령어들의 수를 마지막 페이즈 이후의 시간의 양으로 나누어서, X개의 코어들에 대한 X개의 IPS를 야기함으로써, 각각의 코어(들)(102)에 대한 IPS를 결정할 수 있다. 추가적으로, 예시적인 점수 결정기(206)는 X개의 IPS를 더함으로써 현재 페이즈에 대해 코어(들)에 걸친 원격측정 점수들을 집계한다. 원격측정 점수들이 집계된 후, 예시적인 점수 결정기(206)는 현재 프리페처 상태와 함께, 현재 상태에 대한 원격측정 점수들 및/또는 집계된 원격측정 점수들을 큐(212)에 저장한다. 예시적인 점수 결정기(206)가 현재 상태에 대한 점수들을 저장하려고 시도할 때 큐(212)가 가득 차 있으면, 점수 결정기(206)는 큐(212)에서 가장 오래된 엔트리를 제거할 수 있다. 아래에 설명되는 바와 같이, 프리페처 상태 선택기(208)는 하나 이상의 프리페처를 활성화할지를 결정하기 위해 현재 IPS들을 이전 IPS들과 비교할 수 있다. 따라서, 예시적인 점수 결정기(206)는 캐시가 각각의 프리페처 상태에 대해 이전 페이즈에 대한 적어도 하나의 엔트리를 가질 것을 보장할 필요가 있을 수 있다. 따라서, 예시적인 점수 결정기(206)는, 큐(212)에서 가장 오래된 엔트리를 제거하는 것이 모든 엔트리가 동일한 프리페처 상태에 대응하는 결과를 초래할지를 결정할 수 있다. 점수 결정기(206)가, 큐(212)로부터 가장 오래된 엔트리를 제거하는 것이 모든 엔트리가 동일한 프리페처 상태에 대응하는 결과를 초래할 것이라고 결정하면, 점수 결정기(206)는 큐(212)로부터 가장 오래된 엔트리가 아닌 엔트리(예를 들어, 두 번째로 오래된 엔트리)를 제거할 수 있다.
도 2의 예시적인 프리페처 상태 선택기(208)는 현재 및 이전 프리페처 상태, 및 대응하는 원격측정 데이터에 기초하여 다음 페이즈에 대한 하나 이상의 프리페처 상태를 선택한다. 다음 페이즈에 대한 프리페처 상태(들)(예를 들어, 활성화 또는 비활성화)를 결정하기 위해, 프리페처 상태 선택기(208)는 큐(212)에 저장된 활성화 상태들에 대한 원격측정 점수(예를 들어, 평균, 가중 평균, 경험적 점수 등)에 대응하는 값, 및 큐(212)에 저장된 비활성화 상태들에 대한 원격측정 점수에 대응하는 제2 값을 계산한다. (a) 활성화 상태에 대응하는 값이 비활성화 상태에 대응하는 제2 값보다 (예를 들어, 제1 임계량 초과만큼) 높은 경우, 및 (b) 현재 페이즈의 원격측정 점수들이 반대 프리페처 상태에 대응하는 값보다 (예를 들어, 제2 임계량 초과만큼) 높은 경우, 예시적인 프리페처 상태 선택기(208)는 다음 페이즈에 대해 프리페처 상태를 활성화 상태로 선택한다. (a) 활성화 상태에 대응하는 원격측정 점수에 대응하는 값이 비활성화 상태에 대응하는 원격측정 점수에 대응하는 제2 값보다 (예를 들어, 제1 임계량 초과만큼) 높지 않은 경우, 또는 (b) 현재 페이즈의 원격측정 점수들이 반대 프리페처 상태에 대응하는 값보다 (예를 들어, 제2 임계량 초과만큼) 높지 않은 경우, 예시적인 프리페처 상태 선택기(208)는 다음 페이즈에 대해 프리페처 상태를 비활성화 상태로 선택한다.
도 2의 예시적인 모델(210)은 예시적인 ML 모델 트레이너(114)에 의해 개발된 트레이닝된 모델을 구현한다. 모델(210)은 머신 러닝 모델, 신경망, 딥 러닝 모델, 및/또는 임의의 다른 AI 기반 모델일 수 있다. 도 1과 관련하여 위에서 설명된 바와 같이, ML 모델 트레이너(114)는 현재 페이즈의 원격측정 데이터 및/또는 과거 페이즈들의 원격측정 데이터에 기초하여 후속 페이즈 동안 하나 이상의 프리페처를 활성화하는 것이 더 효율적일지 또는 비활성화하는 것이 더 효율적일지를 예측할 수 있도록 모델을 트레이닝한다. 예시적인 모델(210)은 ML 모델 트레이너(114)로부터 트레이닝된 모델을 구현한다. 따라서, 예시적인 모델(210)에 대한 입력들은 수신된 (a) 현재 페이즈에서의 코어(들)(102)의 카운터(들)(104)로부터의 원격측정 메트릭(예를 들어, 이전 상태 이후의 시간의 양, L1, L2 및/또는 L3 미스 및/또는 스톨의 수, 프리페치되었지만 사용되지 않는 라인들의 수 등), 및 (b) CPU(100)로부터의 언코어 원격측정 메트릭(예를 들어, 콤보 박스 활동, 콤보 미스 활동, 콤보 박스 미스 점유율 등)을 포함하고, 예시적인 모델(210)의 출력들은 입력들에 기초한 하나 이상의 프리페처 상태를 포함한다. 예시적인 모델(210)은 현재 페이즈의 IPS, 사이클 당 L3 미스의 수, 명령어 당 버퍼로부터의 오프-코어 요청의 수, 및 명령어 당 높은 점유율 사이클 수에 기초하여 프리페처(들)를 활성화하는 것이 더 효율적인지 또는 비활성화하는 것이 더 효율적인지를 추정하도록 트레이닝될 수 있다. 예시적인 모델(210)은 코어 당 프리페처 상태를 결정할 수 있으며, 결과적으로 N개의 코어에 대응하는 N개의 출력 프리페처 상태가 발생한다.
일부 예들에서, 도 2의 예시적인 모델(210)이 프리페처 상태를 결정할 때, 프리페처 상태 선택기(208)는 과반수 출력(예를 들어, 활성화 또는 비활성화에 대응하는 출력)에 기초하여 모든 코어(들)(102)에 대해 프리페처를 전역적으로 활성화 또는 비활성화할 수 있다. 일부 예들에서, 프리페처 상태 선택기(208)는 대응하는 출력에 기초하여 각각의 코어에 대해 프리페처(들)를 활성화 또는 비활성화한다(예를 들어, 후속 페이즈에 대해, ML 출력이 활성화에 대응할 때는 제1 코어에 대한 프리페처를 활성화하고, ML 출력이 비활성화에 대응할 때는 제2 코어에 대한 프리페처를 비활성화함).
도 2의 예시적인 큐(212)는 프리페처 상태(들) 및/또는 대응하는 원격측정 데이터(예를 들어, 원격측정 메트릭), 원격측정 점수들, 및/또는 집계된 원격측정 점수들을 저장하기 위한 저장소이다. 예를 들어, 큐(212)는 버퍼, 하나 이상의 레지스터, 메모리, 캐시 등일 수 있다. 위에서 설명된 바와 같이, 큐(212)가 가득 차면, 예시적인 점수 결정기(206)는 더 많은 정보를 위한 공간을 만들기 위해 큐(212)로부터 어느 엔트리들을 제거할지를 결정한다.
도 1 및/또는 도 2에는 도 1의 예시적인 프리페처(112) 및/또는 예시적인 ML 모델 트레이너(114)를 구현하는 예시적인 방식이 도시되어 있지만, 도 1 및/또는 도 2에 도시된 요소들, 프로세스들, 및/또는 디바이스들 중 하나 이상은 임의의 다른 방식으로 결합, 분할, 재배열, 생략, 제거 및/또는 구현될 수 있다. 또한, 예시적인 인터페이스(200), 예시적인 타이머(202), 예시적인 슬립 상태 선택기(204), 예시적인 점수 결정기(206), 예시적인 프리페처 상태 선택기(208), 예시적인 모델(210), 예시적인 큐(212), 및/또는 더 일반적으로, 도 2의 예시적인 프리페처 제어기(112) 및/또는 도 1의 ML 모델 트레이너(114)는 하드웨어, 소프트웨어, 펌웨어, 및/또는 하드웨어, 소프트웨어 및/또는 펌웨어의 임의의 조합으로 구현될 수 있다. 따라서, 예를 들어, 예시적인 인터페이스(200), 예시적인 타이머(202), 예시적인 슬립 상태 선택기(204), 예시적인 점수 결정기(206), 예시적인 프리페처 상태 선택기(208), 예시적인 모델(210), 예시적인 큐(212), 및/또는 보다 일반적으로 도 2의 예시적인 프리페처 제어기(112) 및/또는 도 1의 ML 모델 트레이너(114)는 하나 이상의 아날로그 또는 디지털 회로, 논리 회로, 프로그래밍가능한 프로세서, 프로그래밍가능한 제어기, 그래픽 처리 유닛(GPU), 디지털 신호 프로세서(DSP), 주문형 집적 회로(ASIC), 프로그래밍가능한 논리 디바이스(PLD), 및/또는 필드 프로그래밍가능한 논리 디바이스(FPLD)에 의해 구현될 수 있다. 본 특허의 장치 또는 시스템 청구항 중 어느 하나를 순수한 소프트웨어 및/또는 펌웨어 구현을 포괄하도록 읽을 때, 예시적인 인터페이스(200), 예시적인 타이머(202), 예시적인 슬립 상태 선택기(204), 예시적인 점수 결정기(206), 예시적인 프리페처 상태 선택기(208), 예시적인 모델(210), 예시적인 큐(212), 및/또는 더 일반적으로, 도 2의 예시적인 프리페처 제어기(112) 및/또는 도 1의 ML 모델 트레이너(114) 중 적어도 하나는 여기에서 소프트웨어 및/또는 펌웨어를 포함하는 메모리, 디지털 다기능 디스크(DVD), 컴팩트 디스크(CD), 블루레이 디스크 등과 같은 비-일시적 컴퓨터 판독가능한 저장 디바이스 또는 저장 디스크를 포함하도록 명시적으로 정의된다. 또한, 도 1의 예시적인 프리페처 제어기(112) 및/또는 ML 모델 트레이너(114)는 도 1 및/또는 도 2에 도시된 것들에 추가하여, 또는 그것을 대신하여 하나 이상의 요소, 프로세스 및/또는 디바이스를 포함할 수 있고/거나, 도시된 요소들, 프로세스들 및 디바이스들 중 임의의 것 또는 모두를 하나보다 많이 포함할 수 있다. 본 명세서에 사용될 때, "통신하는"이라는 문구와 그것의 변형은 하나 이상의 중간 컴포넌트를 통한 직접 통신 및/또는 간접 통신을 포함하고, 직접적인 물리적(예를 들어, 유선) 통신 및/또는 지속적인 통신을 요구하지 않으며, 오히려 추가적으로 주기적 간격들, 스케줄링된 간격들, 비-주기적 간격들, 및/또는 일회성 이벤트들에서의 선택적 통신을 포함한다.
도 1 및/또는 도 2의 예시적인 프리페처 제어기(112) 및/또는 ML 모델 트레이너(114)를 구현하기 위한 예시적인 하드웨어 로직, 머신 판독가능한 명령어, 하드웨어 구현 상태 머신, 및/또는 이들의 임의의 조합을 표현하는 흐름도들이 도 3a 내지 도 5에 도시되어 있다. 머신 판독가능한 명령어들은 도 6과 관련하여 아래에서 논의되는 예시적인 프로세서 플랫폼(600)에 도시된 프로세서(612)와 같은 컴퓨터 프로세서에 의해 실행되기 위한 하나 이상의 실행가능한 프로그램 또는 실행가능한 프로그램의 부분(들)일 수 있다. 프로그램(들)은 CD-ROM, 플로피 디스크, 하드 드라이브, DVD, 블루레이 디스크, 또는 프로세서(612)에 연관된 메모리와 같은 비-일시적 컴퓨터 판독가능한 저장 매체에 저장된 소프트웨어로 구현될 수 있지만, 프로그램(들) 전체 및/또는 그 일부는 프로세서(612) 이외의 디바이스에 의해 대안적으로 실행되고/되거나 펌웨어 또는 전용 하드웨어에 구현될 수 있다. 또한, 예시적인 프로그램(들)이 도 6에 도시된 흐름도를 참조하여 설명되지만, 도 1 및/또는 도 2의 예시적인 프리페처 제어기(112) 및/또는 ML 모델 트레이너(114)를 구현하는 많은 다른 방법들이 대안적으로 사용될 수 있다. 예를 들어, 블록들의 실행 순서가 변경될 수 있고/있거나, 설명된 블록들의 일부가 변경, 제거 또는 결합될 수 있다. 추가적으로 또는 대안적으로, 블록들 중 임의의 것 또는 전부는 소프트웨어 또는 펌웨어를 실행하지 않고서 대응하는 동작을 수행하도록 구조화된 하나 이상의 하드웨어 회로(예를 들어, 개별 및/또는 통합 아날로그 및/또는 디지털 회로, FPGA, ASIC, 비교기, 연산 증폭기(op-amp), 논리 회로 등)에 의해 구현될 수 있다.
본 명세서에 설명된 머신 판독가능한 명령어들은 압축된 포맷, 암호화된 포맷, 단편화된 포맷, 컴파일된 포맷, 실행가능한 포맷, 패키지화된 포맷 등 중 하나 이상에 저장될 수 있다. 본 명세서에 설명된 바와 같은 머신 판독가능한 명령어들은 머신 실행가능한 명령어들을 생성, 제조 및/또는 생산하는 데 사용될 수 있는 데이터(예를 들어, 명령어들, 코드, 코드 표현 등의 부분)로서 저장될 수 있다. 예를 들어, 머신 판독가능한 명령어들은 단편화되어 하나 이상의 저장 디바이스 및/또는 컴퓨팅 디바이스(예를 들어, 서버)에 저장될 수 있다. 머신 판독가능한 명령어들은 컴퓨팅 디바이스 및/또는 다른 머신에 의해 직접적으로 판독가능하고 해석가능하고/거나 실행가능하도록 하기 위해, 설치, 수정, 적응, 업데이트, 결합, 보충, 구성, 암호 해독, 압축 해제, 압축 풀기, 분산, 재할당, 컴파일 등 중 하나 이상을 필요로 할 수 있다. 예를 들어, 머신 판독가능한 명령어들은 개별적으로 압축되고 암호화되고 별개의 컴퓨팅 디바이스들에 저장되는 복수의 부분으로 저장될 수 있고, 여기서 부분들은 암호 해독, 압축 해제 및 결합될 때 본 명세서에 설명된 것과 같은 프로그램을 구현하는 실행가능한 명령어들의 세트를 형성한다.
다른 예에서, 머신 판독가능한 명령어들은 컴퓨터에 의해 판독될 수 있지만 특정 컴퓨팅 디바이스 또는 다른 디바이스 상의 명령어들을 실행하기 위해 라이브러리(예를 들어, 동적 링크 라이브러리(dynamic link library)(DLL)), 소프트웨어 개발 키트(SDK), 애플리케이션 프로그래밍 인터페이스(API) 등의 추가를 필요로 하는 상태로 저장될 수 있다. 다른 예에서, 머신 판독가능한 명령어들 및/또는 대응하는 프로그램(들)이 전체적으로 또는 부분적으로 실행될 수 있기 전에 머신 판독가능한 명령어들이 구성될 필요가 있을 수 있다(예를 들어, 세팅 저장, 데이터 입력, 네트워크 주소 기록 등). 따라서, 개시된 머신 판독가능한 명령어들 및/또는 대응하는 프로그램(들)은, 저장되거나 다르게 휴지(rest) 또는 수송(transit) 상태에 있을 때, 머신 판독가능한 명령어들 및/또는 프로그램(들)의 특정 포맷 또는 상태에 관계없이 그러한 머신 판독가능한 명령어 및/또는 프로그램(들)을 포함하도록 의도된다.
본 명세서에 설명된 머신 판독가능한 명령어들은 임의의 과거, 현재 또는 장래의 명령어 언어, 스크립팅 언어, 프로그래밍 언어 등에 의해 표현될 수 있다. 예를 들어, 머신 판독가능한 명령어들은 이하의 언어들: C, C++, Java, C#, Perl, Python, JavaScript, HTML(HyperText Markup Language), SQL(Structured Query Language), Swift 등 중 임의의 것을 사용하여 표현될 수 있다.
위에서 언급된 바와 같이, 도 3a, 도 3b, 도 4 및/또는 도 5의 예시적인 프로세스들은 하드 디스크 드라이브, 플래시 메모리, 판독 전용 메모리, 컴팩트 디스크, 디지털 다기능 디스크, 캐시, 랜덤 액세스 메모리, 및/또는 임의의 지속시간 동안(예를 들어, 연장된 기간 동안, 영구적으로, 짧은 순간 동안, 임시 버퍼링을 위해, 및/또는 정보의 캐싱을 위해) 정보가 저장되는 임의의 다른 저장 디바이스 또는 저장 디스크와 같은 비-일시적 컴퓨터 및/또는 머신 판독가능한 매체에 저장된 실행가능한 명령어들(예를 들어, 컴퓨터 및/또는 머신 판독가능한 명령어)를 사용하여 구현될 수 있다. 본 명세서에서 사용될 때, 비-일시적 컴퓨터 판독가능한 매체라는 용어는 임의의 유형의 컴퓨터 판독가능한 저장 디바이스 및/또는 저장 디스크를 포함하고, 전파 신호들을 배제하고, 전송 매체를 배제하도록 명시적으로 정의된다.
"포함하는(including 및 comprising)"(및 이것의 모든 형태 및 시제)은 본 명세서에서 개방 종결 용어로 사용된다. 따라서, 청구항이 임의의 형태의 "포함하는(include 또는 comprise)"(예를 들어, 포함한다(comprises, includes), 포함하는(comprising, including), 갖는(having) 등)을 임의의 종류의 청구항 기재 내에서 또는 전제부로서 사용할 때마다, 대응하는 청구항 또는 기재의 범위를 벗어나지 않고서 추가의 요소들, 용어들 등이 존재할 수 있음을 이해해야 한다. 본 명세서에 사용될 때, "적어도"라는 문구가 예를 들어 청구항의 전제부에서 전환 용어로서 사용되는 경우, 그것은 용어 "포함하는(comprising, including)"이 개방 종결인 것과 동일한 방식으로 개방형으로 종결된다. 예를 들어, A, B 및/또는 C와 같은 형태로 사용될 때의 용어 "및/또는"은 (1) A 단독, (2) B 단독, (3) C 단독, (4) A와 B, (5) A와 C, (6) B와 C, 및 (7) A와 B와 C와 같은, A, B, C의 임의의 조합 또는 서브세트를 지칭한다. 본 명세서에서 구조들, 컴포넌트들, 항목들, 객체들, 및/또는 사물들을 설명하는 맥락에서 사용될 때, "A 및 B 중 적어도 하나"라는 문구는 (1) 적어도 하나의 A, (2) 적어도 하나의 B, 및 (3) 적어도 하나의 A 및 적어도 하나의 B 중 임의의 것을 포함하는 구현들을 지칭하도록 의도된다. 마찬가지로, 본 명세서에서 구조들, 컴포넌트들, 항목들, 객체들 및/또는 사물들을 설명하는 맥락에서 사용될 때, "A 또는 B 중 적어도 하나"라는 문구는 (1) 적어도 하나의 A, (2) 적어도 하나의 B, 및 (3) 적어도 하나의 A 및 적어도 하나의 B 중 임의의 것을 포함하는 구현들을 지칭하도록 의도된다. 본 명세서에서 프로세스들, 명령어들, 액션들, 활동들 및/또는 단계들의 수행 또는 실행을 설명하는 맥락에서 사용될 때, "A 및 B 중 적어도 하나"라는 문구는 (1) 적어도 하나의 A, (2) 적어도 하나의 B, 및 (3) 적어도 하나의 A 또는 적어도 하나의 B 중 임의의 것을 포함하는 구현들을 지칭하도록 의도된다. 마찬가지로, 본 명세서에서 프로세스들, 명령어들, 액션들, 활동들 및/또는 단계들의 수행 또는 실행을 설명하는 맥락에서 사용될 때, "A 또는 B 중 적어도 하나"라는 문구는 (1) 적어도 하나의 A, (2) 적어도 하나의 B, 및 (3) 적어도 하나의 A 및 적어도 하나의 B 중 임의의 것을 포함하는 구현들을 지칭하도록 의도된다.
본 명세서에서 사용될 때, 단수 참조들(예를 들어, 단수 표현("a", "an"), "제1", "제2" 등)은 복수를 배제하지 않는다. 본 명세서에서 사용될 때, 단수 표현("a" 또는 "an") 엔티티라는 용어는 하나 이상의 그 엔티티를 지칭한다. 단수 표현 "a"(또는 "an"), "하나 이상의" 및 "적어도 하나의"라는 용어는 본 명세서에서 상호교환적으로 사용될 수 있다. 또한, 개별적으로 나열되더라도, 복수의 수단, 요소 또는 방법 액션은 예를 들어 단일 유닛 또는 프로세서에 의해 구현될 수 있다. 추가적으로, 개별적인 피처들이 상이한 예들 또는 청구항들에 포함될 수 있더라도, 이들은 아마도 결합될 수 있으며, 상이한 예들 또는 청구항들에 포함된다고 해서 피처들의 조합이 실현가능하지 않고/거나 유리하지 않다는 것을 암시하지는 않는다.
도 3a - 도 3b는 제1 모드에서 동적 프리페처 제어를 수행하기 위해 예시적인 프리페처 제어기(112)(도 1 및/또는 도 2)를 구현하기 위해 실행될 수 있는 예시적인 머신 판독가능한 명령어들(300)을 표현하는 흐름도를 도시한다. 도 3a 내지 도 3b의 흐름도는 예시적인 CPU(100)의 예시적인 프리페처 제어기(112)와 관련하여 설명되지만, 다른 유형(들)의 프리페처 제어기(들) 및/또는 다른 유형의 CPU(들)가 대신 사용될 수 있다.
블록(302)에서, 예시적인 타이머(202)(도 2)는 임계 시간량이 경과했는지를 결정한다. 예시적인 타이머(202)는 CPU(100), 및/또는 하나 이상의 코어(102)(도 1)의 클록을 모니터링하여, 새로운 페이즈를 언제 샘플링할지를 결정한다. 일부 예들에서, 임계 시간량(예를 들어, 500 밀리초)은 프리페처 제어기(112)(도 1)에 대한 샘플링 주파수로 설정된다. 예시적인 타이머(202)가 임계 시간량이 경과하지 않았다고 결정하면(블록(302): 아니오), 제어는 임계 시간량이 경과할 때까지 블록(302)으로 되돌아간다.
예시적인 타이머(202)가 임계 시간량이 경과했다고 결정하는 경우(블록(302): 예), 예시적인 슬립 상태 선택기(204)(도 2)는 프리페처 제어기(112)의 컴포넌트들을 웨이크업한다(블록(304)). 예를 들어, 샘플링하지 않을 때, 슬립 상태 선택기(204)는 에너지를 보존하기 위해 일부 컴포넌트들을 턴오프하고/거나 저전력 모드에서 동작할 수 있다. 따라서, 예시적인 프리페처 제어기(112)가 샘플링해야 할 때, 슬립 상태 선택기(204)는 슬립 중인 컴포넌트들을 웨이크업하고 그리고/또는 저전력 모드를 벗어난다.
블록(306)에서, 예시적인 인터페이스(200)(도 2)는 대응하는 카운터들(104)(도 1)의 카운트들에 액세스함으로써 현재 페이즈에 대한 코어(들)에 대응하는 원격측정 데이터(예를 들어, 원격측정 메트릭)를 획득한다. 예를 들어, 인터페이스(200)는 (a) 마지막 페이즈(예를 들어, 카운터들이 마지막으로 샘플링된 시간)로부터의 시간의 양을 결정하기 위해 클록 시간에 대응하는 카운터들(104) 내의 값들, 및 (b) 마지막 페이즈으로부터의 각각의 코어(들)(102)에 대한 폐기된 명령어들의 수(예를 들어, 카운터에서 폐기된 명령어들의 수로부터, 이전 샘플링 페이즈에서의 카운터에 대한 이전의 폐기된 명령어들의 수를 뺀 수)를 판독할 수 있다.
블록(308)에서, 예시적인 점수 결정기(206)(도 2)는 각각의 원격측정 메트릭에 기초하여 현재 페이즈에 대한 각각의 코어(들)(102)에 대한 원격측정 점수들을 결정한다. 예를 들어, 점수 결정기(206)는 각각의 코어의 폐기된 명령어들의 수를 마지막 페이즈 이후의 시간의 양으로 나누어 X개의 코어에 대한 X개의 IPS를 생성함으로써 각각의 코어(들)(102)에 대한 IPS를 결정할 수 있다. 블록(310)에서, 예시적인 점수 결정기(206)는 X개의 IPS를 더함으로써 현재 페이즈에 대해 코어(들)에 걸친 원격측정 점수를 집계한다. 블록(312)에서, 예시적인 점수 결정기(206)는 현재 페이즈의 프리페처 상태(예를 들어, 활성화 또는 비활성화)를 획득한다. 큐(212)(도 2)는 프리페처 상태를 로컬로 저장했거나, MSR(106)(도 1)에 액세스하여 MSR(106)에 저장된 값(들)에 기초하여 현재 프리페처 상태를 결정할 수 있다.
프리페처 상태를 결정할 때 이전 페이즈 데이터를 이용할 수 있도록, 프리페처 제어기(112)는 대응하는 프리페처 상태에 연계된 X개의 이전 IPS를 저장하기 위한 예시적인 큐(212)(예를 들어, 순환 샘플 큐, 버퍼 등)를 포함한다. 아래에 설명되는 바와 같이, 프리페처 상태 선택기(208)는 하나 이상의 프리페처를 활성화할지를 결정하기 위해 현재 IPS들을 이전 IPS들과 비교할 수 있다. 따라서, 예시적인 점수 결정기(206)는 캐시가 각각의 프리페처 상태에 대해 이전 페이즈에 대한 적어도 하나의 엔트리를 가질 것을 보장할 필요가 있을 수 있다. 따라서, 블록(314)에서, 예시적인 점수 결정기(206)는, 큐(예를 들어, 캐시) 내의 가장 오래된 엔트리를 제거하는 것이 모든 엔트리가 동일한 프리페처 상태에 대응하는 결과를 초래할 것인지를 결정한다.
예시적인 점수 결정기(206)가, 큐로부터 가장 오래된 엔트리를 제거하는 것이 모든 엔트리가 동일한 프리페처 상태에 대응하는 결과를 초래하지 않을 것이라고 결정하는 경우(예를 들어, 각각의 프리페처 상태에 대응하는 적어도 하나의 엔트리가 존재할 것임)(블록(314): 아니오), 점수 결정기(206)는 현재 엔트리를 위한 공간을 만들기 위해 큐(212)로부터 가장 오래된 엔트리를 제거한다(블록(316)). 예시적인 점수 결정기(206)가, 큐(212)로부터 가장 오래된 엔트리를 제거하는 것이 모든 엔트리가 동일한 프리페처 상태에 대응하는 결과를 초래할 것이라고 결정하는 경우(예를 들어, 각각의 프리페처 상태에 대응하는 적어도 하나의 엔트리가 존재하지 않을 것임)(블록(314): 예)에서, 점수 결정기(206)는 현재 엔트리를 위한 공간을 만들기 위해 큐(212)로부터 두번째로 오래된 엔트리를 제거한다(블록(318)). 이러한 방식으로, 큐는 각각의 프리페처 상태에 대해 적어도 하나의 엔트리를 가질 것이다. 다른 예들에서, 점수 결정기(206)는 마지막 N개의 페이즈(예를 들어, N이 큐 크기보다 작은 경우) 내에 각각의 상태의 적어도 하나의 샘플을 보장하고 탐색 유용성에 따라 N을 수정함으로써 더 높은 레이트를 탐색할 수 있다. 예를 들어, 탐색 페이즈가 현재 페이즈에 기초하여 프리페처 상태를 변경하면, 점수 결정기(206)는 N을 더 작게 만들 수 있다(예를 들어, N이 최소값에 도달하지 않는 한). 탐색이 현재 페이즈에 기초하여 프리페처 상태를 변경하지 않는 경우, 점수 결정기(206)는 N을 더 크게 만들 수 있다(예를 들어, 큐 크기에서 안전을 위한 임계 엔트리 수를 뺀 값으로 포화됨).
블록(320)에서, 예시적인 점수 결정기(206)는 현재 페이즈의 프리페처 상태와 관련하여 현재 상태에 대한 원격측정 데이터(예를 들어, 원격측정 메트릭), 원격측정 점수, 및/또는 집계된 원격측정 점수를 메모리(예를 들어, 큐(212))에 저장한다. 블록(322)(도 3b)에서, 예시적인 프리페처 상태 선택기(208)(도 2)는 큐 내의 페이즈(들)에 걸쳐 프리페처 상태 당 원격측정 점수에 대응하는 값(예를 들어, 평균, 가중 평균, 경험적 값 등)을 결정한다. 예를 들어, 큐(212)는 프리페처가 활성화되는 것에 대응하는 큐 내의 40개의 엔트리, 및 프리페처가 비활성화되는 것에 대응하는 큐 내의 34개의 엔트리를 가질 수 있다. 이러한 예에서, 프리페처 상태 선택기(208)는 활성화에 대응하는 40개의 엔트리에 대한 원격측정 점수를 합산하고, 활성화에 대한 원격측정 점수에 대응하는 값을 결정하기 위해 그 수를 40으로 나눈다. 프리페처 상태 선택기(208)는 비활성화에 대응하는 34개의 엔트리에 대한 원격측정 점수를 합산하고, 비활성화에 대한 원격측정 점수에 대응하는 값을 결정하기 위해 그 수를 34로 나눈다. 일부 예들에서, 예시적인 프리페처 상태 선택기(208)는 나눗셈을 수행하는 대신, 각각의 프리페처 상태 당 IPS 점수들을 더하고, 반대 프리페처 상태를 갖는 페이즈들의 수를 곱하여, 원격측정 점수들에 대응하는 값을 결정할 수 있다.
블록(324)에서, 예시적인 프리페처 상태 선택기(208)는 활성화에 대응하는 원격측정 점수에 대응하는 값이 비활성화에 대응하는 원격측정 점수에 대응하는 값보다 임계 수 또는 백분율(예를 들어, 10%) 초과만큼 더 높은지를 결정한다. 예시적인 프리페처 상태 선택기(208)가, 활성화에 대응하는 원격측정 점수에 대응하는 값이 비활성화에 대응하는 원격측정 점수에 대응하는 값보다 임계값 초과만큼 높지 않다고 결정하면(블록(324): 아니오), 제어는 블록(330)을 계속한다. 예시적인 프리페처 상태 선택기(208)가, 활성화에 대응하는 원격측정 점수에 대응하는 값이 비활성화에 대응하는 원격측정 점수에 대응하는 값보다 임계값 초과만큼 높다고 결정하면(블록(324): 예), 프리페처 상태 선택기(208)는 현재 페이즈에 대한 코어(들)(102)의 원격측정 점수(들)가 현재 페이즈에 대한 반대 프리페처 상태에 대응하는 원격측정 점수에 대응하는 값보다 임계값 초과만큼 높은지를 결정한다(블록(326)). 예를 들어, 현재 페이즈가 비활성화의 프리페처 상태를 갖는 경우, 프리페처 상태 선택기(208)는 현재 페이즈의 원격측정 점수들을 비활성화 원격측정 점수에 대응하는 값과 비교한다. 도 3의 예시적인 명령어들(300)은 블록들(324 및 326)을 특정 순서로 포함하지만, 블록(324) 또는 블록(326)이 제거될 수 있거나, 블록들(324 및 326)의 순서가 사용자 및/또는 제조자 선호도에 따라 반전될 수 있다.
예시적인 프리페처 상태 선택기(208)가 현재 페이즈에 대한 코어(들)(102)의 원격측정 점수(들)(예를 들어, 모든 원격측정 점수 또는 임계 수를 초과하는 개수의 원격측정 점수)가 현재 페이즈에 대한 반대 프리페처 상태에 대응하는 원격측정 점수에 대응하는 값보다 임계값 초과만큼 높다고 결정하면(블록(326): 예), 프리페처 상태 선택기(208)는 다음 페이즈에 대해 프리페처 상태를 활성화로서 선택한다(블록(328)). 예시적인 프리페처 상태 선택기(208)가 현재 페이즈에 대한 코어(들)(102)의 원격측정 점수(들)(예를 들어, 모든 원격측정 점수 또는 임계 수를 초과하는 개수의 원격측정 점수)가 현재 페이즈에 대한 반대 프리페처 상태에 대응하는 원격측정 점수에 대응하는 값보다 임계값 초과만큼 높지 않다고 결정하면(블록(326): 아니오), 프리페처 상태 선택기(208)는 다음 페이즈에 대해 프리페처 상태를 비활성화로서 선택한다(블록(330)).
블록(332)에서, 예시적인 인터페이스(200)는 선택된 프리페처 상태에 대응하는 값을 코어(들)(102)의 MSR(들)(106)에 저장함으로써, 코어(들)(102)에게 다음 페이즈에 대해 선택된 프리페처 상태에 따라 동작할 것을 명령한다. 이러한 방식으로, 코어(들)(102)는 각각의 MSR(들)(106)에 저장된 값을 판독하고, 다음 페이즈에 대해 프리페처(들)를 활성화 또는 비활성화할 수 있다. 블록(334)에서, 예시적인 타이머(202)가 재시작된다. 블록(336)에서, 예시적인 슬립 상태 선택기(204)는 (예를 들어, 컴포넌트들의 전원을 끄는 것 및/또는 저전력 모드에 진입하는 것에 의해) 슬립 모드에 진입한다. 블록(338)에서, 예시적인 슬립 상태 선택기(204)는 워크로드가 완료되었는지를 결정한다. 예시적인 슬립 상태 선택기(204)가 워크로드가 완료되지 않았다고 결정하면(블록(338): 아니오), 제어는 후속 페이즈에 대한 후속 샘플을 위해 도 3a의 블록(302)으로 되돌아간다. 예시적인 슬립 상태 선택기(204)가 워크로드가 완료되었다고 결정하면(블록(338): 예), 명령어들이 종료된다.
도 4는 원격측정 데이터에 기초하여 코어(들)(102)에 대한 하나 이상의 프리페처 상태(들)를 동적으로 선택하도록 ML 모델을 트레이닝하기 위해 예시적인 ML 모델 트레이너(114)를 구현하기 위해 실행될 수 있는 예시적인 머신 판독가능한 명령어(400)를 나타내는 흐름도를 도시한다. 도 4의 흐름도는 예시적인 ML 모델 트레이너(114)와 관련하여 설명되지만, 다른 유형의 모델 트레이너(들)가 대신 사용될 수 있다.
블록(402)에서, 예시적인 ML 모델 트레이너(114)(도 1)는 원격측정 데이터를 최적의 프리페처 상태들에 연계하는 트레이닝 데이터를 획득한다. 블록(404)에서, 예시적인 ML 모델 트레이너(114)는 트레이닝 데이터의 제1 서브세트(예를 들어, 트레이닝 데이터의 70%)를 선택한다. 블록(406)에서, 예시적인 ML 모델 트레이너(114)는 트레이닝 데이터의 선택된 서브세트의 대응하는 원격측정 데이터에 기초하여 최적의 프리페처 상태를 출력하도록 ML 모델을 트레이닝(예를 들어, 초기 반복 동안) 및/또는 조절(예를 들어, 후속 반복 동안)한다. 예를 들어, ML 모델 트레이너(114)는 입력 원격측정 데이터가 신경망에 적용될 때 대응하는 최적의 프리페처 상태 출력을 야기하도록 신경망에서 뉴런들의 가중치들을 조절할 수 있다.
블록(408)에서, 예시적인 ML 모델 트레이너(114)는 트레이닝에 사용되지 않은 트레이닝 데이터의 서브세트로 ML 모델을 테스트한다. 예를 들어, ML 모델 트레이너(114)는 ML 모델을 트레이닝 및/또는 조절하는 데 사용되지 않은 트레이닝 데이터 서브세트의 원격측정 데이터를 입력들로서 사용하고, 출력 원격측정 상태를 트레이닝 데이터의 서브세트로부터의 대응하는 최적의 프리페처 상태와 비교함으로써 신경망의 정확도를 결정한다. 대응하는 트레이닝 데이터와 일치하는 출력 프리페처 상태가 많을수록 신경망 모델의 정확도가 높아진다. 블록(410)에서, 예시적인 ML 모델 트레이너(114)는 ML 모델의 정확도가 임계값을 초과하는지를 결정한다.
예시적인 ML 모델 트레이너(114)가 ML 모델의 정확도가 임계값을 초과하지 않는다고 결정하면(블록(410): 아니오), ML 모델 트레이너(114)는 ML 모델을 트레이닝하고/거나 조절하는 데에 사용되지 않은 트레이닝 데이터의 후속 서브세트를 선택하고(블록(412)), 제어는 블록(406)으로 되돌아가서, ML 모델의 정확도를 증가시키기 위해 후속 서브세트에 기초하여 ML 모델을 조절한다. 예시적인 ML 모델 트레이너(114)가 ML 모델의 정확도가 임계값보다 높다고 결정하면(블록(410): 예), ML 모델 트레이너(114)는 트레이닝된 ML 모델을 도 1의 CPU(100)의 예시적인 프리페처 제어기(112)(도 1)에 배치한다(블록(414)). 도 4의 예시적인 명령어들이 종료된다.
도 5는 ML 모델을 사용하여 제2 모드에서 동적 프리페처 제어를 수행하기 위해 예시적인 프리페처 제어기(112)(도 1 및/또는 2)를 구현하기 위해 실행될 수 있는 예시적인 머신 판독가능한 명령어들(500)을 나타내는 흐름도를 도시한다. 도 5의 흐름도는 예시적인 CPU(100)의 예시적인 프리페처 제어기(112)와 관련하여 설명되지만, 다른 유형(들)의 프리페처 제어기(들) 및/또는 다른 유형(들)의 CPU(들)가 대신 사용될 수 있다.
블록(502)에서, 예시적인 타이머(202)(도 2)는 임계 시간량이 경과했는지를 결정한다. 예시적인 타이머(202)는 샘플이 새로운 페이즈일 때를 결정하기 위해 CPU(100)(도 1) 및/또는 하나 이상의 코어(들)(102)(도 1)의 클록을 모니터링할 수 있다. 임계 시간량은 프리페처 제어기(112)(도 1)에 대한 샘플링 주파수에 대응한다. 예시적인 타이머(202)가 임계 시간량이 경과하지 않았다고 결정하면(블록(502): 아니오), 제어는 임계 시간량이 경과할 때까지 블록(502)으로 복귀한다.
예시적인 타이머(202)가 임계 시간량이 경과했다고 결정하면(블록(502): 예), 예시적인 슬립 상태 선택기(204)(도 2)는 프리페처 제어기(112)의 컴포넌트들을 웨이크업한다(블록(504)). 예를 들어, 샘플링하지 않을 때, 슬립 상태 선택기(204)는 에너지를 보존하기 위해 일부 컴포넌트들을 턴오프하고/거나 저전력 모드에서 동작할 수 있다. 따라서, 예시적인 프리페처 제어기(112)가 샘플링해야 할 때, 슬립 상태 선택기(204)는 슬립 중인 컴포넌트들을 웨이크업하고/거나 저전력 모드로부터 벗어날 필요가 있다.
블록(506)에서, 예시적인 인터페이스(200)(도 2)는 (예를 들어, 컴포넌트 인터페이스를 사용하여) 대응하는 카운터들(104)(도 1)의 카운트들에 액세스함으로써 현재 페이즈의 코어(들)에 대응하는 원격측정 데이터(예를 들어, 원격측정 메트릭)를 획득한다. 예를 들어, 인터페이스(200)는 코어 메트릭 및/또는 언코어 메트릭을 획득할 수 있다. 일부 예들에서, 원격측정 데이터는 또한 이전 페이즈들로부터의 원격측정 데이터를 포함할 수 있다.
블록(508)에서, 예시적인 모델(210)(도 2)은 원격측정 메트릭(들)을 적용(예를 들어, 입력)하여 코어(들)(102)에 대한 프리페처 상태(들)를 계산한다. 예를 들어, 프리페처 제어기(112)는 제1 프리페처 상태를 획득하기 위해 제1 코어로부터의 원격측정 데이터를 모델(210)에 적용할 수 있고, 제2 프리페처 상태를 획득하기 위해 제2 코어로부터의 원격측정 데이터를 모델(210)에 적용할 수 있는 등이다. 일부 예들에서, 점수 결정기(206)(도 2)는 모델(210)에 적용하기 전에 하나 이상의 원격측정 메트릭을 원격측정 점수로 변환할 수 있다(예를 들어, 폐기된 명령어들의 수 및 클록에 기초하여 PSI를 계산함). 모델(210)은 프리페처 제어기(112)에서 구현될 ML 모델 트레이너(114)에 의해 배치된 모델 데이터에 기초하여 구현된다. 블록(510)에서, 예시적인 프리페처 상태 선택기(208)는 모델(210)로부터 각각의 코어(들)(102)에 대한 프리페처 상태 결과(들)를 획득한다.
블록(512)에서, 예시적인 프리페처 상태 선택기(208)(도 2)는 코어들(102)에 대해 전역적 프리페처 상태가 설정되어야 하는지(예를 들어, 프리페처 상태가 코어들(102)에 걸쳐 동일해야 하는지)를 결정하며, 이는 사용자 및/또는 제조자 선호도에 기초한 설정이거나 하드코딩될 수 있다. 예시적인 프리페처 상태 선택기(208)가 코어(들)(102)에 걸쳐 전역적 프리페처 상태가 설정되어야 한다고 결정하면(블록(512): 예), 예시적인 프리페처 상태 선택기(208)는 프리페처 상태 결과들 중 더 흔한 프리페처 상태들에 기초하여 전역적 프리페처 상태를 설정한다(블록(514)). 예를 들어, 코어들(102)에 대한 출력 프리페처 확률 중 5개가 프리페처 활성화에 대응하고, 코어들(102)에 대한 출력 프리페처 확률 중 2개가 프리페처 비활성화에 대응하는 경우, 프리페처 상태 선택기(208)는 모든 코어(102)에 대해 프리페처 상태를 활성화로 설정한다.
예시적인 프리페처 상태 선택기(208)가 코어(들)(102)에 걸쳐 전역적 프리페처 상태를 설정하지 않기로 결정하면(블록(512): 아니오), 예시적인 프리페처 상태 선택기(208)는 결과들을 큐(212)에 저장한다(블록(516)). 이러한 방식으로, 프리페처 상태 선택기(208)는 이력 프리페처 상태들을 모니터링하고, 그리고/또는 구현 동안 프리페치된 데이터가 사용되었는지 여부에 기초하여, 선택된 프리페처 상태를 효율적인 것 또는 비효율적인 것으로서 마크할 수 있다. 이러한 방식으로, 예시적인 프리페처 상태 선택기(208)는 후속 페이즈를 위해 그리고/또는 구현된 모델(210)을 튜닝하기 위해 이력 데이터를 사용할 수 있다. 블록(518)에서, 예시적인 인터페이스(200)는 코어(들)(102)의 MSR(들)(106)(도 1)에 선택된 프리페처 상태에 대응하는 값을 저장함으로써, 코어(들)(102)에게 다음 페이즈에 대해 선택된 프리페처 상태(들)에 따라 동작할 것을 명령한다. 이러한 방식으로, 예시적인 코어(들)(102)는 각각의 MSR(들)(106)에 저장된 값들을 판독하고, 다음 페이즈에 대해 프리페처(들)를 활성화 또는 비활성화할 수 있다. 전역적 프리페처 상태가 결정된 경우, 예시적인 인터페이스(200)는 모든 코어(들)(102)에 걸쳐 모든 MSR(106)에 전역적 프리페처 상태를 저장한다. 전역적 프리페처 상태가 결정되지 않는 경우, 예시적인 인터페이스(200)는 대응하는 코어(102)에 대해 결정된 프리페처 상태에 대응하는 MSR(106)에 값을 저장한다.
블록(520)에서, 예시적인 타이머(202)가 재시작된다. 블록(522)에서, 예시적인 슬립 상태 선택기(204)는 (예를 들어, 컴포넌트들의 전원을 끄고/거나 저전력 모드에 진입하는 것에 의해) 슬립 모드에 진입한다. 블록(524)에서, 예시적인 슬립 상태 선택기(204)는 워크로드가 완료되었는지를 결정한다. 예시적인 슬립 상태 선택기(204)가 워크로드가 완료되지 않았다고 결정하면(블록(524): 아니오), 제어는 후속 페이즈에 대한 후속 샘플을 위해 블록(502)으로 되돌아간다. 예시적인 프리페처 제어기(112)가 워크로드가 완료되었다고 결정하면(블록(524): 예), 명령어들이 종료된다.
도 6은 도 1의 예시적인 프리페처 제어기(112) 및/또는 ML 모델 트레이너(114)를 구현하기 위해 도 3a, 도 3b, 도 4 및/또는 도 5의 명령어들을 실행하도록 구조화된 예시적인 프로세서 플랫폼(600)의 블록도이다. 프로세서 플랫폼(600)은 예를 들어 서버, 개인용 컴퓨터, 워크스테이션, 자가 러닝 머신(예를 들어, 신경망), 모바일 디바이스(예를 들어, 셀폰, 스마트폰, iPadTM와 같은 태블릿) 또는 임의의 다른 유형의 컴퓨팅 디바이스일 수 있다.
도시된 예의 프로세서 플랫폼(600)은 프로세서(612)를 포함한다. 도시된 예시의 프로세서(612)는 하드웨어이다. 예를 들어, 프로세서(612)는 임의의 원하는 제품군 또는 제조자로부터의 하나 이상의 집적 회로, 논리 회로, 마이크로프로세서, GPU, DSP, 또는 제어기에 의해 구현될 수 있다. 하드웨어 프로세서는 반도체 기반(예를 들어, 실리콘 기반) 디바이스일 수 있다. 이 예에서, 프로세서는 도 1의 예시적인 ML 모델 트레이너(114), 및/또는 도 2의 예시적인 타이머(202), 예시적인 슬립 상태 선택기(204), 예시적인 점수 결정기(206), 예시적인 프리페처 상태 선택기(208), 및/또는 예시적인 모델(210)을 구현한다.
도시된 예의 프로세서(612)는 로컬 메모리(613)(예를 들어, 캐시)를 포함한다. 도시된 예의 프로세서(612)는 버스(618)를 통해 휘발성 메모리(614) 및 비-휘발성 메모리(616)를 포함하는 메인 메모리와 통신한다. 휘발성 메모리(614)는 동기식 동적 랜덤 액세스 메모리(SDRAM), 동적 랜덤 액세스 메모리(DRAM), RAMBUS® 동적 랜덤 액세스 메모리(RDRAM®), 및/또는 임의의 다른 유형의 랜덤 액세스 메모리 디바이스에 의해 구현될 수 있다. 비-휘발성 메모리(616)는 플래시 메모리 및/또는 임의의 다른 원하는 유형의 메모리 디바이스에 의해 구현될 수 있다. 메인 메모리(614, 616)에 대한 액세스는 메모리 제어기에 의해 제어된다. 일부 예들에서, 메인 메모리(614)는 예시적인 메모리(108)를 구현하고, 예시적인 로컬 메모리(613)는 도 1의 예시적인 큐(212)를 구현한다.
도시된 예의 프로세서 플랫폼(600)은 또한 인터페이스 회로(620)를 포함한다. 인터페이스 회로(620)는 이더넷 인터페이스, 범용 직렬 버스(USB), 블루투스® 인터페이스, 근거리 통신(NFC) 인터페이스 및/또는 PCI 익스프레스 인터페이스와 같은 임의의 유형의 인터페이스 표준에 의해 구현될 수 있다. 도 6의 예에서, 인터페이스 회로(620)는 도 2의 인터페이스(200)를 구현한다. 그러나, 인터페이스(200)는 도 6의 인터페이스 회로(620)와는 별개의 컴포넌트일 수 있다.
도시된 예에서, 하나 이상의 입력 디바이스(622)가 인터페이스 회로(620)에 연결된다. 입력 디바이스(들)(622)는 사용자가 데이터 및/또는 커맨드들을 프로세서(612)에 입력하는 것을 허용한다. 입력 디바이스(들)는 예를 들어 오디오 센서, 마이크로폰, 카메라(스틸 또는 비디오), 키보드, 버튼, 마우스, 터치스크린, 트랙 패드, 트랙볼, 아이소포인트(isopoint), 및/또는 음성 인식 시스템에 의해 구현될 수 있다.
하나 이상의 출력 디바이스(624)가 또한 도시된 예의 인터페이스 회로(620)에 연결된다. 출력 디바이스들(624)은 예를 들어, 디스플레이 디바이스들(예를 들어, 발광 다이오드(LED), 유기 발광 다이오드(OLED), 액정 디스플레이(LCD), 음극선관 디스플레이(CRT), 인-플레이스 스위칭(IPS) 디스플레이, 터치 스크린 등), 촉각 출력 디바이스, 프린터 및/또는 스피커에 의해 구현될 수 있다. 따라서, 도시된 예의 인터페이스 회로(620)는 전형적으로 그래픽 드라이버 카드, 그래픽 드라이버 칩, 및/또는 그래픽 드라이버 프로세서를 포함한다.
도시된 예의 인터페이스 회로(620)는 또한 송신기, 수신기, 송수신기, 모뎀, 주택용 게이트웨이, 무선 액세스 포인트, 및/또는 네트워크(626)를 통한 외부 머신들(예를 들어, 임의의 종류의 컴퓨팅 디바이스들)과의 데이터 교환을 용이하게 하는 네트워크 인터페이스와 같은 통신 디바이스를 포함한다. 통신은 예를 들어 이더넷 연결, 디지털 가입자 회선(DSL) 연결, 전화선 연결, 동축 케이블 시스템, 위성 시스템, 가시선(line-of-site) 무선 시스템, 셀룰러 전화 시스템 등을 통한 것일 수 있다.
예시된 예의 프로세서 플랫폼(600)은 또한 소프트웨어 및/또는 데이터를 저장하기 위한 하나 이상의 대용량 저장 디바이스(628)를 포함한다. 이러한 대용량 저장 디바이스들(628)의 예들은 플로피 디스크 드라이브들, 하드 드라이브 디스크들, 컴팩트 디스크 드라이브들, 블루레이 디스크 드라이브들, RAID(redundant array of independent disks) 시스템들, 및 디지털 다기능 디스크(DVD) 드라이브들을 포함한다.
도 3a, 도 3b, 도 4 및/또는 도 5의 머신 실행가능한 명령어들(632)은 대용량 저장 디바이스(628), 휘발성 메모리(614), 비-휘발성 메모리(616), 및/또는 CD 또는 DVD와 같은 이동식 비-일시적 컴퓨터 판독가능한 저장 매체에 저장될 수 있다.
프리페처들을 동적으로 활성화 및/또는 비활성화하는 예시적인 방법들, 장치들, 시스템들, 및 제조 물품들이 여기에 개시된다. 추가의 예들 및 이들의 조합은 이하를 포함한다: 예 1은 프리페처를 동적으로 활성화 또는 비활성화하기 위한 장치로서, 중앙 처리 유닛 내의 코어의 카운터에 대응하는 원격측정 데이터에 액세스하기 위한 인터페이스 - 카운터는 중앙 처리 유닛에서 실행되는 워크로드의 제1 페이즈에 대응함 -; 및 원격측정 데이터에 기초하여 후속 페이즈에 대한 프리페처 상태를 선택하는 프리페처 상태 선택기를 포함하고, 인터페이스는 중앙 처리 유닛 내의 코어에게 후속 페이즈에서 프리페처 상태에 따라 동작할 것을 명령하는, 장치를 포함한다.
예 2는 예 1의 장치로서, 원격측정 데이터를 사용하여 제1 페이즈에서의 코어에 대한 원격측정 점수를 결정하기 위한 점수 결정기를 더 포함하고, 원격측정 점수는 제1 페이즈 동안의 초 당 명령어에 대응하는, 장치를 포함한다.
예 3은 예 2의 장치로서, 프리페처 상태는 제1 프리페처 상태이고, 프리페처 상태 선택기는: 복수의 이전 페이즈에 걸쳐 제2 프리페처 상태에 대한 제1 원격측정 점수들에 대응하는 제1 값을 결정하고; 복수의 이전 페이즈에 걸쳐 제3 프리페처 상태에 대한 제2 원격측정 점수들에 대응하는 제2 값을 결정하기 위한 것이고, 제3 프리페처 상태는 제1 프리페처 상태와 상이한, 장치를 포함한다.
예 4는 예 3의 장치로서, 프리페처 상태 선택기는 (a) 제1 페이즈에서의 코어에 대한 원격측정 점수와 (b) 복수의 이전 페이즈에 걸친 제2 프리페처 상태의 제1 값의 비교에 기초하여, 후속 페이즈에 대한 제1 프리페처 상태를 선택하기 위한 것이고, 제1 페이즈에서의 코어의 제1 프리페처 상태는 제3 프리페처 상태인, 장치를 포함한다.
예 5는 예 3의 장치로서, 프리페처 상태 선택기는 (a) 복수의 이전 페이즈에 걸친 제2 프리페처 상태의 제1 값과 (b) 복수의 이전 페이즈에 걸친 제3 프리페처 상태의 제2 값의 비교에 기초하여, 후속 페이즈에 대한 제1 프리페처 상태를 선택하기 위한 것인, 장치를 포함한다.
예 6은 예 1의 장치로서, 프리페처 상태는 제1 프리페처 상태이고, 제1 페이즈에서의 코어의 제2 프리페처 상태와 관련하여, 제1 페이즈에서의 코어의 원격측정 데이터 또는 제1 페이즈에서의 코어의 원격측정 점수 중 적어도 하나를 저장하기 위한 저장소를 더 포함하는, 장치를 포함한다.
예 7은 예 6의 장치로서, 저장소는 이전 페이즈들에서의 코어의 이전 프리페처 상태들과 관련하여, 이전 페이즈들에서의 코어의 이전 원격측정 데이터 또는 이전 페이즈들에서의 코어의 이전 원격측정 점수들 중 적어도 하나를 저장하는, 장치를 포함한다.
예 8은 명령어를 포함하는 비-일시적 컴퓨터 판독가능한 저장 매체로서, 명령어는 실행될 때, 프로세서로 하여금, 적어도: 중앙 처리 유닛 내의 코어의 카운터에 대응하는 원격측정 데이터에 액세스하게 하고 - 카운터는 중앙 처리 유닛에서 실행되는 워크로드의 제1 페이즈에 대응함 -; 원격측정 데이터에 기초하여 후속 페이즈에 대한 프리페처 상태를 선택하게 하고; 중앙 처리 유닛 내의 코어에게 프리페처 상태에 따라 후속 페이즈에서 동작할 것을 명령하게 하는, 컴퓨터 판독가능한 저장 매체를 포함한다.
예 9는 예 8의 컴퓨터 판독가능한 매체로서, 명령어들은 프로세서로 하여금, 원격측정 데이터를 사용하여 제1 페이즈에서의 코어에 대한 원격측정 점수를 결정하게 하고, 원격측정 점수는 제1 페이즈 동안의 초 당 명령어에 대응하는, 컴퓨터 판독가능한 매체를 포함한다.
예 10은 예 9의 컴퓨터 판독가능한 매체로서, 프리페처 상태는 제1 프리페처 상태이고, 명령어들은 프로세서로 하여금: 복수의 이전 페이즈에 걸쳐 제2 프리페처 상태에 대한 제1 원격측정 점수들에 대응하는 제1 값을 결정하게 하고; 복수의 이전 페이즈에 걸쳐 제3 프리페처 상태에 대한 제1 평균 원격측정 점수들에 대응하는 값을 결정하게 하며, 제3 프리페처 상태는 제1 프리페처 상태와 상이한, 컴퓨터 판독가능한 매체를 포함한다.
예 11은 예 10의 컴퓨터 판독가능한 매체로서, 명령어들은 프로세서로 하여금, (a) 제1 페이즈에서의 코어에 대한 원격측정 점수와 (b) 복수의 이전 페이즈에 걸친 제2 프리페처 상태의 제1 값 원격측정 점수의 비교에 기초하여, 후속 페이즈에 대한 제1 프리페처 상태를 선택하게 하고, 제1 페이즈에서의 코어의 제1 프리페처 상태는 제3 프리페처 상태인, 컴퓨터 판독가능한 매체를 포함한다.
예 12는 예 10의 컴퓨터 판독가능한 매체로서, 명령어들은 프로세서로 하여금, (a) 복수의 이전 페이즈에 걸친 제2 프리페처 상태의 제1 값 원격측정 점수와 (b) 복수의 이전 페이즈에 걸친 제3 프리페처 상태의 제2 값 원격측정 점수의 비교에 기초하여, 후속 페이즈에 대한 제1 프리페처 상태를 선택하게 하는, 컴퓨터 판독가능한 매체를 포함한다.
예 13은 예 8의 컴퓨터 판독가능한 매체로서, 프리페처 상태는 제1 프리페처 상태이고, 명령어들은 프로세서로 하여금, 제1 페이즈에서의 코어의 제2 프리페처 상태와 관련하여, 제1 페이즈에서의 코어의 원격측정 데이터 또는 제1 페이즈에서의 코어의 원격측정 점수 중 적어도 하나를 저장하게 하는, 컴퓨터 판독가능한 매체를 포함한다.
예 14는 예 13의 컴퓨터 판독가능한 매체로서, 명령어들은 프로세서로 하여금, 이전 페이즈들에서의 코어의 이전 프리페처 상태들과 관련하여, 이전 페이즈들에서의 코어의 이전 원격측정 데이터 또는 이전 페이즈들에서의 코어의 이전 원격측정 점수들 중 적어도 하나를 저장하게 하는, 컴퓨터 판독가능한 매체를 포함한다.
예 15는 프리페처를 동적으로 활성화 또는 비활성화하는 방법으로서, 프로세서로 명령어를 실행함으로써, 중앙 처리 유닛 내의 코어의 카운터에 대응하는 원격측정 데이터에 액세스하는 단계 - 카운터는 중앙 처리 유닛에서 실행되는 워크로드의 제1 페이즈에 대응함 -; 프로세서로 명령어를 실행함으로써, 원격측정 데이터에 기초하여 후속 페이즈에 대한 프리페처 상태를 선택하는 단계; 및 프로세서로 명령어를 실행함으로써, 중앙 처리 유닛 내의 코어에게 후속 페이즈에서 프리페처 상태에 따라 동작할 것을 명령하는 단계를 포함하는, 방법을 포함한다.
예 16은 예 15의 방법으로서, 원격측정 데이터를 사용하여 제1 페이즈에서의 코어에 대한 원격측정 점수를 결정하는 단계를 더 포함하고, 원격측정 점수는 제1 페이즈 동안의 초 당 명령어에 대응하는, 방법을 포함한다.
예 17은 예 16의 방법으로서, 프리페처 상태는 제1 프리페처 상태이고, 복수의 이전 페이즈에 걸쳐 제2 프리페처 상태에 대한 제1 원격측정 점수들에 대응하는 제1 값을 결정하는 단계; 및 복수의 이전 페이즈에 걸쳐 제3 프리페처 상태에 대한 제2 원격측정 점수들에 대응하는 제2 값을 결정하는 단계를 더 포함하고, 제3 프리페처 상태는 제1 프리페처 상태와 상이한, 방법을 포함한다.
예 18은 예 17의 방법으로서, (a) 제1 페이즈에서의 코어에 대한 원격측정 점수와 (b) 복수의 이전 페이즈에 걸친 제2 프리페처 상태의 제1 값 원격측정 점수의 비교에 기초하여, 후속 페이즈에 대한 제1 프리페처 상태를 선택하는 단계를 더 포함하고, 제1 페이즈에서의 코어의 제1 프리페처 상태는 제3 프리페처 상태인, 방법을 포함한다.
예 19는 예 17의 방법으로서, (a) 복수의 이전 페이즈에 걸친 제2 프리페처 상태의 제1 값 원격측정 점수와 (b) 복수의 이전 페이즈에 걸친 제3 프리페처 상태의 제2 값 원격측정 점수의 비교에 기초하여, 후속 페이즈에 대한 제1 프리페처 상태를 선택하는 단계를 더 포함하는, 방법을 포함한다.
예 20은 예 15의 방법으로서, 프리페처 상태는 제1 프리페처 상태이고, 제1 페이즈에서의 코어의 제2 프리페처 상태와 관련하여, 제1 페이즈에서의 코어의 원격측정 데이터 또는 제1 페이즈에서의 코어의 원격측정 점수 중 적어도 하나를 저장하는 단계를 더 포함하는, 방법을 포함한다.
예 21은 예 20의 방법으로서, 이전 페이즈들에서의 코어의 이전 프리페처 상태들과 관련하여, 이전 페이즈들에서의 코어의 이전 원격측정 데이터 또는 이전 페이즈들에서의 코어의 이전 원격측정 점수 중 적어도 하나를 저장하는 단계를 더 포함하는, 방법을 포함한다.
전술한 내용으로부터, 프리페처를 동적으로 활성화 및/또는 비활성화하기 위한 예시적인 방법들, 장치들 및 제조 물품들이 본 명세서에 개시되어 있음을 알 수 있을 것이다. 개시된 방법들, 장치들 및 제조 물품들은 적절한 경우 프리페처를 활성화하여 대기시간을 줄이고 적절한 경우 프리페처를 비활성화하여 워크로드를 실행하기 위한 데이터의 액세스 프리페치를 제거함으로써 컴퓨터의 효율성을 향상시킨다. 따라서, 개시된 방법들, 장치들 및 제조 물품들은 컴퓨터의 기능에 있어서 하나 이상의 개선(들)에 관한 것이다.
특정한 예시적인 방법들, 장치들 및 제조 물품들이 본 명세서에 개시되었지만, 본 특허의 포괄 범위는 이에 제한되지 않는다. 반대로, 본 특허는 본 특허의 청구항들의 범위에 타당하게 속하는 모든 방법, 장치 및 제조 물품을 포함한다.

Claims (25)

  1. 프리페처를 동적으로 활성화 또는 비활성화하기 위한 장치로서,
    중앙 처리 유닛 내의 코어의 카운터에 대응하는 원격측정 데이터에 액세스하기 위한 인터페이스 - 상기 카운터는 상기 중앙 처리 유닛에서 실행되는 워크로드의 제1 페이즈에 대응함 -; 및
    상기 원격측정 데이터에 기초하여 후속 페이즈에 대한 프리페처 상태를 선택하기 위한 프리페처 상태 선택기
    를 포함하고, 상기 인터페이스는 상기 중앙 처리 유닛 내의 상기 코어에게 상기 후속 페이즈에서 상기 프리페처 상태에 따라 동작할 것을 명령하는, 장치.
  2. 제1항에 있어서, 상기 원격측정 데이터를 사용하여 상기 제1 페이즈에서의 상기 코어에 대한 원격측정 점수를 결정하기 위한 점수 결정기를 더 포함하고, 상기 원격측정 점수는 상기 제1 페이즈 동안의 초 당 명령어들에 대응하는, 장치.
  3. 제2항에 있어서, 상기 프리페처 상태는 제1 프리페처 상태이고, 상기 프리페처 상태 선택기는:
    복수의 이전 페이즈에 걸쳐 제2 프리페처 상태에 대한 제1 원격측정 점수들에 대응하는 제1 값을 결정하고;
    상기 복수의 이전 페이즈에 걸쳐 제3 프리페처 상태에 대한 제2 원격측정 점수들에 대응하는 제2 값을 결정하기
    위한 것이고, 상기 제3 프리페처 상태는 상기 제1 프리페처 상태와 상이한, 장치.
  4. 제3항에 있어서, 상기 프리페처 상태 선택기는 (a) 상기 제1 페이즈에서의 상기 코어에 대한 상기 원격측정 점수와 (b) 상기 복수의 이전 페이즈에 걸친 상기 제2 프리페처 상태의 상기 제1 값의 비교에 기초하여, 상기 후속 페이즈에 대한 상기 제1 프리페처 상태를 선택하기 위한 것이고, 상기 제1 페이즈에서의 상기 코어의 상기 제1 프리페처 상태는 상기 제3 프리페처 상태인, 장치.
  5. 제3항에 있어서, 상기 프리페처 상태 선택기는 (a) 상기 복수의 이전 페이즈에 걸친 상기 제2 프리페처 상태의 상기 제1 값과 (b) 상기 복수의 이전 페이즈에 걸친 상기 제3 프리페처 상태의 상기 제2 값의 비교에 기초하여, 상기 후속 페이즈에 대한 상기 제1 프리페처 상태를 선택하기 위한 것인, 장치.
  6. 제2항 내지 제5항 중 어느 한 항에 있어서, 상기 제1 페이즈에서의 상기 코어의 제4 프리페처 상태와 관련하여, 상기 제1 페이즈에서의 상기 코어의 상기 원격측정 데이터 또는 상기 제1 페이즈에서의 상기 코어의 상기 원격측정 점수 중 적어도 하나를 저장하기 위한 저장소를 더 포함하는, 장치.
  7. 제6항에 있어서, 상기 저장소는 이전 페이즈들에서의 상기 코어의 이전 프리페처 상태들과 관련하여, 상기 이전 페이즈들에서의 상기 코어의 이전 원격측정 데이터 또는 상기 이전 페이즈들에서의 상기 코어의 이전 원격측정 점수들 중 적어도 하나를 저장하는, 장치.
  8. 프리페처를 동적으로 활성화 또는 비활성화하기 위한 방법으로서,
    프로세서로 명령어를 실행함으로써, 중앙 처리 유닛 내의 코어의 카운터에 대응하는 원격측정 데이터에 액세스하는 단계 - 상기 카운터는 상기 중앙 처리 유닛에서 실행되는 워크로드의 제1 페이즈에 대응함 -;
    상기 프로세서로 명령어를 실행함으로써, 상기 원격측정 데이터에 기초하여 후속 페이즈에 대한 프리페처 상태를 선택하는 단계; 및
    상기 프로세서로 명령어를 실행함으로써, 상기 중앙 처리 유닛 내의 상기 코어에게 상기 후속 페이즈에서 상기 프리페처 상태에 따라 동작할 것을 명령하는 단계
    를 포함하는, 방법.
  9. 제8항에 있어서, 상기 원격측정 데이터를 사용하여 상기 제1 페이즈에서의 상기 코어에 대한 원격측정 점수를 결정하는 단계를 더 포함하고, 상기 원격측정 점수는 상기 제1 페이즈 동안의 초 당 명령어들에 대응하는, 방법.
  10. 제9항에 있어서, 상기 프리페처 상태는 제1 프리페처 상태이고,
    복수의 이전 페이즈에 걸쳐 제2 프리페처 상태에 대한 제1 원격측정 점수들에 대응하는 제1 값을 결정하는 단계; 및
    상기 복수의 이전 페이즈에 걸쳐 제3 프리페처 상태에 대한 제2 원격측정 점수들에 대응하는 제2 값을 결정하는 단계
    를 더 포함하고, 상기 제3 프리페처 상태는 상기 제1 프리페처 상태와 상이한, 방법.
  11. 제10항에 있어서, (a) 상기 제1 페이즈에서의 상기 코어에 대한 상기 원격측정 점수와 (b) 상기 복수의 이전 페이즈에 걸친 상기 제2 프리페처 상태의 제1 값 원격측정 점수의 비교에 기초하여, 상기 후속 페이즈에 대한 상기 제1 프리페처 상태를 선택하는 단계를 더 포함하고, 상기 제1 페이즈에서의 상기 코어의 상기 제1 프리페처 상태는 상기 제3 프리페처 상태인, 방법.
  12. 제10항에 있어서, (a) 상기 복수의 이전 페이즈에 걸친 상기 제2 프리페처 상태의 제1 값 원격측정 점수와 (b) 상기 복수의 이전 페이즈에 걸친 상기 제3 프리페처 상태의 제2 값 원격측정 점수의 비교에 기초하여, 상기 후속 페이즈에 대한 상기 제1 프리페처 상태를 선택하는 단계를 더 포함하는, 방법.
  13. 제9항 내지 제12항 중 어느 한 항에 있어서, 상기 제1 페이즈에서의 상기 코어의 제4 프리페처 상태와 관련하여, 상기 제1 페이즈에서의 상기 코어의 상기 원격측정 데이터 또는 상기 제1 페이즈에서의 상기 코어의 상기 원격측정 점수 중 적어도 하나를 저장하는 단계를 더 포함하는, 방법.
  14. 제13항에 있어서, 이전 페이즈들에서의 상기 코어의 이전 프리페처 상태들과 관련하여, 상기 이전 페이즈들에서의 상기 코어의 이전 원격측정 데이터 또는 상기 이전 페이즈들에서의 상기 코어의 이전 원격측정 점수들 중 적어도 하나를 저장하는 단계를 더 포함하는, 방법.
  15. 프리페처를 동적으로 활성화 또는 비활성화하기 위한 장치로서,
    중앙 처리 유닛 내의 코어의 카운터에 대응하는 원격측정 데이터에 액세스하기 위한 수단 - 상기 카운터는 상기 중앙 처리 유닛에서 실행되는 워크로드의 제1 페이즈에 대응함 -; 및
    상기 원격측정 데이터에 기초하여 후속 페이즈에 대한 프리페처 상태를 선택하기 위한 수단
    을 포함하고, 상기 액세스하기 위한 수단은 상기 중앙 처리 유닛 내의 상기 코어에게 상기 후속 페이즈에서 상기 프리페처 상태에 따라 동작할 것을 명령하는, 장치.
  16. 제15항에 있어서, 상기 원격측정 데이터를 사용하여 상기 제1 페이즈에서의 상기 코어에 대한 원격측정 점수를 결정하기 위한 수단을 더 포함하고, 상기 원격측정 점수는 상기 제1 페이즈 동안의 초 당 명령어들에 대응하는, 장치.
  17. 제16항에 있어서, 상기 프리페처 상태는 제1 프리페처 상태이고, 상기 선택하기 위한 수단은:
    복수의 이전 페이즈에 걸쳐 제2 프리페처 상태에 대한 제1 원격측정 점수들에 대응하는 제1 값을 결정하고;
    상기 복수의 이전 페이즈에 걸쳐 제3 프리페처 상태에 대한 제2 원격측정 점수들에 대응하는 제2 값을 결정하기
    위한 것이고, 상기 제3 프리페처 상태는 상기 제1 프리페처 상태와 상이한, 장치.
  18. 제17항에 있어서, 상기 선택하기 위한 수단은 (a) 상기 제1 페이즈에서의 상기 코어에 대한 상기 원격측정 점수와 (b) 상기 복수의 이전 페이즈에 걸친 상기 제2 프리페처 상태의 상기 제1 값의 비교에 기초하여, 상기 후속 페이즈에 대한 상기 제1 프리페처 상태를 선택하기 위한 것이고, 상기 제1 페이즈에서의 상기 코어의 상기 제1 프리페처 상태는 상기 제3 프리페처 상태인, 장치.
  19. 명령어를 포함하는 컴퓨터 판독가능한 저장 매체로서,
    상기 명령어는 실행될 때, 프로세서로 하여금 적어도:
    중앙 처리 유닛 내의 코어의 카운터에 대응하는 원격측정 데이터에 액세스하게 하고 - 상기 카운터는 상기 중앙 처리 유닛에서 실행되는 워크로드의 제1 페이즈에 대응함 -;
    상기 원격측정 데이터에 기초하여 후속 페이즈에 대한 프리페처 상태를 선택하게 하고;
    상기 중앙 처리 유닛 내의 상기 코어에게 상기 후속 페이즈에서 상기 프리페처 상태에 따라 동작할 것을 명령하게 하는, 컴퓨터 판독가능한 매체.
  20. 제19항에 있어서, 상기 명령어들은 상기 프로세서로 하여금, 상기 원격측정 데이터를 사용하여 상기 제1 페이즈에서의 상기 코어에 대한 원격측정 점수를 결정하게 하고, 상기 원격측정 점수는 상기 제1 페이즈 동안의 초 당 명령어들에 대응하는, 컴퓨터 판독가능한 매체.
  21. 제20항에 있어서, 상기 프리페처 상태는 제1 프리페처 상태이고, 상기 명령어들은 상기 프로세서로 하여금:
    복수의 이전 페이즈에 걸쳐 제2 프리페처 상태에 대한 제1 원격측정 점수들에 대응하는 제1 값을 결정하게 하고;
    상기 복수의 이전 페이즈에 걸쳐 제3 프리페처 상태에 대한 제1 평균 원격측정 점수들에 대응하는 값을 결정하게 하기
    위한 것이고, 상기 제3 프리페처 상태는 상기 제1 프리페처 상태와 상이한, 컴퓨터 판독가능한 매체.
  22. 제21항에 있어서, 상기 명령어들은 상기 프로세서로 하여금, (a) 상기 제1 페이즈에서의 상기 코어에 대한 상기 원격측정 점수와 (b) 상기 복수의 이전 페이즈에 걸친 상기 제2 프리페처 상태의 제1 값 원격측정 점수의 비교에 기초하여, 상기 후속 페이즈에 대한 상기 제1 프리페처 상태를 선택하게 하기 위한 것이고, 상기 제1 페이즈에서의 상기 코어의 상기 제1 프리페처 상태는 상기 제3 프리페처 상태인, 컴퓨터 판독가능한 매체.
  23. 제21항에 있어서, 상기 명령어들은 상기 프로세서로 하여금, (a) 상기 복수의 이전 페이즈에 걸친 상기 제2 프리페처 상태의 제1 값 원격측정 점수와 (b) 상기 복수의 이전 페이즈에 걸친 상기 제3 프리페처 상태의 제2 값 원격측정 점수의 비교에 기초하여, 상기 후속 페이즈에 대한 상기 제1 프리페처 상태를 선택하게 하기 위한 것인, 컴퓨터 판독가능한 매체.
  24. 제20항 내지 제23항 중 어느 한 항에 있어서, 상기 명령어들은 상기 프로세서로 하여금, 상기 제1 페이즈에서의 상기 코어의 제4 프리페처 상태와 관련하여, 상기 제1 페이즈에서의 상기 코어의 상기 원격측정 데이터 또는 상기 제1 페이즈에서의 상기 코어의 상기 원격측정 점수 중 적어도 하나를 저장하게 하기 위한 것인, 컴퓨터 판독가능한 매체.
  25. 제24항에 있어서, 상기 명령어들은 상기 프로세서로 하여금, 이전 페이즈들에서의 상기 코어의 이전 프리페처 상태들과 관련하여, 상기 이전 페이즈들에서의 상기 코어의 이전 원격측정 데이터 또는 상기 이전 페이즈들에서의 상기 코어의 이전 원격측정 점수들 중 적어도 하나를 저장하게 하기 위한 것인, 컴퓨터 판독가능한 매체.
KR1020200173180A 2020-03-27 2020-12-11 프리페처들을 동적으로 활성화 및/또는 비활성화하기 위한 방법들 및 장치들 KR20210122043A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202063000975P 2020-03-27 2020-03-27
US63/000,975 2020-03-27
US17/033,282 US11720364B2 (en) 2020-03-27 2020-09-25 Methods and apparatus to dynamically enable and/or disable prefetchers
US17/033,282 2020-09-25

Publications (1)

Publication Number Publication Date
KR20210122043A true KR20210122043A (ko) 2021-10-08

Family

ID=74103130

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200173180A KR20210122043A (ko) 2020-03-27 2020-12-11 프리페처들을 동적으로 활성화 및/또는 비활성화하기 위한 방법들 및 장치들

Country Status (5)

Country Link
US (1) US11720364B2 (ko)
EP (1) EP3885919A1 (ko)
KR (1) KR20210122043A (ko)
CN (1) CN113448881A (ko)
TW (1) TW202137018A (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021118645A1 (en) * 2020-05-30 2021-06-17 Futurewei Technologies, Inc. Systems and methods for adaptive hybrid hardware pre-fetch
US20220197856A1 (en) * 2020-12-22 2022-06-23 Shadi Khasawneh System, Apparatus And Method For Dynamically Configuring One Or More Hardware Resources Of A Processor

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6055650A (en) * 1998-04-06 2000-04-25 Advanced Micro Devices, Inc. Processor configured to detect program phase changes and to adapt thereto
US6594730B1 (en) * 1999-08-03 2003-07-15 Intel Corporation Prefetch system for memory controller
US6983356B2 (en) * 2002-12-19 2006-01-03 Intel Corporation High performance memory device-state aware chipset prefetcher
US7613883B2 (en) * 2006-03-10 2009-11-03 Rambus Inc. Memory device with mode-selectable prefetch and clock-to-core timing
US7917702B2 (en) 2007-07-10 2011-03-29 Qualcomm Incorporated Data prefetch throttle
US8443151B2 (en) * 2009-11-09 2013-05-14 Intel Corporation Prefetch optimization in shared resource multi-core systems
US9471510B2 (en) * 2013-12-20 2016-10-18 Netapp, Inc. System and method for cache monitoring in storage systems
US10387318B2 (en) 2014-12-14 2019-08-20 Via Alliance Semiconductor Co., Ltd Prefetching with level of aggressiveness based on effectiveness by memory access type
US9645935B2 (en) * 2015-01-13 2017-05-09 International Business Machines Corporation Intelligent bandwidth shifting mechanism
US10034407B2 (en) * 2016-07-22 2018-07-24 Intel Corporation Storage sled for a data center
US10496542B1 (en) * 2017-04-27 2019-12-03 EMC IP Holding Company LLC Input/output patterns and data pre-fetch
US20190042434A1 (en) * 2017-12-12 2019-02-07 Corey D. Gough Dynamic prefetcher tuning
US20190213130A1 (en) * 2018-01-05 2019-07-11 Intel Corporation Efficient sector prefetching for memory side sectored cache
US10795593B2 (en) * 2018-09-10 2020-10-06 Intel Corporation Technologies for adjusting the performance of data storage devices based on telemetry data
US10963249B2 (en) * 2018-11-02 2021-03-30 International Business Machines Corporation Processor prefetcher mode governor for switching between prefetch modes
US11212085B2 (en) * 2019-03-29 2021-12-28 Intel Corporation Technologies for accelerated hierarchical key caching in edge systems
US11809549B2 (en) * 2019-12-27 2023-11-07 Intel Corporation Apparatus and method for power virus protection in a processor

Also Published As

Publication number Publication date
US11720364B2 (en) 2023-08-08
TW202137018A (zh) 2021-10-01
EP3885919A1 (en) 2021-09-29
US20210011726A1 (en) 2021-01-14
CN113448881A (zh) 2021-09-28

Similar Documents

Publication Publication Date Title
CN110389909B (zh) 使用深度神经网络优化固态驱动器的性能的系统和方法
US11543873B2 (en) Wake-on-touch display screen devices and related methods
US20190188111A1 (en) Methods and apparatus to improve performance data collection of a high performance computing application
US20170205863A1 (en) Dynamically updating a power management policy of a processor
US20190317880A1 (en) Methods and apparatus to improve runtime performance of software executing on a heterogeneous system
CN112970006B (zh) 一种基于递归神经网络的内存访问预测方法和电路
KR101701068B1 (ko) 비휘발성 메모리에 코드를 캐싱하는 방법들, 시스템들 및 장치
US20090198907A1 (en) Dynamic Adjustment of Prefetch Stream Priority
KR102654723B1 (ko) 저전력 캐시된 앰비언트 컴퓨팅
KR20210122043A (ko) 프리페처들을 동적으로 활성화 및/또는 비활성화하기 위한 방법들 및 장치들
US9646607B2 (en) Managing wake-on-voice buffer quality based on system boot profiling
US8230176B2 (en) Reconfigurable cache
CN112148293A (zh) 用于在异构系统上执行的软件的运行时多调度的方法和装置
KR20230027000A (ko) 컴퓨팅 시스템에서 웨이크 패턴을 동적으로 스케줄링하기 위한 방법들, 시스템들, 제조 물품들 및 장치들
US10983773B2 (en) Technologies for translation cache management in binary translation systems
CA2680597C (en) Managing speculative assist threads
US9645935B2 (en) Intelligent bandwidth shifting mechanism
US10152410B2 (en) Magnetoresistive random-access memory cache write management
US20160098193A1 (en) Method and apparatus for monitoring system performance and dynamically updating memory sub-system settings using software to optimize performance and power consumption
EP2936303B1 (en) Instruction cache having a multi-bit way prediction mask

Legal Events

Date Code Title Description
A201 Request for examination