Nothing Special   »   [go: up one dir, main page]

KR20160082685A - 멀티코어 프로세서들에서 동시적 함수들의 효율적인 하드웨어 배분, 및 관련 프로세서 시스템들, 방법들, 및 컴퓨터-판독가능 매체들 - Google Patents

멀티코어 프로세서들에서 동시적 함수들의 효율적인 하드웨어 배분, 및 관련 프로세서 시스템들, 방법들, 및 컴퓨터-판독가능 매체들 Download PDF

Info

Publication number
KR20160082685A
KR20160082685A KR1020167014107A KR20167014107A KR20160082685A KR 20160082685 A KR20160082685 A KR 20160082685A KR 1020167014107 A KR1020167014107 A KR 1020167014107A KR 20167014107 A KR20167014107 A KR 20167014107A KR 20160082685 A KR20160082685 A KR 20160082685A
Authority
KR
South Korea
Prior art keywords
hardware
request
program control
instruction
concurrent
Prior art date
Application number
KR1020167014107A
Other languages
English (en)
Inventor
마이클 윌리엄 패든
에릭 아스무센 데 카스트로 로포
매튜 크리스티안 둥간
켄토 타루이
크레이그 매튜 브라운
Original Assignee
퀄컴 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 퀄컴 인코포레이티드 filed Critical 퀄컴 인코포레이티드
Publication of KR20160082685A publication Critical patent/KR20160082685A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/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/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
    • 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

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)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

본 개시내용의 실시예들은, 멀티코어 프로세서들에서 동시적 함수들의 효율적인 하드웨어 배분, 및 관련된 프로세서 시스템들, 방법들, 및 컴퓨터-판독가능 매체들을 제공한다. 일 실시예에서, 프로그램 제어의 동시적 전달을 요청하는 동작을 표시하는 제 1 명령이 멀티코어 프로세서의 제 1 하드웨어 스레드에서 검출된다. 프로그램 제어의 동시적 전달에 대한 요청은 하드웨어 FIFO(hardware first-in-first-out) 큐에 인큐잉된다. 하드웨어 FIFO 큐에서의 프로그램 제어의 동시적 전달에 대한 요청을 배분하는 동작을 표시하는 제 2 명령이 멀티코어 프로세서의 제 2 하드웨어 스레드에서 검출된다. 하드웨어 FIFO 큐로부터 프로그램 제어의 동시적 전달에 대한 요청이 디큐잉되고, 제 2 하드웨어 스레드에서 프로그램 제어의 동시적 전달이 실행된다. 이러한 방식에서, 함수들은, 경쟁 관리 오버헤드를 최소화하면서 다수의 하드웨어 스레드들의 컨텍스트에 효율적으로 그리고 동시적으로 배분될 수 있다.

Description

멀티코어 프로세서들에서 동시적 함수들의 효율적인 하드웨어 배분, 및 관련 프로세서 시스템들, 방법들, 및 컴퓨터-판독가능 매체들{EFFICIENT HARDWARE DISPATCHING OF CONCURRENT FUNCTIONS IN MULTICORE PROCESSORS, AND RELATED PROCESSOR SYSTEMS, METHODS, AND COMPUTER-READABLE MEDIA}
우선권 주장
[0001] 본 출원은, 발명의 명칭이 "EFFICIENT HARDWARE DISPATCHING OF CONCURRENT FUNCTIONS IN INSTRUCTION PROCESSING CIRCUITS, AND RELATED PROCESSOR SYSTEMS, METHODS, AND COMPUTER-READABLE MEDIA"으로 2013년 11월 1일자로 출원된 미국 가특허 출원 일련번호 제 61/898,745호를 우선권으로 주장하며, 상기 가특허 출원은 그 전체가 인용에 의해 본 출원에 포함된다.
[0002] 본 출원은 또한, 발명의 명칭이 "EFFICIENT HARDWARE DISPATCHING OF CONCURRENT FUNCTIONS IN MULTICORE PROCESSORS, AND RELATED PROCESSOR SYSTEMS, METHODS, AND COMPUTER-READABLE MEDIA"으로 2014년 3월 25일자로 출원된 미국 특허 출원 일련번호 14/224,619호를 우선권으로 주장하며, 상기 특허 출원은 그 전체가 인용에 의해 본 출원에 포함된다.
[0002] 본 개시내용의 기술은, 다수의 프로세서 코어들 및/또는 다수의 하드웨어 스레드들을 제공하는 멀티코어 프로세서-기반 시스템들에서 동시적인 함수(concurrent function)들의 프로세싱에 관한 것이다.
[0003] 현대의 디지털 컴퓨터들에서 발견되는, 중앙 프로세싱 유닛(CPU)과 같은 멀티코어 프로세서는, 프로그램 명령들을 판독하고 실행하기 위해 다수의 프로세서 코어들을 포함하거나 독립적인 프로세싱 유닛들을 포함할 수 있다. 각각의 프로세서 코어는, 하나 또는 그 초과의 하드웨어 스레드들을 포함할 수 있고, 또한, 비-제한적인 예들로서, 캐시들, 부동 소수점 장치(FPU; floating point unit)들, 및/또는 공유 메모리와 같은, 하드웨어 스레드들에 의해 액세스가능한 부가적인 리소스들을 포함할 수 있다. 하드웨어 스레드들 각각은, 소프트웨어 스레드 및 소프트웨어 스레드의 컨텍스트(context)를 호스팅(host)하는 것이 가능한 전용(private) 물리적 레지스터들의 세트(예컨대, 범용 레지스터(GPR; general purpose register)들, 프로그램 카운터들 등)를 포함한다. 하나 또는 그 초과의 하드웨어 스레드들은, 멀티코어 프로세서들에 의해 로직 프로세서 코어들로 간주(view)될 수 있으며, 따라서, 멀티코어 프로세서가 다수의 프로그램 명령들을 동시적으로 실행하는 것을 가능하게 할 수 있다. 이러한 방식에서, 전체 명령 스루풋 및 프로그램 실행 속도들이 개선될 수 있다.
[0004] 주류(mainstream) 소프트웨어 산업은, 다수의 하드웨어 스레드들을 제공하는 현대의 멀티코어 프로세서들의 성능들을 완전히 활용할 수 있는 동시적 소프트웨어를 개발하는 과제들에 오랫동안 직면하고 있다. 하나의 관심있는 개발 영역은, 함수형 프로그래밍 언어(functional programming language)들에 의해 제공되는 내재적 병렬성(inherent parallelism)을 이용하는 것에 중점을 둔다. 함수형 프로그래밍 언어들은 "순수 함수(pure function)"의 개념을 기반으로 한다. 순수 함수는 참조에 투명하고(referentially transparent)고(즉, 프로그램의 효과를 변경함이 없이 프로그램에서 그 값이 대체될 수 있음), 부작용이 없는(즉, 외부 상태를 수정하지 않거나 또는 자신 외부의 임의의 함수와 상호작용하지 않음) 계산 유닛(unit)이다. 데이터 종속성들을 공유하지 않는 2개 또는 그 초과의 순수 함수들이 CPU에 의해 임의의 순서로 또는 병렬로 실행될 수 있으며, 이들은 동일한 결과들을 산출할 것이다. 따라서, 그러한 함수들은, 동시적 실행을 위해 별개의 하드웨어 스레드들에 안전하게 배분(dispatch)될 수 있다.
[0005] 동시적 실행을 위해 함수들을 배분하는 것은 다양한 문제들을 발생시킨다. 이용가능한 하드웨어 스레드들의 활용을 최대화하기 위해, 함수들은 평가를 위해 큐(queue)들에 비동기식으로 배분될 수 있다. 그러나, 이것은, 다수의 하드웨어 스레드들에 의해 액세스가능한 공유 데이터 영역 또는 데이터 구조를 요구할 수 있다. 결과적으로, 경쟁(contention) 문제들을 핸들링(handle)하는 것이 필수적이 되고, 하드웨어 스레드들의 수가 증가하는 경우 경쟁 문제들의 수는 기하급수적으로 증가할 수 있다. 함수들은 비교적 작은 계산 유닛들일 수 있기 때문에, 함수들의 동시적인 실행에 대해 실현되는 이점들보다 경쟁 관리에 의해 유발되는 오버헤드가 급격하게 커질 수 있다.
[0006] 따라서, 다수의 하드웨어 스레드들의 컨텍스트에서, 경쟁 관리 오버헤드를 최소화하면서 함수들의 효율적인 동시적 배분에 대한 지원을 제공하는 것이 바람직하다.
[0007] 본 개시내용의 실시예들은, 멀티코어 프로세서들에서의 동시적 함수들의 효율적인 하드웨어 배분, 및 관련된 프로세서 시스템들, 방법들, 및 컴퓨터-판독가능 매체를 제공한다. 일 실시예에서, 동시적 함수들의 효율적인 하드웨어 배분을 제공하는 멀티코어 프로세서가 제공된다. 멀티코어 프로세서는, 복수의 하드웨어 스레드들을 포함하는 복수의 프로세싱 코어들을 포함한다. 멀티코어 프로세서는, 복수의 프로세싱 코어들에 통신가능하게 커플링되는 하드웨어 FIFO(first-in-first-out) 큐를 더 포함한다. 멀티코어 프로세서는 또한, 명령 프로세싱 회로를 포함한다. 명령 프로세싱 회로는, 복수의 하드웨어 스레드들 중 제 1 하드웨어 스레드에서, 프로그램 제어의 동시적 전달을 요청하는 동작을 표시하는 제 1 명령을 검출하도록 구성된다. 명령 프로세싱 회로는 추가로, 하드웨어 FIFO 큐에 프로그램 제어의 동시적 전달에 대한 요청을 인큐잉(enqueue)하도록 구성된다. 명령 프로세싱 회로는 또한, 복수의 하드웨어 스레드들 중 제 2 하드웨어 스레드에서, 하드웨어 FIFO 큐에서의 프로그램 제어의 동시적 전달에 대한 요청을 배분하는 동작을 표시하는 제 2 명령을 검출하도록 구성된다. 명령 프로세싱 회로는 부가적으로, 하드웨어 FIFO 큐로부터 프로그램 제어의 동시적 전달에 대한 요청을 디큐잉(dequeue)하도록 구성된다. 명령 프로세싱 회로는 또한, 제 2 하드웨어 스레드에서 프로그램 제어의 동시적 전달을 실행하도록 구성된다.
[0008] 다른 실시예에서, 동시적 함수들의 효율적인 하드웨어 배분을 제공하는 멀티코어 프로세서가 제공된다. 멀티코어 프로세서는, 하드웨어 FIFO 큐 수단, 및 복수의 하드웨어 스레드들을 포함하고 하드웨어 FIFO 큐 수단에 통신가능하게 커플링되는 복수의 프로세싱 코어들을 포함한다. 멀티코어 프로세서는, 복수의 하드웨어 스레드들 중 제 1 하드웨어 스레드에서, 프로그램 제어의 동시적 전달을 요청하는 동작을 표시하는 제 1 명령을 검출하기 위한 수단을 포함하는 명령 프로세싱 회로 수단을 더 포함한다. 명령 프로세싱 회로 수단은 또한, 하드웨어 FIFO 큐 수단에 프로그램 제어의 동시적 전달에 대한 요청을 인큐잉하기 위한 수단을 포함한다. 명령 프로세싱 회로 수단은, 복수의 하드웨어 스레드들 중 제 2 하드웨어 스레드에서, 하드웨어 FIFO 큐 수단에서의 프로그램 제어의 동시적 전달에 대한 요청을 배분하는 동작을 표시하는 제 2 명령을 검출하기 위한 수단을 더 포함한다. 명령 프로세싱 회로 수단은 부가적으로, 하드웨어 FIFO 큐 수단으로부터 프로그램 제어의 동시적 전달에 대한 요청을 디큐잉하기 위한 수단을 포함한다. 명령 프로세싱 회로 수단은 또한, 제 2 하드웨어 스레드에서 프로그램 제어의 동시적 전달을 실행하기 위한 수단을 포함한다.
[0009] 다른 실시예에서, 동시적 함수들의 효율적인 하드웨어 배분을 위한 방법이 제공된다. 방법은, 멀티코어 프로세서의 제 1 하드웨어 스레드에서, 프로그램 제어의 동시적 전달을 요청하는 동작을 표시하는 제 1 명령을 검출하는 단계를 포함한다. 방법은, 하드웨어 FIFO 큐에 프로그램 제어의 동시적 전달에 대한 요청을 인큐잉하는 단계를 더 포함한다. 방법은 또한, 멀티코어 프로세서의 제 2 하드웨어 스레드에서, 하드웨어 FIFO 큐에서의 프로그램 제어의 동시적 전달에 대한 요청을 배분하는 동작을 표시하는 제 2 명령을 검출하는 단계를 포함한다. 방법은 부가적으로, 하드웨어 FIFO 큐로부터 프로그램 제어의 동시적 전달에 대한 요청을 디큐잉하는 단계를 포함한다. 방법은, 제 2 하드웨어 스레드에서 프로그램 제어의 동시적 전달을 실행하는 단계를 더 포함한다.
[0010] 다른 실시예에서, 프로세서로 하여금 동시적 함수들의 효율적인 하드웨어 배분을 위한 방법을 구현하게 하는 컴퓨터-실행가능 명령들이 저장된 비-일시적인 컴퓨터-판독가능 매체가 제공된다. 컴퓨터-실행가능 명령들에 의해 구현되는 방법은, 멀티코어 프로세서의 제 1 하드웨어 스레드에서, 프로그램 제어의 동시적 전달을 요청하는 동작을 표시하는 제 1 명령을 검출하는 단계를 포함한다. 컴퓨터-실행가능 명령들에 의해 구현되는 방법은, 하드웨어 FIFO 큐에 프로그램 제어의 동시적 전달에 대한 요청을 인큐잉하는 단계를 더 포함한다. 컴퓨터-실행가능 명령들에 의해 구현되는 방법은 또한, 멀티코어 프로세서의 제 2 하드웨어 스레드에서, 하드웨어 FIFO 큐에서의 프로그램 제어의 동시적 전달에 대한 요청을 배분하는 동작을 표시하는 제 2 명령을 검출하는 단계를 포함한다. 컴퓨터-실행가능 명령들에 의해 구현되는 방법은 부가적으로, 하드웨어 FIFO 큐로부터 프로그램 제어의 동시적 전달에 대한 요청을 디큐잉하는 단계를 포함한다. 컴퓨터-실행가능 명령들에 의해 구현되는 방법은, 제 2 하드웨어 스레드에서 프로그램 제어의 동시적 전달을 실행하는 단계를 더 포함한다.
[0011] 도 1은, 명령 프로세싱 회로를 포함하는, 동시적 함수들의 효율적인 하드웨어 배분을 제공하기 위한 멀티코어 프로세서를 예시하는 블록도이다.
[0012] 도 2는, 하드웨어 FIFO(first-in-first-out) 큐를 사용하는 도 1의 명령 프로세싱 회로에 의한 예시적인 명령 스트림들에 대한 프로세싱 흐름들을 예시하는 도면이다.
[0013] 도 3은, 동시적 함수들을 효율적으로 배분하기 위한 도 1의 명령 프로세싱 회로의 예시적인 동작들을 예시하는 흐름도이다.
[0014] 도 4는, 프로그램 제어의 동시적 전달을 요청하기 위한 CONTINUE 명령의 엘리먼트들 뿐만 아니라 프로그램 제어의 동시적 전달에 대한 결과적인 요청의 엘리먼트들을 예시하는 도면이다.
[0015] 도 5는, 프로그램 제어의 동시적 전달에 대한 요청을 인큐잉하기 위한 도 1의 명령 프로세싱 회로의 예시적인 동작들을 더 상세히 예시하는 흐름도이다.
[0016] 도 6은, 프로그램 제어의 동시적 전달에 대한 요청을 디큐잉하기 위한 도 1의 명령 프로세싱 회로의 예시적인 동작들을 더 상세히 예시하는 흐름도이다.
[0017] 도 7은, 프로그램 제어를, 발신(originating) 하드웨어 스레드로 리턴(return)시키기 위한 메커니즘을 비롯하여, 동시적 함수들의 효율적인 하드웨어 배분을 제공하기 위한, 도 1의 명령 프로세싱 회로에 의한 예시적인 명령 스트림들에 대한 프로세싱 흐름들을 더 상세히 예시하는 도면이다.
[0018] 도 8은, 도 1의 멀티코어 프로세서 및 명령 프로세싱 회로를 포함할 수 있는 예시적인 프로세서-기반 시스템의 블록도이다.
[0019] 이제, 도시된 도면들을 참조하여, 본 개시내용의 몇몇 예시적인 실시예들이 설명된다. 단어 "예시적인"은 "예, 예시, 또는 예증으로서 기능하는 것"을 의미하도록 본원에서 사용된다. "예시적인"것으로서 본원에 설명된 임의의 실시예는 다른 실시예들에 비해 바람직하거나 유리한 것으로서 해석될 필요는 없다.
[0020] 본 개시내용의 실시예들은, 멀티코어 프로세서들에서의 동시적 함수들의 효율적인 하드웨어 배분, 및 관련된 프로세서 시스템들, 방법들, 및 컴퓨터-판독가능 매체들을 제공한다. 일 실시예에서, 동시적 함수들의 효율적인 하드웨어 배분을 제공하는 멀티코어 프로세서가 제공된다. 멀티코어 프로세서는, 복수의 하드웨어 스레드들을 포함하는 복수의 프로세싱 코어들을 포함한다. 멀티코어 프로세서는, 복수의 프로세싱 코어들에 통신가능하게 커플링되는 하드웨어 FIFO(first-in-first-out) 큐를 더 포함한다. 멀티코어 프로세서는 또한, 명령 프로세싱 회로를 포함한다. 명령 프로세싱 회로는, 복수의 하드웨어 스레드들 중 제 1 하드웨어 스레드에서, 프로그램 제어의 동시적 전달을 요청하는 동작을 표시하는 제 1 명령을 검출하도록 구성된다. 명령 프로세싱 회로는 추가로, 프로그램 제어의 동시적 전달에 대한 요청을 하드웨어 FIFO 큐에 인큐잉(enqueue)하도록 구성된다. 명령 프로세싱 회로는 또한, 복수의 하드웨어 스레드들 중 제 2 하드웨어 스레드에서, 하드웨어 FIFO 큐에서의 프로그램 제어의 동시적 전달에 대한 요청을 배분하는 동작을 표시하는 제 2 명령을 검출하도록 구성된다. 명령 프로세싱 회로는 부가적으로, 프로그램 제어의 동시적 전달에 대한 요청을 하드웨어 FIFO 큐로부터 디큐잉(dequeue)하도록 구성된다. 명령 프로세싱 회로는 또한, 제 2 하드웨어 스레드에서 프로그램 제어의 동시적 전달을 실행하도록 구성된다.
[0021] 이와 관련하여, 도 1은 동시적 함수들의 효율적인 하드웨어 배분을 위한 예시적인 멀티코어 프로세서(10)의 블록도이다. 특히, 멀티코어 프로세서(10)는, 프로그램 제어의 동시적 전달들에 대한 요청들을 인큐잉 및 배분하기 위한 명령 프로세싱 회로(12)를 제공한다. 멀티코어 프로세서(10)는, 다른 엘리먼트들 중에서도, 알려진 디지털 로직 엘리먼트들, 반도체 회로들, 프로세싱 코어들, 및/또는 메모리 구조들, 또는 이들의 결합들 중 임의의 엘리먼트의 하나 또는 그 초과를 포함한다. 본원에서 설명된 실시예들은 엘리먼트들의 임의의 특정한 어레인지먼트(arrangement)로 제한되지 않으며, 개시된 기술들은 반도체 다이들 또는 패키지들 상의 다양한 구조들 및 레이아웃들로 용이하게 확장될 수 있다. 멀티코어 프로세서(10)는 시스템 버스(16)를 통해 하나 또는 그 초과의 오프-프로세서(off-processor) 컴포넌트들(14)(예컨대, 비-제한적인 예들로서, 메모리, 입력 디바이스들, 출력 디바이스들, 네트워크 인터페이스 디바이스들, 및/또는 디스플레이 제어기들)에 통신가능하게 커플링될 수 있다.
[0022] 도 1의 멀티코어 프로세서(10)는 복수의 프로세서 코어들(18(0)-18(Z))을 포함한다. 프로세서 코어들(18) 각각은, 다른 프로세서 코어들(18)과 독립적으로 그리고 그들과 동시적으로 컴퓨터 프로그램 명령들(도시되지 않음)을 판독 및 프로세싱할 수 있는 프로세싱 유닛이다. 도 1에서 나타낸 바와 같이, 멀티코어 프로세서(10)는 2개의 프로세서 코어들(18(0) 및 18(Z))을 포함한다. 그러나, 몇몇 실시예들은 도 1에 예시된 2개의 프로세서 코어들(18(0) 및 18(Z))보다 더 많은 프로세서 코어들(18)을 포함할 수 있다는 것이 이해될 것이다.
[0023] 멀티코어 프로세서(10)의 프로세서 코어들(18(0) 및 18(Z))은 하드웨어 스레드들(20(0)-20(X)) 및 하드웨어 스레드들(22(0)-22(Y))을 각각 포함한다. 하드웨어 스레드들(20, 22) 각각은, 독립적으로 실행될 수 있고, 멀티코어 프로세서(10)에 의해 그리고/또는 멀티코어 프로세서(10)에 의해 실행되는 운영 시스템 또는 다른 소프트웨어(도시되지 않음)에 의해 로직 코어로 간주될 수 있다. 이러한 방식에서, 프로세서 코어들(18) 및 하드웨어 스레드들(20, 22)은, 프로그램 명령들의 동시적 멀티스레딩된(multithreaded) 실행을 허용하는 슈퍼스칼라(superscalar) 아키텍쳐를 제공할 수 있다. 몇몇 실시예들에서, 프로세서 코어들(18)은 도 1에 도시된 것보다 더 적거나 또는 더 많은 하드웨어 스레드들(20, 22)을 포함할 수 있다. 하드웨어 스레드들(20, 22) 각각은, 프로그램 실행의 현재 상태를 저장하기 위해, 범용 레지스터(GPR)들 및/또는 제어 레지스터들과 같은 전용 리소스들을 포함할 수 있다. 도 1의 예에서, 하드웨어 스레드들(20(0) 및 20(X))은 레지스터들(24 및 26)을 각각 포함하지만, 하드웨어 스레드들(22(0) 및 22(Y))은 레지스터들(28 및 30)을 각각 포함한다. 몇몇 실시예들에서, 하드웨어 스레드들(20, 22)은 또한, 동일한 프로세서 코어(18) 상에서 실행되는 다른 하드웨어 스레드들(20, 22)과 다른 저장 또는 실행 리소스들을 공유할 수 있다.
[0024] 하드웨어 스레드들(20, 22)의 독립적인 실행 능력은, 데이터 종속성들을 공유하지 않는 함수들(즉, 순수 함수들)을 멀티코어 프로세서(10)가 동시적 실행을 위해 하드웨어 스레드들(20, 22)에 배분하는 것을 가능하게 한다. 하드웨어 스레드들(20, 22)의 활용을 최대화하기 위한 하나의 접근법은 평가를 위해 큐들에 함수들을 비동기식으로 배분하는 것이다. 그러나, 이러한 접근법은, 도 1의 공유 메모리(32)와 같은 공유 데이터 영역 또는 데이터 구조를 요구할 수 있다. 다수의 하드웨어 스레드들(20, 22)에 의한 공유 메모리(32)의 사용은, 경쟁 문제들을 유발할 수 있으며, 하드웨어 스레드들(20, 22)의 수가 증가하는 경우 경쟁 문제들의 수는 기하급수적으로 증가할 수 있다. 결과적으로, 이러한 경쟁 문제들을 핸들림함으로써 유발되는 오버헤드가 하드웨어 스레드들(20, 22)에 의한 함수들의 동시적 실행의 실현 이점들보다 커질 수 있다.
[0025] 이와 관련하여, 동시적 함수들의 효율적인 하드웨어 배분을 위한 도 1의 명령 프로세싱 회로(12)가 멀티코어 프로세서(10)에 의해 제공된다. 명령 프로세싱 회로(12)는, 프로세서 코어들(18)을 포함할 수 있고, 추가로, 하드웨어 FIFO 큐(34)를 포함한다. 본원에서 사용되는 바와 같이, "하드웨어 FIFO 큐"는, 경쟁 관리가 하드웨어에서 그리고/또는 마이크로코드에서 핸들링되는 임의의 FIFO 디바이스를 포함한다. 몇몇 실시예들에서, 하드웨어 FIFO 큐(34)는, 다이 상에 전체가 구현될 수 있고 그리고/또는 전용 레지스터들(도시되지 않음)에 의해 관리되는 메모리를 사용하여 구현될 수 있다.
[0026] 명령 프로세싱 회로(12)는, 하드웨어 스레드들(20, 22) 중 하나로부터 프로그램 제어의 동시적 전달을 위한 요청을 하드웨어 FIFO 큐(34)에 인큐잉하기 위한 기계어(machine) 명령(도시되지 않음)을 정의한다. 명령 프로세싱 회로(12)는 추가로, 요청들을 하드웨어 FIFO 큐(34)로부터 디큐잉하고 그리고 요청된 프로그램 제어의 전달을 하드웨어 스레드들(20, 22) 중 현재 실행 중인 하드웨어 스레드에서 실행하기 위한 기계어 명령(도시되지 않음)을 정의한다. 프로그램 제어의 동시적 전달에 대한 요청들을 하드웨어 FIFO 큐(34)에 그리고 하드웨어 FIFO 큐(34)로부터 인큐잉 및 디큐잉하기 위한 기계어 명령을 제공함으로써, 명령 프로세싱 회로(12)는, 멀티코어 프로세싱 환경에서 다수의 하드웨어 스레드들(20, 22)의 더 효율적인 활용을 가능하게 할 수 있다.
[0027] 본원에 설명된 몇몇 실시예에들에 따르면, 하드웨어 스레드들(20, 22) 중 임의의 하드웨어 스레드에서의 실행을 위해 프로그램 제어의 동시적 전달에 대한 요청들을 인큐잉하는데 단일 하드웨어 FIFO 큐(34)가 제공될 수 있다. 몇몇 실시예들은, 하드웨어 스레드들(20, 22)의 각각의 하드웨어 스레드에 대해 전용인 하나의 하드웨어 FIFO 큐(34)를 갖는 다수의 하드웨어 FIFO 큐들(34)을 제공할 수 있다. 그러한 실시예들에서, 하드웨어 스레드들(20, 22) 중 특정된 하나에서의 함수의 동시적 실행을 위한 요청은, 하드웨어 스레드들(20, 22) 중 특정된 하나에 대응하는 하드웨어 FIFO 큐(34)에 인큐잉될 수 있다. 몇몇 실시예들에서, 하드웨어 스레드들(20, 22) 중 특정한 하나에 지시(direct)되지 않고 그리고/또는 하드웨어 스레드들(20, 22) 중 임의의 하나에서 실행될 수 있는 프로그램 제어의 동시적 전달에 대한 요청들을 인큐잉하기 위한 부가적인 하드웨어 FIFO 큐가 또한 제공될 수 있다.
[0028] 하드웨어 FIFO 큐(34)를 사용하는 도 1의 명령 프로세싱 회로(12)에 의한 예시적인 명령 스트림들에 대한 프로세싱 흐름들을 예시하기 위해 도 2가 제공된다. 도 2는, 도 1의 하드웨어 스레드(20(0))에 의해 실행되고 있는 일련의 명령들(38, 40, 42, 및 44)을 포함하는 명령 스트림(36)을 도시한다. 유사하게, 명령 스트림(46)은 하드웨어 스레드(22(0))에 의해 실행되고 있는 일련의 명령들(48, 50, 52, 및 54)을 포함한다. 명령 스트림들(36 및 46)에 대한 프로세싱 흐름들이 아래에 순차적으로 설명되지만, 명령 스트림들(36 및 46)은 개별적인 하드웨어 스레드들(20(0) 및 22(0))에 의해 동시적으로 실행되고 있다는 것이 이해될 것이다. 추가로, 명령 스트림들(36 및 46) 각각은 하드웨어 스레드들(20, 22) 중 임의의 하나에서 실행될 수 있다는 것이 이해될 것이다.
[0029] 도 2에서 나타낸 바와 같이, 명령 스트림(36)에서의 명령들의 실행은, 명령(38)으로부터 명령(40)으로 그리고 그 후 명령(42)으로 진행된다. 이러한 예에서, 명령들(38 및 40)은 각각 Instr0 및 Instr1로 지정되며, 멀티코어 프로세서(10)에 의해 실행가능한 임의의 명령들을 표현할 수 있다. 실행은 그 후, 파라미터 <addr>을 포함하는 인큐(Enqueue) 명령인 명령(42)으로 계속된다. 인큐 명령(42)은, 프로그램 제어의 동시적 전달을 파라미터 <addr>에 의해 특정되는 어드레스에 요청하는 동작을 표시한다. 다르게 나타내면, 인큐 명령(42)은, 파라미터 <addr>에 의해 특정되는 어드레스에 저장된 자신의 제 1 명령을 갖는 함수를 하드웨어 스레드(20(0))에서의 프로세싱이 계속되는 동안 동시적으로 실행될 것을 요청한다.
[0030] 인큐 명령(42)을 검출하는 것에 대한 응답으로, 명령 프로세싱 회로(12)는 요청(56)을 하드웨어 FIFO 큐(34)에 인큐잉한다. 요청(56)은 인큐 명령(42)의 파라미터 <addr>에 의해 특정되는 어드레스를 포함한다. 요청(56)을 인큐잉한 이후, 하드웨어 스레드(20(0))에서의 명령 스트림(36)의 프로세싱은, 인큐 명령(42)에 후속하는 다음 명령(44)(Instr2로 지정됨)으로 계속된다.
[0031] 위에 설명된 하드웨어 스레드(20(0))에서의 명령 스트림(36)의 프로그램 흐름과 동시적으로, 하드웨어 스레드(22(0))에서의 명령 스트림(46)의 명령 실행은 명령(48)으로부터 명령(50)으로 그리고 그 후 명령(52)으로 진행된다. 명령들(48 및 50)은 각각 Instr3 및 Instr4로 지정되며, 멀티코어 프로세서(10)에 의해 실행가능한 임의의 명령들을 표현할 수 있다. 명령(52)은, 하드웨어 FIFO 큐(34)에서의 가장 오래된 요청(본 예시에서는, 요청(56))으로 하여금 하드웨어 FIFO 큐(34)로부터 배분되게 하는 디큐(Dequeue) 명령이다. 디큐 명령(52)은 또한, 하드웨어 스레드(22(0))에서의 프로그램 제어로 하여금 요청(56)에 의해 특정되는 어드레스 <addr>로 전달되게 한다. 따라서, 도 2에서 나타낸 바와 같이, 디큐 명령(52)은 하드웨어 스레드(22(0))에서의 프로그램 제어를 어드레스 <addr>에 있는 명령(54)(Instr5로 지정됨)으로 전달한다. 그 후, 하드웨어 스레드(22(0))에서의 명령 스트림(46)의 프로세싱은, 명령(54)에 후속하는 다음 명령(도시되지 않음)으로 계속된다. 이러한 방식에서, 명령(54)으로 시작되는 함수는, 하드웨어 스레드(20(0)에서의 명령 스트림(36)의 실행과 동시적으로 하드웨어 스레드(22(0))에서 실행될 수 있다.
[0032] 도 3은 동시적 함수들을 효율적으로 배분하기 위한 도 1의 명령 프로세싱 회로(12)의 예시적인 동작들을 예시하는 흐름도이다. 간략화를 위해, 도 3을 설명하는데 있어 도 1 및 도 2의 엘리먼트들이 참조된다. 도 3에서의 프로세싱은, 멀티코어 프로세서(10)의 제 1 하드웨어 스레드(20)에서, 명령 프로세싱 회로(12)가, 프로그램 제어의 동시적 전달을 요청하는 동작을 표시하는 제 1 명령(42)을 검출하는 것으로 시작된다(블록 58). 몇몇 실시예들에서, 제 1 명령(42)은 멀티코어 프로세서(10)에 의해 제공되는 CONTINUE 명령일 수 있다. 제 1 명령(42)은 프로그램 제어가 동시적으로 전달될 타겟 어드레스를 특정할 수 있다. 아래에 더 상세히 논의되는 바와 같이, 제 1 명령(42)은 선택적으로, 하나 또는 그 초과의 레지스터들(이를테면 레지스터들(24, 26, 28, 30))의 컨텐츠가 전달될 수 있다는 것을 표시하는 레지스터 마스크(mask)를 포함할 수 있다. 몇몇 실시예들은, 프로그램 제어의 동시적 전달이 이루어질 하드웨어 스레드(20, 22)를 표시하기 위한, 선택적으로 포함될 수 있는 타겟 하드웨어 스레드의 식별자를 제공할 수 있다.
[0033] 그 후, 명령 프로세싱 회로(12)는, 프로그램 제어의 동시적 전달에 대한 요청(56)을 하드웨어 FIFO 큐(34)에 인큐잉한다(블록 60). 요청(56)은, 프로그램 제어가 동시적으로 전달될 어드레스를 표시하는 어드레스 파라미터를 포함할 수 있다. 아래에 추가로 논의되는 바와 같이, 몇몇 실시예들에서, 요청(56)은, 제 1 명령(42)의 선택적 레지스터 마스크에 의해 특정되는 하나 또는 그 초과의 레지스터들에 대응하는 하나 또는 그 초과의 레지스터 아이덴티티(identity)들 및 하나 또는 그 초과의 레지스터 컨텐츠들을 포함할 수 있다.
[0034] 다음으로, 명령 프로세싱 회로(12)는, 멀티코어 프로세서(10)의 제 2 하드웨어 스레드(22)에서, 하드웨어 FIFO 큐(34)에서의 프로그램 제어의 동시적 전달에 대한 요청(56)을 배분하는 동작을 표시하는 제 2 명령(52)을 검출한다(블록 62). 몇몇 실시예들에서, 제 2 명령(52)은 멀티코어 프로세서(10)에 의해 제공되는 DISPATCH 명령일 수 있다. 명령 프로세싱 회로(12)는, 프로그램 제어의 동시적 전달에 대한 요청(56)을 하드웨어 FIFO 큐(34)로부터 디큐잉한다(블록 64). 그 후, 프로그램 제어의 동시적 전달은 제 2 하드웨어 스레드(22)에서 실행된다(블록 66).
[0035] 위에 언급된 바와 같이, 프로그램 제어의 동시적 전달에 대한 요청을 표시하는 명령, 이를테면 도 2의 제 1 명령(42)은, 전달될 레지스터 컨텐츠들을 특정할 뿐만 아니라 타겟 하드웨어 스레드를 특정하기 위한 선택적 파라미터들을 포함할 수 있다. 따라서, 도 4는, 프로그램 제어의 동시적 전달을 요청하기 위한 예시적인 인큐 명령(42)의 구성 엘리먼트들 뿐만 아니라 프로그램 제어의 동시적 전달에 대한 예시적인 요청(56)의 엘리먼트들을 예시하도록 제공된다. 도 4의 예에서, 인큐 명령(42)은 CONTINUE 명령이다. 몇몇 실시예들에서, 인큐 명령(42)은 상이한 명령 명칭으로 지정될 수 있다는 것이 이해될 것이다. 인큐 명령(42)은, 타겟 어드레스(68)("<addr>") 뿐만 아니라 선택적 레지스터 마스크(70)("<regmask>") 및 타겟 하드웨어 스레드의 선택적 식별자(72)("<thread>")를 포함한다. 타겟 어드레스(68)는, 프로그램 제어 전달이 요청되는 어드레스를 특정하고, 타겟 어드레스(74)("<addr>")로서 요청(56)에 포함된다.
[0036] 몇몇 실시예들에서, 인큐 명령(42)은 또한, 하나 또는 그 초과의 레지스터들(이를테면, 레지스터들(24, 26, 28, 또는 30) 중 하나 또는 그 초과)을 표시하는 레지스터 마스크(70)를 포함할 수 있다. 레지스터 마스크(70)가 존재하면, 명령 프로세싱 회로(12)는, 레지스터 마스크(70)에 의해 특정되는 각각의 레지스터에 대한 요청(56) 내에 하나 또는 그 초과의 레지스터 아이덴티티들(76)("<reg_identity>") 및 하나 또는 그 초과의 레지스터 컨텐츠들(78)("<reg_content>")을 포함한다. 하나 또는 그 초과의 레지스터 아이덴티티들(76) 및 하나 또는 그 초과의 레지스터 컨텐츠들(78)을 사용함으로써, 인큐 명령(42)이 실행되는 제 1 하드웨어 스레드의 현재 컨텍스트는 후속하여, 제 2 하드웨어 스레드에서의 요청(56)의 배분 시에 복원될 수 있다.
[0037] 몇몇 실시예들은, 프로그램 제어의 동시적 전달이 요구되는 타겟 하드웨어 스레드의 선택적 식별자(72)를 포함하는 인큐 명령(42)을 제공할 수 있다. 따라서, 인큐 명령(42)이 실행될 시에, 식별자(72)는, 다수의 하드웨어 FIFO 큐들(34) 중 요청(56)을 인큐잉할 하나를 선택하기 위해 명령 프로세싱 회로(12)에 의해 사용될 수 있다. 예를 들어, 몇몇 실시예들에서, 명령 프로세싱 회로(12)는, 식별자(72)에 의해 특정되는 하드웨어 스레드(20, 22)에 대응하는 하드웨어 FIFO 큐(34)에 요청(56)을 인큐잉할 수 있다. 몇몇 실시예들은 또한, 인큐 명령(42)에 의해 어떠한 식별자(72)도 제공되지 않는 요청들을 인큐잉하도록 지정되는 하드웨어 FIFO 큐(34)를 제공할 수 있다.
[0038] 도 5는, 도 3의 블록(60)에서 위에 참조된 바와 같이, 프로그램 제어의 동시적 전달에 대한 요청(56)을 인큐잉하기 위한 도 1의 명령 프로세싱 회로(12)의 예시적인 동작들을 더 상세히 예시하는 흐름도이다. 명확성의 목적들을 위해, 도 5를 설명하는데 있어 도 1, 도 2, 및 도 4의 엘리먼트들이 참조된다. 도 5의 예에서, 도 2에 나타낸 바와 같이, 프로그램 제어의 동시적 전달에 대한 요청(56)을 인큐잉하기 위한 동작들이 하드웨어 스레드(20(0))의 명령 스트림(36)에 관하여 논의된다. 그러나, 도 5의 동작들은 하드웨어 스레드들(20, 22) 중 임의의 하나에서의 명령 스트림에서 실행될 수 있다는 것이 이해될 것이다.
[0039] 도 5에서, 동작들은, 프로그램 제어의 동시적 전달을 요청하는 동작을 표시하는 제 1 명령(42)이 하드웨어 스레드(20(0))의 명령 스트림(36)에서 검출되는지 여부를 명령 프로세싱 회로(12)가 결정하는 것으로 시작된다(블록 80). 몇몇 실시예들에서, 제 1 명령(42)은 CONTINUE 명령일 수 있다. 제 1 명령(42)이 검출되지 않으면, 프로세싱은 블록(82)에서 재개된다. 블록(80)에서, 프로그램 제어의 동시적 전달을 요청하는 동작을 표시하는 제 1 명령(42)이 검출되면, 명령 프로세싱 회로(12)는, 프로그램 제어의 동시적 전달에 대한 (타겟 어드레스(74)를 포함하는) 요청(56)을 생성한다(블록 84).
[0040] 다음으로, 명령 프로세싱 회로(12)는, 제 1 명령(42)이 레지스터 마스크(70)를 특정하는지 여부를 검토한다(블록 86). 몇몇 실시예들에서, 레지스터 마스크(70)는 하드웨어 스레드(20(0))의 하나 또는 그 초과의 레지스터들(24)을 특정할 수 있으며, 하드웨어 스레드(20(0))의 현재 컨텍스트를 보존(preserve)하기 위해 그 레지스터들의 컨텐츠들이 요청(56)에 포함될 수 있다. 어떠한 레지스터 마스크(70)도 특정되지 않으면, 프로세싱은 블록(88)에서 계속된다. 그러나, 블록(86)에서, 레지스터 마스크(70)가 제 1 명령(42)에 의해 특정된다고 결정되면, 명령 프로세싱 회로(12)는, 레지스터 마스크(70)에 의해 특정되는 각각의 레지스터(24)에 대응하는 하나 또는 그 초과의 레지스터 아이덴티티들(76) 및 하나 또는 그 초과의 레지스터 컨텐츠들(78)을 요청(56)에 포함시킨다(블록 90).
[0041] 그 후, 명령 프로세싱 회로(12)는, 제 1 명령(42)이 타겟 하드웨어 스레드의 식별자(72)를 특정하는지 여부를 결정한다(블록 88). 어떠한 식별자(72)도 특정되지 않으면(즉, 제 1 명령(42)은, 프로그램 제어의 동시적 전달을 특정한 하드웨어 스레드에 대해 요청하고 있지 않음), 요청(56)은, 모든 하드웨어 스레드들(20, 22)에 대해 이용가능한 하드웨어 FIFO 큐(34)에 큐잉된다(블록 92). 그 후, 프로세싱은 블록(94)에서 계속된다. 블록(88)에서, 타겟 하드웨어 스레드의 식별자(72)가 제 1 명령(42)에 의해 특정된다고 명령 프로세싱 회로(12)가 결정하면, 요청(56)은, 하드웨어 스레드들(20, 22) 중 식별자(72)에 대응하는 하나에 특정한 하드웨어 FIFO 큐(34)에 큐잉된다(블록 96).
[0042] 다음으로, 명령 프로세싱 회로(12)는, 하드웨어 FIFO 큐(34)에 요청(56)을 인큐잉하기 위한 큐 동작이 성공적이었는지 여부를 결정한다(블록 94). 그렇다면, 프로세싱은 블록(82)에서 계속된다. (예컨대, 하드웨어 FIFO 큐(34)가 풀(full)이었기 때문에) 요청(56)이 하드웨어 FIFO 큐(34)에 큐잉될 수 없었다면, 중단(interrupt)이 발생된다(블록 98). 그 후, 프로세싱은 명령 스트림(36) 내의 다음 명령의 실행으로 계속된다(블록 82).
[0043] 도 6은, 도 3의 블록(64)에서 위에 참조된 바와 같이, 프로그램 제어의 동시적 전달에 대한 요청(56)을 디큐잉하기 위한 도 1의 명령 프로세싱 회로(12)의 예시적인 동작들을 더 상세히 예시한다. 명확성의 목적들의 위해, 도 6을 설명하는데 있어 도 1, 도 2, 및 도 4의 엘리먼트들이 참조된다. 도 6의 예에서, 프로그램 제어의 동시적 전달에 대한 요청(56)을 디큐잉하기 위한 동작들이 도 2에 나타낸 바와 같은 하드웨어 스레드(22(0))의 명령 스트림(46)에 관하여 논의된다. 그러나, 도 6의 동작들은 하드웨어 스레드들(20, 22) 중 임의의 하나에서의 명령 스트림에서 실행될 수 있다는 것이 이해될 것이다.
[0044] 도 6에 나타낸 바와 같이, 동작들은, 프로그램 제어의 동시적 전달에 대한 요청(56)을 배분하는 동작을 표시하는 제 2 명령(52)이 명령 스트림(46)에서 검출되는지 여부를 명령 프로세싱 회로(12)가 결정하는 것으로 시작된다(블록 100). 몇몇 실시예들에서, 제 2 명령(52)은 DISPATCH 명령을 포함할 수 있다. 제 2 명령(52)이 검출되지 않으면, 프로세싱은 블록(102)에서 계속된다. 명령 스트림(46)에서 제 2 명령(52)이 검출되면, 명령 프로세싱 회로(12)에 의해 하드웨어 FIFO 큐(34)로부터 요청(56)이 디큐잉된다(블록 104).
[0045] 그 후, 명령 프로세싱 회로(12)는, 하나 또는 그 초과의 레지스터 아이덴티티들(76) 및 하나 또는 그 초과의 레지스터 컨텐츠들(78)이 요청(56)에 포함되는지 여부를 결정하기 위해 요청(56)을 검토한다(블록 106). 그렇지 않다면, 프로세싱은 블록(108)에서 계속된다. 하나 또는 그 초과의 레지스터 아이덴티티들(76) 및 하나 또는 그 초과의 레지스터 컨텐츠들(78)이 요청(56)에 포함되어 있다면, 명령 프로세싱 회로(12)는, 하나 또는 그 초과의 레지스터 아이덴티티들(76)에 대응하는 하드웨어 스레드(22(0))의 하나 또는 그 초과의 레지스터들(28)에 요청(56) 내의 하나 또는 그 초과의 레지스터 컨텐츠들(78)을 복원한다(블록 110). 이러한 방식에서, 요청(56)이 인큐잉되었을 시의 하드웨어 스레드(20(0))의 컨텍스트가 하드웨어 스레드(22(0))에서 복원될 수 있다. 그 후, 명령 프로세싱 회로(12)는, 하드웨어 스레드(22(0))에서의 프로그램 제어를 요청(56) 내의 타겟 어드레스(74)로 전달한다(블록 108). 프로세싱은, 명령 스트림(46) 내의 다음 명령의 실행으로 계속된다(블록 102).
[0046] 도 7은, 동시적 함수들의 효율적인 하드웨어 배분을 제공하기 위한, 도 1의 명령 프로세싱 회로(12)에 의한 예시적인 명령 스트림들에 대한 프로세싱 흐름들을 더 상세히 예시하는 도면이다. 특히, 도 7은, 동시적 전달 이후에, 발신 하드웨어 스레드로 프로그램 제어가 리턴될 수 있는 메커니즘을 예시한다. 도 7에서, 일련의 명령들(114, 116, 118, 120, 122, 및 124)을 포함하는 명령 스트림(112)은 도 1의 하드웨어 스레드(20(0))에 의해 실행되지만, 일련의 명령들(128, 130, 132, 및 134)을 포함하는 명령 스트림(126)은 하드웨어 스레드(22(0))에 의해 실행된다. 명령 스트림들(112 및 126)에 대한 프로세싱 흐름들이 순차적으로 아래에 설명되지만, 명령 스트림들(112 및 126)은 개별적인 하드웨어 스레드들(20(0) 및 22(0))에 의해 동시적으로 실행된다는 것이 이해될 것이다. 추가로, 명령 스트림들(112 및 126) 각각은 하드웨어 스레드들(20, 22) 중 임의의 하나에서 실행될 수 있다는 것이 이해될 것이다.
[0047] 도 7에 도시된 바와 같이, 명령 스트림(112)은, 각각이 하드웨어 스레드(20(0))의 레지스터들(24) 중 하나에서의 값을 저장하는 LOAD 명령들(114, 116, 및 118)로 시작된다. 제 1 LOAD 명령(114)은, R0으로 지칭되는 레지스터에 값 <parameter>가 저장될 것임을 표시한다. 값 <parameter>는, 명령 스트림(112)과 동시적으로 실행될 함수에 의해 소모되도록 의도되는 입력 값일 수 있다. 명령 스트림(112)에서 실행되는 다음 명령은, 레지스터들(24) 중 하나(R1로 지정됨)에 값 <return_addr>이 저장될 것임을 표시하는 LOAD 명령(116)이다. R1에 저장되는 값 <return_addr>은, 프로그램 제어가, 동시적으로-실행되는 함수가 자신의 프로세싱을 일단 완료하면 리턴할 하드웨어 스레드(20(0))에서의 어드레스를 표현한다. 레지스터들(24) 중 하나(여기서 R2로 지칭됨)에 값 <curr_thread>가 저장될 것임을 표시하는 LOAD 명령(118)이 LOAD 명령(116)에 후속된다. 값 <curr_thread>는, 하드웨어 스레드(20(0))에 대한 식별자(72)를 표현하며, 동시적으로-실행되는 함수가 자신의 프로세싱을 일단 끝내면 프로그램 제어가 리턴해야 할 하드웨어 스레드(20))를 표시한다.
[0048] 그 후, CONTINUE 명령(120)이 명령 프로세싱 회로(12)에 의해 명령 스트림(112)에서 실행된다. CONTINUE 명령(120)의 파라미터 <target_addr> 및 레지스터 마스크 <R0-R2>를 특정한다. CONTINUE 명령(120)의 파라미터 <target_addr>는, 동시적으로 실행될 함수의 어드레스를 표시한다. 파라미터 <R0-R2>는, CONTINUE 명령(120)의 실행에 의해 생성되는 프로그램 제어의 동시적 전달에 대한 요청(56)에 하드웨어 스레드(20(0))의 레지스터들 R0, R1, 및 R2에 대응하는 레지스터 아이덴티티들(76) 및 레지스터 컨텐츠들(78)이 포함될 것임을 표시하는 레지스터 마스크(70)이다.
[0049] CONTINUE 명령(120)의 검출 및 실행 시, 명령 프로세싱 회로(12)는 요청(136)을 하드웨어 FIFO 큐(34)에 인큐잉한다. 이러한 예에서, 요청(136)은 CONTINUE 명령(120)의 파라미터 <target_addr>에 의해 특정되는 어드레스를 포함하고, 추가로, 레지스터들 R0-R2에 대한 레지스터 아이덴티티들(76)(<ID R0-R2>로 지정됨) 및 레지스터들 R0-R2의 대응하는 레지스터 컨텐츠들(78)(<Content R0-R2>로 지칭됨)을 포함한다. 요청(136)을 인큐잉한 이후, 명령 스트림(112)의 프로세싱은, CONTINUE 명령(120)에 후속하는 다음 명령으로 계속된다.
[0050] 위에 설명된 하드웨어 스레드(20(0))에서의 명령 스트림(112)의 프로그램 흐름과 동시적으로, 명령 스트림(126)이 하드웨어 스레드(22(0))에서 실행됨으로써, 결국 DISPATCH 명령(128)에 이르게 된다. DISPATCH 명령(128)은, 하드웨어 FIFO 큐(34)에서의 가장 오래된 요청(이러한 예시에서, 요청(136))을 배분하는 동작을 표시한다. 요청(136)을 배분할 시, 명령 프로세싱 회로(12)는, 요청(136)의 레지스터 아이덴티티들(76) <ID R0-R2> 및 레지스터 컨텐츠들(78) <Content R0-R2>을 사용하여 레지스터들(28)의 레지스터들 R0-R2의 값들을 하드웨어 스레드(22(0))에 복원하며, 이는 하드웨어 스레드(20(0))의 레지스터들 R0-R2에 대응한다. 그 후, 하드웨어 스레드(22(0))에서의 프로그램 제어는, 요청(136)의 파라미터 <target_address>에 의해 표시되는 어드레스에 로케이팅되는 명령(130)에 전달된다.
[0051] 명령 스트림(126)의 실행은 명령(130)으로 계속된다. 이러한 예에서, 명령(130)은 Instr0으로 지정되며, 원하는 기능을 수행하거나 또는 원하는 결과를 계산하기 위한 하나 또는 그 초과의 명령들을 표현할 수 있다. 명령(들) Instr0은, 하드웨어 스레드(20(0))의 레지스터 R0에 본래 저장된 값 및 하드웨어 스레드(22(0))의 레지스터 R0에 현재 저장된 값을, 결과 값("<result>")을 계산하기 위한 입력으로 사용할 수 있다. 다음으로, 명령 스트림(126)은, 계산된 결과 값 <result>가 하드웨어 스레드(22(0))의 레지스터 R0에 로딩될 것임을 표시하는 LOAD 명령(132)으로 진행된다.
[0052] 그 후, CONTINUE 명령(134)이 명령 프로세싱 회로(12)에 의해 명령 스트림(126)에서 실행된다. CONTINUE 명령(134)은, 하드웨어 스레드(22(0))의 레지스터 R1의 컨텐츠, 레지스터 마스크 <R0>, 및 하드웨어 스레드(22(0))의 레지스터 R2의 컨텐츠를 포함하는 파라미터들을 특정한다. 위에 언급된 바와 같이, 하드웨어 스레드(22(0))의 레지스터 R1의 컨텐츠는 하드웨어 스레드(20(0))의 레지스터 R1에 저장된 값 <return_addr>이며, 프로세싱이 하드웨어 스레드(20(0))에서 재개하기 위한 리턴 어드레스를 표시한다. 레지스터 마스크 <R0>는, CONTINUE 명령(134)에 대한 응답으로 생성되는 프로그램 제어의 동시적 전달에 대한 요청 내에 하드웨어 스레드(22(0))의 레지스터 R0에 대응하는 레지스터 아이덴티티(76) 및 레지스터 컨텐츠(78)가 포함될 것임을 표시한다. 위에 언급된 바와 같이, 하드웨어 스레드(22(0))의 레지스터 R0는 동시적으로 실행되는 함수의 결과를 저장한다. 하드웨어 스레드(22(0))의 레지스터 R2의 컨텐츠는, 하드웨어 스레드(20(0))의 레지스터 R2에 저장되는 값 <curr_thread>이며, CONTINUE 명령(134)에 의해 생성되는 요청이 디큐잉되어야 하는 하드웨어 스레드(20, 22)를 표시한다.
[0053] CONTINUE 명령(134)을 검출하는 것에 대한 응답으로, 명령 프로세싱 회로(12)는 요청(138)을 하드웨어 FIFO 큐(34)에 인큐잉한다. 이러한 예에서, 요청(138)은, CONTINUE 명령(134)의 파라미터 R0에 의해 특정되는 값 <return_addr>을 포함하며, 추가로, 하드웨어 스레드(22(0))의 레지스터 R0에 대한 레지스터 아이덴티티(76)(<ID R0>로 지정됨) 및 하드웨어 스레드(22(0))의 레지스터 R0의 레지스터 컨텐츠(78)(<Content R0>로 지칭됨)를 포함한다. 요청(138)을 인큐잉한 이후, 명령 스트림(126)의 프로세싱은 CONTINUE 명령(134)에 후속하는 다음 명령으로 계속된다.
[0054] 이제 하드웨어 스레드(20(0))의 명령 스트림(112)으로 리턴하면, 명령 스트림(112)에서 DISPATCH 명령(122)을 직면(encounter)한다. DISPATCH 명령(122)은, 하드웨어 FIFO 큐(34)로부터 하드웨어 FIFO 큐(34)에서의 가장 오래된 요청(이러한 예시에서, 요청(138))을 배분하는 동작을 표시한다. 요청(138)을 배분할 시, 명령 프로세싱 회로(12)는, 요청(138)의 레지스터 아이덴티티 <ID R0> 및 레지스터 컨텐츠 <Content R0>을 사용하여, 하드웨어 스레드(22(0))의 레지스터 R0에 대응하는 하드웨어 스레드(20(0))에서의 레지스터들(24) 중 하나의 값들을 복원한다. 그 후, 하드웨어 스레드(20(0))에서의 프로그램 제어는, 요청(138)의 파라미터 <return_address>에 의해 표시되는 어드레스에 로케이팅되는 명령(124)(이러한 예에서 Instr0으로 지칭됨)에 전달된다.
[0055] 본원에 개시된 실시예들에 따른, 멀티코어 프로세서에서의 동시적 함수들의 효율적인 하드웨어 배분, 및 관련된 프로세서 시스템들, 방법들, 및 컴퓨터-판독가능 매체들은, 임의의 프로세서-기반 디바이스에서 제공되거나 임의의 프로세서-기반 디바이스 내에 통합될 수 있다. 제한이 아닌 예들은, 셋 톱 박스, 엔터테인먼트 유닛, 내비게이션 디바이스, 통신 디바이스, 고정 위치 데이터 유닛, 모바일 위치 데이터 유닛, 모바일 폰, 셀룰러 폰, 컴퓨터, 휴대용 컴퓨터, 데스크톱 컴퓨터, 개인 휴대 정보 단말(PDA), 모니터, 컴퓨터 모니터, 텔레비전, 튜너, 라디오, 위성 라디오, 뮤직 플레이어, 디지털 뮤직 플레이어, 휴대용 뮤직 플레이어, 디지털 비디오 플레이어, 비디오 플레이어, 디지털 비디오 디스크(DVD) 플레이어, 및 휴대용 디지털 비디오 플레이어를 포함한다.
[0056] 이와 관련하여, 도 8은, 도 1의 멀티코어 프로세서(10) 및 명령 프로세싱 회로(12)를 제공할 수 있는 프로세서-기반 시스템(140)의 예를 예시한다. 이러한 예에서, 멀티코어 프로세서(10)는, 명령 프로세싱 회로(12)를 포함할 수 있고, 일시적으로 저장된 데이터에 대한 고속 액세스를 위해 캐시 메모리(142)를 가질 수 있다. 멀티코어 프로세서(10)는 시스템 버스(144)에 커플링되고, 프로세서-기반 시스템(140)에 포함된 마스터 및 슬레이브 디바이스들을 상호커플링시킬 수 있다. 잘 알려져 있는 바와 같이, 멀티코어 프로세서(10)는, 시스템 버스(144)를 통해 어드레스, 제어, 및 데이터 정보를 교환함으로써 이들 다른 디바이스들과 통신한다. 예를 들어, 멀티코어 프로세서(10)는, 슬레이브 디바이스의 일 예로서 메모리 제어기(146)에 버스 트랜잭션(transaction) 요청들을 통신할 수 있다. 도 8에 예시되진 않았지만, 다수의 시스템 버스들(144)이 제공될 수 있다.
[0057] 다른 마스터 및 슬레이브 디바이스들이 시스템 버스(144)에 연결될 수 있다. 도 8에 예시된 바와 같이, 이들 디바이스들은 예들로서, 메모리 시스템(148), 하나 또는 그 초과의 입력 디바이스들(150), 하나 또는 그 초과의 출력 디바이스들(152), 하나 또는 그 초과의 네트워크 인터페이스 디바이스들(154), 및 하나 또는 그 초과의 디스플레이 제어기들(156)을 포함할 수 있다. 입력 디바이스(들)(150)는, 입력 키들, 스위치들, 보이스 프로세서들 등을 포함하지만 이에 제한되지 않는 임의의 타입의 입력 디바이스를 포함할 수 있다. 출력 디바이스(들)(152)는, 오디오, 비디오, 다른 시각적 표시기들 등을 포함하지만 이에 제한되지 않는 임의의 타입의 출력 디바이스를 포함할 수 있다. 네트워크 인터페이스 디바이스(들)(154)는, 네트워크(158)로의 그리고 네트워크(158)로부터의 데이터의 교환을 허용하도록 구성되는 임의의 디바이스들일 수 있다. 네트워크(158)는, 유선 또는 무선 네트워크, 개인 또는 공용 네트워크, 로컬 영역 네트워크(LAN), WLAN(wide local area network), 및 인터넷을 포함하지만 이에 제한되지 않는 임의의 타입의 네트워크일 수 있다. 네트워크 인터페이스 디바이스(들)(154)는, 원하는 임의의 타입의 통신 프로토콜을 지원하도록 구성될 수 있다. 메모리 시스템(148)은, 하나 또는 그 초과의 메모리 유닛들(160(0-N))을 포함할 수 있다.
[0058] 또한, 멀티코어 프로세서(10)는, 하나 또는 그 초과의 디스플레이들(162)에 전송되는 정보를 제어하기 위해 시스템 버스(144)를 통해 디스플레이 제어기(들)(156)에 액세스하도록 구성될 수 있다. 디스플레이 제어기(들)(156)는, 하나 또는 그 초과의 비디오 프로세서들(164)을 통해 디스플레이될 정보를 디스플레이(들)(162)에 전송하며, 그 비디오 프로세서들(164)은, 디스플레이(들)(162)에 적절한 포맷으로 디스플레이되도록 정보를 프로세싱한다. 디스플레이(들)(162)는 CRT(cathode ray tube), LCD(liquid crystal display), 플라즈마 디스플레이 등을 포함하지만 이에 제한되지 않는 임의의 타입의 디스플레이를 포함할 수 있다.
[0059] 당업자들은, 본원에 개시된 실시예들과 관련하여 설명된 다양한 예시적인 로직 블록들, 모듈들, 회로들, 및 알고리즘들이 전자 하드웨어, 메모리 또는 다른 컴퓨터-판독가능 매체에 저장되고 프로세서 또는 다른 프로세싱 디바이스에 의해 실행되는 명령들, 또는 이 둘의 결합들로서 구현될 수 있음을 추가적으로 인식할 것이다. 본원에 설명된 아비터(arbiter)들, 마스터 디바이스들, 및 슬레이브 디바이스들은, 예들로서, 임의의 회로, 하드웨어 컴포넌트, 집적 회로(IC), 또는 IC 칩에서 이용될 수 있다. 본원에 개시된 메모리는 임의의 타입 및 사이즈의 메모리일 수 있으며, 임의의 타입의 원하는 정보를 저장하도록 구성될 수 있다. 이러한 상호교환가능성을 명확히 예시하기 위해, 다양한 예시적인 컴포넌트들, 블록들, 모듈들, 회로들, 및 단계들은 그들의 기능의 관점들에서 일반적으로 상술되었다. 그러한 기능이 어떻게 구현되는지는 특정 애플리케이션, 설계 선택들, 및/또는 전체 시스템에 부과된 설계 제약들에 의존한다. 당업자들은 설명된 기능을 각각의 특정한 애플리케이션에 대해 다양한 방식들로 구현할 수 있지만, 그러한 구현 결정들이 본 개시내용의 범위를 벗어나게 하는 것으로서 해석되지는 않아야 한다.
[0060] 본원에 개시된 실시예들과 관련하여 설명된 다양한 예시적인 로직 블록들, 모듈들, 및 회로들은 프로세서, 디지털 신호 프로세서(DSP), 주문형 집적회로(ASIC), 필드 프로그래밍가능 게이트 어레이(FPGA) 또는 다른 프로그래밍가능 로직 디바이스, 이산 게이트 또는 트랜지스터 로직, 이산 하드웨어 컴포넌트들, 또는 본원에 설명된 기능들을 수행하도록 설계된 이들의 임의의 결합으로 구현되거나 수행될 수 있다. 프로세서는 마이크로프로세서일 수 있지만, 대안적으로, 프로세서는 임의의 종래의 프로세서, 제어기, 마이크로제어기, 또는 상태 머신일 수 있다. 또한, 프로세서는 컴퓨팅 디바이스들의 결합, 예를 들어 DSP와 마이크로프로세서의 결합, 복수의 마이크로프로세서들, DSP 코어와 결합된 하나 또는 그 초과의 마이크로프로세서들, 또는 임의의 다른 그러한 구성으로서 구현될 수 있다.
[0061] 본원에 개시된 실시예들은 하드웨어, 및 하드웨어에 저장된 명령들로 구현될 수 있으며, 예를 들어, 랜덤 액세스 메모리(RAM), 플래시 메모리, 판독 전용 메모리(ROM), 전기적으로 프로그래밍가능 ROM(EPROM), 전기적으로 소거가능한 프로그래밍가능 ROM(EEPROM), 레지스터들, 하드 디스크, 착탈형 디스크, CD-ROM, 또는 당업계에 알려진 임의의 다른 형태의 컴퓨터 판독가능 매체에 상주할 수 있다. 예시적인 저장 매체는, 프로세서가 저장 매체로부터 정보를 판독하고, 저장 매체에 정보를 기입할 수 있도록 프로세서에 커플링된다. 대안적으로, 저장 매체는 프로세서에 통합될 수 있다. 프로세서 및 저장 매체는 ASIC에 상주할 수 있다. ASIC은 원격 스테이션에 상주할 수 있다. 대안적으로, 프로세서 및 저장 매체는 원격 스테이션, 기지국, 또는 서버 내의 별개의 컴포넌트들로서 상주할 수 있다.
[0062] 본원의 예시적인 실시예들 중 임의의 실시예에서 설명된 동작 단계들은 예들 및 설명을 제공하기 위해 설명됨을 또한 유의한다. 설명된 동작들은 예시된 시퀀스들 이외에 다수의 상이한 시퀀스들로 수행될 수 있다. 또한, 단일 동작 단계로 설명된 동작들은 실제로, 다수의 상이한 단계들로 수행될 수 있다. 부가적으로, 예시적인 실시예들에서 논의된 하나 또는 그 초과의 동작 단계들은 결합될 수 있다. 흐름도 도면들에서 예시된 동작 단계들이, 당업자에게 용이하게 명백할 바와 같이 다수의 상이한 변형들을 겪을 수 있음이 이해될 것이다. 당업자들은, 정보 및 신호들이 다양한 상이한 기술들 및 기법들 중 임의의 기술 및 기법을 사용하여 표현될 수 있음을 또한 이해할 것이다. 예를 들어, 상기 설명 전반에 걸쳐 참조될 수 있는 데이터, 명령들, 커맨드들, 정보, 신호들, 비트들, 심볼들, 및 칩들은 전압들, 전류들, 전자기파들, 자기장들 또는 자기 입자들, 광학 필드들 또는 광학 입자들, 또는 이들의 임의의 결합에 의해 표현될 수 있다.
[0063] 본 개시내용의 이전 설명은 임의의 당업자가 본 개시내용을 사용 또는 실시할 수 있도록 제공된다. 본 개시내용에 대한 다양한 변형들은 당업자들에게 용이하게 명백할 것이며, 본원에 정의된 일반적인 원리들은 본 개시내용의 사상 또는 범위를 벗어나지 않으면서 다른 변경들에 적용될 수 있다. 따라서, 본 개시내용은 본원에 설명된 예들 및 설계들로 제한되도록 의도되는 것이 아니라, 본원에 개시된 원리들 및 신규한 특성들과 일치하는 가장 넓은 범위에 부합할 것이다.

Claims (20)

  1. 동시적 함수(concurrent function)들의 효율적인 하드웨어 배분(dispatch)을 제공하는 멀티코어 프로세서로서,
    복수의 프로세싱 코어들 ― 복수의 프로세싱 코어들은 복수의 하드웨어 스레드들을 포함함 ―;
    상기 복수의 프로세싱 코어들에 통신가능하게 커플링되는 하드웨어 FIFO(first-in-first-out) 큐(queue); 및
    명령 프로세싱 회로를 포함하며,
    상기 명령 프로세싱 회로는,
    상기 복수의 하드웨어 스레드들 중 제 1 하드웨어 스레드에서, 프로그램 제어의 동시적 전달을 요청하는 동작을 표시하는 제 1 명령을 검출하고;
    상기 하드웨어 FIFO 큐에 상기 프로그램 제어의 동시적 전달에 대한 요청을 인큐잉(enqueue)하고;
    상기 복수의 하드웨어 스레드들 중 제 2 하드웨어 스레드에서, 상기 하드웨어 FIFO 큐에서의 상기 프로그램 제어의 동시적 전달에 대한 요청을 배분하는 동작을 표시하는 제 2 명령을 검출하고;
    상기 하드웨어 FIFO 큐로부터 상기 프로그램 제어의 동시적 전달에 대한 요청을 디큐잉(dequeue)하고; 그리고
    상기 제 2 하드웨어 스레드에서 상기 프로그램 제어의 동시적 전달을 실행
    하도록 구성되는, 동시적 함수들의 효율적인 하드웨어 배분을 제공하는 멀티코어 프로세서.
  2. 제 1 항에 있어서,
    상기 명령 프로세싱 회로는, 상기 제 1 하드웨어 스레드의 하나 또는 그 초과의 레지스터들에 대응하는 하나 또는 그 초과의 레지스터 아이덴티티(identity)들 및 상기 하나 또는 그 초과의 레지스터들의 개별적인 레지스터들의 레지스터 컨텐츠(content)를 상기 요청에 포함시킴으로써, 상기 프로그램 제어의 동시적 전달에 대한 요청을 인큐잉하도록 구성되는, 동시적 함수들의 효율적인 하드웨어 배분을 제공하는 멀티코어 프로세서.
  3. 제 2 항에 있어서,
    상기 명령 프로세싱 회로는,
    상기 요청에 포함되는 상기 하나 또는 그 초과의 레지스터들의 개별적인 레지스터들의 레지스터 컨텐츠를 리트리브(retrieve)하고; 그리고
    상기 프로그램 제어의 동시적 전달을 실행하기에 앞서, 상기 하나 또는 그 초과의 레지스터들의 개별적인 레지스터들의 레지스터 컨텐츠를 상기 제 2 하드웨어 스레드의 대응하는 하나 또는 그 초과의 레지스터들에 복원함으로써
    상기 프로그램 제어의 동시적 전달에 대한 요청을 디큐잉하도록 구성되는, 동시적 함수들의 효율적인 하드웨어 배분을 제공하는 멀티코어 프로세서.
  4. 제 1 항에 있어서,
    상기 명령 프로세싱 회로는, 타겟(target) 하드웨어 스레드의 식별자를 상기 요청에 포함시킴으로써, 상기 프로그램 제어의 동시적 전달에 대한 요청을 인큐잉하도록 구성되는, 동시적 함수들의 효율적인 하드웨어 배분을 제공하는 멀티코어 프로세서.
  5. 제 4 항에 있어서,
    상기 명령 프로세싱 회로는, 상기 요청에 포함되는 상기 타겟 하드웨어 스레드의 식별자가 상기 제 2 하드웨어 스레드를 타겟 하드웨어 스레드로서 식별한다는 것을 결정함으로써, 상기 프로그램 제어의 동시적 전달에 대한 요청을 디큐잉하도록 구성되는, 동시적 함수들의 효율적인 하드웨어 배분을 제공하는 멀티코어 프로세서.
  6. 제 1 항에 있어서,
    상기 명령 프로세싱 회로는 추가로,
    상기 프로그램 제어의 동시적 전달에 대한 요청이 성공적으로 인큐잉되었는지 여부를 결정하도록; 그리고
    상기 프로그램 제어의 동시적 전달에 대한 요청이 성공적으로 인큐잉되지 않았다고 결정하는 것에 대한 응답으로, 중단(interrupt)을 발생시키도록
    구성되는, 동시적 함수들의 효율적인 하드웨어 배분을 제공하는 멀티코어 프로세서.
  7. 제 1 항에 있어서,
    집적 회로 내에 통합되는, 동시적 함수들의 효율적인 하드웨어 배분을 제공하는 멀티코어 프로세서.
  8. 제 1 항에 있어서,
    셋 톱 박스, 엔터테인먼트 유닛, 내비게이션 디바이스, 통신 디바이스, 고정 위치 데이터 유닛, 모바일 위치 데이터 유닛, 모바일 폰, 셀룰러 폰, 컴퓨터, 휴대용 컴퓨터, 데스크톱 컴퓨터, 개인 휴대 정보 단말(PDA), 모니터, 컴퓨터 모니터, 텔레비전, 튜너, 라디오, 위성 라디오, 뮤직 플레이어, 디지털 뮤직 플레이어, 휴대용 뮤직 플레이어, 디지털 비디오 플레이어, 비디오 플레이어, 디지털 비디오 디스크(DVD) 플레이어, 및 휴대용 디지털 비디오 플레이어로 이루어지는 그룹으로부터 선택되는 디바이스 내에 통합되는, 동시적 함수들의 효율적인 하드웨어 배분을 제공하는 멀티코어 프로세서.
  9. 동시적 함수들의 효율적인 하드웨어 배분을 제공하는 멀티코어 프로세서로서,
    하드웨어 FIFO(first-in-first-out) 큐 수단;
    복수의 하드웨어 스레드들을 포함하고 상기 하드웨어 FIFO 큐 수단에 통신가능하게 커플링되는 복수의 프로세싱 코어들; 및
    명령 프로세싱 회로 수단을 포함하며,
    상기 명령 프로세싱 회로 수단은,
    상기 복수의 하드웨어 스레드들 중 제 1 하드웨어 스레드에서, 프로그램 제어의 동시적 전달을 요청하는 동작을 표시하는 제 1 명령을 검출하기 위한 수단;
    상기 하드웨어 FIFO 큐 수단에 상기 프로그램 제어의 동시적 전달에 대한 요청을 인큐잉하기 위한 수단;
    상기 복수의 하드웨어 스레드들 중 제 2 하드웨어 스레드에서, 상기 하드웨어 FIFO 큐 수단에서의 상기 프로그램 제어의 동시적 전달에 대한 요청을 배분하는 동작을 표시하는 제 2 명령을 검출하기 위한 수단;
    상기 하드웨어 FIFO 큐 수단으로부터 상기 프로그램 제어의 동시적 전달에 대한 요청을 디큐잉하기 위한 수단; 및
    상기 제 2 하드웨어 스레드에서 상기 프로그램 제어의 동시적 전달을 실행하기 위한 수단
    을 포함하는, 동시적 함수들의 효율적인 하드웨어 배분을 제공하는 멀티코어 프로세서.
  10. 동시적 함수들의 효율적인 하드웨어 배분을 위한 방법으로서,
    멀티코어 프로세서의 제 1 하드웨어 스레드에서, 프로그램 제어의 동시적 전달을 요청하는 동작을 표시하는 제 1 명령을 검출하는 단계;
    하드웨어 FIFO(first-in-first-out) 큐에 상기 프로그램 제어의 동시적 전달에 대한 요청을 인큐잉하는 단계;
    상기 멀티코어 프로세서의 제 2 하드웨어 스레드에서, 상기 하드웨어 FIFO 큐에서의 상기 프로그램 제어의 동시적 전달에 대한 요청을 배분하는 동작을 표시하는 제 2 명령을 검출하는 단계;
    상기 하드웨어 FIFO 큐로부터 상기 프로그램 제어의 동시적 전달에 대한 요청을 디큐잉하는 단계; 및
    상기 제 2 하드웨어 스레드에서 상기 프로그램 제어의 동시적 전달을 실행하는 단계를 포함하는, 동시적 함수들의 효율적인 하드웨어 배분을 위한 방법.
  11. 제 10 항에 있어서,
    상기 프로그램 제어의 동시적 전달에 대한 요청을 인큐잉하는 단계는, 상기 제 1 하드웨어 스레드의 하나 또는 그 초과의 레지스터들에 대응하는 하나 또는 그 초과의 레지스터 아이덴티티들 및 상기 하나 또는 그 초과의 레지스터들의 개별적인 레지스터들의 레지스터 컨텐츠를 상기 요청에 포함시키는 단계를 포함하는, 동시적 함수들의 효율적인 하드웨어 배분을 위한 방법.
  12. 제 11 항에 있어서,
    상기 프로그램 제어의 동시적 전달에 대한 요청을 디큐잉하는 단계는,
    상기 요청에 포함되는 하나 또는 그 초과의 레지스터들의 개별적인 레지스터들의 레지스터 컨텐츠를 리트리브하는 단계; 및
    상기 프로그램 제어의 동시적 전달을 실행하는 단계에 앞서, 상기 하나 또는 그 초과의 레지스터들의 개별적인 레지스터들의 레지스터 컨텐츠를 상기 제 2 하드웨어 스레드의 대응하는 하나 또는 그 초과의 레지스터들에 복원하는 단계
    를 포함하는, 동시적 함수들의 효율적인 하드웨어 배분을 위한 방법.
  13. 제 10 항에 있어서,
    상기 프로그램 제어의 동시적 전달에 대한 요청을 인큐잉하는 단계는, 타겟 하드웨어 스레드의 식별자를 상기 요청에 포함시키는 단계를 포함하는, 동시적 함수들의 효율적인 하드웨어 배분을 위한 방법.
  14. 제 13 항에 있어서,
    상기 프로그램 제어의 동시적 전달에 대한 요청을 디큐잉하는 단계는, 상기 요청에 포함되는 상기 타겟 하드웨어 스레드의 식별자가 상기 제 2 하드웨어 스레드를 타겟 하드웨어 스레드로서 식별한다는 것을 결정하는 단계를 포함하는, 동시적 함수들의 효율적인 하드웨어 배분을 위한 방법.
  15. 제 10 항에 있어서,
    상기 프로그램 제어의 동시적 전달에 대한 요청이 성공적으로 인큐잉되었는지 여부를 결정하는 단계; 및
    상기 프로그램 제어의 동시적 전달에 대한 요청이 성공적으로 인큐잉되지 않았다고 결정하는 것에 대한 응답으로, 중단을 발생시키는 단계를 더 포함하는, 동시적 함수들의 효율적인 하드웨어 배분을 위한 방법.
  16. 상기 컴퓨터-실행가능 명령들은 프로세서로 하여금 동시적 함수들의 효율적인 하드웨어 배분을 위한 방법을 구현하게 하는 컴퓨터-실행가능 명령들이 저장된 비-일시적인 컴퓨터-판독가능 매체로서,
    상기 방법은,
    멀티코어 프로세서의 제 1 하드웨어 스레드에서, 프로그램 제어의 동시적 전달을 요청하는 동작을 표시하는 제 1 명령을 검출하는 단계;
    하드웨어 FIFO(first-in-first-out) 큐에 상기 프로그램 제어의 동시적 전달에 대한 요청을 인큐잉하는 단계;
    상기 멀티코어 프로세서의 제 2 하드웨어 스레드에서, 상기 하드웨어 FIFO 큐에서의 상기 프로그램 제어의 동시적 전달에 대한 요청을 배분하는 동작을 표시하는 제 2 명령을 검출하는 단계;
    상기 하드웨어 FIFO 큐로부터 상기 프로그램 제어의 동시적 전달에 대한 요청을 디큐잉하는 단계; 및
    상기 제 2 하드웨어 스레드에서 상기 프로그램 제어의 동시적 전달을 실행하는 단계
    를 포함하는, 비-일시적인 컴퓨터-판독가능 매체.
  17. 제 16 항에 있어서,
    상기 프로그램 제어의 동시적 전달에 대한 요청을 인큐잉하는 단계는, 상기 제 1 하드웨어 스레드의 하나 또는 그 초과의 레지스터들에 대응하는 하나 또는 그 초과의 레지스터 아이덴티티들 및 상기 하나 또는 그 초과의 레지스터들의 개별적인 레지스터들의 레지스터 컨텐츠를 상기 요청에 포함시키는 단계를 포함하는, 비-일시적인 컴퓨터-판독가능 매체.
  18. 제 17 항에 있어서,
    상기 프로그램 제어의 동시적 전달에 대한 요청을 디큐잉하는 단계는,
    상기 요청에 포함되는 하나 또는 그 초과의 레지스터들의 개별적인 레지스터들의 레지스터 컨텐츠를 리트리브하는 단계; 및
    상기 프로그램 제어의 동시적 전달을 실행하는 단계에 앞서, 상기 하나 또는 그 초과의 레지스터들의 개별적인 레지스터들의 레지스터 컨텐츠를 상기 제 2 하드웨어 스레드의 대응하는 하나 또는 그 초과의 레지스터들에 복원하는 단계
    를 포함하는, 비-일시적인 컴퓨터-판독가능 매체.
  19. 제 16 항에 있어서,
    상기 프로그램 제어의 동시적 전달에 대한 요청을 인큐잉하는 단계는, 타겟 하드웨어 스레드의 식별자를 상기 요청에 포함시키는 단계를 포함하는, 비-일시적인 컴퓨터-판독가능 매체.
  20. 제 19 항에 있어서,
    상기 프로그램 제어의 동시적 전달에 대한 요청을 디큐잉하는 단계는, 상기 요청에 포함되는 상기 타겟 하드웨어 스레드의 식별자가 상기 제 2 하드웨어 스레드를 타겟 하드웨어 스레드로서 식별한다는 것을 결정하는 단계를 포함하는, 비-일시적인 컴퓨터-판독가능 매체.
KR1020167014107A 2013-11-01 2014-10-31 멀티코어 프로세서들에서 동시적 함수들의 효율적인 하드웨어 배분, 및 관련 프로세서 시스템들, 방법들, 및 컴퓨터-판독가능 매체들 KR20160082685A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201361898745P 2013-11-01 2013-11-01
US61/898,745 2013-11-01
US14/224,619 US20150127927A1 (en) 2013-11-01 2014-03-25 Efficient hardware dispatching of concurrent functions in multicore processors, and related processor systems, methods, and computer-readable media
US14/224,619 2014-03-25
PCT/US2014/063324 WO2015066412A1 (en) 2013-11-01 2014-10-31 Efficient hardware dispatching of concurrent functions in multicore processors, and related processor systems, methods, and computer-readable media

Publications (1)

Publication Number Publication Date
KR20160082685A true KR20160082685A (ko) 2016-07-08

Family

ID=51946028

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167014107A KR20160082685A (ko) 2013-11-01 2014-10-31 멀티코어 프로세서들에서 동시적 함수들의 효율적인 하드웨어 배분, 및 관련 프로세서 시스템들, 방법들, 및 컴퓨터-판독가능 매체들

Country Status (8)

Country Link
US (1) US20150127927A1 (ko)
EP (1) EP3063623A1 (ko)
JP (1) JP2016535887A (ko)
KR (1) KR20160082685A (ko)
CN (1) CN105683905A (ko)
CA (1) CA2926980A1 (ko)
TW (1) TWI633489B (ko)
WO (1) WO2015066412A1 (ko)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2533414B (en) * 2014-12-19 2021-12-01 Advanced Risc Mach Ltd Apparatus with shared transactional processing resource, and data processing method
US10445271B2 (en) * 2016-01-04 2019-10-15 Intel Corporation Multi-core communication acceleration using hardware queue device
US10387154B2 (en) * 2016-03-14 2019-08-20 International Business Machines Corporation Thread migration using a microcode engine of a multi-slice processor
US10489206B2 (en) * 2016-12-30 2019-11-26 Texas Instruments Incorporated Scheduling of concurrent block based data processing tasks on a hardware thread scheduler
WO2018231313A1 (en) * 2017-06-12 2018-12-20 Sandisk Technologies Llc Multicore on-die memory microcontroller
CN109388592B (zh) * 2017-08-02 2022-03-29 伊姆西Ip控股有限责任公司 采用用户空间存储驱动器内的多个排队结构来提高速度
US11119972B2 (en) * 2018-05-07 2021-09-14 Micron Technology, Inc. Multi-threaded, self-scheduling processor
US11157286B2 (en) * 2018-05-07 2021-10-26 Micron Technology, Inc. Non-cached loads and stores in a system having a multi-threaded, self-scheduling processor
US11360809B2 (en) * 2018-06-29 2022-06-14 Intel Corporation Multithreaded processor core with hardware-assisted task scheduling
US10733016B1 (en) * 2019-04-26 2020-08-04 Google Llc Optimizing hardware FIFO instructions

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU7340600A (en) * 1999-09-01 2001-04-10 Intel Corporation Branch instruction for multithreaded processor
US6526430B1 (en) * 1999-10-04 2003-02-25 Texas Instruments Incorporated Reconfigurable SIMD coprocessor architecture for sum of absolute differences and symmetric filtering (scalable MAC engine for image processing)
US20020199179A1 (en) * 2001-06-21 2002-12-26 Lavery Daniel M. Method and apparatus for compiler-generated triggering of auxiliary codes
US7743376B2 (en) * 2004-09-13 2010-06-22 Broadcom Corporation Method and apparatus for managing tasks in a multiprocessor system
GB0420442D0 (en) * 2004-09-14 2004-10-20 Ignios Ltd Debug in a multicore architecture
JP5260962B2 (ja) * 2004-12-30 2013-08-14 インテル・コーポレーション 複数の命令シーケンサでのスレッド実行に基づく命令セットのためのメカニズム
US7490184B2 (en) * 2005-06-08 2009-02-10 International Business Machines Corporation Systems and methods for data intervention for out-of-order castouts
US20070074217A1 (en) * 2005-09-26 2007-03-29 Ryan Rakvic Scheduling optimizations for user-level threads
US8341604B2 (en) * 2006-11-15 2012-12-25 Qualcomm Incorporated Embedded trace macrocell for enhanced digital signal processor debugging operations
US8661227B2 (en) * 2010-09-17 2014-02-25 International Business Machines Corporation Multi-level register file supporting multiple threads

