KR101410634B1 - 프로세서 대기 상태를 인에이블하기 위한 명령 - Google Patents

프로세서 대기 상태를 인에이블하기 위한 명령 Download PDF

Info

Publication number
KR101410634B1
KR101410634B1 KR1020127018822A KR20127018822A KR101410634B1 KR 101410634 B1 KR101410634 B1 KR 101410634B1 KR 1020127018822 A KR1020127018822 A KR 1020127018822A KR 20127018822 A KR20127018822 A KR 20127018822A KR 101410634 B1 KR101410634 B1 KR 101410634B1
Authority
KR
South Korea
Prior art keywords
processor
core
low power
value
power state
Prior art date
Application number
KR1020127018822A
Other languages
English (en)
Other versions
KR20120110120A (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 KR20120110120A publication Critical patent/KR20120110120A/ko
Application granted granted Critical
Publication of KR101410634B1 publication Critical patent/KR101410634B1/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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30083Power or thermal control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3206Monitoring of events, devices or parameters that trigger a change in power modality
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3206Monitoring of events, devices or parameters that trigger a change in power modality
    • G06F1/3228Monitoring task completion, e.g. by use of idle timers, stop commands or wait commands
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/3293Power saving characterised by the action undertaken by switching to a less power-consuming processor, e.g. sub-CPU
    • 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
    • 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/3009Thread control instructions
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D30/00Reducing energy consumption in communication networks
    • Y02D30/50Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate

Abstract

일 실시예에서, 본 발명은 모니터될 로케이션의 식별 및 타이머 값을 규정하는 명령을 디코딩하기 위한 디코드 로직, 및 타이머 값과 관련해서 카운트를 실행하도록 디코드 로직에 연결된 타이머를 포함하는 코어를 가진 프로세서를 포함한다. 프로세서는 타이머 값에 적어도 부분적으로 기초하여 저 전력 상태의 타입을 결정하고, 결정에 응답해서 프로세서가 저 전력 상태로 들어가게 야기하기 위해 코어에 연결된 전력 관리 유닛을 더 포함할 수 있다. 다른 실시예들이 기술 및 청구된다.

Description

프로세서 대기 상태를 인에이블하기 위한 명령{INSTRUCTION FOR ENABLING A PROCESSOR WAIT STATE}
프로세서 기술들이 발달함에 따라, 프로세서들은 더 많은 양의 코어들을 이용할 수 있게 되고 있다. 소프트웨어를 효율적으로 실행하기 위해, 이 코어들은 싱글 애플리케이션의 상이한 쓰레드들을 실행하는 과업을 가질 수 있다. 이러한 구성은 협동 쓰레드 소프트웨어(cooperative threaded software)라고 한다. 현대의 협동 쓰레드 소프트웨어에서, 한 쓰레드가 다른 쓰레드가 완료되기를 기다리는 것은 흔하다. 종래에는, 대기중인 쓰레드가 실행중인 프로세서는 대기하면서 유효 전력을 소모한다. 또한 여전히, 대기 시간은 가늠이 잘 안될 수 있으며, 따라서, 프로세서는 얼마나 대기해야 하는지를 모를 수 있다.
코어가 대기할 수 있게 하는 다른 메커니즘은 코어를 저 전력 상태 등의 대기 상태로 놓는 것이다. 이러한 태스크를 구현하기 위해, 운영 체제(OS)가 호출된다. OS는 MONITOR 명령 및 MWAIT 명령이라고 하는 한 쌍의 명령들을 실행할 수 있다. 이러한 명령들은 애플리케이션 레벨 소프트웨어에는 유효하지 않음을 주지하라. 대신, 이러한 명령들은 모니터할 어드레스 범위를 셋업하기 위해 또한 모니터하는 어드레스 범위가 갱신될 때까지 프로세서가 저 전력 상태로 들어가게 하기 위해 단지 OS 특권 레벨에서만 사용된다. 그러나, 이러한 명령들을 실행하기 위해 OS로 들어가는 데에는 상당한 오버헤드가 있다. OS 스케줄링 문제들은 대기중인 쓰레드가 대기 상태를 빠져나올 때 다음 스케줄 쓰레드가 아닌 경우를 야기할 수도 있기 때문에, 이 오버헤드는 높은 지연의 형태이며, 또한 복잡성을 증가시킬 수 있다.
도 1은 본 발명의 일 실시예에 따른 한 방법의 흐름도이다.
도 2는 본 발명의 일 실시예에 따라 실행될 수 있는 목표 값에 대한 테스트의 흐름도이다.
도 3은 본 발명의 일 실시예에 따른 프로세서 코어의 블록도이다.
도 4는 본 발명의 일 실시예에 따른 프로세서의 블록도이다.
도 5는 본 발명의 다른 실시예에 따른 프로세서의 블록도이다.
도 6은 본 발명의 일 실시예에 따른 협동 쓰레드들 간의 상호 작용의 흐름도이다.
도 7은 본 발명의 일 실시예에 따른 한 시스템의 블록도이다.
각종 실시예들에서, 사용자-레벨 명령(즉, 애플리케이션-레벨 명령)이 제공되어 애플리케이션이 하나의 또는 그 이상의 조건들이 발생하기를 대기하게 하는데 사용될 수 있다. 애플리케이션이 대기중인 동안, 애플리케이션이 실행중인 프로세서(예를 들어, 멀티-코어 프로세서의 코어)는 저 전력 상태가 될 수 있으며, 또는 다른 쓰레드를 실행하도록 전환될 수 있다. 본 발명의 범위가 이와 관련하여 한정되지 않더라도, 프로세서가 대기할 수 있는 조건들은 값의 검출, 타이머의 타임아웃, 또는, 예를 들어, 다른 프로세서로부터의 인터럽트 신호의 수신을 포함할 수 있다.
이러한 방법으로, 애플리케이션은, 운영 체제(OS) 또는 다른 슈퍼바이저 소프트웨어에게 양보할 필요 없이, 예를 들어, 다른 쓰레드에서, 발생하는 하나의 또는 그 이상의 오퍼레이션들을 대기할 수 있다. 또한 여전히, 명령이 제공된 명령 정보에 기초하여, 프로세서가 들어갈 적합한 저 전력 상태를 선택할 수 있도록, 이 대기 상태는 시간에 얽매인 방식으로 발생할 수 있다. 즉, 프로세서 자체의 제어 로직이, 제공된 명령 정보 및 프로세서에서 실행된 각종 계산들에 기초하여, 들어갈 적합한 저 전력 상태를 결정할 수 있다. 그 결과, 저 전력 상태로 들어가기 위해 OS 개입을 초래하는 오버헤드는 방지될 수 있다. 프로세서가 다른 피어 프로세서를 대기할 필요는 없지만, 부동 소수점 코프로세서 또는 다른 고정 기능 장치 등의 코프로세서를 대기할 수 있음을 주지하라.
각종 실시예들에서, 사용자-레벨 명령은, 모니터할 로케이션, 찾는 값, 및 타임아웃 값을 포함하는, 그와 연관된 각종 정보를 가질 수 있다. 본 발명의 범위가 이와 관련하여 한정되지 않지만, 설명의 편의를 위해, 이 사용자-레벨 명령은 프로세서 대기 명령이라고 할 수 있다. 이러한 사용자-레벨 명령의 상이한 특징들(flavors)이 제공될 수 있으며, 각각, 예를 들어, 특정 값, 값들의 집합, 범위에 대한 대기, 또는 대기를 오퍼레이션과 연결하는 것, 예를 들어, 값이 참일 때 카운터를 증가시키는 것을 나타낼 수 있다.
일반적으로, 프로세서는, 이하의 명령 정보: 테스트할 값의 로케이션을 나타내는 소스 필드; (테스트할 값이 달성되지 않으면) 대기 상태가 종료되어야만 하는 지점을 나타내는 타임아웃 또는 데드라인 타이머 값; 및 획득할 값을 나타내는 결과 필드를 포함하거나 또는 그와 연관될 수 있는, 프로세서 대기 명령에 응답해서 각종 액션들이 발생하게 할 수 있다. 다른 애플리케이션들에서, 이런 필드들 외에, 소스 값이 마스킹되고 선정된 값(예를 들어, 마스크의 결과의 마스킹된 값이 제로가 아닌 지의 여부)에 대해 테스트되는 목적지 또는 마스크 필드가 한 구현에서 존재할 수 있다.
상술된 바와 같이, 프로세서는 이 명령에 응답해서 각종 오퍼레이션들을 실행할 수 있다. 일반적으로, 이 오퍼레이션들은: 모니터하는 로케이션의 값이 목표 값인지를 테스트하는 단계(예를 들어, "참" 조건인지를 테스트하기 위해 불 연산(Boolean operation)을 실행하는 단계); 및 데드라인 타이머 값에 도달했는지를 테스트하는 단계를 포함할 수 있다. 이러한 조건들 중 어느 조건이든 만족되면(예를 들어, 참이면) 또는 인터럽트가 다른 엔티티로부터 수신되면, 명령은 완료될 수 있다. 다른 경우, 값이 변하는지를 알기 위해 로케이션을 모니터하는 메커니즘이 개시될 수 있다. 따라서, 이 때에, 대기 상태로 들어갈 수 있다. 이 대기 상태에서, 프로세서는 저 전력 상태로 들어갈 수 있으며, 또는 다른 프로세서 하드웨어 쓰레드의 실행의 개시를 야기할 수 있다. 저 전력 상태가 요구되면, 프로세서는 데드라인 타이머에 도달될 때까지 남은 시간의 양에 적어도 부분적으로 기초하여 적합한 저 전력 상태를 선택할 수 있다. 그 후, 저 전력 상태가 될 수 있으며, 프로세서는 상술된 조건들 중 하나에 의해 깨워질 때까지 이 상태에 머물 수 있다. 이러한 일반적인 오퍼레이션으로 기술되지만, 상이한 구현들에서, 각종 특징들 및 오퍼레이션들이 상이하게 발생할 수 있음을 이해하라.
이제 도 1을 참조하면, 본 발명의 일 실시예에 따른 한 방법의 흐름도가 도시되어 있다. 도 1에 도시된 바와 같이, 방법(100)은 프로세서 대기 오퍼레이션을 처리하기 위한 사용자-레벨 명령을 실행하는 프로세서에 의해 구현될 수 있다. 도시된 바와 같이, 방법(100)은 수신된 명령을 디코딩함으로써 개시될 수 있다(단계 110). 일례로서, 명령은, 한 애플리케이션, 예를 들어, 협동 쓰레드 애플리케이션의 실행시에 약간의 상호 의존성을 가질 수 있는 명령들을 각각 포함하는 다수의 쓰레드들을 사용해서 구현된 애플리케이션에 의해 제공되는 사용자-레벨 명령일 수 있다. 명령을 디코딩한 후에, 프로세서는 캐시 및 레지스터에 메모리 값을 로딩할 수 있다(단계 120). 더 구체적으로 말해서, 명령의 소스 오퍼랜드는, 예를 들어, 메모리에서, 값이 획득될 로케이션을 식별할 수 있다. 이 값은, 캐시 메모리, 예를 들어, 개인 캐시 등의, 명령을 실행중인 코어와 연관된 로우 레벨 캐시에 로딩될 수 있다. 또한 여전히, 이 값은 코어의 레지스터에 저장될 수 있다. 일례로서, 이 레지스터는 쓰레드의 논리 프로세서의 범용 레지스터일 수 있다. 다음으로, 제어는 단계 130으로 넘어간다. 단계 130에서, 명령 정보에 응답해서 데드라인이 계산될 수 있다. 더 구체적으로 말해서, 이 데드라인은 조건이 만족되지 않은 경우(예를 들어, 희망 값이 갱신되지 않는 경우) 대기 상태가 발생해야만 하는 시간의 양일 수 있다. 일 실시예에서, 명령 포맷은 데드라인 타이머 값을 제공하는 정보를 포함할 수 있다. 이 데드라인에 도달할 때까지 적합한 시간을 결정하기 위해, 일부 구현들에서, 수신된 데드라인 타이머 값은 프로세서에 존재하는 현재 타임 카운터 값, 예를 들어, 타임스탬프 카운터(TSC) 값과 비교될 수 있다. 이 차이는, 일부 실시예들에서, 카운터 또는 레지스터를 사용해서 구현될 수 있는, 데드라인 타이머에 로딩될 수 있다. 이 데드라인 타이머는, 일 실시예에서, 카운트 다운을 시작하는 카운트다운 타이머일 수 있다. 본 구현에서, 데드라인은 현재 TSC 값으로부터 감산되고, 카운트다운 타이머는 해당 다수의 사이클들을 체크 표시(tick)한다. TSC 값이 데드라인을 초과할 때, 프로세서의 재개를 트리거한다. 즉, 후술되는 바와 같이, 데드라인 타이머가 0으로 감소될 때, 해당 시간에 여전히 진행중이면, 대기 상태는 종료될 수 있다. 레지스터 구현에서, 비교기는 매 사이클마다 TSC 카운터의 값을 데드라인과 비교할 수 있다.
따라서, 상기 오퍼레이션들은 대기 상태 중에 액세스 및 테스트될 각종 구조들을 적절히 셋업한다. 따라서, 대기 상태로 들어갈 수 있다. 이 대기 상태는 일반적으로 다수의 조건들 중 하나가 발생할 때까지 반복해서 실행될 수 있는 루프 155의 일부일 수 있다. 도시된 바와 같이, 명령 정보로부터의 목표 값이 레지스터에 저장된 값과 매칭하는 지의 여부가 결정될 수 있다(단계 140). 명령 정보가 목표 값을 포함하는 일 구현에서, 메모리로부터 획득되어 레지스터에 저장된 데이터는 그 값이 목표 값과 매칭하는지를 결정하기 위해 테스트될 수 있다. 그렇다면, 조건은 만족되었고, 제어는 단계 195로 넘어가서, 대기 명령의 실행이 완료될 수 있다. 이러한 명령의 완료는, 대기 상태를 빠져나오는 이유의 이하의 코드에 대한 표시를 인에이블하기 위해, 각종 플래그들 또는 다른 값들의 세팅을 추가로 야기할 수 있다. 명령이 완료되면, 대기 상태를 요청한 쓰레드의 오퍼레이션은 계속될 수 있다.
대신 단계 140에서 조건이 만족되지 않았다고 결정되면, 제어는 단계 150으로 넘어가서, 데드라인이 발생했는 지의 여부가 결정될 수 있다. 그렇다면, 명령은 상술된 바와 같이 완료될 수 있다. 다른 경우, 제어는 단계 160으로 넘어가서, 다른 하드웨어 컴포넌트가 프로세서를 깨우려고 하는 지의 여부가 결정될 수 있다. 그렇다면, 명령은 상술된 바와 같이 완료될 수 있다. 다른 경우, 제어는 단계 170으로 넘어가서, 저 전력 상태가 데드라인 타이머 값에 적어도 부분적으로 기초하여 결정될 수 있다. 즉, 프로세서는 데드라인이 발새하기 전에 남은 시간의 양에 기초하여 적합한 저 전력 상태를 OS 개입 없이 자체적으로 결정할 수 있다. 일부 실시예들에서, 이러한 결정을 실현하기 위해, 예를 들어, 프로세서의 언코어(uncore)의 로직이 사용될 수 있다. 후술되는 바와 같이, 이 로직은 각종 저 전력 상태들 및 데드라인 타이머 값들을 연관시키는 테이블을 포함하거나 또는 그와 연관될 수 있다. 단계 170의 결정에 기초하여, 프로세서는 저 전력 상태로 들어갈 수 있다(단계 180). 저 전력 상태에서, 프로세서의 각종 구조들, 명령들이 실행중인 코어뿐만 아니라 다른 컴포넌트들이 둘 다 저 전력 상태로 될 수 있다. 저 전력 상태 및 저 전력 상태의 레벨로 될 특정 구조들은 구현에 따라 변할 수 있다. 갱신된 값이 목표 값이 아니기 때문에 루프가 가로질러지면, 제한된 양의 시간만이 남는 경우 특정 저 전력 상태(예를 들어, 딥 슬립 상태(deep sleep state))로 들어가기에 적합하지 않을 수도 있기에, 새로운 저 전력 상태의 결정이 갱신된 데드라인 타이머 값에 기초하여 실행될 수 있음을 주지하라.
코어가 저 전력 상태에서 빠져나오게 하는 각종 이벤트들이 발생할 수 있다. 특히, 저 전력 상태는 캐시 데이터(즉, 모니터되는 로케이션에 대응함)가 갱신되었을 경우(단계 190) 실행될 수 있다. 그렇다면, 제어는 단계 140으로 넘어간다. 유사하게, 데드라인이 지나고/지나거나 웨이크 신호(a wake signal)가 다른 하드웨어 컴포넌트로부터 수신되면, 제어는 저 전력 상태로부터 단계들 150 및 160 중 하나로로 넘어갈 수 있다. 도 1의 실시예에서 이러한 하이 레벨 하드웨어로 도시되지만, 본 발명의 범위는 이와 관련하여 한정되지 않음을 이해하라.
다른 구현들에서, 목표 값에 대한 마스크-기반 테스트가 발생할 수 있다. 즉, 사용자-레벨 명령은 획득될 목표 값을 암시적으로 나타낼 수 있다. 일례로서, 이 목표 값은 메모리로부터 획득된 소스 값 및 명령의 소스/목적지 오퍼랜드에 존재하는 마스크 값 간의 마스크 오퍼레이션의 0이 아닌 값일 수 있다. 일 실시예에서, 사용자-레벨 명령은 프로세서 ISA의 제로 (LDMWZ) 명령이면 로드, 마스크, 대기일 수 있다. 일 실시예에서, 명령은 LDMWZ r32/64, M32/64의 포맷을 취할 수 있다. 이러한 포맷에서, 제1 오퍼랜드(r32/64)는 마스크를 저장할 수 있고, 제2 오퍼랜드(M32/64)는 소스 값(즉, 모니터되는 로케이션)을 식별할 수 있다. 차례로, 타임아웃 값이 제3 레지스터에 저장될 수 있다. 예를 들어, 데드라인은 암시적 레지스터들에 있을 수 있다. 특히, EDX:EAX 레지스터들이 사용될 수 있으며, 이는 TSC 카운터가 판독될 때 기록된 동일한 집합의 레지스터들이다. 일반적으로, 명령은 세마포어 값의 논-비지 폴링(non-busy polling)을 실행할 수 있으며, 세마포어가 유효하지 않으면 저 전력 대기 상태로 들어갈 수 있다. 상이한 구현들에서, 비트에 대한 세마포어들(bit-wise semaphores) 및 카운팅 세마포어들이 둘 다 처리될 수 있으며, 여기서, 0은 아무 것도 대기중이지 않음을 나타낸다. 타임아웃 값은, 무조건적으로 재개 동작 전에 논-제로 결과(non-zero result)에서 프로세서가 대기해야만 하는 TSC 사이클들에서 측정된, 시간의 양을 나타낼 수 있다. 일 실시예에서, 메모리 매핑 레지스터(예를 들어, 구성 및 상태 레지스터(CSR))를 통해 물리적인 프로세서들이 저 전력 상태에 있음에 대한 정보가 소프트웨어에 제공될 수 있다.
본 실시예에서, LDMWZ 명령은 소스 메모리 로케이션으로부터 데이터를 로딩하고, 그것은 소스/목적지 값으로 마스킹하며, 결과 값이 0인지를 알기 위해 테스트할 것이다. 마스킹된 값이 0이 아니면, 메모리로부터 로딩된 값은 마스킹되지 않은 소스/목적지 레지스터에 배치될 것이다. 그렇지 않으면, 프로세서는 저 전력 대기 상태로 들어갈 것이다. 이 저 전력 상태는 ACPI(Advanced Configuration and Power Interface) 규격 ver. 4(2009년 6월 16일)에 따른 소위 C-상태 등의 현재 정의된 저 전력 상태에 대응할 수도 또는 대응하지 않을 수도 있음을 주지하라. 지정된 시간 기간이 경과될 때까지, 외부 예외(예를 들어, 일반적인 인터럽트(INTR)), 마스킹될 수 없는 인터럽트(NMI), 또는 시스템 관리 인터럽트(SMI))가 시그널링될 때까지 또는 소스 메모리 로케이션이 마스킹될 때 0이 아닌 값으로 기록될 때까지, 프로세서는 저 전력 상태에 머물 수 있다. 이 대기 상태로 들어가는 일부로서, 프로세서는, 프로세서가 현재 대기중임을 나타내는 메모리 매핑 레지스터(CSR) 비트를 클리어할 수 있다.
마스킹될 때 0이 아닌 값을 생성하는 값으로 기록되는 모니터되는 로케이션으로 인해 대기 상태로부터 빠져나올 때, 플래그 레지스터의 제로 값 지시자는 클리어될 수 있으며, 판독된 마스킹되지 않은 값은 목적지 레지스터에 배치될 수 있다. 타이머 만료가 저 전력 상태로부터의 빠져나옴을 야기하면, 플래그 레지스터의 제로 값 지시자는 소프트웨어가 이러한 조건을 검출할 수 있도록 설정될 수 있다. 외부 예외로 인해 빠져나오게 되면, 프로세서 및 메모리의 상태는, 명령이 실행된 것으로 고려되지 않도록 하는 것일 수 있다. 따라서, 정상 실행 흐름으로 돌아갈 때, 동일한 LDMWZ 명령이 재실행될 것이다.
이제 도 2를 참조하면, 본 발명의 다른 실시예에 따라 실행될 수 있는 목표 값에 대한 테스트의 흐름도가 도시되어 있다. 도 2에 도시된 바와 같이, 방법(200)은 소스 데이터를 제1 레지스터에 로딩함으로써 개시될 수 있다(단계 210). 이 소스 데이터는 제2 레지스터에 존재하는 마스크로 마스킹될 수 있다(단계 220). 각종 실시예들에서, 제1 및 제2 레지스터들은 명령에 의해 규정될 수 있으며, 소스 데이터 및 목적지 데이터의 저장을 위한 로케이션에 각각 대응할 수 있다. 그 후, 마스크 오퍼레이션의 결과가 0인 지의 여부가 결정될 수 있다(단계 230). 그렇다면, 요구된 조건은 만족되지 않았고 프로세서는 저 전력 상태로 들어갈 수 있다(단계 240). 다른 경우, 소스 데이터는 제2 레지스터에 저장될 수 있으며(단계 250), 명령 실행이 완료될 수 있다(단계 260).
대기 상태 중에, 목표 로케이션은 단계 265에서 결정된 대로 갱신되며, 제어는 단계 220으로 다시 넘어가서, 마스크 오퍼레이션을 실행한다. 대기 상태 중에 다른 조건이 발생한 것으로 결정되면(단계 270에서 결정됨), 제어는 단계 260으로 넘어가서 명령이 완료된다. 도 2의 실시예에서 이러한 특정 구현으로 도시되지만, 본 발명의 범위는 이와 관련하여 한정되지 않는다.
이제 도 3을 참조하면, 본 발명의 일 실시예에 따른 프로세서 코어의 블록도가 도시되어 있다. 도 3에 도시된 바와 같이, 프로세서 코어(300)는 멀티-스테이지 파이프라인 무순위 프로세서일 수 있다. 프로세서 코어(300)는 본 발명의 일 실시예에 따라 프로세서 대기 상태들에 대해서 사용되는 각종 특징들을 설명하기 위해 도 3에서 비교적 간소화된 그림으로 도시된다.
도 3에 도시된 바와 같이, 코어(300)는 실행될 명령들을 페치하고 프로세서에서 차후에 사용되도록 준비시키는데 사용될 수 있는 프론트 엔드 유닛들(310)을 포함한다. 예를 들어, 프론트 엔드 유닛들(310)은 페치 유닛(301), 명령 캐시(303), 및 명령 디코더(305)를 포함할 수 있다. 일부 구현들에서, 프론트 엔드 유닛들(310)은, 마이크로-오퍼레이션 스토리지 뿐만 아니라 마이크로코드 스토리지와 함께, 트레이스 캐시(trace cache)를 더 포함할 수 있다. 페치 유닛(301)은, 예를 들어, 메모리 또는 명령 캐시(303)로부터 매크로-명령들을 페치하여, 이들을 프리미티브들, 즉, 프로세서에 의해 실행될 마이크로-오퍼레이션들로 디코딩하기 위해 명령 디코더(305)에 전송할 수 있다. 프론트 엔드 유닛들(310)에서 처리될 이러한 명령은 본 발명의 일 실시예에 따른 사용자-레벨 프로세서 대기 명령일 수 있다. 이 명령은 프론트 엔드 유닛들이 대기 명령과 연관된 상술된 바와 같은 오퍼레이션들의 실행을 인에이블하기 위해 각종 마이크로-오퍼레이션들에 액세스할 수 있게 할 수 있다.
마이크로-명령들을 수신하고, 실행을 위해 이들을 준비시키는데 사용될 수 있는 OOO(out-of-order) 엔진(315)이 프론트 엔드 유닛들(310) 및 실행 유닛들(320) 사이에 연결된다. 더 구체적으로 말해서, OOO 엔진(315)은 레지스터 파일(330) 및 확장 레지스터 파일(335) 등의 각종 레지스터 파일들 내의 스토리지 로케이션들에 논리 레지스터들의 개명을 제공할 뿐만 아니라, 마이크로-명령 흐름을 재정렬하고 실행에 필요한 각종 리소스들을 할당하기 위해 각종 버퍼들을 포함할 수 있다. 레지스터 파일(330)은 정수 및 부동 소수점 연산들을 위한 별개의 레지스터 파일들을 포함할 수 있다. 확장 레지스터 파일(335)은 벡터 사이즈 유닛들, 예를 들어, 레지스터 당 256 또는 512 비트들을 위한 스토리지를 제공할 수 있다.
각종 리소스들은, 다른 특별 하드웨어 중에, 예를 들어, 각종 정수, 부동 소수점, 및 SIMD(single instruction multiple data) 로직 유닛들을 포함하는, 실행 유닛들(320)에 존재할 수 있다. 예를 들어, 이 실행 유닛들은 하나의 또는 그 이상의 산술 논리 장치들(ALUs)(322)을 포함할 수 있다. 또한, 본 발명의 일 실시예에 따른 웨이크업 로직(324)이 존재할 수 있다. 이러한 웨이크업 로직은 사용자-레벨 명령에 응답해서 프로세서 대기 모드를 실행하는데 수반되는 특정 오퍼레이션들을 실행하는데 사용될 수 있다. 더 후술되는 바와 같이, 이러한 대기 상태들을 처리하기 위한 추가 로직이 언코어 등의 프로세서의 다른 부분에 존재할 수 있다. 또한, 한 집합의 타이머들(326)이 도 3에 도시되어 있다. 본 명세서에서 분석을 위한 관련 타이머들은, 다른 어떠한 조건도 만족되지 않으면 프로세서가 대기 상태를 떠나기 전에 데드라인에 대응하는 값으로 설정될 수 있는 데드라인 타이머뿐만 아니라, TSC 타이머를 포함한다. 웨이크업 로직(324)은 데드라인 타이머가 선정된 카운트 값(일부 실시예들에서는, 0으로 카운트 다운될 수 있음)에 도달할 때 특정 오퍼레이션들을 활성화할 수 있다. 결과들은 은퇴 로직(retirement logic), 즉, 리오더 버퍼(ROB; reorder buffer)(340)에 제공될 수 있다. 더 구체적으로 말해서, ROB(340)는 실행되는 명령들과 연관된 정보를 수신하기 위해 각종 어레이들 및 로직을 포함할 수 있다. 이 정보는 후에 명령들이 유효하게 은퇴할 수 있으며, 결과 데이터가 프로세서의 아키텍처 상태로 커미트(commit)될 수 있는지를, 또는 명령들의 적합한 은퇴를 방지하는 하나의 또는 그 이상의 예외들이 발생했는지를 결정하기 위해 ROB(340)에 의해 조사된다. 물론, ROB(340)는 은퇴와 연관된 다른 오퍼레이션들을 처리할 수 있다. 본 발명의 일 실시예에 따른 프로세서 대기 명령의 문맥에서, 은퇴는, 프로세서가 대기 상태를 빠져나온 이유를 나타낼 수 있는, 플래그 레지스터 또는 다른 상태 레지스터들의 하나의 또는 그 이상의 지시자들의 상태를 ROB(340)가 설정하게 할 수 있다.
도 3에 도시된 바와 같이, ROB(340)는, 일 실시예에서, 로우 레벨 캐시(예를 들어, L1 캐시)일 수 있는 캐시(350)에 연결되지만, 본 발명의 범위는 이와 관련하여 한정되지 않는다. 또한, 실행 유닛들(320)은 캐시(350)에 직접 연결될 수 있다. 도시된 바와 같이, 캐시(350)는, 특정 캐시 라인, 즉, 모니터되는 로케이션을 모니터하고, 또한, 값이 갱신될 때, 라인의 캐시 코히런시 상태의 변경이 발생할 때, 및/또는 라인이 손실될 때, 웨이크업 로직(324)(및/또는 언코어 컴포넌트들)에 피드백을 제공하도록 구성될 수 있는 모니터 엔진(352)을 포함한다. 모니터 엔진(352)은 제공된 라인을 획득하며 공유 상태로 유지한다. 공유 상태로부터 라인의 손실이 생기면 언제나 프로세서의 웨이크 업을 개시할 것이다. 캐시(350)로부터, 더 높은 레벨의 캐시들, 시스템 메모리 등과의 데이터 통신이 발생할 수 있다. 도 3의 실시예에서 이러한 하이 레벨로 도시되지만, 본 발명의 범위는 이와 관련하여 한정되지 않음을 이해하라.
이제 도 4를 참조하면, 본 발명의 일 실시예에 따른 프로세서의 블록도가 도시되어 있다. 도 4에 도시된 바와 같이, 프로세서(400)는 복수의 코어들(410a-410n)을 포함하는 멀티코어 프로세서일 수 있다. 일 실시예에서, 각각의 코어는 도 3에 대해서 상술된 코어(300)로서 구성될 수 있다. 각종 코어들은 각종 컴포넌트들을 포함하는 언코어(420)에 인터커넥트(415)를 통해 연결될 수 있다. 도시된 바와 같이, 언코어(420)는 최종 레벨 캐시일 수 있는 공유 캐시(430)를 포함할 수 있다. 또한, 언코어는 통합 메모리 컨트롤러(440), 각종 인터페이스들(450) 및 전력 관리 유닛(455)을 포함할 수 있다. 각종 실시예들에서, 프로세서 대기 명령의 실행과 연관된 기능의 적어도 일부는 전력 관리 유닛(455)에서 구현될 수 있다. 예를 들어, 명령과 함께 수신된 정보, 예를 들어, 데드라인 타이머 값에 기초하여, 전력 관리 유닛(455)은 대기 명령을 실행중인 소정의 코어가 배치될 적합한 저 전력 상태를 결정할 수 있다. 일 실시예에서, 전력 관리 유닛(455)은 타이머 값들을 저 전력 상태와 연관시키는 테이블을 포함할 수 있다. 유닛(455)은 명령과 연관된 결정된 데드라인 값에 기초하여 이 테이블을 검색할 수 있으며, 대응 대기 상태를 선택할 수 있다. 차례로, 전력 관리 유닛(455)은, 각종 컴포넌트들, 소정의 코어뿐만 아니라 다른 프로세서 유닛들이 둘 다 저 전력 상태로 되게 야기하는 복수의 제어 신호들을 생성할 수 있다. 도시된 바와 같이, 프로세서(400)는, 예를 들어, 메모리 버스를 통해, 시스템 메모리(460)와 통신할 수 있다. 또한, 인터페이스들(450)에 의해, 주변 장치들, 대용량 스토리지 등의 각종 오프-칩 컴포넌트들에 대한 연결이 이루어질 수 있다. 도 4의 실시예에서 이 특정 구현으로 도시되지만, 본 발명의 범위는 이와 관련하여 한정되지 않는다.
다른 실시예들에서, 프로세서 아키텍처는 프로세서가 소스 ISA라고 불리는 제1 ISA의 명령들을 실행할 수 있도록 에뮬레이션 특징들을 포함할 수 있는데, 여기서, 아키텍처는 목표 ISA라고 불리는 제2 ISA에 따른다. 일반적으로, OS 및 애플리케이션 프로그램들을 둘 다 포함하는 소프트웨어는 소스 ISA에 컴파일링되며, 하드웨어는 특별 성능 및/또는 에너지 효율 특징들을 가진 소정의 하드웨어 구현에 대해 특별히 설계된 목표 ISA를 구현한다.
이제 도 5를 참조하면, 본 발명의 다른 실시예에 따른 프로세서의 블록도가 도시되어 있다. 도 5에 도시된 바와 같이, 시스템(500)은 프로세서(510) 및 메모리(520)를 포함한다. 메모리(520)는 시스템 및 애플리케이션 소프트웨어를 둘 다 유지하는 종래의 메모리(522), 및 목표 ISA에 대해 계측된 소프트웨어를 유지하는 숨겨진 메모리(524)를 포함한다. 도시된 바와 같이, 프로세서(510)는 소스 코드를 목표 코드로 변환하는 에뮬레이션 엔진(530)을 포함한다. 에뮬레이션은 해석(interpretation) 또는 바이너리 변환(binary translation)에 의해 실행될 수 있다. 해석은 코드를 처음 마주칠 때 코드에 대해 종종 사용된다. 다음으로, 종종 실행되는 코드 영역들(예를 들어, 핫스팟들)이 동적 프로파일링을 통해 발견되기 때문에, 이들은 목표 ISA로 변환되어 숨겨진 메모리(524)의 코드 캐시에 저장된다. 최적화는 변환 프로세스의 일부로서 실행되며, 매우 많이 사용되는 코드는 차후에 더 최적화될 수도 있다. 코드의 변환된 블록들은 코드 캐시(524)에서 유지되어서, 반복해서 재사용될 수 있다.
여전히 도 5를 참조하면, 멀티-코어 프로세서의 한 코어일 수 있는 프로세서(510)는 명령 캐시(I-캐시)(550)에 명령 포인터 어드레스들을 제공하는 프로그램 카운터(540)를 포함한다. 도시된 바와 같이, I-캐시(550)는 소정의 명령 어드레스로의 손실에서(on a miss) 숨겨진 메모리 부분(524)으로부터 직접 목표 ISA 명령들을 더 수신할 수 있다. 따라서, I-캐시(550)는 매크로-명령 레벨일 수 있는 입력 명령들을 수신해서 프로세서 파이프라인(570) 내에서 실행되도록 마이크로-명령들로 명령들을 변환하기 위한 목표 ISA의 디코더일 수 있는 디코더(560)에 제공될 수 있는 목표 ISA 명령들을 저장할 수 있다. 본 발명의 범위가 이와 관련하여 한정되지 않지만, 파이프라인(570)은 명령들을 실행 및 은퇴시키는 각종 스테이지들을 포함하는 무순위 파이프라인일 수 있다. 상술된 각종 실행 유닛들, 타이머들, 카운터들, 스토리지 로케이션들 및 모니터들은 본 발명의 일 실시예에 따라 프로세서 대기 명령을 실행하기 위해 파이프라인(570) 내에 존재할 수 있다. 즉, 프로세서(510)가 사용자-레벨 프로세서 대기 명령이 제공되는 마이크로-아키텍처가 아닌 상이한 마이크로-아키텍처인 구현에서도, 명령은 기본 하드웨어에서 실행될 수 있다.
이제 도 6을 참조하면, 본 발명의 일 실시예에 따른 협동 쓰레드들 간의 상호 작용의 흐름도가 도시되어 있다. 도 6에 도시된 바와 같이, 방법(600)은, 예를 들어, 멀티-쓰레드 프로세서에서, 다수의 쓰레드들을 실행하는데 사용될 수 있다. 도 6의 문맥에서, 2개의 쓰레드들, 쓰레드 1 및 쓰레드 2는 싱글 애플리케이션이고, 상호 의존적일 수 있어서, 한 쓰레드에 의해 사용되는 데이터는 먼저 제2 쓰레드에 의해 갱신되어야만 한다. 따라서, 도시된 바와 같이, 쓰레드 1은 실행 중에 프로세서 대기 명령을 수신할 수 있다(단계 610). 이 대기 명령의 실행 중에, 테스트 조건이 만족되었는 지의 여부가 결정될 수 있다(단계 620). 만족되지 않았으면, 쓰레드는 저 전력 상태로 들어갈 수 있다(단계 630). 도 6에 도시되지는 않았지만, 이 상태는 각종 조건들 중 하나가 발생할 때 빠져나와질 수 있음을 이해하라. 대신, 테스트 조건이 만족되었다고 결정되면, 제어는 단계 640으로 넘어가서, 제1 쓰레드에서 계속해서 코드 실행이 발생할 수 있다. 테스트 조건이 제2 쓰레드에 의해 갱신이 성공적으로 완료되었을 때를 나타내도록 모니터되는 로케이션에 대한 것일 수 있음을 주지하라. 따라서, 쓰레드 2에 대해서 도시된 코드의 실행 전에, 테스트 조건은 만족되지 않고, 프로세서는 저 전력 상태로 들어간다.
여전히 도 6을 참조하면, 쓰레드 2에 대해서, 제1 쓰레드와 상호 의존적인 코드를 실행할 수 있다(단계 650). 예를 들어, 제2 쓰레드는 제1 쓰레드의 실행 중에 사용될 수 있는 하나의 또는 그 이상의 값들을 갱신하기 위한 코드를 실행할 수 있다. 제1 쓰레드가 갱신된 값들을 사용해서 실행함을 보장하기 위해, 데이터가 제2 쓰레드에 의해 갱신될 때까지 제1 쓰레드가 저 전력 상태로 들어가도록 애플리케이션이 기록될 수 있다. 따라서, 제2 쓰레드의 실행 중에, 상호 의존적인 코드의 실행이 완료되었는 지의 여부가 결정될 수 있다(단계 660). 완료되지 않았으면, 상호 의존적인 코드가 계속해서 실행될 수 있다. 대신, 이 상호 의존적인 코드 섹션이 완료되었으면, 제어는 단계 670으로 넘어가서, 선정된 값이 모니터되는 로케이션에 기록될 수 있다(단계 670). 예를 들어, 이 선정된 값은 프로세서 대기 명령과 연관된 테스트 값에 대응할 수 있다. 다른 실시예들에서, 선정된 값은, 마스킹될 때 또는 모니터되는 로케이션에서 한 값을 가진 마스크로서 사용될 때, 결과가 0이 아닌 값일 수 있으며, 이는 테스트 조건이 만족되었음을 나타내고 제1 쓰레드는 계속해서 실행될 수 있다. 여전히 쓰레드 2를 참조하면, 이 선정된 값을 기록한 후에, 제2 쓰레드의 코드 실행이 계속될 수 있다(단계 680). 도 6의 실시예에서 이 특정 구현으로 도시되지만, 본 발명의 범위는 이와 관련하여 한정되지 않음을 이해하라.
따라서, 실시예들은, OS 개입을 필요로 하지 않으면서, 하나의 또는 그 이상의 선정된 조건들이 발생하기를 대기하는 것을 프로세서가 정지할 수 있게 하는 경량 기능정지 메커니즘(a light-weight stalling mechanism)을 인에이블한다. 이러한 방법으로, 프로세서가 전력을 소모하게 하는, 테스트, 중단, 및 점프 오퍼레이션들을 포함하는 루프에서 세마포어/값이 참이 되게 하는 애플리케이션 폴을 가질 필요가 없으며, 하이퍼쓰레딩 머신(a hyperthreaded machine)에서 다른 쓰레드들이 이러한 사이클들을 사용하는 것을 방지한다. 오버헤드에서 및 스케줄링 제약들(대기중인 애플리케이션은 다음 쓰레드로 스케줄링 되지 못할 수 있음)에서, OS 모니터링은, 따라서, 방지될 수 있다. 따라서, 경량 통신이 협동 쓰레드들 사이에서 발생할 수 있으며, 또한, 프로세서는 사용자가 지시한 시간 파라미터들에 기초하여 슬립 상태(a sleep state)를 유연하게 선택할 수 있다.
실시예들은 다수의 상이한 시스템 타입들로 구현될 수 있다. 이제 도 7을 참조하면, 본 발명의 일 실시예에 따른 한 시스템의 블록도가 도시되어 있다. 도 7에 도시된 바와 같이, 멀티프로세서 시스템(700)은 점대점(point-to-point) 인터커넥트 시스템이고, 점대점 인터커넥트(750)를 통해 연결된 제1 프로세서(770) 및 제2 프로세서(780)를 포함한다. 도 7에 도시된 바와 같이, 잠정적으로 다수의 더 많은 코어들이 프로세서들에 존재할 수 있더라도, 프로세서들(770, 780) 각각은, 제1 및 제2 프로세서 코어들(즉, 프로세서 코어들(774a 및 774b) 및 프로세서 코어들(784a 및 784b))을 포함하는 멀티코어 프로세서들일 수 있다. 프로세서 코어들은 사용자-레벨 프로세서 대기 명령을 포함하는 각종 명령들을 실행할 수 있다.
여전히 도 7을 참조하면, 제1 프로세서(770)는 메모리 컨트롤러 허브(MCH)(772) 및 점대점(P-P) 인터페이스들(776, 778)을 더 포함한다. 유사하게, 제2 프로세서(780)는 MCH(782) 및 P-P 인터페이스들(786, 788)을 포함한다. 도 7에 도시된 바와 같이, MCH들(772, 782)은 프로세서들을 각각의 메모리들, 즉, 메모리(732) 및 메모리(734)에 연결하는데, 상기 메모리들은 각각의 프로세서들에 국부적으로 부착된 메인 메모리(예를 들어, 동적 랜덤 액세스 메모리(DRAM))의 일부분들일 수 있다. 제1 프로세서(770) 및 제2 프로세서(780)는, 각각, P-P 인터커넥트들(752, 754)을 통해 칩셋(790)에 연결될 수 있다. 도 7에 도시된 바와 같이, 칩셋(790)은 P-P 인터페이스들(794, 798)을 포함한다.
또한, 칩셋(790)은 P-P 인터커넥트(739)에 의해 고성능 그래픽 엔진(738)과 칩셋(790)을 연결시키는 인터페이스(792)를 포함한다. 차례로, 칩셋(790)은 인터페이스(796)를 통해 제1 버스(716)에 연결될 수 있다. 도 7에 도시된 바와 같이, 각종 입력/출력(I/O) 장치들(714)은, 제1 버스(716)를 제2 버스(720)에 연결하는 버스 브릿지(718)와 함께, 제1 버스(716)에 연결될 수 있다. 예를 들어, 일 실시예에서, 키보드/마우스(722), 통신 장치들(726), 및 코드(730)를 포함할 수 있는 디스크 드라이브 또는 다른 대용량 스토리지 장치 등의 데이터 스토리지 유닛(728)을 포함하는 각종 장치들은 제2 버스(720)에 연결될 수 있다. 또한, 오디오 I/O(724)가 제2 버스(720)에 연결될 수 있다.
실시예들은 코드로 구현될 수 있으며, 명령들을 실행하도록 시스템을 프로그래밍하는데 사용될 수 있는 명령들이 저장되어 있는 기억 매체에 저장될 수 있다. 기억 매체는, 플로피 디스크들, 광 디스크들, 광 디스크들, SSD들(solid state drives), CD-ROM들(compact disk read-only memories), CD-RW들(compact disk rewritables), 및 광자기 디스크들을 포함하는 임의의 타입의 디스크, ROM들(read-only memories), DRAM들(dynamic random access memories), SRAM들(static random access memories) 등의 RAM들(random access memories), EPROM들(erasable programmable read-only memories), 플래시 메모리들, EEPROM들(electrically erasable programmable read-only memories), 자기 또는 광 카드들 등의 반도체 장치들, 또는 전자 명령들을 저장하기에 적합한 임의의 다른 타입의 매체를 포함할 수 있지만, 이들로 한정되지 않는다.
본 발명이 제한된 수의 실시예들에 대해서 기술되었지만, 당업자는 다수의 변경들 및 변형들을 알 것이다. 첨부된 청구항들은 본 발명의 정확한 원리 및 범위 내에 속한 모든 변경들 및 변형들을 포함한다고 의도된다.

Claims (24)

  1. 프로세서로서,
    제1 애플리케이션으로부터 명령을 수신하고 디코딩하기 위한 디코드 로직 - 상기 명령은 모니터될 로케이션의 식별 및 타이머 값을 규정함 -, 및 상기 타이머 값에 대해서 카운트를 수행하도록 상기 디코드 로직에 연결된 타이머를 포함하는 코어; 및
    상기 코어에 연결되어, 운영 체제(OS)의 개입 없이, 상기 타이머 값에 적어도 부분적으로 기초하여 상기 프로세서에 대한 저 전력 상태의 타입을 결정하고, 모니터된 로케이션의 값이 목표 값과 동일하지 않고 상기 타이머 값이 넘어서지 않았는지에 대한 결정에 응답해서 상기 프로세서가 상기 저 전력 상태로 들어가도록 하는 전력 관리 유닛
    을 포함하는 프로세서.
  2. 제1항에 있어서,
    캐시 메모리에 연결되어, 상기 모니터된 로케이션의 복사본을 포함하는 상기 캐시 메모리의 라인이 갱신되는지를 결정하는 모니터 엔진을 더 포함하는 프로세서.
  3. 제2항에 있어서,
    상기 모니터 엔진은 갱신된 복사본 및 웨이크 업 신호(a wake up signal)를 상기 코어에 통신하는 프로세서.
  4. 제3항에 있어서,
    상기 코어는, 상기 갱신된 복사본이 상기 목표 값에 대응하는지를 결정하고, 만약 그렇다면, 상기 저 전력 상태를 빠져나오며, 그렇지 않으면, 새로운 저 전력 상태를 결정하여 상기 새로운 저 전력 상태로 들어가는 프로세서.
  5. 제1항에 있어서,
    상기 명령은, 상기 프로세서로 하여금 제1 값을 로딩하고, 상기 제1 값과 목적지 로케이션에 저장된 데이터 사이의 마스크 오퍼레이션을 수행하며, 상기 마스크 오퍼레이션의 결과가 제1 결과이면 상기 저 전력 상태로 들어가고, 그렇지 않으면 상기 프로세서가 상기 제1 값을 상기 목적지 로케이션에 로딩하게 하는 사용자-레벨 명령인 프로세서.
  6. 제5항에 있어서,
    상기 결과가 수치 0이면, 상기 프로세서는 플래그 레지스터의 제로 지시자를 설정하는 프로세서.
  7. 제1항에 있어서,
    상기 타이머는 타임 스탬프 카운터 값과 상기 타이머 값 사이의 차이에 대응하는 값으로 설정되는 프로세서.
  8. 제1항에 있어서,
    상기 프로세서는 멀티코어 프로세서를 포함하고, 상기 멀티코어 프로세서는 상기 코어 및 제2 코어를 포함하고, 상기 명령은 상기 코어에서 실행할 제1 쓰레드이고 제2 쓰레드는 상기 모니터된 로케이션을 갱신하는 프로세서.
  9. 제8항에 있어서,
    상기 코어는 상기 모니터된 로케이션의 갱신에 응답해서 상기 저 전력 상태를 빠져나오는 프로세서.
  10. 제9항에 있어서,
    상기 코어는 그 이후에 상기 제2 쓰레드에 의해 갱신된 데이터를 사용해서 상기 제1 쓰레드의 적어도 하나의 오퍼레이션을 실행하는 프로세서.
  11. 프로세서에서 제1 애플리케이션으로부터의 명령을 수신하고 디코딩하는 단계 - 상기 명령은 모니터될 로케이션의 식별 및 타이머 값을 규정함 - ;
    상기 명령에 응답해서, 상기 타이머 값에 적어도 부분적으로 기초하여 상기 프로세서에 대한 저 전력 상태의 타입을 상기 프로세서에서 결정하는 단계; 및
    모니터된 로케이션의 값이 목표 값과 동일하지 않고 상기 타이머 값이 넘어서지 않았는지의 결정에 응답해서 상기 프로세서에 대한 저 전력 상태로 들어가는 단계
    를 포함하는, 프로세서 대기 상태를 인에이블하는 방법.
  12. 제11항에 있어서,
    상기 명령은 상기 모니터된 로케이션에 대한 목표 값을 더 규정하는, 프로세서 대기 상태를 인에이블하는 방법.
  13. 제11항에 있어서,
    상기 타이머 값의 넘어감(passing)에 응답해서 상기 저 전력 상태를 빠져나오는 단계를 더 포함하는, 프로세서 대기 상태를 인에이블하는 방법.
  14. 제11항에 있어서,
    상기 프로세서의 캐시 메모리의 모니터 엔진으로부터 웨이크 업 신호를 수신하는 단계를 포함해서, 상기 모니터된 로케이션의 값이 상기 목표 값과 동일할 때 상기 저 전력 상태를 빠져나오는 단계를 더 포함하고, 상기 모니터된 로케이션의 복사본을 포함하는 캐시 라인의 저장된 값이 변했을 때, 상기 모니터 엔진은 웨이크 업 신호를 송신하는, 프로세서 대기 상태를 인에이블하는 방법.
  15. 제11항에 있어서,
    상기 프로세서에 대한 저 전력 상태의 타입을 상기 프로세서에서 결정하는 단계는, 상기 프로세서의 전력 관리 유닛(PMU)을 사용해서 저 전력 상태를 타이머 값과 각각 연관시키는 복수의 엔트리들을 가진 테이블의 정보에 기초하여 복수의 저 전력 상태들로부터 저 전력 상태의 타입을 선택하는 단계를 더 포함하고,
    상기 방법은,
    상기 프로세서에 대한 저 전력 상태로 들어가는 단계 이전에, 상기 프로세서의 코어가 상기 저 전력 상태로 들어가게 하기 위해 상기 코어에 상기 PMU로부터의 적어도 하나의 제어 신호를 송신하는 단계를 더 포함하는, 프로세서 대기 상태를 인에이블하는 방법.
  16. 제11항에 있어서,
    상기 프로세서에 연결된 제2 프로세서로부터 웨이크 업 신호를 수신하고 상기 웨이크 업 신호에 응답해서 상기 저 전력 상태를 빠져나오는 단계를 더 포함하는, 프로세서 대기 상태를 인에이블하는 방법.
  17. 제1 코어 및 제2 코어를 포함하는 멀티코어 프로세서; 및
    상기 멀티코어 프로세서에 연결된 동적 랜덤 액세스 메모리(DRAM)
    를 포함하고,
    상기 제1 코어는 대기 상태가 발생하게 하는 사용자-레벨 명령을 디코딩하기 위한 디코드 로직 - 상기 사용자-레벨 명령은 모니터될 로케이션 및 타이머 값을 규정함 - , 및 상기 디코드 로직에 연결되어 상기 타이머 값에 대해서 카운트를 수행하는 타이머를 포함하고, 상기 멀티코어 프로세서는 상기 제1 및 제2 코어들에 연결되어, 운영 체제(OS)의 개입 없이 상기 타이머 값에 적어도 부분적으로 기초하여 복수의 저 전력 상태들 중 하나를 선택하고, 모니터된 로케이션의 값이 목표 값과 동일하지 않으면 상기 선택에 응답해서 상기 제1 코어가 상기 선택된 저 전력 상태로 들어가게 하는 전력 관리 로직을 더 포함하는, 프로세서 대기 상태를 인에이블하는 시스템.
  18. 제17항에 있어서,
    상기 제1 코어는 상기 사용자-레벨 명령에 응답해서 제1 오퍼랜드 및 제2 오퍼랜드 사이의 마스크 오퍼레이션을 수행하고, 상기 마스크 오퍼레이션의 결과가 상기 목표 값이 아니면 상기 선택된 저 전력 상태로 들어가는, 프로세서 대기 상태를 인에이블하는 시스템.
  19. 제18항에 있어서,
    상기 제1 코어에 연결된 모니터 로직을 더 포함하고, 상기 모니터 로직은 상기 모니터된 로케이션에 대한 갱신에 응답해서 상기 제1 코어가 상기 저 전력 상태를 빠져나오게 하는, 프로세서 대기 상태를 인에이블하는 시스템.
  20. 제19항에 있어서,
    상기 모니터된 로케이션과 연관된 캐시 라인이 갱신되었을 때 또는 상기 캐시 라인의 코히런시 상태가 갱신되었을 때, 상기 모니터 로직은 상기 제1 코어에 웨이크 업 신호를 송신하는, 프로세서 대기 상태를 인에이블하는 시스템.
  21. 명령들을 포함하는 머신 액세스 가능 기억 매체로서,
    상기 명령들은 실행될 때 시스템으로 하여금,
    제1 쓰레드의 실행 중에 멀티코어 프로세서의 제1 코어에서, 모니터될 로케이션 및 타이머 값을 규정하는 사용자-레벨 프로세서 대기 명령을 수신하고;
    상기 사용자-레벨 프로세서 대기 명령의 조건이 만족되었는지를 상기 제1 코어에서 결정하며, 상기 멀티코어 프로세서의 전력 관리 로직에 의해 선택된 저 전력 상태로 들어가지 않으면;
    상기 멀티코어 프로세서의 제2 코어에서의 제2 쓰레드의 실행 중에 값을 갱신하고;
    상기 값 갱신에 응답해서, 상기 제1 코어의 저 전력 상태를 빠져나와 상기 조건이 만족되었는지를 결정하며;
    만족되었다면, 상기 제1 코어에서 상기 제1 쓰레드의 실행을 계속하게 하는,
    머신 액세스 가능 기억 매체.
  22. 제21항에 있어서,
    상기 시스템으로 하여금, 상기 제1 코어가 상기 모니터된 로케이션에 대한 갱신에 응답해서 상기 저 전력 상태를 빠져나오고 상기 값 갱신을 사용해서 상기 조건을 테스트하게 할 수 있는 명령들을 더 포함하는, 머신 액세스 가능 기억 매체.
  23. 제22항에 있어서,
    상기 시스템으로 하여금, 상기 모니터된 로케이션과 연관된 캐시 라인이 갱신되었을 때 또는 상기 캐시 라인의 코히런시 상태가 갱신되었을 때, 상기 모니터된 로케이션에 대한 갱신을 결정하고, 상기 모니터된 로케이션에 대한 갱신에 응답해서 상기 제1 코어가 상기 저 전력 상태를 빠져나오게 할 수 있는 명령들을 더 포함하는, 머신 액세스 가능 기억 매체.
  24. 제21항에 있어서,
    상기 시스템으로 하여금, 상기 전력 관리 로직을 사용해서, 저 전력 상태를 타이머 값과 각각 연관시키는 복수의 엔트리들을 가진 테이블의 정보에 기초하여 복수의 저 전력 상태들로부터 상기 저 전력 상태를 선택하고, 상기 제1 코어가 상기 저 전력 상태로 들어가게 하기 위해 적어도 하나의 제어 신호를 송신하게 할 수 있는 명령들을 더 포함하는, 머신 액세스 가능 기억 매체.
KR1020127018822A 2009-12-18 2010-11-11 프로세서 대기 상태를 인에이블하기 위한 명령 KR101410634B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/641,534 2009-12-18
US12/641,534 US8464035B2 (en) 2009-12-18 2009-12-18 Instruction for enabling a processor wait state
PCT/US2010/056320 WO2011075246A2 (en) 2009-12-18 2010-11-11 Instruction for enabling a processor wait state

Publications (2)

Publication Number Publication Date
KR20120110120A KR20120110120A (ko) 2012-10-09
KR101410634B1 true KR101410634B1 (ko) 2014-06-20

Family

ID=44152840

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020127018822A KR101410634B1 (ko) 2009-12-18 2010-11-11 프로세서 대기 상태를 인에이블하기 위한 명령

Country Status (8)

Country Link
US (3) US8464035B2 (ko)
JP (2) JP5571784B2 (ko)
KR (1) KR101410634B1 (ko)
CN (1) CN102103484B (ko)
DE (1) DE102010052680A1 (ko)
GB (1) GB2483012B (ko)
TW (1) TWI512448B (ko)
WO (1) WO2011075246A2 (ko)

Families Citing this family (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10621092B2 (en) 2008-11-24 2020-04-14 Intel Corporation Merging level cache and data cache units having indicator bits related to speculative execution
US9672019B2 (en) 2008-11-24 2017-06-06 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
US8464035B2 (en) * 2009-12-18 2013-06-11 Intel Corporation Instruction for enabling a processor wait state
US8775153B2 (en) * 2009-12-23 2014-07-08 Intel Corporation Transitioning from source instruction set architecture (ISA) code to translated code in a partial emulation environment
US8977878B2 (en) * 2011-05-19 2015-03-10 Texas Instruments Incorporated Reducing current leakage in L1 program memory
US9207730B2 (en) * 2011-06-02 2015-12-08 Apple Inc. Multi-level thermal management in an electronic device
US9417855B2 (en) 2011-09-30 2016-08-16 Intel Corporation Instruction and logic to perform dynamic binary translation
US9063760B2 (en) * 2011-10-13 2015-06-23 International Business Machines Corporation Employing native routines instead of emulated routines in an application being emulated
WO2013089685A1 (en) 2011-12-13 2013-06-20 Intel Corporation Enhanced system sleep state support in servers using non-volatile random access memory
CN110471699B (zh) * 2011-12-23 2023-07-28 英特尔公司 用于指令处理的处理器核、方法和系统
WO2013101165A1 (en) * 2011-12-30 2013-07-04 Intel Corporation Register error protection through binary translation
JP5900606B2 (ja) * 2012-03-30 2016-04-06 富士通株式会社 データ処理装置
US20140075163A1 (en) * 2012-09-07 2014-03-13 Paul N. Loewenstein Load-monitor mwait
JP5715107B2 (ja) * 2012-10-29 2015-05-07 富士通テン株式会社 制御システム
US10133577B2 (en) * 2012-12-19 2018-11-20 Intel Corporation Vector mask driven clock gating for power efficiency of a processor
US9081577B2 (en) 2012-12-28 2015-07-14 Intel Corporation Independent control of processor core retention states
US9164565B2 (en) 2012-12-28 2015-10-20 Intel Corporation Apparatus and method to manage energy usage of a processor
US9405551B2 (en) 2013-03-12 2016-08-02 Intel Corporation Creating an isolated execution environment in a co-designed processor
JP6175980B2 (ja) * 2013-08-23 2017-08-09 富士通株式会社 Cpuの制御方法、制御プログラム、情報処理装置
US9535488B2 (en) * 2013-08-28 2017-01-03 Via Technologies, Inc. Multi-core microprocessor that dynamically designates one of its processing cores as the bootstrap processor
US9891936B2 (en) 2013-09-27 2018-02-13 Intel Corporation Method and apparatus for page-level monitoring
US9652230B2 (en) 2013-10-15 2017-05-16 Mill Computing, Inc. Computer processor employing dedicated hardware mechanism controlling the initialization and invalidation of cache lines
CN105094747B (zh) * 2014-05-07 2018-12-04 阿里巴巴集团控股有限公司 基于smt的中央处理单元以及用于检测指令的数据相关性的装置
US10467011B2 (en) * 2014-07-21 2019-11-05 Intel Corporation Thread pause processors, methods, systems, and instructions
KR20160054850A (ko) * 2014-11-07 2016-05-17 삼성전자주식회사 다수의 프로세서들을 운용하는 장치 및 방법
US20160306416A1 (en) * 2015-04-16 2016-10-20 Intel Corporation Apparatus and Method for Adjusting Processor Power Usage Based On Network Load
KR102476357B1 (ko) 2015-08-06 2022-12-09 삼성전자주식회사 클럭 관리 유닛과 이를 적용하는 집적 회로 및 시스템 온 칩 및 그 동작 방법
US20170177336A1 (en) * 2015-12-22 2017-06-22 Intel Corporation Hardware cancellation monitor for floating point operations
US11023233B2 (en) 2016-02-09 2021-06-01 Intel Corporation Methods, apparatus, and instructions for user level thread suspension
US10185564B2 (en) 2016-04-28 2019-01-22 Oracle International Corporation Method for managing software threads dependent on condition variables
CN109661656B (zh) * 2016-09-30 2023-10-03 英特尔公司 用于利用条件所有权请求的智能存储操作的方法和装置
US11061730B2 (en) * 2016-11-18 2021-07-13 Red Hat Israel, Ltd. Efficient scheduling for hyper-threaded CPUs using memory monitoring
US10394678B2 (en) 2016-12-29 2019-08-27 Intel Corporation Wait and poll instructions for monitoring a plurality of addresses
US10627888B2 (en) * 2017-01-30 2020-04-21 International Business Machines Corporation Processor power-saving during wait events
US11086672B2 (en) * 2019-05-07 2021-08-10 International Business Machines Corporation Low latency management of processor core wait state
CN113867518A (zh) * 2021-09-15 2021-12-31 珠海亿智电子科技有限公司 处理器低功耗阻塞式延时方法、装置及可读介质
CN113986663A (zh) * 2021-10-22 2022-01-28 上海兆芯集成电路有限公司 电子装置及其功耗控制方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001318742A (ja) 2000-05-08 2001-11-16 Mitsubishi Electric Corp コンピュータシステムおよびコンピュータ読み取り可能な記録媒体
JP2006500639A (ja) 2001-12-31 2006-01-05 インテル コーポレイション 指定されたメモリアクセスが発生するまでスレッドの実行をサスペンドする方法及び装置
JP2007520769A (ja) 2003-06-27 2007-07-26 インテル コーポレイション モニタメモリ待機を用いたキューされたロック

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7127561B2 (en) * 2001-12-31 2006-10-24 Intel Corporation Coherency techniques for suspending execution of a thread until a specified memory access occurs
JP4376692B2 (ja) * 2004-04-30 2009-12-02 富士通株式会社 情報処理装置、プロセッサ、プロセッサの制御方法、情報処理装置の制御方法、キャッシュメモリ
GB2414573B (en) 2004-05-26 2007-08-08 Advanced Risc Mach Ltd Control of access to a shared resource in a data processing apparatus
US8607241B2 (en) * 2004-06-30 2013-12-10 Intel Corporation Compare and exchange operation using sleep-wakeup mechanism
US8607235B2 (en) * 2004-12-30 2013-12-10 Intel Corporation Mechanism to schedule threads on OS-sequestered sequencers without operating system intervention
US8719819B2 (en) * 2005-06-30 2014-05-06 Intel Corporation Mechanism for instruction set based thread execution on a plurality of instruction sequencers
US7810083B2 (en) * 2004-12-30 2010-10-05 Intel Corporation Mechanism to emulate user-level multithreading on an OS-sequestered sequencer
US8516483B2 (en) * 2005-05-13 2013-08-20 Intel Corporation Transparent support for operating system services for a sequestered sequencer
US8010969B2 (en) * 2005-06-13 2011-08-30 Intel Corporation Mechanism for monitoring instruction set based thread execution on a plurality of instruction sequencers
US7882339B2 (en) * 2005-06-23 2011-02-01 Intel Corporation Primitives to enhance thread-level speculation
US8028295B2 (en) * 2005-09-30 2011-09-27 Intel Corporation Apparatus, system, and method for persistent user-level thread
GB0519981D0 (en) * 2005-09-30 2005-11-09 Ignios Ltd Scheduling in a multicore architecture
US7941681B2 (en) * 2007-08-17 2011-05-10 International Business Machines Corporation Proactive power management in a parallel computer
US20090150696A1 (en) * 2007-12-10 2009-06-11 Justin Song Transitioning a processor package to a low power state
US9081687B2 (en) * 2007-12-28 2015-07-14 Intel Corporation Method and apparatus for MONITOR and MWAIT in a distributed cache architecture
US8156362B2 (en) * 2008-03-11 2012-04-10 Globalfoundries Inc. Hardware monitoring and decision making for transitioning in and out of low-power state
DE102009001142A1 (de) * 2009-02-25 2010-08-26 Robert Bosch Gmbh Elektromechanischer Bremskraftverstärker
US8156275B2 (en) * 2009-05-13 2012-04-10 Apple Inc. Power managed lock optimization
US8464035B2 (en) * 2009-12-18 2013-06-11 Intel Corporation Instruction for enabling a processor wait state

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001318742A (ja) 2000-05-08 2001-11-16 Mitsubishi Electric Corp コンピュータシステムおよびコンピュータ読み取り可能な記録媒体
JP2006500639A (ja) 2001-12-31 2006-01-05 インテル コーポレイション 指定されたメモリアクセスが発生するまでスレッドの実行をサスペンドする方法及び装置
JP2007520769A (ja) 2003-06-27 2007-07-26 インテル コーポレイション モニタメモリ待機を用いたキューされたロック

Also Published As

Publication number Publication date
CN102103484B (zh) 2015-08-19
WO2011075246A3 (en) 2011-08-18
JP2012531681A (ja) 2012-12-10
US20110154079A1 (en) 2011-06-23
US20130246824A1 (en) 2013-09-19
JP2014222520A (ja) 2014-11-27
GB2483012B (en) 2017-10-18
TW201131349A (en) 2011-09-16
US8990597B2 (en) 2015-03-24
KR20120110120A (ko) 2012-10-09
WO2011075246A2 (en) 2011-06-23
JP5571784B2 (ja) 2014-08-13
JP5795820B2 (ja) 2015-10-14
US20130185580A1 (en) 2013-07-18
DE102010052680A1 (de) 2011-07-07
CN102103484A (zh) 2011-06-22
US8464035B2 (en) 2013-06-11
GB2483012A (en) 2012-02-22
TWI512448B (zh) 2015-12-11
GB201119728D0 (en) 2011-12-28
US9032232B2 (en) 2015-05-12

Similar Documents

Publication Publication Date Title
KR101410634B1 (ko) 프로세서 대기 상태를 인에이블하기 위한 명령
TWI742032B (zh) 用於使用者等級執行緒暫止的方法、設備及指令
US10423216B2 (en) Asymmetric multi-core processor with native switching mechanism
US8539485B2 (en) Polling using reservation mechanism
US7127561B2 (en) Coherency techniques for suspending execution of a thread until a specified memory access occurs
US10078518B2 (en) Intelligent context management
JP2008515096A (ja) 複数のコアを介してのモニタリングされたキャッシュラインの共有
US20160162293A1 (en) Asymmetric processor with cores that support different isa instruction subsets
WO2018169919A1 (en) Precise exceptions for edge processors
US10102003B2 (en) Intelligent context management
US20110173420A1 (en) Processor resume unit
US7328327B2 (en) Technique for reducing traffic in an instruction fetch unit of a chip multiprocessor
US7921280B2 (en) Selectively powered retirement unit using a partitioned allocation array and a partitioned writeback array
US20240103914A1 (en) Dynamically adjusting thread affinitization using hardware-based core availability notifications
US20240103868A1 (en) Virtual Idle Loops
JP2016218855A (ja) 演算処理装置及び演算処理装置の処理方法

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
FPAY Annual fee payment

Payment date: 20170601

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20180529

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20190530

Year of fee payment: 6