KR20150072734A - 멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법 - Google Patents
멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법 Download PDFInfo
- Publication number
- KR20150072734A KR20150072734A KR1020130160231A KR20130160231A KR20150072734A KR 20150072734 A KR20150072734 A KR 20150072734A KR 1020130160231 A KR1020130160231 A KR 1020130160231A KR 20130160231 A KR20130160231 A KR 20130160231A KR 20150072734 A KR20150072734 A KR 20150072734A
- Authority
- KR
- South Korea
- Prior art keywords
- unit
- threads
- operator
- thread
- resource
- Prior art date
Links
- 238000011017 operating method Methods 0.000 title 1
- 238000000034 method Methods 0.000 claims abstract description 48
- 238000001514 detection method Methods 0.000 claims description 30
- 238000011010 flushing procedure Methods 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 10
- 230000006870 function Effects 0.000 description 2
- 230000015556 catabolic process Effects 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 230000006866 deterioration Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008054 signal transmission Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3889—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
- G06F9/3891—Concurrent instruction execution, e.g. pipeline or 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
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)
- Input From Keyboards Or The Like (AREA)
Abstract
멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법이 개시된다. 일 양상에 따른, 멀티 쓰레딩을 지원하기 위한 연산 유닛은, 오피코드 및 오퍼랜드를 쓰레드별로 입력 받기 위한 복수의 입력 포트와, 오퍼랜드에 대한 소정의 연산을 수행하는 복수의 연산자와, 각 오피코드를 기반으로 복수의 연산자 중에서 각 오퍼랜드에 대한 연산을 수행할 연산자를 선택하는 연산자 선택부와, 연산 수행 결과를 쓰레드 별로 출력하기 위한 복수의 출력 포트를 포함할 수 있다.
Description
멀티 쓰레딩 프로세서와 관련된 것으로, 특히, 멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법에 관한 것이다.
컴퓨터 분야의 기술이 발달함에 따라 하나의 작업뿐만 아니라 다수의 작업을 동시에 실행해야 하는 경우가 빈번하게 발생한다. 이러한 동시에 여러 작업을 처리하는 것을 다중 처리(Multiprocessing)라고 한다.
이러한 다중 처리는 멀티 태스킹(Multitasking), 다중화(Multiplexing) 등의 방법으로 제공되는데, 전자의 경우 다수의 작업을 다수의 프로세스(또는, 쓰레드)들이 나누어 처리하는 것을 의미하고, 후자의 경우 한 프로세스 내에서 다수의 작업을 처리하는 것을 의미한다.
특히, 멀티 태스킹은 여러 작업(즉, 태스크)을 병행하여 처리하는 것으로서, 운영체제(OS)는 멀티 태스킹을 위해 프로세스를 다수 개 실행시키거나(멀티 프로세스) 쓰레드를 다수 개 실행시키는 기법(멀티 쓰레드)을 사용한다.
이때, 멀티 프로세스와 멀티 쓰레드는 양쪽 모두 여러 흐름이 동시에 진행된다는 공통점을 가지고 있다. 하지만 멀티 프로세스에서 각 프로세스는 독립적으로 실행되며 각각 별개의 메모리를 차지하고 있는 것과 달리 멀티 쓰레드는 프로세스 내의 메모리를 공유할 수 있다. 또한, 프로세스 간의 전환 속도보다 쓰레드 간의 전환 속도가 빠르며, 쓰레드간 스케줄링도 프로세스간 스케줄링보다 상대적으로 빠르게 이루어진다.
멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법을 제공하는 것을 목적으로 한다.
일 양상에 따른, 멀티 쓰레딩을 지원하기 위한 연산 유닛은, 오피코드 및 오퍼랜드를 쓰레드별로 입력 받기 위한 복수의 입력 포트와, 오퍼랜드에 대한 소정의 연산을 수행하는 복수의 연산자와, 각 오피코드를 기반으로 복수의 연산자 중에서 각 오퍼랜드에 대한 연산을 수행할 연산자를 선택하는 연산자 선택부와, 연산 수행 결과를 쓰레드 별로 출력하기 위한 복수의 출력 포트를 포함할 수 있다.
여기서, 복수의 연산자는, 데이터 패스 상에 각 쓰레드에 할당되어 연산 수행 결과를 저장하는 복수의 레지스터를 더 포함할 수 있다.
여기서, 복수의 연산자는 각각 서로 다른 연산을 수행할 수 있다.
또한, 복수의 연산자 중 일부는 서로 동일한 연산을 수행할 수 있다.
여기서, 일부 연산자는 연산 유닛 내에서 수행 빈도가 높은 연산을 수행하기 위한 연산자일 수 있다.
여기서, 일부 연산자 각각은 자신의 현재 상태를 나타내는 신호를 생성하여 상기 연산자 선택부에 전송할 수 있다.
다른 양상에 따른 프로세서는, 복수의 쓰레드를 동시에 처리할 수 있는 적어도 하나 이상의 연산 유닛을 포함하는 프로세싱부와, 복수의 쓰레드가 동시에 동일한 연산 유닛 내에서 동일한 연산을 수행하는지 검사하여 리소스의 충돌을 감지하는 리소스 충돌 감지부와, 설정된 기준에 따라, 충돌된 쓰레드간의 처리 순서를 결정하는 리소스 스케줄러를 포함할 수 있다.
여기서, 리소스 충돌 감지부는, 적어도 하나 이상의 연산 유닛의 연산자 정보를 저장하는 리소스 정보 저장부와, 복수의 쓰레드의 각 오피코드를 각 연산 유닛 별로 비교하는 오피코드 비교부와, 비교 결과 및 상기 연산자 정보를 기반으로 리소스의 충돌 여부를 판단하는 리소스 충돌 여부 판단부를 포함할 수 있다.
여기서, 연산자 정보는 각 연산 유닛에 포함되어 있는 연산자의 종류, 개수 및 각 연산자의 상태 정보 중 적어도 하나를 포함할 수 있다.
여기서, 리소스 스케줄러는 충돌된 쓰레드 중 처리 순서가 낮은 쓰레드에 대한 스톨(stall) 신호를 생성할 수 있다.
또한, 프로세서는, 리소스의 충돌 감지 결과를 저장하는 큐를 더 포함할 수 있다.
또한, 프로세서는, 복수의 쓰레드 중 일부에 포함된 제어문의 실행에 따라 큐에 저장된 리소스 충돌 감지 결과가 유효하지 않을 경우, 큐를 플러쉬하는 플러쉬부를 더 포함할 수 있다.
또 다른 양상에 따른, 복수의 쓰레드를 동시에 처리할 수 있는 적어도 하나 이상의 연산 유닛을 포함하는 프로세서의 동작 방법은, 복수의 쓰레드가 동시에 동일한 연산 유닛 내에서 동일한 연산을 수행하는지 검사하여 리소스의 충돌을 감지하는 단계와, 기 설정된 기준에 따라, 충돌된 쓰레드간의 처리 순서를 결정하는 단계를 포함할 수 있다.
여기서, 감지하는 단계는, 복수의 쓰레드의 각 오피코드를 각 연산 유닛 별로 비교하는 단계와, 비교 결과 및 기 저장된 연산자 정보를 기반으로 리소스의 충돌 여부를 판단하는 단계를 포함할 수 있다.
여기서, 연산자 정보는 각 연산 유닛에 포함되어 있는 연산자의 종류, 개수 및 각 연산자의 상태 정보 중 적어도 하나를 포함할 수 있다.
또한, 프로세서의 동작 방법은, 충돌된 쓰레드 중 처리 순서가 낮은 쓰레드를 스톨하는 단계를 더 포함할 수 있다.
또한, 프로세서의 동작 방법은, 리소스 충돌 감지 결과를 큐에 저장하는 단계를 더 포함할 수 있다.
또한, 프로세서의 동작 방법은, 복수의 쓰레드 중 일부에 포함된 제어문의 실행에 따라 큐에 저장된 리소스 충돌 감지 결과가 유효하지 않을 경우, 큐를 플러쉬하는 단계를 더 포함할 수 있다.
다수의 연산자를 동시에 사용하여 다수의 쓰레드를 처리할 수 있는 연산 유닛을 제공함으로써, 쓰레드 레벨 병렬성(Thread Level Parallelism, TLP)을 극대화하는 것이 가능하다.
또한, 프로세서의 면적을 감소시키고 효율적인 동시 멀티 쓰레딩을 가능하게 한다.
동시 멀티 쓰레딩을 지원하기 위한 저장 장치가 별도로 존재하여 쓰레드 스위치에 따른 오버헤드가 전혀 없다.
연산 유닛 내의 다수의 연산자를 동시에 사용함으로써, 연산 유닛의 수가 늘어나는 효과를 볼 수 있어. 컴파일러가 단순해 질 수 있다.
도 1은 일 실시 예에 따른 멀티 쓰레딩을 지원하기 위한 연산 유닛의 대략적인 구성도이다.
도 2는 일 실시 예에 따른 멀티 쓰레딩을 지원하기 위한 연산 유닛의 예시도이다.
도 3는 일 실시 예에 따른 프로세서의 구성도이다.
도 4는 도 3의 리소스 충돌 감지부(320)의 상세 구성도이다.
도 5는 다른 실시 예에 따른 프로세서의 구성도이다.
도 6은 일 실시 예에 따른 프로세서(500)의 동작 방법을 도시한 도면이다.
도 7은 도 6의 리소스의 충돌을 감지하는 과정(610)의 상세 흐름도이다.
도 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: 출력 포트
110a 내지 110c: 입력 포트
120a 내지 120c: 연산자
130: 연산자 선택부
140a 내지 140c: 출력 포트
Claims (18)
- 오피코드 및 오퍼랜드를 쓰레드별로 입력 받기 위한 복수의 입력 포트;
오퍼랜드에 대한 소정의 연산을 수행하는 복수의 연산자;
각 오피코드를 기반으로 상기 복수의 연산자 중에서 각 오퍼랜드에 대한 연산을 수행할 연산자를 선택하는 연산자 선택부; 및
연산 수행 결과를 쓰레드 별로 출력하기 위한 복수의 출력 포트; 를 포함하는 멀티 쓰레딩을 지원하기 위한 연산 유닛. - 제 1항에 있어서,
상기 복수의 연산자는,
데이터 패스 상에 각 쓰레드에 할당되어 연산 수행 결과를 저장하는 복수의 레지스터; 를 더 포함하는 멀티 쓰레딩을 지원하기 위한 연산 유닛. - 제 1항에 있어서,
상기 복수의 연산자는 각각 서로 다른 연산을 수행하는 멀티 쓰레딩을 지원하기 위한 연산 유닛. - 제 1항에 있어서,
상기 복수의 연산자 중 일부는 서로 동일한 연산을 수행하는 멀티 쓰레딩을 지원하기 위한 연산 유닛. - 제 4항에 있어서,
상기 일부 연산자는 상기 연산 유닛 내에서 수행 빈도가 높은 연산을 수행하기 위한 연산자인 멀티 쓰레딩을 지원하기 위한 연산 유닛. - 제 4항에 있어서,
상기 일부 연산자 각각은 자신의 현재 상태를 나타내는 신호를 생성하여 상기 연산자 선택부에 전송하는 멀티 쓰레딩을 지원하기 위한 연산 유닛. - 복수의 쓰레드를 동시에 처리할 수 있는 적어도 하나 이상의 연산 유닛을 포함하는 프로세싱부;
상기 복수의 쓰레드가 동시에 동일한 연산 유닛 내에서 동일한 연산을 수행하는지 검사하여 리소스의 충돌을 감지하는 리소스 충돌 감지부; 및
설정된 기준에 따라, 충돌된 쓰레드간의 처리 순서를 결정하는 리소스 스케줄러; 를 포함하는 프로세서. - 제 7항에 있어서,
상기 리소스 충돌 감지부는,
상기 적어도 하나 이상의 연산 유닛의 연산자 정보를 저장하는 리소스 정보 저장부;
상기 복수의 쓰레드의 각 오피코드를 각 연산 유닛 별로 비교하는 오피코드 비교부; 및
비교 결과 및 상기 연산자 정보를 기반으로 리소스의 충돌 여부를 판단하는 리소스 충돌 여부 판단부; 를 포함하는 프로세서. - 제 8항에 있어서,
상기 연산자 정보는 각 연산 유닛에 포함되어 있는 연산자의 종류, 개수 및 각 연산자의 상태 정보 중 적어도 하나를 포함하는 프로세서. - 제 7항에 있어서,
상기 리소스 스케줄러는 충돌된 쓰레드 중 처리 순서가 낮은 쓰레드에 대한 스톨 신호를 생성하는 프로세서. - 제 7항에 있어서,
리소스 충돌 감지 결과를 저장하는 큐; 를 더 포함하는 프로세서. - 제 11항에 있어서,
상기 복수의 쓰레드 중 일부에 포함된 제어문의 실행에 따라 상기 큐에 저장된 리소스 충돌 감지 결과가 유효하지 않을 경우, 상기 큐를 플러쉬하는 플러쉬부; 를 더 포함하는 프로세서. - 복수의 쓰레드를 동시에 처리할 수 있는 적어도 하나 이상의 연산 유닛을 포함하는 프로세서의 동작 방법에 있어서,
상기 복수의 쓰레드가 동시에 동일한 연산 유닛 내에서 동일한 연산을 수행하는지 검사하여 리소스의 충돌을 감지하는 단계; 및
기 설정된 기준에 따라, 충돌된 쓰레드간의 처리 순서를 결정하는 단계; 를 포함하는 프로세서의 동작 방법. - 제 13항에 있어서,
상기 감지하는 단계는,
상기 복수의 쓰레드의 각 오피코드를 각 연산 유닛 별로 비교하는 단계; 및
비교 결과 및 기 저장된 연산자 정보를 기반으로 리소스의 충돌 여부를 판단하는 단계; 를 포함하는 프로세서의 동작 방법. - 제 14항에 있어서,
상기 연산자 정보는 각 연산 유닛에 포함되어 있는 연산자의 종류, 개수 및 각 연산자의 상태 정보 중 적어도 하나를 포함하는 프로세서의 동작 방법. - 제 13항에 있어서,
충돌된 쓰레드 중 처리 순서가 낮은 쓰레드를 스톨하는 단계; 를 더 포함하는 프로세서의 동작 방법. - 제 13항에 있어서,
리소스 충돌 감지 결과를 큐에 저장하는 단계; 를 더 포함하는 프로세서의 동작 방법. - 제 17항에 있어서,
상기 복수의 쓰레드 중 일부에 포함된 제어문의 실행에 따라 상기 큐에 저장된 리소스 충돌 감지 결과가 유효하지 않을 경우, 상기 큐를 플러쉬하는 단계; 를 더 포함하는 프로세서의 동작 방법.
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 true KR20150072734A (ko) | 2015-06-30 |
KR102177871B1 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) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10565017B2 (en) | 2016-09-23 | 2020-02-18 | Samsung Electronics Co., Ltd. | Multi-thread processor and controlling method thereof |
Families Citing this family (11)
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 |
KR102593320B1 (ko) * | 2016-09-26 | 2023-10-25 | 삼성전자주식회사 | 전자 장치, 프로세서 및 그 제어 방법 |
CN108255587B (zh) * | 2016-12-29 | 2021-08-24 | 展讯通信(上海)有限公司 | 一种同步多线程处理器 |
US10269088B2 (en) * | 2017-04-21 | 2019-04-23 | Intel Corporation | Dynamic thread execution arbitration |
US10325341B2 (en) | 2017-04-21 | 2019-06-18 | Intel Corporation | Handling pipeline submissions across many compute units |
GB2563587B (en) | 2017-06-16 | 2021-01-06 | Imagination Tech Ltd | Scheduling tasks |
GB2563588B (en) | 2017-06-16 | 2019-06-26 | 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 (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07281896A (ja) * | 1994-04-15 | 1995-10-27 | Hitachi Ltd | 情報処理装置 |
KR20050057397A (ko) * | 2002-09-17 | 2005-06-16 | 코닌클리즈케 필립스 일렉트로닉스 엔.브이. | Vliw 프로세서 |
US20120089812A1 (en) * | 2009-06-12 | 2012-04-12 | Graeme Roy Smith | Shared resource multi-thread processor array |
Family Cites Families (30)
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 |
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 |
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 |
CN101027635A (zh) * | 2004-09-22 | 2007-08-29 | 皇家飞利浦电子股份有限公司 | 其中功能单元共用读取端口的数据处理电路 |
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プロセッサ用課金処理装置,課金処理方法,および課金処理プログラム |
GB2444455A (en) | 2005-08-29 | 2008-06-04 | Searete Llc | Scheduling mechanism of a hierarchical processor including multiple parallel clusters |
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 | 삼성전자주식회사 | 멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법 |
-
2013
- 2013-12-20 KR KR1020130160231A patent/KR102177871B1/ko active IP Right Grant
-
2014
- 2014-11-17 US US14/542,827 patent/US9858116B2/en active Active
- 2014-12-01 JP JP2014243216A patent/JP6434791B2/ja active Active
- 2014-12-01 CN CN201410715544.6A patent/CN104731560B/zh active Active
- 2014-12-12 EP EP14197626.6A patent/EP2887209B1/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07281896A (ja) * | 1994-04-15 | 1995-10-27 | Hitachi Ltd | 情報処理装置 |
KR20050057397A (ko) * | 2002-09-17 | 2005-06-16 | 코닌클리즈케 필립스 일렉트로닉스 엔.브이. | Vliw 프로세서 |
US20120089812A1 (en) * | 2009-06-12 | 2012-04-12 | Graeme Roy Smith | Shared resource multi-thread processor array |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10565017B2 (en) | 2016-09-23 | 2020-02-18 | Samsung Electronics Co., Ltd. | Multi-thread processor and controlling method thereof |
Also Published As
Publication number | Publication date |
---|---|
US20150178132A1 (en) | 2015-06-25 |
JP2015122063A (ja) | 2015-07-02 |
JP6434791B2 (ja) | 2018-12-05 |
EP2887209B1 (en) | 2023-03-22 |
US9858116B2 (en) | 2018-01-02 |
CN104731560A (zh) | 2015-06-24 |
KR102177871B1 (ko) | 2020-11-12 |
EP2887209A3 (en) | 2017-02-15 |
CN104731560B (zh) | 2020-02-07 |
EP2887209A2 (en) | 2015-06-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20150072734A (ko) | 멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법 | |
JP6095670B2 (ja) | コンピュータ・システム内のオペランド活性情報の維持 | |
US10318307B2 (en) | Scalarization of vector processing | |
US9311095B2 (en) | Using register last use information to perform decode time computer instruction optimization | |
JP4287799B2 (ja) | プロセッサシステムおよびスレッド切り替え制御方法 | |
US20160216966A1 (en) | System and Method for Mitigating the Impact of Branch Misprediction When Exiting Spin Loops | |
US20070074217A1 (en) | Scheduling optimizations for user-level threads | |
US8578136B2 (en) | Apparatus and method for mapping architectural registers to physical registers | |
US10585669B2 (en) | Reducing stalling in a simultaneous multithreading processor by inserting thread switches for instructions likely to stall | |
KR20070055554A (ko) | 스레드 라이브록 유닛 | |
JPH11288373A (ja) | コンピュ―タ・システム | |
KR20110106717A (ko) | 재구성 가능 어레이 및 재구성 가능 어레이의 제어 방법 | |
JP2009223842A (ja) | 仮想計算機制御プログラム及び仮想計算機システム | |
JP6400296B2 (ja) | マルチモード支援プロセッサ及びマルチモードを支援する処理方法 | |
US20100095305A1 (en) | Simultaneous multithread instruction completion controller | |
JPH06243112A (ja) | マルチプロセッサ装置 | |
US20180032333A1 (en) | Atomic Line Multi-Tasking | |
JP4759026B2 (ja) | プロセッサ | |
JP2002014868A (ja) | メモリ参照動作検出機構を有するマイクロプロセッサおよびコンパイル方法 | |
US20220075624A1 (en) | Alternate path for branch prediction redirect | |
JPWO2011114495A1 (ja) | マルチコアプロセッサシステム、スレッド切り替え制御方法、およびスレッド切り替え制御プログラム | |
JP5582241B2 (ja) | マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラム | |
JP2011008617A (ja) | マルチスレッド実行装置、オブジェクトプログラムの生成方法、プログラム | |
JP2009505267A (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 |