Also Published As

Publication number Publication date
CN105683905A (zh) 2016-06-15
WO2015066412A1 (en) 2015-05-07
EP3063623A1 (en) 2016-09-07
TW201528133A (zh) 2015-07-16
JP2016535887A (ja) 2016-11-17
CA2926980A1 (en) 2015-05-07
US20150127927A1 (en) 2015-05-07
TWI633489B (zh) 2018-08-21

Similar Documents

Publication Publication Date Title
KR20160082685A (ko) 멀티코어 프로세서들에서 동시적 함수들의 효율적인 하드웨어 배분, 및 관련 프로세서 시스템들, 방법들, 및 컴퓨터-판독가능 매체들
US9286119B2 (en) System, method, and computer program product for management of dependency between tasks
CN106462394B (zh) 使用共享硬件资源的群集处理器核心中硬件线程的动态负载平衡以及相关的电路、方法和计算机可读媒体
CN109716292B (zh) 在块原子数据流架构中提供存储器相依性预测
US20160026607A1 (en) Parallelization of scalar operations by vector processors using data-indexed accumulators in vector register files, and related circuits, methods, and computer-readable media
US9824012B2 (en) Providing coherent merging of committed store queue entries in unordered store queues of block-based computer processors
EP2856304B1 (en) Issuing instructions to execution pipelines based on register-associated preferences, and related instruction processing circuits, processor systems, methods, and computer-readable media
TWI752354B (zh) 提供預測性指令分派節流以防止在基於亂序處理器(oop)的設備中的資源溢出
US20160274915A1 (en) PROVIDING LOWER-OVERHEAD MANAGEMENT OF DATAFLOW EXECUTION OF LOOP INSTRUCTIONS BY OUT-OF-ORDER PROCESSORS (OOPs), AND RELATED CIRCUITS, METHODS, AND COMPUTER-READABLE MEDIA
US20220197696A1 (en) Condensed command packet for high throughput and low overhead kernel launch
US20240045736A1 (en) Reordering workloads to improve concurrency across threads in processor-based devices
US20190258486A1 (en) Event-based branching for serial protocol processor-based devices

Legal Events

Date Code Title Description
PA0105 International application

Patent event date: 20160526

Patent event code: PA01051R01D

Comment text: International Patent Application

PG1501 Laying open of application
PC1203 Withdrawal of no request for examination
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid