KR20130036252A - 멀티쓰레딩된 프로그램의 저전력 실행 - Google Patents

멀티쓰레딩된 프로그램의 저전력 실행 Download PDF

Info

Publication number
KR20130036252A
KR20130036252A KR1020127032497A KR20127032497A KR20130036252A KR 20130036252 A KR20130036252 A KR 20130036252A KR 1020127032497 A KR1020127032497 A KR 1020127032497A KR 20127032497 A KR20127032497 A KR 20127032497A KR 20130036252 A KR20130036252 A KR 20130036252A
Authority
KR
South Korea
Prior art keywords
processing element
current value
variable
conditional load
threads
Prior art date
Application number
KR1020127032497A
Other languages
English (en)
Other versions
KR101467072B1 (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 KR20130036252A publication Critical patent/KR20130036252A/ko
Application granted granted Critical
Publication of KR101467072B1 publication Critical patent/KR101467072B1/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/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/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • G06F9/4893Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues taking into account power or heat criteria
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Power Sources (AREA)

Abstract

하나 이상의 처리 요소들에 의한 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들의 저전력 실행을 위한 기술들이 일반적으로 개시된다.

Description

멀티쓰레딩된 프로그램의 저전력 실행{LOW POWER EXECUTION OF A MULTITHREADED PROGRAM}
본 명세서에서 다르게 나타내지 않는다면, 이 섹션에서 설명되는 접근법들은 본 출원 내의 청구항들에 대한 종래 기술이 아니며 이 섹션에의 포함에 의해 종래 기술인 것으로 인정되지 않는다.
유비쿼터스 컴퓨팅 (ubicomp) 과 같은 일부 컴퓨팅 환경들은, 배터리들 또는 다른 타입들의 휴대용 전력 소스들에 대한 의존성에 기인한 낮은 에너지 사용을 요구하는 디바이스들을 포함할 수도 있다. 일부 구현예들에서는, 멀티-코어 아키텍처들이 모놀리식 코어 아키텍처들에 비하여 전력 및 에너지 효율적인 플랫폼을 제공하는 능력을 보여 왔으며, 유비쿼터스 컴퓨팅 디바이스들 또는 다른 타입들의 저전력 컴퓨팅 디바이스들에 대해 매우 적합할 수도 있다. 더욱이, 유비쿼터스 컴퓨팅 디바이스들 또는 다른 타입들의 저전력 컴퓨팅 디바이스들은 컴퓨테이션 작업들을 완료하기 위하여 병렬 또는 멀티쓰레딩된 프로그램들을 실행하는 멀티-코어 아키텍처를 통합할 수도 있다. 따라서, 병렬 또는 멀티쓰레딩된 프로그램들이 가능한 한 적은 에너지를 이용하여 실행되는 것을 허용하는 메커니즘들이 배터리 또는 다른 타입들의 휴대용 전력 소스에 대한 컴퓨팅 디바이스의 가능한 의존성에 기인하여 중요하다.
본 개시물은 일반적으로 제 1 처리 요소가 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들을 실행하는 구현 방법들을 설명한다. 적어도 일부 방법들에 따르면, 조건부 로드 (conditional load) 가 구현될 수도 있다. 조건부 로드는 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들을 실행하기 위해 제 1 처리 요소에 의해 이용되는 동기화 프리미티브 (synchronization primitive) 와 연관될 수도 있다. 일부 예들에서는, 동기화 프리미티브를 이용하기 위한 변수에 대한 현재 값이 제 1 처리 요소에 대한 캐시 메모리 내에 있는지 여부에 대한 결정이 이루어질 수도 있고, 조건부 로드는 캐시 메모리 내의 현재 값의 부재에 적어도 기초하여 지연 (stall) 될 수도 있다. 또한, 코히어런스 요청이 현재 값의 부재에 적어도 기초하여 제 2 처리 요소로 포워딩될 수도 있다. 그 후, 현재 값은 코히어런스 요청에 적어도 기초하여 제 2 처리 요소로부터 수신될 수도 있다. 그러면, 수신된 현재 값은 변수에 대한 기대 값과 비교될 수도 있고, 조건부 로드 명령은 그 비교에 적어도 기초하여 계속하여 지연될 수도 있다.
또한, 본 개시물은 일반적으로 제 1 처리 요소에 의한 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들의 실행을 용이하게 하기 위한 예시적인 디바이스들을 설명한다. 제 1 처리 요소는 제 1 쓰레드를 실행하기 위해 제 1 처리 요소에 의해 이용되는 동기화 프리미티브와 연관된 조건부 로드 명령을 구현할 수도 있다. 예시적인 디바이스들은 로직을 갖는 코히어런스 관리자를 포함할 수도 있다. 일부 예들에서는, 로직은 동기화 프리미티브를 이용하기 위한 변수에 대한 현재 값이 제 1 처리 요소에 대한 캐시 메모리 내에 있는지 여부를 결정하도록 구성될 수도 있고, 조건부 로드는 캐시 메모리 내의 현재 값의 부재에 적어도 기초하여 지연될 수도 있다. 또한, 로직은 현재 값의 부재에 적어도 기초하여 코히어런스 요청을 제 2 처리 요소로 포워딩하도록 구성될 수도 있다. 그 후, 변수에 대한 현재 값은 코히어런스 요청에 적어도 기초하여 제 2 처리 요소로부터 수신될 수도 있다. 변수에 대한 수신된 현재 값은 변수에 대한 기대 값과 비교될 수도 있고, 조건부 로드 명령은 그 비교에 적어도 기초하여 계속하여 지연될 수도 있다.
또한, 본 개시물은 일반적으로 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들을 실행하기 위한 예시적인 시스템들을 설명한다. 예시적인 시스템들은 멀티쓰레딩된 프로그램의 제 1 쓰레드를 실행하기 위한 제 1 처리 요소를 포함할 수도 있다. 또한, 예시적인 시스템들은 멀티쓰레딩된 프로그램의 제 2 쓰레드를 실행하기 위한 제 2 처리 요소를 포함할 수도 있다. 제 2 처리 요소는 제 2 쓰레드를 실행하기 위해 제 2 처리 요소에 의해 이용되는 동기화 프리미티브와 연관된 조건부 로드 명령을 구현할 수도 있다. 일부 예들에서는, 제 2 처리 요소는 코히어런스 관리자를 포함할 수도 있다. 코히어런스 관리자는 동기화 프리미티브를 이용하기 위한 변수에 대한 현재 값이 제 2 처리 요소에 대한 캐시 메모리 내에 있는지 여부를 결정하도록 구성된 로직을 가질 수도 있고, 조건부 로드는 캐시 메모리 내의 현재 값의 부재에 적어도 기초하여 지연될 수도 있다. 또한, 로직은 현재 값의 부재에 적어도 기초하여 코히어런스 요청을 제 1 처리 요소로 포워딩하도록 구성될 수도 있다. 또한, 로직은 코히어런스 요청에 적어도 기초하여 제 1 처리 요소로부터 현재 값을 수신한 후 수신된 현재 값을 변수에 대한 기대 값과 비교하도록 구성될 수도 있다. 로직은 또한, 그 비교에 적어도 기초하여 조건부 로드 명령을 가능하게는 계속하여 지연시키도록 구성될 수도 있다.
또한, 본 개시물은 일반적으로 예시적인 컴퓨터 프로그램 제품들을 설명한다. 일부 예들에서는, 컴퓨터 프로그램 제품들은 처리 요소가 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들을 실행하기 위한 명령들을 갖는 신호 보유 매체 (signal bearing medium) 를 포함할 수도 있다. 명령들은, 로직에 의해 실행될 때, 로직으로 하여금, 멀티쓰레딩된 프로그램의 제 1 쓰레드를 실행하는데 이용되는 동기화 프리미티브와 연관된 조건부 로드 명령을 구현하도록 할 수도 있다. 또한, 명령들은 로직으로 하여금, 동기화 프리미티브를 이용하기 위한 변수에 대한 현재 값이 제 1 처리 요소에 대한 캐시 메모리 내에 있는지 여부를 결정하도록 할 수도 있으며, 조건부 로드는 캐시 메모리 내의 현재 값의 부재에 적어도 기초하여 지연될 수도 있다. 또한, 명령들은 로직으로 하여금, 현재 값의 부재에 적어도 기초하여 코히어런스 요청을 제 2 처리 요소로 포워딩하도록 할 수도 있다. 그 후, 록 변수 (lock variable) 에 대한 현재 값은 코히어런스 요청에 기초하여 제 2 처리 요소로부터 수신될 수도 있다. 또한, 명령들은 로직으로 하여금, 변수에 대한 수신된 현재 값을 변수에 대한 기대 값과 비교하도록 할 수도 있으며, 조건부 로드 명령은 그 비교에 적어도 기초하여 계속하여 지연될 수도 있다.
전술한 개요는 예시적인 것일 뿐이고 어떠한 방식으로도 한정하는 것으로 의도되지 않는다. 위에서 설명되는 예시적인 양태들, 실시형태들, 및 피쳐들에 더하여, 도면들 및 다음의 상세한 설명을 참조함으로써 추가 양태들, 실시형태들, 및 피쳐들이 명백해질 것이다.
본 개시물의 전술한 피쳐들 그리고 다른 피쳐들은, 첨부되는 도면들과 함께 이해할 경우 다음의 설명 및 첨부된 청구항들로부터 보다 완전하게 명백해질 것이다. 이러한 도면들이 본 개시물에 따르는 몇몇 실시형태들만을 도시하며, 따라서 그 범위를 한정하는 것으로 간주되어서는 안 된다는 것을 이해하면서, 본 개시물은 첨부되는 도면들의 이용을 통해서 추가적인 특정성 (specificity) 및 상세와 함께 설명될 것이다.
도 1 은 예시적인 멀티-코어 처리 시스템을 도시한다.
도 2 는 코히어런스 관리자의 예시적인 아키텍쳐의 블록도를 도시한다.
도 3 내지 도 5 는 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들을 실행하기 위해 처리 요소에 의해 이용되는 예시적인 동기화 프리미티브들을 예시한다.
도 6 은 처리 요소가 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들을 실행하는 방법의 흐름도이다.
도 7 은 예시적인 컴퓨터 프로그램 제품의 블록도를 도시한다.
도 8 은 예시적인 컴퓨팅 디바이스를 예시한다.
이들 모두는 본 개시물의 적어도 일부의 실시형태들에 따라 배열된다.
다음의 상세한 설명에서, 상세한 설명의 일부를 형성하는 첨부되는 도면들에 대한 참조가 이루어진다. 도면들에서, 문맥상 다르게 기술되지 않는 한 유사한 부호들은 통상적으로 유사한 컴포넌트들을 식별한다. 상세한 설명, 도면들, 및 청구항들 내에 설명된 예시적인 예들 또는 실시형태들은 한정적인 것을 의미하지 않는다. 본 명세서에서 제공되는 기술요지의 사상 또는 범위에서 벗어남 없이, 다른 예를 또는 실시형태들이 이용될 수도 있고, 다른 변경들이 행해질 수도 있다. 본 명세서에서 일반적으로 설명되고 도면들에서 예시되는 바와 같은 본 개시물의 양태들이 매우 다양한 상이한 구성들로 배열, 교체, 결합, 및 설계될 수 있다는 점이 용이하게 이해될 것이며, 이들 모두는 본 개시물에서 명시적으로 심사숙고되고 본 개시물의 일부를 형성한다.
본 개시물은, 특히, 하나 이상의 처리 요소들에 의한 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들의 저 전력 실행에 관련되는 방법들, 장치, 시스템들 및 컴퓨터 프로그램 제품들에 직결된다 (drawn).
본 개시물에서 심사숙고되는 바와 같이, 병렬 또는 멀티쓰레딩된 프로그램들이 적은 양의 에너지를 이용하여 실행되는 것을 허용하는 매커니즘들은, 컴퓨팅 디바이스의 배터리 또는 다른 타입의 휴대형 전력 소스에 대한 가능한 의존성에 기인하여 중요할 수도 있다. 일부 예들에서는, 병렬 또는 멀티쓰레딩된 프로그램들을 실행할 수도 있는 디바이스는, 처리 요소들로서 다중 프로세서 코어들을 포함하는 프로세서 아키텍처를 가질 수도 있고, 또는 이러한 디바이스는 처리 요소들로서 기능하는 개별 쓰레드 콘텍스트들을 가지는 단일 프로세서 코어를 포함할 수도 있다. 어느 경우에서나, 디바이스의 처리 요소들은 병렬 또는 멀티쓰레딩된 프로그램들을 함께 실행할 수도 있다. 멀티쓰레딩된 프로그램들을 실행하는 다중 처리 요소들을 수반하는 에너지 소모 동작들 중 하나의 예는 타이트 루프 스피닝 (tight loop spinning) 이라고 공통적으로 지칭되는 동작이다. 타이트 루프 스피닝은 멀티쓰레딩된 프로그램의 쓰레드를 실행하기 위해 하나 이상의 동기화 프리미티브들을 이용하려고 시도하는 동안 타이트 루프 내에 홀딩되는 하나 이상의 처리 요소들을 수반할 수도 있다. 예를 들어, 하나 이상의 동기화 프리미티브들은 록 동기화 (lock synchronization), 배리어 동기화 (barrier synchronization) 또는 신호-대기 동기화 (signal-wait synchronization) 를 포함할 수도 있는데, 이들에 한정되는 것은 아니다.
아래의 테이블 Ι 는 록 동기화로 추정되는 일 타입의 동기화 프리미티브가 어떻게 처리 요소가 멀티쓰레딩된 프로그램의 쓰레드를 실행하는 록 (lock) 을 획득하는데 이용될 수도 있는지의 일 예를 포함한다. 아래에서 더 상세히 설명되는 바와 같이, 테이블 Ι 에 도시된 예시적인 록 동기화를 이용하는 것은 타이트 루프 스피닝을 야기할 수도 있다.
테이블 Ι
Figure pct00001
일부 예들에서는, 록을 획득하기 위하여, 멀티쓰레딩된 프로그램의 제 1 쓰레드를 실행하려고 시도하는 제 1 처리 요소는 "LockCode" 로서 명명된 명령 라인에서 시작되는, 테이블 Ι 에 도시된 예시적인 록 동기화를 이용할 수도 있다. 그 록을 나타내는 소프트웨어 데이터 구조 또는 록 변수는 예시적인 록 동기화 내에서 Lockvar 로서 식별되는 위치에 저장될 수도 있다. 록 변수는 제 1 처리 요소에 대한 캐시 메모리 내에 유지될 수도 있다. 제 1 처리 요소가 예시적인 록 동기화를 이용할 때, 록 변수의 값은 메모리 또는 캐시 메모리로부터, R1 로서 식별된 처리 요소에 대한 레지스터 상에 우선 로드된다. 만일, 예를 들어 로드된 록 변수의 값이 "1" 이라면, 록은 제 2 쓰레드를 실행하는 제 2 처리 요소에 의해 홀딩될 수도 있다. 그러므로, 제 1 쓰레드를 실행하기 위한 록을 획득하려고 시도하기 위하여, 제 1 처리 요소는 R1 내에 로드된 록 변수 값이 "0" 의 값으로 변경될 때까지 계속 대기할 필요가 있을 수도 있다. 제 1 처리 요소는 LockCode 로서 명명된 명령 라인으로 다시 점프함으로써 대기 시간을 소비하고, 예시적인 록 동기화 내의 명령들을 반복할 수도 있다. 이러한 타이트 루프 동안에, 제 1 쓰레드를 실행하려고 시도중인 제 1 처리 요소는 아이들 상태가 아니다. 제 1 처리 요소는, R1 내에 로드된 록 변수 값이 변경되었는지 여부를 계속해서 체크하는 동시에, 예시적인 록 동기화의 "ld" 및 "bneqz" 명령들을 계속하여 구현할 수도 있다. 위에서 언급된 타이트 루프의 타입은 통상적으로 제 1 처리 요소가 이 타이트 루프 내에서 대기하는 시간의 길이에 비례하는 에너지를 낭비한다.
일부 예들에서는, 제 1 처리 요소가 테이블 Ι 내에 도시된 예시적인 록 동기화를 이용하여 야기된 타이트 루프에 계속 머물러 있기 때문에, R1 내에 로드된 록 변수는 결국 "0" 의 값으로 변경된 것으로 확인될 수도 있다. "0" 의 값은, 록을 사전에 홀딩했던 제 2 처리 요소가 그 록을 릴리스했다는 것을 나타낼 수도 있다. 더 나아가, 예시적인 록 동기화를 이용하여, 제 1 처리 요소는 예시적인 록 동기화의 "test&set" 부분으로서 식별되는 원자적 명령 (atomic instruction) 을 수행할 수도 있다. "test&set" 원자적 명령은 위치 LockVar 에서 제 1 프로세서의 캐시 메모리 내에 유지된 록 변수 값을 레지스터 (예컨대, R1) 로 독출하고 그 값을 테스트할 수도 있다. 일부 예들에서는, 만일 레지스터 내의 값이 "0" 이라면, "1" 의 값이 제 1 처리 요소에 의해 캐시 메모리 위치 Lockvar 에 기입된다. 만일 레지스터 내의 값이 "test&set" 원자적 명령의 끝에서 "1" 이라면, 록 획득 (lock acquisition) 은 실패했다. 예시적인 록 동기화에 따르면, 이 지점에서 실패한 획득은 다시 LockCode 명령 라인으로의 분기 점프를 야기하여 록 획득을 재시도할 수도 있다. 제 3 쓰레드를 실행하려고 시도하는 제 3 처리 요소가 또한 동시에 동일한 데이터 상의 록을 획득하려고 시도하고 있을 수 있으며, 오직 하나의 처리 요소만이 주어진 시간에 그 록을 얻을 수도 있기 때문에, "test&set" 원자적 명령이 필요할 수도 있다는 점에 주의한다.
일부 예들에서는, 테이블 Ι 에 도시된 예시적인 동기화 록을 이용하는 것은 가능한 한 적은 에너지를 이용하여 멀티쓰레딩된 프로그램을 실행하는데 문제가 될 수도 있다. 예를 들어, 제 1 처리 요소는 처리 요소가 타이트 루프 내에 갇혀있도록 예시적인 동기화 록을 이용하는 동안 크고/크거나 낭비적인 양의 에너지를 소비할 수도 있다. 또한, 록 변수의 값을 테스트하기 위해 그 캐시 메모리에 계속해서 액세스하는 제 1 처리 요소도 역시 크고/크거나 낭비적인 양의 에너지를 소비할 수도 있다.
일부 예들에서는, 처리 요소가 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들을 실행하는 방법들이 구현된다. 조건부 로드 명령이 구현될 수도 있다. 조건부 로드 명령은 멀티쓰레딩된 프로그램의 제 1 쓰레드를 실행하기 위해 제 1 처리 요소에 의해 이용되는 동기화 프리미티브 (예컨대, 록 동기화, 배리어 동기화, 신호-대기 동기화) 와 연관될 수도 있다. 일부 예들에서는, 동기화 프리미티브를 이용하기 위한 변수 (예컨대 록 변수) 에 대한 현재 값이 제 1 처리 요소에 대한 캐시 메모리 내에 있는지 여부에 대한 결정이 이루어질 수도 있고, 조건부 로드는 캐시 메모리 내의 현재 값의 부재에 적어도 기초하여 지연될 수도 있다. 또한, 코히어런스 요청이 제 1 처리 요소에 대한 캐시 메모리 내의 변수에 대한 현재 값의 부재에 기초하여 제 2 처리 요소로 포워딩될 수도 있다. 그 후, 변수에 대한 현재 값이 코히어런스 요청에 기초하여 제 2 처리 요소로부터 수신될 수도 있다. 그러면, 수신된 현재 값은 변수에 대한 기대 값과 비교될 수도 있고, 조건부 로드 명령은 그 비교에 기초하여 계속하여 지연될 수도 있다. 조건부 로드 명령을 지연시키는 것 및/또는 계속하여 지연시키는 것은, 위에서 언급된 에너지 소모 타이트 루프들의 종류들을 회피 또는 최소화할 수도 있다.
도 1 은 본 개시물의 적어도 일부 실시형태들에 따른 예시적인 다중 처리 요소 시스템 (100) 을 도시한다. 도 1 에 도시된 바와 같이, 다중 처리 요소 시스템 (100) 은 처리 노드 (110) 및 처리 노드 (120) 를 포함한다. 일부 예들에서는, 다중 처리 요소 시스템 (100) 의 요소들은 통신 채널 (130) 을 통해 통신적으로 커플링될 수도 있다. 또한 도 1 에는, 처리 노드 (110) 가 처리 요소 (112), 캐시 메모리 (114) 및 코히어런스 관리자 (116) 를 포함하는 한편, 처리 노드 (120) 가 처리 요소 (122), 캐시 메모리 (124) 및 코히어런스 관리자 (126) 를 포함하는 것이 도시되어 있다. 다중 처리 요소 시스템 (100) 이 도 1 에서는 두 개의 별개의 처리 노드들을 포함하는 것으로 도시되지만, 이 개시물은, 다중 처리 요소 시스템이 세 개 이상의 처리 노드들을 가질 수도 있다는 점에서 두 개 만의 처리 노드들을 갖는 다중 처리 요소 시스템에만 한정되지 않는다. 또한, 이 개시물은, 쓰레드들이 상이한 칩들에 상주하는 프로세서들 또는 처리 요소들에서 실행되는 멀티-칩 멀티프로세서 시스템들, 쓰레드들이 단일 칩 상의 상이한 코어들에서 실행되는 멀티-코어 칩 뿐만 아니라 쓰레드들이 동일한 코어 상의 상이한 쓰레드 콘텍스트들에서 실행되는 멀티-쓰레딩된 코어에도 적용가능할 수도 있다.
일부 예들에서는, 다중 처리 요소 시스템 (100) 은 하나 이상의 병렬 또는 멀티쓰레딩된 프로그램들의 실행을 포함하는 컴퓨테이션 작업을 완료하기 위하여 이용될 수도 있다. 예를 들어, 멀티쓰레딩된 프로그램의 개별 쓰레드들은 컴퓨테이션 작업의 적어도 일부를 완료하기 위해 처리 노드들 (110 및 120) 의 요소들 (예컨대, 처리 요소들 (112, 122)) 에 의해 개별적으로 실행될 수도 있다.
아래에서 좀더 자세하게 설명되는 바와 같이, 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들을 실행하기 위해, 처리 노드 (예컨대 처리 노드 (110)) 의 제 1 처리 요소 (예컨대 처리 요소 (112)) 가 조건부 로드 명령을 구현할 수도 있다. 일부 예들에서는, 조건부 로드 명령은 멀티쓰레딩된 프로그램의 쓰레드들 중 적어도 하나를 실행하는데 이용되는 동기화 프리미티브와 연관될 수도 있다. 일부 예들에서는, 제 1 처리 요소에 대한 캐시 메모리 (예컨대, 캐시 메모리 (114)) 는 동기화 프리미티브를 이용하기 위한 변수 (예컨대, 록 변수) 에 대한 값을 포함할 수도 있고 또는 포함하지 않을 수도 있다. 만일 캐시 메모리가 그 변수에 대한 값을 포함하지 않는다면, 처리 노드에 대한 코히어런스 관리자 (예컨대, 코히어런스 관리자 (116)) 가 조건부 로드 명령을 지연시킨 후, 코히어런스 요청을 (예컨대, 통신 채널 (130) 을 통해) 포워딩할 수도 있다. 이 요청은 제 2 처리 요소에 대한 캐시 메모리 (예컨대 캐시 메모리 (124)) 내에 포함된 변수에 대한 현재 값을 가질 수도 있는 제 2 처리 요소 (예컨대, 처리 요소 (122)) 로 포워딩될 수도 있다.
일부 예들에서는, 조건부 로드 명령은 다양한 포맷들을 가질 수도 있다. 일 예에서, 이것은 한 개의 메모리 오퍼랜드 (operand) 및 한 개의 목적지 레지스터를 가져, 그 오퍼런드에 대한 사전-정의된 값을 암시적으로 예상하거나, 또는 메모리로부터 로드된 값이 목적지 레지스터 내에 홀딩된 값에 매칭해야 할 수도 있다는 것을 암시적으로 예상할 수도 있다. 대안적으로, 다른 예들에서는, 이것은 한 개의 메모리 오퍼랜드, 기대 값을 포함하는 한 개의 레지스터 오퍼랜드, 및 목적지 레지스터를 가질 수도 있다.
일부 예들에서는, 제 2 처리 요소는 변수에 대한 현재 값을 제공함으로써 코히어런스 요청에 응답할 수도 있다. 처리 노드 (110) 에 대한 코히어런스 관리자는 변수에 대한 현재 값을 수신할 수도 있다. 일부 예들에서는, 코히어런스 관리자는 현재 값을 변수에 대한 기대 값과 비교할 수도 있다. 예를 들어, 기대 값은 이용되는 타입의 동기화 프리미티브에 관련된 값일 수도 있다. 예를 들어, 록 동기화에 대해, 기대 값은, 처리 요소가 제 1 처리 요소가 록이 이용가능해질 때까지 대기할 필요가 있을 수도 있는 데이터 상의 록을 갖는지 여부를 나타낼 수도 있다. 만일 비교가 변수에 대한 기대 값과 현재 값이 매칭하지 않는다는 것을 나타낸다면, 코히어런스 관리자는 조건부 로드 명령이 제 1 처리 요소에 의해 실행되는 것을 지연시킬 수도 있다. 예를 들어 조건부 로드 명령 지연은, 제 1 처리 요소에 변수에 대한 현재 값을 알리지 않는 (withhold) 것을 포함한다. 그러면 조건부 로드 명령에 대한 지연이 제거될 때까지 제 1 처리 요소는 다양한 가능한 절전 모드 (power saving mode) 들 및/또는 상태들에 놓여질 수도 있다. 일부 예들에서는, 지연은, 추가적인 코히어런스 요청들 또는 응답들에 후속하여 변수에 대한 기대 값과 현재 값이 매칭한다면 제거될 수도 있다. 예를 들어, 록 동기화를 이용할 때에, 제 2 처리 요소는 그 데이터 상의 록을 후속하여 릴리스하였다.
도 2 는 본 개시물의 적어도 일부 실시형태들에 따른 코히어런스 관리자 (116) 의 예시적인 아키텍처의 블록도를 도시한다. 도 1 의 다중 처리 요소 시스템 (100) 에 대해서 위에서 설명된 바와 같이, 처리 노드 (110) 는 코히어런스 관리자 (116) 를 포함한다. 일부 예들에서는, 코히어런스 관리자 (116) 는 처리 노드 (110) 의 처리 요소 (112) 에 의한 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들의 실행을 용이하게 하도록 구성 또는 배열된 피쳐들 및/또는 로직을 포함한다. 일부 예들에서는, 처리 노드 (120) 의 코히어런스 관리자 (126) 는 도 2 의 코히어런스 관리자 (116) 에 대해서 도시된 것과 실질적으로 동일한 예시적인 아키텍처를 가질 수도 있다. 이러한 예들에서는, 코히어런스 관리자 (126) 는 또한 처리 노드 (120) 의 처리 요소 (122) 에 의한 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들의 실행을 용이하게 하도록 구성 또는 배열된 피쳐들 및/또는 로직을 포함할 수도 있다.
도 2 의 예시적인 코히어런스 관리자 (116) 는 코히어런스 로직 (210), 제어 로직 (220), 메모리 (230), 입력/출력 (I/O) 인터페이스들 (240), 및 옵션으로는 하나 이상의 애플리케이션들 (250) 을 포함한다. 도 2 에 도시된 바와 같이, 코히어런스 로직 (210) 은 제어 로직 (220), 메모리 (230) 및 I/O 인터페이스들 (240) 에 커플링된다. 또한 도 2 에는, 옵션의 애플리케이션들 (250) 이 제어 로직 (220) 과 협력하여 동작하도록 배열될 수도 있다는 것이 예시된다. 코히어런스 로직 (210) 은 하나 이상의 값 피쳐 (212), 요청 피쳐 (214), 비교 피쳐 (216) 및 지연 피쳐 (218), 또는 이들의 임의의 합당한 조합을 더 포함할 수도 있다. 일부 대안적인 예들에서는, 코히어런스 로직 (210), 제어 로직 (220), 메모리 (230), 입력/출력 (I/O) 인터페이스들 (240), 및 하나 이상의 애플리케이션들 (250) 중 일부 또는 전부는 캐시 제어기 내에 통합될 수도 있다.
일부 예들에서는, 도 2 의 블록도 내에 그려진 요소들은 이 개시물에서 설명된 바와 같이 코히어런스 관리자 (116) 를 지원하도록 구성된다. 주어진 코히어런스 관리자 (116) 는 도 2 에 도시된 것들 중 일부, 전부, 또는 더 많은 요소들을 포함할 수도 있다. 예를 들어, 코히어런스 로직 (210) 및 제어 로직 (220) 은 코히어런스 관리자 (116) 의 피쳐들을 구현하기 위한 매우 다양한 로직 디바이스(들)를 개별적으로 또는 집합적으로 나타낼 수도 있다. 예시적인 로직 디바이스는 마이크로제어기, 필드 프로그래밍가능한 게이트 어레이 (FPGA), 주문형 집적회로 (ASIC), 통신 제어기, 캐시 제어기 또는 이들의 조합 중 하나 이상을 포함할 수도 있다.
위에서 언급된 바와 같이, 코히어런스 로직 (210) 은 값 피쳐 (212), 요청 피쳐 (214), 비교 피쳐 (216) 또는 지연 피쳐 (218) 를 포함할 수도 있다. 코히어런스 로직 (210) 은 동작들을 수행하기 위해 이러한 피쳐들 중 하나 이상을 이용하도록 구성될 수도 있다. 아래에서 좀더 자세하게 설명되는 바와 같이, 예시적인 동작들은 처리 요소 (112) 에 의한 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들의 실행을 용이하게 하는 것을 포함할 수도 있다.
일부 예들에서는, 제어 로직 (220) 은 코히어런스 관리자 (116) 의 전체 동작을 제어하도록 구성될 수도 있다. 위에서 언급된 바와 같이, 제어 로직 (220) 은 코히어런스 관리자 (116) 의 제어를 구현하기 위해 실행가능한 콘텐츠 또는 명령들과 함께 동작하도록 구성된 매우 다양한 로직 디바이스(들) 중 임의의 것을 나타낼 수도 있다. 일부 대안적인 예들에서는, 제어 로직 (220) 의 피쳐들 및 기능성은 코히어런스 관리자 (116) 내에 구현될 수도 있다.
일부 예들에 따르면, 메모리 (230) 는 실행가능한 콘텐츠 또는 명령들을 저장하도록 배열된다. 실행가능한 콘텐츠 또는 명령들은 코히어런스 관리자 (116) 의 피쳐들 또는 요소들을 구현하거나 활성화하기 위해 제어 로직 (220) 및/또는 코히어런스 로직 (210) 에 의해 이용될 수도 있다. 또한, 메모리 (230) 는 코히어런스 요청들에 응답하여 코히어런스 관리자 (116) 의 요소들 또는 피쳐들에 의하여 수신될 수도 있는 변수들에 대한 기대 값 및 현재 값을 임시로 유지하도록 배열될 수도 있다. 일부 예들에서는, 메모리 (230) 는 변수들에 대한 기대 값 및 현재 값을 적어도 임시로 저장하기 위한 레지스터들 또는 다른 타입들의 메모리 구조들을 포함할 수도 있다.
메모리 (230) 는 하나 이상의 휘발성 메모리, 비휘발성 메모리, 플래시 메모리, 프로그래밍가능한 변수들 또는 상태들, 랜덤 액세스 메모리 (RAM), 판독 전용 메모리 (ROM), 또는 다른 정적 또는 동적 저장 매체들을 포함하지만 이들에 한정되지 않는 매우 다양한 메모리 매체들을 포함할 수도 있다.
일부 예들에서는, I/O 인터페이스들 (240) 은 내부 통신 매체 또는 링크를 통하여 코히어런스 관리자 (116) 와 처리 노드 (110) 에 상주하거나 또는 처리 노드 (110) 와 함께 위치하는 요소들 (예컨대, 프로세서 요소 (112) 또는 캐시 메모리 (114)) 사이에 인터페이스를 제공할 수도 있다. 또한, I/O 인터페이스들 (240) 은 코히어런스 관리자 (116) 와 처리 노드 (110) 에 커플링된 요소들, 예컨대 처리 노드 (120) 사이에 인터페이스를 제공할 수도 있다. 도 1 에 대하여 위에서 언급된 바와 같이, 처리 노드 (110) 는 통신 채널 (130) 을 통해서 이러한 요소들에 커플링될 수도 있다. 예를 들어, I/O 인터페이스들 (240) 은 코히어런스 관리자 (116) 및/또는 코히어런스 관리자 (116) 의 요소들이 통신 채널 (130) (예컨대, 인터-집적 회로 (Inter-Integrated Circuit, I2C), 시스템 관리 버스 (System management Bus, SMBus), 직렬 주변 인터페이스 버스 (Serial Peripheral Interface Bus, SPI), 하이퍼트랜스포트 (HyperTransport, HT), 또는 퀵패스 상호접속 (Quickpath Interconnect, QPI), 등) 을 통해 통신하는 것을 허용하기 위해 다양한 통신 프로토콜들에 따라 동작하도록 구성된 인터페이스를 포함한다.
일부 예들에서는, 코히어런스 관리자 (116) 는 제어 로직 (220) 및/또는 코히어런스 로직 (210) 에 명령들을 제공하기 위해 하나 이상의 애플리케이션들 (250) 을 포함한다. 예를 들어, 명령들은 코히어런스 관리자 (116) 가 값 피쳐 (212), 요청 피쳐 (214), 비교 피쳐 (216) 또는 지연 피쳐 (218) 를 구현 또는 이용하는 명령들을 포함할 수도 있다.
도 3 내지 도 5 는 본 개시물의 적어도 일부 실시형태들에 따른 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들을 실행하기 위해 처리 요소에 의해 이용되는 예시적인 동기화 프리미티브들을 예시한다. 도 3 에 도시된 예시적인 동기화 프리미티브 (300) 는 록 동기화로서 사전에 식별된 일 타입의 동기화 프리미티브일 수도 있다. 일부 예들에서는, 록 동기화의 이용을 통하여, 처리 요소는 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들을 실행할 수도 있다. 록 동기화의 이용은 멀티쓰레딩된 프로그램의 제 1 쓰레드의 실행에서 이용되는 데이터와 연관된 록 변수를 획득하는 것을 포함할 수도 있다. 획득된 록 변수에 적어도 기초하여, 록은 제 1 쓰레드의 실행에서 이용되는 데이터 상에 배치될 수도 있다. 제 1 쓰레드 내의 주요 섹션 (critical section) 의 실행 이후에, 동기화 프리미티브 (300) 의 부분들이 록을 릴리스하기 위하여 더욱 이용될 수도 있다. 동기화 프리미티브 (300) 는 테이블 Ι 에 도시된 동기화 프리미티브와 유사하다. 그러나, 처음 두 개의 명령들인 "ld" 및 "bneqz" 는 조건부 로드 "CL" 명령으로 교체되었다. "CL" 명령은, 예를 들어 록 변수를 획득하기 위하여 처리 요소에 의하여 구현될 수도 있으며, "CL" 명령은 록 변수에 대한 현재 값과 록 변수에 대한 기대 값의 비교에 적어도 기초하여 지연되거나 및/또는 계속하여 지연될 수도 있다.
일부 예들에서는, 멀티쓰레딩된 프로그램의 제 1 쓰레드를 실행하려고 시도하는 제 1 처리 요소는 동기화 프리미티브 (300) 를 이용할 수도 있다. 예를 들어, 록을 획득하기 위한 프로세스를 시작하기 위하여, 제 1 처리 요소는 "LockCode" 로서 명명된 명령 라인에서 시작되는 동기화 프리미티브 (300) 를 구현할 수도 있다. 동기화 프리미티브 (300) 의 이용의 일부로서, "CL" 명령은 록이 추구되는 데이터와 연관된 록 변수를 획득하도록 구현될 수도 있다. 예를 들어, 록 변수에 대한 현재 값은 메인 메모리 내에 또는 동기화 프리미티브 (300) 내에 Lockvar 로서 식별되는 캐시 메모리 위치에 저장될 수도 있다. 이하 더 설명되는 바와 같이, "CL" 명령은 록 변수에 대한 현재 값과 록 변수에 대한 기대 값의 비교에 기초하여 지연되거나 및/또는 계속하여 지연될 수도 있다. 예를 들어, 지연은 동기화 프리미티브 (300) 내에 포함된 명령들의 추가적인 구현을 중지 또는 지연시키는 것을 포함할 수도 있다.
일부 예들에서는, 갱신된 현재 값과 록 변수에 대한 기대 값의 후속 비교에 응답하여 지연이 추후에 제거될 수도 있다. 제거된 지연은 그 후, 제 1 처리 요소가 록을 획득한 후 마지막으로 동기화 프리미티브 (300) 의 나머지 명령들을 "ReleaseCode" 로서 명명된 명령 라인에서 구현함으로써 록을 릴리스하도록 야기할 수도 있는 동기화 프리미티브 (300) 의 추가적인 명령들을 구현하는 결론에 이르게 할 수도 있다. 록은 예를 들어, 제 1 쓰레드가 실행되기만 하면 릴리스될 수도 있다.
도 4 에 도시된 예시적인 동기화 프리미티브 (400) 는 배리어 동기화로서 사전에 식별된 일 타입의 동기화 프리미티브일 수도 있다. 일부 예들에서는, 동기화 프리미티브 (400) 의 이용을 통하여, 처리 요소는 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들을 실행할 수도 있다. 동기화 프리미티브 (400) 의 이용은, 처리 요소가 쓰레드 실행 노력들을 다른 처리 요소들과 동기화할 수 있게 할 수도 있다. 예를 들어, 동기화 프리미티브 (400) 의 이용은 배리어가 완료되었는지 여부를 나타내는 현재 값을 수반할 수도 있다. 배리어 완료시까지, 배리어 또는 홀드가 처리 요소 상에 배치되어, 다른 처리 요소들이 멀티쓰레딩된 프로그램의 그들 하나 이상의 쓰레드들의 실행을 완료할 때까지 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들의 실행을 중지하도록 할 수도 있다.
일부 예들에서는, 동기화 프리미티브 (400) 의 이용은 처리 요소가 실행된 쓰레드들의 개수의 카운트를 (예컨대, 처리 요소에 의하여 유지되는 메모리 또는 레지스터 내에) 유지하는 것을 포함할 수도 있다. 예를 들어, 도 4 에 도시된 바와 같이, num_arrived (예컨대, 변수에 대한 현재 값) 가 0 의 값으로 초기화되고 barrier_complete 은 FALSE 로 초기화될 수도 있다. 실행된 쓰레드들의 표시들이 하나 이상의 다른 처리 요소들로부터 수신될 때, 처리 요소는 num_arrived 를 원자적으로 (atomically) 증분하여 카운트 값을 얻을 수도 있다. 그 후, 카운트 값은 도 4 에서 NUM_THREADS 로서 도시되는 쓰레드 실행 개수와 비교될 수도 있다. 예를 들어, NUM_THREADS 는 배리어를 완료하기 위해 실행될 쓰레드들의 개수, 예를 들어 변수에 대한 기대 값을 나타낼 수도 있다. 만일, 카운트가 NUM_THREADS 와 동일하다면, 배리어는 완료될 수 있다 (예컨대, barrier_complete 이 TRUE 로 설정된다). 배리어가 완료되기 때문에, 배리어 또는 홀드가 제거되고, 처리 요소는 하나 이상의 쓰레드들의 실행을 계속할 수 있다. 그렇지 않으고, 카운트가 NUM_THREADS 와 동일하지 않다면, 배리어는 완료되지 않을 수도 있다 (예컨대, barrier_complete 이 FALSE 이다). 일부 예들에서는, barrier_complete == FALSE 에 기초하여, "CL" 명령이 처리 요소에 의해 구현될 수도 있다. "CL" 명령은 barrier_complete 이 TRUE 가 될 때까지 처리 요소가 동기화 프리미티브 (400) 의 다른 부분들을 구현하는 것을 지연시키거나 또는 중지시킬 수도 있다.
일부 다른 예들에서는, 지연은 갱신된 현재 값 (증분된 카운트 값) 과 변수에 대한 기대 값 (NUM_THREADS 에 대한 값) 의 후속 비교에 기초하여 추후에 제거될 수도 있다. 그러면, 제거된 지연은 결과적으로 배리어가 제거되는 것을 야기할 수도 있고, 그 후 처리 요소는 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들을 계속하여 실행할 수도 있다.
도 5 에 도시된 예시적인 동기화 프리미티브 (500) 는 신호-대기 동기화로서 사전에 식별된 일 타입의 동기화 프리미티브일 수도 있다. 일부 예들에서는, 동기화 프리미티브 (500) 의 이용을 통하여, 처리 요소는 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들을 실행할 수도 있다. 동기화 프리미티브 (500) 의 이용은, 처리 요소가 멀티쓰레딩된 프로그램의 생산자 쓰레드 (producer thread) 가 실행되었다는 신호를 대기하는 동안, 멀티쓰레딩된 프로그램의 소비자 쓰레드 (consumer thread) 를 실행중일 수도 있는 처리 요소가 "CL" 명령을 구현할 수 있게 할 수도 있다.
일부 예들에서는, 동기화 프리미티브 (500) 의 이용은, 처리 요소가 생산자 쓰레드가 실행되었는지 여부를 나타낼 수도 있는 플래그의 값을 모니터링하는 것을 포함할 수도 있다. 동기화 프리미티브 (500) 에 대하여 도 5 에 도시된 바와 같이, 플래그에 대한 1 의 값 (예컨대, 변수에 대한 기대 값) 은 생산자 쓰레드가 실행되었다는 것을 나타낼 수도 있다. 예를 들어, "CL" 명령은, 플래그에 대한 현재 값이 1 이 아니라면 구현될 수도 있다. 동기화 프리미티브들 (300 및 400) 에 대한 "CL" 명령들과 유사하게, CL 명령의 구현은, 플래그의 현재 값이 1 이 될 때까지 처리 요소가 동기화 프리미티브 (500) 의 다른 부분을 구현하는 것을 지연시키거나 또는 중지시킬 수도 있다.
일부 예들에서는, 지연은 갱신된 현재 값 (플래그의 현재 값) 과 변수에 대한 기대 값 (플래그에 대한 1 의 값) 의 후속 비교에 기초하여 추후에 제거될 수도 있다. 그러면, 제거된 지연은 결과적으로 처리 요소가 멀티쓰레딩된 프로그램의 쓰레드 (예컨대, 소비자 쓰레드) 를 실행하는 것을 야기할 수도 있다.
도 6 은 처리 요소가 본 개시물의 적어도 일부 실시형태들에 따른 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들을 실행하는 방법의 흐름도이다. 일부 예들에서는, 도 1 에 도시된 바와 같은 다중 처리 요소 시스템 (100) 이 도 6 에 도시된 흐름도와 관련된 예시적인 방법들을 예시하기 위하여 이용될 수도 있다. 도 2 에 도시된 바와 같은 코히어런스 관리자 (116) 를 갖는 다중 처리 요소 시스템 (100) 의 처리 노드 (110) 도 역시 예시적인 방법들을 구현하기 위하여 이용될 수도 있다. 또한, 다중 처리 요소 시스템 (100) 의 요소들 및/또는 코히어런스 관리자 (116) 는 도 3 내지 도 5 에 도시된 예시적인 동기화 프리미티브들 (300, 400 또는 500) 의 적어도 부분들을 구현할 수도 있다. 그러나 설명된 방법들은 도 1 에 도시된 바와 같은 다중 처리 요소 시스템 (100) 상의 구현들, 도 2 에 도시된 코히어런스 관리자 (116), 또는 도 3 내지 도 5 에 도시된 예시적인 동기화 프리미티브들 (300, 400 또는 500) 에 한정되지 않는다.
블록 605 ("CL" 명령을 구현) 에서 시작하여, 처리 노드 (110) 의 처리 요소 (112) 는 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들을 실행하는데 이용되는 동기화 프리미티브와 연관된 조건부 로드 명령을 구현하도록 구성된 로직 및/또는 피쳐들을 포함할 수도 있다.
일부 예들에서는, 멀티쓰레딩된 프로그램의 제 1 쓰레드를 실행하기 위해 처리 요소 (112) 에 의해 이용되는 데이터와 연관된 록 변수를 획득하는 것은 동기화 프리미티브 (300) 의 "CL" 명령의 구현을 포함할 수도 있다. 다른 예들에서는, 동기화 프리미티브 (400) 의 "CL" 명령은 처리 요소 (112) 가 배리어가 완료되었는지 여부를 결정할 수 있게 하도록 구현될 수도 있다. 또 다른 예들에서는, 소비자 쓰레드가 여전히 실행되어야 하는지 여부를 나타내는 플래그의 값이 처리 요소 (112) 로 하여금 동기화 프리미티브 (500) 의 "CL" 명령을 구현하도록 할 수도 있다.
블록 605 로부터 판정 블록 610 (현재 값 부재?) 으로 계속 진행하여, 코히어런스 관리자 (116) 는 변수에 대한 현재 값이 캐시 메모리 (114) 내에 존재하는지 또는 저장되는지 여부를 (예컨대 값 피쳐 (212) 를 통해) 결정하도록 구성된 로직 및/또는 피쳐들을 포함할 수도 있다. 일부 예들에서는, 현재 값은 캐시 메모리 (114) 내에 적어도 임시로 저장 또는 유지될 수도 있다. 만일 변수에 대한 현재 값이 존재한다면, 프로세스는 판정 블록 630 으로 이동한다. 그렇지 않으면, 처리는 블록 615 로 이동한다.
판정 블록 610 으로부터 블록 615 ("CL" 명령을 지연) 로 진행하여, 코히어런스 관리자 (116) 는 처리 요소 (112) 에 의하여 구현되고 있는 "CL" 명령을 (예컨대, 지연 피쳐 (218) 를 통해) 지연시키도록 구성된 로직 및/또는 피쳐들을 포함할 수도 있다. 일부 예들에서는, 조건부 로드 명령을 지연시키는 것은, 코히어런스 관리자 (116) 에게 변수에 대한 현재 값을 알리지 않는 것으로부터 기인할 수도 있다. 예를 들어, 코히어런스 관리자는 변수에 대한 현재 값을 메인 메모리로부터 캐시 메모리 (114) 로 로드하는 것 (즉, 캐시 미쓰 (cache miss) 와 유사한 상황을 만드는 것) 또는 캐시 메모리 (114) 로부터 처리 요소 (112) 에 의하여 유지되는 레지스터 (예컨대, R1 으로서 식별된 레지스터) 로 로드하는 것을 억제할 수도 있다. 변수에 대한 현재 값이 없으면, 처리 요소 (112) 는 예를 들어 동기화 프리미티브의 명령들의 구현을 중지할 수도 있고, 가능하다면 어느 정도의 시간 기간이 지난 후에 아이들 또는 절전 모드에 진입할 수도 있다. 절전 모드는 처리 요소 (112) 에 제공된 전압의 저하, 처리 요소 (112) 의 주파수의 저하, 처리 요소 (112) 의 전력 게이팅 (power gating), 또는 체크포인팅 상태 (checkpointing state) 로의 진입을 포함할 수도 있으나 이들에 한정되는 것은 아니다.
블록 615 로부터 블록 620 (코히어런스 요청을 포워딩) 으로 계속 진행하여, 코히어런스 관리자 (116) 는 통신 채널 (130) 을 통하여 코히어런스 요청을 (예컨대, 요청 피쳐 (214) 를 통해) 포워딩하도록 구성된 로직 및/또는 피쳐들을 포함할 수도 있다. 일부 예들에서는, 캐시 메모리 (114) 내에의 변수에 대한 현재 값의 부재는 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들의 실행이 보류될 수도 있다는 것을 나타낼 수도 있다. 예를 들어, 처리 요소 (112) 는 록의 획득, 배리어 완료 또는 생산자 쓰레드 실행의 표시를 대기하고 있을 수도 있다.
블록 620 으로부터 블록 625 (현재 값을 수신) 로 계속 진행하여, 코히어런스 관리자 (116) 는 포워딩된 코히어런스 요청에 기초하거나 또는 변수의 값을 나타낼 수도 있는 다른 처리 요소들로부터 수신되는 브로드캐스팅된 코히어런스 메시지에 기초하여 변수에 대한 현재 값을 (예컨대, 요청 피쳐 (214) 를 통해) 수신하도록 구성된 로직 및/또는 피쳐들을 포함할 수도 있다.
블록 625 로부터 판정 블록 630 (현재 값이 기대 값에 매칭?) 으로 계속 진행하여, 코히어런스 관리자 (116) 는 수신된 현재 값을 변수에 대한 기대 값과 (예컨대, 비교 피쳐 (216) 를 통해) 비교하도록 구성된 로직 및/또는 피쳐들을 포함할 수도 있다. 일부 예들에서는, 동기화 프리미티브 (300) 를 이용할 때와 같이, 변수에 대한 기대 값은 "0" 의 값일 수도 있다. 예를 들어 "0" 의 값은 데이터가 록되지 않는다는 것을 나타낼 수도 있지만, 본 개시물은 데이터가 록되어 있다는 것의 표시로서 "0" 의 값에 한정되지 않는다. 동기화 프리미티브 (300) 의 이용을 포함하는 이러한 예들에서, 현재 값이 "0" 이라면, 현재 값은 "0" 의 기대 값에 매칭하고, 프로세스는 블록 645 로 이동한다. 그렇지 않고, 현재 값이 "1" 이라면, 현재 값은 매칭하지 않고 프로세스는 블록 635 로 이동한다.
일부 예들에서는, 코히어런스 관리자 (116) 는 (예컨대, 비교 피쳐 (216) 를 통해) 메모리 (예컨대, 메모리 (230)) 내의 테이블이 적어도 임시로 변수의 어드레스, 변수에 대한 기대 값을 저장하도록, 또는 역시 적어도 임시로 수신된 현재 값을 저장하도록 유지할 수도 있다. 코히어런스 관리자 (166) 는 두 값들의 비교를 위하여 이 테이블을 이용할 수도 있다.
판정 블록 630 으로부터 블록 635 ("CL" 명령을 지연 또는 계속하여 지연) 로 진행하여, 코히어런스 관리자 (116) 는 처리 요소 (112) 에 의하여 구현되는 "CL" 명령을 지연시키거나 또는 계속하여 지연시킬 수도 있다. 블록 615 에 대해서 위에서 언급된 바와 같이, 처리 요소 (112) 는 동기화 프리미티브의 명령들을 구현하는 것을 계속하여 중지할 수도 있고, 아이들 또는 절전 모드에 진입할 수도 있다. 대안적으로, 처리 요소 (112) 는 동기화 프리미티브의 명령들을 구현하는 것을 중지할 수도 있고, 또한 현재 값이 존재하였고 (판정 블록 610 참조) 현재 값이 기대 값에 매칭하지 않았다면 (판정 블록 630 참조), 아이들 또는 절전 모드에 진입할 수도 있다.
블록 635 부터 판정 블록 640 (현재 값이 갱신?) 으로 계속 진행하여, 코히어런스 관리자 (116) 는 변수에 대한 현재 값에 대한 임의의 갱신들이 처리 요소 (122) 로부터 수신되었는지 여부를 (예컨대, 요청 피쳐 (214) 를 통해) 결정할 수도 있다. 갱신된 현재 값이 수신되었다면, 프로세스는 다시 판정 블록 630 으로 이동한다. 그렇지 않으면, 프로세스는 다시 블록 635 로 이동하고, 조건부 로드 명령에 대한 지연이 유지될 수도 있다.
판정 블록 630 에서 위에서 언급된 바와 같이, 현재 값이 록 변수에 대한 기대 값에 매칭했다면, 프로세스는 블록 645 로 이동한다. 블록 645 ("CL" 명령을 계속함) 에서는, 코히어런스 관리자 (116) 는 변수에 대한 현재 값을 처리 요소 (112) 에 제공 (예컨대, 그 값을 처리 요소 (112) 에 의하여 유지되는 레지스터로 로드) 할 수도 있다. 그러면, 처리 요소 (112) 는 동기화 프리미티브의 다른 명령들을 계속하여 구현할 수도 있고, 프로세스는 끝난다.
도 7 는 본 개시물의 적어도 일부 실시형태들에 따른 예시적인 컴퓨터 프로그램 제품 (700) 의 블록도를 도시한다. 일부 예들에서는, 도 7 에 도시된 바와 같이, 컴퓨터 프로그램 제품 (700) 은 제 1 처리 요소 (예컨대, 처리 요소 (112)) 가 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들을 실행하기 위한 명령들 (704) 을 또한 포함할 수도 있는 신호 보유 매체 (signal bearing medium) (702) 를 포함한다. 명령들 (704) 은, 로직 (예컨대, 코히어런스 로직 (210)) 에 의해 실행될 때, 로직으로 하여금, 멀티쓰레딩된 프로그램의 제 1 쓰레드를 실행하기 위해 제 1 처리 요소에 의해 이용되는 동기화 프리미티브와 연관된 조건부 로드 명령을 구현하도록 할 수도 있다. 또한, 명령들 (704) 은, 로직으로 하여금, 동기화 프리미티브를 이용하기 위한 변수에 대한 현재 값이 제 2 처리 요소에 대한 캐시 메모리 내에 존재하는지 여부를 결정하고, 캐시 메모리 내의 현재 값의 부재에 적어도 기초하여 조건부 로드 명령을 지연시키도록 할 수도 있다. 또한, 명령들 (704) 은, 로직으로 하여금, 현재 값의 부재에 기초하여 코히어런스 요청을 제 2 처리 요소로 포워딩하도록 할 수도 있다. 또한, 명령들 (704) 은, 로직으로 하여금, 코히어런스 요청에 기초하여 제 2 처리 요소로부터 현재 값을 수신하고, 수신된 현재 값을 변수에 대한 기대 값과 비교하도록 할 수도 있다. 그러면, 명령 (704) 은, 로직으로 하여금, 수신된 현재 값과 기대 값의 비교에 기초하여 조건부 로드 명령을 지연시키도록 할 수도 있다.
또한, 도 7 에는, 일부 예들에서, 컴퓨터 제품 (700) 이 하나 이상의 컴퓨터 판독가능 매체 (706), 기록가능 매체 (708) 및 통신 매체 (710) 를 포함할 수 있다는 것이 도시되어 있다. 이러한 요소들 주위의 점선 박스는 신호 보유 매체 (702) 내에 포함되지만 이것에 한정되지는 않는 상이한 타입들의 매체들을 도시한다. 이러한 타입들의 매체들은 로직 (예컨대, 코히어런스 로직 (210)) 에 의해 실행될 명령들 (704) 을 배포 (distribute) 할 수도 있다. 컴퓨터 판독가능 매체 (706) 및 기록가능 매체 (708) 는 가요성 디스크, 하드 디스크 드라이브 (HDD), 콤팩트 디스크 (CD), 디지털 다기능 디스크 (DVD), 디지털 테이프, 컴퓨터 메모리 등을 포함할 수도 있지만 이들에 한정되는 것은 아니다. 통신 매체 (710) 는 디지털 및/또는 아날로그 통신 매체 (예컨대, 광섬유 케이블, 도파관, 유선 통신 링크, 무선 통신 링크 등) 를 포함할 수도 있이지만 이들에 한정되지는 않는다.
도 8 은 본 개시물의 적어도 일부 실시형태들에 따른 예시적인 컴퓨팅 디바이스 (800) 를 예시한다. 일부 예들에서는, 도 1 에 도시된 다중 처리 요소 시스템 (100) 의 적어도 일부 요소들은 컴퓨팅 디바이스 (800) 상에 구현될 수도 있다. 이러한 예들에서는, 컴퓨팅 디바이스 (800) 의 요소들은 제 1 처리 요소에 의해 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들의 실행을 용이하게 하도록 배열 또는 구성될 수도 있다. 가장 기본 구성 (801) 에서, 컴퓨팅 디바이스 (800) 는 통상적으로 적어도 2 개의 프로세서 코어들 (810) 및 시스템 메모리 (820) 를 포함한다. 프로세서 코어들 (810) 과 시스템 메모리 (820) 간의 통신을 위하여 메모리 버스 (830) 가 이용될 수 있다.
원하는 구성에 따라, 프로세서 코어들 (810) 은 마이크로프로세서 (μΡ), 마이크로제어기 (μC), 디지털 신호 프로세서 (digital signal processor, DSP), 또는 이들의 임의의 조합을 포함하지만 이들에 한정되지 않는 임의의 타입일 수 있다. 프로세서 코어들 (810) 은, 하나 이상의 레벨들의 캐싱, 이를 테면 레벨 1 캐시 (811) 및 레벨 2 캐시 (812), 프리미티브 처리 요소 (813), 및 레지스터들 (814) 을 포함할 수도 있다. 처리 요소 (813) 는 산술 로직 유닛 (arithmetic logic unit, ALU), 부동 소수점 유닛 (floating point unit, FPU), 디지털 신호 처리 (digital signal processing, DSP) 코어, 또는 이들의 임의의 조합을 포함할 수 있다. 메모리 제어기 (815) 는 또한 프로세서 코어들 (810) 중에서 하나의 프로세서 코어와 함께 이용될 수 있다.
원하는 구성에 따라, 시스템 메모리 (820) 는 휘발성 메모리 (예컨대 RAM), 비휘발성 메모리 (예컨대 ROM, 플래시 메모리 등) 또는 이들의 임의의 조합을 포함하지만 이들에 한정되지 않는 임의의 타입일 수도 있다. 시스템 메모리 (820) 는 통상적으로 운영 시스템 (821), 하나 이상의 애플리케이션들 (822), 및 프로그램 데이터 (824) 를 포함한다. 애플리케이션 (822) 은, 코히어런스 관리자 (116) 및 도 2 에 도시된 아키텍처에 관하여 설명된 액션들을 포함하거나 또는 도 4 에 도시된 흐름도에 관하여 설명된 액션들을 포함하는, 본 명세서에서 설명된 바와 같은 기능들을 수행하도록 배열되는 명령들 (823) 을 포함한다. 프로그램 데이터 (824) 는 멀티쓰레딩된 프로그램의 쓰레드를 실행하기 위해 동기화 프리미티브를 이용할 때, 명령들 (823) (예컨대, 조건부 로드 명령 또는 조건부 로드 명령의 지연) 을 구현하는데 유용할 수도 있는 동기화 프리미티브 데이터 (825) 를 포함한다. 일부 예들에서는, 애플리케이션 (822) 은, 제 1 처리 요소가 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들을 실행하는 구현들이 여기에 설명한 바와 같이 제공될 수도 있도록 운영 시스템 (821) 상에서 프로그램 데이터 (824) 와 함께 동작하도록 배열될 수 있다. 이러한 설명된 기본 구성은 점선 (801) 내의 그 컴포넌트들에 의하여 도 8 에서 예시된다.
컴퓨팅 디바이스 (800) 는 기본 구성 (801) 과 임의의 요구된 디바이스들 및 인터페이스들 간의 통신들을 용이하게 하는 추가적인 피쳐들 또는 기능성, 및 추가적인 인터페이스들을 가질 수 있다. 예를 들어, 버스/인터페이스 제어기 (840) 가 스토리지 인터페이스 버스 (841) 를 통한 기본 구성 (801) 과 하나 이상의 데이터 스토리지 디바이스들 (850) 간의 통신들을 용이하게 하는데 이용될 수도 있다. 데이터 스토리지 디바이스들 (850) 은 착탈식 스토리지 디바이스들 (851), 비착탈식 스토리지 디바이스들 (852), 또는 이들의 조합일 수도 있다. 착탈식 스토리지 및 비착탈식 스토리지 디바이스들의 예들은, 몇 가지를 명명하자면 가요성 디스크 드라이브들 및 하드 디스크 드라이브들 (hard-disk drives, HDD) 과 같은 자기 디스크 디바이스들, 콤팩트 디스크 (compact disk, CD) 드라이브들 또는 디지털 다기능 디스크 (digital versatile disk, DVD) 드라이브들과 같은 광학 디스크 드라이브들, 솔리드 스테이트 드라이브들 (solid state drives, SSD), 및 테이프 드라이브들을 포함한다. 예시적인 컴퓨터 저장 매체들은, 컴퓨터 판독가능 명령들, 데이터 구조들, 프로그램 모듈들, 또는 다른 데이터와 같은 정보의 저장을 위한 임의의 방법 또는 기술로 구현된 휘발성 및 비휘발성, 착탈식 및 비착탈식 매체들을 포함할 수도 있다.
시스템 메모리 (820), 착탈식 스토리지 (851) 및 비착탈식 스토리지 (852) 는 모두 컴퓨터 저장 매체들의 예들이다. 컴퓨터 저장 매체들은 RAM, ROM, EEPROM, 플래시 메모리 또는 다른 메모리 기술, CD-ROM, 디지털 다기능 디스크들 (DVD) 또는 다른 광학 스토리지, 자기 카세트, 자기 테이프, 자기 디스크 스토리지 또는 다른 자기 스토리지 디바이스들, 또는 원하는 정보를 저장하는데 이용될 수 있고 컴퓨팅 디바이스 (800) 에 의해 액세스될 수 있는 임의의 다른 매체를 포함하는데, 이들에 한정되지는 않는다. 임의의 이러한 컴퓨터 스토리지 매체들은 컴퓨팅 디바이스 (800) 의 일부일 수도 있다.
컴퓨팅 디바이스 (800) 는 또한, 버스/인터페이스 제어기 (840) 를 통한 다양한 인터페이스 디바이스들 (예컨대, 출력 인터페이스들, 주변 인터페이스들, 및 통신 인터페이스들) 로부터 기본 구성 (801) 으로의 통신을 용이하게 하기 위한 인터페이스 버스 (842) 를 포함할 수도 있다. 예시적인 출력 인터페이스들 (860) 은 그래픽 처리 유닛 (graphics processing unit) (861) 및 오디오 처리 유닛 (862) 을 포함하는데, 이들은 디스플레이 또는 스피커들과 같은 여러 외부 디바이스들과 하나 이상의 A/V 포트들 (863) 을 통해 통신하도록 구성될 수 있다. 예시적인 주변 인터페이스들 (860) 은 직렬 인터페이스 제어기 (871) 또는 병렬 인터페이스 제어기 (872) 를 포함하는데, 이들은 입력 디바이스들 (예컨대, 키보드, 마우스, 펜, 보이스 입력 디바이스, 터치 입력 디바이스 등) 또는 다른 주변 디바이스들 (예컨대, 프린터, 스캐너 등) 과 같은 외부 디바이스들과 하나 이상의 I/O 포트들 (873) 을 통해 통신하도록 구성될 수 있다. 예시적인 통신 인터페이스들 (880) 은 네트워크 제어기 (881) 를 포함하는데, 이것은 네트워크 통신을 통해 하나 이상의 통신 포트들 (882) 을 경유하여 하나 이상의 다른 컴퓨팅 디바이스들 (890) 과의 통신을 용이하게 하도록 배열될 수 있다. 네트워크 통신 접속은 통신 매체들의 일 예이다. 통신 매체들은 통상적으로 컴퓨터 판독가능 명령들, 데이터 구조들, 프로그램 모듈들, 또는 예컨대 반송파 또는 다른 전송 메커니즘과 같은 변조된 데이터 신호 내의 다른 데이터에 의해 구현될 (embodied) 수도 있으며, 임의의 정보 전달 매체들을 포함한다. "변조된 데이터 신호" 는 신호 내에 정보를 인코딩하도록 하는 방식으로 설정 또는 변경된 그 특성들 중 하나 이상을 갖는 신호일 수 있다. 한정이 아닌 일 예로, 통신 매체들은 유선 네트워크 또는 직접 유선 접속과 같은 유선 매체들, 및 음향, 라디오 주파수 (RF), 적외선 (IR) 및 다른 무선 매체들과 같은 무선 매체들을 포함할 수 있다. 본 명세서에서 사용된 바와 같은 컴퓨터 판독가능 매체들이라는 용어는 스토리지 매체들 및 통신 매체들 양자를 포함할 수도 있다.
컴퓨팅 디바이스 (800) 는 셀 폰, 스마트 폰, 개인휴대 정보단말 (personal data assistant, PDA), 개인용 미디어 플레이어 디바이스, 무선 웹 감시 디바이스, 개인용 헤드셋 디바이스, 애플리케이션 특화 디바이스, 또는 상기 기능들 중 임의의 것을 포함하는 하이브리드 디바이스와 같은 소형-폼 팩터 (small-form factor) 휴대형 (또는 모바일) 전자 디바이스의 일부로서 구현될 수 있다. 컴퓨팅 디바이스 (800) 는 또한 랩탑 컴퓨터 및 비랩탑 컴퓨터 구성들 양자를 포함하는 개인용 컴퓨터로서 구현되거나 또는 워크스테이션 또는 서버 구성으로 구현될 수 있다.
본 개시물에서 용어 "~ 에 응답하는 (responsive to)" 또는 "~ 에 응답하여 (in response to)" 에 대한 참조는, 특정 피쳐 및/또는 구조에 대한 응답성에 한정되지 않는다. 피쳐는 다른 피쳐 및/또는 구조에 응답할 수도 있고, 또한 그 피쳐 및/또는 구조 내에 위치할 수도 있다. 더욱이, "커플링된" 또는 "응답한 (responsive)" 또는 "~ 에 응답하여 (in response to)" 또는 "~ 과 통신하여 (in communication with)" 등과 같은 용어들 또는 어구들이 여기에서, 또는 다음에 오는 청구항들에서 이용될 때, 이러한 용어들은 넓게 해석되어야 한다. 예를 들어, "~ 에 커플링된" 이라는 어구는 그 어구가 이용되는 문맥에 적합하도록 통신적으로, 전기적으로, 및/또는 동작적으로 커플링되는 것을 지칭할 수도 있다.
당업자들은 본 명세서에서 언급된 방식으로 디바이스들 및/또는 프로세스들을 설명하고, 이후에는 이와 같은 설명된 디바이스들 (예컨대, 처리 요소들, 프로세서 코어들, 컴퓨팅 플랫폼들, 컴퓨팅 디바이스들 등) 및/또는 방법들을 데이터 처리 시스템들 내에 통합하기 위한 공학적 실무들을 이용하는 것이 당업계 내에서는 공통적이라는 것을 인식할 것이다. 즉, 본 명세서에서 설명되는 디바이스들 및/또는 방법들의 적어도 일부는 합당한 양의 실험을 통해 데이터 처리 시스템 내에 통합될 수 있다. 당업자들은 통상의 데이터 처리 시스템이 일반적으로 시스템 유닛 하우징, 비디오 디스플레이 디바이스, 휘발성 및 비휘발성 메모리와 같은 메모리, 마이크로프로세서들 및 디지털 신호 프로세서들과 같은 프로세서들, 운영 시스템들, 드라이버들, 그래픽 사용자 인터페이스들, 및 애플리케이션 프로그램들과 같은 컴퓨테이션 엔티티들, 터치 패드 또는 스크린과 같은 하나 이상의 상호작용 디바이스들, 및/또는 피드백 루프들 및 제어 모터들 (예컨대, 포지션 및/또는 속도를 감지하기 위한 피드백; 컴포넌트들 및/또는 양들을 이동 및/또는 조정시키기 위한 제어 모터들) 을 포함하는 제어 시스템들 중 하나 이상을 포함한다는 것을 인식할 것이다. 통상의 데이터 처리 시스템은 데이터 컴퓨팅/통신 및/또는 네트워크 컴퓨팅/통신 시스템들 내에서 통상적으로 발견되는 것과 같은 임의의 적합한 상업상 이용가능한 컴포넌트를 이용하여 구현될 수도 있다.
본 명세서에서 설명된 기술요지는 때로는 상이한 다른 컴포넌트들 또는 요소들 내에 포함되거나 또는 그들과 접속된 상이한 컴포넌트들 또는 요소들을 예시한다. 이와 같이 도시되는 아키텍쳐들은 단지 예시적인 것일 뿐이며, 사실상 동일한 기능성을 획득하는 많은 다른 아키텍쳐들이 구현될 수 있다는 것이 이해될 것이다. 개념적으로는, 동일한 기능성을 획득하는 컴포넌트들의 임의의 배열은, 원하는 기능성이 달성되도록 효과적으로 "연관" 된다. 따라서, 본 명세서에서 특정 기능성을 획득하기 위하여 결합된 임의의 2 개의 컴포넌트들은, 아키텍쳐들 또는 중간 컴포넌트들과 무관하게, 원하는 기능성이 획득되도록 서로 "연관" 되는 것으로 간주될 수 있다. 이와 유사하게, 이와 같이 연관되는 임의의 2 개의 컴포넌트들은 원하는 기능성을 획득하기 위하여 서로에 대해 "동작적으로 접속된" 또는 "동작적으로 커플링된" 것으로 보여질 수 있으며, 이와 같이 연관될 수 있는 임의의 2 개의 컴포넌트들은 또한 원하는 기능성을 획득하기 위하여 서로에 대해 "동작적으로 커플링가능한" 것으로 보여질 수 있다. 동작적으로 커플링가능한 것의 특정 예들은 물리적으로 결합가능한 (mateable) 및/또는 물리적으로 상호작용하는 컴포넌트들 및/또는 무선으로 상호작용가능한 및/또는 무선으로 상호작용하는 컴포넌트들 및/또는 논리적으로 상호작용하는 및/또는 논리적으로 상호작용가능한 컴포넌트들을 포함하지만 이들에 한정되는 것은 아니다.
본 명세서에서의 실질적으로 임의의 복수 및/또는 단수 용어들을 이용하는 것과 관련하여, 당업자는 문맥 및/또는 명세서에 적합하도록 복수에서 단수로 및/또는 단수에서 복수로 해석할 수 있다. 다양한 단수/복수 치환은 명료함을 위해 본 명세서에 명확하게 기술될 수도 있다.
일반적으로, 본 명세서에서 그리고 특히 첨부된 청구항들 (예를 들어, 첨부된 청구항들의 본문) 에서 사용되는 용어는 일반적으로 "개방적인" 용어들 (예를 들어, "포함하는" 이라는 용어는 "포함하지만 한정되지 않는" 으로 해석되어야 하고, "갖는" 이라는 용어는 "적어도 갖는" 으로 해석되어야 하고, "포함한다" 라는 용어는 "포함하지만 한정되지는 않는다" 로 해석되어야 한다, 등등) 로서 의도된다는 것이 당업자에 의해 이해될 것이다. 또한, 도입된 청구항 기재의 구체적 수가 의도되는 경우, 이러한 의도는 청구항에 명시적으로 기재될 것이며, 이러한 기재의 부재 시에는 그러한 의도가 없다는 것이 당업자에 의해 이해될 것이다. 예를 들어, 이해를 돕기 위하여, 다음의 첨부된 청구항들은 청구항 기재를 도입하기 위해 "적어도 하나" 및 "하나 이상" 의 서두 어구의 사용을 포함할 수도 있다. 그러나, 이러한 어구의 사용은, 동일 청구항이 서두 어구 "하나 이상" 또는 "적어도 하나" 및 "a" 또는 "an" 과 같은 부정관사 (예를 들어, "a" 및/또는 "an" 은 통상적으로 "적어도 하나" 또는 "하나 이상" 을 의미하도록 해석되어야 한다) 를 포함할 때에도, 부정관사 "a" 또는 "an" 에 의한 청구항 기재의 도입이 이렇게 도입된 청구항 기재를 포함하는 임의의 특정 청구항을 하나의 이러한 기재만을 포함하는 발명들로 한정한다는 것을 내포하는 것으로 해석되어서는 안되며; 청구항 기재를 도입하는데 사용되는 정관사의 사용에 대해서도 동일하게 유효하다. 또한, 도입되는 청구항 기재의 구체적 수가 명시적으로 기재되는 경우에도, 당업자는 이러한 기재가 적어도 기재된 수 (예를 들어, 다른 수식어 없이, "2 개의 기재" 에 대한 그대로의 기재는, 통상적으로 적어도 2 개의 기재들 또는 2 개 이상의 기재들을 의미한다) 를 의미하는 것으로 해석되어야 한다는 것을 인식할 것이다. 또한, "A, B 및 C 중 적어도 하나 등" 과 유사한 관례가 사용되는 경우에서, 일반적으로 이러한 구성은 당업자가 그 관례를 이해할 것이라는 의미로 의도된다 (예를 들어, "A, B 및 C 중 적어도 하나를 갖는 시스템" 은 A 만을, B 만을, C 만을, A 와 B 를 함께, A 와 C 를 함께, B 와 C 를 함께, 및/또는 A, B 및 C 를 함께 등을 갖는 시스템을 포함하지만 이들로 한정되지는 않을 것이다). "A, B 또는 C 중 적어도 하나 등" 과 유사한 관례가 사용되는 경우에서, 일반적으로 이러한 구성은 당업자가 그 관례를 이해할 것이라는 의미로 의도된다 (예를 들어, "A, B 또는 C 중 적어도 하나를 갖는 시스템" 은 A 만을, B 만을, C 만을, A 및 B 를 함께, A 및 C 를 함께, B 및 C 를 함께, 및/또는 A, B 및 C 를 함께 갖는 시스템 등을 포함하지만 이들로 한정되지는 않을 것이다). 또한, 상세한 설명, 청구항들 또는 도면들에서, 2 개 이상의 택일적 용어를 제시하는 사실상 임의의 이접 단어 및/또는 어구는 용어들 중 하나, 용어들 중 어느 하나 또는 양자의 용어 모두를 포함할 가능성들을 고려하도록 이해되어야 한다는 것이 당업자에 의해 이해될 것이다. 예를 들어, 어구 "A 또는 B" 는 "A" 또는 "B" 또는 "A 및 B" 의 가능성을 포함하도록 이해될 것이다.
본 명세서에서 다양한 양태들 및 실시형태들이 개시되었으나, 당업자에게는 다른 양태들 및 실시형태들이 명백할 것이다. 본 명세서에 개시된 다양한 양태들 및 실시형태들은 예시를 위한 것이고 한정하는 것으로 의도되지 않으며, 진정한 범위 및 사상이 다음의 청구항에 의해 나타난다.

Claims (36)

  1. 제 1 처리 요소가 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들을 실행하는 방법으로서,
    상기 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들을 실행하기 위해 상기 제 1 처리 요소에 의해 이용되는 동기화 프리미티브 (synchronization primitive) 와 연관된 조건부 로드 명령 (conditional load instruction) 을 구현하는 단계;
    상기 동기화 프리미티브를 이용하기 위한 변수에 대한 현재 값이 상기 제 1 처리 요소에 대한 캐시 메모리 내에 있는지 여부를 결정하는 단계;
    상기 캐시 메모리 내의 상기 현재 값의 부재에 적어도 기초하여 상기 조건부 로드 명령을 지연 (stall) 시키는 단계;
    상기 현재 값의 부재에 적어도 기초하여 제 2 처리 요소로 코히어런스 요청을 포워딩하는 단계;
    상기 코히어런스 요청에 적어도 기초하여 상기 제 2 처리 요소로부터 상기 현재 값을 수신하는 단계;
    상기 수신된 현재 값을 상기 변수에 대한 기대 값과 비교하는 단계; 및
    상기 비교에 적어도 기초하여 상기 조건부 로드 명령을 계속하여 지연시키는 단계를 포함하는, 하나 이상의 쓰레드들을 실행하는 방법.
  2. 제 1 항에 있어서,
    상기 조건부 로드 명령을 계속하여 지연시키는 단계는, 상기 제 1 처리 요소에 상기 변수에 대한 상기 현재 값을 알리지 않는 (withhold) 단계를 포함하는, 하나 이상의 쓰레드들을 실행하는 방법.
  3. 제 1 항에 있어서,
    상기 비교에 적어도 기초하여 상기 조건부 로드 명령을 계속하여 지연시키는 단계는, 상기 수신된 현재 값이 상기 기대 값에 매칭하지 않는 것에 적어도 기초하여 상기 조건부 로드 명령을 계속하여 지연시키는 단계를 포함하는, 하나 이상의 쓰레드들을 실행하는 방법.
  4. 제 1 항에 있어서,
    상기 제 1 처리 요소를 절전 모드 (power saving mode) 로 트랜지션하는 단계를 더 포함하며,
    상기 절전 모드는, 상기 제 1 처리 요소에 제공된 전압의 저하, 상기 제 1 처리 요소의 주파수의 저하, 상기 제 1 처리 요소의 클록 게이팅 (clock gating), 상기 제 1 처리 요소의 전력 게이팅 (power gating), 또는 체크포인팅 상태 (checkpointing state) 로의 진입 중 적어도 하나를 포함하는, 하나 이상의 쓰레드들을 실행하는 방법.
  5. 제 1 항에 있어서,
    상기 변수에 대한 갱신된 현재 값을 수신하는 단계;
    상기 수신된 갱신된 현재 값을 상기 기대 값과 비교하는 단계; 및
    상기 비교에 적어도 기초하여 상기 조건부 로드 명령에 대한 지연을 제거하는 단계를 더 포함하는, 하나 이상의 쓰레드들을 실행하는 방법.
  6. 제 5 항에 있어서,
    상기 동기화 프리미티브는 상기 제 1 처리 요소가 상기 멀티쓰레딩된 프로그램의 상기 하나 이상의 쓰레드들 중 제 1 쓰레드를 실행하는 록 동기화 (lock synchronization) 를 포함하는, 하나 이상의 쓰레드들을 실행하는 방법.
  7. 제 6 항에 있어서,
    상기 동기화 프리미티브를 이용하기 위한 상기 변수는 상기 제 1 쓰레드를 실행하기 위해 상기 제 1 처리 요소에 의해 이용되는 데이터와 연관된 록 변수를 포함하고, 상기 조건부 로드 명령에 대한 지연을 제거하는 단계는 상기 갱신된 현재 값을 상기 캐시 메모리 내에 저장하여 상기 갱신된 현재 값을 상기 제 1 처리 요소에 제공하는 단계를 포함하며,
    상기 제 1 처리 요소는 상기 갱신된 현재 값에 적어도 기초하여 상기 멀티쓰레딩된 프로그램의 상기 제 1 쓰레드를 실행하는데 이용되는 상기 데이터 상의 록을 획득하려고 시도하는, 하나 이상의 쓰레드들을 실행하는 방법.
  8. 제 5 항에 있어서,
    상기 동기화 프리미티브는 상기 제 1 처리 요소가 상기 멀티쓰레딩된 프로그램의 상기 하나 이상의 쓰레드들을 실행하는 배리어 동기화 (barrier synchronization) 를 포함하는, 하나 이상의 쓰레드들을 실행하는 방법.
  9. 제 8 항에 있어서,
    상기 동기화 프리미티브를 이용하기 위한 상기 변수는 상기 하나 이상의 쓰레드들을 실행하기 위한 배리어 완료 (barrier completion) 와 연관된 카운트 변수를 포함하고, 상기 조건부 로드 명령에 대한 지연을 제거하는 단계는 상기 갱신된 현재 값을 상기 캐시 메모리 내에 저장하여 상기 갱신된 현재 값을 상기 제 1 처리 요소에 제공하는 단계를 포함하며,
    상기 제 1 처리 요소는 상기 갱신된 현재 값에 적어도 기초하여 상기 하나 이상의 쓰레드들을 실행하는, 하나 이상의 쓰레드들을 실행하는 방법.
  10. 제 5 항에 있어서,
    상기 동기화 프리미티브는 상기 제 1 처리 요소가 상기 멀티쓰레딩된 프로그램의 상기 하나 이상의 쓰레드들을 실행하는 신호-대기 동기화 (signal-wait synchronization) 를 포함하는, 하나 이상의 쓰레드들을 실행하는 방법.
  11. 제 10 항에 있어서,
    상기 동기화 프리미티브를 이용하기 위한 상기 변수는 상기 하나 이상의 쓰레드들을 실행하기 위한 대기 표시 (wait indication) 와 연관된 플래그 변수를 포함하고, 상기 조건부 로드 명령에 대한 지연을 제거하는 단계는 상기 갱신된 현재 값을 상기 캐시 메모리 내에 저장하여 상기 갱신된 현재 값을 상기 제 1 처리 요소에 제공하는 단계를 포함하며,
    상기 제 1 처리 요소는 상기 갱신된 현재 값에 적어도 기초하여 상기 하나 이상의 쓰레드들을 실행하는, 하나 이상의 쓰레드들을 실행하는 방법.
  12. 제 5 항에 있어서,
    상기 비교에 적어도 기초하여 상기 조건부 로드 명령에 대한 지연을 제거하는 단계는, 상기 수신된 갱신된 현재 값이 상기 기대 값에 매칭하는 것에 적어도 기초하여 상기 지연을 제거하는 단계를 포함하는, 하나 이상의 쓰레드들을 실행하는 방법.
  13. 제 1 항에 있어서,
    상기 코히어런스 요청을 포워딩하는 단계는, 상기 제 1 처리 요소와 연관된 코히어런스 관리자를 통해 상기 코히어런스 요청을 포워딩하는 단계를 포함하는, 하나 이상의 쓰레드들을 실행하는 방법.
  14. 제 13 항에 있어서,
    상기 수신된 현재 값을 상기 기대 값과 비교하는 단계는, 상기 코히어런스 관리자에게 액세스가능한 메모리 내에 유지된 테이블 내에 상기 현재 값과 상기 기대 값 양자를 기록하는 단계를 포함하는, 하나 이상의 쓰레드들을 실행하는 방법.
  15. 제 1 항에 있어서,
    상기 제 1 처리 요소 및 상기 제 2 처리 요소는 멀티-코어 프로세서의 개별 코어들인, 하나 이상의 쓰레드들을 실행하는 방법.
  16. 제 1 처리 요소에 의한 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들의 실행을 용이하게 하기 위한 장치로서,
    상기 제 1 처리 요소는 제 1 쓰레드를 실행하기 위해 상기 제 1 처리 요소에 의해 이용되는 동기화 프리미티브 (synchronization primitive) 와 연관된 조건부 로드 명령 (conditional load instruction) 을 구현하기 위한 것이며,
    상기 장치는 코히어런스 관리자를 포함하며,
    상기 코히어런스 관리자는 :
    상기 동기화 프리미티브를 이용하기 위한 변수에 대한 현재 값이 상기 제 1 처리 요소에 대한 캐시 메모리 내에 있는지 여부를 결정하고;
    상기 캐시 메모리 내의 상기 현재 값의 부재에 적어도 기초하여 상기 조건부 로드 명령을 지연 (stall) 시키고;
    상기 현재 값의 부재에 적어도 기초하여 제 2 처리 요소로 코히어런스 요청을 포워딩하고;
    상기 코히어런스 요청에 적어도 기초하여 상기 제 2 처리 요소로부터 상기 현재 값을 수신하고;
    상기 수신된 현재 값을 상기 변수에 대한 기대 값과 비교하며;
    상기 비교에 적어도 기초하여 상기 조건부 로드 명령을 계속하여 지연시키도록 구성된 로직을 갖는, 하나 이상의 쓰레드들의 실행을 용이하게 하기 위한 장치.
  17. 제 16 항에 있어서,
    상기 조건부 로드 명령을 지연시키는 것은, 상기 제 1 처리 요소에 상기 변수에 대한 상기 현재 값을 알리지 않도록 (withhold) 더욱 구성된 로직을 포함하는, 하나 이상의 쓰레드들의 실행을 용이하게 하기 위한 장치.
  18. 제 16 항에 있어서,
    상기 비교에 적어도 기초하여 상기 조건부 로드 명령을 계속하여 지연시키는 것은, 상기 수신된 현재 값이 상기 기대 값에 매칭하지 않는 것에 적어도 기초하여 상기 조건부 로드 명령을 계속하여 지연시키도록 더욱 구성된 로직을 포함하는, 하나 이상의 쓰레드들의 실행을 용이하게 하기 위한 장치.
  19. 제 16 항에 있어서,
    상기 코히어런스 요청을 포워딩하는 것은, 상기 제 1 처리 요소와 연관된 코히어런스 제어기를 통해 상기 코히어런스 요청을 포워딩하도록 구성된 로직을 포함하는, 하나 이상의 쓰레드들의 실행을 용이하게 하기 위한 장치.
  20. 제 16 항에 있어서,
    상기 제 1 처리 요소 및 상기 제 2 처리 요소는 멀티-코어 프로세서의 개별 코어들인, 하나 이상의 쓰레드들의 실행을 용이하게 하기 위한 장치.
  21. 제 16 항에 있어서,
    상기 변수에 대한 갱신된 현재 값을 수신하고;
    상기 수신된 갱신된 현재 값을 상기 기대 값과 비교하며;
    상기 비교에 적어도 기초하여 상기 조건부 로드 명령에 대한 지연을 제거하도록 구성된 로직을 더 포함하는, 하나 이상의 쓰레드들의 실행을 용이하게 하기 위한 장치.
  22. 제 21 항에 있어서,
    상기 동기화 프리미티브는 상기 제 1 처리 요소가 상기 멀티쓰레딩된 프로그램의 상기 하나 이상의 쓰레드들을 실행하는 배리어 동기화 (barrier synchronization) 를 포함하는, 하나 이상의 쓰레드들의 실행을 용이하게 하기 위한 장치.
  23. 제 22 항에 있어서,
    상기 동기화 프리미티브를 이용하기 위한 상기 변수는 상기 하나 이상의 쓰레드들을 실행하기 위한 배리어 완료 (barrier completion) 와 연관된 카운트 변수를 포함하고, 상기 조건부 로드 명령에 대한 지연을 제거하도록 구성된 로직은 상기 갱신된 현재 값을 상기 캐시 메모리 내에 저장하여 상기 갱신된 현재 값을 상기 제 1 처리 요소에 제공하기 위한 로직을 포함하며,
    상기 제 1 처리 요소는 상기 갱신된 현재 값에 적어도 기초하여 상기 하나 이상의 쓰레드들을 실행하는, 하나 이상의 쓰레드들의 실행을 용이하게 하기 위한 장치.
  24. 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들을 실행하기 위한 시스템으로서,
    상기 멀티쓰레딩된 프로그램의 제 1 쓰레드를 실행하기 위한 제 1 처리 요소; 및
    상기 멀티쓰레딩된 프로그램의 제 2 쓰레드를 실행하기 위한 제 2 처리 요소를 포함하며,
    상기 제 2 처리 요소는 캐시 메모리 및 코히어런스 관리자를 포함하고, 상기 제 2 처리 요소는 상기 제 2 쓰레드를 실행하기 위해 상기 제 2 처리 요소에 의해 이용되는 동기화 프리미티브 (synchronization primitive) 와 연관된 조건부 로드 명령 (conditional load instruction) 을 구현하기 위한 것이며,
    상기 코히어런스 관리자는 :
    상기 동기화 프리미티브를 이용하기 위한 변수에 대한 현재 값이 상기 제 2 처리 요소에 대한 상기 캐시 메모리 내에 있는지 여부를 결정하고;
    상기 캐시 메모리 내의 상기 현재 값의 부재에 적어도 기초하여 상기 조건부 로드 명령을 지연 (stall) 시키고;
    상기 현재 값의 부재에 적어도 기초하여 상기 제 1 처리 요소로 코히어런스 요청을 포워딩하고;
    상기 코히어런스 요청에 적어도 기초하여 상기 제 1 처리 요소로부터 상기 현재 값을 수신하고;
    상기 수신된 현재 값을 상기 변수에 대한 기대 값과 비교하며;
    상기 비교에 적어도 기초하여 상기 조건부 로드 명령을 계속하여 지연시키도록 구성된 로직을 포함하는, 시스템.
  25. 제 24 항에 있어서,
    상기 조건부 로드 명령을 계속하여 지연시키는 것은, 상기 제 2 처리 요소에 상기 변수에 대한 상기 현재 값을 알리지 않는 (withhold) 것을 포함하는, 시스템.
  26. 제 24 항에 있어서,
    상기 비교에 적어도 기초하여 상기 조건부 로드 명령을 지연시키는 것은, 상기 수신된 현재 값이 상기 기대 값에 매칭하지 않는 것에 적어도 기초하여 상기 조건부 로드 명령을 지연시키도록 구성된 로직을 포함하는, 시스템.
  27. 제 24 항에 있어서,
    상기 제 2 처리 요소를 절전 모드 (power saving mode) 로 트랜지션하도록 구성된 로직을 더 포함하며,
    상기 절전 모드는, 상기 제 2 처리 요소에 제공된 전압의 저하, 상기 제 2 처리 요소의 주파수의 저하, 상기 제 2 처리 요소의 클록 게이팅 (clock gating), 상기 제 2 처리 요소의 전력 게이팅 (power gating), 또는 체크포인팅 상태 (checkpointing state) 로의 진입 중 적어도 하나를 포함하는, 시스템.
  28. 제 24 항에 있어서,
    상기 제 1 처리 요소로부터 상기 변수에 대한 갱신된 현재 값을 수신하고;
    상기 수신된 갱신된 현재 값을 상기 기대 값과 비교하며;
    상기 비교에 적어도 기초하여 상기 조건부 로드 명령에 대한 지연을 제거하도록 구성된 로직을 더 포함하는, 시스템.
  29. 제 28 항에 있어서,
    상기 동기화 프리미티브는 상기 제 2 처리 요소가 상기 멀티쓰레딩된 프로그램의 상기 하나 이상의 쓰레드들을 실행하는 록 동기화 (lock synchronization) 를 포함하는, 시스템.
  30. 제 29 항에 있어서,
    상기 동기화 프리미티브를 이용하기 위한 상기 변수는 상기 제 1 쓰레드를 실행하기 위해 상기 제 2 처리 요소에 의해 이용되는 데이터와 연관된 록 변수를 포함하고, 상기 조건부 로드 명령에 대한 지연을 제거하도록 구성된 로직은 상기 갱신된 현재 값을 상기 캐시 메모리 내에 저장하여 상기 갱신된 현재 값을 상기 제 2 처리 요소에 제공하기 위한 로직을 포함하며,
    상기 제 2 처리 요소는 상기 갱신된 현재 값에 적어도 기초하여 상기 멀티쓰레딩된 프로그램의 상기 제 2 쓰레드를 실행하는데 이용되는 상기 데이터 상의 록을 획득하려고 시도하는, 시스템.
  31. 처리 요소가 멀티쓰레딩된 프로그램의 하나 이상의 쓰레드들을 실행하기 위한 명령들을 갖는 신호 보유 매체를 포함하는 컴퓨터 프로그램 제품으로서,
    상기 명령들은, 로직에 의해 실행될 때, 상기 로직으로 하여금 :
    상기 멀티쓰레딩된 프로그램의 제 1 쓰레드를 실행하기 위해 제 1 처리 요소에 의해 이용되는 동기화 프리미티브 (synchronization primitive) 와 연관된 조건부 로드 명령 (conditional load instruction) 을 구현하도록 하고;
    상기 동기화 프리미티브를 이용하기 위한 변수에 대한 현재 값이 상기 제 1 처리 요소에 대한 캐시 메모리 내에 있는지 여부를 결정하도록 하고;
    상기 캐시 메모리 내의 상기 현재 값의 부재에 적어도 기초하여 상기 조건부 로드 명령을 지연 (stall) 시키도록 하고;
    상기 현재 값의 부재에 적어도 기초하여 제 2 처리 요소로 코히어런스 요청을 포워딩하도록 하고;
    상기 코히어런스 요청에 적어도 기초하여 상기 제 2 처리 요소로부터 상기 현재 값을 수신하도록 하고;
    상기 수신된 현재 값을 상기 변수에 대한 기대 값과 비교하도록 하며;
    상기 비교에 적어도 기초하여 상기 조건부 로드 명령을 계속하여 지연시키도록 하는, 신호 보유 매체를 포함하는 컴퓨터 프로그램 제품.
  32. 제 31 항에 있어서,
    상기 조건부 로드 명령을 계속하여 지연시키는 것은, 상기 제 1 처리 요소에 상기 변수에 대한 상기 현재 값을 알리지 않기 (withhold) 위한 로직을 포함하는, 신호 보유 매체를 포함하는 컴퓨터 프로그램 제품.
  33. 제 31 항에 있어서,
    상기 비교에 적어도 기초하여 상기 조건부 로드 명령을 계속하여 지연시키는 것은, 상기 수신된 현재 값이 상기 기대 값에 매칭하지 않는 것에 적어도 기초하여 상기 조건부 로드 명령을 지연시키기 위한 로직을 포함하는, 신호 보유 매체를 포함하는 컴퓨터 프로그램 제품.
  34. 제 31 항에 있어서,
    상기 로직으로 하여금 :
    상기 변수에 대한 갱신된 현재 값을 수신하도록 하고;
    상기 수신된 갱신된 현재 값을 상기 기대 값과 비교하도록 하며;
    상기 비교에 적어도 기초하여 상기 조건부 로드 명령에 대한 지연을 제거하도록 하기 위한 명령들을 더 포함하는, 신호 보유 매체를 포함하는 컴퓨터 프로그램 제품.
  35. 제 34 항에 있어서,
    상기 동기화 프리미티브는 상기 제 1 처리 요소가 상기 멀티쓰레딩된 프로그램의 상기 하나 이상의 쓰레드들을 실행하는 신호-대기 동기화 (signal-wait synchronization) 를 포함하는, 신호 보유 매체를 포함하는 컴퓨터 프로그램 제품.
  36. 제 35 항에 있어서,
    상기 동기화 프리미티브를 이용하기 위한 상기 변수는, 상기 하나 이상의 쓰레드들을 실행하기 위한 대기 표시 (wait indication) 와 연관된 플래그 변수를 포함하고, 상기 로직으로 하여금, 상기 조건부 로드 명령에 대한 지연을 제거하도록 하기 위한 명령들은, 상기 갱신된 현재 값을 상기 캐시 메모리 내에 저장하여 상기 갱신된 현재 값을 상기 제 1 처리 요소에 제공하기 위한 로직을 포함하며,
    상기 제 1 처리 요소는 상기 갱신된 현재 값에 적어도 기초하여 상기 하나 이상의 쓰레드들을 실행하는, 신호 보유 매체를 포함하는 컴퓨터 프로그램 제품.
KR1020127032497A 2010-10-19 2010-10-19 멀티쓰레딩된 프로그램의 저전력 실행 KR101467072B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2010/053183 WO2012054020A1 (en) 2010-10-19 2010-10-19 Low power execution of a multithreaded program

Publications (2)

Publication Number Publication Date
KR20130036252A true KR20130036252A (ko) 2013-04-11
KR101467072B1 KR101467072B1 (ko) 2014-12-01

Family

ID=45935130

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020127032497A KR101467072B1 (ko) 2010-10-19 2010-10-19 멀티쓰레딩된 프로그램의 저전력 실행

Country Status (4)

Country Link
US (2) US8589933B2 (ko)
KR (1) KR101467072B1 (ko)
CN (1) CN102971708B (ko)
WO (1) WO2012054020A1 (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150027468A1 (en) * 2013-07-25 2015-01-29 Altria Client Services Inc. Electronic smoking article
CN104572275B (zh) * 2013-10-23 2017-12-29 华为技术有限公司 一种进程加载方法、装置及系统
US10146595B2 (en) 2014-10-20 2018-12-04 Mediatek Inc. Computer system for notifying signal change event through cache stashing
US10185564B2 (en) * 2016-04-28 2019-01-22 Oracle International Corporation Method for managing software threads dependent on condition variables
CN106406928B (zh) * 2016-08-24 2019-08-09 北京奇艺世纪科技有限公司 一种软件热插拔方法及系统
US10426198B2 (en) * 2016-10-31 2019-10-01 Altria Client Services Llc Electrical connector for an electronic vaping device
CN111143065B (zh) * 2019-12-25 2023-08-22 杭州安恒信息技术股份有限公司 一种数据处理方法、装置、设备及介质

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070074217A1 (en) * 2005-09-26 2007-03-29 Ryan Rakvic Scheduling optimizations for user-level threads
US7587555B2 (en) * 2005-11-10 2009-09-08 Hewlett-Packard Development Company, L.P. Program thread synchronization
US20070271450A1 (en) 2006-05-17 2007-11-22 Doshi Kshitij A Method and system for enhanced thread synchronization and coordination
US7739455B2 (en) * 2007-06-22 2010-06-15 Mips Technologies, Inc. Avoiding livelock using a cache manager in multiple core processors
US8612929B2 (en) * 2008-12-10 2013-12-17 Oracle America, Inc. Compiler implementation of lock/unlock using hardware transactional memory
US8095739B2 (en) * 2009-04-13 2012-01-10 International Business Machines Corporation Barriers processing in a multiprocessor system having a weakly ordered storage architecture without broadcast of a synchronizing operation

Also Published As

Publication number Publication date
KR101467072B1 (ko) 2014-12-01
CN102971708A (zh) 2013-03-13
US20140026148A1 (en) 2014-01-23
US20120096239A1 (en) 2012-04-19
US8589933B2 (en) 2013-11-19
US9342305B2 (en) 2016-05-17
CN102971708B (zh) 2016-08-10
WO2012054020A1 (en) 2012-04-26

Similar Documents

Publication Publication Date Title
KR101467072B1 (ko) 멀티쓰레딩된 프로그램의 저전력 실행
US9720488B2 (en) Apparatus, method, and system for early deep sleep state exit of a processing element
US9626187B2 (en) Transactional memory system supporting unbroken suspended execution
JP5489554B2 (ja) 非プリエンプタブルなデータ参照者に影響する共用データ要素の更新動作の後に猶予期間の低電力検出のための方法、システム及びコンピュータ・プログラム
JP5650123B2 (ja) トランザクショナル・メモリ・イベントの処理のためのハードウェアにおけるユーザハンドラの登録
US9519307B2 (en) Detecting full-system idle state in adaptive-tick kernels
US8949549B2 (en) Management of ownership control and data movement in shared-memory systems
US9256535B2 (en) Conditional notification mechanism
US8490118B2 (en) Wait on address synchronization interface
US9288109B2 (en) Enabling cluster scaling
US10095627B2 (en) Method and system for efficient communication and command system for deferred operation
US20190073243A1 (en) User-space spinlock efficiency using c-state and turbo boost
US10725817B2 (en) Reducing spin count in work-stealing for copying garbage collection based on average object references
US8452948B2 (en) Hybrid compare and swap/perform locked operation queue algorithm
US9760145B2 (en) Saving the architectural state of a computing device using sectors
US20150178089A1 (en) Load synchronization with streaming thread cohorts
US10884477B2 (en) Coordinating accesses of shared resources by clients in a computing device
US9563484B2 (en) Concurrent computing with reduced locking requirements for shared data
US11507506B2 (en) Method and system for efficient communication and command system for deferred operation
US9141445B2 (en) Asynchronous system calls
JPWO2018150524A1 (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: 20170929

Year of fee payment: 4