KR102659495B1 - 벡터 프로세서 및 그 제어 방법 - Google Patents
벡터 프로세서 및 그 제어 방법 Download PDFInfo
- Publication number
- KR102659495B1 KR102659495B1 KR1020160163399A KR20160163399A KR102659495B1 KR 102659495 B1 KR102659495 B1 KR 102659495B1 KR 1020160163399 A KR1020160163399 A KR 1020160163399A KR 20160163399 A KR20160163399 A KR 20160163399A KR 102659495 B1 KR102659495 B1 KR 102659495B1
- Authority
- KR
- South Korea
- Prior art keywords
- input data
- shuffle
- register
- data
- unit
- Prior art date
Links
- 239000013598 vector Substances 0.000 title claims abstract description 48
- 238000000034 method Methods 0.000 title claims description 42
- 238000010586 diagram Methods 0.000 description 15
- 238000012545 processing Methods 0.000 description 9
- 230000015654 memory Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000011017 operating method Methods 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 1
- 230000004044 response 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
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- 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/3001—Arithmetic instructions
-
- 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
-
- 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
-
- 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/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Advance Control (AREA)
- Image Processing (AREA)
Abstract
벡터 프로세서가 개시된다. 본 벡터 프로세서는, 복수의 SIMD(Single Instruction Multiple Data) 레인(lane) 각각에 구비되며, 각각 복수의 데이터를 저장하고, 복수의 데이터 중 현재 싸이클에 이용되는 입력 데이터를 각각 출력하는 복수의 레지스터 파일, 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신하고, 수신된 복수의 입력 데이터를 복수의 SIMD 레인 각각에 대응되도록 셔플(shuffle)하여 출력하는 셔플 유닛 및 셔플 유닛으로부터 출력되는 입력 데이터를 수신하여 병렬 연산을 수행하는 명령 실행 유닛(execution unit)을 포함한다.
Description
본 발명은 벡터 프로세서 및 그 제어 방법에 대한 것으로, 더욱 상세하게는 하나의 명령어로 여러 개의 값을 동시에 처리하는 벡터 프로세서 및 그 제어 방법에 대한 것이다.
SIMD(Single Instruction Multiple Data)는 여러 개의 데이터를 하나의 명령어를 통해 처리하는 병렬 연산의 한 분류이다. 구체적으로, SIMD는 복수의 실행 유닛들이 동일하거나 유사한 연산을 복수의 데이터에 적용하여 동시에 처리하는 방식이다.
다만, 종래에는 복수의 데이터를 벡터 레지스터 파일에 저장하고, 복수의 데이터 중 현재 싸이클에서 이용될 데이터를 셔플하여 다시 벡터 레지스터 파일에 저장하였다. 즉, 벡터 레지스터 파일은 복수의 데이터 외에 복수의 데이터를 셔플한 별도의 데이터가 추가로 저장되고, 이용 후 삭제되는 과정이 반복되었다. 그에 따라, 전력 소모가 많은 문제가 있었다.
또한, 복수의 데이터를 셔플하는 경우, 각 싸이클 별로 셔플 방법에 차이가 있기 때문에 각 싸이클 별 셔플을 위한 별도의 명령어가 필요했다. 그에 따라, 프로그램 코드가 길어지는 문제가 있었다.
본 발명은 상술한 필요성에 따른 것으로, 본 발명의 목적은 중복되는 연산의 처리 속도를 향상시키기 위한 벡터 프로세서 및 그 제어 방법을 제공함에 있다.
이상과 같은 목적을 달성하기 위한 본 발명의 일 실시 예에 따르면, 벡터 프로세서는, 복수의 SIMD(Single Instruction Multiple Data) 레인(lane) 각각에 구비되며, 각각 복수의 데이터를 저장하고, 상기 복수의 데이터 중 현재 싸이클에 이용되는 입력 데이터를 각각 출력하는 복수의 레지스터 파일, 상기 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신하고, 상기 수신된 복수의 입력 데이터를 상기 복수의 SIMD 레인 각각에 대응되도록 셔플(shuffle)하여 출력하는 셔플 유닛 및 상기 셔플 유닛으로부터 출력되는 입력 데이터를 수신하여 병렬 연산을 수행하는 명령 실행 유닛(execution unit)을 포함한다.
또한, 상기 셔플 유닛은 상기 복수의 SIMD 레인 각각에 구비된 복수의 멀티플렉서(Multiplexer)를 포함하고, 상기 복수의 멀티플렉서 각각은 상기 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신하고, 상기 수신된 복수의 입력 데이터 중 해당 멀티플렉서가 구비된 레인에 대응되는 하나의 입력 데이터를 출력할 수 있다.
그리고, 입력 명령어에 기초하여 상기 복수의 레지스터 파일 및 상기 셔플 유닛을 각 싸이클 별로 제어하는 셔플 제어 유닛을 더 포함할 수 있다.
또한, 상기 셔플 제어 유닛은 상기 복수의 SIMD 레인 각각의 참조 레지스터 주소를 상기 복수의 레지스터 파일 각각으로 전송하고, 상기 참조 레지스터 주소는, 각 레지스터 파일에 저장된 상기 복수의 데이터 중 상기 현재 싸이클에서 이용되는 입력 데이터의 주소일 수 있다.
그리고, 상기 셔플 제어 유닛은 상기 복수의 입력 데이터에 대한 셔플 정보를 상기 셔플 유닛으로 전송하며, 상기 셔플 정보는 상기 복수의 SIMD 레인 각각에서 출력될 입력 데이터에 대한 정보일 수 있다.
또한, 상기 셔플 제어 유닛은 상기 복수의 레지스터 파일 각각으로 현재 싸이클에서 이용될 입력 데이터에 대한 참조 레지스터 주소를 제공하는 어드레스 멀티플렉서(Address Multiplexer) 및 상기 어드레스 멀티플렉서를 제어하는 제어 유닛을 포함할 수 있다.
그리고, 상기 셔플 제어 유닛은 상기 복수의 SIMD 레인 각각의 참조 레지스터 주소를 저장하는 적어도 하나의 어드레스 레지스터를 더 포함하고, 상기 제어 유닛은 명령어 디코딩 유닛 및 상기 적어도 하나의 어드레스 레지스터로부터 제공되는 복수의 참조 레지스터 주소 중 하나를 대응되는 레지스터 파일로 제공하도록 상기 어드레스 멀티플렉서를 제어할 수 있다.
또한, 상기 입력 명령어는 상기 명령 실행 유닛이 처리할 연산의 종류, 연산 방법 및 가로, 세로 방향의 증가분에 대한 정보 중 적어도 하나를 포함할 수 있다.
그리고, 스칼라 레지스터 파일을 더 포함하고, 상기 명령 실행 유닛은 상기 스칼라 레지스터 파일로부터 출력되는 스칼라 데이터를 이용하여, 상기 셔플 유닛으로부터 출력되는 입력 데이터를 병렬 연산할 수 있다.
한편, 본 발명의 일 실시 예에 따르면, 벡터 프로세서의 제어 방법은, 복수의 SIMD(Single Instruction Multiple Data) 레인(lane) 각각에 구비된 복수의 레지스터 파일 각각에 복수의 데이터를 저장하고, 상기 복수의 데이터 중 현재 싸이클에 이용되는 입력 데이터를 각각 출력하는 단계, 셔플 유닛에 의해, 상기 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신하고, 상기 수신된 복수의 입력 데이터를 상기 복수의 SIMD 레인 각각에 대응되도록 셔플(shuffle)하여 출력하는 단계 및 상기 셔플 유닛으로부터 출력되는 입력 데이터를 수신하여 병렬 연산을 수행하는 단계를 포함한다.
또한, 상기 셔플하여 출력하는 단계는 상기 셔플 유닛에 구비된 복수의 SIMD 레인 각각에 구비된 복수의 멀티플렉서(Multiplexer) 각각에 의해, 상기 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신하고, 상기 수신된 복수의 입력 데이터 중 해당 멀티플렉서가 구비된 레인에 대응되는 하나의 입력 데이터를 출력할 수 있다.
그리고, 입력 명령어에 기초하여 상기 복수의 레지스터 파일 및 상기 셔플 유닛을 각 싸이클 별로 제어하는 단계를 더 포함할 수 있다.
또한, 상기 제어하는 단계는 상기 복수의 SIMD 레인 각각의 참조 레지스터 주소를 상기 복수의 레지스터 파일 각각으로 전송하고, 상기 참조 레지스터 주소는 각 레지스터 파일에 저장된 상기 복수의 데이터 중 상기 현재 싸이클에서 이용되는 입력 데이터의 주소일 수 있다.
그리고, 상기 제어하는 단계는 상기 복수의 입력 데이터에 대한 셔플 정보를 상기 셔플 유닛으로 전송하며, 상기 셔플 정보는 상기 복수의 SIMD 레인 각각에서 출력될 입력 데이터에 대한 정보일 수 있다.
또한, 상기 제어하는 단계는 상기 복수의 레지스터 파일 각각으로 현재 싸이클에서 이용될 입력 데이터에 대한 참조 레지스터 주소를 제공하도록 어드레스 멀티플렉서(Address Multiplexer)를 제어할 수 있다.
그리고, 상기 제어하는 단계는 적어도 하나의 어드레스 레지스터에 상기 복수의 SIMD 레인 각각의 참조 레지스터 주소를 저장하는 단계 및 명령어 디코딩 유닛 및 상기 적어도 하나의 어드레스 레지스터로부터 제공되는 복수의 참조 레지스터 주소 중 하나를 대응되는 레지스터 파일로 제공하도록 상기 어드레스 멀티플렉서를 제어하는 단계를 포함할 수 있다.
또한, 상기 입력 명령어는 상기 명령 실행 유닛이 처리할 연산의 종류, 연산 방법 및 가로, 세로 방향의 증가분에 대한 정보 중 적어도 하나를 포함할 수 있다.
그리고, 상기 병렬 연산을 수행하는 단계는 스칼라 레지스터 파일로부터 출력되는 스칼라 데이터를 이용하여, 상기 셔플 유닛으로부터 출력되는 입력 데이터를 병렬 연산할 수 있다.
한편, 본 발명의 일 실시 예에 따르면, 벡터 프로세서의 동작 방법을 수행하기 위한 프로그램이 저장된 기록 매체에 있어서, 상기 동작 방법은 복수의 SIMD(Single Instruction Multiple Data) 레인(lane) 각각에 구비된 복수의 레지스터 파일 각각에 복수의 데이터를 저장하고, 상기 복수의 데이터 중 현재 싸이클에 이용되는 입력 데이터를 각각 출력하는 단계, 셔플 유닛에 의해, 상기 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신하고, 상기 수신된 복수의 입력 데이터를 상기 복수의 SIMD 레인 각각에 대응되도록 셔플(shuffle)하여 출력하는 단계 및 상기 셔플 유닛으로부터 출력되는 입력 데이터를 수신하여 병렬 연산을 수행하는 단계를 포함한다.
이상과 같은 본 발명의 다양한 실시 예에 따르면, 벡터 프로세서는 입력 데이터를 셔플한 후, 재저장의 과정 없이 연산을 수행하여 처리 속도 및 에너지 효율을 향상시킬 수 있다.
도 1은 본 발명의 일 실시 예에 따른 벡터 프로세서의 구성을 나타내는 블럭도이다.
도 2는 본 발명의 일 실시 예에 따른 도 1에 도시된 벡터 프로세서의 구성을 구체적으로 나타내는 블럭도이다.
도 3a 내지 도 3c는 본 발명의 일 실시 예에 따른 필터를 적용하는 경우의 동작을 설명하기 위한 도면들이다.
도 4a 및 도 4b는 본 발명의 일 실시 예에 따른 복수의 레지스터 파일의 동작을 설명하기 위한 도면들이다.
도 5a 및 도 5b는 본 발명의 일 실시 예에 따른 셔플 유닛의 동작을 설명하기 위한 도면들이다.
도 6은 본 발명의 다른 실시 예에 따른 2D 연산을 설명하기 위한 도면이다.
도 7은 본 발명의 일 실시 예에 따른 프로그램 코드의 간소화를 설명하기 위한 도면이다.
도 8은 본 발명의 일 실시 예에 따른 벡터 프로세서의 제어 방법을 설명하기 위한 흐름도이다.
도 2는 본 발명의 일 실시 예에 따른 도 1에 도시된 벡터 프로세서의 구성을 구체적으로 나타내는 블럭도이다.
도 3a 내지 도 3c는 본 발명의 일 실시 예에 따른 필터를 적용하는 경우의 동작을 설명하기 위한 도면들이다.
도 4a 및 도 4b는 본 발명의 일 실시 예에 따른 복수의 레지스터 파일의 동작을 설명하기 위한 도면들이다.
도 5a 및 도 5b는 본 발명의 일 실시 예에 따른 셔플 유닛의 동작을 설명하기 위한 도면들이다.
도 6은 본 발명의 다른 실시 예에 따른 2D 연산을 설명하기 위한 도면이다.
도 7은 본 발명의 일 실시 예에 따른 프로그램 코드의 간소화를 설명하기 위한 도면이다.
도 8은 본 발명의 일 실시 예에 따른 벡터 프로세서의 제어 방법을 설명하기 위한 흐름도이다.
이하에서, 첨부된 도면을 이용하여 본 발명의 다양한 실시 예들에 대하여 구체적으로 설명한다.
도 1은 본 발명의 일 실시 예에 따른 벡터 프로세서(100)의 구성을 나타내는 블럭도이다.
도 1에 도시된 바와 같이, 벡터 프로세서(100)는 복수의 레지스터 파일(110), 셔플 유닛(120) 및 명령 실행 유닛(execution unit, 130)을 포함한다.
벡터 프로세서(100)는 벡터라고 불리는 다수의 데이터를 처리하는 명령어를 가진 프로세서를 의미한다. 예를 들어, 벡터 프로세서(100)는 다수의 데이터를 처리하는 벡터 프로세싱을 위한 SIMD(Single Instruction Multiple Data) 명령어를 처리할 수 있다. 여기서, SIMD는 하나의 명령어로 여러 개의 값을 동시에 계산하는 방식을 의미한다.
복수의 레지스터 파일(110) 각각은 복수의 SIMD 레인(lane) 각각에 구비될 수 있다. 즉, 각 SIMD 레인은 하나의 레지스터 파일을 구비할 수 있다. 여기서, 복수의 SIMD 레인은 병렬 처리 단위에 대응될 수 있다. 즉, 벡터 프로세서(100)는 최대로 복수의 SIMD 레인의 개수만큼 병렬 처리를 수행할 수 있다.
복수의 레지스터 파일(110)은 벡터 레지스터 파일이 아닌 복수의 스칼라 레지스터 파일로 구성될 수 있다. 벡터 레지스터 파일은 하나의 주소에 복수의 데이터가 저장되는 구조이며, 스칼라 레지스터 파일은 하나의 주소에 하나의 데이터가 저장되는 구조일 수 있다. 즉, 복수의 레지스터 파일(110)에 저장된 데이터를 출력하기 위한 레지스터 주소는 SIMD 레인 정보 및 해당 SIMD 레인에 대응되는 스칼라 레지스터 파일 중 데이터가 출력될 주소를 포함할 수 있다.
복수의 레지스터 파일(110)은 각각 복수의 데이터를 저장하고, 복수의 데이터 중 현재 싸이클에 이용되는 입력 데이터를 각각 출력할 수 있다. 예를 들어, 하나의 레지스터 파일은 두 개의 데이터를 저장하고, 현재 싸이클에 이용되는 입력 데이터를 출력할 수 있다. 나머지 레지스터 파일도 동일하게 두 개의 데이터를 저장하고, 현재 싸이클에 이용되는 입력 데이터를 출력할 수 있다. 즉, 한 싸이클 동안 복수의 레지스터 파일(110)로부터 출력되는 데이터의 개수는 복수의 레지스터 파일(100)의 개수와 동일할 수 있다.
다만, 이에 한정되는 것은 아니며, 병렬 처리 단위가 복수의 레지스터 파일(100)의 개수보다 작은 경우에는, 한 싸이클 동안 복수의 레지스터 파일(110)로부터 출력되는 데이터의 개수는 복수의 레지스터 파일(100)의 개수보다 작을 수도 있다.
셔플 유닛(120)은 복수의 레지스터 파일(110)과 연결되며, 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신할 수 있다. 즉, 셔플 유닛(120)은 각 SIMD 레인 별로 하나의 입력 데이터를 수신할 수 있다.
셔플 유닛(120)은 수신된 복수의 입력 데이터를 복수의 SIMD 레인 각각에 대응되도록 셔플(shuffle)하여 출력할 수 있다. 예를 들어, 셔플 유닛(120)는 제1 레지스터 파일, 제2 레지스터 파일, 제3 레지스터 파일 및 제4 레지스터 파일 각각으로부터 데이터 a, 데이터 b, 데이터 c 및 데이터 d를 수신할 수 있다. 여기서, 제1 레지스터 파일, 제2 레지스터 파일, 제3 레지스터 파일 및 제4 레지스터 파일 각각은 제1 SIMD 레인, 제2 SIMD 레인, 제3 SIMD 레인 및 제4 SIMD 레인에 구비될 수 있다. 셔플 유닛(120)은 수신된 데이터 a, 데이터 b, 데이터 c 및 데이터 d가 각각 제2 SIMD 레인, 제3 SIMD 레인, 제4 SIMD 레인 및 제1 SIMD 레인에서 처리되도록 셔플하여 출력할 수 있다. 셔플 방법은 연산의 종류에 따라 기설정되어 있거나 사용자에 의해 입력될 수 있다.
명령 실행 유닛(130)은 셔플 유닛(120)으로부터 출력되는 입력 데이터를 수신하여 병렬 연산을 수행할 수 있다. 명령 실행 유닛(130)은 싸이클 별로 복수의 입력 데이터를 병렬적으로 처리할 수 있다.
명령 실행 유닛(130)은 사칙 연산, 논리 연산 등을 수행할 수 있다. 다만, 이에 한정되는 것은 아니며, 명령 실행 유닛(130)은 얼마든지 다른 연산을 수행할 수도 있다.
명령 실행 유닛(130)은 복수의 SIMD 레인 각각에 구비된 복수의 실행 유닛을 포함할 수 있다. 또는, 명령 실행 유닛(130)은 하나의 하드웨어로서 복수의 연산을 동시에 처리하도록 구현될 수도 있다.
도 2는 본 발명의 일 실시 예에 따른 도 1에 도시된 벡터 프로세서(100)의 구성을 구체적으로 나타내는 블럭도이다.
도 2에 도시된 바와 같이, 벡터 프로세서(100)는 복수의 SIMD 레인 중 제1 SIMD 레인(10-1), 셔플 제어 유닛(140) 및 명령어 디코딩 유닛(150)을 포함할 수 있다. 도 2에서는 설명의 편의를 위해 복수의 SIMD 레인 중 제1 SIMD 레인(10-1)만을 도시하였다. 도 2에 도시된 구성 중 도 1에 도시된 구성과 중복되는 구성에 대해서는 자세한 설명을 생략하도록 한다.
제1 SIMD 레인(10-1)은 제1 레지스터 파일(110-1), 제1 셔플 데이터 패스(120-1) 및 실행 유닛(130-1)을 포함할 수 있다. 제1 셔플 데이터 패스(120-1)는 셔플 유닛(120)의 일 구성일 수 있다. 즉, 셔플 유닛(120)은 복수의 셔플 데이터 패스를 포함할 수 있으며, 각 셔플 데이터 패스는 각 SIMD 레인에 하나씩 구비될 수 있다.
셔플 유닛(120)은 복수의 SIMD 레인 각각에 구비된 복수의 멀티플렉서(Multiplexer)를 포함할 수 있다. 즉, 제1 셔플 데이터 패스(120-1)는 멀티플렉서로 구현될 수 있다. 복수의 멀티플렉서 각각은 복수의 레지스터 파일(110)로부터 출력되는 복수의 입력 데이터를 수신하고, 수신된 복수의 입력 데이터 중 해당 멀티플렉서가 구비된 레인에 대응되는 하나의 입력 데이터를 출력할 수 있다.
예를 들어, 제1 셔플 데이터 패스(120-1)는 제1 멀티플렉서로 구현될 수 있고, 제1 멀티플렉서는 제1 레지스터 파일(110-1)로부터 출력되는 입력 데이터를 수신할 뿐만 아니라, 다른 SIMD 레인에 구비된 나머지 레지스터 파일로부터 출력되는 입력 데이터를 수신할 수 있다. 즉, 멀티플렉서의 입력 포트의 개수는 복수의 SIMD 레인의 개수와 동일할 수 있다.
또한, 제2 SIMD 레인(미도시)에 구비된 제2 셔플 데이터 패스(미도시)는 제2 멀티플렉서로 구현될 수 있고, 제2 멀티플렉서는 제2 레지스터 파일(미도시)로부터 출력되는 입력 데이터를 수신할 뿐만 아니라, 다른 SIMD 레인에 구비된 나머지 레지스터 파일로부터 출력되는 입력 데이터를 수신할 수 있다.
즉, 복수의 멀티플렉서 각각은 복수의 레지스터 파일(110)로부터 복수의 입력 데이터를 수신할 수 있다. 또한, 각 레지스터 파일(110)은 해당 SIMD 레인에 구비된 셔플 데이터 패스로 입력 데이터를 제공할 뿐만 아니라 다른 SIMD 레인에 구비된 셔플 데이터 패스로도 입력 데이터를 제공할 수 있다.
제1 셔플 데이터 패스(120-1)는 제1 레지스터 파일(110-1)로부터 출력된 입력 데이터를 제1 SIMD 레인(10-1)이 아닌 다른 SIMD 레인에 구비된 실행 유닛으로 제공할 수 있다. 또한, 제1 셔플 데이터 패스(120-1)는 제1 레지스터 파일(110-1)이 아닌 다른 레지스터 파일로부터 출력된 복수의 입력 데이터 중 하나를 제1 실행 유닛(130-1)으로 제공할 수 있다.
다만, 이에 한정되는 것은 아니며, 셔플 데이터 패스(120-1)는 수신된 복수의 입력 데이터를 셔플하지 않고 출력할 수도 있다. 예를 들어, 제1 셔플 데이터 패스(120-1)는 제1 레지스터 파일(110-1)로부터 출력된 입력 데이터를 제1 실행 유닛(130-1)으로 제공할 수도 있다. 또는, 제1 레지스터 파일(110-1)로부터 출력된 입력 데이터는 제1 셔플 데이터 패스(120-1)를 거치지 않고, 곧바로 제1 실행 유닛(130-1)으로 제공될 수도 있다.
셔플 제어 유닛(140)은 입력 명령어에 기초하여 복수의 레지스터 파일(110) 및 셔플 유닛(120)을 각 싸이클 별로 제어할 수 있다. 또는, 셔플 제어 유닛(140)은 입력 명령어 및 현재 상태에 기초하여 복수의 레지스터 파일(110) 및 셔플 유닛(120)을 각 싸이클 별로 제어할 수 있다. 이때, 셔플 제어 유닛(140)는 현재 상태를 저장하고 있을 수 있다. 또한, 셔플 제어 유닛(140)은 한 싸이클이 경과될 때마다 현재 상태를 업데이트할 수 있다.
셔플 제어 유닛(140)은 복수의 SIMD 레인 각각의 참조 레지스터 주소를 복수의 레지스터 파일(110) 각각으로 전송할 수 있다. 여기서, 참조 레지스터 주소는 각 레지스터 파일에 저장된 복수의 데이터 중 현재 싸이클에서 이용되는 입력 데이터의 주소일 수 있다.
예를 들어, 제1 레지스터 파일(110-1)은 레지스터 주소 R0에 데이터 a를, 레지스터 주소 R1에 데이터 b를 저장할 수 있다. 이 상태에서, 셔플 제어 유닛(140)이 제1 SIMD 레인(10-1)의 참조 레지스터 주소 R1을 제1 레지스터 파일(110-1)로 전송하면, 제1 레지스터 파일(110-1)은 레지스터 주소 R1의 데이터 b를 출력할 수 있다. 셔플 제어 유닛(140)은 나머지 레지스터 파일에 대응되는 참조 레지스터 주소를 전송할 수 있다.
셔플 제어 유닛(140)은 복수의 입력 데이터에 대한 셔플 정보를 셔플 유닛(120)으로 전송할 수 있다. 즉, 셔플 제어 유닛(140)은 복수의 입력 데이터에 대한 셔플 정보를 셔플 유닛(120)에 구비된 복수의 셔플 데이터 패스로 전송할 수 있다. 여기서, 셔플 정보는 복수의 SIMD 레인 각각에서 출력될 입력 데이터에 대한 정보일 수 있다.
예를 들어, 셔플 제어 유닛(140)은 제1 멀티플렉서의 복수의 입력 포트로 입력되는 복수의 입력 데이터 중 현재 싸이클에서 출력될 입력 데이터가 입력되는 입력 포트에 대한 정보를 제1 멀티플렉서로 제공할 수 있다. 셔플 제어 유닛(140)은 나머지 멀티플렉서에 대하여도 각각에 대응되는 정보를 제공할 수 있다.
셔플 제어 유닛(140)은 입력 명령어 및 현재 상태 중 적어도 하나에 기초하여 복수의 입력 데이터에 대한 셔플 정보를 생성할 수도 있다.이상과 같이 복수의 레지스터 파일(110) 및 셔플 유닛(120)은 셔플 제어 유닛(140)의 제어에 따라 동작할 수 있다. 이하에서는 셔플 제어 유닛(140)의 구성을 좀더 구체적으로 설명한다.
셔플 제어 유닛(140)은 어드레스 멀티플렉서(Address Multiplexer, 141), 어드레스 레지스터(142), 제어 유닛(143) 및 구성 레지스터(144)를 포함할 수 있다.
어드레스 멀티플렉서(141)는 복수의 레지스터 파일(110) 각각으로 현재 싸이클에서 이용될 입력 데이터에 대한 참조 레지스터 주소를 제공할 수 있다. 도 2에서는 어드레스 멀티플렉서(141)가 하나인 것으로 도시하였으나, 이에 한정되는 것은 아니다. 예를 들어, 어드레스 멀티플렉서(141)는 복수의 레지스터 파일(110) 각각에 대응되도록 복수로 구현될 수도 있다.
적어도 하나의 어드레스 레지스터(142)는 복수의 SIMD 레인 각각의 참조 레지스터 주소를 저장할 수 있다. 적어도 하나의 어드레스 레지스터(142)는 명령어 디코딩 유닛(150)으로부터 참조 레지스터 주소를 입력받아 저장할 수 있다.
제어 유닛(143)은 어드레스 멀티플렉서(141) 및 셔플 데이터 패스(120-1)를 제어할 수 있다. 셔플 데이터 패스(120-1)를 제어하는 방법에 대하여는 설명하였으므로 구체적인 설명은 생략한다.
제어 유닛(143)은 명령어 디코딩 유닛(150) 및 적어도 하나의 어드레스 레지스터(142)로부터 제공되는 복수의 참조 레지스터 주소 중 하나를 대응되는 레지스터 파일로 제공하도록 어드레스 멀티플렉서(141)를 제어할 수 있다.
구성 레지스터(144)는 입력 명령어에 포함된 정보를 저장할 수 있다. 또한, 구성 레지스터(144)는 현재 상태를 저장할 수 있다. 예를 들어, 구성 레지스터(144)는 현재 상태를 저장하는 카운터를 포함할 수 있다.
제어 유닛(143)은 구성 레지스터(144)에 저장된 정보에 기초하여 다른 유닛들을 제어할 수 있다. 여기서, 입력 명령어는 명령 실행 유닛(130)이 처리할 연산의 종류, 연산 방법 및 가로, 세로 방향의 증가분에 대한 정보 중 적어도 하나를 포함할 수 있다.
그 밖에 벡터 프로세서(100)는 명령어 메모리(미도시), 명령어 페치 유닛(미도시), 명령어 디코딩 유닛(150), 스칼라 레지스터 파일(미도시) 등을 더 포함할 수 있다.
명령어 메모리는 명령어들을 저장할 수 있다. 명령어 페치 유닛은 입력 명령어에 기초하여 현재 싸이클에서 이용될 명령어를 명령어 메모리로부터 독출할 수 있다. 명령어 디코딩 유닛(150)은 페치된 명령어를 디코딩하여 명령어의 종류, 해당 명령어의 입력 데이터의 주소 등을 결정할 수 있다.
스칼라 레지스터 파일은 복수의 레지스터 파일과는 별도로 구비되며, 스칼라 데이터를 저장하기 위한 레지스터 파일이다. 복수의 레지스터 파일은 벡터 데이터를 저장하기 위한 레지스터 파일이다.
명령 실행 유닛(130)은 스칼라 레지스터 파일로부터 출력되는 스칼라 데이터를 이용하여, 셔플 유닛(120)으로부터 출력되는 복수의 입력 데이터를 병렬 연산할 수 있다.
즉, 스칼라 레지스터 파일로부터 출력되는 스칼라 데이터는 명령 실행 유닛(130)에 포함된 복수의 실행 유닛 전부에 전송될 수 있다. 실행 유닛은 스칼라 데이터 및 각 실행 유닛으로 입력되는 입력 데이터를 연산할 수 있다. 즉, 복수의 실행 유닛은 하나의 스칼라 데이터를 이용하여 병렬 연산을 수행할 수 있다.
이상과 같이 명령 실행 유닛(130)은 복수의 레지스터 파일(110)이 아닌 셔플 유닛(120)으로부터 직접 입력 데이터를 수신하기 때문에 처리 속도 및 에너지 효율의 개선이 가능하다. 이하에서는 도면을 통해 벡터 프로세서(100)의 동작의 예시를 설명한다.
도 3a 내지 도 3c는 본 발명의 일 실시 예에 따른 필터를 적용하는 경우의 동작을 설명하기 위한 도면들이다.
도 3a는 이미지에 적용될 수 있는 필터의 일 예를 나타낸다. 도 3a에는 3 × 3 매트릭스 형태의 필터를 도시하였으나, 이에 한정되는 것은 아니며, 얼마든지 다른 형태의 필터일 수도 있다. 또한, 필터가 아니더라도 병렬 연산이 적용될 수 있는 모든 경우에 본원의 기술이 적용 가능하다.
벡터 프로세서(100)는 도 3b와 같은 이미지에 필터를 적용할 수 있다. 도 3b의 상측 도면은 이미지의 각 픽셀 별 데이터를 나타내고, 도 3b의 하측 도면은 필터를 적용한 이미지를 나타낸다. 필터는 스칼라 레지스터 파일에 저장될 수 있다.
설명의 편의를 위해 병렬 연산 없이 필터가 적용되는 경우를 먼저 설명한다. 도 3a의 필터를 도 3b의 상측 이미지에 적용하는 경우, 프로세서는 w0, w1, ..., w8 각각을 상측 이미지의 (0,0), (0,1), (0,2), (1,0), (1,1), (1,2), (2,0), (2,1), (2,2) 픽셀에 곱하고, 곱한 값을 모두 더해서, 도 3b의 하측 이미지의 (0,0) 픽셀의 데이터를 결정할 수 있다.
그리고, 프로세서는 w0, w1, ..., w8 각각을 상측 이미지의 (0,1), (0,2), (0,3), (1,1), (1,2), (1,3), (2,1), (2,2), (2,3) 픽셀에 적용하여 도 3b의 하측 이미지의 (0,1) 픽셀의 데이터를 결정할 수 있다. 프로세서는 이와 같은 과정을 모든 픽셀에 대하여 반복하여 도 3b의 하측 이미지를 생성할 수 있다.
병렬 연산을 수행하는 경우, 벡터 프로세서(100)는 w0를 상측 이미지의 (0,0), (0,1), (0,2), (0,3) 각각에 곱한다. 구체적으로, SIMD 레인 각각에서 w0 및 상측 이미지의 (0,0), (0,1), (0,2), (0,3) 각각의 곱셈 연산이 수행될 수 있다. 예를 들어, 제1 SIMD 레인에서 w0 및 상측 이미지의 (0,0)의 곱셈 연산이 수행되고, 제2 SIMD 레인에서 w0 및 상측 이미지의 (0,1)의 곱셈 연산이 수행되고, 제3 SIMD 레인에서 w0 및 상측 이미지의 (0,2)의 곱셈 연산이 수행되고, 제4 SIMD 레인에서 w0 및 상측 이미지의 (0,3)의 곱셈 연산이 수행될 수 있다. 이상의 연산은 T0의 싸이클에서 수행될 수 있다.
이후, 제1 SIMD 레인에서 w1 및 상측 이미지의 (0,1)의 곱셈 연산이 수행되고, 곱셈 결과가 w0 및 상측 이미지의 (0,0)의 곱셈 결과에 더해진다. 나머지 SIMD 레인에서도 동일한 연산이 수행될 수 있다. 이상의 연산은 T1의 싸이클에서 수행될 수 있다. 도 3a 및 도 3b에는 T0, T1, T8 싸이클에서 필요한 데이터를 별도로 표시하였다.
즉, 벡터 프로세서(100)는 반복되는 곱셈 연산 및 덧셈 연산을 SIMD 레인 별로 수행하여 병렬 연산을 수행할 수 있다. 도 3c에는 각 싸이클 별 연산을 SIMD 레인 별로 나타냈으며, 벡터 프로세서(100) 내부의 각 구성의 동작에 대하여는 이하의 도면을 통해 구체적으로 설명한다.
도 4a 및 도 4b는 본 발명의 일 실시 예에 따른 복수의 레지스터 파일(110)의 동작을 설명하기 위한 도면들이다.
도 4a에 도시된 바와 같이, 복수의 레지스터 파일(110)은 각각 복수의 데이터를 저장할 수 있다. 여기서, 복수의 데이터는 도 3b의 상측 이미지일 수 있다. 제0 레지스터 파일(lane 0)은 (0,0), (0,4)를 저장하고, 제1 레지스터 파일(lane 1)은 (0,1), (0,5)를 저장하고, 제2 레지스터 파일(lane 2)은 (0,2), (0,6)을 저장하고, 제3 레지스터 파일(lane 3)은 (0,3), (0,7)을 저장할 수 있다.
T0 싸이클에서 제0 레지스터 파일은 (0,0)을 입력 데이터로서 출력하고, 제1 레지스터 파일은 (0,1)을 입력 데이터로서 출력하고, 제2 레지스터 파일은 (0,2)를 입력 데이터로서 출력하고, 제3 레지스터 파일은 (0,3)을 입력 데이터로서 출력할 수 있다.
이때, 복수의 레지스터 파일(110)은 셔플 제어 유닛(140)에서 제공하는 참조 레지스터 주소에 의해 출력할 입력 데이터를 결정할 수 있다. 즉, 셔플 제어 유닛(140)은 각 싸이클 별로 복수의 레지스터 파일(110) 각각에 참조 레지스터 주소를 제공할 수 있다. 예를 들어, 셔플 제어 유닛(140)은 T0 싸이클에서 제0 레지스터 파일에 참조 레지스터 주소 R0를 제공하고, 제1 레지스터 파일에 참조 레지스터 주소 R0를 제공하고, 제2 레지스터 파일에 참조 레지스터 주소 R0를 제공하고, 제3 레지스터 파일에 참조 레지스터 주소 R0를 제공할 수 있다.
이후, 도 4b에 도시된 바와 같이, T1 싸이클에서 제0 레지스터 파일은 (0,4)를 입력 데이터로서 출력하고, 제1 레지스터 파일은 (0,1)을 입력 데이터로서 출력하고, 제2 레지스터 파일은 (0,2)를 입력 데이터로서 출력하고, 제3 레지스터 파일은 (0,3)을 입력 데이터로서 출력할 수 있다.
이때, 셔플 제어 유닛(140)은 T1 싸이클에서 제0 레지스터 파일에 참조 레지스터 주소 R1을 제공하고, 제1 레지스터 파일에 참조 레지스터 주소 R0를 제공하고, 제2 레지스터 파일에 참조 레지스터 주소 R0를 제공하고, 제3 레지스터 파일에 참조 레지스터 주소 R0를 제공할 수 있다.
도 4a 및 도 4b에서는 설명의 편의를 위해 SIMD 레인이 4개로서 4개의 병렬 연산이 가능한 것으로 설명하였으나, 얼마든지 다른 개수의 SIMD 레인이 구비될 수도 있다.
또한, 도 4a 및 도 4b에서는 복수의 레지스터 파일(110)에 (0,0)부터 (0,7)의 데이터가 저장된 것으로 도시하였으나, 이에 한정되는 것은 아니다. 예를 들어, 복수의 레지스터 파일(110)은 더 많은 데이터를 저장할 수도 있다.
복수의 레지스터 파일(110)이 (0,0)부터 (0,7)의 데이터를 저장하고 있는 경우, 참조 레지스터 주소 각각은 1비트로 구성될 수 있다. 다만, 복수의 레지스터 파일(110)이 더 많은 데이터를 저장하는 경우, 참조 레지스터 주소 각각은 더 많은 비트로 구성될 수도 있다. 즉, 참조 레지스터 주소의 비트 수는 복수의 레지스터 파일에 저장된 데이터의 크기에 의해 결정될 수 있다.
또는, 참조 레지스터 주소의 비트 수가 기설정되어 있다면, 복수의 레지스터파일(110)에 저장되는 데이터 역시 참조 레지스터의 비트 수에 기초하여 결정될 수도 있다.
도 5a 및 도 5b는 본 발명의 일 실시 예에 따른 셔플 유닛(120)의 동작을 설명하기 위한 도면들이다.
도 5a에 도시된 바와 같이, 가장 좌측에 있는 멀티플렉서는 T0 싸이클에서 복수의 레지스터 파일(110)로부터 출력되는 입력 데이터 (0,0), (0,1), (0,2), (0,3)을 입력받을 수 있다. 그리고, 가장 좌측에 있는 멀티플렉서는 (0,0)을 입력 데이터로서 출력할 수 있다. 나머지 멀티플렉서 역시 유사하게 동작할 수 있다.
이때, 셔플 제어 유닛(140)은 각 싸이클에서 각 멀티플렉서가 출력해야 하는 데이터에 대한 정보를 제공할 수 있다. 예를 들어, 셔플 제어 유닛(140)은 T0 싸이클에서 가장 좌측에 있는 멀티플렉서의 제1 입력 포트를 통해 입력되는 입력 데이터를 출력하도록 가장 좌측에 있는 멀티플렉서를 제어할 수 있다.
이후, 도 5b에 도시된 바와 같이, 가장 좌측에 있는 멀티플렉서는 T1 싸이클에서 복수의 레지스터 파일(110)로부터 출력되는 입력 데이터 (0,0), (0,1), (0,2), (0,3)을 입력받을 수 있다. 그리고, 가장 좌측에 있는 멀티플렉서는 (0,1)을 입력 데이터로서 출력할 수 있다. 나머지 멀티플렉서 역시 유사하게 동작할 수 있다.
이때, 셔플 제어 유닛(140)은 T1 싸이클에서 가장 좌측에 있는 멀티플렉서의 제2 입력 포트를 통해 입력되는 입력 데이터를 출력하도록 가장 좌측에 있는 멀티플렉서를 제어할 수 있다.
즉, 셔플 유닛(120)은 복수의 멀티플렉서로 구현될 수 있으며, 각 멀티플렉서는 복수의 입력 데이터를 입력받고, 그 중 하나를 출력할 수 있다. 이상과 같은 동작을 통해 복수의 입력 데이터 각각이 연산될 SIMD 레인을 변경할 수 있다.
또한, 셔플 유닛(120)은 복수의 입력 데이터를 입력받아 셔플한 후, 곧바로 실행 유닛(130)으로 제공할 수 있다. 그에 따라, 셔플된 데이터를 다시 레지스터 파일(110)에 저장하기 위한 전력 소모를 감소시키고, 연산 속도를 향상시킬 수 있다. 또한, 하드웨어의 크기도 축소가 가능하다.
도 6은 본 발명의 다른 실시 예에 따른 2D 연산을 설명하기 위한 도면이다. 예를 들어, 도 3b의 상측 도면에서 TO 싸이클 동안 (0,0), (0,1), (0,2), (0,3)의 픽셀 데이터가 연산이 된다면, 2D 연산을 수행하는 경우에는 도 3b의 상측 도면에서 TO 싸이클 동안 (0,0), (0,1), (1,0), (1,1)의 픽셀 데이터가 연산될 수 있다. 2D 연산은 공지된 기술이고, 도 3b에서 설명한 바와 거의 유사하므로 구체적인 설명은 생략한다.
도 6에 도시된 바와 같이, 적어도 하나의 어드레스 레지스터(142)는 Bottom Address, Right Address, Diagonal Address를 포함할 수 있다. 예를 들어, 명령어 디코딩 유닛은 (0,0), (0,1), (1,0), (1,1)의 픽셀 데이터를 참조하기 위한 참조 레지스터 주소 R0를 어드레스 멀티플렉서(141)로 제공할 수 있다. 그리고, 적어도 하나의 어드레스 레지스터(142)는 (2,0), (2,1), (2,2), (2,3)의 픽셀 데이터를 참조하기 위한 Bottom Address R1, (0,2), (0,3), (1,2), (1,3)의 픽셀 데이터를 참조하기 위한 Right Address R2 및 (2,2), (2,3), (3,2), (3,3)의 픽셀 데이터를 참조하기 위한 Diagonal Address R3를 어드레스 멀티플렉서(141)로 제공할 수 있다.
한편, 구성 레지스터(144)는 하기의 명령어에 따른 입력 데이터를 저장할 수 있다.
[명령어 1]
sf_set2d $bottom, $right, $diagonal, num_row, num_col, row_stride, col_stride
여기서, $bottom, $right, $diagonal은 각각 Bottom Address, Right Address, Diagonal Address일 수 있다. num_row, num_col은 각각 세로 방향 최대값, 가로 방향 최대값일 수 있다. row_stride, col_stride는 각각 세로 방향 증가분, 가로 방향 증가분일 수 있다. 즉, 구성 레지스터(144)는 세로 방향 최대값, 가로 방향 최대값, 세로 방향 증가분, 가로 방향 증가분을 각각 Column Size Reg., Row Size Reg., Row Index Reg., Column Index Reg.로서 입력받을 수 있다. Pattern Reg.는 명령어 자체로서 입력될 수 있으며, 참조 패턴을 나타낸다.
여기서, 참조 패턴은 데이터 접근 순서를 나타낸다. 예를 들어, 참조 패턴은 1D 증가, 2D 증가 및 2D 지그재그 중 하나일 수 있다.
제어 유닛(143)은 이상의 데이터를 입력받아 어드레스 멀티플렉서(141) 및 셔플 데이터 패스(120-1)를 제어할 수 있다.
그 밖에, 하기와 같은 곱셈 또는 MAC(multiply and add) 연산 후 상태 갱신 명령어가 이용될 수 있다.
[명령어 2]
sf_mul $res, $multiplicand, $multiplier
sf_mac $acc, $multiplicand, $multiplier
여기서, multiplicand는 이미지일 수 있고, multiplier는 필터일 수 있다. res는 multiplicand와 multiplier의 곱셈 연산 결과이며, acc는 multiplicand와 multiplier의 곱셈 연산 결과를 이전의 값에 더한 결과일 수 있다.
이상과 같이 명령어 1 및 명령어 2를 이용하는 경우 프로그램 코드의 간소화가 가능하다.
도 7은 본 발명의 일 실시 예에 따른 프로그램 코드의 간소화를 설명하기 위한 도면이다.
도 7의 좌측에는 종래 기술에 따른 프로그램 코드를 나타내고, 도 7의 우측에는 본원에 따른 프로그램 코드를 나타낸다.
종래 기술에 따르면, 벡터 레지스터 파일에 저장되어 있는 데이터를 셔플한 후, 다시 벡터 레지스터 파일로 저장한다. 그에 따라, 종래 기술에 따른 프로그램 코드는 hcat 및 vcat와 같은 셔플을 위한 명령어를 포함할 수 있다. 또한, 모든 싸이클마다 데이터 셔플이 필요하며, 그에 따라, 모든 싸이클마다 hcat 또는 vcat이 필요할 수 있다.
이에 대해, 본원에 따르면, 복수의 레지스터 파일(110)에 저장되어 있는 데이터를 셔플한 후, 다시 복수의 레지스터 파일(110)로 저장하지 않고 곧바로 연산을 수행할 수 있다. 즉, hcat 및 vcat와 같은 셔플을 위한 명령어가 별도로 필요하지 않으며, 상술한 sf_set2d 명령어만이 필요하다. 즉, sf_set2d 명령어의 최초 입력으로 셔플 방법을 저장하고 있으며, 복수의 레지스터 파일(110)은 각 싸이클 별로 필요한 데이터를 셔플하여 제공하게 된다.
그에 따라, 본원에 따르면, 싸이클 별로 hcat 또는 vcat를 이용하지 않고, 상술한 sf_mul 또는 sf_mac를 이용하여 병렬 연산을 수행할 수 있다.
도 8은 본 발명의 일 실시 예에 따른 벡터 프로세서의 제어 방법을 설명하기 위한 흐름도이다.
먼저, 복수의 SIMD(Single Instruction Multiple Data) 레인(lane) 각각에 구비된 복수의 레지스터 파일 각각에 복수의 데이터를 저장하고, 복수의 데이터 중 현재 싸이클에 이용되는 입력 데이터를 각각 출력한다(S810). 그리고, 셔플 유닛에 의해, 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신하고, 수신된 복수의 입력 데이터를 복수의 SIMD 레인 각각에 대응되도록 셔플(shuffle)하여 출력한다(S820). 그리고, 셔플 유닛으로부터 출력되는 입력 데이터를 수신하여 병렬 연산을 수행한다(S830).
여기서, 셔플하여 출력하는 단계(S820)는 셔플 유닛에 구비된 복수의 SIMD 레인 각각에 구비된 복수의 멀티플렉서(Multiplexer) 각각에 의해, 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신하고, 수신된 복수의 입력 데이터 중 해당 멀티플렉서가 구비된 레인에 대응되는 하나의 입력 데이터를 출력할 수 있다.
한편, 입력 명령어에 기초하여 복수의 레지스터 파일 및 셔플 유닛을 각 싸이클 별로 제어하는 단계를 더 포함할 수 있다. 이때, 복수의 레지스터 파일 및 셔플 유닛을 특정 싸이클 동안 제어한 후, 현재 상태를 저장할 수 있다. 즉, 한 싸이클이 종료되면, 저장되어 있는 현재 상태를 업데이트할 수 있다.
여기서, 제어하는 단계는 복수의 SIMD 레인 각각의 참조 레지스터 주소를 복수의 레지스터 파일 각각으로 전송하고, 참조 레지스터 주소는 각 레지스터 파일에 저장된 복수의 데이터 중 현재 싸이클에서 이용되는 입력 데이터의 주소일 수 있다.
또한, 제어하는 단계는 복수의 입력 데이터에 대한 셔플 정보를 셔플 유닛으로 전송하며, 셔플 정보는 복수의 SIMD 레인 각각에서 출력될 입력 데이터에 대한 정보일 수 있다.
그리고, 제어하는 단계는 복수의 레지스터 파일 각각으로 현재 싸이클에서 이용될 입력 데이터에 대한 참조 레지스터 주소를 제공하도록 어드레스 멀티플렉서(Address Multiplexer)를 제어할 수 있다.
여기서, 제어하는 단계는 적어도 하나의 어드레스 레지스터에 복수의 SIMD 레인 각각의 참조 레지스터 주소를 저장하는 단계 및 명령어 디코딩 유닛 및 적어도 하나의 어드레스 레지스터로부터 제공되는 복수의 참조 레지스터 주소 중 하나를 대응되는 레지스터 파일로 제공하도록 어드레스 멀티플렉서를 제어할 수 있다.
그리고, 입력 명령어는 명령 실행 유닛이 처리할 연산의 종류, 연산 방법 및 가로, 세로 방향의 증가분에 대한 정보 중 적어도 하나를 포함할 수 있다.
한편, 병렬 연산을 수행하는 단계(S830)는 스칼라 레지스터 파일로부터 출력되는 스칼라 데이터를 이용하여, 셔플 유닛으로부터 출력되는 입력 데이터를 병렬 연산할 수 있다.
이상과 같은 본 발명의 다양한 실시 예에 따르면, 벡터 프로세서는 입력 데이터를 셔플한 후, 재저장의 과정 없이 연산을 수행하여 처리 속도 및 에너지 효율을 향상시킬 수 있다.
한편, 이러한 다양한 실시 예에 따른 방법들은 프로그래밍되어 각종 저장 매체에 저장될 수 있다. 이에 따라, 저장 매체를 실행하는 다양한 유형의 전자 장치에서 상술한 다양한 실시 예에 따른 방법들이 구현될 수 있다.
구체적으로는, 상술한 제어 방법을 순차적으로 수행하는 프로그램이 저장된 비일시적 판독 가능 매체(non-transitory computer readable medium)가 제공될 수 있다.
비일시적 판독 가능 매체란 레지스터, 캐쉬, 메모리 등과 같이 짧은 순간 동안 데이터를 저장하는 매체가 아니라 반영구적으로 데이터를 저장하며, 기기에 의해 판독(reading)이 가능한 매체를 의미한다. 구체적으로는, 상술한 다양한 어플리케이션 또는 프로그램들은 CD, DVD, 하드 디스크, 블루레이 디스크, USB, 메모리카드, ROM 등과 같은 비일시적 판독 가능 매체에 저장되어 제공될 수 있다.
또한, 이상에서는 본 발명의 바람직한 실시 예에 대하여 도시하고 설명하였지만, 본 발명은 상술한 특정의 실시 예에 한정되지 아니하며, 청구범위에서 청구하는 본 발명의 요지를 벗어남이 없이 당해 발명이 속하는 기술분야에서 통상의 지식을 가진자에 의해 다양한 변형실시가 가능한 것은 물론이고, 이러한 변형실시들은 본 발명의 기술적 사상이나 전망으로부터 개별적으로 이해되어져서는 안될 것이다.
100 : 벡터 프로세서 110 : 복수의 레지스터 파일
120 : 셔플 유닛 130 : 명령 실행 유닛
140 : 셔플 제어 유닛 150 : 명령어 디코딩 유닛
120 : 셔플 유닛 130 : 명령 실행 유닛
140 : 셔플 제어 유닛 150 : 명령어 디코딩 유닛
Claims (19)
- 복수의 SIMD(Single Instruction Multiple Data) 레인(lane) 각각에 구비되며, 각각 복수의 데이터를 저장하고, 상기 복수의 데이터 중 현재 싸이클에 이용되는 입력 데이터를 각각 출력하는 복수의 레지스터 파일;
상기 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신하고, 상기 수신된 복수의 입력 데이터를 상기 복수의 SIMD 레인 각각에 대응되도록 셔플(shuffle)하여 출력하는 복수의 멀티플렉서(Multiplexer)를 포함하는 셔플 유닛;
상기 셔플 유닛으로부터 출력되는 상기 셔플된 복수의 입력 데이터를 수신하고, 상기 셔플된 복수의 입력 데이터에 대한 병렬 연산을 수행하는 명령 실행 유닛(execution unit); 및
상기 복수의 멀티플렉서가 서로 다른 데이터를 출력하도록 제어하는 셔플 제어 유닛;을 포함하며,
상기 복수의 멀티플렉서는 상기 복수의 SIMD 레인 각각에 구비되며,
상기 셔플 유닛에서 출력되는 상기 셔플된 복수의 입력 데이터의 개수는 상기 셔플 유닛이 수신한 상기 복수의 입력 데이터의 개수와 동일한, 벡터 프로세서. - 제1항에 있어서,
상기 복수의 멀티플렉서 각각은,
상기 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신하고, 상기 수신된 복수의 입력 데이터 중 해당 멀티플렉서가 구비된 레인에 대응되는 하나의 입력 데이터를 출력하는, 벡터 프로세서. - 제1항에 있어서,
상기 셔플 제어 유닛은,
입력 명령어에 기초하여 상기 복수의 레지스터 파일 및 상기 셔플 유닛을 각 싸이클 별로 제어하는, 벡터 프로세서. - 제3항에 있어서,
상기 셔플 제어 유닛은,
상기 복수의 SIMD 레인 각각의 참조 레지스터 주소를 상기 복수의 레지스터 파일 각각으로 전송하고,
상기 참조 레지스터 주소는, 각 레지스터 파일에 저장된 상기 복수의 데이터 중 상기 현재 싸이클에서 이용되는 입력 데이터의 주소인, 벡터 프로세서. - 제3항에 있어서,
상기 셔플 제어 유닛은,
상기 복수의 입력 데이터에 대한 셔플 정보를 상기 셔플 유닛으로 전송하며,
상기 셔플 정보는,
상기 복수의 SIMD 레인 각각에서 출력될 입력 데이터에 대한 정보인, 벡터 프로세서. - 제3항에 있어서,
상기 셔플 제어 유닛은,
상기 복수의 레지스터 파일 각각으로 현재 싸이클에서 이용될 입력 데이터에 대한 참조 레지스터 주소를 제공하는 어드레스 멀티플렉서(Address Multiplexer); 및
상기 어드레스 멀티플렉서를 제어하는 제어 유닛;을 포함하는, 벡터 프로세서. - 제6항에 있어서,
상기 셔플 제어 유닛은,
상기 복수의 SIMD 레인 각각의 참조 레지스터 주소를 저장하는 적어도 하나의 어드레스 레지스터;를 더 포함하고,
상기 제어 유닛은,
명령어 디코딩 유닛 및 상기 적어도 하나의 어드레스 레지스터로부터 제공되는 복수의 참조 레지스터 주소 중 하나를 대응되는 레지스터 파일로 제공하도록 상기 어드레스 멀티플렉서를 제어하는, 벡터 프로세서. - 제3항에 있어서,
상기 입력 명령어는,
상기 명령 실행 유닛이 처리할 연산의 종류, 연산 방법 및 가로, 세로 방향의 증가분에 대한 정보 중 적어도 하나를 포함하는, 벡터 프로세서. - 제1항에 있어서,
스칼라 레지스터 파일;을 더 포함하고,
상기 명령 실행 유닛은,
상기 스칼라 레지스터 파일로부터 출력되는 스칼라 데이터를 이용하여, 상기 셔플 유닛으로부터 출력되는 입력 데이터를 병렬 연산하는, 벡터 프로세서. - 벡터 프로세서의 제어 방법에 있어서,
복수의 SIMD(Single Instruction Multiple Data) 레인(lane) 각각에 구비된 복수의 레지스터 파일 각각에 복수의 데이터를 저장하고, 상기 복수의 데이터 중 현재 싸이클에 이용되는 입력 데이터를 각각 출력하는 단계;
셔플 유닛에 구비된 상기 복수의 SIMD 레인 각각에 대응되는 복수의 멀티플렉서(Multiplexer)에 의해, 상기 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신하고, 상기 수신된 복수의 입력 데이터를 상기 복수의 SIMD 레인 각각에 대응되도록 셔플(shuffle)하여 출력하는 단계; 및
명령 실행 유닛에 의해, 상기 셔플 유닛으로부터 출력되는 상기 셔플된 복수의 입력 데이터를 수신하고, 상기 셔플된 복수의 입력 데이터에 대한 병렬 연산을 수행하는 단계;를 포함하며,
상기 셔플하여 출력하는 단계는,
상기 복수의 멀티플렉서에 의해, 서로 다른 데이터를 출력하고,
상기 셔플 유닛에서 출력되는 상기 셔플된 복수의 입력 데이터의 개수는 상기 셔플 유닛이 수신한 상기 복수의 입력 데이터의 개수와 동일한, 제어 방법. - 제10항에 있어서,
상기 셔플하여 출력하는 단계는,
상기 복수의 멀티플렉서 각각에 의해, 상기 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신하고, 상기 수신된 복수의 입력 데이터 중 해당 멀티플렉서가 구비된 레인에 대응되는 하나의 입력 데이터를 출력하는, 제어 방법. - 제10항에 있어서,
입력 명령어에 기초하여 상기 복수의 레지스터 파일 및 상기 셔플 유닛을 각 싸이클 별로 제어하는 단계;를 더 포함하는, 제어 방법. - 제12항에 있어서,
상기 제어하는 단계는,
상기 복수의 SIMD 레인 각각의 참조 레지스터 주소를 상기 복수의 레지스터 파일 각각으로 전송하고,
상기 참조 레지스터 주소는, 각 레지스터 파일에 저장된 상기 복수의 데이터 중 상기 현재 싸이클에서 이용되는 입력 데이터의 주소인, 제어 방법. - 제12항에 있어서,
상기 제어하는 단계는,
상기 복수의 입력 데이터에 대한 셔플 정보를 상기 셔플 유닛으로 전송하며,
상기 셔플 정보는,
상기 복수의 SIMD 레인 각각에서 출력될 입력 데이터에 대한 정보인, 제어 방법. - 제12항에 있어서,
상기 제어하는 단계는,
상기 복수의 레지스터 파일 각각으로 현재 싸이클에서 이용될 입력 데이터에 대한 참조 레지스터 주소를 제공하도록 어드레스 멀티플렉서(Address Multiplexer)를 제어하는, 제어 방법. - 제15항에 있어서,
상기 제어하는 단계는,
적어도 하나의 어드레스 레지스터에 상기 복수의 SIMD 레인 각각의 참조 레지스터 주소를 저장하는 단계; 및
명령어 디코딩 유닛 및 상기 적어도 하나의 어드레스 레지스터로부터 제공되는 복수의 참조 레지스터 주소 중 하나를 대응되는 레지스터 파일로 제공하도록 상기 어드레스 멀티플렉서를 제어하는 단계;를 포함하는, 제어 방법. - 제12항에 있어서,
상기 입력 명령어는,
상기 명령 실행 유닛이 처리할 연산의 종류, 연산 방법 및 가로, 세로 방향의 증가분에 대한 정보 중 적어도 하나를 포함하는, 제어 방법. - 제10항에 있어서,
상기 병렬 연산을 수행하는 단계는,
스칼라 레지스터 파일로부터 출력되는 스칼라 데이터를 이용하여, 상기 셔플 유닛으로부터 출력되는 입력 데이터를 병렬 연산하는, 제어 방법. - 벡터 프로세서의 동작 방법을 수행하기 위한 프로그램이 저장된 기록 매체에 있어서,
상기 동작 방법은,
복수의 SIMD(Single Instruction Multiple Data) 레인(lane) 각각에 구비된 복수의 레지스터 파일 각각에 복수의 데이터를 저장하고, 상기 복수의 데이터 중 현재 싸이클에 이용되는 입력 데이터를 각각 출력하는 단계;
셔플 유닛에 구비된 상기 복수의 SIMD 레인 각각에 대응되는 복수의 멀티플렉서(Multiplexer)에 의해, 상기 복수의 레지스터 파일로부터 출력되는 복수의 입력 데이터를 수신하고, 상기 수신된 복수의 입력 데이터를 상기 복수의 SIMD 레인 각각에 대응되도록 셔플(shuffle)하여 출력하는 단계; 및
명령 실행 유닛에 의해, 상기 셔플 유닛으로부터 출력되는 상기 셔플된 복수의 입력 데이터를 수신하고, 상기 셔플된 복수의 입력 데이터에 대한 병렬 연산을 수행하는 단계;를 포함하며,
상기 셔플하여 출력하는 단계는,
상기 복수의 멀티플렉서에 의해, 서로 다른 데이터를 출력하고,
상기 셔플 유닛에서 출력되는 상기 셔플된 복수의 입력 데이터의 개수는 상기 셔플 유닛이 수신한 상기 복수의 입력 데이터의 개수와 동일한, 기록 매체.
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020160163399A KR102659495B1 (ko) | 2016-12-02 | 2016-12-02 | 벡터 프로세서 및 그 제어 방법 |
PCT/KR2017/011725 WO2018101607A1 (ko) | 2016-12-02 | 2017-10-23 | 벡터 프로세서 및 그 제어 방법 |
US16/462,086 US11263018B2 (en) | 2016-12-02 | 2017-10-23 | Vector processor and control method therefor |
CN201780074579.8A CN110050259B (zh) | 2016-12-02 | 2017-10-23 | 矢量处理器及其控制方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020160163399A KR102659495B1 (ko) | 2016-12-02 | 2016-12-02 | 벡터 프로세서 및 그 제어 방법 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20180063542A KR20180063542A (ko) | 2018-06-12 |
KR102659495B1 true KR102659495B1 (ko) | 2024-04-22 |
Family
ID=62242214
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020160163399A KR102659495B1 (ko) | 2016-12-02 | 2016-12-02 | 벡터 프로세서 및 그 제어 방법 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11263018B2 (ko) |
KR (1) | KR102659495B1 (ko) |
CN (1) | CN110050259B (ko) |
WO (1) | WO2018101607A1 (ko) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10877925B2 (en) * | 2019-03-18 | 2020-12-29 | Micron Technology, Inc. | Vector processor with vector first and multiple lane configuration |
JP2021135984A (ja) * | 2020-02-28 | 2021-09-13 | 京セラドキュメントソリューションズ株式会社 | データ連携システムおよびデータ蓄積システム |
CN115061731B (zh) * | 2022-06-23 | 2023-05-23 | 摩尔线程智能科技(北京)有限责任公司 | 混洗电路和方法、以及芯片和集成电路装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130318328A1 (en) * | 2011-12-23 | 2013-11-28 | Elmoustapha Ould-Ahmed-Vall | Apparatus and method for shuffling floating point or integer values |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6115812A (en) * | 1998-04-01 | 2000-09-05 | Intel Corporation | Method and apparatus for efficient vertical SIMD computations |
US6665790B1 (en) | 2000-02-29 | 2003-12-16 | International Business Machines Corporation | Vector register file with arbitrary vector addressing |
US7818356B2 (en) | 2001-10-29 | 2010-10-19 | Intel Corporation | Bitstream buffer manipulation with a SIMD merge instruction |
US7933405B2 (en) * | 2005-04-08 | 2011-04-26 | Icera Inc. | Data access and permute unit |
US7676647B2 (en) | 2006-08-18 | 2010-03-09 | Qualcomm Incorporated | System and method of processing data using scalar/vector instructions |
US8156310B2 (en) * | 2006-09-11 | 2012-04-10 | International Business Machines Corporation | Method and apparatus for data stream alignment support |
US8078836B2 (en) * | 2007-12-30 | 2011-12-13 | Intel Corporation | Vector shuffle instructions operating on multiple lanes each having a plurality of data elements using a common set of per-lane control bits |
US9141386B2 (en) | 2010-09-24 | 2015-09-22 | Intel Corporation | Vector logical reduction operation implemented using swizzling on a semiconductor chip |
US9552206B2 (en) * | 2010-11-18 | 2017-01-24 | Texas Instruments Incorporated | Integrated circuit with control node circuitry and processing circuitry |
CN103189837B (zh) * | 2011-10-18 | 2016-12-28 | 松下知识产权经营株式会社 | 混洗模式生成电路、处理器、混洗模式生成方法、命令 |
US8984499B2 (en) | 2011-12-15 | 2015-03-17 | Intel Corporation | Methods to optimize a program loop via vector instructions using a shuffle table and a blend table |
US20130339649A1 (en) | 2012-06-15 | 2013-12-19 | Intel Corporation | Single instruction multiple data (simd) reconfigurable vector register file and permutation unit |
US9606797B2 (en) | 2012-12-21 | 2017-03-28 | Intel Corporation | Compressing execution cycles for divergent execution in a single instruction multiple data (SIMD) processor |
US9501276B2 (en) * | 2012-12-31 | 2016-11-22 | Intel Corporation | Instructions and logic to vectorize conditional loops |
WO2014108749A1 (en) | 2013-01-10 | 2014-07-17 | Freescale Semiconductor, Inc. | Data processor and method for data processing |
EP3037957A4 (en) * | 2013-08-19 | 2017-05-17 | Shanghai Xinhao Microelectronics Co. Ltd. | Buffering system and method based on instruction cache |
EP3001307B1 (en) * | 2014-09-25 | 2019-11-13 | Intel Corporation | Bit shuffle processors, methods, systems, and instructions |
US10296489B2 (en) * | 2014-12-27 | 2019-05-21 | Intel Corporation | Method and apparatus for performing a vector bit shuffle |
-
2016
- 2016-12-02 KR KR1020160163399A patent/KR102659495B1/ko active IP Right Grant
-
2017
- 2017-10-23 CN CN201780074579.8A patent/CN110050259B/zh active Active
- 2017-10-23 US US16/462,086 patent/US11263018B2/en active Active
- 2017-10-23 WO PCT/KR2017/011725 patent/WO2018101607A1/ko active Application Filing
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130318328A1 (en) * | 2011-12-23 | 2013-11-28 | Elmoustapha Ould-Ahmed-Vall | Apparatus and method for shuffling floating point or integer values |
Also Published As
Publication number | Publication date |
---|---|
US11263018B2 (en) | 2022-03-01 |
KR20180063542A (ko) | 2018-06-12 |
CN110050259A (zh) | 2019-07-23 |
US20200272478A1 (en) | 2020-08-27 |
CN110050259B (zh) | 2023-08-11 |
WO2018101607A1 (ko) | 2018-06-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7253506B2 (ja) | レジスタ・ベースの行列乗算 | |
KR101202445B1 (ko) | 프로세서 | |
KR102659495B1 (ko) | 벡터 프로세서 및 그 제어 방법 | |
US11513796B2 (en) | Multiply-accumulation in a data processing apparatus | |
KR101956197B1 (ko) | 그래픽 처리 유닛을 이용한 데이터 처리 방법 및 장치 | |
KR102584031B1 (ko) | 데이터 처리장치에서의 요소 바이 벡터 연산 | |
JP7506086B2 (ja) | データ処理 | |
JP3985797B2 (ja) | プロセッサ | |
US11409840B2 (en) | Dynamically adaptable arrays for vector and matrix operations | |
KR102591988B1 (ko) | 데이터 처리장치에서의 벡터 인터리빙 | |
KR102649933B1 (ko) | 벡터 자리올림이 있는 가산 명령 | |
WO2023199014A1 (en) | Technique for handling data elements stored in an array storage | |
WO2023199015A1 (en) | Technique for handling data elements stored in an array storage | |
CN115993951A (zh) | 用于重用乘法累加运算的矩阵乘法的装置、方法和*** | |
KR20210082970A (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 | ||
GRNT | Written decision to grant |