KR102177871B1 - 멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법 - Google Patents

멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법 Download PDF

Info

Publication number
KR102177871B1
KR102177871B1 KR1020130160231A KR20130160231A KR102177871B1 KR 102177871 B1 KR102177871 B1 KR 102177871B1 KR 1020130160231 A KR1020130160231 A KR 1020130160231A KR 20130160231 A KR20130160231 A KR 20130160231A KR 102177871 B1 KR102177871 B1 KR 102177871B1
Authority
KR
South Korea
Prior art keywords
threads
unit
operators
thread
operator
Prior art date
Application number
KR1020130160231A
Other languages
English (en)
Other versions
KR20150072734A (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 삼성전자주식회사
Priority to KR1020130160231A priority Critical patent/KR102177871B1/ko
Priority to US14/542,827 priority patent/US9858116B2/en
Priority to JP2014243216A priority patent/JP6434791B2/ja
Priority to CN201410715544.6A priority patent/CN104731560B/zh
Priority to EP14197626.6A priority patent/EP2887209B1/en
Publication of KR20150072734A publication Critical patent/KR20150072734A/ko
Application granted granted Critical
Publication of KR102177871B1 publication Critical patent/KR102177871B1/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/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • G06F9/3891Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing

Abstract

멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법이 개시된다. 일 양상에 따른, 멀티 쓰레딩을 지원하기 위한 연산 유닛은, 오피코드 및 오퍼랜드를 쓰레드별로 입력 받기 위한 복수의 입력 포트와, 오퍼랜드에 대한 소정의 연산을 수행하는 복수의 연산자와, 각 오피코드를 기반으로 복수의 연산자 중에서 각 오퍼랜드에 대한 연산을 수행할 연산자를 선택하는 연산자 선택부와, 연산 수행 결과를 쓰레드 별로 출력하기 위한 복수의 출력 포트를 포함할 수 있다.

Description

멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법{FUNCTION UNIT FOR SUPPORTING MULTITHREADING, PROCESSOR COMPRISING THE SAME, AND OPERATING METHOD THEREOF}
멀티 쓰레딩 프로세서와 관련된 것으로, 특히, 멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법에 관한 것이다.
컴퓨터 분야의 기술이 발달함에 따라 하나의 작업뿐만 아니라 다수의 작업을 동시에 실행해야 하는 경우가 빈번하게 발생한다. 이러한 동시에 여러 작업을 처리하는 것을 다중 처리(Multiprocessing)라고 한다.
이러한 다중 처리는 멀티 태스킹(Multitasking), 다중화(Multiplexing) 등의 방법으로 제공되는데, 전자의 경우 다수의 작업을 다수의 프로세스(또는, 쓰레드)들이 나누어 처리하는 것을 의미하고, 후자의 경우 한 프로세스 내에서 다수의 작업을 처리하는 것을 의미한다.
특히, 멀티 태스킹은 여러 작업(즉, 태스크)을 병행하여 처리하는 것으로서, 운영체제(OS)는 멀티 태스킹을 위해 프로세스를 다수 개 실행시키거나(멀티 프로세스) 쓰레드를 다수 개 실행시키는 기법(멀티 쓰레드)을 사용한다.
이때, 멀티 프로세스와 멀티 쓰레드는 양쪽 모두 여러 흐름이 동시에 진행된다는 공통점을 가지고 있다. 하지만 멀티 프로세스에서 각 프로세스는 독립적으로 실행되며 각각 별개의 메모리를 차지하고 있는 것과 달리 멀티 쓰레드는 프로세스 내의 메모리를 공유할 수 있다. 또한, 프로세스 간의 전환 속도보다 쓰레드 간의 전환 속도가 빠르며, 쓰레드간 스케줄링도 프로세스간 스케줄링보다 상대적으로 빠르게 이루어진다.
멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법을 제공하는 것을 목적으로 한다.
일 양상에 따른, 멀티 쓰레딩을 지원하기 위한 연산 유닛은, 오피코드 및 오퍼랜드를 쓰레드별로 입력 받기 위한 복수의 입력 포트와, 오퍼랜드에 대한 소정의 연산을 수행하는 복수의 연산자와, 각 오피코드를 기반으로 복수의 연산자 중에서 각 오퍼랜드에 대한 연산을 수행할 연산자를 선택하는 연산자 선택부와, 연산 수행 결과를 쓰레드 별로 출력하기 위한 복수의 출력 포트를 포함할 수 있다.
여기서, 복수의 연산자는, 데이터 패스 상에 각 쓰레드에 할당되어 연산 수행 결과를 저장하는 복수의 레지스터를 더 포함할 수 있다.
여기서, 복수의 연산자는 각각 서로 다른 연산을 수행할 수 있다.
또한, 복수의 연산자 중 일부는 서로 동일한 연산을 수행할 수 있다.
여기서, 일부 연산자는 연산 유닛 내에서 수행 빈도가 높은 연산을 수행하기 위한 연산자일 수 있다.
여기서, 일부 연산자 각각은 자신의 현재 상태를 나타내는 신호를 생성하여 상기 연산자 선택부에 전송할 수 있다.
다른 양상에 따른 프로세서는, 복수의 쓰레드를 동시에 처리할 수 있는 적어도 하나 이상의 연산 유닛을 포함하는 프로세싱부와, 복수의 쓰레드가 동시에 동일한 연산 유닛 내에서 동일한 연산을 수행하는지 검사하여 리소스의 충돌을 감지하는 리소스 충돌 감지부와, 설정된 기준에 따라, 충돌된 쓰레드간의 처리 순서를 결정하는 리소스 스케줄러를 포함할 수 있다.
여기서, 리소스 충돌 감지부는, 적어도 하나 이상의 연산 유닛의 연산자 정보를 저장하는 리소스 정보 저장부와, 복수의 쓰레드의 각 오피코드를 각 연산 유닛 별로 비교하는 오피코드 비교부와, 비교 결과 및 상기 연산자 정보를 기반으로 리소스의 충돌 여부를 판단하는 리소스 충돌 여부 판단부를 포함할 수 있다.
여기서, 연산자 정보는 각 연산 유닛에 포함되어 있는 연산자의 종류, 개수 및 각 연산자의 상태 정보 중 적어도 하나를 포함할 수 있다.
여기서, 리소스 스케줄러는 충돌된 쓰레드 중 처리 순서가 낮은 쓰레드에 대한 스톨(stall) 신호를 생성할 수 있다.
또한, 프로세서는, 리소스의 충돌 감지 결과를 저장하는 큐를 더 포함할 수 있다.
또한, 프로세서는, 복수의 쓰레드 중 일부에 포함된 제어문의 실행에 따라 큐에 저장된 리소스 충돌 감지 결과가 유효하지 않을 경우, 큐를 플러쉬하는 플러쉬부를 더 포함할 수 있다.
또 다른 양상에 따른, 복수의 쓰레드를 동시에 처리할 수 있는 적어도 하나 이상의 연산 유닛을 포함하는 프로세서의 동작 방법은, 복수의 쓰레드가 동시에 동일한 연산 유닛 내에서 동일한 연산을 수행하는지 검사하여 리소스의 충돌을 감지하는 단계와, 기 설정된 기준에 따라, 충돌된 쓰레드간의 처리 순서를 결정하는 단계를 포함할 수 있다.
여기서, 감지하는 단계는, 복수의 쓰레드의 각 오피코드를 각 연산 유닛 별로 비교하는 단계와, 비교 결과 및 기 저장된 연산자 정보를 기반으로 리소스의 충돌 여부를 판단하는 단계를 포함할 수 있다.
여기서, 연산자 정보는 각 연산 유닛에 포함되어 있는 연산자의 종류, 개수 및 각 연산자의 상태 정보 중 적어도 하나를 포함할 수 있다.
또한, 프로세서의 동작 방법은, 충돌된 쓰레드 중 처리 순서가 낮은 쓰레드를 스톨하는 단계를 더 포함할 수 있다.
또한, 프로세서의 동작 방법은, 리소스 충돌 감지 결과를 큐에 저장하는 단계를 더 포함할 수 있다.
또한, 프로세서의 동작 방법은, 복수의 쓰레드 중 일부에 포함된 제어문의 실행에 따라 큐에 저장된 리소스 충돌 감지 결과가 유효하지 않을 경우, 큐를 플러쉬하는 단계를 더 포함할 수 있다.
다수의 연산자를 동시에 사용하여 다수의 쓰레드를 처리할 수 있는 연산 유닛을 제공함으로써, 쓰레드 레벨 병렬성(Thread Level Parallelism, TLP)을 극대화하는 것이 가능하다.
또한, 프로세서의 면적을 감소시키고 효율적인 동시 멀티 쓰레딩을 가능하게 한다.
동시 멀티 쓰레딩을 지원하기 위한 저장 장치가 별도로 존재하여 쓰레드 스위치에 따른 오버헤드가 전혀 없다.
연산 유닛 내의 다수의 연산자를 동시에 사용함으로써, 연산 유닛의 수가 늘어나는 효과를 볼 수 있어. 컴파일러가 단순해 질 수 있다.
도 1은 일 실시 예에 따른 멀티 쓰레딩을 지원하기 위한 연산 유닛의 대략적인 구성도이다.
도 2는 일 실시 예에 따른 멀티 쓰레딩을 지원하기 위한 연산 유닛의 예시도이다.
도 3는 일 실시 예에 따른 프로세서의 구성도이다.
도 4는 도 3의 리소스 충돌 감지부(320)의 상세 구성도이다.
도 5는 다른 실시 예에 따른 프로세서의 구성도이다.
도 6은 일 실시 예에 따른 프로세서(500)의 동작 방법을 도시한 도면이다.
도 7은 도 6의 리소스의 충돌을 감지하는 과정(610)의 상세 흐름도이다.
이하, 첨부된 도면을 참조하여 본 발명의 일 실시 예를 상세하게 설명한다. 본 발명을 설명함에 있어 관련된 공지 기능 또는 구성에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명을 생략할 것이다. 또한, 후술되는 용어들은 본 발명에서의 기능을 고려하여 정의된 용어들로서 이는 사용자, 운용자의 의도 또는 관례 등에 따라 달라질 수 있다. 그러므로, 그 정의는 본 명세서 전반에 걸친 내용을 토대로 내려져야 할 것이다.
도 1은 일 실시 예에 따른 멀티 쓰레딩을 지원하기 위한 연산 유닛의 구성도이다.
도 1을 참조하면, 연산 유닛(Function Unit, FU)(100)은 입력포트(110a 내지 110c), 연산자(120a 내지 120c), 연산자 선택부(130) 및 출력 포트(140a 내지 140c)를 포함할 수 있다.
입력포트(110a 내지 110c)는 오피코드 및 오퍼랜드를 쓰레드별로 입력 받을 수 있다. 예를 들어, 입력포트 #1(110a)는 쓰레드 1에 대한 오피코드 및 오퍼랜드를, 입력포트 #2(110b)는 쓰레드 2에 대한 오피코드 및 오퍼랜드를, 입력포트 #n(110c)는 쓰레드 n에 대한 오피코드 및 오퍼랜드를 입력 받을 수 있다. 이때, 입력포트의 개수는 동시에 처리하고자 하는 쓰레드의 개수와 동일할 수도 있으나, 이에 한정되는 것은 아니다.
연산자(120a 내지 120c)는 오퍼랜드(operand)에 대한 소정의 연산을 수행할 수 있다. 연산자(120a 내지 120c)는 덧셈기, 곱셈기, 나눗셈기, 비교기 등으로 구현될 수 있으나, 이에 한정되는 것은 아니다.
일 실시 예에 따르면, 각 연산자(120a 내지 120c)는 멀티 쓰레딩을 위하여, 각 연산자(120a 내지 120c)의 데이터 패스 상에 각 쓰레드에 할당되어 연산 결과를 저장하는 레지스터(register#1, register#n)를 포함할 수 있다. 이때, register#1은 쓰레드 1에 할당되고, register#n은 쓰레드 n에 할당될 수 있다.
연산자 선택부(130)는 각 입력 포트(110a 내지 110c)를 통하여 입력 받은 오피코드를 기반으로 각 오퍼랜드에 대한 연산을 수행할 연산자를 선택할 수 있다. 예를 들어, 연산자(120a)는 덧셈기, 연산자(120b)는 곱셈기, 연산자(120c)는 비교기라고 가정한다. 이때, 쓰레드 1의 오피코드가 덧셈 명령이고, 쓰레드 2의 오피코드가 곱셈 명령인 경우, 연산자 선택부(130)는 쓰레드 1의 오퍼랜드를 처리할 연산자로서 연산자(120a)를, 쓰레드 2의 오퍼랜드를 처리할 연산자로서 연산자(120b)를 선택할 수 있다. 이 경우, 연산자(120a)는 쓰레드 1의 오퍼랜드에 대하여 덧셈 연산을 수행하고, 이와 동시에, 연산자(120b)는 쓰레드 2의 오퍼랜드에 대하여 곱셈 연산을 수행하게 된다.
출력 포트(140a 내지 140c)는 연산 수행 결과를 쓰레드 별로 출력할 수 있다. 예를 들어, 출력포트 #1(140a)는 쓰레드 1에 대한 연산 수행 결과를, 출력포트 #2(140b)는 쓰레드 2에 대한 연산 수행 결과를, 출력포트 #n(140c)는 쓰레드 n에 대한 연산 수행 결과를 출력할 수 있다. 이때, 출력 포트의 개수는 동시에 처리하고자 하는 쓰레드의 개수와 동일할 수도 있으나, 이에 한정되는 것은 아니다.
이에 따르면, 연산 유닛(100)은 복수의 쓰레드를 동시에 처리하는 것이 가능하므로 쓰레드 레벨 병렬성(Thread Level Parallelism, TLP)을 극대화시키는 것이 가능하다.
한편, 일 실시 예에 따르면, 연산자(120a 내지 120c)는 서로 다른 연산을 수행하도록 구현될 수 있다. 이 경우, 연산 유닛(100)은 복수의 쓰레드에 대한 서로 다른 오피코드를 동시에 처리하는 것이 가능하다.
그러나, 연산자(120a 내지 120c)가 서로 다른 연산을 수행하도록 구현되고, 2 이상의 쓰레드가 동일한 연산 유닛(100)을 이용하여 동일한 연산을 수행하고자 하는 경우는 리소스 충돌(resource conflict)이 발생하여 우선 순위가 낮은 쓰레드가 스톨(stall)되어, 시스템의 성능 저하를 야기시킬 수 있다.
일 실시 예에 따르면, 이러한 문제를 해결하기 위해, 연산자(120a 내지 120c) 중 일부는 서로 동일한 연산을 수행하도록 구현될 수 있다. 즉, 연산 유닛(100) 내에서 수행 빈도가 높은 연산을 리소스 충돌 없이 수행하기 위해, 사용 빈도가 높은 연산자를 연산 유닛(100)에 복수 개 배치할 수 있다. 예를 들어, 다양한 쓰레드의 동작을 미리 프로파일링하여 자주 사용되는 연산자를 연산 유닛(100)에 복수 개 배치할 수 있다. 만약 프로파일링 결과, 덧셈 연산을 자주 사용하는 쓰레드들에 의해 리소스 충돌이 자주 발생하여 시스템의 성능 저하가 발생하였다면, 연산 유닛(100)에 덧셈기를 하나 더 추가하고, 각 덧셈기는 자신의 현재 상태 정보 즉, 현재 사용 가능한지 여부를 알려주는 신호를 생성하여 연산자 선택부(130)에 전송함으로써, 연산자 선택부(130)가 적절한 선택을 할 수 있도록 도와줄 수 있다.
즉, 동일한 연산을 수행하도록 구현된 일부 연산자 각각은 자신의 현재 상태를 나타내는 신호를 생성하여 출력할 수 있다. 여기서, 현재 상태를 나타내는 신호는 각 연산자의 사용 가능 여부를 알려주는 신호를 의미한다. 예를 들어, 일부 연산자 각각은 자신이 현재 연산을 수행하고 있어서, 다른 쓰레드에 대한 연산을 수행할 수 없을 때, busy 신호를 생성하여 연산자 선택부(130)로 전송할 수 있다. 이 경우, 연산자 선택부(130)는 busy 신호를 송신한 연산자를 제외한 나머지 연산자 중에서 연산을 수행할 연산자를 선택하게 된다.
또한, busy 신호를 연산자 선택부(130)로 송신한 연산자는, busy 신호 송신 당시에 수행 중이던 연산이 완료되면, 다른 쓰레드가 해당 연산자를 이용할 수 있도록 완료 신호를 생성하여 출력할 수 있다.
도 2는 일 실시 예에 따른 멀티 쓰레딩을 지원하기 위한 연산 유닛의 예시도이다. 도 2의 연산 유닛(200)은 2개의 쓰레드의 동시 처리를 지원하기 위한 연산 유닛의 예로서, 2개의 연산자(가산기 및 비교기)를 포함한다. 도 2는 설명의 편의를 위하여 2개의 연산자를 포함하는 것으로 도시한 것뿐이며, 발명의 용도 및 성능에 따라 다양한 연산자를 포함하는 것도 가능하다.
도 2를 참조하면, 연산 유닛(200)은 쓰레드 1 및 쓰레드 2에 대한 오퍼랜드 및 오피코드를 입력 받는다. 연산 유닛(200)은 각 오피코드를 기반으로 각 쓰레드의 오퍼랜드에 대한 연산을 수행할 연산자를 쓰레드 별로 선택하고, 쓰레드 별로 선택한 연산자를 이용하여 각 쓰레드의 오퍼랜드에 대한 연산을 수행한다. 예를 들어, 쓰레드 1의 오피코드가 덧셈 명령이고, 쓰레드 2의 오피코드가 비교 명령인 경우, 연산 유닛(200)은 가산기를 이용하여 쓰레드 1의 오퍼랜드에 대하여 덧셈 연산을 수행하고, 이와 동시에 비교기를 이용하여 쓰레드 2의 오퍼랜드에 대하여 비교 연산을 수행한다.
한편, 각 연산자의 데이터 패스 상에는 각 쓰레드를 위한 레지스터가 포함된다. 예를 들어, register#1은 쓰레드 1을 위한 레지스터이고, register#2는 쓰레드 2를 위한 레지스터이다. 즉, 쓰레드 1의 오퍼랜드에 대한 연산 결과는 register#1에 저장되며, 쓰레드 2의 오퍼랜드에 대한 연산 결과는 register#2에 저장된다.
그 후, 연산 유닛(200)은 2개의 출력 단자를 통하여 연산 수행 결과를 각 쓰레드 별로 출력한다.
도 3는 일 실시 예에 따른 프로세서의 구성도이다.
도 3를 참조하면, 프로세서(300)는 프로세싱부(310), 리소스 충돌 감지부(320) 및 리소스 스케줄러(330)을 포함할 수 있다.
프로세싱부(310)는 복수의 쓰레드를 동시에 처리할 수 있다. 이를 위해, 프로세싱부(310)는 복수의 쓰레드에 대한 복수의 연산을 동시에 수행할 수 있는 하나 이상의 연산 유닛(FU#0 내지 FU#n)을 포함할 수 있다. 이때, 복수의 쓰레드에 대한 복수의 연산을 동시에 수행할 수 있는 연산 유닛은 도 1을 참조하여 설명한 연산 유닛과 동일하므로, 그 상세한 설명은 생략하기로 한다.
리소스 충돌 감지부(320)는 2 이상의 쓰레드가 동시에 동일한 연산 유닛 내에서 동일한 연산을 수행하는지 검사하여 리소스의 충돌을 감지할 수 있다. 예를 들어, 쓰레드 1은 FU#0 내에서 덧셈 연산을 수행하고, 쓰레드 2는 FU#0 내에서 곱셈 연산을 수행한다면, FU#0은 덧셈 연산 및 곱셈 연산을 동시에 수행하는 것이 가능하므로, 리소스 충돌이 발생하지 않는다. 그러나, 쓰레드 1 및 쓰레드 2가 FU#1 내에서 동일한 연산인 비교 연산을 수행한다면, 비교 연산을 수행하는 비교기가 FU#1 내에 1개만 있는 경우, 리소스 충돌이 발생하게 된다. 이 경우, 리소스 충돌 감지부(320)는 FU#1의 리소스 충돌을 감지할 수 있다.
리소스 충돌 감지부(320)의 자세한 설명은 도 4을 참조하여 후술하기로 한다.
리소스 스케줄러(330)는 기 설정된 기준에 따라 충돌된 쓰레드들 간에 처리 순서를 결정할 수 있다. 예를 들면, 리소스 스케줄러(330)는 각 쓰레드에서 캐시 미스(cache miss)가 발생하였는지 지 여부를 직접 판단하거나 외부로부터 이에 관한 정보를 수신하여, 이에 따라 쓰레드들 간에 처리 순서를 결정할 수 있다. 다른 예를 들면, 리소스 스케줄러(330)는 사용자 또는 시스템에 의해 설정된 우선 순위에 따라 각 쓰레드의 처리 순서를 결정할 수도 있다. 그러나, 상술한 예에 한정되는 것은 아니다.
리소스 스케줄러(330)는 결정된 처리 순서를 기반으로 처리 순서가 낮은 쓰레드의 데이터패스(datapath)를 스톨(stall)시킬 수 있도록 스톨 신호를 생성할 수 있다. 또한, 리소스 스케줄러(330)는 스톨된 쓰레드의 리소스 사용권이 허가되면 그랜트(grant) 신호를 생성할 수 있다.
프로세싱부(310)는 스톨 신호를 수신하면, 처리 순서가 낮은 쓰레드의 데이터패스를 스톨시키고, 이 후, 스톨된 쓰레드의 리소스 사용권이 허가되어 발생한 그랜트 신호를 수신하면, 스톨이 풀리고 스레드의 처리를 재개하게 된다.
도 4는 도 3의 리소스 충돌 감지부(320)의 상세 구성도이다.
도 4를 참조하면, 리소스 충돌 감지부(320)는 리소스 정보 저장부(410), 오피코드 비교부(420) 및 리소스 충돌 여부 판단부(430)를 포함할 수 있다.
리소스 정보 저장부(410)는 쓰레드 정보, 연산 유닛 정보 및 연산자 정보 등을 리소스 테이블로 저장할 수 있다. 이때, 쓰레드 정보는 동시에 처리하고자 하는 쓰레드의 아이디, 현재 처리 중인 쓰레드의 아이디 등을 포함할 수 있다. 연산 유닛 정보는 프로세싱부(310)에 포함되어 있는 연산 유닛의 갯수, 연산 유닛 아이디 등을 포함할 수 있다. 연산자 정보는 각 연산 유닛에 포함되어 있는 연산자의 종류, 개수, 연산자의 상태 정보 등을 포함할 수 있다. 이때, 연산자의 상태 정보는 각 연산자가 현재 연산을 수행하고 있는지 여부에 관한 정보를 말한다.
한편, 연산 유닛(100)에 포함된 연산자(120a 내지 120c) 중 일부가 동일한 오피코드를 처리하도록 구현된 경우로서, busy 신호를 연산자 선택부(130)로 송신한 연산자가 busy 신호 송신 당시 처리 중이던 오피코드의 처리가 완료되어 완료 신호를 송신하면, 리소스 정보 저장부(410)는 이를 수신하여 해당 연산 유닛의 연산자의 상태 정보를 갱신할 수 있다. 이때, 연산자 테이블의 운영은 다양한 방법에 의해 가능하다.
오피코드 비교부(420)는 각 쓰레드의 오피코드를 연산 유닛 별로 비교할 수 있다. 예를 들어, 각 쓰레드의 명령어를 해석(decoding)하면, 각 연산 유닛 별로 수행하고자 하는 연산의 종류를 오피코드를 통해 알 수 있다. 이때, 오피코드 비교부(420)는 연산 유닛 별로 각 쓰레드의 오피코드를 상호 비교함으로써, 각 연산 유닛이 동시에 동일한 연산을 수행하는 지 여부를 판단할 수 있다.
리소스 충돌 여부 판단부(430)는 리소스 정보 저장부(410)에 저장된 정보 및 오피코드 비교부(420)에서 비교한 결과를 기반으로 리소스 충돌 여부를 판단할 수 있다. 예를 들어, 쓰레드 1 및 쓰레드 2가 동시에 FU#0에서 덧셈 연산을 수행하고자 한다고 가정한다. 이 경우, 리소스 정보 저장부(410)에 저장된 FU#0의 연산자 정보에 비추어 FU#0에 2개의 덧셈기가 포함되어 있는 경우, FU#0은 2개의 덧셈기를 동시에 사용할 수 있으므로, 리소스의 충돌이 발생하지 않는다. 반면에, FU#0에 1개의 덧셈기만을 포함되어 있는 경우는 FU#0는 1개의 덧셈기만을 사용할 수 있어 2개의 덧셈 연산을 동시에 할 수 없으므로, 쓰레드 1 및 쓰레드 2의 오피코드를 동시에 처리할 수 없다. 이 경우, 리소스 충돌 여부 판단부(430)는 FU#0에서 리소스 충돌이 발생한다고 판단할 수 있다.
한편, 프로세서(300)는 파이프라인 기법을 적용한다. 일반적으로 프로세서 파이프라인은 명령어의 인출(fetch) 단계, 명령어 해석(decoding) 단계, 명령어 실행(execute) 단계, 결과 저장(write back) 단계를 포함한다.
일 실시 예에 따르면, 리소스 충돌 감지부(320)는 프로세서 파이프라인 중 명령어 해석 단계에서 각 쓰레드의 오피코드를 비교하여 리소스 충돌 여부를 감지할 수 있다.
도 5는 다른 실시 예에 따른 프로세서의 구성도이다.
도 5를 참조하면, 프로세서(500)는 큐(510) 및 플러쉬부(520)를 더 포함할 수 있다.
프로세서(500)에서 동시에 처리되는 일부 쓰레드에 branch 등과 같은 제어문이 포함되어 있는 경우, 제어문의 실행에 따라, 리소스 충돌 감지부(320)가 명령어 해석 단계에서 감지한 결과가 유효하지 않을 수도 있다. 이를 위해, 프로세서(500)는 도 3의 프로세서(300)의 각 구성에 큐(510) 및 플러쉬부(520)를 더 포함할 수 있다.
큐(510)는 리소스 충돌 감지부(320)의 감지 결과를 저장할 수 있다.
플러쉬부(520)는 제어문의 실행에 따라 큐(510)에 저장되어 있는 감지 결과가 유효하지 않을 경우, 큐(510)를 플러쉬(flush)할 수 있다.
만약, 쓰레드에 제어문이 포함되어 있지 않은 경우 또는 제어문을 실행하여도 큐(510)에 저장되어 있는 감지 결과가 유효한 경우는 큐(510)는 감지 결과를 리소스 스케줄러(330)로 전송하고, 리소스 스케줄러(330)는 감지 결과를 기반으로 충돌된 쓰레드의 데이터패스를 스톨시킬 수 있다. 이 때, 어떠한 쓰레드를 스톨시킬 지는 리소스 스케줄러(330)에서 기 설정된 기준에 따라 결정된 처리 순서에 따른다.
도 6은 일 실시 예에 따른 프로세서의 동작 방법을 도시한 도면이다.
도 6을 참조하면, 프로세서의 동작 방법은 먼저, 복수의 쓰레드가 동시에 동일한 연산 유닛 내에서 동일한 연산을 수행하는지 검사하여 리소스의 충돌 여부를 감지한다(610).
그 후, 충돌 감지 결과를 큐(510)에 저장한다(620).
그 후, 복수의 쓰레드 중 일부에 포함된 제어문의 실행에 따라 큐(510)에 저장되어 있는 감지 결과가 유효한지 여부를 판단한다(630).
단계 630의 판단 결과, 큐(510)에 저장된 감지 결과가 유효한 경우, 기 설정된 기준에 따라 충돌된 쓰레드간의 처리 순서를 결정하고(640), 충돌된 쓰레드 중 처리 순서가 낮은 쓰레드를 스톨한다(650).
단계 630의 판단 결과, 큐(510)에 저장된 감지 결과가 유효하지 않은 경우, 큐를 플러쉬하고(660), 단계 610로 돌아간다.
도 7은 도 6의 리소스의 충돌을 감지하는 과정(610)의 상세 흐름도이다.
도 7을 참조하면, 리소스의 충돌을 감지하는 과정(610)은 먼저, 동시에 처리하고자 하는 복수의 쓰레드의 오피코드를 각 연산 유닛 별로 비교한다(710). 예를 들어, 각 쓰레드의 명령어를 해석(decoding)하면, 각 연산 유닛 별로 수행하고자 하는 연산의 종류를 오피코드를 통해 알 수 있다. 따라서, 명령어 파이프라인 중 명령어 해석 단계에서 연산 유닛 별로 각 쓰레드의 오피코드를 상호 비교함으로써, 각 연산 유닛이 동시에 동일한 연산을 수행하는 지 여부를 판단할 수 있다.
그 후, 비교 결과 및 기 저장된 연산자 정보를 기반으로 리소스의 충돌 여부를 판단한다(720). 이때, 연산자 정보는 각 연산 유닛에 포함되어 있는 연산자의 종류, 개수 및 각 연산자의 상태 정보 등을 포함할 수 있다.
본 발명의 일 양상은 컴퓨터로 읽을 수 있는 기록 매체에 컴퓨터가 읽을 수 있는 코드로서 구현될 수 있다. 상기의 프로그램을 구현하는 코드들 및 코드 세그먼트들은 당해 분야의 컴퓨터 프로그래머에 의하여 용이하게 추론될 수 있다. 컴퓨터가 읽을 수 있는 기록 매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록 장치를 포함할 수 있다. 컴퓨터가 읽을 수 있는 기록 매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플로피 디스크, 광 디스크 등을 포함할 수 있다. 또한, 컴퓨터가 읽을 수 있는 기록 매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어, 분산 방식으로 컴퓨터가 읽을 수 있는 코드로 작성되고 실행될 수 있다.
이제까지 본 발명에 대하여 그 바람직한 실시 예들을 중심으로 살펴보았다. 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 본 발명이 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 따라서, 본 발명의 범위는 전술한 실시 예에 한정되지 않고 특허 청구범위에 기재된 내용과 동등한 범위 내에 있는 다양한 실시 형태가 포함되도록 해석되어야 할 것이다.
100: 연산 유닛
110a 내지 110c: 입력 포트
120a 내지 120c: 연산자
130: 연산자 선택부
140a 내지 140c: 출력 포트

Claims (18)

  1. 복수의 쓰레드에 대한 오피코드 및 오퍼랜드를 쓰레드별로 입력 받기 위한 복수의 입력 포트;
    오퍼랜드에 대한 소정의 연산을 수행하는 복수의 연산자;
    각 오피코드를 기반으로 상기 복수의 연산자 중에서 각 오퍼랜드에 대한 연산을 수행할 연산자를 선택하는 연산자 선택부;
    연산 수행 결과를 쓰레드 별로 출력하기 위한 복수의 출력 포트;
    디코딩 동작에서 수행되는 상기 복수의 쓰레드의 상기 오피코드의 비교를 기반으로 상기 복수의 쓰레드가 동시에 동일한 연산 유닛 내에서 동일한 연산을 수행하는지 검사하여 리소스의 충돌을 감지하는 리소스 충돌 감지부; 및
    상기 복수의 쓰레드 중 우선 순위가 낮은 하나의 쓰레드를 스톨함으로써 충돌된 쓰레드간의 처리 순서를 결정하는 리소스 스케줄러;를 포함하되,
    상기 복수의 연산자는 적어도 덧셈기, 곱셈기, 나눗셈기, 비교기 중 하나를 포함할 수 있고,
    각각의 상기 복수의 연산자는 각각 서로 다른 연산을 수행하는 멀티 쓰레딩을 지원하기 위한 연산 유닛.
  2. 제 1항에 있어서,
    상기 복수의 연산자는,
    데이터 패스 상에 각 쓰레드에 할당되어 연산 수행 결과를 저장하는 복수의 레지스터; 를 더 포함하는 멀티 쓰레딩을 지원하기 위한 연산 유닛.
  3. 삭제
  4. 삭제
  5. 제 1항에 있어서,
    상기 복수의 연산자 중 일부는 상기 연산 유닛 내에서 수행 빈도가 높은 연산을 수행하기 위한 연산자인 멀티 쓰레딩을 지원하기 위한 연산 유닛.
  6. 제 1항에 있어서,
    상기 복수의 연산자 중 일부 각각은 자신의 현재 상태를 나타내는 신호를 생성하여 상기 연산자 선택부에 전송하는 멀티 쓰레딩을 지원하기 위한 연산 유닛.
  7. 복수의 쓰레드를 동시에 처리할 수 있는 적어도 하나 이상의 연산 유닛을 포함하는 프로세싱부;
    디코딩 동작에서 수행되는 상기 복수의 쓰레드의 오피코드의 비교를 기반으로 상기 복수의 쓰레드가 동시에 동일한 연산 유닛 내에서 동일한 연산을 수행하는지 검사하여 리소스의 충돌을 감지하는 리소스 충돌 감지부; 및
    상기 리소스 충돌이 감지된 것에 반응하여 기 설정된 기준에 따라, 충돌된 쓰레드간의 처리 순서를 결정하고, 충돌된 쓰레드 중 처리 순서가 낮은 쓰레드에 대한 스톨 신호를 생성하는 리소스 스케줄러; 를 포함하되,
    상기 적어도 하나 이상의 연산 유닛은 상기 복수의 쓰레드로부터 입력된 오퍼랜드를 이용하여 연산을 수행하는 복수의 연산자를 포함하고,
    상기 복수의 연산자는 적어도 덧셈기, 곱셈기, 나눗셈기, 비교기 중 하나를 포함할 수 있고,
    각각의 상기 복수의 연산자는 각각 서로 다른 연산을 수행하는 프로세서.
  8. 제 7항에 있어서,
    상기 리소스 충돌 감지부는,
    상기 적어도 하나 이상의 연산 유닛의 연산자 정보를 저장하는 리소스 정보 저장부;
    상기 복수의 쓰레드의 각 오피코드를 각 연산 유닛 별로 비교하는 오피코드 비교부; 및
    비교 결과 및 상기 연산자 정보를 기반으로 리소스의 충돌 여부를 판단하는 리소스 충돌 여부 판단부; 를 포함하는 프로세서.
  9. 제 8항에 있어서,
    상기 연산자 정보는 각 연산 유닛에 포함되어 있는 연산자의 종류, 개수 및 각 연산자의 상태 정보 중 적어도 하나를 포함하는 프로세서.
  10. 삭제
  11. 제 7항에 있어서,
    리소스 충돌 감지 결과를 저장하는 큐; 를 더 포함하는 프로세서.
  12. 제 11항에 있어서,
    상기 복수의 쓰레드 중 일부에 포함된 제어문의 실행에 따라 상기 큐에 저장된 리소스 충돌 감지 결과가 유효하지 않을 경우, 상기 큐를 플러쉬하는 플러쉬부; 를 더 포함하는 프로세서.
  13. 복수의 쓰레드를 동시에 처리할 수 있고, 상기 복수의 쓰레드 각각은 연산을 수행하는 것을 시도하는 적어도 하나 이상의 연산 유닛을 포함하는 프로세서의 동작 방법에 있어서,
    리소스 충돌이 감지된 것에 반응하여 디코딩 동작에서 수행되는 상기 복수의 쓰레드의 오피코드의 비교를 기반으로 상기 복수의 쓰레드가 동시에 동일한 연산 유닛 내에서 동일한 연산을 수행하는지 검사하여 리소스의 충돌을 감지하는 단계;
    기 설정된 기준에 따라, 충돌된 쓰레드간의 처리 순서를 결정하는 단계; 및
    충돌된 쓰레드 중 처리 순서가 낮은 쓰레드에 대한 스톨 신호를 생성하는 단계를 포함하되,
    상기 연산은 산술 논리 연산으로 수행되고,
    상기 산술 논리 연산은 적어도 덧셈, 곱셈, 나눗셈, 비교 연산 중에 하나를 포함하는 프로세서의 동작 방법.
  14. 제 13항에 있어서,
    상기 감지하는 단계는,
    상기 복수의 쓰레드의 각 오피코드를 각 연산 유닛 별로 비교하는 단계; 및
    비교 결과 및 기 저장된 연산자 정보를 기반으로 리소스의 충돌 여부를 판단하는 단계; 를 포함하는 프로세서의 동작 방법.
  15. 제 14항에 있어서,
    상기 연산자 정보는 각 연산 유닛에 포함되어 있는 연산자의 종류, 개수 및 각 연산자의 상태 정보 중 적어도 하나를 포함하는 프로세서의 동작 방법.
  16. 삭제
  17. 제 13항에 있어서,
    리소스 충돌 감지 결과를 큐에 저장하는 단계; 를 더 포함하는 프로세서의 동작 방법.
  18. 제 17항에 있어서,
    상기 복수의 쓰레드 중 일부에 포함된 제어문의 실행에 따라 상기 큐에 저장된 리소스 충돌 감지 결과가 유효하지 않을 경우, 상기 큐를 플러쉬하는 단계; 를 더 포함하는 프로세서의 동작 방법.
KR1020130160231A 2013-12-20 2013-12-20 멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법 KR102177871B1 (ko)

Priority Applications (5)

Application Number Priority Date Filing Date Title
KR1020130160231A KR102177871B1 (ko) 2013-12-20 2013-12-20 멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법
US14/542,827 US9858116B2 (en) 2013-12-20 2014-11-17 Functional unit for supporting multithreading, processor comprising the same, and operating method thereof
JP2014243216A JP6434791B2 (ja) 2013-12-20 2014-12-01 マルチスレッディングを支援するための演算ユニット、それを含むプロセッサ及びプロセッサの動作方法
CN201410715544.6A CN104731560B (zh) 2013-12-20 2014-12-01 支持多线程处理的功能单元、处理器及其操作方法
EP14197626.6A EP2887209B1 (en) 2013-12-20 2014-12-12 Functional unit for supporting multithreading, processor comprising the same, and operating method thereof

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020130160231A KR102177871B1 (ko) 2013-12-20 2013-12-20 멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법

Publications (2)

Publication Number Publication Date
KR20150072734A KR20150072734A (ko) 2015-06-30
KR102177871B1 true KR102177871B1 (ko) 2020-11-12

Family

ID=52102544

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020130160231A KR102177871B1 (ko) 2013-12-20 2013-12-20 멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법

Country Status (5)

Country Link
US (1) US9858116B2 (ko)
EP (1) EP2887209B1 (ko)
JP (1) JP6434791B2 (ko)
KR (1) KR102177871B1 (ko)
CN (1) CN104731560B (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102177871B1 (ko) * 2013-12-20 2020-11-12 삼성전자주식회사 멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법
US20170132003A1 (en) * 2015-11-10 2017-05-11 Futurewei Technologies, Inc. System and Method for Hardware Multithreading to Improve VLIW DSP Performance and Efficiency
US10565017B2 (en) 2016-09-23 2020-02-18 Samsung Electronics Co., Ltd. Multi-thread processor and controlling method thereof
KR102593320B1 (ko) * 2016-09-26 2023-10-25 삼성전자주식회사 전자 장치, 프로세서 및 그 제어 방법
CN108255587B (zh) * 2016-12-29 2021-08-24 展讯通信(上海)有限公司 一种同步多线程处理器
US10325341B2 (en) 2017-04-21 2019-06-18 Intel Corporation Handling pipeline submissions across many compute units
US10269088B2 (en) * 2017-04-21 2019-04-23 Intel Corporation Dynamic thread execution arbitration
GB2563587B (en) * 2017-06-16 2021-01-06 Imagination Tech Ltd Scheduling tasks
GB2565338B (en) * 2017-08-10 2020-06-03 Mips Tech Llc Fault detecting and fault tolerant multi-threaded processors
CN108874523A (zh) * 2018-06-21 2018-11-23 深圳点猫科技有限公司 一种基于AI和儿童教育的promise控制异步函数序列的编程方法
US11023273B2 (en) 2019-03-21 2021-06-01 International Business Machines Corporation Multi-threaded programming

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120089812A1 (en) * 2009-06-12 2012-04-12 Graeme Roy Smith Shared resource multi-thread processor array

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1994027216A1 (en) * 1993-05-14 1994-11-24 Massachusetts Institute Of Technology Multiprocessor coupling system with integrated compile and run time scheduling for parallelism
JP3547482B2 (ja) * 1994-04-15 2004-07-28 株式会社日立製作所 情報処理装置
JP3760035B2 (ja) * 1996-08-27 2006-03-29 松下電器産業株式会社 複数の命令流を独立に処理し、命令流単位に処理性能を柔軟に制御するマルチスレッドプロセッサ
US7007153B1 (en) 2000-03-30 2006-02-28 Agere Systems Inc. Method and apparatus for allocating functional units in a multithreaded VLIW processor
US7207040B2 (en) * 2002-08-15 2007-04-17 Sun Microsystems, Inc. Multi-CPUs support with thread priority control
DE60324818D1 (de) * 2002-09-17 2009-01-02 Nxp Bv Superpipeline-vliw-prozessor zur behandlung der geschwindigkeitsbegrenzung aufgrund einer bypass-schleife
US7954102B2 (en) * 2002-11-13 2011-05-31 Fujitsu Limited Scheduling method in multithreading processor, and multithreading processor
US7472258B2 (en) * 2003-04-21 2008-12-30 International Business Machines Corporation Dynamically shared group completion table between multiple threads
US7350060B2 (en) * 2003-04-24 2008-03-25 International Business Machines Corporation Method and apparatus for sending thread-execution-state-sensitive supervisory commands to a simultaneous multi-threaded (SMT) processor
DE602005019180D1 (de) * 2004-09-22 2010-03-18 Koninkl Philips Electronics Nv Datenverarbeitungsschaltung mit funktionseinheiten mit gemeinsamen leseports
JP2006099336A (ja) * 2004-09-29 2006-04-13 Seiko Epson Corp 演算処理装置
US8756605B2 (en) * 2004-12-17 2014-06-17 Oracle America, Inc. Method and apparatus for scheduling multiple threads for execution in a shared microprocessor pipeline
US7266674B2 (en) * 2005-02-24 2007-09-04 Microsoft Corporation Programmable delayed dispatch in a multi-threaded pipeline
JP4276201B2 (ja) * 2005-03-31 2009-06-10 富士通株式会社 Smtプロセッサ用課金処理装置,課金処理方法,および課金処理プログラム
KR101355496B1 (ko) 2005-08-29 2014-01-28 디 인벤션 사이언스 펀드 원, 엘엘씨 복수의 병렬 클러스터들을 포함하는 계층 프로세서의스케쥴링 메카니즘
US8495649B2 (en) 2006-07-19 2013-07-23 International Business Machines Corporation Scheduling threads having complementary functional unit usage on SMT processors
US7725296B1 (en) * 2007-09-24 2010-05-25 United Services Automobile Association (Usaa) Estimating processor usage
JP2009110209A (ja) * 2007-10-29 2009-05-21 Panasonic Corp 演算処理装置、プロセッサ、プログラム変換装置およびプログラム
US20090138890A1 (en) * 2007-11-21 2009-05-28 Arm Limited Contention management for a hardware transactional memory
US8302098B2 (en) * 2007-12-06 2012-10-30 Oracle America, Inc. Hardware utilization-aware thread management in multithreaded computer systems
US8156495B2 (en) * 2008-01-17 2012-04-10 Oracle America, Inc. Scheduling threads on processors
CN101685408B (zh) * 2008-09-24 2013-10-09 国际商业机器公司 多个线程并行访问共享数据结构的方法及装置
US8332854B2 (en) * 2009-05-19 2012-12-11 Microsoft Corporation Virtualized thread scheduling for hardware thread optimization based on hardware resource parameter summaries of instruction blocks in execution groups
US8539486B2 (en) * 2009-07-17 2013-09-17 International Business Machines Corporation Transactional block conflict resolution based on the determination of executing threads in parallel or in serial mode
US8631415B1 (en) * 2009-08-25 2014-01-14 Netapp, Inc. Adjustment of threads for execution based on over-utilization of a domain in a multi-processor system by sub-dividing parallizable group of threads to sub-domains
US20110055838A1 (en) * 2009-08-28 2011-03-03 Moyes William A Optimized thread scheduling via hardware performance monitoring
JP5321748B2 (ja) * 2010-07-30 2013-10-23 富士通株式会社 マルチコアプロセッサシステム、スレッド制御方法、およびスレッド制御プログラム
US8719828B2 (en) * 2011-10-14 2014-05-06 Intel Corporation Method, apparatus, and system for adaptive thread scheduling in transactional memory systems
US10289418B2 (en) 2012-12-27 2019-05-14 Nvidia Corporation Cooperative thread array granularity context switch during trap handling
US9582321B2 (en) * 2013-11-08 2017-02-28 Swarm64 As System and method of data processing
US9250953B2 (en) * 2013-11-12 2016-02-02 Oxide Interactive Llc Organizing tasks by a hierarchical task scheduler for execution in a multi-threaded processing system
KR102177871B1 (ko) * 2013-12-20 2020-11-12 삼성전자주식회사 멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120089812A1 (en) * 2009-06-12 2012-04-12 Graeme Roy Smith Shared resource multi-thread processor array

Also Published As

Publication number Publication date
EP2887209A3 (en) 2017-02-15
CN104731560B (zh) 2020-02-07
JP2015122063A (ja) 2015-07-02
CN104731560A (zh) 2015-06-24
US20150178132A1 (en) 2015-06-25
US9858116B2 (en) 2018-01-02
KR20150072734A (ko) 2015-06-30
EP2887209B1 (en) 2023-03-22
EP2887209A2 (en) 2015-06-24
JP6434791B2 (ja) 2018-12-05

Similar Documents

Publication Publication Date Title
KR102177871B1 (ko) 멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법
KR100880470B1 (ko) 스레드 라이브록 유닛
US10318307B2 (en) Scalarization of vector processing
US8935698B2 (en) Management of migrating threads within a computing environment to transform multiple threading mode processors to single thread mode processors
RU2670909C2 (ru) Восстановление контекста потока в многопоточной компьютерной системе
US20070143581A1 (en) Superscalar data processing apparatus and method
KR101738941B1 (ko) 재구성 가능 어레이 및 재구성 가능 어레이의 제어 방법
US9658853B2 (en) Techniques for increasing instruction issue rate and reducing latency in an out-of order processor
JP2017513111A (ja) マルチスレッディング・コンピュータ・システムにおけるスレッド・コンテキスト保存のためのコンピュータ・システム、コンピュータ実装方法およびコンピュータ・プログラム製品
TWI498820B (zh) 具有用於分支錯誤預測之第二跳躍執行單元的處理器
JP6400296B2 (ja) マルチモード支援プロセッサ及びマルチモードを支援する処理方法
US20100095305A1 (en) Simultaneous multithread instruction completion controller
US8327118B2 (en) Scheduling control within a data processing system
JPH06243112A (ja) マルチプロセッサ装置
US10915327B2 (en) Apparatus and method of dispatching instructions for execution clusters based on dependencies
US11068274B2 (en) Prioritized instructions in an instruction completion table of a simultaneous multithreading processor
JP2008204013A (ja) スレッド動作異常検知方法、マルチスレッドシステム
US20220075624A1 (en) Alternate path for branch prediction redirect
JP2010026583A (ja) プロセッサ
JP2009505267A (ja) 補助メモリを用いてメモリにアクセスする方法及びシステム
US20160342415A1 (en) Arithmetic processing device and processing method of arithmetic processing device
GR20180200009U (el) Μια διαταξη εκτελεσης ομαδων νηματων
KR20130062150A (ko) 프로세서, 명령어 생성 장치 및 방법

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