KR20200013715A - 사전 프로그래밍 된 함수를 갖는 고속 컴퓨터 가속기 - Google Patents

사전 프로그래밍 된 함수를 갖는 고속 컴퓨터 가속기 Download PDF

Info

Publication number
KR20200013715A
KR20200013715A KR1020197038595A KR20197038595A KR20200013715A KR 20200013715 A KR20200013715 A KR 20200013715A KR 1020197038595 A KR1020197038595 A KR 1020197038595A KR 20197038595 A KR20197038595 A KR 20197038595A KR 20200013715 A KR20200013715 A KR 20200013715A
Authority
KR
South Korea
Prior art keywords
stream
function
memory
processor
data
Prior art date
Application number
KR1020197038595A
Other languages
English (en)
Other versions
KR102349138B1 (ko
Inventor
카르티게얀 산카랄링암
앤쏘니 노화츠키
비나이 강가드하르
Original Assignee
위스콘신 얼럼나이 리서어치 화운데이션
위스콘신 얼럼나이 리서어치 화운데이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 위스콘신 얼럼나이 리서어치 화운데이션, 위스콘신 얼럼나이 리서어치 화운데이션 filed Critical 위스콘신 얼럼나이 리서어치 화운데이션
Publication of KR20200013715A publication Critical patent/KR20200013715A/ko
Application granted granted Critical
Publication of KR102349138B1 publication Critical patent/KR102349138B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/82Architectures of general purpose stored program computers data or demand driven
    • G06F15/825Dataflow computers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor

Abstract

컴퓨터 용 하드웨어 가속기는 독립형 고속 고정 프로그램 데이터 흐름 함수 요소를 스트림 프로세서와 결합하고, 후자는 간단한 스트림 명령을 수신한 후 미리 정의된 액세스 패턴으로 메모리에 자동으로 액세스하여 데이터 흐름 함수 요소에 제공할 수 있다. 그 결과 고정 프로그램 데이터 흐름 함수 요소를 활용할 수 있는 소형 고속 프로세서가 만들어진다.

Description

사전 프로그래밍 된 함수를 갖는 고속 컴퓨터 가속기
본 발명은 전자 컴퓨터 아키텍처에 관한 것으로, 특히 함수가 제한되어 있지만 적용성이 개선된 고속 컴퓨터 가속기에 관한 것이다.
본 출원은 2017년 6월 28일자로 출원된 미국 가출원이 아닌 특허 출원 번호 15/635,864의 이점을 주장하며, 여기에 참조로 포함된다.
본 발명은 전자 컴퓨터 아키텍처(electronic computer architecture)에 관한 것으로, 특히 제한된 기능성을 갖는 적용성이 개선된 고속 컴퓨터 가속기(high-speed computer accelerator)에 관한 것이다.
컴퓨터 가속기(computer accelerator)는 일부 계산 애플리케이션에서 개선된 성능을 제공하는 범용 프로세서(GPU)와 팀을 구성할 수 있는 특수 회로를 제공한다.
초기 컴퓨터 가속기는 사전 프로그래밍 된 함수, 즉 데이터를 수신하여 해당 데이터에 대해 사전 결정된 함수를 실행하는 함수를 제공하는 오프 칩 회로로 범용 프로세서(general-purpose processor)의 하드웨어 명령 세트(hardware instruction set)를 확장했다. 따라서, 이러한 가속기(accelerator)는 하나 이상의 고정 함수를 실행한다는 사실을 언급하는 "고정 함수(fixed function)" 가속기라고 한다. 이러한 고정-함수 가속기(fixed-function accelerator)의 일례는 미리 결정된 부동 소수점(floating-point) 및 삼각 함수(trigonometric function) 계산을 실행하기 위한 특수 회로를 제공하는 소위 "수학 보조 프로세서(math coprocessor)" 이다. 이러한 고정-함수 가속기는 필요한 인수 데이터(argument data)의 전송 및 계산된 값의 리턴 정도의 필요한 단일 프로그램 명령으로 해당 함수를 호출할 수 있을 정도로 프로그래밍에 쉽게 통합된다.
범용 프로세서의 성능과 속도가 증가함에 따라, 범용 프로세서와 가속기 사이에서 데이터 및 제어를 전송하는 계산 부담에서 제한된 성능 이득이 두번째 집적 회로의 비용에 의해 초과되는 정도만큼 많은 고정-함수 가속기가 폐기되었다.
아마도 이런 이유로, 현재의 가속기 기술은 일반 프로세서와는 독립적으로 큰 명령 블록을 실행하는 독립적으로 작동하는 특수 목적 컴퓨터(special-purpose computer)로 작동하는 가속기에 주로 중점을 두고 있다. 컴퓨터 아키텍처 가속기(computer architecture accelerator)의 한 예는 그래픽 렌더링과 관련된 특정 시간이 걸리는 작업에 적합한 특수 목적의 컴퓨터 코어 배열을 제공하는 그래픽 프로세서 유닛(GPU)이다. 이 유형의 가속기의 유사한 가속기에는 데이터 센터에서 사용하기 위한 마이크로소프트 카타펄트 FPGA(Microsoft Catapult FPGA) 가속기 및 분산 기계 학습을 위한 구글(Google)의 텐서(Tensor) 처리 장치와 같은 애플리케이션 별 가속기가 포함된다. 이 가속기는 사실상 특수 목적 컴퓨터이며, 예를 들어, 범용 고성능 폰노이만(VonNeuman) 프로세서와 결합하면 이러한 특정 애플리케이션의 처리 속도를 크게 높일 수 있다.
컴퓨터 아키텍처 가속기의 설계는 잘 확립된 문제와 연관이 없거나 복잡한 설계, 애플리케이션 프로그램의 변경 및 이들 가속기를 사용하기 위한 툴체인(tool chain)의 변경의 시간 및 비용을 정당화하기 위한 충분히 큰 요구를 가지고 있지 않은 애플리케이션을 위해서는 실용적이지 않을 수 있다.
본 발명은 컴퓨터 아키텍처 가속기(computer architecture accelerator)의 설계 및 제조를 정당화하지 않는 작업에 대한 계산 속도를 실질적으로 증가시킬 수 있는 고정-함수 가속기(fixed-function accelerator)를 제공한다. 고정 함수 실행의 속도 이점은 고속 데이터 흐름 아키텍처(high-speed dataflow architecture)를 사용하고 특수 용도 스트림 프로세서(special-purpose stream processor)를 사용하여 메모리 액세스를 처리함으로써 범용 프로세서의 개입 없이도 장시간의 데이터를 처리할 수 있도록 한다. 구현된 개별 함수를 올바르게 선택하면 가속기(accelerator)가 다양한 프로그램에 더 광범위하게 적용될 수 있다. 상이한 고정 함수(fixed function)를 구현하면 아키텍처의 상당 부분을 재사용할 수 있으며 고정 함수는 프로그램에서 호출하기가 비교적 간단하다.
구체적으로, 일 실시예에서, 본 발명은 다음을 갖는 컴퓨터 가속기 아키텍처(computer accelerator architecture)를 제공한다. (1) 높은 복잡성 범용 프로세서로(higher complexity general-purpose processor)부터 스트림 명령을 수신하도록 적용된 낮은 복잡성 프로세서(lower complexity processor) - 스트림 명령(stream instruction)은 메모리와 교환될 다수의 데이터 요소(data element)의 논리 스트림(logical stream)을 기술하는 -; (2) 논리 스트림의 결과적인 출력 데이터 요소를 제공하기 위해 각각의 입력 데이터 요소의 이용 가능성에 의해 개시되는 바와 같이, 논리 스트림의 연속적인 입력 데이터 요소를 순차적으로 처리하는 고정 프로그램 함수 요소(fixed program functional element); 및 (3) 스트림 명령에 따라 메모리로부터 논리 스트림의 입력 데이터 요소를 자율적으로 판독하고 스트림 명령에 따라 메모리에 논리 스트림의 결과적인 출력 데이터 요소를 메모리에 자율적으로 기록하는 낮은 복잡성 범용 프로세서로부터 스트림 명령을 수신하는 스트림 프로세서(stream processor)를 포함한다. 단지 단일 스트림 프로세서 및 단지 단일 함수 요소로 구성된 쌍은 주어진 논리 스트림의 데이터 요소를 상호 통신하도록 동작한다.
본 발명의 적어도 하나의 실시예의 특징은 고정-함수 가속기의 다 함수성 및 넓은 적용 성을 제공하면서도 정교한 범용 프로세서에서 동일한 함수의 실행에 비해 실질적인 속도 이점을 제공하는 가속기를 제공하는 것이다.
고정 프로그램 함수 요소는 프로그램 카운터를 포함하지 않을 수 있다.
따라서, 함수 실행에서 실질적인 속도 이득을 제공하기 위해 데이터 흐름 아키텍처(dataflow architecture)를 이용하는 것이 본 발명의 적어도 하나의 실시예의 특징이다.
고정 프로그램 함수 요소는 제2 합의 쌍의 제1 합인 적어도 하나의 출력을 갖는 곱하기 덧셈-축소 함수(multiply add-reduction function)를 제공 - 각각의 제2 합은 곱의 쌍의 합이고, 그 곱은 입력 인수의 쌍의 곱 인 - 한다.
따라서, 공통 맵-축소 함수(common map-reduce function)을 구현하는 고정-함수 가속기를 제공하는 것이 본 발명의 적어도 하나의 실시예의 특징이다.
대안적으로 또는 추가로, 상기 고정 프로그램 함수 요소는 입력 인수의 쌍의 곱의 총합인 적어도 하나의 출력을 갖는 곱하기 누적 함수다.
따라서, 공통 맵-유닛 함수(common map-unit function)을 구현하는 고정-함수 가속기(fixed-function accelerator)를 제공하는 것이 본 발명의 적어도 하나의 실시예의 특징이다.
대안으로 또는 추가로, 고정 프로그램 함수 요소(fixed program functional element)는 보간된 값에 합산된 기본 값인 출력을 갖는 비선형 변환 함수(nonlinear transformation function)일 수 있고, 기본 값은 입력 인수의 최상위 비트에서 첫 번째 룩업 테이블에서 얻어지고, 상기 보간된 값은 입력 인수의 최상위 비트와 입력 인수의 최하위 비트를 곱한 제2 룩업 테이블로부터 얻은 기울기 값이다.
컴퓨터 가속기는 다수의 함수 요소 및 단일 함수 요소를 한 번에 스트림 프로세서에 할당하는 스위치를 포함할 수 있다. 대안적으로 또는 추가적으로, 컴퓨터 가속기(computer accelerator)는 다수의 스트림 프로세서 및 다수의 함수 요소 및 단일 함수 요소를 단일 스트림 프로세서에 할당하는 스위치를 포함할 수 있다.
따라서, 가속을 위해 사용될 수 있는 다양한 함수 중에서 선택을 허용함으로써 컴퓨터 가속기의 유연성을 증가시키는 것이 본 발명의 적어도 하나의 실시예의 특징이다.
함수 요소들은 적어도 32 개의 비트 인수를 처리하기 위해 제공되며, 개별 데이터 단어를 함께 연결하고 인수로서 처리함으로써 함수 요소의 인수 길이보다 작은 길이를 갖는 개별 데이터 워드를 병렬로 처리할 수 있다.
따라서, 단일 명령, 다중 데이터 유형 병렬 처리(multiple data type parallel processing)를 허용하는 것이 본 발명의 적어도 하나의 실시예의 특징이다.
스트림 프로세서(stream processor)는 다수의 스트림을 주어진 고정 프로그램 함수 요소와 동시에 교환할 수 있다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은 메모리 대역폭의 최대 처리 및 이용을 위해 함수 요소에 다수의 스트림을 제공하는 것이다. 티.
더 낮은 복잡성 범용 프로세서로부터 스트림 프로세서로의 스트림 명령은 함수 요소의 동작과 관련하여 비동기식으로 수신될 수 있고 메모리에 저장된 다수의 입력 값의 자율적인 판독 또는 상이한 미리 정의된 메모리 액세스 패턴에 따라 가속기로부터 다수의 출력 값의 자율적인 기록을 제공할 수 있다.
따라서, 개선된 가속을 위한 메모리 액세스 명령 및 계산의 병렬 실행을 허용하는 것이 본 발명의 적어도 하나의 실시예의 특징이다.
낮은 복잡성 범용 프로세서는 논리 및 산술 명령을 실행하고 결과를 높은 복잡성 범용 프로세서로 리턴 하기 위해 높은 복잡성 범용 프로세서로부터 명령 및 데이터를 수신하도록 적용될 수 있다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은 함수 요소가 낮은 복잡성 범용 프로세서에 의해 구현되는 보다 복잡한 가속기 함수에 통합되도록 허용하거나, 낮은 복잡성 범용 프로세서가 오프로드 된 함수를 직접적으로 수용하도록 허용하는 것이다.
스트림 프로세서는 2 개의 메모리 어드레스(memory address) 사이의 연속적인 어드레스의 선형 액세스 패턴(linear access pattern) 및 두 개의 메모리 어드레스 사이에서 규칙적으로 이격된 불연속적인 어드레스의 스트라이드 액세스 패턴(strided access pattern)을 포함하는 미리 정의된 메모리 액세스 패턴을 제공할 수 있다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은 가속에 적합한 다수의 데이터 명령에 일반적으로 사용되는 메모리 액세스 패턴을 제공하는 것이다.
이들 특정 목적 및 장점은 청구 범위 내에 속하는 일부 실시예에만 적용될 수 있고 따라서 본 발명의 범위를 정의하지는 않는다.
도 1은 범용 프로세서와 함께 사용 가능한 가속기 뱅크를 제공하는 본 발명의 가속기의 간략화된 블록도이다.
도 2는 낮은 복잡성 범용 프로세서, 고정 프로그램 함수 요소, 스크래치 패드 메모리 및 스트림 프로세서의 조합을 나타내는 단일 가속기의 상세 블록도이다.
도 3은 구성 스트림 디스패처 및 스트림 엔진 요소를 나타내는 스트림 프로세서의 상세 블록도이다.
도 4는 주어진 스트림 프로세서와 개별적으로 쌍을 이룰 수 있는 고정 프로그램 함수 요소의 풀이 제공을 나타내는 도 2의 그것과 유사한 도면이다.
도 5는 스위치 네트워크를 사용하는 일대일 페어링을 위한 스트림 함수 및 프로그램 함수 요소의 풀링을 나타내는 도 4의 그것과 유사한 도면이다.
도 6은 연관 벡터 버퍼 및 데이터 흐름 조정을 나타내는 도 2의 함수 요소의 논리적 블록도이다.
도 7은 맵-축소 함수 요소를 나타내는 도 6의 그것과 유사한 도면이다.
도 8은 맵-유닛 함수 요소를 나타내는 도 6 및 7의 그것과 유사한 도면이다.
도 9는 비선형 변환 함수 요소를 나타내는 도 6, 7 및 8의 그것과 유사한 도면이다; 및
도 10은 스트림 프로세서에 의한 자율 액세스를 위한 정의 가능한 메모리 액세스 패턴을 나타내는 컴퓨터 메모리의 개략도이다.
이제 도 1을 참조하면, 본 발명에 따라 구성된 컴퓨터 아키텍처(computer architecture)(10)는 높은 복잡성 범용 프로세서(higher complexity general-purpose processor)(12)를 제공할 수 있다. 더 높은 복잡성 범용 프로세서(12)는 예를 들어 프로그램 카운터로 시퀀싱 된 연산 및 논리 명령의 풍부한 명령 세트를 사용하여 비 순차적 실행 및 추론적 실행을 포함하는 정교한 폰노이만(VonNeuman) 아키텍처를 구현할 수 있다. 이러한 프로세서(12)의 예는 인텔사(Intel Corporation)에 의해 상표명 "i7"로 제조된 것뿐만 아니라 어드밴스드 마이크로 디바이스사(Advanced Micro Devices, Inc.) 및 암사(ARM Ltd.)에 의해 제조된 유사한 장치를 포함한다. 본 명세서에서 사용되는 바와 같이, "범용"은 예를 들어, 적어도 이 제품군의 인텔 8080 또는 후속 프로세서에 의해 실행될 수 있는 것과 같은 광범위한 프로그램을 실행하기에 충분한 범용 명령 세트 및 아키텍처를 지칭한다.
더 높은 복잡성 범용 프로세서(12)는 어드레스 및 데이터 라인(address and data line)(23)을 사용하여 L1 캐시(L1 cache)(14)를 통해 메모리 시스템(memory system)(16)과 통신할 수 있다. 메모리 시스템(memory system)(16)은 예를 들어 랜덤 액세스 메모리(RAM), 디스크 메모리 등으로 구성된 점점 더 큰 규모의 메모리(larger scale memory)(20)의 하나 이상의 계층과 결합된 추가 레벨의 캐시(cache)(18)를 포함하지만 이에 제한되지 않는 표준 메모리 계층을 제공한다.
메모리 시스템(16)은 예를 들어 이미지 프로세싱, 머신 러닝, 그래프 프로세싱 등을 포함하는 하드웨어 가속으로부터 이익을 얻을 수 있는 컴퓨터 아키텍처(10)에 의해 실행하기 위한 프로그램(22)을 보유할 수 있다.
더 높은 복잡성 범용 프로세서(12)는 또한, 컴퓨터 가속기(computer accelerator)(24)의 함수에 대한 인수 데이터를 얻기 위한 메모리 액세스의 패턴 및 고정-함수 가속기(fixed-function accelerator)(24)로부터 값을 다시 기록하기 위한 유사한 패턴을 기술하는 데이터를 전송하는 제어 라인(control line)(26)에 의해 컴퓨터 가속기의 뱅크(bank)(21)와 통신할 수 있다. 제어 라인(26)은 또한 고정-함수 가속기(fixed-function accelerator)(24)의 동작을 개시하는 타이밍 정보를 전송할 수 있다. 메모리 액세스 패턴 및 타이밍 신호를 정의할뿐만 아니라 제어 라인(26)은 예를 들어 컴퓨터 가속기(24)에서 이용 가능한 상이한 고정-함수 회로 중에서 선택하는 일부 제한된 구성 데이터를 제공할 수 있다.
아래에서 더 자세히 설명하겠지만 작동 중에는, 높은 복잡성 범용 프로세서(12)에 의해 제공된 메모리 데이터 패턴을 사용하는 고정-함수 가속기(24)는 높은 복잡성 범용 프로세서(12)에 대한 추가적인 도움없이 유사한 어드레스 및 데이터 라인(address and data line)(23)을 사용하여 L2 캐시에서 메모리 시스템(16)에 독립적으로 액세스 할 수 있다. 이 액세스는 각각의 컴퓨터 가속기(24)가 예를 들어 종래의 데드락 제거 기술(deadlock elimination technique)을 사용하여 메모리 시스템(16)에 대한 충분한 액세스를 얻음으로써 데드락을 제거하기 위해 로드 밸런싱 회로(load-balancing circuit)(25)에 의해 완화될 수 있다. 고정-함수 가속기(24)의 동작 동안, 높은 복잡성 범용 프로세서(12)는 그 계산 동안 다른 작업을 위해 종료되거나 사용될 수 있다.
이제 도 2를 참조하면, 각각의 컴퓨터 가속기(24)는 낮은 복잡성 범용 프로세서(lower complexity general-purpose processor)(30), 고정-함수 요소(fixed-function element)(32), 메모리 인터페이스(memory interface)(34), 스크래치 패드 메모리(scratchpad memory)(36) 및 스트림 프로세서(stream processor)(38)를 포함하고, 후자는 스트림 디스패처(stream dispatcher)(40) 및 스트림 엔진(stream dispatcher)(42)을 포함한다.
경량 프로세서(Lightweight Processor)
작동 중에, 낮은 복잡성 범용 프로세서(30)는 높은 복잡성 범용 프로세서(12)와 통신하여 그로부터 명령을 수신하고 스트림 명령(stream instruction)을 스트림 프로세서(Lightweight Processor)(38)에 발행한다. 스트림 프로세서(stream processor)(38)는 고정-함수 요소(32)에 의해(직접 또는 스크래치 패드 메모리(36)를 통해) 계산에 필요한 정보를 얻고, 저장을 위해 그 계산 후의 정보를(직접 또는 스크래치 패드 메모리(36)를 통해) 메모리 인터페이스(34)로 리턴 하도록 메모리 인터페이스(34)를 제어할 것이다.
이와 관련하여 복잡성이 낮을수록, 범용 프로세서(30)는 컴퓨터 가속기(24)의 다른 구성 요소의 조정을 제공하기에 충분한 높은 복잡성 범용 프로세서(12)보다 덜 복잡하고 및/또는 느릴 수 있다. 예를 들어, 낮은 복잡성 범용 프로세서(30)는 기본적인 산술 및 논리 함수를 실행하는 추론적 실행이 없는 폰노이만(VonNeuman)의 단일 이슈(single-issue), 인오더 코어(in-order core) 일 수 있다. 이와 관련하여, 낮은 복잡성 범용 프로세서(30)는 높은 복잡성 범용 프로세서(12)보다 훨씬 적은 집적 회로 영역을 필요로하고 훨씬 적은 전력을 사용할 것이다. 일부 구체 예에서, 낮은 복잡성 범용 프로세서(30)는 이산 회로 및 고정 프로그램으로 구현될 수 있으며, 따라서 프로그램 가능한 컴퓨터 아키텍처를 반드시 채용할 필요는 없다. 낮은 복잡성 범용 프로세서(30) 및 메모리 인터페이스(34)는 동일한 메모리 액세스를 공유할 수 있거나 도시된 바와 같이 별도의 메모리 액세스 채널을 제공할 수 있다.
고정-함수 유닛(Fixed-function unit)
고정-함수 요소(32)는, 고정-함수 요소(32)로 인수(argument)를 보내거나 및 고정-함수 요소(32)로부터 값을 통신하기 위해 또는 고정-함수 요소(32) 주위의 루프에서 통신하기 위해, 복수의 입력 벡터 버퍼(input vector buffer)(44), 출력 벡터 버퍼(output vector buffer)(46), 및 전송 벡터 버퍼(transfer vector buffer)(48)를 포함할 수 있다. 하나 이상의 간접 어드레싱 벡터 버퍼(indirect addressing vector buffer)(51)는 또한 비슷한 크기로 존재할 수 있다.
이제 도 6을 참조하면, 고정-함수 요소(32)는 예를 들어 덧셈, 곱셈, 누적 및 룩업 테이블을 제공하는 것에 한정되지 않는 한 세트의 상호 연결된 함수 프리미티브(interconnected function primitive)(33)를 제공한다. 이들 함수 프리미티브(33) 각각은 대응하는 입력 벡터 버퍼(input vector buffer)(44)로부터 데이터를 수신할 수 있고, 결과를 다수의 사이클로 전송 벡터 버퍼(48)를 통해 가능한 데이터의 이동과 함께 대응하는 출력 벡터 버퍼(46)에 제공할 수 있다. 일반적으로, 고정-함수 요소(32)의 아키텍처는 예를 들어, 대응하는 데이터가 함수 프리미티브(function primitive)(33) 각각의 입력에 존재하는지를 식별하는 회로를 사용하여, 입력 벡터 버퍼(44)에서 데이터의 이용 가능성에 따라 실행을 시작한다는 것을 의미하는 데이터 흐름 아키텍처의 아키텍처 일 것이다.
데이터는 클럭 메카니즘 또는 함수 프리미티브(33) 사이의 각 데이터 경로(68)를 타라 유사한 지연(예를 들어, 동작 없이 지연되는 동작 없는 함수 프리미티브를 통해 강제되는)을 제공에 의하여 강제될 수 있는 경쟁 조건을 제거하는 단계 66(stage 66)에 따라 결정적 방식(deterministic manner)으로 함수 프리미티브(33)를 통해 흐른다. 프로그램 카운터없이 작동함으로써, 매우 고속 성능 데이터가 입력 벡터 버퍼(44)에 전달되는 만큼 빠르게 계산이 제공됨을 얻을 수 있다. 게다가, 함수 프리미티브(33) 사이의 데이터 흐름 경로는, 고정-함수 요소(32)의 초기 스테이지 66가 데이터가 후단 스테이지 66에서 처리될 때 입력 벡터 버퍼(44)로부터 새로운 데이터를 수신할 수 있도록, 효과적인 파이프 라인을 형성하는 것을 이해할 것이다.
일반적으로, 함수 프리미티브(33)는 불필요한 제어 단계의 필요성을 제한하는 예측을 제공할 것이며, 함수 프리미티브(33)를 통과하는 단일 인수를 형성하기 위해 함께 연결된 다수의 데이터 워드에 대해 병렬로 동작할 수 있다. 따라서, 예를 들어, 32 비트의 인수 폭을 갖는 함수 프리미티브(33)는, 예를 들어 캐리 및 오버 플로우(carry and overflow)가 처리되는 포화 산술(saturation arithmetic)을 수행함으로써, 예를 들면 캐리 또는 오버 플로우를 억제하고 결과를 최대 허용값(highest permissible value)으로 설정함으로써, 함께 연결된 4 개의 8 비트 인수를 동시에 처리할 수 있다. 유사한 기술이 가장 낮은 허용값으로 결과를 세팅하는 언더 플로우 및 바로우(under flow and borrow)로 사용될 수 있다.
이제 도 7을 참조하면, 중요한 고정-함수 요소(32)는 맵-축소 또는 곱하기 덧셈-축소 함수를 제공할 수 있다. 그런 함수에서, 입력 벡터 버퍼(input vector buffer)(44)의 쌍에서의 인수는 제1 스테이지 66a에서 맵핑을 제공하는 곱하기 함수 프리미티브(33a)에 의해 곱해질 수 있다.   곱하기 함수 프리미티브(33a)로부터의 출력 곱(output product)은 추가 가산기 함수 프리미티브(33a)에 의한 제1 파트의 감축을 제공하는 제2 스테이지(66b)에서 함께 쌍으로 더해진다. 이 제2 가산기 함수 프리미티브(33a) 세트로부터의 출력은 축소를 완료하는 출력 백터 버퍼(46)에 그 출력을 제공하는 추가 가산기 프리미티브(33a)에 의해 제3 스테이지(66c)에서 합산된다. 맵-축소 함수(map-reduce function)은, 예를 들어 곱셈, 절대 차이 등을 포함하는 다양한 상이한 맵핑 절차를 구현할 수 있고, 예를 들어, 추가, 최대 및 최소 함수 등을 포함하는 다양한 상이한 축소 함수를 제공할 수 있다고 일반적으로 이해될 것이다.
대안적으로 또는 추가로, 도 8에 도시된 바와 같이, 고정-함수 요소(32)는 맵-유닛(map uni) 또는 곱하기-및-누산 함수(multiply-and-accumulate function)을 제공할 수 있다. 그런 함수로, 입력 벡터 버퍼(input vector buffer)(44)의 쌍에서의 인수는 가산기 함수 프리미티브(33a)에 의해 제1 스테이지(66a)에서 합산될 수 있다. 이들 가산기 함수 프리미티브(33)의 출력은 제2 스테이지(66b)에서 누산기 함수 프리미티브(accumulator function primitive)(33b)에 제공되며, 제2 스테이지(66b)는 각각의 현재 출력을 미리 결정된 수의 인수에 대한 이전의 총 출력으로 합산한다. 누산기 함수 프리미티브(33b)는 출력을 출력 벡터 버퍼(output vector buffer)(46)에 제공한다.
대안적으로 또는 추가로, 도 9에 도시된 바와 같이, 고정-함수 요소(32)는 비선형 변환(nonlinear transformation) 또는 부분 선형 근사(piecewise linear approximation)를 제공할 수 있다. 제1 단계(66a)에서, 입력 벡터 버퍼(44)로부터의 값은 보간에 사용되는 기본 값 및 하위 비트(low-order bit)(71)를 결정하는 데 사용되는 상위 비트(high-order bit)(69)로 분할된다. 상위 비트(69)는, 예를 들어 제조 및 구성시에 룩업 테이블(lookup table)(72)에 내장된 변환 함수에 따라 상위 비트(69)를 변환의 기본 값(base value)(73)으로 변환하는 기본 룩업 테이블(72)에 의해 수신된다. 상위 비트(69)는 또한 변환 함수에 대한 기울기 값(slope value)(75)을 생성하는 제2 룩업 테이블(second lookup table)(74)로 전송된다. 다음 단계(66b)에서 슬로프 값(75)에 하위 비트(71)가 곱해지고, 그 결과 보간 값(interpolated value)(77)은 출력-출력 벡터 버퍼(output-to-output vector buffer)(46)를 제공하기 위하여 후속 단계(66)에서 기본 값으로 합산된다.
일반적으로, 고정-함수 요소(32)는 프로그램 카운터를 제공하지 않으며 제어 흐름 명령(control-flow instructions)을 요구하거나 요구하지 않을 수 있다. 예를 들어, 제어 흐름(control-flow)은 함수 프리미티브(33)의 상호 접속(interconnection)(68)에 암시적일 수 있다. 대안적으로 또는 추가적으로, 제어 흐름은 예를 들어 내부적으로 분기 명령을 구현하고 물리적 상호 연결 중에서 선택하는 고정-함수 요소(32)에 의해 제공될 수 있다. 고속에서 발생할 수 있는 고정-함수 요소(32)를 통해 규칙적인 시퀀싱의 제약 내에서 피연산자가 이용 가능한 즉시 계산이 발생한다. 고정-함수 요소(32)는, 예를 들어 룩업 테이블(74)을 구성하는 데이터를 수신할 수 있지만 명령 유형에 따라 순서화 된 실행 단계 세트를 제공하는 명령을 수신하지 않는다.
스트림 프로세서(Stream Processor)
도 2 및 6을 참조하면, 고정-함수 요소(32)의 입력 벡터 버퍼(44) 및 출력 벡터 버퍼(46) 각각은 스트림 프로세서(38)의 제어 하에서 고정-함수 요소(32)에 의해 수행되는 처리에 비동기적으로 채워지거나 비워질 수 있는 선입 선출 버퍼를 제공한다. 따라서, 벡터 버퍼(vector buffer)는 독립적이지만 병렬적인 데이터 수집 및 데이터 처리를 제공한다. 일 실시예에서, 각각의 버퍼는 8, 64 개의 비트 워드, 즉 8x64 폭을 제공할 수 있고, 임의의 깊이, 예를 들어 10 보다 크고 선택적으로 100을 가질 수 있다. 입력 벡터 버퍼(44) 및 출력 벡터 버퍼(46)와 독립적이고 유사한 구성의 추가의 유사한 버퍼(51)는 간접로드를 위한 스트리밍 어드레스를 저장하기 위해 사용될 수 있고 필요시 저장한다.
본질적으로, 스트림 프로세서(38)는 일단 낮은 복잡성 범용 프로세서(30)로부터 프로그램 명령을 수신하면 메모리 시스템(16)과 다른 저장 위치 사이에서 자율적으로 데이터를 이동할 수 있는 상태 머신(state machine)을 제공한다. 일반적으로, 스트림 프로세서(38)는 입력 데이터를 메모리 시스템(16)으로부터 스크래치패드 메모리(scratchpad memory)(36)로 또는 스크래치패드 메모리(36)에서 입력 벡터 버퍼(44)로 이동시키거나, 또는 사전 정의된 패턴에 따라 출력 데이터를 스크래치 패드 메모리(36)로부터 메모리 시스템(16)으로, 또는 출력 벡터 버퍼(46)로부터 스크래치 패드 메모리(36) 또는 메모리 시스템(16)으로 이동할 수 있다. 출력 데이터를 스크래치패드 메모리(36)로부터 메모리 시스템(16)으로 이동할 수 있고, 또는 미리 정의된 패턴에 따라 출력 벡터 버퍼(46)로부터 스크래치패드 메모리(36) 또는 메모리 시스템(16)으로 전송될 수 있다. 이와 관련하여, 스트림 프로세서(38)는 3 개의 개별 회로, 하나는 메모리, 하나는 스크래치패드, 및 하나는 출력 포트에서 입력 포트로의 데이터의 재순환 및 일정한 값의 생성을 제어하기 위한 회로를 제공할 수 있다. 이들 3 개의 회로는 고속 동작을 위해 독립적으로(그러나 메모리 인터페이스(34)를 통한 동기화를 위해) 동작할 수 있다.
이제 도 3을 참조하면, 보다 구체적으로, 스트림 프로세서(stream processor)(38)는 스트림 디스패처(stream dispatcher)(40) 및 스트림 엔진(stream engine)(42)을 포함할 수 있다. 스트림 디스패처(40)는 낮은 복잡성 범용 프로세서(30)로부터 스트림 큐(stream queue)(50)에서 일련의 스트림 명령을 수신하며, 이들 명령은 고정-함수 요소(32)(도 2에 나타난)에 의해 처리될 데이터 요소를 얻기 위해 메모리 시스템(16)의 액세스 패턴을 정의한다. 이들 큐 된 스트림 명령은 궁극적으로 동시 실행을 위해 스트림 엔진(stream engin)(42) 내의 일련의 스트림 엔진(stream engine)(52) 중 하나에 전송될 것이다.
각각의 스트림 엔진(42)은 메모리 시스템(16)과 통신(데이터 판독 또는 기록)하기 위해 필요한 프로토콜을 처리할 수 있고, 고정-함수 요소(32)에 의한 처리를 위한 스트림 명령에 따라 이러한 데이터의 스트림을 얻기 위해 어드레스 세트를 계산하는 능력을 제공한다. 가속기(24)가(도 1에 도시된 바와 같이) L2 캐시(18)와 직접 통신할 수 있는 한, 스트림 엔진(42)은, 예를 들어 스트림이 페이지 경계를 넘을 때마다 낮은 복잡성 범용 프로세서(30)에 태그 무효화(tag invalidation)를 전송함으로써 메모리 일관성 문제를 처리할 수 있다. L1 캐시(14) 및 L2 캐시(18)는 가상화가 이용될 때 가상 어드레스를 사용하는 것으로 가정될 수 있다. MMU의 변환 색인 버퍼를 사용하여 필요한 어드레스 변환은 당 업계에서 이해되는 기술에 따라 달성된다.
스트림 큐(stream queue)(50)로부터의 스트림 명령은 스트림에 필요한 자원이 이용 가능하고 프로그램(program)(22)의 프로그램 순서에 따라 디스패처(dispatcher)(55)에 의해 스트림 엔진(stream engine)(52)으로 만 디스패치 될 것이다. 스트림에 필요한 중요 자원은 입력 벡터 버퍼(44) 및 출력 벡터 버퍼(46) 또는 스크래치패드 메모리(36)의 가용성을 포함한다.
디스패처(55)는 디스패처(55)에 의해 업데이트 될 수 있는 "채워진(taken)", "비어있는(free)" 또는 "진행중인 모든 요청"으로서 각각의 스트림 리소스(stream resource)의 상태를 제공하는 스코어 보드(scoreboard)(54)를 사용하여 리소스의 가용성을 결정한다. 스트림 명령이 스트림 엔진(stream engine)(52)에 등록될 때 중요한 자원은 "비어있는"에서 "채워진"으로 이동한다. 그런 다음 그들 명령의 주어진 스트림은 진행 도중에 리소스를 논리적으로 소유한다. 스트림이 끝나면, 스트림 엔진(42) 내의 연관된 스트림 엔진(52)은 자원이 자유 상태에 있음을 나타내도록 스코어 보드(54)를 업데이트하도록 디스패처(40)에 통지한다. "진행 상태의 모든 요청"은 메모리 스트림에 대한 모든 요청이 메모리 시스템(16)으로 완전히 전송되었지만 도착하지 않았음을 나타낸다. 이 상태는 2 개의 스트림 엔진(52)이 추가적인 효율을 위해 중첩 구성에서 동일한 중요 자원을 사용할 수 있게 하는 다른 충돌 스트림의 스케줄링을 허용한다.
스트림 프로세서(38)는 또한 낮은 복잡성 범용 프로세서(30)에 의해 발행될 수 있는 배리어 명령(barrier instruction)에 따라 스트림을 스트림 엔진(52)으로 전달하는 것을 제어할 수 있다. 배리어 명령어는 배리어 명령어에 의해 식별된 주어진 스트림이 완료될 때까지 스트림 프로세서에 새로운 스트림 명령어의 발행을 방지한다. 그러므로, 배리어 명령은 고정-함수 요소(32)에 의해 수행된 계산의 적절한 실행 순서를 보장하는 방법을 제공한다.
일반적으로, 스트림 명령은: 낮은 복잡성 범용 프로세서(30) 또는 높은 복잡성 범용 프로세서(12)를 포함하지 않고 고정-함수 요소(32)에 또는 로부터 데이터의 스트림을 제공하기 위한 스트림 명령; 및 이하에서 논의되는 바와 같이 스트림 프로세서(38)에 의한 데이터 액세스의 어느 정도의 직렬화(serialization)를 강제하기 위해 사용되는 배리어 명령을 포함할 것이다. 낮은 복잡성 범용 프로세서(30)에 의해 스트림 프로세서(38)에 제공되는 이들 스트림 명령어(표 1에 도시)의 사례는 일반적으로 다음과 같이 데이터 소스, 목적지 데이터 및 데이터 패턴을 식별한다:
사례 스트림 명령(Example Stream Instructions)
명령 이름(Command Name) 파라미터(Parameters) 기술(Description)
SD_Mem_Scr 소스 메모리 어드레스, 액세스 크기, 스트라이드 길이(Stride Length), 스트라이드 수, 목적지 스크래치패드 어드레스. 표시된 액세스 패턴을 사용하여 메모리 시스템(16)에서 스크래치 패드 메모리(36)로 판독.
SD_Scr_Port 소스 스크래치패드 어드레스, 액세스 크기, 스트라이드 길이, 스트라이드 수, 입력 포트 수. 표시된 패턴을 사용하여 스크래치 패드 메모리(36)로부터 지정된 입력 벡터 버퍼(44)로 판독.
SD_Mem_Port 소스 메모리 어드레스, 액세스 크기, 스트라이드 길이, 스트라이드 수, 입력 포트 수. 지시된 패턴을 사용하여 메모리 시스템(16)으로부터 지정된 입력 벡터 버퍼(44)로 판독.
SD_Const_Port 상수 값, 요소의 수, 목적지 포트 넘버. 일련의 상수 값을 지정 입력 벡터 버퍼(44)로 전송.
SD_Chuck_Port 요소의 수, 소스 포트 넘버. 지정된 전송 벡터 버퍼(48)의 큐(queue)(50)에서 정의된 값의 시리즈를 배출.
SD_Port_Port 소스 포트 넘버, 요소의수, 목적지 포트 넘버. 지정된 전송 벡터 버퍼(48)에서 지정된 입력 벡터 버퍼(44)로 정의된 값의 시리즈를 재순환.
SD_Port_Scr 소스 포트 넘버, 요소의수, 목적지 스크래치패드 어드레스. 지정된 전송 벡터 버퍼(48)에서 스크래치 패드 메모리(36)로 정의된 값의 시리즈를 기록.
SD_Port_Mem 소스 포트 넘버, 액세스크기, 스트라이드 길이, 스트라이드의 수, 목적지 메모리 어드레스. 지시된 패턴을 사용하여 지정된 전송 벡터 버퍼(48)로부터 메모리 시스템(16)으로 기록
SD_IndPort_Port 간접 포트 넘버, 오프셋어드레스, 목적지 포트 넘버 지정된 목적지 포트에 저장하기 위해 지정된 간접 전송 벡터 버퍼(51)의 어드레스 데이터에 기초하여 메모리 시스템(16)으로부터의 간접 로드
SD_IndPort_Mem 간접 포트 넘버, 오프셋어드레스, 목적지 포트 넘버 지정된 출력 포트에서 간접 포트의 어드레스에 기초하여 메모리 시스템(16)에 간접 저장
이들 명령어는 후술하는 바와 같이, 지정된 패턴을 사용하여 자율적으로 저장 위치 사이에서 데이터를 전송한다.
스트림 엔진(52)에 의한 데이터의 간접 어드레싱은 어드레스 값으로서 저장된 데이터(예를 들어, 벡터 버퍼(51)에)를 사용하여 가능하다. 간접 어드레싱에서, 예를 들어 스트리밍 패턴으로부터의 데이터는 고정-함수 요소(32)에 의해 동작되는 추가적인 데이터를 얻기 위해 어드레스로서 사용된다. 이 간접 어드레싱은, 예를 들어 희소 행렬의 행에 액세스 할 때 유용한 포인터 효과이다. 스트림 프로세서(38)는 2 개의 스트림, 즉 연속적이거나 스트라이드 포인터 패턴(strided pattern of pointer)에 액세스하기 위한 첫 번째 스트림 및 메모리 시스템(16)에서 해당 포인터(pointer)의 값을 로드 하는 후속 스트림을 함께 엮음으로써 간접 액세스를 용이하게 하는 능력을 제공할 수 있고, 이들을 재구성 가능한 고정-함수 요소(32)에 전달할 수 있다. 추가 명령어가 상수 값을 생성(메모리에서 값을 로드 하지 않고)하고 사용하지 않는 출력 값을 폐기(메모리가 아닌 메모리 영역에 로드 하는 것과 반대로)하기 위하여 제공된다.
일반적으로, 가속기의 명령 세트 구조 및 가속기의 다른 구성 요소를 제어하기 위한 낮은 복잡성 범용 프로세서(30)에 의해 최소 처리로 사용되는 이들 명령의 데이터의 일부로서, 이들 명령어 각각은 높은 복잡성 범용 프로세서(12)에 의해 선택적으로 직접 발행될 수 있다.
상기 명령으로부터의 데이터를 사용하여, 도 10을 참조하면, 스트림 프로세서(38)는 미리 정의된 메모리 액세스 패턴을 사용하여 저장 위치 사이에서 데이터를 자동 로딩 또는 기록하기 위한 상태 머신(state machine)을 제공한다. 가장 단순한 패턴은 명령에 의해 지정된 시작 어드레스(82)와 종료 어드레스(84) 사이의 모든 메모리 어드레스를 순차적으로 판독(또는 기록)하는 선형 패턴(80)이다. 이 패턴은 스트라이드 길이(stride length)를 0으로 설정하여 표시된다. 시작 어드레스는 위의 명령에서 판독을 위한 소스 어드레스와 기록을 위한 목적지 어드레스로 지정되며, 반면에 종료 어드레스는 실제 종료 어드레스 또는 계산에 필요한 데이터를 제공하고 어드레스를 종료함으로써 표시되며, 예를 들어, 소스가 액세스 크기의 포트 또는 제품인 경우 요소의 수는 소스가 메모리 또는 스크래치 패드 인 경우 시작 어드레스에 추가된 스트라이드의 수를 스트라이드 길이(stride length)에 곱한 것이다.
또한, 스트림 프로세서(38)는 액세스 크기에 의해 정의된 액세스 부분(access portions)(87) 사이의 어드레스에서 갭 또는 스트라이드(86)를 기술하는 스트라이드 길이를 0이 아닌 값으로 설정함으로써 스트라이드 패턴(85)을 사용하도록 프로그래밍 될 수 있다.
유사하게, 중첩 축 패턴(overlapped axis pattern)(88)은 오버랩 패턴을 신호하는 스트라이드 크기보다 큰 상기 액세스 사이즈를 설정하여 호출될 수 있다. 스트라이드의 수에 의해 반복이 제공되면서 스트라이드 길이를 0으로 설정함으로써 반복 패턴(89)이 용이하게 얻어진다.
본원에 사용된 바와 같이, 미리 정의된 메모리 액세스 패턴은 패턴 유형 및 구분자 값을 제공하는 개별 패턴 명령 세트에 의해 정의될 수 있는 제한된 수의 패턴을 의미하고, 여기서 액세스 되는 데이터에 대한 계산의 함수 인 메모리 액세스 패턴과 달리 메모리 액세스가 수행되어야 하는 계산에 앞서 패턴이 정의될 수 있다. 본 명세서에서 사용되는 자율적(autonomous)은 프로세서(processor)(12 또는 30)에 의한 추가적인 가이드가 필요하지 않음을 의미한다.
위에서 언급했듯이, 낮은 복잡성 범용 프로세서(30)는 또한 스트림 프로세서(38)에 배리어 명령을 제공할 수 있고, 이는 데이터 저장 자원과 관련된 특정 이전 명령이 완료될 때까지 새로운 메모리 액세스 명령의 발행을 차단하는 그러한 명령이다. 예를 들어, 스크래치패드 메모리(scratchpad memory)(36)에 대한 기록과 관련된 배리어 명령(상기 표 2에 도시됨)은 배리어 명령 전에 스크래치패드 메모리(36)에 대한 모든 기록이 완료될 때까지 스크래치패드 메모리(36)에 대한 후속 기록을 차단할 것이다. 배리어는 또한 그들이 만족할 때 이전 스트림의 완료를 나타내는 정도로 낮은 복잡성 범용 프로세서(30)에 계산의 완료를 알리는 데 사용될 수 있다.
사례 배리어 명령(Barrier Instructions)
명령 이름(Command Name) 파라미터(Parameters) 기술(Description)
SD_Bar_Scr_Rd - 스크래치패드 판독을 위한 배리어
SD_Bar_Scr_Wr - 스크래치패드 기록을 위한 배리어
SD_Bar_All - 모든 명령 완료를 위해기다리는 배리어
배리어 명령이 없으면 모든 스트림이 동시에 실행될 수 있다는 것이 이해될 것이다. 따라서, 두 스트림이 동일한 스크래치 패드 또는 메모리 어드레스의 판독 및 기록을 명령하면, 해당 작업의 의미는 정의되지 않는다. 배리어 명령은 메모리 의존성을 강제할 수 있으며 컴파일러에 의해 구현될 수 있고 스트림 명령어로 제공될 수 있다. 이것은 리소스 경합과 무관하다.
낮은 복잡성 범용 프로세서(30)는 또한 본 기술 분야에서 일반적으로 이해되는 바와 같이 컴파일러에 의해 사용하기 위한 고정-함수 요소(32) 및 버퍼의 깊이(depth of buffer)(50 및 50')의 다수 및 유형을 포함하는 컴퓨터 가속기(24)의 하드웨어 파라미터를 노출시킬 수 있다.
이 아키텍처에서 도 4를 참조하면, 고정-함수 요소(32)는 단일 스트림 프로세서(single stream processor)(38)와 연관될 것이고, 역으로;
그러나, 본 발명은 가속기(24)가 구성 멀티플렉서(configuration multiplexer)(56) 및 디멀티플렉서(demultiplexer)(58)를 사용하는 구성 단계에서, 예를 들어 제조시 또는 구성 단계에서 설정되는 상이한 고정-함수 요소(32) 중에서 선택하도록 구성될 수 있음을 고려하고, 예를 들어 시스템 드라이버에 의해, 고정-함수 요소(32) 중 하나를 선택하고 다른 하나는 유휴 상태로 두거나 다른 스트림 프로세서에 의해 사용되도록 한다. 다른 측면에서, 이 실시예는 도 2와 관련하여 설명된 것과 동일하게 동작한다.
이 원리는 도 5에 도시된 바와 같이 고정-함수 요소(32)를, 예를 들어 풀(60) 내의 임의의 고정-함수 요소(32)는 크로스바 스위치(62)에 의해 내부 고정-함수 요소(32)를 포함하지 않는 임의의 다른 가속기(24)에 연결될 수 있도록 연결될 수 있는 별도의 풀(60)에 풀링함으로써 확장될 수 있다. 이러한 방식으로, 다양한 상이한 함수 유닛의 개선된 이용은 가속기(24) 사이에 이들을 자유롭게 할당함으로써 가질 수 있다. 다시, 이 구성은 사용 전 및 구성이 본질적으로 도 2의 구조로서 동작한 후에 공장에서 또는 가속기(24)의 구성 중에 달성될 수 있다.
특정 용어는 본 명세서에서 단지 참조의 목적으로 사용되므로 제한하려는 의도는 아니다. 예를 들어, "상부", "하부", "위"및 "아래"와 같은 용어는 참조되는 도면에서의 방향을 지칭한다. "전면", "후면", "후면", "하단"및 "측면"과 같은 용어는 텍스트를 참조하여 명확하지만 일관성 있는 임의의 참조 프레임 내에서 구성 요소의 일부 방향 및 논의중인 구성 요소를 설명하는 관련 도면을 설명한다. 이러한 용어는 상기 구체적으로 언급된 단어, 그 파생어 및 유사한 수입 단어를 포함할 수 있다. 유사하게, 용어 "제1", "제2"및 구조를 지칭하는 다른 이러한 수치적 용어는 문맥에 의해 명확하게 지시되지 않는 한 순서 또는 순서를 암시하지 않는다.
"낮은 복잡성" 및 "높은 복잡성"이라는 용어는 절대적인 복잡성이 아니라 낮은 복잡성 및 높은 복잡성 프로세서의 상대적 복잡성만을 지칭한다. "고정 프로그램 함수 요소(ixed program functional element)"라는 용어는 가속기와 관련된 범용 프로세서에 의해 함수가 변경되지 않는 숫자 결과를 생성하기 위해 그 값에 대해 함수를 실행하기 위해 숫자 값을 수신하는 함수 요소를 지칭한다.
본 개시 내용 및 예시적인 실시예의 요소 또는 특징을 도입할 때, 물품 "하나", "한", "그" 및 "상기"는 그러한 요소 또는 특징 중 하나 이상이 존재 함을 의미하도록 의도된다. "포함하는(comprising)", "포함하는(including)" 및 "갖는(having)"이라는 용어는 포괄적인 것으로 의도되며 구체적으로 언급된 것 이외의 추가 요소 또는 특징이 존재할 수 있음을 의미한다. 본 명세서에 기술된 방법 단계, 프로세스 및 동작은 성능 순서로 구체적으로 식별되지 않는 한, 논의되거나 도시된 특정 순서로 그들의 성능을 반드시 요구하는 것으로 해석되지 않아야 한다는 것이 또한 이해되어야 한다. 또한 추가적인 또는 대안적인 단계가 이용될 수 있음을 이해해야 한다.
마이크로 컨트롤러에 대한 언급은 폰노이만(VonNeuman) 아키텍쳐를 포함하여 여기에 설명된 함수를 실행할 수 있는 임의의 회로를 포함하는 것으로 이해되어야 한다.
본 발명은 여기에 포함된 실시예 및 예시에 제한되지 않으며 청구 범위는 실시예의 일부 및 후속하는 청구범위의 범위 이내의 다른 실시예의 요소의 조합을 포함하는 실시예의 변형된 형태를 포함하는 것으로 이해되어야 한다. 특허 및 비 특허 공보를 포함하여 본원에 기술된 모든 공보는 그 전문이 본원에 참조로 포함된다.

Claims (19)

  1. 컴퓨터 가속기 아키텍처에 있어서,
    (1) 높은 복잡성 범용 프로세서로부터 스트림 명령을 수신하도록 적용된 낮은 복잡성 범용 프로세서 - 상기 스트림 명령은 메모리와 교환될 다수의 데이터 요소의 논리 스트림을 기술하는 -;
    (2) 논리 스트림의 결과적인 출력 데이터 요소를 제공하기 위해 각각의 입력 데이터 요소의 이용 가능성에 의해 개시되는 바와 같이, 논리 스트림의 연속적인 입력 데이터 요소를 처리하는 고정 프로그램 함수 요소; 및
    (3) 스트림 명령에 따라 메모리로부터 논리 스트림의 입력 데이터 요소를 자율적으로 판독하고 스트림 명령에 따라 메모리에 논리 스트림의 결과적인 출력 데이터 요소를 메모리에 자율적으로 기록하는 간단한 범용 프로세서로부터 스트림 명령을 수신하는 스트림 프로세서
    를 포함하고; 및
    단지 단일 스트림 프로세서 및 단지 단일 함수 요소로 구성된 쌍은 주어진 논리 스트림의 데이터 요소를 상호 통신하도록 동작하는
    장치.
  2. 제1항에 있어서,
    상기 고정 프로그램 함수 요소는,
    프로그램 카운터를 포함하지 않는
    장치.
  3. 제2항에 있어서,
    상기 고정 프로그램 함수 요소는,
    맵-축소 함수를 제공하는
    장치.
  4. 제3항에 있어서,
    상기 맵-축소 함수는,
    곱셈과 절대 차이로 구성된 그룹에서 선택된 맵핑 함수를 제공하고 및
    최대, 최소 및 덧셈으로 구성된 그룹에서 선택된 축소 함수를 제공하는
    장치.
  5. 제2항에 있어서,
    상기 고정 프로그램 함수 요소는,
    입력 인수의 쌍의 곱의 총합인 적어도 하나의 출력을 갖는 곱하기 누적 함수 인
    장치. 
  6. 제2항에 있어서,
    상기 고정 프로그램 함수 요소는 보간된 값에 합산된 기본 값인 출력을 갖는 비선형 변환 함수고,
    상기 기본 값은 입력 인수의 최상위 비트에서 첫 번째 룩업 테이블에서 얻어지고, 상기 보간된 값은 입력 인수의 최상위 비트와 입력 인수의 최하위 비트를 곱한 제2 룩업 테이블로부터 얻은 기울기 값 인
    장치.
  7. 제1항에 있어서,
    한 번에 하나의 함수 요소를 상기 스트림 프로세서에 할당하는 스위치 및 다수의 함수 요소
    를 더 포함하는
    장치.
  8. 제7항에 있어서,
    단일 함수 요소를 단일 스트림 프로세서에 전환 가능하게 할당하는 다수의 함수 요소 및 스위치 및 다수의 스트림 프로세서
    를 더 포함하는
    장치.
  9. 제1항에 있어서,
    함수 요소는,
    적어도 32 개 비트 인수를 처리하는 것을 제공하는
    장치.
  10. 제9항에 있어서,
    함수 요소는,
    개별 데이터 단어를 함께 연결하고 그것을 인수로서 처리함으로써 함수 요소의 인수 길이보다 작은 길이를 갖는 개별 데이터 단어를 병렬로 처리할 수 있는
    장치.
  11. 제1항에 있어서,
    상기 스트림 프로세서는,
    다수의 스트림을 주어진 고정 프로그램 함수 요소와 동시에 교환하는
    장치.
  12. 제1항에 있어서,
    단순 범용 프로세서로부터 스트림 프로세서로의 스트림 명령은,
    함수 요소의 동작과 관련하여 비동기식으로 수신될 수 있고
    메모리에 저장된 다수의 입력 값의 자율적인 판독 또는 상이한 미리 정의된 메모리 액세스 패턴에 따라 컴퓨터 가속기로부터 다수의 출력 값의 자율적인 기록을 제공할 수 있는
    장치.
  13. 제11항에 있어서,
    상기 단순 범용 프로세서는,
    스트림 프로세서 및 적어도 하나의 함수 요소의 개입 없이 제1 프로세서로 데이터를 리턴 하기 위해 명령 및 데이터에 대응하는 논리 및 산술 명령을 실행하도록 제1 프로세서로부터 명령어 및 데이터를 수신하도록 더 적용된
    장치.
  14. 제1항에 있어서,
    스트림 프로세서는,
    2 개의 메모리 어드레스 사이의 연속적인 어드레스의 선형 액세스 패턴 및 두 개의 메모리 어드레스 사이에서 규칙적으로 이격된 불연속적인 어드레스의 스트라이드 액세스 패턴을 포함하는 미리 정의된 메모리 액세스 패턴을 제공하는
    장치.
  15. 컴퓨터 아키텍처에 있어서,
    (1) 명령을 수신하고 데이터를 판독하고 기록하는 메모리와 통신하는 제1 범용 프로세서;
    (2) 제1 범용 프로세서보다 단순하고 제1 범용 프로세서로부터 스트림 명령을 수신하도록 적용되는 제2 범용 프로세서 - 상기 스트림 명령은 메모리와 교환될 다수의 데이터 요소의 논리 스트림을 기술하는 -;

    (3) 논리 스트림의 결과적인 출력 데이터 요소를 제공하기 위해 각각의 입력 데이터 요소의 이용 가능성에 의해 개시되는 바와 같이, 논리 스트림의 연속적인 입력 데이터 요소 각각을 순차적으로 처리하는 복수의 고정 프로그램 함수 요소;
    (4) 상기 스트림 명령에 따라 메모리로부터 논리 스트림의 입력 데이터 요소를 자율적으로 판독하고 스트림 명령에 따라 메모리에 논리 스트림의 결과적인 출력 데이터 요소를 자율적으로 기록하기 위해 단순 범용 프로세서로부터 스트림 명령을 수신하는 복수의 스트림 프로세서; 및
    (5) 단일 함수 프로세서와 단일 스트림 프로세서를 쌍으로하는 전자 제어식 스위치 - 상기 쌍은 주어진 논리 스트림의 데이터 요소를 상호 통신하도록 동작하는
    장치.
  16. 제15항에 있어서,
    상기 고정 프로그램 함수 요소는,
    프로그램 카운터를 포함하지 않는
    장치.
  17. 제16항에 있어서,
    고정 프로그램 함수 요소는,
    제2 합의 쌍의 제1 합인 적어도 하나의 출력을 갖는 곱하기 덧셈-축소 함수를 제공하는 - 각각의 제2 합은 곱의 쌍의 합이고, 곱은 입력 인수의 쌍의 곱 인 -
    장치.
  18. 제16항에 있어서,
    상기 고정 프로그램 함수 요소는,
    입력 인수의 쌍의 곱의 총합인 적어도 하나의 출력을 갖는 곱하기 누적 함수 인
    장치. 
  19. 제16항에 있어서,
    상기 고정 프로그램 함수 요소는 보간된 값에 합산된 기본 값인 출력을 갖는 비선형 변환 함수고,
    상기 기본 값은 입력 인수의 최상위 비트에서 첫 번째 룩업 테이블에서 얻어지고, 상기 보간된 값은 입력 인수의 최상위 비트와 입력 인수의 최하위 비트를 곱한 제2 룩업 테이블로부터 얻은 기울기 값 인
    장치.

KR1020197038595A 2017-06-28 2018-06-06 사전 프로그래밍 된 함수를 갖는 고속 컴퓨터 가속기 KR102349138B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/635,864 2017-06-28
US15/635,864 US11151077B2 (en) 2017-06-28 2017-06-28 Computer architecture with fixed program dataflow elements and stream processor
PCT/US2018/036290 WO2019005443A1 (en) 2017-06-28 2018-06-06 HIGH-SPEED COMPUTER ACCELERATOR WITH PRE-PROGRAMMED FUNCTIONS

Publications (2)

Publication Number Publication Date
KR20200013715A true KR20200013715A (ko) 2020-02-07
KR102349138B1 KR102349138B1 (ko) 2022-01-10

Family

ID=64738796

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197038595A KR102349138B1 (ko) 2017-06-28 2018-06-06 사전 프로그래밍 된 함수를 갖는 고속 컴퓨터 가속기

Country Status (4)

Country Link
US (1) US11151077B2 (ko)
KR (1) KR102349138B1 (ko)
CN (1) CN110799955B (ko)
WO (1) WO2019005443A1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11048661B2 (en) 2018-04-16 2021-06-29 Simple Machines Inc. Systems and methods for stream-dataflow acceleration wherein a delay is implemented so as to equalize arrival times of data packets at a destination functional unit
US11144282B2 (en) * 2019-01-16 2021-10-12 Mediatek Inc. Mathematical accelerator for artificial intelligence applications
US11249766B1 (en) 2020-09-14 2022-02-15 Apple Inc. Coprocessor synchronizing instruction suppression

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150261528A1 (en) * 2014-03-14 2015-09-17 Wisconsin Alumni Research Foundation Computer accelerator system with improved efficiency
US20150268963A1 (en) * 2014-03-23 2015-09-24 Technion Research & Development Foundation Ltd. Execution of data-parallel programs on coarse-grained reconfigurable architecture hardware
US20170024167A1 (en) * 2015-07-21 2017-01-26 BigStream Solutions, Inc. Systems and methods for in-line stream processing of distributed dataflow based computations

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5590345A (en) * 1990-11-13 1996-12-31 International Business Machines Corporation Advanced parallel array processor(APAP)
JP2557175B2 (ja) * 1992-05-22 1996-11-27 インターナショナル・ビジネス・マシーンズ・コーポレイション コンピュータ・システム
US5822553A (en) * 1996-03-13 1998-10-13 Diamond Multimedia Systems, Inc. Multiple parallel digital data stream channel controller architecture
US5933650A (en) * 1997-10-09 1999-08-03 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
US6836289B2 (en) * 1999-12-20 2004-12-28 Texas Instruments Incorporated Digital still camera architecture with red and blue interpolation using green as weighting factors
US20030028751A1 (en) * 2001-08-03 2003-02-06 Mcdonald Robert G. Modular accelerator framework
US7920584B2 (en) 2005-05-04 2011-04-05 Arm Limited Data processing system
CN101578590A (zh) * 2005-08-23 2009-11-11 Slt逻辑有限公司 高速网络中用于可重新配置的位流处理的全协议引擎
US20080244238A1 (en) 2006-09-01 2008-10-02 Bogdan Mitu Stream processing accelerator
US8122078B2 (en) 2006-10-06 2012-02-21 Calos Fund, LLC Processor with enhanced combined-arithmetic capability
US8447957B1 (en) * 2006-11-14 2013-05-21 Xilinx, Inc. Coprocessor interface architecture and methods of operating the same
US8726289B2 (en) 2008-02-22 2014-05-13 International Business Machines Corporation Streaming attachment of hardware accelerators to computer systems
US8181003B2 (en) 2008-05-29 2012-05-15 Axis Semiconductor, Inc. Instruction set design, control and communication in programmable microprocessor cores and the like
US10078620B2 (en) 2011-05-27 2018-09-18 New York University Runtime reconfigurable dataflow processor with multi-port memory access module
WO2013167973A2 (en) * 2012-05-10 2013-11-14 Marvell World Trade Ltd. Hybrid dataflow processor
US9514094B2 (en) * 2012-07-10 2016-12-06 Maxeler Technologies Ltd Processing data sets using dedicated logic units to prevent data collision in a pipelined stream processor

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150261528A1 (en) * 2014-03-14 2015-09-17 Wisconsin Alumni Research Foundation Computer accelerator system with improved efficiency
US20150268963A1 (en) * 2014-03-23 2015-09-24 Technion Research & Development Foundation Ltd. Execution of data-parallel programs on coarse-grained reconfigurable architecture hardware
US20170024167A1 (en) * 2015-07-21 2017-01-26 BigStream Solutions, Inc. Systems and methods for in-line stream processing of distributed dataflow based computations

Also Published As

Publication number Publication date
CN110799955A (zh) 2020-02-14
CN110799955B (zh) 2023-10-03
KR102349138B1 (ko) 2022-01-10
US20190004995A1 (en) 2019-01-03
WO2019005443A1 (en) 2019-01-03
US11151077B2 (en) 2021-10-19

Similar Documents

Publication Publication Date Title
CN107679620B (zh) 人工神经网络处理装置
CN107704922B (zh) 人工神经网络处理装置
Norrie et al. The design process for Google's training chips: TPUv2 and TPUv3
CN107679621B (zh) 人工神经网络处理装置
CN111095242B (zh) 向量计算单元
CN110214309B (zh) 可重新配置专用计算机加速器
US20210216318A1 (en) Vector Processor Architectures
CN103262002B (zh) 优化系统调用请求通信
JP6905573B2 (ja) 計算装置と計算方法
KR102349138B1 (ko) 사전 프로그래밍 된 함수를 갖는 고속 컴퓨터 가속기
CN103226463A (zh) 用于使用预解码数据调度指令的方法和装置
WO2015044696A2 (en) Computer architecture and processing method
JP2022169552A (ja) オンチップの計算ネットワーク
CN110991619A (zh) 神经网络处理器、芯片和电子设备
US11314674B2 (en) Direct memory access architecture with multi-level multi-striding
CN111047036B (zh) 神经网络处理器、芯片和电子设备
KR20200075769A (ko) 텐서 데이터를 액세스하는 방법 및 장치
EP3762831A1 (en) A machine perception and dense algorithm integrated circuit
US11276223B2 (en) Merged data path for triangle and box intersection test in ray tracing
US20240054081A1 (en) Controlling access to a memory shared by a cluster of multiple processing elements
WO2019173104A1 (en) Ai accelerator virtualization
EP4296900A1 (en) Acceleration of 1x1 convolutions in convolutional neural networks
US20230195836A1 (en) One-dimensional computational unit for an integrated circuit
EP1570371A1 (en) Data processing system having a cartesian controller
KR20230063791A (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