KR102515720B1 - 명령어 사전인출을 위한 방법 및 장치 - Google Patents
명령어 사전인출을 위한 방법 및 장치 Download PDFInfo
- Publication number
- KR102515720B1 KR102515720B1 KR1020227021273A KR20227021273A KR102515720B1 KR 102515720 B1 KR102515720 B1 KR 102515720B1 KR 1020227021273 A KR1020227021273 A KR 1020227021273A KR 20227021273 A KR20227021273 A KR 20227021273A KR 102515720 B1 KR102515720 B1 KR 102515720B1
- Authority
- KR
- South Korea
- Prior art keywords
- vector
- modified form
- memory
- instruction
- memory location
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 41
- 239000013598 vector Substances 0.000 claims abstract description 120
- 230000015654 memory Effects 0.000 claims description 121
- 230000004075 alteration Effects 0.000 claims description 2
- 239000000872 buffer Substances 0.000 abstract description 44
- 238000012986 modification Methods 0.000 abstract description 4
- 230000004048 modification Effects 0.000 abstract description 4
- 238000012545 processing Methods 0.000 description 37
- 238000003384 imaging method Methods 0.000 description 29
- 239000004744 fabric Substances 0.000 description 23
- 230000006870 function Effects 0.000 description 19
- 230000002093 peripheral effect Effects 0.000 description 11
- 230000008569 process Effects 0.000 description 8
- 238000004891 communication Methods 0.000 description 7
- 230000000007 visual effect Effects 0.000 description 7
- 235000003239 Guizotia abyssinica Nutrition 0.000 description 6
- 240000002795 Guizotia abyssinica Species 0.000 description 6
- 238000007667 floating Methods 0.000 description 6
- 230000008901 benefit Effects 0.000 description 5
- 238000001914 filtration Methods 0.000 description 5
- 101100236200 Arabidopsis thaliana LSU1 gene Proteins 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 239000000284 extract Substances 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000012935 Averaging Methods 0.000 description 1
- 241000023320 Luma <angiosperm> Species 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 238000003705 background correction Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 238000003708 edge detection Methods 0.000 description 1
- 230000004907 flux Effects 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 230000007787 long-term memory Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 229910044991 metal oxide Inorganic materials 0.000 description 1
- 150000004706 metal oxides Chemical class 0.000 description 1
- OSWPMRLSEDHDFF-UHFFFAOYSA-N methyl salicylate Chemical compound COC(=O)C1=CC=CC=C1O OSWPMRLSEDHDFF-UHFFFAOYSA-N 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003094 perturbing effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 230000017105 transposition Effects 0.000 description 1
- 230000001960 triggered effect 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/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/30149—Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/02—Digital function generators
- G06F1/03—Digital function generators working, at least partly, by table look-up
- G06F1/035—Reduction of table size
-
- 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/30025—Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
-
- 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/3005—Arrangements for executing specific machine instructions to perform operations for flow control
-
- 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/30181—Instruction operation extension or modification
- G06F9/30192—Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
-
- 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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/323—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3814—Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
-
- 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
-
- 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/30029—Logical and Boolean instructions, e.g. XOR, NOT
-
- 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/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/30149—Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
- G06F9/30152—Determining start or end of instruction; determining instruction length
-
- 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/3818—Decoding for concurrent execution
- G06F9/3822—Parallel decoding, e.g. parallel decode units
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
- Image Processing (AREA)
- Power Sources (AREA)
- Memory System (AREA)
Abstract
다양한 가변-길이 명령어를 포함하는 벡터 프로세서가 개시된다. 시간을 인식하고, 메모리 효율적이며, 전력 효율적인 방식으로 다양한 연산을 효율적으로 실행하기 위한 컴퓨터에 의해 구현되는 방법이 개시된다. 지연 라인 명령어의 길이에 기초하여 임계값을 제어함으로써 버퍼를 더 효율적으로 관리하기 위한 방법이 개시된다. 다중-타입 및 다중-크기 연산들을 하드웨어에 배치하기 위한 방법이 개시된다. 룩업 테이블을 응축하기 위한 방법이 개시된다. 변수의 인라인 변경을 위한 방법이 개시된다.
Description
관련 출원의 상호참조
본 출원은, 그 전체 내용이 참조로 본 명세서에 포함되는, 2014년 8월 12일 출원된 동시계류중인 미국 유틸리티 출원 제14/457,929호와, 2014년 7월 30일 출원된 동시계류중인 미국 가출원 제62/030,913호에 대한 우선권의 이익을 주장한다.
출원의 분야
본 출원은 전반적으로 컴퓨터 비전 처리(computer vision processing)에 관한 것으로, 더 구체적으로는 효율적인 저전력 벡터 프로세서에 관한 것이다.
컴퓨테이셔널 이미징(computational imaging)은, 이미지 및 비디오에 기초한 전례없는 사용자 경험 및 정보를 제공할 수 있는 새로운 이미징 패러다임이다. 예를 들어, 컴퓨테이셔널 이미징은, 이미지 및/또는 비디오를 처리하여 장면의 깊이 맵(depth map)을 제공하고, 장면의 파노라마 뷰를 제공하며, 이미지 및/또는 비디오로부터 얼굴을 추출하고, 이미지 및/또는 비디오로부터 텍스트, 피쳐, 및 메타 데이터를 추출하고, 심지어, 객체 및 장면 인식 피쳐에 기초하여 자동화된 시각적 인식 능력을 제공한다.
컴퓨테이셔널 이미징은 흥미로운 능력을 제공할 수 있지만, 널리 채택되지는 못했다. 컴퓨테이셔널 이미징의 느린 채택은, 컴퓨테이셔널 이미징에는 기본적인 데이터 처리 해결과제가 있다는 사실에 기인할 수 있다. 종종, 이미지 해상도와 비디오 프레임 레이트는 높다. 따라서, 컴퓨테이셔널 이미징은 일반적으로, 특히 저전력 소모시 높은 메모리 대역폭에 의해 성능이 유지 및 백업될 수 있어야 하는 경우, 일반 컴퓨터 프로세서를 이용하여 획득하기에 어려울 수 있는 수백 기가플롭의 컴퓨테이션 자원을 요구한다. 또한, 컴퓨테이셔널 이미징은 일반적으로 레이턴시에 민감하다. 사용자는, 카메라가 물체를 인식하도록 몇 분을 기다릴 가능성이 없으므로, 컴퓨테이셔널 이미징 카메라는 일반적으로 이미지와 비디오를 신속하게 처리할 수 있도록 설계되고, 이것은 컴퓨테이셔널 이미징의 컴퓨테이션 요구사항을 더욱 부담스럽게 한다.
불행히도, 맞춤화된 하드웨어에서 컴퓨테이셔널 이미징 기술을 구현하는 것은 어렵다. 컴퓨테이셔널 이미징 분야는 비교적 초기 단계이기 때문에, 구현 기술은 지속적으로 유동적이다. 따라서, 구현 기술을 변경하려면 전체 하드웨어를 다시 설계해야 하므로 컴퓨테이셔널 이미징을 완전히 하드웨어로 맞춤화하는 것은 어렵다. 따라서, 일반적으로 유연한 하드웨어 아키텍쳐 및 유연한 하드웨어 인프라구조를 제공하는 것이 바람직하다.
동시에, 이러한 비디오 및 이미지 처리에 대한 수요는, 전력 소비가 핵심 고려사항인 휴대형 전자 디바이스, 예를 들어 태블릿 컴퓨터 및 모바일 디바이스로부터 상당히 커지고 있다. 그 결과, 제한된 전력 예산 하에서도 동작할 수 있는 유연한 컴퓨테이셔널 이미징 인프라구조가 일반적으로 필요하다.
개시된 주제에 따르면, 저전력 컴퓨테이셔널 이미징용의 벡터 프로세서를 위한 시스템 및 방법이 제공된다.
개시된 주제는 가변-길이 명령어 버퍼를 관리하기 위한 컴퓨터에 의해 구현되는 방법을 포함하며, 이 방법은 : 제1 참조 위치로부터의 가변-길이 명령어 데이터를 캐싱하는 단계; 제1 시간에 명령어 버퍼에서 이용가능한 미처리된 데이터의 제1 레벨을 디폴트 임계값과 비교하는 단계; 디폴트 임계값을 충족시키지 않는 미처리된 데이터의 제1 레벨에 기초하여 캐싱된 명령어 데이터로부터의 고정된 폭의 데이터를 명령어 버퍼 내에 로드하는 단계; 제1 참조 위치와는 상이한 제2 참조 위치를 참조하는 분기 명령어를 처리하는 단계 ―분기 명령어는 분기 지연 크기를 나타내는 헤더를 포함함―; 분기 명령어가 처리된 후 제2 시간에 명령어 버퍼에서 이용가능한 미처리된 데이터의 제2 레벨을 분기 지연 크기와 비교하는 단계; 및 분기 지연 크기를 충족시키지 않는 미처리된 데이터의 제2 레벨에 기초하여 캐싱된 명령어 데이터로부터의 고정된 폭의 데이터를 버퍼 내에 로드하는 단계를 포함한다.
일부 실시예에서, 이 방법은 버퍼 내의 미처리된 데이터로부터 가변-길이 명령어를 디커플링하고, 디커플링된 명령어를 출력하여, 버퍼 내의 미처리된 데이터의 레벨을 감소시키는 단계를 더 포함할 수 있다. 디커플링된 명령어는 벡터 프로세서에 출력된다.
개시된 주제는 또한, 메모리로부터의 가변-길이 명령어를 저장하기 위한 캐시, 캐시로부터 로드된 데이터를 명령어들로 디커플링하기 위한 버퍼, 및 인출 유닛을 포함하는, 가변-길이 명령어를 관리하기 위한 시스템을 포함한다. 캐시는 특정한 메모리 위치로부터 명령어를 로드하도록 구성된다. 버퍼는 캐시로부터의 고정-폭 데이터 라인을 수신하고 가변-길이 명령어를 출력하도록 구성된다. 인출 유닛은, 버퍼 내의 미처리된 데이터의 레벨을 결정하고; 캐시에게 추가 데이터를 버퍼 내에 로드할 것을 지시하고; 캐시에게 추가 데이터를 버퍼 내에 로드할 것을 지시할 때를 결정하기 위해 제1 시간에 버퍼에서 이용가능한 미처리된 데이터의 제1 레벨을 디폴트 임계값과 비교하고; 시스템이 분기 명령어를 식별한 후에, 분기 명령어 헤더로부터 분기 지연 크기를 결정하고; 캐시에게 추가 데이터를 버퍼 내에 로드할 것을 지시할 때를 결정하기 위해, 시스템이 분기 지연 크기를 식별한 후 제2 시간에 버퍼에서 이용가능한 미처리된 데이터의 제2 레벨을 디폴트 임계값 대신에 분기 지연 크기와 비교하도록 구성된다.
개시된 주제는 또한, 데이터의 하드웨어 처리를 위한 컴퓨터에 의해 구현되는 방법을 포함하며, 이 방법은 : 제1 가변-길이 명령어를 수신하는 단계 ―이 명령어는 수행할 제1 연산을 나타내고 하나 이상의 제1 피연산자를 참조함―;
하나 이상의 제1 피연산자에 대한 제1 데이터 타입을 결정하는 단계; 제1 하드웨어 로직 회로를 이용하여 제1 데이터 타입의 제1 피연산자에 관한 제1 연산을 수행하는 단계; 제2 가변-길이 명령어를 수신하는 단계 ―이 명령어는 제1 연산을 수행할 것을 지시하고 하나 이상의 제2 피연산자를 참조함― ; 하나 이상의 제2 피연산자에 대한 제2 데이터 타입을 결정하는 단계 ―제2 데이터 타입은 제1 데이터 타입과는 상이함―; 및 제1 하드웨어 로직을 이용하여 제2 데이터 타입의 제2 피연산자에 관한 제1 연산을 수행하는 단계를 포함한다. 제1 하드웨어 로직은 복수의 크기들의 피연산자들에 관한 제1 연산을 수행하도록 동작할 수 있다. 제1 하드웨어 로직은, 부동 소수점, 고정 소수점, 정수, 및 스케일링된 정수 데이터 타입들의 피연산자들에 관한 제1 연산을 수행할 수 있다.
개시된 주제는 또한, 연산에 대한 결과 엔트리들의 룩업 테이블을 저장하는 단계 ―룩업 테이블은 미리결정된 정밀도의 분수 결과(fractional result)를 포함하고, 룩업 테이블은, 각각의 엔트리에 대해, 복수의 인코딩된 비트 및 복수의 인코딩되지 않은 비트를 포함함―; 연산을 포함하는 명령어에 응답하여, 룩업 테이블 상의 특정한 값에 대응하는 특정한 엔트리를 검색하는 단계; 분수 결과의 일부를 생성하기 위해 인코딩된 비트를 디코딩하는 단계; 생성된 분수 결과에 적어도 인코딩되지 않은 비트를 추가하는 단계; 및 생성된 분수 결과에 기초하여 연산의 결과를 반환하는 단계를 포함할 수 있는 컴퓨터에 의해 구현되는 방법을 포함한다. 연산은 로그 연산 등의 단항 연산(unitary operation)일 수 있다.
일부 실시예에서, 인코딩된 비트는 분수 결과에서 특정한 자릿수(digit)를 반복하는 횟수를 나타낼 수 있다. 특정한 자릿수는 룩업 테이블 엔트리에 저장될 수 있다. 대안으로서, 특정한 자릿수는 룩업 테이블 엔트리에 저장될 수 없고, 이 방법은 특정한 자릿수를 결정하기 위하여 특정한 값을 임계값과 비교하는 단계를 더 포함할 수 있다.
개시된 주제는 또한, 인라인 벡터 변경(in-line vector alteration)을 위한 컴퓨터에 의해 구현되는 방법을 포함하며, 이 방법은 : 제1 메모리 위치에서 참조된 벡터의 변경된 형태에 관해 수행될 연산을 포함하는 가변-길이 명령어를 수신하는 단계; 가변-길이 명령어에 의해 명시된 변경된 벡터를 생성하는 단계; 및 변경된 벡터에 관한 연산을 수행하는 단계를 포함한다. 연산이 수행된 후, 제1 메모리 위치의 벡터는 그것의 원래의 변경되지 않은 형태로 있다. 이 변경으로서는, 스위즐된(swizzled) 벡터 요소들, 반전된 벡터 요소들, 및/또는 벡터 요소들에 대한 치환 값들이 포함될 수 있다. 적어도 하나의 벡터 요소는 스위즐 및 반전 둘 다 될 수 있다.
또 다른 실시예에 따르면, 적어도 하나의 프로세서 판독가능한 저장 매체 및 이 적어도 하나의 매체 상에 저장된 명령어들을 포함하는 제품이 개시된다. 명령어들은 적어도 하나의 프로세서에 의해 적어도 하나의 매체로부터 판독가능하도록 구성될 수 있고, 이에 의해 적어도 하나의 프로세서로 하여금 상기 실시예들 중 임의의 실시예의 단계들 중 임의의 단계 및 모든 단계를 수행하도록 동작하게 할 수 있다.
또 다른 실시예에 따르면, 이 기술들은 네트워크에 통신가능하게 결합된 하나 이상의 프로세서를 포함하는 시스템으로서 실현될 수 있고; 여기서, 하나 이상의 프로세서는 상기 실시예들 중 임의의 것에 관하여 설명된 단계들 중 임의의 단계 및 모든 단계를 수행하도록 구성된다.
본 발명이 이제 첨부된 도면들에 도시된 바와 같이 그 특정한 실시예들을 참조하여 더 상세히 설명될 것이다. 본 개시내용이 이하에서 특정한 실시예를 참조하여 설명되지만, 본 개시내용은 이것으로 제한되지 않는다는 것을 이해해야 한다. 여기서의 교시에 접근하는 본 기술분야의 통상의 기술자라면, 추가적 구현, 변형 및 실시예뿐만 아니라, 여기서 설명된 본 개시내용의 범위 내에 있고 본 개시내용이 중요한 유용성을 가질 수 있는 다른 사용 분야들을 인지할 것이다.
개시된 주제의 다양한 목적, 피쳐, 및 이점들은, 유사한 참조 번호가 유사한 요소를 식별하는 이하의 도면들과 연계하여 개시된 주제의 이하의 상세한 설명을 참조하면 더욱 충분히 이해될 수 있다. 첨부된 도면들은 개략도이며 축척비율대로 그려진 것은 아니다. 명료성을 위해, 모든 도면에서 모든 컴포넌트가 라벨링되지는 않았다. 또한, 본 기술분야의 통상의 기술자가 개시된 주제를 이해할 수 있도록 하기 위해 예시가 필요한 것이 아닌 경우에는 개시된 주제의 각각의 실시예의 모든 컴포넌트가 도시된 것은 아니다.
도 1은 일부 실시예에 따른 컴퓨팅 디바이스의 고레벨 예시를 제공한다.
도 2는 일부 실시예에 따른 컴퓨팅 디바이스의 상세한 예시를 나타낸다.
도 3은 일부 실시예에 따른 벡터 프로세서를 나타낸다.
도 4는 일부 실시예에 따른 3개의 상이한 가변-길이 명령어 헤더들을 맵핑한다.
도 5는 일부 실시예에 따른 명령어 버퍼 관리를 위한 시스템을 나타내는 블록도이다.
도 6은 일부 실시예에 따른 3개의 상이한 기능 유닛 명령어들을 맵핑한다.
도 7은 일부 실시예에 따른 버퍼 관리를 위한 방법을 나타내는 플로차트이다.
도 8은 일부 실시예에 따른 기능 유닛 명령어를 맵핑한다.
도 9는 일부 실시예에 따른 동작의 범용 하드웨어 실행을 위한 방법을 나타내는 플로차트이다.
도 10은 일부 실시예에 따른 압축된 룩업 테이블의 엔트리들을 나타내는 차트이다.
도 11은 일부 실시예에 따른 압축된 룩업 테이블을 이용하기 위한 방법을 나타내는 플로차트이다.
도 12는 스위즐 명령어를 맵핑하고 벡터에 관한 명령어를 나타낸다.
도 13은 일부 실시예에 따른 인라인 벡터 변경을 위한 방법을 나타내는 플로차트이다.
도 14는 일부 실시예에 따른 컴퓨팅 디바이스를 포함하는 전자 디바이스를 나타낸다.
도 1은 일부 실시예에 따른 컴퓨팅 디바이스의 고레벨 예시를 제공한다.
도 2는 일부 실시예에 따른 컴퓨팅 디바이스의 상세한 예시를 나타낸다.
도 3은 일부 실시예에 따른 벡터 프로세서를 나타낸다.
도 4는 일부 실시예에 따른 3개의 상이한 가변-길이 명령어 헤더들을 맵핑한다.
도 5는 일부 실시예에 따른 명령어 버퍼 관리를 위한 시스템을 나타내는 블록도이다.
도 6은 일부 실시예에 따른 3개의 상이한 기능 유닛 명령어들을 맵핑한다.
도 7은 일부 실시예에 따른 버퍼 관리를 위한 방법을 나타내는 플로차트이다.
도 8은 일부 실시예에 따른 기능 유닛 명령어를 맵핑한다.
도 9는 일부 실시예에 따른 동작의 범용 하드웨어 실행을 위한 방법을 나타내는 플로차트이다.
도 10은 일부 실시예에 따른 압축된 룩업 테이블의 엔트리들을 나타내는 차트이다.
도 11은 일부 실시예에 따른 압축된 룩업 테이블을 이용하기 위한 방법을 나타내는 플로차트이다.
도 12는 스위즐 명령어를 맵핑하고 벡터에 관한 명령어를 나타낸다.
도 13은 일부 실시예에 따른 인라인 벡터 변경을 위한 방법을 나타내는 플로차트이다.
도 14는 일부 실시예에 따른 컴퓨팅 디바이스를 포함하는 전자 디바이스를 나타낸다.
벡터 엔진 아키텍쳐
이하의 설명에서, 개시된 주제의 철저한 이해를 제공하기 위하여, 개시된 주제의 시스템 및 방법과, 이러한 시스템 및 방법이 동작할 수 있는 환경 등에 관하여 수 많은 특정한 상세사항이 개시된다. 그러나, 본 기술분야의 통상의 기술자라면, 개시된 주제가 이러한 특정한 상세사항 없이도 실시될 수 있고, 본 기술분야의 널리 공지되어 있는 소정의 피쳐들은 개시된 주제의 복잡성을 피하기 위하여 상세히 설명되지 않는다는 것이 명백할 것이다. 또한, 이하에 제공되는 예들은 예시적인 것이며, 개시된 주제의 범위 내에 있는 다른 시스템 및 방법들이 있다고 여겨진다.
컴퓨테이셔널 이미징은 머신이 물리적 세계를 포착하고 상호작용하는 방식을 변형시킬 수 있다. 예를 들어, 컴퓨테이셔널 이미징을 통해, 머신은 전통적인 이미징 기술을 이용하여 캡처하기가 매우 어려웠던 이미지를 포착할 수 있다. 또 다른 예로서, 컴퓨테이셔널 이미징을 통해, 머신은 주변을 이해하고 주변 환경에 따라 반응할 수 있다.
컴퓨테이셔널 이미징을 대중 시장에 가져 오는 문제점들 중 하나는, 컴퓨테이셔널 이미징이 본질적으로 컴퓨테이션적으로 비싸다는 것이다. 컴퓨테이셔널 이미징은 종종, 고해상도의 많은 수의 이미지를 이용하거나 및/또는 높은 프레임 레이트를 갖는 많은 수의 비디오를 이용한다. 따라서, 컴퓨테이셔널 이미징은 종종 강력한 컴퓨팅 플랫폼을 지원할 필요가 있다. 또한, 컴퓨테이셔널 이미징은 종종, 예를 들어, 스마트 폰이나 태블릿 컴퓨터를 이용하여 모바일 설정에서 이용되기 때문에, 컴퓨팅 이미징은 종종, 저전력 예산에서 동작할 수 있는 강력한 컴퓨팅 플랫폼을 지원할 필요가 있다.
본 출원은, 컴퓨테이셔널 이미징을 위한 저전력, 고성능 컴퓨팅 플랫폼을 제공할 수 있는 컴퓨팅 디바이스를 개시하며, 플랫폼의 능력에 기여할 수 있는 벡터 프로세서의 특정한 피쳐를 식별한다. 도 1은 일부 실시예에 따른 컴퓨팅 디바이스의 고레벨 예시를 제공한다. 컴퓨팅 디바이스(100)는, 하나 이상의 처리 유닛, 예를 들어, 하나 이상의 벡터 프로세서(102) 및 하나 이상의 하드웨어 가속기(104), 지능형 메모리 패브릭(106), 주변 디바이스(108), 및 전력 관리 모듈(110)를 포함할 수 있다.
하나 이상의 벡터 프로세서(102)는, 벡터라고 불리는 데이터의 어레이에 관해 연산하는 명령어들을 포함하는 명령어 세트를 구현하는 중앙 처리 유닛(CPU)을 포함한다. 더 구체적으로는, 하나 이상의 벡터 프로세서(102)는 대량의 데이터에 관해 일반적인 산술 연산을 동시에 수행하도록 구성될 수 있다. 일부 실시예에서, 하나 이상의 벡터 프로세서(102)는, 단일 명령어 다중 데이터, 매우 긴 명령어 워드(SIMD-VLIW; single instruction multiple data, very long instruction word) 프로세서를 포함할 수 있다. 일부 실시예에서, 하나 이상의 벡터 프로세서(102)는 컴퓨터 비전 및 이미징 애플리케이션과 연관된 명령어들을 실행하도록 설계될 수 있다.
하나 이상의 하드웨어 가속기(104)는, 더욱 범용적인 CPU 상에서 실행되는 소프트웨어에서 가능한 것보다 빠르게 일부 기능을 수행하는 컴퓨터 하드웨어를 포함한다. 비-시각 애플리케이션의 하드웨어 가속기의 예로서는, 래스터 오퍼레이터를 이용하여 수 개의 비트 맵을 하나로 결합하도록 구성된 그래픽 처리 유닛(GPU) 내의 블리팅 가속 모듈(blitting acceleration module)이 포함된다.
일부 실시예에서, 하나 이상의 하드웨어 가속기(104)는, 이미지 처리 및 컴퓨터 비전 애플리케이션에 맞추어진 구성가능한 인프라구조를 제공할 수 있다. 하드웨어 가속기(104)는, 애플리케이션-특유의 컴퓨테이션 코어를 둘러싸는 이미지 처리 및 컴퓨터 비전 동작을 가속하기 위한 일반 래퍼 하드웨어(wrapper hardware)를 포함하는 것으로 간주될 수 있다. 예를 들어, 하드웨어 가속기(104)는 이미지 필터링 연산을 수행하기 위한 전용 필터링 모듈을 포함할 수 있다. 필터링 모듈은 효율적인 방식으로 이미지에 관해 맞춤화된 필터 커널을 동작시키도록 구성될 수 있다. 일부 실시예에서, 하드웨어 가속기(104)는, 클록 사이클 당 하나의 완전히 계산된 출력 픽셀을 출력할 수 있다.
지능형 메모리 패브릭(106)은, 작은 레이턴시를 갖는 저전력 메모리 시스템을 제공하도록 구성될 수 있다. 이미지와 비디오는 많은 양의 데이터를 포함하기 때문에, 메모리와 처리 유닛 사이에 고속 인터페이스를 제공하는 것이 중요하다. 일부 실시예에서, 지능형 메모리 패브릭(106)은, 예를 들어, 64 블록의 메모리를 포함할 수 있고, 블록들 각각은 64 비트 인터페이스를 포함할 수 있다. 이러한 실시예에서, 예를 들어, 600MHz에서 동작하는 메모리 패브릭(106)은 307.2 GB/sec의 속도로 데이터를 전송할 수 있다. 다른 실시예에서, 지능형 메모리 패브릭(106)은 기타의 임의의 개수의 메모리 블록을 포함할 수 있고, 메모리 블록들 각각은 하나 이상의 인터페이스 프로토콜을 구현하는 임의의 개수의 인터페이스를 포함할 수 있다.
주변 디바이스(108)는, 이미지 센서 및 가속도계 등의 외부 디바이스로/로부터 데이터 비트를 전송 및 수신하기 위한 통신 채널을 제공하도록 구성될 수 있다. 주변 디바이스(108)는, 벡터 프로세서(102), 하드웨어 가속기(104), 및 메모리 패브릭(106)이 외부 디바이스와 통신하기 위한 통신 메커니즘을 제공할 수 있다.
전력 관리 모듈(110)은 컴퓨팅 디바이스(100) 내의 지정된 블록의 활동을 제어하도록 구성될 수 있다. 더 구체적으로는, 전력 관리 모듈(110)은, 컴퓨팅 디바이스(100) 내에서 전력 아일랜드(power island)라고도 지칭되는, 지정된 블록들의 전원 전압을 제어하도록 구성될 수 있다. 예를 들어, 전력 관리 모듈(110)이 전력 아일랜드의 전원을 인에이블 할 때, 컴퓨팅 디바이스(100)는 적절한 전원 전압을 전력 아일랜드에 제공하도록 트리거될 수 있다. 일부 실시예에서, 각각의 전력 아일랜드는 독립적인 전력 도메인을 포함할 수 있다. 따라서, 전력 아일랜드의 전원은 독립적으로 제어될 수 있다. 일부 실시예에서, 전력 관리 모듈(110)은 또한, 컴퓨팅 디바이스(100)의 하나 이상의 입력/출력 핀을 통해 컴퓨팅 디바이스(100)에 외부적으로 부착된 전력 아일랜드의 활동을 제어하도록 구성될 수 있다.
도 2는 일부 실시예에 따른 컴퓨팅 디바이스의 상세한 예시를 나타낸다. 컴퓨팅 디바이스(100)는 복수의 벡터 프로세서(102)를 포함할 수 있다. 이 예시에서, 컴퓨팅 디바이스(100)는 12개의 벡터 프로세서(102)를 포함한다. 벡터 프로세서(102)는 프로세서간 인터커넥트(IPI; inter-processor interconnect)(202)를 통해 서로 통신할 수 있다. 벡터 프로세서(102)는, IPI(202) 및 가속기 메모리 제어기(AMC; Accelerator Memory Controller) 크로스바(204) 또는 메모리-맵핑된 프로세서 버스(208)를 통해, 메모리 패브릭(106) 및/또는 하드웨어 가속기(104)를 포함하는 컴퓨팅 디바이스(100) 내의 다른 컴포넌트들과도 통신할 수 있다.
일부 실시예에서, 하나 이상의 벡터 프로세서(102)는 전용 명령어 세트를 실행하도록 설계될 수 있다. 전용 명령어 세트는 전용 명령어를 포함할 수 있다. 전용 명령어는, 명령어 헤더 및 하나 이상의 유닛 명령어를 포함하는 가변 길이 2진 문자열일 수 있다. 명령어 헤더는, 연관된 전용 명령어에 대한 명령어 길이 및 활성 유닛에 대한 정보를 포함할 수 있다; 유닛 명령어는 고정된 또는 가변적인 필드 개수를 포함하는 가변 길이 2진 문자열일 수 있다. 유닛 명령어의 필드는, 명령어를 식별하는 opcode(연산코드)와 유닛 명령어 실행에서 값 이용을 명시하는 피연산자(operand)를 포함할 수 있다.
컴퓨팅 디바이스(100)는 하드웨어 가속기(104)를 포함할 수 있다. 하드웨어 가속기(104)는 미리정의된 처리 기능을 수행하도록 구성된 다양한 가속기 모듈을 포함할 수 있다. 일부 실시예에서, 미리정의된 처리 기능은 필터링 연산을 포함할 수 있다. 예를 들어, 하드웨어 가속기(104)는, 원시 이미지 처리 모듈, 렌즈 음영 보정(LSC; lens shading correction) 모듈, 베이어 패턴 디모자이킹 모듈(bayer pattern demosaicing module), 샤픈 필터 모듈(sharpen filter module), 다상 스케일러 모듈, 해리스 코너 검출 모듈(Harris corner detection module), 컬러 조합 모듈 , 루마 채널 노이즈제거 모듈(luma channel denoise module), 크로마 채널 노이즈제거 모듈(chroma channel denoise module), 메디언 필터 모듈(median filter module), 룩업 테이블, 콘볼루션 모듈, 엣지 검출 모듈, 및/또는 기타 임의의 적절한 모듈 또는 모듈들의 조합을 포함할 수 있다. 하드웨어 가속기(104)는 메모리 패브릭(106)에 존재하는 메모리 디바이스 내의 데이터를 회수 및 저장하도록 구성될 수 있다.
메모리 패브릭(106)은, 컴퓨팅 디바이스(100) 내의 메모리 동작을 조율하는 중앙 메모리 시스템을 포함할 수 있다. 메모리 패브릭(106)은, 벡터 프로세서(102) 및 하드웨어 가속기(104) 등의, 처리 유닛들 사이의 불필요한 데이터 전송을 감소시키도록 설계될 수 있다. 메모리 패브릭(106)은, 복수의 처리 유닛이 정지없이 데이터 및 프로그램 코드 메모리에 병렬로 액세스하는 것을 허용하도록 구성된다. 추가로, 메모리 패브릭(106)은, AXI(Advanced extensible interface) 또는 기타 임의의 적절한 버스(208) 등의 병렬 버스를 통해 호스트 프로세서가 메모리 패브릭(106) 내의 메모리 시스템에 액세스하기 위한 대책을 제공할 수 있다.
일부 실시예에서, 처리 유닛은 그 로드-저장 유닛(LSU; load-store unit) 포트를 통해 사이클당 최대 128 비트를 판독/기입할 수 있고, 그 명령어 포트를 통해 사이클당 최대 128 비트 프로그램 코드를 판독할 수 있다. 각각 프로세서(102) 및 하드웨어 가속기(104)에 대한 IPI(202) 및 AMC(204) 인터페이스에 추가하여, 메모리 패브릭(106)은 AMBA(Advanced Microcontroller Bus Architecture) 고성능 버스(AHB) 및 AXI 버스 인터페이스를 통해 메모리 시스템으로의 동시 판독/기입 액세스를 제공할 수 있다. AHB 및 AXI는, 처리 유닛, 메모리 시스템, 및 주변 디바이스가 공유 버스 인프라구조를 이용하여 접속되는 것을 허용하는 표준 병렬 인터페이스 버스이다. 기타 임의의 적절한 버스도 이용될 수 있다. 일부 실시예에서, 메모리 패브릭(106)은 클록 사이클당 18 x 128-비트 메모리 액세스의 피크를 처리하도록 구성될 수 있다. 다른 실시예에서, 메모리 패브릭(106)은 많은 수의 비트를 갖는 고속 인터페이스를 이용하여 클록 사이클당 임의의 개수의 메모리 액세스를 처리하도록 설계될 수 있다.
메모리 패브릭(106) 내의 메모리 시스템은 복수의 메모리 슬라이스를 포함할 수 있고, 각각의 메모리 슬라이스는 벡터 프로세서(102)들 중 하나와 연관되고 다른 벡터 프로세서(102)들에 비해 그 프로세서에게 우선적인 액세스를 제공한다. 각각의 메모리 슬라이스는 복수의 랜덤 액세스 메모리(RAM) 타일을 포함할 수 있고, 여기서, 각각의 RAM 타일은 판독 포트 및 기입 포트를 포함할 수 있다. 일부 경우에, 각각의 메모리 슬라이스에는, 관련된 메모리 슬라이스로의 액세스를 제공하기 위한 메모리 슬라이스 제어기가 제공될 수 있다.
프로세서들 및 RAM 타일들은, IPI(202)라고도 하는 버스를 통해 서로 결합될 수 있다. 일부 경우에, IPI(202)는 벡터 프로세서(202) 중 임의의 것을 메모리 패브릭(106) 내의 메모리 슬라이스들 중 임의의 것과 결합시킬 수 있다. 적합하게는, 각각의 RAM 타일은 타일로의 액세스를 허가하기 위한 타일 제어 로직 블록을 포함할 수 있다. 타일 제어 로직 블록은 때때로 타일 제어 로직 또는 중재 블록이라 불린다.
일부 실시예에서, 각각의 메모리 슬라이스는 복수의 RAM 타일 또는 물리적 RAM 블록을 포함할 수 있다. 예를 들어, 128kB의 크기를 갖는 메모리 슬라이스는, 4k x 32-비트 워드들로서 구성된 4개의 32kB 단일-포트형 RAM 타일(예를 들어, 물리적 RAM 요소)을 포함할 수 있다. 또 다른 예로서, 256kB의 크기를 갖는 메모리 슬라이스는, 8k × 32-비트 워드들로서 구성된 8개의 32kB 단일-포트형 RAM 타일(예를 들어, 물리적 RAM 요소)을 포함할 수 있다. 일부 실시예에서, 메모리 슬라이스는, 16kB 만큼 낮고 16MB 만큼 높은 용량을 가질 수 있다. 다른 실시예에서, 메모리 슬라이스는, 컴퓨팅 디바이스에 의해 처리되는 다양한 애플리케이션을 수용하기 위해 필요한 만큼의 용량을 갖도록 구성될 수 있다.
일부 실시예에서, RAM 타일은, 단일 포트형 상보성 금속 산화물 반도체(CMOS) RAM을 포함할 수 있다. 단일 포트형 CMOS RAM의 이점은, 대부분의 반도체 공정에서 일반적으로 이용가능하다는 것이다. 다른 실시예에서, RAM 타일은 멀티-포트형 CMOS RAM을 포함할 수 있다. 일부 실시예에서, 각각의 RAM 타일은, 16 비트 폭, 32 비트 폭, 64 비트 폭, 128 비트 폭이거나, 컴퓨팅 디바이스의 특정 애플리케이션에 의해 필요한 만큼 넓을 수 있다.
단일 포트형 메모리 디바이스의 이용은, 메모리 서브시스템의 전력 및 면적 효율을 증가시키지만 메모리 시스템의 대역폭을 제한할 수 있다. 일부 실시예에서, 메모리 패브릭(106)은, 이들 메모리 디바이스들이, 복수의 소스(프로세서 및 하드웨어 블록)로부터의 복수의 동시 판독 및 기입 요청을 서비스할 수 있는 가상 멀티포트형 메모리 서브 시스템으로서 동작하는 것을 허용하도록 설계될 수 있다. 이것은, 복수의 물리적 RAM 인스턴스를 이용하고 이들로의 중재된 액세스를 제공해 복수의 소스를 서비스함으로써 수행할 수 있다.
일부 실시예에서, 각각의 RAM 타일은 타일 제어 로직과 연관될 수 있다. 타일 제어 로직은, 벡터 프로세서(102) 또는 하드웨어 가속기(104)로부터 요청을 수신하고, 연관된 RAM 타일의 개개의 판독 및 기입 포트로의 액세스를 제공하도록 구성된다. 예를 들어, 벡터 프로세서(102)가 RAM 타일 내의 데이터에 액세스할 준비가 되면, 벡터 프로세서(102)가 메모리 데이터 요청을 RAM 타일에 직접 전송하기 전에, 벡터 프로세서(102)는 메모리 액세스 요청을 RAM 타일과 연관된 타일 제어 로직에 전송할 수 있다. 메모리 액세스 요청은, 처리 요소에 의해 요청된 데이터의 메모리 주소를 포함할 수 있다. 후속해서, 타일 제어 로직은, 메모리 액세스 요청을 분석하고 벡터 프로세서(102)가 요청된 RAM 타일에 액세스할 수 있는지를 결정할 수 있다. 벡터 프로세서(102)가 요청된 RAM 타일에 액세스할 수 있다면, 타일 제어 로직은 액세스 허가 메시지를 벡터 프로세서(102)에 전송할 수 있고, 후속해서, 벡터 프로세서(102)는 메모리 데이터 요청을 RAM 타일에 전송할 수 있다.
일부 실시예에서, 타일 제어 로직은, 많은 처리 유닛(예를 들어, 벡터 프로세서들 및 하드웨어 가속기들)이 동일한 RAM 타일에 액세스하는 순서를 결정하고 집행하도록 구성될 수 있다. 예를 들어, 타일 제어 로직은, 2개 이상의 처리 유닛이 RAM 타일에 동시에 액세스하려고 시도하는 순간을 검출하도록 구성된 충돌 검출기를 포함할 수 있다. 충돌 검출기는 액세스 충돌이 발생했고 액세스 충돌이 해결되어야 한다는 것을 런타임 스케쥴러(runtime scheduler)에 보고하도록 구성될 수 있다.
메모리 패브릭(106)은 또한, 메모리로부터 벡터 프로세서(102) 또는 하드웨어 가속기(104)로, 또는 벡터 프로세서(102) 또는 하드웨어 가속기(104)로부터 메모리로, 데이터 비트를 전송하기 위한 메모리 버스를 포함할 수 있다. 메모리 패브릭(106)은 또한, 벡터 프로세서(102), 하드웨어 가속기(104), 및 메모리 사이의 데이터 전송을 조율하는 직접 메모리 액세스(DMA) 제어기를 포함할 수 있다.
주변 디바이스(108)는, 복수의 이종 이미지 센서 및 가속도계 등의 외부 디바이스로/로부터 데이터 비트를 전송 및 수신하기 위한 통신 채널을 제공하도록 구성될 수 있다. 주변 디바이스(108)는, 벡터 프로세서(102), 하드웨어 가속기(104), 및 메모리 패브릭(106)이 외부 디바이스와 통신하기 위한 통신 메커니즘을 제공할 수 있다.
전통적으로, 주변 디바이스의 기능은 고정되고 하드-코딩되었다.
예를 들어, 모바일 산업 프로세서 인터페이스(MIPI) 주변기기들은, SPI, I2C, I2S 또는 기타 임의의 적절한 표준 등의 저속 디지털 인터페이스를 역시 구현하는 외부 디바이스와만 인터페이스할 수 있었다.
그러나, 본 개시내용의 일부 실시예에서, 주변 디바이스(108)의 기능은 소프트웨어를 이용하여 정의될 수 있다. 더 구체적으로는, 주변 디바이스(108)는, SPI, I2C, I2S 또는 기타 임의의 적절한 프로토콜 등의, 표준화된 인터페이스 프로토콜의 기능을 에뮬레이트할 수 있는 에뮬레이션 모듈을 포함할 수 있다.
전력 관리 모듈(110)은, 컴퓨팅 디바이스(100) 내의 블록들의 활동을 제어하도록 구성된다. 더 구체적으로는, 전력 관리 모듈(110)은, 전력 아일랜드라고도 지칭되는, 지정된 블록의 전원 전압을 제어하도록 구성된다. 예를 들어, 전력 관리 모듈(110)이 전력 아일랜드의 전원을 인에이블 할 때, 컴퓨팅 디바이스(100)는 적절한 전원 전압을 전력 아일랜드에 제공하도록 구성된다. 전력 관리 모듈(110)은, 레지스터에서 또는 버스 상의 신호 라인 상에서 인에이블 신호를 인가함으로써 전력 아일랜드의 전원을 인에이블하도록 구성될 수 있다. 일부 실시예에서, 전력 관리 모듈(110)은 또한, 컴퓨팅 디바이스(100)의 하나 이상의 입력/출력 핀을 통해 외부 디바이스의 활동을 제어하도록 구성될 수 있다.
일부 실시예에서, 전력 아일랜드는 항상 전원이 켜져 있을 수 있다(예를 들어, 전원 전압은 항상 전력 아일랜드에 제공된다). 이러한 전력 아일랜드는, 상시-온 상태의 전력 아일랜드(always-on power island)라고 할 수 있다. 일부 실시예에서, 항시 온-상태의 전력 아일랜드는, 예를 들어 범용 입력-출력(GPIO) 핀, 외부 인터페이스, 및/또는 저주파수 타이머 등의 내부 기능 블록들로부터의 신호들 또는 파워-온 리셋을 모니터링하는데 이용될 수 있다. 이러한 방식으로, 컴퓨팅 디바이스(100)는 이벤트 또는 이벤트 시퀀스에 응답할 수 있고, 이벤트 또는 이벤트 시퀀스에 응답하는데 필요한 전력-아일랜드만을 적응적으로 파워-업할 수 있다.
하드웨어 가속기(104), 메모리 패브릭(106), 주변 디바이스(108), 및 전력 관리 모듈(110)에 관한 추가 상세사항은, 변리사 도켓 번호 2209599.125US2에 의해 식별되는, 발명의 명칭이 "LOW POWER COMPUTATIONAL IMAGING"인 미국 특허 출원 번호 TBD, 및 변리사 도켓 번호 2209599.125US3에 의해 식별되는, 발명의 명칭이 "APPARATUS, SYSTEMS, AND METHODS FOR LOW POWER COMPUTATIONAL IMAGING"인 미국 특허 출원 번호 TBD에서 제공된다. 이들 출원들 양쪽 모두는 본 명세서와 동일한 날에 출원되었고, 그 전체가 참조로 본 명세서에 포함된다.
도 3은 본 개시내용의 구현에 따른 벡터 프로세서를 포함하는 컴퓨터 비전 시스템 아키텍쳐의 추가 상세사항을 도시한다. 예시된 실시예에서 그래픽 처리 시스템의 메모리 및 회로 컴포넌트와 통신하는 스트리밍 하이브리드 아키텍쳐 벡터 엔진(SHAVE) 프로세서(300)가 개시되어 있다. SHAVE 프로세서(300)는, 여기서 더 설명되는 다양한 하드웨어 로직에 의해 실시간으로 컴퓨터 비전 계산을 수행하도록 구성된 전문화된 그래픽 프로세서이다. 도 3에 나타낸 프로세서(300) 외부의 컴포넌트들은, 고속 메모리 자원을 제공하는 레벨 2(L2) 캐시(350), 레벨 1 캐싱 및 장기간 메모리를 위한 스태틱 RAM(SRAM)(354), 적층-다이 ASIC 주문형 집적 회로(ASIC) 팩키지(362), 및 ASIC과 메모리 컴포넌트 사이의 인터페이스를 위한 더블 데이터 레이트(DDR) 제어기(358)를 포함한다.
프로세서(300)는, 여기서 나타낸 실시예에서, 8개의 기능 유닛(302a-h)을 갖는 가변-길이 명령어 시스템을 집합적으로 가능하게 하는 다수의 하드웨어 컴포넌트를 포함한다. 이 구현에서 이용되는 기능 유닛들(302a-h) 각각은 이하에서 더 설명된다.
기능 유닛(302)은, 각각의 기능 유닛과 연관된 명령어 및 이들 자원에 대한 그 유닛의 전형적인 필요성에 기초하여, 프로세서(300)의 내부 및 외부 양쪽 모두의 메모리 내의 상이한 위치들에 대한 다양한 포트를 갖는다. 더 구체적으로는, 일부 구현에서, 유닛(302)은, 2개의 범용 레지스트리 파일 : 벡터 레지스트리 파일(VRF)(304) 또는 정수 레지스트리 파일(IRF)(306)에 대한 포트를 포함한다.
벡터 레지스트리 파일(304)은, 512 바이트(32 × 128 비트 워드)의 고속 액세스 범용 스토리지를 제공한다. 이것은, 상이한 유닛 명령어의 변수에 할당되는 포트 세트를 통해 병렬로 최대 6개의 판독 및 6개의 기입 액세스를 지원한다. 이것은, 상이한 명령어들을 실행하는 2개의 기능 유닛이 동일한 포트에 할당되는 경우 소정의 연산이 병렬로 수행되는 것을 제약할 수 있다.
유사하게, 정수 레지스트리 파일(306)은 128 바이트(32 × 32-비트 워드)의 고속 액세스 범용 스토리지를 제공한다. 이것은 기능 유닛에 할당된 포트 세트를 통해 병렬로 최대 12개의 판독 및 6개의 기입 액세스를 지원한다; 이것은 또한, 소정 명령어의 능력이 병렬로 수행되는 것을 제한한다.
통상의 기술자라면, 이용가능한 액세스 포트와 함께 레지스트리 파일들(304, 306) 각각의 크기 및 구성이 맞춤화될 수 있으며, 여기서 주어진 값들은 예시적인 것임을 알 수 있을 것이다. 예를 들어, 또 다른 구현에서, 2개가 아닌 3개의 레지스트리 파일이 이용될 수 있다. 액세스 포트의 수 및 우선 순위는 본 기술분야의 통상의 기술자에 의해 유사하게 선택될 수 있다.
이제 8개의 기능 유닛들 각각의 간략한 요약이, 메모리가 액세스하는 포트 및 관련 기능의 하나 이상의 예에 대한 설명과 함께 주어진다. 여기서 논의된 실시예들은 이들 8개의 기능 유닛을 이용하지만, 본 개시내용의 양태에 따라 더 많거나 더 적은 수의 기능 유닛이 구현될 수 있다는 것을 이해할 것이다.
예측 평가 유닛(PEU)(302a)은, "if, then, else" 명령 등의, 논리적 서술어를 갖는 조건적 명령(command)을 평가하기 위한 로직을 포함한다. PEU 명령어는 일반적으로 선행물에 대한 비교 명령어(CMU)와, 서술어에 대한 하나 이상의 다른 명령어(VAU, SAU, IAU, BRU 등)를 포함한다. PEU 자체에는 레지스트리 파일에 대한 판독 또는 기입 포트가 할당되지 않는다.
분기 유닛(Branch Unit : BRU)(302b)은, 명령어들의 상이한 부분으로 점핑하고, 명령어들을 루핑하고, 마지막 명령어를 반복하기 위한 다양한 명령어들을 포함한다. BRU에는, 분기 명령어와 연관된 주소에 주로 이용되는, IRF에 대한 2개의 판독 포트와 1개의 기입 포트가 할당된다.
로드-저장 유닛 0 및 1(LSU0 및 LSU1)(302c 및 302d) 각각은 메모리에 및 메모리로부터 데이터를 로드하기 위한 다양한 명령어를 포함한다. 즉각적 로드, 변위 로드, 인덱싱형 로드 및 저장 등의 다양한 특정한 연산이 LSU 기능 유닛 하에서 실행된다. LSU 기능 유닛은 또한, 후술되는 바와 같이 벡터 요소들의 인-라인(in-line) 스위즐을 허용하는 복수의 명령을 포함한다. LSU0 및 LSU1 각각은, IRF에 대한 3개의 판독 포트 및 2개의 기입 포트와, VRF에 대한 1개의 판독 포트 및 1개의 기입 포트로의 액세스를 포함한다. 또한, LSU0 및 LSU1 각각은 SRAM(354)과 연관된 판독 및 기입 포트로의 액세스를 포함한다.
정수 산술 유닛(Integer Arithmetic Unit; IAU)(302e)은 비트들을 정수로서 취급하는 산술 연산을 실행하기 위한 명령어들을 포함한다. IAU에는, IRF에 대한 3개의 판독 포트와 1개의 기입 포트가 할당되어, 정수 산술연산을 실행하기 위한 최대 3개의 값들을 판독하고 정수 결과를 기입하는 것을 허용한다.
스칼라 산술 유닛(SAU)(302f)은, 필요하다면, 단일의 32-비트 값, 2개의 16-비트 값, 또는 4개의 8-비트 값으로 판독될 수 있는, 32-비트 결과를 주는 (덧셈, 뺄셈 및 스칼라 곱셈 등의) 산술 연산을 실행하기 위한 명령어를 포함한다. SAU는 스칼라 값을 야기하는 벡터 합산 연산을 포함한다. SAU 연산은, 일부 구현에서는 부동 소수점 및 고정 소수점 10진수, 정수 및 스케일링된 정수를 포함한, 값들에 대한 다양한 포맷을 수용한다. SAU에는 IRF에 대한 2개의 판독 포트와 1개의 기입 포트가 할당된다. 이것에는 또한, 벡터 값에 관한 스칼라 연산을 수용하기 위해 VRF에 대한 1개의 판독 포트가 할당된다.
벡터 산술 유닛(VAU)(302g)은, 최대 4개의 32비트 결과까지의, 벡터를 야기하는 연산을 실행하기 위한 명령어를 포함한다. 4개의 32-비트 영역은, 32-비트 요소의 4-벡터, 16-비트 요소의 8-벡터, 또는 8-비트 요소의 16-벡터로서 판독될 수 있다. VAU 연산은, 외적(cross-multiplication), 요소 평균화, 강제 포화점(saturation points) 등의, 시각적 처리에 통상적으로 이용되는 다양한 표준 행렬 연산자를 포함한다. VAU에는 VRF에 대한 2개의 판독 포트와 1개의 기입 포트가 할당된다.
비교 유닛(CMU)(302h)은, 등가 관계 및 (보다 큼, 보다 작음, 같음, 데이터 타입 비교 등) 다른 테스트 등의, 비교 연산을 실행하기 위한 명령어를 포함한다. CMU는 또한, 데이터 타입 포맷 변환을 수행하고 IRF와 VRF 사이에서 데이터를 이동시킬 수 있다. CMU 명령어는, 상이한 부수적 상황들에 대한 코드를 생성하기 위해 PEU 명령어와 함께 종종 이용되며, "if/then" 명령어는 조건부 명령어로 진행할지를 결정하기 위하여 하나 이상의 CMU 테스트의 결과에 의존한다. CMU에는, IRF에 대한 3개의 판독 포트와 2개의 기입 포트 뿐만 아니라, VRF에 대한 4개의 판독 포트와 4개의 기입 포트가 할당된다. 이것은, CMU가, 16-요소 벡터 비교를 포함한, 시스템에 의해 등록된 임의의 값에 관한 비교 연산을 수행하는 것을 허용한다.
전체적으로, 8개의 기능 유닛은 192 비트만큼의 가변-길이 프로세서 명령어를 허용한다. 각각의 프로세서 명령어는, 명령어 헤더와 0 내지 8개의 유닛 명령어를 포함하는 가변-길이 2진 문자열이다.
명령어 헤더는, 프로세서 명령어의 일부로서 병렬로 수행되어야 하는 유닛 명령어들의 각각의 비트 길이를 포함한, 프로세서 명령어의 전체 길이를 결정하기에 충분한 정보를 제공한다. 이것은, 기능 유닛들 각각을 가능한 최대 3개의 비트 크기로 제한함으로써 실행된다(그러나, 다른 구현은 더 긴 헤더를 이용하여 추가적인 상이한 비트 크기를 허용할 수 있다).
예시로서, 3개의 프로세서 헤더들(400, 410 및 420)이 도 4에 도시되어 있다. 제1 프로세서 헤더(400)는, 헤더의 4개의 선두 비트들에 의해 표현되는, 병렬로 실행되는 2개의 명령어에 대한 헤더를 나타낸다. 병렬로 발견되는 2개의 헤더의 13가지 가장 일반적인 조합에는 4 비트 코드가 주어지며, 하나의 4 비트 코드는 특별 명령어를 위해 예약된다. 최종의 2개의 이용가능한 4-비트 코드는 후술되는 바와 같이 더 긴 8-비트 및 16-비트 코드의 처음 4자릿수이다.
헤더(400)에 도시된 특정한 4-비트 코드(402a)는 CMU 및 IAU 명령어로 변환된다. 그 다음 2개 비트는 CMU 명령어에 대한 opcode(404a)를 나타내며, 이것은 그 길이를 나타내고, 또한, 어느 CMU 명령어가 이용될 것인지에 대한 정보를 제공할 수 있다. 유사하게, 다음 2개 비트는 IAU 명령어에 대한 opcode(404b)를 나타낸다. opcode들 중 어느 하나가 00이면, 이것은, 프로세서 명령어의 일부로서 그 타입의 명령어가 주어지지 않는다는 것을 나타낸다; 따라서, 이 헤더는 또한, 예를 들어, CMU opcode 필드(404a)에 00을 배치함으로써 단일 IAU 명령어를 나타내기 위해 선택될 수 있다. 전체적으로, 헤더(400)는 8 비트 길이이고 전체 프로세서 명령어의 비트 길이를 결정하기에 충분한 정보를 제공한다.
명령어 헤더(410)는, 병렬로 실행될 4개의 명령어를 식별하는데 이용되는 8 비트 코드를 헤더에 포함한다. 이 구현에서 "1110"에 대응하는 특정한 4-비트 워드(412a)는, 4개 명령어 헤더들 모두에 이용된다.
15개의 4개-명령어 조합에는, 412b로서 도시된, 다음 4개 비트로서 나타나는 4-비트 코드가 할당된다.
이 특정한 경우에, 코드 워드(412b)는 각각 VAU, CMU, LSUO 및 IAU 명령어로 변환된다. 다음 8개 비트는 순서대로 4개의 명령어들 각각에 대한 opcode들(414a-d)이며, 도시된 바와 같이, IAU op 코드(414d)는 00으로 설정되어, VAU, CMU 및 LSUO 명령어들만이 이 헤더에 의해 실제로 표현된다는 것을 의미한다. 따라서 프로세서 명령어 헤더(410)는 이 경우에 16 비트로서, 개개의 유닛 명령어의 신원 및 길이뿐만 아니라 프로세서 명령어의 전체 길이를 식별하기에 충분하다.
명령어 헤더(420)는 나머지 경우(residual case) 및 가장 긴 필요한 헤더를 나타낸다. 이 헤더(420)는, 8개의 모두의 명령어의 opcode에 대한 비트들을 포함하는 것으로 변환되는 4-비트 코드를 포함한다 ― 이 구현에서는 "1111". 상기와 같이, opcode들(424a-h) 중 임의의 것이 여전히 00으로 설정될 수 있다. 헤더(420)에서는, VAU (224a), LSU1 (224d), 및 BRU (224g) opcode들이 00으로 설정되기 때문에, CMU(224b), LSUO(224c), SAU(224e), IAU(224f), 및 PEU(224h) 명령어들만이 실제로 존재하는 것으로 표시된다.
또한, 일부 구현에서는 패딩 부분(426)이 헤더(420)에 추가될 수 있다. 명령어 패딩(426)은 가변-길이일 수 있고, 명령어가 메모리의 128 비트 경계에서 끝나도록 추가될 수 있다. 정렬 프로세스는 명령어 패딩(426)의 길이를 제어할 수 있다.
버퍼 관리
도 5는 추가 데이터 라인을 인출하기 위한 메커니즘을 포함하는 캐시 시스템(500)의 도면을 도시한다. 접속행렬 메모리(502)는 (2kB 일 수 있는) 명령어 캐시(504)에 데이터를 피딩하고, 명령어 캐시는 차례로 데이터 라인을 명령어 디커플링 버퍼(506)에 피딩한다. 명령어 디커플링 버퍼(506)는 메모리 측의 고정-폭 라인(한 구현에서는 128 비트이지만, 다른 크기도 가능)으로 피딩받고, 프로세서 측에 가변-폭 명령어를 제공한다. 인출 모듈(508)은 버퍼(506)의 레벨을 모니터링하고 캐시(504)로부터 버퍼(506)로의 또 다른 128-비트 명령어 라인에 대해 시그널링할 때를 결정한다. 일반적으로, 이것은 임계값을 이용하여 실행된다; 디커플링 버퍼(506) 내의 전달되지 않은 명령어들이 (명령어들 또는 비트들의 수에서) 소정 레벨을 초과하면, 버퍼(506)는 충분히 가득 찬 것으로 간주된다. 버퍼(506)가 임계 레벨 아래로 떨어지면, 인출 모듈(508)은 버퍼(506)에 로드될 또 다른 128-비트의 데이터를 명령어 캐시(504)에 시그널링한다.
디커플링 버퍼(506)를 과부하시키지 않는 한 이유는, 명령어들, 특히 (분기 유닛 내의 명령어, BRU.JMP에 의해 주어진) 점프 명령어들에서 불연속성의 존재이다. 점프 명령어에 후속하는 명령어들로 가득 찬 버퍼를 채우는 것은, 점프 명령어가, 후속 명령어들이 끌어 올려 져야하는(pulled from) 메모리 위치를 변경하기 때문에 비효율적이다. 따라서 점프 명령어에 후속하는 명령어는 폐기될 수 있다.
그러나, 분기 명령어가 실행되는 동안 제한된 수의 명령어를 포함하는 것이 통상적이고 바람직하다; 이들은 분기 지연 라인 명령어라고 알려져 있다. 포함할 분기 지연 명령어의 이상적인 개수는 분기 명령어에 의해 도입된 레이턴시의 사이클 수와 동일할 것이다; 예를 들어, 분기 명령어가 6 사이클의 레이턴시를 도입하는 경우, 처리를 위해 6 사이클의 명령어(이상적으로 6개 명령어)가 버퍼에서 이용가능해야 한다. 그러나, 여기서 설명된 프로세서 명령어들에서와 같이 명령어들이 가변-길이이면, 분기 지연 명령어들의 수는 버퍼에 포함될 필요가 있는 비트 수로 즉시 변환되지 않는다.
분기 명령어에 대한 버퍼 관리를 향상시키기 위하여, 도 6에 도시된 바와 같이, 추가 필드가 분기 명령어 자체의 비트들에 포함될 수 있다. BRU 명령어에 대한 소정의 선택 비트 맵이 도시되어 있으며, 상이한 BRU opcode들에 의해 주어진 3가지 크기의 BRU 명령어들 각각에 대해 하나씩 포함한다.
명령어 헤더로부터 24 비트인 BRU.BRA 명령어(600)가 도시되어 있다.
특정한 명령어 BRA, 명령어 포인터-상대적 점프는, 분기 유닛 opcode(602)(이 경우 "00")의 이용에 의해 알려진다. 즉석 오프셋 필드(immediate offset field; 604)는 명령어 내의 포인터의 새로운 위치를 나타내고, 8-비트 필드(606)는 지연 명령어의 전체 크기(이 경우, 136 비트)를 제공한다.
명령어 헤더로부터 16 비트인 BRU.JMP 명령어(610)가 도시되어 있다. 특정한 명령어 JMP, 레지스터-간접 명령어 포인터 점프는, 분기 유닛 opcode(612)(이 경우에는 "001")의 이용에 의해 알려진다. 5-자릿수 필드(614)는 정수 레지스트리 파일 내의 새로운 주소를 나타내고, 8-비트 필드(616)는 지연 명령어의 총 크기(이 경우, 132 비트)를 제공한다.
명령어 헤더로부터 20 비트인 BRU.RPL 명령어(620)가 도시되어 있다. 특정한 명령어 RPL은 시스템에게 명령어 블록을 가변 횟수만큼 루핑할 것을 지시한다. 이것은 분기 유닛 opcode(622)(이 경우 "11")의 이용에 의해 알려진다. RPL 명령어는 2개의 5-자릿수 인수(624a, 624b)를 취하며, 그 각각은 정수 레지스트리 파일에서의 주소를 나타낸다. 처음 나열된 레지스트리 위치(624a)에서 발견된 정수 값은 명령어를 루핑할 횟수를 나타낸다. 두번째 나열된 위치(624b)에서 발견된 정수 값은 루프 종료 주소를 지정한다. 8-비트 필드(616)는 지연 명령어의 전체 크기(이 경우, 124 비트)를 제공한다.
분기 지연을 도입하는 분기 명령어들에 대한 비트 크기 필드를 포함함으로써, 도 7에 도시된 바와 같이, 인출 모듈이 버퍼를 관리하기 위한 개선된 프로세스를 수행하는 것이 가능하다.
도 7에 도시된 방법(700)은, 버퍼가 전술된 바와 같이 인출 모듈에 의해 관리될 수 있는 한 방식이다. 인출 모듈은 버퍼의 레벨을 질의할 수 있다(702). 일부 구현에서, 질의는 인출 모듈 이외의 소스에 의해 실행될 수 있거나, (버퍼가 그 레벨을 소정 간격으로 신속하게 인출 모듈에 보고할 때와 같이) 전혀 필요하지 않을 수도 있다.
인출 모듈은 버퍼에서 이용가능한 데이터의 레벨을 나타내는 정보를 수신한다(704). 이상적으로, 이것은 비트 또는 바이트의 데이터로 표현되지만, 명령어로 표현될 수도 있다. 어쨌든, 버퍼는 평가를 위해 시스템에 추출되었지만 아직 평가되지는 않은 명령어를 나타낸다.
어떤 분기 명령어도 해석되지 않았다면(결정 블록(706)의 "아니오" 분기), 버퍼 레벨 임계값이 디폴트 값과 비교된다(708). 디폴트 값은 이용자에 의해 수동으로 설정되거나, 시스템 성능의 경험적 측정에 기초하여 자동화된 프로세스를 통해 도달될 수 있다. 버퍼 레벨이 임계값을 초과한다면, 인출 모듈은 다시 버퍼를 질의하기 전에 적절한 간격을 대기할 수 있다(712). 그렇지 않으면, 캐시(710)로부터 또 다른 데이터 라인(어떤 구현 예에서는 128 비트)이 인출되고 추가적인 레벨 질의가 수행된다.
시스템이 메모리 내의 새로운 지점으로부터 명령어를 인출하기 시작하는 동안 분기 지연 명령어가 해석되도록 분기 명령어가 해석되었다면(결정 블록 706의 "예" 분기), 지연 명령어에 대한 바이트 크기는 분기 명령어의 헤더로부터 결정된다(714). 그 다음, 버퍼 레벨은 이 바이트 크기 임계값과 비교된다(716). 버퍼 레벨이 임계값을 초과한다면, 시스템은 분기 목적지로부터 명령어를 인출한다(718). 버퍼 레벨이 바이트 크기 임계값보다 낮다면, 충분한 분기 지연 명령어를 제공하기 위해 또 다른 명령어 라인이 인출된다(710).
범용 하드웨어 동작
여기서 설명된 8개의 기능 유닛들은 도시되고 전술된 바와 같이 프로세서 상에 구축된다. 일부 구현에서, 메모리 내의 하나 이상의 값에 관한 연산을 포함하는 명령어는 그 값의 데이터 타입에 관계없이 동일한 기저 로직을 이용하도록 설계될 수 있다. 예를 들어, 한 구현에서, 여기서 개시된 명령어들은 칩의 하드웨어 내에 기입되고, 고정 소수점 10진수, 부동 소수점 10진수, 정수 및 U8F 값에 관해 연산하기 위해 동일한 하드웨어 및 데이터 경로가 이용될 수 있다. 또한, 이들 지원되는 데이터 타입들 중 임의의 것에 대한 32 비트, 16 비트 및 8 비트 값에 관해 연산하기 위해 동일한 하드 와이어드 연산 로직이 이용될 수 있다. 이러한 방식으로, 이들 로직 컴포넌트가 유연하게 재사용될 수 있기 때문에 프로세서의 총 풋프린트(footprint)가 감소될 수 있다.
예로서, 도 8은, 복수의 데이터 타입 및 복 레벨의 정밀도를 수용하도록 설정될 수 있는, 스칼라 산술 함수, SAU.ADD에 대한 비트 맵을 도시한다. 명령어(800)는, IRF 메모리 내의 위치에 대한 각각의 참조인 3개의 5-자릿수 필드(804a, 804b, 804c)를 후속 동반하는 5-자릿수 opcode(802)를 포함한다. ADD 연산은, 804a에 의해 지정된 IRF 위치에 저장된 값, 및 804c에 의해 지정된 IRF 위치에 저장된 값을 취하여, 그 결과를 804b에 의해 지정된 IRF 위치에 저장한다. 단일 비트(806)가 포함되어 제2 피연산자 위치(804c)가 IRF 위치가 아니라 지시된 오프셋으로서 식별되는 것을 허용한다.
나머지 비트(808 및 810)는 상이한 타입들 및 크기들을 수용한다. 비트(808)는, "1"로 부동 소수점을 지정하고 "0"으로 정수를 지정하는 한편, 2개의 크기 비트(810)는, 32, 16 또는 8 비트를 지정한다. 이러한 방식으로, 복수의 데이터 포맷들은 동일한 하드웨어 로직에서 동일한 연산을 이용한다.
도 9는 동작을 실행하기 위한 방법(900)에 대한 플로차트를 나타낸다. 이러한 동작을 나타내는 명령어의 판독시, 시스템은 적절한 레지스트리 파일로부터 지정된 값을 인출한다(1102).
시스템은 피연산자의 데이터 타입을 결정한다(1104). 이것은 레지스트리 내의 저장소로부터 알 수 있거나, 기타의 방식으로 시스템에 알려진다. 대안으로서, 연산 헤더는 데이터 타입을 식별하기 위한 하나 이상의 필드를 가질 수 있다.
시스템은 연산을 수행하여, 결과를 얻는다(1106). 결과는 대개 피연산자와 동일한 포맷이지만, 일부 구현에서는 결과가 소정 방식으로 포맷화될 수 있으며, 결과의 예상된 타입과 정합하도록 재포맷될 필요가 있을 수도 있다(1108). 명령어가 요구한다면, 결과는 레지스트리에 저장되거나(1110) 즉각적인 이용을 위해 캐시 또는 임시 메모리에 보유될 수 있다.
응축된 룩업 테이블
소정 데이터의 효율적인 처리를 위해, 흔히 이용되는 기능에 대한 룩업 테이블을 포함하는 것이 적절하다. 그러나, 특정한 데이터 타입 내의 특정한 기능은 특정한 테이블에 있는 값에 맞게 조정된 압축된 방식을 이용하여 더 효율적으로 메모리에 저장될 수 있다.
예를 들어, 16-비트 부동 소수점 값에 대한 베이스 2의 로그(base-2 logarithm)는 전형적으로 0과 1 사이의 값들에 대한 테이블을 포함하고, 그 테이블의 많은 부분은 값의 분수 부분의 선두 비트의 중요한 반복 횟수를 포함한다. 도 10은 룩업 테이블의 처음 5개 비트가 선두 비트의 최대 15회 반복을 인코딩하는데 어떻게 이용될 수 있는지를 도시하는 차트이다. 10진수 이후의 값의 처음 5자리를 인코딩하는 것이 아니라, 대신에 이들 5자릿수는, 10진수 이후의 선두 자릿수와, 반대 자릿수가 나타나기 전에 그 자릿수가 반복되는 횟수를 나타낸다. 따라서 패턴 "111 ... 10"과 "000 .. .01"은, 선두 숫자의 최대 15회 반복에 대해 인코딩된 5개 비트로 대체된다.
도 11은 log-2 연산에 대해 룩업 테이블을 부동 소수점 10진수의 분수 부분으로 변환하기 위한 플로차트를 나타낸다. 여기서, 단일 입력 변수는, 베이스 2의 로그 결과 값으로 변환되어야 하고, 5개 대신에 4개의 인코딩된 비트만을 요구하도록 식별된 임계값을 이용한다.
시스템은 입력 변수의 분수 부분을 추출한다(1102). 그 다음, 분수 부분은 임계값과 비교되어(1104) 그것이 선두 0 또는 선두 1을 갖는 엔트리인지를 결정한다(1106a 또는 1106b). 그 다음, 적절한 엔트리가 룩업 테이블에서 발견되고(1108), 선두 자릿수의 적절한 반복 횟수가 엔트리의 처음 4개 비트에 따라 발견된다(1110). 엔트리의 나머지 비트들은 결과의 나머지로서 첨부된다(1112).
이 응축된 룩업 테이블은, 일부 구현 예에서, 표준 최악 룩업 테이블에 필요한 공간의 40%를 절감할 수 있다.
인라인 스위즐
병렬로 복수의 기능 유닛 명령어를 실행하는 것은, 시각적 처리에 공통되는 소정 동작들이 인라인으로 효율적으로 수행되는 것을 허용한다. 예를 들어, 시각적 처리에서 소정의 공통 동작들은, 벡터의 두 개 이상의 요소를 교환하고(흔히 "스위즐"이라고 함), 특정한 벡터 요소를 1 또는 0으로 대체하고, 하나 이상의 요소를 반전하는 것을 수반한다. 특정한 예로서, 벡터 반전은 종종 전치(transposition)(스위즐)와 반전 양쪽 모두를 포함하는 시각 처리 동작의 일부이다. 그러나, 메모리 내의 벡터 요소가 실제로 변경되는 것은 종종 바람직하지 않다; 변경된 벡터는 특정한 연산을 위해 필요하지만, 원래의 벡터는 이후에 이용된다.
일부 구현에서, 시스템은, 메모리 내의 기저 값들을 교란시키지 않고 1차 데이터 경로 내에서 발생하는 벡터 요소들에 대한 인라인 스위즐, 반전 및 치환을 위한 지원을 포함할 수 있다.
도 12는, 로드-저장 기능 연산자, LSU.SWZM4에 대한 비트 맵이며, 이것은, VRF 입력을 갖는 VAU, CMU 또는 SAU 기능에서 제1 피연산자로서 이용되는 4-요소 벡터에 대한 선택사항적 치환 및 반전을 수반한 인라인 스위즐을 제공한다. 기능을 식별하는 opcode(1202), 유닛 필드(1204), 및 그 기능이 워드가 아니라 바이트 스위즐을 위해 이용되도록 하는 비트(1206)에 후속하여, 명령어는, 4개의 요소 중 어느 것이 4개의 슬롯들 각각에 나타나야 하는지를 지정하는 4개의 필드(1208a-d) 외에도, 치환 또는 반전을 마킹하는데 이용되는 4개의 필드들(1210a-d)을 포함한다.
스위즐 동작은 원래의 벡터(1212a) 및 인라인 스위즐된 벡터(1212b)에 의해 예시된다. 필드들(1208a-d)로부터, 제1 및 제3 요소는 제2 및 제4 스왑이 발생하는 동안 그들의 스폿(spot)을 유지한다. 필드들(1210a-d)로부터, 두 번째 및 네 번째 요소는 그들의 스위즐된 위치(코드 "00")에 따라 재생되고, 첫 번째 요소는 반전되고(코드 "01"), 세 번째 요소는 제로로 대체된다(코드 "10"). 최종 벡터(1212b)는, LSU.SWZM4 인라인 스위즐 동작을 포함하는 특정한 유닛 명령어에서 원래의 벡터(1212a) 대신에 이용되지만, 원래의 벡터(1212a)는 메모리에서 자체적으로 변경되거나 대체되지 않는다.
도 13은, 본 개시내용에 따라 벡터를 스위즐 및 변경하기 위한 예시적인 인라인 방법(1300)을 도시하며, 이 특정한 구현에서는, LSU.SWZM4 동작에 관하여 전술된 각각의 요소에 대한 제1 및 제2 필드에 기초한다. 원래의 벡터가 취득되고(1302), (단계들이 요소에 관해 수행되는 동안 "타겟" 요소인) 벡터의 요소들 각각에 대해 소정 단계들이 실행된다.
제2 필드에서의 타겟 요소에 대한 값에 기초하여(1304), 시스템은 타겟 요소에 1 또는 0을 대입하거나(1308) 지정된 요소 값을 식별하고 타겟 요소에 복사한다(1310, 1312). 전자의 경우(1 또는 0의 대체), 시스템은 데이터 타입을 인식한다; 즉, 1 또는 0 값은 벡터 요소의 (부동 소수점, 고정 소수점, 정수, 또는 스케일링된 정수 등의) 데이터 타입에 따라 포맷팅된다. 후자(무동작(none) 또는 반전)의 경우, 추가 단계는 타겟을 반전시킬지를 결정하고(1314, 1316), 그 시점에서 시스템은 다음 요소를 변경하도록 진행한다.
일단 벡터 내의 모든 요소가 명시된대로 스위칭 및/또는 변경되면, 적절한 동작에 의해 새로운 벡터가 이용된다(1318). 원래의 벡터는 스위즐된 벡터에 의해 덮어쓰기 되지 않지만, 대신에 특정한 명령어에서 호출된 기능이나 기능들의 인수로서만 이용된다.
일부 실시예에서, 병렬 컴퓨팅 디바이스(100)는 전자 디바이스 내에 존재할 수 있다. 도 14는 일부 실시예에 따른 컴퓨팅 디바이스를 포함하는 전자 디바이스를 나타낸다. 전자 디바이스(1400)는, 프로세서(1402), 메모리(1404), 하나 이상의 인터페이스(1406), 및 컴퓨팅 디바이스(100)를 포함할 수 있다.
전자 디바이스(1400)는, 컴퓨터 판독가능한 매체, 플래시 메모리, 자기 디스크 드라이브, 광 드라이브, 프로그램가능한 판독 전용 메모리(PROM), 및/또는 판독 전용 메모리(ROM) 등의 메모리(1404)를 가질 수 있다. 전자 디바이스(1400)는, 명령어들을 처리하고 메모리(1404)에 저장될 수 있는 소프트웨어를 실행하는 하나 이상의 프로세서들(1402)로 구성될 수 있다. 프로세서(1402)는 또한, 메모리(1404) 및 인터페이스(1406)와 통신하여 다른 디바이스와 통신할 수 있다. 프로세서(1402)는, CPU, 애플리케이션 프로세서, 및 플래시 메모리, 또는 RISC(reduced instruction set computing) 프로세서를 결합하는 시스템 온 칩(system-on-a-chip) 등의 임의의 적용가능한 프로세서일 수 있다.
메모리(1404)는, 비일시적 컴퓨터 판독가능한 매체, 플래시 메모리, 자기 디스크 드라이브, 광학 드라이브, 프로그램가능한 판독 전용 메모리(PROM), 판독 전용 메모리(ROM), 또는 기타 임의의 메모리 또는 메모리들의 조합일 수 있다. 소프트웨어는, 컴퓨터 명령어 또는 컴퓨터 코드를 실행할 수 있는 프로세서에서 실행될 수 있다. 프로세서는 또한, ASIC(Application Specific Integrated Circuit), PLA(Programmable Logic Array), FPGA(Field Programmable Gate Array) 또는 기타 임의의 집적 회로를 이용하여 하드웨어로 구현될 수도 있다.
인터페이스(1406)는 하드웨어 또는 소프트웨어로 구현될 수 있다. 인터페이스(1406)는, 텔레비전에 대한 원격 제어 디바이스 등의 로컬 소스뿐만 아니라 네트워크로부터 데이터 및 제어 정보 양쪽 모두를 수신하는데 이용될 수 있다. 전자 디바이스는 또한, 키보드, 터치 스크린, 트랙볼, 터치 패드 및/또는 마우스 등의 다양한 사용자 인터페이스를 제공할 수 있다. 전자 디바이스는 또한, 일부 실시예에서 스피커 및 디스플레이 디바이스를 포함할 수 있다.
일부 실시예에서, 컴퓨팅 디바이스(100) 내의 벡터 프로세서(102) 및 하드웨어 가속기(104) 등의 처리 유닛은, 컴퓨터 명령어 또는 컴퓨터 코드를 실행할 수 있는 집적 칩을 포함할 수 있다. 프로세서는 또한, ASIC(Application Specific Integrated Circuit), PLA(Programmable Logic Array), FPGA(Field Programmable Gate Array) 또는 기타 임의의 집적 회로를 이용하여 하드웨어로 구현될 수도 있다.
일부 실시예에서, 컴퓨팅 디바이스(100)는 시스템 온 칩(SOC)으로서 구현될 수 있다. 다른 실시예에서, 병렬 컴퓨팅 디바이스 내의 하나 이상의 블록은 별개의 칩으로서 구현될 수 있고, 병렬 컴퓨팅 디바이스는 시스템 인 패키지(SIP; system in package)로 팩키징될 수 있다. 일부 실시예에서, 병렬 컴퓨팅 디바이스(400)는 데이터 처리 애플리케이션에 이용될 수 있다. 데이터 처리 애플리케이션은 이미지 처리 애플리케이션 및/또는 비디오 처리 애플리케이션을 포함할 수 있다. 이미지 처리 애플리케이션은 이미지 필터링 연산을 포함하는 이미지 처리 프로세스를 포함할 수 있다; 비디오 처리 애플리케이션은, 비디오 디코딩 동작, 비디오 인코딩 동작, 비디오 내의 움직임 또는 객체를 검출하기 위한 비디오 분석 동작을 포함할 수 있다. 본 발명의 추가 애플리케이션은, 이미지, 객체 또는 비디오의 시퀀스에 기초한 머신 학습 및 분류와, 깊이 인에이블형 카메라를 포함하는 복수의 카메라 뷰로부터 지오메트리를 추출하고, GPU에 의한 후속 버텍스 쉐이딩을 위해 (예를 들어, 포인트-클라우드를 통해) 와이어 프레임 지오메트리를 추출하는 대상으로서의 복수의 뷰로부터 피쳐들을 추출하는 증강 현실 애플리케이션을 포함한다.
전자 디바이스(1400)는 셀룰러 전화 등의 모바일 디바이스를 포함할 수 있다. 모바일 디바이스는, 복수의 액세스 기술 및 유선 통신 네트워크를 이용하여 복수의 무선 액세스 네트워크와 통신할 수 있다. 모바일 디바이스는, 워드 처리, 웹 브라우징, 게이밍, 전자-서적 능력, 운영 체제, 및 전체 키보드 등의, 고급 능력을 제공하는 스마트 폰일 수 있다. 모바일 디바이스는, Symbian OS, iPhone OS, RIM사의 Blackberry, Windows Mobile, Linux, Palm WebOS 및 Android 등의 운영 체제를 실행할 수 있다. 스크린은 모바일 디바이스에 데이터를 입력하는데 이용할 수 있는 터치 스크린일 수 있고, 스크린은 전체 키보드 대신에 이용될 수 있다. 모바일 디바이스는, 통신 네트워크 내의 서버에 의해 제공되는 애플리케이션을 실행하거나 애플리케이션과 통신하는 능력을 가질 수 있다. 모바일 디바이스는 네트워크 상의 이들 애플리케이션으로부터 업데이트 및 기타의 정보를 수신할 수 있다.
전자 디바이스(1400)는 또한, 텔레비전(TV), 비디오 프로젝터, 셋탑 박스 또는 셋탑 유닛, 디지털 비디오 레코더(DVR), 컴퓨터, 넷북, 랩탑, 태블릿 컴퓨터, 및 네트워크와 통신할 수 있는 기타 임의의 청각적/시각적 디바이스를 포함할 수 있다. 전자 디바이스는 또한, 글로벌 위치결정 좌표, 프로파일 정보, 또는 기타의 위치 정보를 그 스택 또는 메모리에 유지할 수 있다.
본 명세서에서 수 개의 상이한 배열들이 설명되었지만, 각각의 피쳐들은 이점을 달성하기 위해 다양한 형태로 함께 유익하게 결합될 수 있다는 것을 이해할 것이다.
상기 명세서에서, 애플리케이션이 특정 예들을 참조하여 설명되었다. 그러나, 첨부된 특허청구범위에 개시된 본 발명의 더 넓은 사상과 범위로부터 벗어나지 않고 다양한 수정 및 변경이 이루어질 수 있다는 것은 명백할 것이다. 예를 들어, 접속은, 예를 들어 중간 디바이스를 통해, 각각의 노드, 유닛 또는 디바이스로부터 또는 이들에 신호를 전송하기에 적합한 임의의 타입의 접속일 수 있다. 따라서, 묵시적으로 또는 달리 언급되지 않는 한, 접속은 예를 들어 직접 접속 또는 간접 접속일 수 있다.
본 명세서에 도시된 아키텍쳐는 단지 예시적인 것이며, 사실상 동일한 기능을 달성하는 많은 다른 아키텍쳐가 구현될 수 있다는 것을 이해해야 한다. 추상적이지만 여전히 명확한 의미에서, 동일한 기능을 달성하기 위한 컴포넌트들의 임의의 배열은 원하는 기능이 달성되도록 사실상 "연관"되어 있다. 따라서, 특정한 기능을 달성하도록 여기서 결합된 임의의 2개의 컴포넌트는, 아키텍쳐 또는 중간 컴포넌트와는 관계없이, 원하는 기능이 달성되도록 서로 "연관"되어 있는 것으로 간주될 수 있다. 마찬가지로, 이와 같이 연관된 임의의 2개의 컴포넌트는 또한, 원하는 기능을 달성하도록 "동작적으로 접속된" 또는 "동작적으로 결합된" 것으로 볼 수 있다.
또한, 본 기술분야의 통상의 기술자라면, 전술된 동작들의 기능 사이의 경계는 단지 예시적인 것이라는 것을 인식할 것이다. 복수의 동작들의 기능은 단일의 동작으로 결합될 수 있고, 및/또는 단일의 동작의 기능은 추가적인 동작들로 분산될 수 있다. 또한, 대안적 실시예들은 특정 동작의 복수의 사례를 포함할 수 있고, 동작들의 순서는 다양한 다른 실시예에서 변경될 수 있다.
그러나, 다른 수정, 변형 및 대안도 역시 가능하다. 따라서, 본 명세서 및 도면은 제한적 의미라기보다는 예시적인 의미로 간주되어야 한다.
청구항에서, 괄호안의 임의의 참조 부호는 청구항을 제한하는 것으로 해석되어서는 안된다. 용어 "~을 포함하는"은 청구항에 열거된 것들 이외의 다른 요소들이나 단계들의 존재를 배제하지 않는다. 또한, 본 명세서에서 사용되는 용어 "한(a)" 또는 "한(an)"은, 하나 이상으로서 정의된다. 또한, 청구항에서 "적어도 하나" 및 "하나 이상" 등의 도입 문구의 사용은, 부정 관사 "a" 또는 "an"에 의한 또 다른 청구항 요소의 도입이, 이러한 도입된 청구항 요소를 포함하는 임의의 특정한 청구항을, 그 청구항이 "하나 이상" 또는 "적어도 하나"라는 도입 문구와 "a" 또는 "an" 등의 부정 관사를 포함하는 경우에도, 단 하나의 이러한 요소만을 포함하는 발명으로 제한한다는 것을 암시하는 것으로 해석되어서는 안된다. 이것은 정관사의 사용에 대해서도 마찬가지로 적용된다. 달리 언급되지 않는 한, "제1" 및 "제2" 등의 용어는, 이러한 용어들이 기술하는 요소들간을 임의적으로 구분하기 위해 사용되는 것이다. 따라서, 이들 용어들은 이와 같은 요소들의 시간적 또는 기타의 우선순위를 나타내려고 의도한 것은 아니다. 소정의 수단들이 서로 다른 청구항들에서 인용되고 있다는 단순한 사실이, 이점을 얻기 위해 이들 수단들의 조합이 사용될 수 없다는 것을 나타내는 것은 아니다.
Claims (13)
- 장치로서,
적어도 하나의 메모리; 및
적어도 하나의 프로세서를 포함하고, 상기 적어도 하나의 프로세서는,
제1 메모리 위치에서 참조된 벡터의 변경된 형태에 대해 수행될 연산을 포함하는 가변-길이 명령어에 액세스하고,
상기 가변-길이 명령어에 의해 명시된 바에 따라 상기 벡터의 상기 변경된 형태를 생성하고 - 상기 가변-길이 명령어는 상기 제1 메모리 위치에서 참조된 상기 벡터의 각각의 요소들과 연관된 필드들의 제1 세트 및 상기 벡터의 상기 변경된 형태에서의 각각의 위치들과 연관된 필드들의 제2 세트를 포함하고, 상기 필드들의 제1 세트는 상기 제1 메모리 위치에서 참조된 상기 벡터의 상기 각각의 요소들이 상기 벡터의 상기 변경된 형태에서 위치될 위치를 지정하고, 상기 필드들의 제2 세트는, 상기 벡터의 상기 변경된 형태에서의 상기 각각의 위치들에서의 값들이 상기 필드들의 제1 세트에 따라서 상기 벡터의 상기 변경된 형태에서의 상기 각각의 위치들에 위치될 상기 제1 메모리 위치에서 참조된 상기 벡터의 상기 요소들의 재생, 대체 및 반전된 값들 중 적어도 하나에 대응할지 여부를 지정함 -,
상기 벡터의 상기 변경된 형태에 대해 상기 연산을 수행하기 위한 것인 - 상기 연산이 수행된 후, 상기 제1 메모리 위치에서 참조된 상기 벡터는 변경되지 않고 유지됨 -, 장치. - 제1항에 있어서, 상기 벡터의 상기 변경된 형태는 상기 제1 메모리 위치에서 참조된 상기 벡터의 스위즐된 요소들(swizzled elements)을 포함하는, 장치.
- 제1항에 있어서, 상기 벡터의 상기 변경된 형태는 상기 제1 메모리 위치에서 참조된 상기 벡터의 반전된 요소들을 포함하는, 장치.
- 제1항에 있어서, 상기 벡터의 상기 변경된 형태는 상기 제1 메모리 위치에서 참조된 상기 벡터의 요소들에 대한 치환 값들을 포함하는, 장치.
- 제1항에 있어서, 상기 벡터의 상기 변경된 형태는 스위즐 및 반전 둘 다 된, 상기 제1 메모리 위치에서 참조된 상기 벡터의 적어도 하나의 요소를 포함하는, 장치.
- 인라인 벡터 변경(in-line vector alteration)을 위한 방법으로서,
적어도 하나의 프로세서를 이용하여, 제1 메모리 위치에서 참조된 벡터의 변경된 형태에 대해 수행될 연산을 포함하는 가변-길이 명령어에 액세스하는 단계;
상기 적어도 하나의 프로세서를 이용하여, 상기 가변-길이 명령어에 의해 명시된 바에 따라 상기 벡터의 상기 변경된 형태를 생성하는 단계 - 상기 가변-길이 명령어는 상기 제1 메모리 위치에서 참조된 상기 벡터의 각각의 요소들과 연관된 필드들의 제1 세트 및 상기 벡터의 상기 변경된 형태에서의 각각의 위치들과 연관된 필드들의 제2 세트를 포함하고, 상기 필드들의 제1 세트는 상기 제1 메모리 위치에서 참조된 상기 벡터의 상기 각각의 요소들이 상기 벡터의 상기 변경된 형태에서 위치될 위치를 지정하고, 상기 필드들의 제2 세트는, 상기 벡터의 상기 변경된 형태에서의 상기 각각의 위치들에서의 값들이 상기 필드들의 제1 세트에 따라서 상기 벡터의 상기 변경된 형태에서의 상기 각각의 위치들에 위치될 상기 제1 메모리 위치에서 참조된 상기 벡터의 상기 요소들의 재생, 대체 및 반전된 값들 중 적어도 하나에 대응할지 여부를 지정함 -; 및
상기 벡터의 상기 변경된 형태에 대해 상기 연산을 수행하는 단계 - 상기 연산이 수행된 후, 상기 제1 메모리 위치에서 참조된 상기 벡터는 변경되지 않고 유지됨 -
를 포함하는, 방법. - 제6항에 있어서, 상기 벡터의 상기 변경된 형태는 상기 제1 메모리 위치에서 참조된 상기 벡터의 스위즐된 요소들(swizzled elements)을 포함하는, 방법.
- 제6항에 있어서, 상기 벡터의 상기 변경된 형태는 상기 제1 메모리 위치에서 참조된 상기 벡터의 반전된 요소들을 포함하는, 방법.
- 제6항에 있어서, 상기 벡터의 상기 변경된 형태는 상기 제1 메모리 위치에서 참조된 상기 벡터의 요소들에 대한 치환 값들을 포함하는, 방법.
- 제6항에 있어서, 상기 벡터의 상기 변경된 형태는 스위즐 및 반전 둘 다 된, 상기 제1 메모리 위치에서 참조된 상기 벡터의 적어도 하나의 요소를 포함하는, 방법.
- 실행되는 경우, 적어도 하나의 프로세서로 하여금 제6항 내지 제10항 중 어느 한 항의 방법을 수행하게 하는 컴퓨터 판독가능한 명령어들을 포함하는 하나 이상의 컴퓨터 판독가능한 매체들.
- 삭제
- 삭제
Applications Claiming Priority (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201462030913P | 2014-07-30 | 2014-07-30 | |
US62/030,913 | 2014-07-30 | ||
US14/457,929 | 2014-08-12 | ||
US14/457,929 US10001993B2 (en) | 2013-08-08 | 2014-08-12 | Variable-length instruction buffer management |
PCT/IB2015/001805 WO2016016726A2 (en) | 2014-07-30 | 2015-07-27 | Vector processor |
KR1020217016084A KR102413501B1 (ko) | 2014-07-30 | 2015-07-27 | 명령어 사전인출을 위한 방법 및 장치 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020217016084A Division KR102413501B1 (ko) | 2014-07-30 | 2015-07-27 | 명령어 사전인출을 위한 방법 및 장치 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20220092646A KR20220092646A (ko) | 2022-07-01 |
KR102515720B1 true KR102515720B1 (ko) | 2023-03-31 |
Family
ID=54705661
Family Applications (4)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020177005792A KR102063856B1 (ko) | 2014-07-30 | 2015-07-27 | 명령어 사전인출을 위한 방법 및 장치 |
KR1020227021273A KR102515720B1 (ko) | 2014-07-30 | 2015-07-27 | 명령어 사전인출을 위한 방법 및 장치 |
KR1020207000089A KR102259406B1 (ko) | 2014-07-30 | 2015-07-27 | 명령어 사전인출을 위한 방법 및 장치 |
KR1020217016084A KR102413501B1 (ko) | 2014-07-30 | 2015-07-27 | 명령어 사전인출을 위한 방법 및 장치 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020177005792A KR102063856B1 (ko) | 2014-07-30 | 2015-07-27 | 명령어 사전인출을 위한 방법 및 장치 |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020207000089A KR102259406B1 (ko) | 2014-07-30 | 2015-07-27 | 명령어 사전인출을 위한 방법 및 장치 |
KR1020217016084A KR102413501B1 (ko) | 2014-07-30 | 2015-07-27 | 명령어 사전인출을 위한 방법 및 장치 |
Country Status (6)
Country | Link |
---|---|
EP (3) | EP3175355B1 (ko) |
JP (4) | JP6491314B2 (ko) |
KR (4) | KR102063856B1 (ko) |
CN (2) | CN110515658A (ko) |
BR (1) | BR112017001981B1 (ko) |
WO (1) | WO2016016726A2 (ko) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11768689B2 (en) | 2013-08-08 | 2023-09-26 | Movidius Limited | Apparatus, systems, and methods for low power computational imaging |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116501389B (zh) * | 2023-06-28 | 2023-09-01 | 睿思芯科(深圳)技术有限公司 | 指令缓冲单元、处理器及计算机系统 |
CN117348933B (zh) * | 2023-12-05 | 2024-02-06 | 睿思芯科(深圳)技术有限公司 | 一种处理器及计算机系统 |
Family Cites Families (42)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US2209599A (en) | 1938-08-29 | 1940-07-30 | Filko John | Switch mechanism for motor vehicle signals |
JPS6334490B2 (ko) * | 1980-02-28 | 1988-07-11 | Intel Corp | |
US4626825A (en) * | 1985-07-02 | 1986-12-02 | Vlsi Technology, Inc. | Logarithmic conversion apparatus |
JPH06100970B2 (ja) * | 1988-03-24 | 1994-12-12 | 富士電機株式会社 | 演算制御装置 |
US5051885A (en) * | 1988-10-07 | 1991-09-24 | Hewlett-Packard Company | Data processing system for concurrent dispatch of instructions to multiple functional units |
SE9002558D0 (sv) * | 1990-08-02 | 1990-08-02 | Carlstedt Elektronik Ab | Processor |
US5365465A (en) * | 1991-12-26 | 1994-11-15 | Texas Instruments Incorporated | Floating point to logarithm converter |
US5689672A (en) * | 1993-10-29 | 1997-11-18 | Advanced Micro Devices, Inc. | Pre-decoded instruction cache and method therefor particularly suitable for variable byte-length instructions |
US5703801A (en) * | 1995-01-31 | 1997-12-30 | Motorola, Inc. | Logarithm/inverse-logarithm converter utilizing second-order term and method of using same |
US5642305A (en) * | 1995-01-31 | 1997-06-24 | Motorola, Inc. | Logarithm/inverse-logarithm converter and method of using same |
US5809323A (en) * | 1995-09-19 | 1998-09-15 | International Business Machines Corporation | Method and apparatus for executing fixed-point instructions within idle execution units of a superscalar processor |
JP3439033B2 (ja) * | 1996-07-08 | 2003-08-25 | 株式会社日立製作所 | 割り込み制御装置及びプロセッサ |
US5881260A (en) * | 1998-02-09 | 1999-03-09 | Hewlett-Packard Company | Method and apparatus for sequencing and decoding variable length instructions with an instruction boundary marker within each instruction |
JP2002507789A (ja) * | 1998-03-18 | 2002-03-12 | クゥアルコム・インコーポレイテッド | デジタル信号プロセッサ |
US6247113B1 (en) * | 1998-05-27 | 2001-06-12 | Arm Limited | Coprocessor opcode division by data type |
US6182100B1 (en) * | 1998-06-30 | 2001-01-30 | International Business Machines Corporation | Method and system for performing a logarithmic estimation within a data processing system |
JP3123047B2 (ja) * | 1998-10-02 | 2001-01-09 | 日本電気株式会社 | マイクロプロセッサ |
US6366998B1 (en) * | 1998-10-14 | 2002-04-02 | Conexant Systems, Inc. | Reconfigurable functional units for implementing a hybrid VLIW-SIMD programming model |
US6480872B1 (en) * | 1999-01-21 | 2002-11-12 | Sandcraft, Inc. | Floating-point and integer multiply-add and multiply-accumulate |
US6412063B1 (en) * | 1999-04-02 | 2002-06-25 | Via-Cyrix, Inc. | Multiple-operand instruction in a two operand pipeline and processor employing the same |
US6523110B1 (en) * | 1999-07-23 | 2003-02-18 | International Business Machines Corporation | Decoupled fetch-execute engine with static branch prediction support |
US6950841B2 (en) * | 2001-07-16 | 2005-09-27 | Qualcomm Incorporated | Logarithmic lookup tables |
GB0124882D0 (en) * | 2001-10-17 | 2001-12-05 | Koninkl Philips Electronics Nv | Improved variable length decoder |
US20040054877A1 (en) * | 2001-10-29 | 2004-03-18 | Macy William W. | Method and apparatus for shuffling data |
US7467287B1 (en) * | 2001-12-31 | 2008-12-16 | Apple Inc. | Method and apparatus for vector table look-up |
KR100718754B1 (ko) * | 2002-01-31 | 2007-05-15 | 에이알씨 인터내셔널 | 길이가 다른 명령어집합 구조를 갖는 설정가능형데이터프로세서 |
JP3738842B2 (ja) * | 2002-06-04 | 2006-01-25 | 富士通株式会社 | 遅延分岐機能を備えた情報処理装置 |
US8966223B2 (en) * | 2005-05-05 | 2015-02-24 | Icera, Inc. | Apparatus and method for configurable processing |
US7568070B2 (en) * | 2005-07-29 | 2009-07-28 | Qualcomm Incorporated | Instruction cache having fixed number of variable length instructions |
US20070198815A1 (en) * | 2005-08-11 | 2007-08-23 | Coresonic Ab | Programmable digital signal processor having a clustered SIMD microarchitecture including a complex short multiplier and an independent vector load unit |
US7539717B2 (en) * | 2005-09-09 | 2009-05-26 | Via Technologies, Inc. | Logarithm processing systems and methods |
US20080040576A1 (en) * | 2006-08-09 | 2008-02-14 | Brian Michael Stempel | Associate Cached Branch Information with the Last Granularity of Branch instruction in Variable Length instruction Set |
JPWO2010067522A1 (ja) * | 2008-12-11 | 2012-05-17 | 日本電気株式会社 | 演算ユニット、プロセッサ及び並列演算方法 |
CN104639181B (zh) * | 2009-06-17 | 2018-06-08 | 相干逻辑公司 | 基于格式结构方法的并行执行 |
US8555034B2 (en) * | 2009-12-15 | 2013-10-08 | Oracle America, Inc. | Execution of variable width vector processing instructions |
JP5089713B2 (ja) * | 2010-01-18 | 2012-12-05 | シャープ株式会社 | 画像圧縮装置、圧縮画像出力装置、画像圧縮方法、コンピュータプログラム及び記録媒体 |
CN102270112A (zh) * | 2010-06-03 | 2011-12-07 | 边立剑 | Risc微处理器指令译码电路 |
JP5240270B2 (ja) | 2010-10-12 | 2013-07-17 | 日本電気株式会社 | プロセッサ及びベクトルロード命令の実行方法 |
KR101699685B1 (ko) | 2010-11-16 | 2017-01-26 | 삼성전자 주식회사 | 명령어 오퍼랜드 변경 장치 및 방법 |
US8880851B2 (en) * | 2011-04-07 | 2014-11-04 | Via Technologies, Inc. | Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline |
CN102662635A (zh) * | 2012-03-21 | 2012-09-12 | 清华大学 | 超长指令字变长指令实现方法及实现该方法的处理器 |
US20140289502A1 (en) * | 2013-03-19 | 2014-09-25 | Apple Inc. | Enhanced vector true/false predicate-generating instructions |
-
2015
- 2015-07-27 CN CN201910648783.7A patent/CN110515658A/zh active Pending
- 2015-07-27 KR KR1020177005792A patent/KR102063856B1/ko active IP Right Grant
- 2015-07-27 KR KR1020227021273A patent/KR102515720B1/ko active IP Right Grant
- 2015-07-27 CN CN201580051186.6A patent/CN106796504B/zh active Active
- 2015-07-27 WO PCT/IB2015/001805 patent/WO2016016726A2/en active Application Filing
- 2015-07-27 EP EP15801496.9A patent/EP3175355B1/en active Active
- 2015-07-27 BR BR112017001981-7A patent/BR112017001981B1/pt active IP Right Grant
- 2015-07-27 KR KR1020207000089A patent/KR102259406B1/ko active IP Right Grant
- 2015-07-27 KR KR1020217016084A patent/KR102413501B1/ko active IP Right Grant
- 2015-07-27 EP EP22192673.6A patent/EP4116819A1/en active Pending
- 2015-07-27 JP JP2017504804A patent/JP6491314B2/ja active Active
- 2015-07-27 EP EP18183679.2A patent/EP3410294A1/en not_active Withdrawn
-
2019
- 2019-02-28 JP JP2019035945A patent/JP2019109926A/ja active Pending
-
2020
- 2020-12-25 JP JP2020217605A patent/JP2021061036A/ja active Pending
-
2022
- 2022-08-25 JP JP2022133738A patent/JP2022169703A/ja not_active Ceased
Non-Patent Citations (2)
Title |
---|
Intel, "Intel 64 and IA-32 Architectures Optimization Reference Manual"(2014.07.01.)* |
Rezaur Rahman, "Xeon Phi Vector Architecture and Instruction Set"(2013.09.)* |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11768689B2 (en) | 2013-08-08 | 2023-09-26 | Movidius Limited | Apparatus, systems, and methods for low power computational imaging |
Also Published As
Publication number | Publication date |
---|---|
WO2016016726A3 (en) | 2016-06-30 |
JP2021061036A (ja) | 2021-04-15 |
CN106796504A (zh) | 2017-05-31 |
CN106796504B (zh) | 2019-08-13 |
JP2017525046A (ja) | 2017-08-31 |
KR20220092646A (ko) | 2022-07-01 |
JP2022169703A (ja) | 2022-11-09 |
KR20210065208A (ko) | 2021-06-03 |
EP3175355B1 (en) | 2018-07-18 |
EP3410294A1 (en) | 2018-12-05 |
BR112017001981B1 (pt) | 2023-05-02 |
KR20200003293A (ko) | 2020-01-08 |
KR102413501B1 (ko) | 2022-06-27 |
KR102259406B1 (ko) | 2021-06-03 |
BR112017001981A2 (pt) | 2017-12-12 |
CN110515658A (zh) | 2019-11-29 |
EP4116819A1 (en) | 2023-01-11 |
KR20170061661A (ko) | 2017-06-05 |
JP2019109926A (ja) | 2019-07-04 |
WO2016016726A2 (en) | 2016-02-04 |
JP6491314B2 (ja) | 2019-03-27 |
EP3175355A2 (en) | 2017-06-07 |
KR102063856B1 (ko) | 2020-01-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11579872B2 (en) | Variable-length instruction buffer management | |
US11188343B2 (en) | Apparatus, systems, and methods for low power computational imaging | |
US9727113B2 (en) | Low power computational imaging | |
EP3506053B1 (en) | Low power computational imaging | |
JP2022169703A (ja) | ベクトルプロセッサ | |
US11768689B2 (en) | Apparatus, systems, and methods for low power computational imaging | |
EP3243164A2 (en) | Hardware accelerator for histogram of gradients | |
EP4149008A1 (en) | Verifying compressed stream fused with copy or transform operations | |
CN114661359A (zh) | 用于处理器核心内的细粒度低时延解压缩的应用编程接口 | |
US20230132254A1 (en) | Variable-length instruction buffer management | |
CN114661625A (zh) | 处理器核高速缓存内的推测性解压缩 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A107 | Divisional application of patent | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |