KR102332523B1 - 연산 처리 장치 및 방법 - Google Patents
연산 처리 장치 및 방법 Download PDFInfo
- Publication number
- KR102332523B1 KR102332523B1 KR1020140188635A KR20140188635A KR102332523B1 KR 102332523 B1 KR102332523 B1 KR 102332523B1 KR 1020140188635 A KR1020140188635 A KR 1020140188635A KR 20140188635 A KR20140188635 A KR 20140188635A KR 102332523 B1 KR102332523 B1 KR 102332523B1
- Authority
- KR
- South Korea
- Prior art keywords
- vector
- cores
- core
- instruction
- operation unit
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 53
- 238000003672 processing method Methods 0.000 claims description 11
- 238000010586 diagram Methods 0.000 description 11
- 230000015654 memory Effects 0.000 description 10
- 238000009877 rendering Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000011112 process operation Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000005236 sound signal Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8007—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8053—Vector processors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8007—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
- G06F15/8015—One dimensional arrays, e.g. rings, linear arrays, buses
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- 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/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30109—Register structure having multiple operands in a single register
-
- 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/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
-
- 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/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Complex Calculations (AREA)
- Advance Control (AREA)
Abstract
일 실시예에 따른 연산 처리 장치는 벡터 연산이 필요한 명령어에 대해 벡터 연산 처리하는 벡터 연산부, 벡터 연산이 필요하지 않은 명령어에 대해 스칼라 연산 처리하는 스칼라 연산부를 포함하는 복수의 코어(Core)를 포함하고,
벡터 연산부는 상기 복수의 코어에 의해 공유되고, 상기 스칼라 연산부는 상기 복수의 코어 각각에 독립적으로 존재하는 것을 특징으로 한다.
벡터 연산부는 상기 복수의 코어에 의해 공유되고, 상기 스칼라 연산부는 상기 복수의 코어 각각에 독립적으로 존재하는 것을 특징으로 한다.
Description
본 발명은 프로세서(Processor)가 효율적으로 연산을 처리하는 장치 및 방법에 관한 것으로, 보다 구체적으로는 프로세서 내의 복수의 코어(Core)가 벡터 연산부를 공유하는 장치 및 방법에 관한 것이다.
초기 프로세서 기술에서는 하나의 명령으로 하나의 데이터를 처리하는 방식(Single Instruction Single Data)을 채용한 스칼라(Scalar)프로세서를 채용하였다.
그러나 스마트폰, 고해상도 텔레비전 등의 보급화되면서 영상 처리, 비전 처리, 화질 처리 또는 그래픽 렌더링(Graphic rendering)과 같은 분야에서 대용량 데이터의 처리가 가능한 프로세서의 필요성이 증대되었다. 이에 따라, 단일 명령으로 복수의 데이터를 처리하는 방식(Single Instruction Multiple Data)을 채용한 벡터(Vector) 프로세서의 사용이 보편화되었다. 벡터 프로세서는 벡터를 구성하는 복수의 데이터에 대해 동일한 반복 연산을 고속 수행하기 위한 프로세서이다.
벡터 프로세서는 복수의 코어를 포함할 수 있으며 각 코어는 복수의 연산을 동시에 처리하는 벡터 연산부와 순차적으로 연산을 처리하는 스칼라 연산부를 포함할 수 있다.
그러나 스칼라 연산부의 연산 결과에 벡터 연산부가 영향을 받는 경우, 스칼라 연산부의 연산이 끝날 때까지 벡터 연산부의 연산이 지연된다. 또는 벡터 연산부의 선행하는 연산 결과를 사용하여 후속 연산을 수행하는 경우, 후속 연산은 선행하는 연산의 결과에 의존성(dependency)을 가지므로, 선행 연산의 결과가 레지스터 파일에 쓰여질 때까지 수행될 수 없다.
따라서, 벡터 연산을 처리하는 프로세서는 복수의 연산을 동시에 처리하여야 하므로 프로세서의 반도체 면적은 매우 넓은 반면에, 어떠한 제어나 정보의 전송도 없는 상태, 즉 유휴 상태(idle state)가 필연적으로 발생되므로 비효율적이다.
벡터 연산을 수행하는 프로세서의 유휴 상태를 감소시킴과 동시에 프로세서의 면적을 효과적으로 감소시킬 수 있는 방법 및 장치를 제공할 수 있다.
또한, 상기 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체를 제공하는데 있다. 본 실시 예가 이루고자 하는 기술적 과제는 상기된 바와 같은 기술적 과제로 한정되지 않으며, 이하의 실시 예들로부터 또 다른 기술적 과제들이 유추될 수 있다.
일 실시예에 따른 연산 처리 장치는 벡터 연산이 필요한 명령어에 대해 벡터 연산 처리하는 벡터 연산부, 벡터 연산이 필요하지 않은 명령어에 대해 스칼라 연산 처리하는 스칼라 연산부를 포함하는 복수의 코어(Core)를 포함하고, 상기 벡터 연산부는 상기 복수의 코어에 의해 공유되고, 상기 스칼라 연산부는 상기 복수의 코어 각각에 독립적으로 존재하는 것을 특징으로 한다.
일 실시예에 따른 상기 벡터 연산부는, 파이프라인 단계에 따라 순차적으로 상기 복수의 코어로부터 전달받은 명령어들을 처리하는 것을 특징으로 한다.
일 실시예에 따른 상기 연산 처리 장치는, 상기 벡터 연산에 필요한 데이터를 저장하는 벡터 레지스터를 더 포함하고, 상기 벡터 레지스터는 상기 복수의 코어에 의해 공유되는 것을 특징으로 한다.
일 실시예에 따른 상기 복수의 코어는, 각각의 코어가 상기 벡터 연산에 필요한 데이터를 저장하는 벡터 레지스터를 독립적으로 포함하는 것을 특징으로 한다.
일 실시예에 따른 상기 연산 처리 장치는, 상기 복수의 코어 중에서 하나 이상의 코어를 선택하여 상기 선택된 코어에서 처리될 명령어를 상기 벡터 연산부에 전달하거나, 상기 벡터 연산부에서 처리되는 명령어들의 처리 우선 순위를 결정하는 스케줄러를 더 포함한다.
일 실시예에 따른 상기 복수의 코어는, 각각의 코어가 상기 벡터 연산에 필요한 데이터를 저장하는 벡터 레지스터를 독립적으로 포함하고, 상기 연산 처리 장치는 상기 선택된 코어 내의 벡터 레지스터와 선택되지 않은 하나 이상의 코어 내의 벡터 레지스터를 병합하는 레지스터 병합부를 더 포함하는 것을 특징으로 한다.
일 실시예에 따른 상기 레지스터 병합부는, 상기 선택된 코어가 입력 받은 명령어의 오퍼랜드(operand) 중에서, 상기 복수의 코어 중 어느 하나의 코어를 특정하는 상위 비트의 길이를 감소시키고, 나머지 비트는 상기 병합된 벡터 레지스터 내의 상대 주소를 나타내도록 하는 것을 특징으로 한다.
일 실시예에 따른 복수의 코어(multicore)를 포함하는 프로세서(processor)에 의해 수행되는 연산 처리 방법은, 상기 복수의 코어 각각이 명령어를 입력받는 단계, 상기 입력 받은 명령어가 벡터 연산이 필요한 경우, 상기 프로세서 내의 벡터 연산부에 상기 명령어를 전달하여 벡터 연산 처리하는 단계, 및 상기 입력 받은 명령어가 벡터 연산이 필요하지 않은 경우, 상기 프로세서 내의 스칼라 연산부에 상기 명령어를 전달하여 스칼라 연산 처리하는 단계를 포함하고, 상기 벡터 연산부는 상기 복수의 코어에 의해 공유되고, 상기 스칼라 연산부는 상기 복수의 코어 각각에 독립적으로 존재하는 것을 특징으로 한다.
일 실시예에 따른 상기 벡터 연산을 처리하는 단계는, 파이프라인 단계에 따라 순차적으로 상기 복수의 코어로부터 전달받은 명령어들을 처리하는 것을 특징으로 한다.
일 실시예에 따른 상기 벡터 연산을 처리하는 단계는, 상기 벡터 연산에 필요한 데이터를 상기 복수의 코어가 공유하는 벡터 레지스터로부터 독출하는 단계를 포함하는 것을 특징으로 한다.
일 실시예에 따른 상기 벡터 연산을 처리하는 단계는, 상기 벡터 연산에 필요한 데이터를 상기 복수의 코어에 독립적으로 포함된 각 벡터 레지스터로부터 독출하는 단계를 포함하는 것을 특징으로 한다.
일 실시예에 따른 상기 연산 처리 방법은, 상기 복수의 코어 중에서 하나 이상의 코어를 선택하여 상기 선택된 코어에서 처리될 명령어를 상기 벡터 연산부에 전달하거나, 상기 벡터 연산부에서 처리되는 명령어들의 처리 우선 순위를 결정하는 단계를 더 포함한다.
일 실시예에 따른 상기 벡터 연산을 처리하는 단계는, 상기 벡터 연산에 필요한 데이터를 상기 복수의 코어에 독립적으로 포함된 각 벡터 레지스터로부터 독출하는 단계를 포함하고, 상기 연산 처리 방법은 상기 선택된 코어 내의 벡터 레지스터와 선택되지 않은 하나 이상의 코어 내의 벡터 레지스터를 병합하는 단계를 더 포함한다.
일 실시예에 따른 상기 벡터 레지스터를 병합하는 단계는, 상기 선택된 코어가 입력받은 명령어의 오퍼랜드(operand) 중에서, 상기 복수의 코어 중 어느 하나의 코어를 특정하는 상위 비트의 길이를 감소시키고, 나머지 비트는 상기 병합된 벡터 레지스터 내의 상대 주소를 나타내도록 하는 단계를 포함하는 것을 특징으로 한다.
일 실시예에 따른 상기 연산 처리 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체가 제공된다.
도1은 일 실시예에 따른 연산 처리 장치의 구조도를 나타낸다.
도2는 일 실시예에 따른 연산 처리 장치의 상세한 구조도를 나타낸다.
도3은 다른 실시예에 따른 연산 처리 장치의 구조도를 나타낸다.
도4는 일 실시예에 따른 연산 처리 장치의 구조도를 나타낸다.
도5는 일 실시예에 따른 레지스터 병합부가 벡터 레지스터를 병합하는 것을 나타낸다.
도6은 일 실시예에 따른 연산 처리 방법의 흐름도를 나타낸다.
도7은 일 실시예에 따른 연산 처리 방법의 흐름도를 나타낸다.
도2는 일 실시예에 따른 연산 처리 장치의 상세한 구조도를 나타낸다.
도3은 다른 실시예에 따른 연산 처리 장치의 구조도를 나타낸다.
도4는 일 실시예에 따른 연산 처리 장치의 구조도를 나타낸다.
도5는 일 실시예에 따른 레지스터 병합부가 벡터 레지스터를 병합하는 것을 나타낸다.
도6은 일 실시예에 따른 연산 처리 방법의 흐름도를 나타낸다.
도7은 일 실시예에 따른 연산 처리 방법의 흐름도를 나타낸다.
이하에서는 도면을 참조하여 실시 예들을 상세히 설명한다. 본 명세서에 기재된 실시 예와 도면에 도시된 구성은 본 발명의 일 실시 예에 불과할 뿐이고, 본 발명의 기술적 사상을 모두 대변하는 것은 아니므로, 본 출원시점에 있어서 이들을 대체할 수 있는 다양한 균등물과 변형 예들이 있을 수 있음을 이해하여야 한다.
도1은 일 실시예에 따른 연산 처리 장치의 구조도를 나타낸다.
일 실시예에 따른 연산 처리 장치(100)는 제1코어(110), 제2코어(120), 제3코어(130), 제4코어(140), 메모리(115, 125, 135, 145), 벡터(vector) 코어(180)를 포함할 수 있다. 이하 연산 처리 장치(100)는 프로세서(processor)가 될 수 있으며, 폰 노이만 구조(Von Newman architecture) 또는 하바드 구조(Harvard architecture)를 근간으로 설계된 중앙 처리 장치(Central Processing Unit)를 포함할 수 있다. 또한, 연산 처리 장치(100)는 ARM, MIPS(Microprocessor without interlocked pipeline stage), PowerPC, X86, AVR, Coldfile/38k 및 8051 계열의 중앙 처리 장치를 포함하나 이에 제한되지 않는다.
메모리(115, 125, 135, 145)는 소정의 기기(Machine)의 기억 장치를 구성하는 메모리의 전체 또는 일부 영역을 의미한다. 메모리(115, 125, 135, 145)는 각 코어에서 처리되는 연산에 필요한 입력 데이터 및 명령어와 연산이 처리된 결과를 저장할 수 있다. 예를 들어, 메모리(115)는 제1코어(110)에서 처리되는 연산에 필요한 명령어 및 입력 데이터와 제1코어(110)에서 처리된 연산의 결과를 저장할 수 있다.
제1코어(110), 제2코어(120), 제3코어(130), 제4코어(140) 각각은 메모리(115, 125, 135, 145)로부터 입력받은 명령어를 처리할 수 있다. 이하, 각각의 코어(110, 120, 130, 140)는 하나의 스레드(thread)를 담당할 수 있다.
제1코어(110), 제2코어(120), 제3코어(130), 제4코어(140) 각각은 스칼라 연산부(117, 127, 137, 147)를 포함할 수 있다. 스칼라 연산부(117, 127, 137, 147)는 병렬로 처리되기 어려운 연산을 처리할 수 있다.
벡터 코어(180)는 하나의 명령어로 다수의 데이터를 처리할 수 있다. 벡터 코어(180)는 벡터 연산을 처리하는 벡터 연산부(182)를 포함할 수 있다. 벡터 연산부(182)는 SIMD(Single Instruction Multiple Data) 연산부로 표현할 수도 있다. 이하, 명령어를 벡터 코어(180)로 전달한다는 의미는 명령어를 벡터 연산부(182)로 전달하고 명령어를 벡터 연산부(182)를 이용하여 처리한다는 의미를 포함한다.
도1에서는 도시되지 않았으나, 연산 처리 장치(100)는 명령어 저장부, 제어부를 더 포함할 수 있다. 명령어 저장부(미도시)는 연산 처리 장치(100)에서 수행되는 각종 제어를 위한 명령어가 저장될 수 있다. 제어부(미도시)는 스칼라 연산과 벡터 연산을 제어하기 위해 필요한 제어 신호를 생성할 수 있다.
도1의 연산 처리 장치(100)는 4개의 코어(제1코어(110), 제2코어(120), 제3코어(130), 제4코어(140))와 한 개의 벡터 코어(180)를 도시하였지만 이에 제한되지 않는다. 연산 처리 장치(100)는 N개의 코어(N은 1보다 큰 양의 정수)와 N보다 작은 개수의 벡터 코어(180)를 포함할 수 있다.
예를 들어, 연산 처리 장치(100)는 4개의 코어와 2개의 벡터 코어를 포함할 수 있으며 2개의 코어씩 한 개의 벡터 코어를 공유할 수 있다. 또한, 연산 처리 장치(100)는 8개의 코어와 한개의 벡터 코어를 포함할 수 있으며 8개의 코어가 한 개의 벡터 코어를 공유할 수 있다.
연산 처리 장치(100)의 각 코어는 서로 다른 연산을 처리할 수 있는데, 예를 들어 제1코어(110)는 영상의 렌더링을 처리하고, 제2코어(120)는 비디오 인코딩을 처리하고, 제3코어(130)는 오디오 신호를 처리하고, 제4코어(140)는 사용자 인터페이스를 처리하는 연산을 수행할 수 있다. 이 경우, 제1코어(110)에서 처리되는 렌더링 연산에서 스칼라 연산이 필요한 부분은 스칼라 연산부(117)에서 처리되고, 벡터 연산은 복수의 코어(110, 120, 130, 140)에 의해 공유되는 벡터 연산부(182)에서 처리될 수 있다.
이하 도2를 참조하여 제1코어(110), 제2코어(120), 제3코어(130), 제4코어(140)가 벡터 연산부(182)를 공유하는 방법이 후술된다.
도2는 일 실시예에 따른 연산 처리 장치의 상세한 구조도를 나타낸다.
도2는 도1에 도시된 연산 처리 장치(100)의 상세한 구조도를 나타낸다.
일 실시예에 따른 연산 처리 장치(100)는 제1코어(110), 제2코어(120), 제3코어(130), 제4코어(140)와 한 개의 벡터 코어(180)를 포함할 수 있다. 설명의 편의를 위해 도2에는 4개의 코어와 한 개의 벡터 코어를 포함하는 것으로 도시하였으나 이에 제한되지 않는다. 연산 처리 장치(100)는 N개의 코어(N은 1보다 큰 양의 정수)와 N보다 작은 개수의 벡터 코어(180)를 포함할 수 있다.
메모리(115, 125, 135, 145)와 스칼라 연산부(117, 127, 137, 147), 벡터 연산부(182)에 대한 설명은 도1과 동일하므로 생략한다.
각 코어(110, 120, 130, 140)은 스칼라 코어(211, 221, 231, 241)을 포함할 수 있다. 각 스칼라 코어(211, 221, 231, 241)는 스칼라 연산부(117, 127, 137, 147)와 스칼라 레지스터(214, 224, 234, 244)를 포함할 수 있다.
스칼라 레지스터(214, 224, 234, 244)는 스칼라 연산부(117, 127, 137, 147)에서 연산을 처리하기 위한 데이터 또는 명령어를 저장할 수 있다.
메모리(235)는 벡터 코어(180)에서 처리되는 연산에 필요한 입력 데이터 및 벡터 연산이 수행된 결과 데이터를 저장할 수 있다.
벡터 레지스터(284)는 벡터 연산부(182)가 연산을 수행하기 위해 사용하는 데이터를 저장할 수 있다. 벡터 레지스터(284)는 벡터 연산을 구성하는 요소를 접근하기 위한 메모리의 주소를 저장할 수 있고, 벡터 명령에 의한 읽기 또는 쓰기가 가능한 레지스터이다.
상술한 바와 같이 복수의 코어(110, 120, 130, 140)는 벡터 연산부(182)를 공유할 수 있다. 따라서, 각각의 코어(110, 120, 130, 140)는 벡터 연산이 필요한 명령어를 벡터 코어(180)에 전달하고 벡터 연산부(182)는 명령어가 정의한 벡터 연산을 처리할 수 있다. 일 실시예에 따른 코어(110, 120, 130, 140)는 입력된 명령어를 해독(decode)하여 벡터 연산이 필요한 명령어라고 판단되면 벡터 코어(180)에 명령어를 전달할 수 있다.
복수의 코어(110, 120, 130, 140)는 벡터 연산부(182)의 파이프라인(pipeline)단계에 따라 벡터 연산부(182)를 순차적으로 사용할 수 있다. 예를 들어, 가장 처음 클럭 사이클에는 제1코어(110)가 벡터 연산부(182)를 사용할 수 있다. 다음 클럭 사이클에는 제2코어(120)가 벡터 연산부(182)를 사용할 수 있다. 동일한 방식으로 제3코어(130) 및 제4코어(140)가 벡터 연산부(182)를 사용할 수 있다. 다음 클럭 사이클에는 다시 제1코어(110)가 벡터 연산부(182)를 사용할 수 있다.
결과적으로 4번의 클럭 사이클이 지난 후 제1코어(110)가 다시 벡터 연산부(182)를 사용할 수 있다.
보다 구체적으로 설명하면, 일 실시예에 따른 벡터 연산부(182)는 벡터 연산을 제1단계(283), 제2단계(284), 제3단계(285), 제4단계(286)로 나누어 파이프라인을 수행할 수 있다. 이하, 설명의 편의를 위해 제1코어(110), 제2코어(120), 제3코어(130), 제4코어(140)에서 전달되어 벡터 연산부(182)에 의해 처리되는 명령어를 각각 제1명령어, 제2명령어, 제3명령어, 제4명령어라고 한다.
가장 처음 클럭 사이클에서 벡터 연산부(182)는 제1명령어에 대해 제1단계(283)를 수행할 수 있다.
다음 클럭 사이클에서, 벡터 연산부(182)는 제1명령어에 대해 제2단계(284)를 수행함과 동시에 제2명령어에 대해 제1단계(283)를 수행할 수 있다.
다음 클럭 사이클에서, 벡터 연산부(182)는 제1명령어에 대해 제3단계(285)를 수행함과 동시에 제2명령어에 대해 제2단계(284)를, 제3명령어에 대해 제1단계(283)를 수행할 수 있다.
다음 클럭 사이클에서, 벡터 연산부(182)는 제1명령어에 대해 제4단계(286)을 수행함과 동시에 제2명령어에 대해 제3단계(285)를, 제3명령어에 대해 제2단계(284)를, 제4명령어에 대해 제1단계(283)를 수행할 수 있다.
다음 클럭 사이클에서, 벡터 연산부(182)는 다시 제1명령어에 대해 제1단계(283)를 수행하고, 제2명령어에 대해 제4단계(286), 제3명령어에 대해 제3단계(285), 제4명령어에 대해 제2단계(284)를 수행할 수 있다.
상술한 예는 프로세서의 파이프라인의 단계의 수가 4일 경우를 가정하여 설명한 것이며, 파이프라인의 단계의 수는 프로세서의 구조에 따라 얼마든지 달라질 수 있음은 자명하다.
일 실시예에 따른 복수의 코어(110, 120, 130, 140)는 벡터 레지스터(284)를 공유할 수 있다. 따라서, 각 명령어가 처리될 때 필요한 데이터를 동일한 벡터 레지스터(284)로부터 읽으므로, 벡터 레지스터(284)는 새로운 명령어가 입력될 때마다 덮어쓰기(Overwrite)가 수행될 수 있다.
예를 들어, 현재 클럭 사이클에서 제1명령어에 대해 제1단계(284)를 수행하고 있다면 다음의 클럭 사이클에서는 제1명령어는 제2단계(284)로 넘어가고 제2명령어가 벡터 연산부(282)로 새로이 입력되어 제1단계(283)가 수행될 수 있다. 이 때, 벡터 레지스터(284) 내부에 저장된 데이터는 제2명령어를 처리하는데 필요한 데이터로 덮어쓰기될 수 있다.
도3은 다른 실시예에 따른 연산 처리 장치의 구조도를 나타낸다.
일 실시예에 따른 연산 처리 장치(100)는 제1코어(110), 제2코어(120), 제3코어(130), 제4코어(140)와 한 개의 벡터 코어(180)를 포함할 수 있다. 도3의 연산 처리 장치(100)가 도2의 연산 처리 장치(100)와 다른점은 각 코어(110, 120, 130, 140)내에 벡터 레지스터(310, 320, 330, 340)가 독립적, 개별적으로 존재한다는 것이다.
따라서, 벡터 연산부(182)에서 제1명령어 내지 제4명령어를 파이프라인 단계에 따라 순차적으로 처리하더라도, 각 명령어가 처리되는데 필요한 데이터는 독립적인 벡터 레지스터에 저장되어 있으므로, 벡터 레지스터에 대한 덮어쓰기가 수행되지 않아도 된다. 즉, 각 벡터 레지스터(310, 320, 330, 340)는 다른 코어에 의한 접근이 제한되므로 벡터 레지스터 내의 값의 안정성이 보장되는 장점이 있다.
일 실시예에 따른 벡터 코어(180)는 복수의 벡터 레지스터(310, 320, 330, 340) 중 어느 하나의 벡터 레지스터를 선택하기 위한 멀티플렉서(MUX, 380)를 포함할 수 있다.
도4는 일 실시예에 따른 연산 처리 장치의 구조도를 나타낸다.
도4는 도3의 연산 처리 장치(100)의 상세한 구조도이다. 따라서 이하 생략되는 내용이라 하더라도 도3의 연산 처리 장치(100)에 관하여 이상에서 기술된 내용은 도4의 일 실시예에 따른 연산 처리 장치(100)에도 적용된다.
일 실시예에 따른 스케줄러(400)는 벡터 코어(180)로 전달되는 명령어를 스케줄링할 수 있다. 예를 들어, 코어가 4개인 경우 반드시 모든 코어에 벡터 연산부(182)에서 처리되어야 하는 명령어가 존재하는 것은 아니므로, 각각의 코어가 처리하는 4개의 명령어 중 일부의 코어만 선택하여 선택된 코어의 명령어만을 벡터 코어(180)로 전달할 수 있다.
예를 들어, 제2코어(120)와 제4코어(140)에서 벡터 연산이 필요없는 작업이 수행중인 경우 스케줄러(400)는 제1코어(110)와 제3코어(130)만을 선택하여 제1명령어, 제3명령어만 벡터 코어(180)로 전달할 수 있다. 이 경우, 제2명령어와 제4명령어는 벡터 연산부(182)에서 처리되지 않으며 벡터 레지스터(320)와 벡터 레지스터(340)는 사용하지 않는다.
일 실시예에 따른 스케줄러(400)는 벡터 연산부(182)에서 처리되는 명령어들의 순서를 변경할 수도 있다. 예를 들어, 제1명령어 -> 제2명령어 -> 제3명령어 -> 제4명령어 -> 제1명령어의 순서대로 처리하지 않고, 제1명령어 -> 제3명령어 -> 제2명령어 -> 제4명령어 -> 제1명령어의 순서대로 벡터 연산부(182)에서 처리되도록 벡터 코어(180)에 전달되는 명령어의 순서를 변경할 수 있다.
레지스터 병합부(410)는 하나 이상의 벡터 레지스터를 병합할 수 있다. 레지스터 병합부(410)가 벡터 레지스터를 병합하는 방법은 도5를 참조하여 후술한다.
도5는 일 실시예에 따른 레지스터 병합부가 벡터 레지스터를 병합하는 것을 나타낸다.
레지스터 병합부(410)는 스케줄러(400)에 의해 선택된 코어 내의 벡터 레지스터와 선택되지 않은 하나 이상의 코어 내의 벡터 레지스터를 병합할 수 있다. 도4를 참조하여 상술한 바와 같이, 스케줄러(400)는 코어를 선택하여 선택된 코어의 명령어들만 벡터 연산부(182)에서 처리되게 할 수 있다. 따라서, 스케줄러(400)가 제1코어(110)와 제3코어(130)를 선택하였다면, 제2명령어와 제4명령어는 벡터 연산부(182)에서 처리되지 않기 때문에, 제2코어(120) 내의 벡터 레지스터(320)와 제4코어(140)내의 벡터 레지스터(340)는 사용되지 않는다.
레지스터 병합부(410)는 스케줄러(400)에 의해 선택된 코어의 벡터 레지스터와 선택되지 않은 다른 코어 내의 벡터 레지스터를 병합하여 하나의 벡터 레지스터처럼 취급할 수 있다. 예를 들어, 레지스터 병합부(410)는 제1코어(110) 내의 벡터 레지스터(310)와 제2코어(120)내의 벡터 레지스터(320)를 병합하여 하나의 벡터 레지스터(510)처럼 취급할 수 있다. 제1코어(110)는 자신의 벡터 레지스터(310)뿐만 아니라 제2코어(120) 내의 벡터 레지스터(320)를 함께 사용함으로서 더 큰 용량의 벡터 레지스터(510)를 사용할 수 있다.
예를 들어, 각 벡터 레지스터(310, 320, 330, 340)의 크기가 16-way entry 라고 가정한다. 만약, 명령어의 오퍼랜드(580)의 비트 길이가 6비트이고, 스케줄러(400)가 제1명령어, 제2명령어, 제3명령어, 제4명령어를 모두 벡터 코어(180)로 전달한다면, 명령어의 오퍼랜드(580)는 상위 2 개의 비트(582)로 4개의 코어(110, 120, 130, 140)중 어느 하나를 특정하고 나머지 하위 4 개의 비트(584)로 각 벡터 레지스터(310, 320, 330, 340) 내의 상대 주소를 정의할 수 있다.
그러나, 스케줄러(400)가 4 개의 코어(110, 120, 130, 140) 중 제1코어(110)과 제3코어(130)를 선택하여, 제1명령어와 제3명령어만을 벡터 코어(180)에 전달하는 경우에는 제1코어(110)가 제2코어(120)내의 벡터 레지스터(320)를 함께 사용하고, 제3코어(130)가 제4코어(140)내의 벡터 레지스터(340)를 함께 사용할 수 있다. 따라서, 제1코어(110)가 사용하는 벡터 레지스터(510)와 제3코어(130)가 사용하는 벡터 레지스터(530)의 크기는 각각 2배가 되어 32-way entry 가 된다.
레지스터 병합부(410)는 명령어의 오퍼랜드의 비트값을 변경함으로서, 물리적으로 복수의 벡터 레지스터를 병합하지 않고 벡터 레지스터의 크기를 늘릴 수 있다.
구체적으로 설명하면, 레지스터 병합부(410)는 명령어 오퍼랜드(590)의 상위 한 개의 비트(592)를 이용하여 2개의 코어(110, 130)중 어느 하나를 특정하고 나머지 다섯 개의 비트(594)를 이용하여 병합된 벡터 레지스터(510, 530) 내의 상대 주소를 정의하도록 변경할 수 있다. 즉, 레지스터 병합부(410)는 명령어의 오퍼랜드 내에서 2 개의 코어(110, 130) 중 어느 하나를 나타내는 상위 비트의 길이와, 병합된 벡터 레지스터(510, 530) 내의 상대 주소를 나타내는 하위 비트의 길이를 변경할 수 있다.
도5에서는 제1코어(110)가 벡터 레지스터(310)와 벡터 레지스터(320)를 병합하여 사용하는 경우를 도시하였지만 이에 제한되지 않는다. 즉, 스케줄러(400)는 4개의 코어(110, 120, 130, 140) 중 한 개의 코어(110)만을 선택할 수 있고, 제1코어(110)는 벡터 레지스터(310, 320, 330, 340)를 모두 사용할 수 있다. 이 경우, 병합된 레지스터의 크기는 64-way entry 가 되며 레지스터 병합부(410)는 명령어의 오퍼랜드의 모든 비트를 병합된 벡터 레지스터 내의 상대 주소를 나타내도록 할 수 있다.
이하 일 실시예에 따른 연산 처리 장치(100)가 복수의 코어를 이용하여 명령어를 처리하는 방법이 도6 내지 7을 참조하여 후술한다. 도6 내지 7은 도2 내지 5에서 도시된 연산 처리 장치(100)에서 수행되는 명령어 처리 방법을 설명하기 위한 도면이다. 따라서, 이하 생략된 내용이라 하더라도 도2 내지 5에서 연산 처리 장치(100)에 관하여 이상에서 기술된 내용은 도6 내지 7의 일 실시 예에 따른 명령어 처리 방법에도 적용된다.
도6은 일 실시예에 따른 연산 처리 방법의 흐름도를 나타낸다.
단계 610에서, 연산 처리 장치(100)의 복수의 코어 각각은 명령어를 입력받을 수 있다. 연산 처리 장치(100)는 복수의 코어(multicore)로 구성된다. 각 명령어는 메모리로부터 인출되고 인출된 명령어는 코어 각각에 입력될 수 있다. 입력된 명령어는 단계 620로 넘어간다.
단계 620에서, 연산 처리 장치(100)의 각 코어는 입력받은 명령어가 벡터 연산이 필요한지 판단할 수 있다. 판단을 위해 연산 처리 장치(100)는 각 명령어를 해독(decode) 할 수 있다. 벡터 연산이 필요한 것으로 판단되면 명령어는 단계 630으로 넘어가고, 그렇지 않으면 단계 640으로 넘어간다.
단계 630에서, 연산 처리 장치(100)는 입력 받은 명령어를 복수의 코어들이 공유하는 벡터 연산부로 전달하여 벡터 연산을 처리할 수 있다. 코어의 개수보다 벡터 연산부의 개수가 적으면 각 코어는 벡터 연산부를 공유할 수 있다. 예를 들어, 4개의 코어가 하나의 벡터 연산부를 공유할 수 있으며, 4개의 코어가 2개의 코어씩 하나의 벡터 연산부를 공유할 수도 있다.
단계 630 에서, 연산 처리 장치(100)는 각 코어의 명령어를 벡터 연산부의 파이프라인 단계에 따라 순차적으로 벡터 연산 처리할 수 있다. 따라서, 연산 처리 장치(100)의 벡터 연산부는 복수의 코어로부터 전달된 명령어들을 서로 다른 단계를 수행하며 처리할 수 있다. 파이프라인의 단계의 수는 프로세서의 구조에 따라 얼마든지 달라질 수 있으며 단계의 수를 불문한다.
단계 630에서, 연산 처리 장치(100)는 벡터 연산에 필요한 데이터를 복수의 코어가 공유하는 벡터 레지스터로부터 독출할 수 있다. 따라서, 벡터 연산에 필요한 데이터를 동일한 벡터 레지스터로부터 독출하므로, 벡터 레지스터는 파이프라인의 단계수의 진행에 따라 덮어쓰기(overwrite)가 수행될 수 있다. 이와 달리, 연산 처리 장치(100)는 벡터 연산에 필요한 데이터를 복수의 코어에 독립적으로 포함된 각 벡터 레지스터로부터 독출할 수 있다. 벡터 레지스터가 각 코어 내에 존재하면 벡터 연산부에서 파이프라인으로 복수의 명령어를 처리하더라도, 벡터 레지스터에 대한 덮어쓰기가 수행되지 않아도 되므로 벡터 레지스터 내의 값의 안정성이 보장된다.
단계 640에서, 연산 처리 장치(100)는 각 코어가 입력받은 명령어를 각 코어에 포함된 스칼라 연산부에 전달하여 스칼라 연산 처리할 수 있다. 즉, 스칼라 연산은 각 코어마다 독립적으로 구동된다.
도7은 일 실시예에 따른 연산 처리 방법의 흐름도를 나타낸다.
단계 610, 단계 620, 단계 630, 단계 640는 도6을 참조하여 상술하였으므로 생략한다.
단계 710에서, 연산 처리 장치(100)는 복수의 코어 중에서 하나 이상의 코어를 선택하여 상기 선택된 코어에서 처리될 명령어를 벡터 연산부에 전달하거나, 상기 벡터 연산부에서 처리되는 명령어들의 처리 우선 순위를 결정할 수 있다.
단계 720에서, 연산 처리 장치(100)는 복수의 벡터 레지스터를 병합할 수 있다. 즉, 710단계에서 선택되지 않은 코어의 명령어는 벡터 연산부에서 처리되지 않으므로 선택되지 않은 코어 내의 벡터 레지스터는 사용하지 않는다. 따라서, 710 단계에서 선택된 코어는 자신이 가지고 있는 벡터 레지스터와 선택되지 않은 다른 코어가 가지고 있는 벡터 레지스터를 병합하여 사용할 수 있다.
단계 720에서, 연산 처리 장치(100)는 명령어의 오퍼랜드의 비트값을 변경함으로서, 물리적으로 복수의 벡터 레지스터를 병합하지 않고도 벡터 레지스터의 크기를 늘릴 수 있다. 즉 연산 처리 장치(100)는, 명령어 오퍼랜드 중에서, 복수의 코어 중 어느 하나를 특정하는 상위 비트의 길이를 감소시키고, 나머지 하위 비트는 병합된 벡터 레지스터 내의 상대 주소를 나타내도록 함으로서, 벡터 레지스터의 크기를 자유롭게 변경하여 사용할 수 있다.
한편, 연산 처리 방법은 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 컴퓨터가 읽을 수 있는 기록매체의 예로는 ROM, RAM. CD-ROM, 자기 테이프, 플로피디스크, 광 데이터 저장장치 등이 있으며, 또한 인터넷을 통한 전송 등과 같은 캐리어 웨이브의 형태로 구현되는 것도 포함한다. 또한, 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어, 분산방식으로 프로세서가 읽을 수 있는 코드가 저장되고 실행될 수 있다.
본 발명은 특정한 최상의 실시 예와 관련하여 설명되었지만, 이외에 본 발명에 대체, 변형 및 수정이 적용된 발명들은 전술한 설명에 비추어 당업자에게 명백할 것이다. 즉, 청구범위는 이러한 모든 대체, 변형 및 수정된 발명을 포함하도록 해석한다. 그러므로 이 명세서 및 도면에서 설명한 모든 내용은 예시적이고 비제한적인 의미로 해석해야 한다.
Claims (15)
- 벡터 연산이 필요한 명령어에 대해 벡터 연산 처리하는 벡터 연산부;
벡터 연산이 필요하지 않은 명령어에 대해 스칼라 연산 처리하는 스칼라 연산부를 포함하는 복수의 코어(Core);
상기 복수의 코어 중에서 하나 이상의 코어를 선택하여 상기 선택된 하나 이상의 코어에서 처리될 명령어를 상기 벡터 연산부에 전달하는 스케줄러; 및
상기 선택된 하나 이상의 코어 내의 벡터 레지스터와 상기 스케줄러에 의해 선택되지 않은 코어 중 하나 이상의 코어 내의 벡터 레지스터를 병합하는 레지스터 병합부;를 포함하고,
상기 복수의 코어는, 각각의 코어가 상기 벡터 연산에 필요한 데이터를 저장하는 벡터 레지스터를 독립적으로 포함고,
상기 벡터 연산부는 상기 복수의 코어에 의해 공유되고,
상기 스칼라 연산부는 상기 복수의 코어 각각에 독립적으로 존재하고,
상기 선택되지 않은 하나 이상의 코어는 스칼라 연산을 처리하는 것을 특징으로 하는 연산 처리 장치.
- 제1항에 있어서, 상기 벡터 연산부는,
파이프라인 단계에 따라 순차적으로 상기 복수의 코어로부터 전달받은 명령어들을 처리하는 것을 특징으로 하는 장치.
- 제1항에 있어서,
상기 벡터 연산에 필요한 데이터를 저장하는 벡터 레지스터를 더 포함하고,
상기 벡터 레지스터는 상기 복수의 코어에 의해 공유되는 것을 특징으로 하는 장치.
- 삭제
- 제1항에 있어서,
상기 스케줄러는,
상기 벡터 연산부에서 처리되는 명령어들의 처리 우선 순위를 결정하는 것을 더 포함하는 장치.
- 삭제
- 제5항에 있어서, 상기 레지스터 병합부는,
상기 선택된 코어가 입력 받은 명령어의 오퍼랜드(operand) 중에서, 상기 복수의 코어 중 어느 하나의 코어를 특정하는 상위 비트의 길이를 감소시키고, 나머지 비트는 상기 병합된 벡터 레지스터 내의 상대 주소를 나타내도록 하는 것을 특징으로 하는 장치.
- 복수의 코어(multicore)를 포함하는 프로세서(processor)에 의해 수행되는 연산 처리 방법에 있어서,
상기 복수의 코어 각각이 명령어를 입력받는 단계;
상기 복수의 코어 중에서 하나 이상의 코어를 선택하여 상기 선택된 코어에서 처리될 명령어를 벡터 연산부에 전달하는 단계;
상기 선택된 하나 이상의 코어 내의 벡터 레지스터와 선택되지 않은 코어 중 하나 이상의 코어 내의 벡터 레지스터를 병합하는 단계;
상기 입력 받은 명령어가 벡터 연산이 필요한 경우, 상기 프로세서 내의 벡터 연산부에 상기 명령어를 전달하여 벡터 연산 처리하는 단계; 및
상기 입력 받은 명령어가 벡터 연산이 필요하지 않은 경우, 상기 프로세서 내의 스칼라 연산부에 상기 명령어를 전달하여 스칼라 연산 처리하는 단계를 포함하고,
상기 벡터 연산을 처리하는 단계는, 상기 벡터 연산에 필요한 데이터를 상기 복수의 코어에 독립적으로 포함된 각 벡터 레지스터로부터 독출하는 단계를 포함하고,
상기 벡터 연산부는 상기 복수의 코어에 의해 공유되고,
상기 스칼라 연산부는 상기 복수의 코어 각각에 독립적으로 존재하고,
상기 선택되지 않은 코어 중 하나 이상의 코어는 스칼라 연산을 처리하는 것을 특징으로 하는 방법.
- 제8항에 있어서, 상기 벡터 연산을 처리하는 단계는,
파이프라인 단계에 따라 순차적으로 상기 복수의 코어로부터 전달받은 명령어들을 처리하는 것을 특징으로 하는 방법.
- 제8항에 있어서, 상기 벡터 연산을 처리하는 단계는,
상기 벡터 연산에 필요한 데이터를 상기 복수의 코어가 공유하는 벡터 레지스터로부터 독출하는 단계를 포함하는 것을 특징으로 하는 방법.
- 삭제
- 제8항에 있어서,
상기 전달하는 단계는,
상기 벡터 연산부에서 처리되는 명령어들의 처리 우선 순위를 결정하고, 상기 결정된 우선 순위에 기초하여 전달하는 것을 더 포함하는 방법.
- 삭제
- 제12항에 있어서, 상기 벡터 레지스터를 병합하는 단계는,
상기 선택된 코어가 입력 받은 명령어의 오퍼랜드(operand) 중에서, 상기 복수의 코어 중 어느 하나의 코어를 특정하는 상위 비트의 길이를 감소시키고, 나머지 비트는 상기 병합된 벡터 레지스터 내의 상대 주소를 나타내도록 하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제8항 내지 제10항, 제12항, 및 제14항 중 어느 한 항에서 수행되는 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020140188635A KR102332523B1 (ko) | 2014-12-24 | 2014-12-24 | 연산 처리 장치 및 방법 |
US14/757,586 US11042502B2 (en) | 2014-12-24 | 2015-12-24 | Vector processing core shared by a plurality of scalar processing cores for scheduling and executing vector instructions |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020140188635A KR102332523B1 (ko) | 2014-12-24 | 2014-12-24 | 연산 처리 장치 및 방법 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20160078025A KR20160078025A (ko) | 2016-07-04 |
KR102332523B1 true KR102332523B1 (ko) | 2021-11-29 |
Family
ID=56164337
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020140188635A KR102332523B1 (ko) | 2014-12-24 | 2014-12-24 | 연산 처리 장치 및 방법 |
Country Status (2)
Country | Link |
---|---|
US (1) | US11042502B2 (ko) |
KR (1) | KR102332523B1 (ko) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102235803B1 (ko) * | 2017-03-31 | 2021-04-06 | 삼성전자주식회사 | 반도체 장치 |
CN114625421A (zh) * | 2020-12-11 | 2022-06-14 | 上海阵量智能科技有限公司 | Simt指令处理方法及装置 |
US11816061B2 (en) * | 2020-12-18 | 2023-11-14 | Red Hat, Inc. | Dynamic allocation of arithmetic logic units for vectorized operations |
CN115993949B (zh) * | 2023-03-21 | 2023-07-14 | 苏州浪潮智能科技有限公司 | 一种面向多核处理器的向量数据的处理方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070074005A1 (en) * | 2005-09-27 | 2007-03-29 | Ibm Corporation | Method and apparatus for issuing instructions from an issue queue in an information handling system |
US20110249744A1 (en) * | 2010-04-12 | 2011-10-13 | Neil Bailey | Method and System for Video Processing Utilizing N Scalar Cores and a Single Vector Core |
US20130036268A1 (en) | 2005-10-21 | 2013-02-07 | Roger Espasa | Implementing Vector Memory Operations |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4897779A (en) * | 1988-07-20 | 1990-01-30 | Digital Equipment Corporation | Method and apparatus for optimizing inter-processor instruction transfers |
US6732253B1 (en) | 2000-11-13 | 2004-05-04 | Chipwrights Design, Inc. | Loop handling for single instruction multiple datapath processor architectures |
US7836276B2 (en) | 2005-12-02 | 2010-11-16 | Nvidia Corporation | System and method for processing thread groups in a SIMD architecture |
US8074051B2 (en) | 2004-04-07 | 2011-12-06 | Aspen Acquisition Corporation | Multithreaded processor with multiple concurrent pipelines per thread |
US20050251649A1 (en) | 2004-04-23 | 2005-11-10 | Sony Computer Entertainment Inc. | Methods and apparatus for address map optimization on a multi-scalar extension |
US7523295B2 (en) | 2005-03-21 | 2009-04-21 | Qualcomm Incorporated | Processor and method of grouping and executing dependent instructions in a packet |
US7814487B2 (en) | 2005-04-26 | 2010-10-12 | Qualcomm Incorporated | System and method of executing program threads in a multi-threaded processor |
WO2007049150A2 (en) * | 2005-09-28 | 2007-05-03 | Arc International (Uk) Limited | Architecture for microprocessor-based systems including simd processing unit and associated systems and methods |
WO2012100316A1 (en) * | 2011-01-25 | 2012-08-02 | Cognivue Corporation | Apparatus and method of vector unit sharing |
KR20120134549A (ko) | 2011-06-02 | 2012-12-12 | 삼성전자주식회사 | Simd 프로세서를 이용한 병렬 연산 처리 장치 및 방법 |
US8832412B2 (en) * | 2011-07-20 | 2014-09-09 | Broadcom Corporation | Scalable processing unit |
US10007518B2 (en) * | 2013-07-09 | 2018-06-26 | Texas Instruments Incorporated | Register file structures combining vector and scalar data with global and local accesses |
US9703708B2 (en) * | 2013-09-27 | 2017-07-11 | Intel Corporation | System and method for thread scheduling on reconfigurable processor cores |
-
2014
- 2014-12-24 KR KR1020140188635A patent/KR102332523B1/ko active IP Right Grant
-
2015
- 2015-12-24 US US14/757,586 patent/US11042502B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070074005A1 (en) * | 2005-09-27 | 2007-03-29 | Ibm Corporation | Method and apparatus for issuing instructions from an issue queue in an information handling system |
US20130036268A1 (en) | 2005-10-21 | 2013-02-07 | Roger Espasa | Implementing Vector Memory Operations |
US20110249744A1 (en) * | 2010-04-12 | 2011-10-13 | Neil Bailey | Method and System for Video Processing Utilizing N Scalar Cores and a Single Vector Core |
Also Published As
Publication number | Publication date |
---|---|
US11042502B2 (en) | 2021-06-22 |
KR20160078025A (ko) | 2016-07-04 |
US20160188531A1 (en) | 2016-06-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10346212B2 (en) | Approach for a configurable phase-based priority scheduler | |
US9697119B2 (en) | Optimizing configuration memory by sequentially mapping the generated configuration data into fields having different sizes by determining regular encoding is not possible | |
KR102332523B1 (ko) | 연산 처리 장치 및 방법 | |
JP2010050970A (ja) | 中央処理装置と画像処理装置との間で通信するための機器および方法 | |
CN103226463A (zh) | 用于使用预解码数据调度指令的方法和装置 | |
KR102277439B1 (ko) | 재구성 가능 프로세서 및 그 동작 방법 | |
KR20150019349A (ko) | 다중 쓰레드 실행 프로세서 및 이의 동작 방법 | |
JP2006338538A (ja) | ストリームプロセッサ | |
US8732350B2 (en) | Method and system for improving direct memory access offload | |
JP7410186B2 (ja) | Gpuにおける明示的な個別マスクレジスタのマスク操作方法 | |
KR101603752B1 (ko) | 멀티 모드 지원 프로세서 및 그 프로세서에서 멀티 모드를 지원하는 방법 | |
US20150143378A1 (en) | Multi-thread processing apparatus and method for sequentially processing threads | |
JP2004529405A (ja) | 依存性を決定するためのコンテンツ・アドレス指定可能メモリを実装したスーパースケーラ・プロセッサ | |
US8019982B2 (en) | Loop data processing system and method for dividing a loop into phases | |
US9690600B2 (en) | Reconfigurable processor and method of operating the same | |
JP5580404B2 (ja) | 半導体装置 | |
US20140331021A1 (en) | Memory control apparatus and method | |
JP6094356B2 (ja) | 演算処理装置 | |
US20130263141A1 (en) | Visibility Ordering in a Memory Model for a Unified Computing System | |
US11481250B2 (en) | Cooperative workgroup scheduling and context prefetching based on predicted modification of signal values | |
US20220197696A1 (en) | Condensed command packet for high throughput and low overhead kernel launch | |
US10366049B2 (en) | Processor and method of controlling the same | |
CN110383259B (zh) | 计算处理装置和信息处理系统 | |
US20080209085A1 (en) | Semiconductor device and dma transfer method | |
JP2011081695A (ja) | データ演算装置の制御回路及びデータ演算装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E902 | Notification of reason for refusal | ||
E90F | Notification of reason for final refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |