KR20210027517A - 컴퓨터 이미징 파이프라인 - Google Patents

컴퓨터 이미징 파이프라인 Download PDF

Info

Publication number
KR20210027517A
KR20210027517A KR1020217006168A KR20217006168A KR20210027517A KR 20210027517 A KR20210027517 A KR 20210027517A KR 1020217006168 A KR1020217006168 A KR 1020217006168A KR 20217006168 A KR20217006168 A KR 20217006168A KR 20210027517 A KR20210027517 A KR 20210027517A
Authority
KR
South Korea
Prior art keywords
memory
processing
access
slice
processing elements
Prior art date
Application number
KR1020217006168A
Other languages
English (en)
Other versions
KR102340003B1 (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
Priority claimed from GBGB1314263.3A external-priority patent/GB201314263D0/en
Priority claimed from ROA201300812A external-priority patent/RO129804A0/ro
Application filed by 다비드 몰로니, 오비디우 안드레이 베사, 브렌든 바리, 코맥 브릭, 리차드 리치몬드, 다비드 도노호 filed Critical 다비드 몰로니
Priority to KR1020217040695A priority Critical patent/KR102553932B1/ko
Publication of KR20210027517A publication Critical patent/KR20210027517A/ko
Application granted granted Critical
Publication of KR102340003B1 publication Critical patent/KR102340003B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0842Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
    • 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
    • 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/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
    • 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/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5044Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/505Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • G09G5/363Graphics controllers
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • G09G5/39Control of the bit-mapped memory
    • G09G5/395Arrangements specially adapted for transferring the contents of the bit-mapped memory to the screen
    • G09G5/397Arrangements specially adapted for transferring the contents of two or more bit-mapped memories to the screen simultaneously, e.g. for mixing or overlay
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/501Performance criteria
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/503Resource availability
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0631Configuration or reconfiguration of storage systems by allocating resources to storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2360/00Aspects of the architecture of display systems
    • G09G2360/08Power processing, i.e. workload management for processors involved in display operations, such as CPUs or GPUs
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2360/00Aspects of the architecture of display systems
    • G09G2360/12Frame memory handling
    • G09G2360/122Tiling
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2360/00Aspects of the architecture of display systems
    • G09G2360/12Frame memory handling
    • G09G2360/126The frame memory having additional data ports, not inclusive of standard details of the output serial port of a VRAM

Abstract

본 출원은 일반적으로는 병렬 프로세싱 디바이스에 관한 것이다. 병렬 프로세싱 디바이스는 복수의 프로세싱 엘리먼트, 메모리 서브시스템 및 상호접속 시스템을 포함할 수 있다. 메모리 서브시스템은 복수의 메모리 슬라이스를 포함할 수 있고, 그 중 적어도 하나는 복수의 프로세싱 엘리먼트 중 하나와 연관되고 복수의 랜덤 액세스 메모리(RAM) 타일을 포함하며, 각각의 타일은 개개의 판독 및 기록 포트를 갖는다. 상호접속 시스템은 복수의 프로세싱 엘리먼트와 메모리 서브시스템을 결합하도록 구성된다. 상호접속 시스템은 로컬 상호접속부 및 글로벌 상호접속부를 포함한다.

Description

컴퓨터 이미징 파이프라인{COMPUTATIONAL IMAGING PIPELINE}
관련 출원에 대한 상호 참조
본 출원은, 2013년 11월 6일자로 제출된 루마니아 특허 출원 OSIM 등록 A/00812(발명의 명칭: "APPARATUS, SYSTEMS, AND METHODS FOR PROVIDING CONFIGURABLE AND COMPOSABLE COMPUTATIONAL IMAGING PIPELINE") 및 2013년 8월 8일자로 제출된 영국 특허 출원 제GB1314263.3호(발명의 명칭: "CONFIGURABLE AND COMPOSABLE COMPUTATIONAL IMAGING PIPELINE")에 관한 우선권을 주장하는, 2013년 11월 18일자로 제출된 미국 특허 출원 제14/082,396호(발명의 명칭: "APPARATUS, SYSTEMS, AND METHODS FOR PROVIDING COMPUTATIONAL IMAGING PIPELINE")의 앞선 우선권 일자의 이익을 주장한다. 본 출원은 또한, 2013년 11월 6일자로 제출된 루마니아 특허 출원 OSIM 등록 A/00812(발명의 명칭: "APPARATUS, SYSTEMS, AND METHODS FOR PROVIDING CONFIGURABLE AND COMPOSABLE COMPUTATIONAL IMAGING PIPELINE") 및 2013년 8월 8일자로 제출된 영국 특허 출원 제GB1314263.3호(발명의 명칭: "CONFIGURABLE AND COMPOSABLE COMPUTATIONAL IMAGING PIPELINE")에 관한 우선권을 주장하는, 2013년 11월 18일자로 제출된 미국 특허 출원 제14/082,645호(발명의 명칭: "APPARATUS, SYSTEMS, AND METHODS FOR PROVIDING CONFIGURABLE COMPUTATIONAL IMAGING PIPELINE")의 앞선 우선권 일자의 이익을 주장한다. 이들 기초 출원들 중 각각의 출원은 그들 전문이 참고로 본 명세서에 편입된다.
기술분야
본 출원은 일반적으로는 이미지 및 비디오 프로세싱에 적합한 프로세싱 디바이스에 관한 것이다.
컴퓨터 이미지 및 비디오 프로세싱은, 초당 높은 수백 메가픽셀에서의 취합 픽셀 레이트가 흔하면서, 이미지 해상도 및 프레임 레이트가 높으므로 메모리 대역폭의 관점에서 매우 요구가 많아지고 있다. 더욱, 이러한 분야는 비교적 초창기이므로, 알고리즘이 끊임없이 유동하고 있다. 그래서, 알고리즘에 대한 변경은 하드웨어가 적응할 수 없음을 의미하므로 그것들을 하드웨어에서 전적으로 구현하는 것은 어렵다. 동시에, 프로세서 단독으로의 구현에 의존하는 소프트웨어 접근법은 비현실적이다. 따라서, 일반적으로는, 프로세서 및 하드웨어 가속기를 수용할 수 있는, 융통성 있는 아키텍처/기반구조를 제공하는 것이 바람직하다.
동시에, 그러한 비디오 및 이미지 프로세싱에 대한 수요는, 전력 소모가 핵심 고려사항인, 휴대용 전자 디바이스, 예를 들어 태블릿 컴퓨터 및 모바일 디바이스로부터 크게 다가오고 있다. 결과로서, 프로그래밍 가능한 멀티코어 프로세서 및 하드웨어 가속기를 그것들이 휴대용 전자 디바이스에 필요한 저전력 레벨로 지속적 데이터 전송률을 전달할 수 있게 하는 높은 대역폭 메모리 서브시스템과 결합할 융통성 있는 기반구조에 대한 일반적 필요성이 있다.
개시된 주제 사항에 의하면, 설정가능하고 구성가능한 컴퓨터 이미징 파이프라인을 제공하기 위한 장치, 시스템 및 방법이 제공된다.
개시된 주제 사항은 병렬 프로세싱 디바이스를 포함한다. 프로세싱 디바이스는 명령어들을 실행하도록 각각 구성된 복수의 프로세싱 엘리먼트 및 복수의 프로세싱 엘리먼트 중 하나와 연관된 제1 메모리 슬라이스를 포함하는 복수의 메모리 슬라이스를 포함하는 메모리 서브시스템을 포함한다. 제1 메모리 슬라이스는 개개의 판독 및 기록 포트를 각각 갖는 복수의 랜덤 액세스 메모리(RAM) 타일을 포함한다. 병렬 프로세싱 디바이스는 복수의 프로세싱 엘리먼트와 메모리 서브시스템을 결합하도록 구성된 상호 접속 시스템을 포함할 수 있다. 상호접속 시스템은 복수의 프로세싱 엘리먼트 중 하나와 제1 메모리 슬라이스를 결합하도록 구성된 로컬 상호접속부, 및 복수의 프로세싱 엘리먼트 중 나머지와 상기 제1 메모리 슬라이스를 결합하도록 구성된 글로벌 상호접속부를 포함할 수 있다.
일부 실시예에 있어서, 복수의 RAM 타일 중 하나는 중재 블록과 연관되되, 중재 블록은 복수의 프로세싱 엘리먼트 중 하나로부터 메모리 액세스 요청들을 수신하고, 복수의 프로세싱 엘리먼트 중 하나에, 복수의 RAM 타일 중 하나로의 액세스를 승인하도록 구성된다.
일부 실시예에 있어서, 중재 블록은 라운드-로빈 방식으로 복수의 RAM 타일 중 하나로의 액세스를 승인하도록 구성된다.
일부 실시예에 있어서, 중재 블록은 복수의 RAM 타일 중 하나로의 메모리 액세스 요청들을 모니터링하고 복수의 프로세싱 엘리먼트 중 2개 이상이 동시에 복수의 RAM 타일 중 하나에 액세스하려 시도하고 있는지 결정하도록 구성된 충돌 검출기를 포함한다.
일부 실시예에 있어서, 충돌 검출기는 복수의 주소 디코더에 결합되되, 복수의 주소 디코더의 각각은 복수의 프로세싱 엘리먼트 중 하나에 결합되고 복수의 프로세싱 엘리먼트 중 하나가 중재 블록과 연관된 복수의 RAM 타일 중 하나에 액세스하려 시도하고 있는지 결정하도록 구성된다.
일부 실시예에 있어서, 복수의 프로세싱 엘리먼트는 적어도 하나의 벡터 프로세서 및 적어도 하나의 하드웨어 가속기를 포함한다.
일부 실시예에 있어서, 병렬 프로세싱 디바이스는 복수의 메모리 슬라이스 중 하나로의 액세스를 제공하도록 각각 구성된 복수의 메모리 슬라이스 컨트롤러를 포함한다.
일부 실시예에 있어서, 상호접속 시스템은 적어도 하나의 벡터 프로세서와 메모리 서브시스템 간 통신을 제공하도록 구성된 제1 버스를 포함한다.
일부 실시예에 있어서, 상호접속 시스템은 적어도 하나의 하드웨어 가속기와 메모리 서브시스템 간 통신을 제공하도록 구성된 제2 버스 시스템을 포함한다.
일부 실시예에 있어서, 제2 버스 시스템은 적어도 하나의 하드웨어 가속기로부터 메모리 액세스 요청을 수신함으로써 그리고, 적어도 하나의 하드웨어 가속기에, 메모리 서브시스템으로의 액세스를 승인함으로써 적어도 하나의 하드웨어 가속기와 메모리 서브시스템 간 통신을 중재하도록 구성된 슬라이스 주소 요청 필터를 포함한다.
일부 실시예에 있어서, 복수의 프로세싱 디바이스 중 하나는 메모리 서브시스템의 처리율을 증가시키도록 버퍼를 포함하되, 버퍼 내 엘리먼트의 수는 메모리 서브시스템으로부터 데이터를 검색하기 위한 사이클의 수보다 더 크다.
개시된 주제 사항은 병렬 프로세싱 시스템을 동작시키기 위한 방법을 포함한다. 방법은 제1 프로세싱 엘리먼트 및 제2 프로세싱 엘리먼트를 포함하는 복수의 프로세싱 엘리먼트를 제공하는 단계를 포함하되, 복수의 프로세싱 엘리먼트의 각각은 명령어들을 실행하도록 구성된다. 방법은 또한 제1 프로세싱 엘리먼트와 연관된 제1 메모리 슬라이스를 포함하는 복수의 메모리 슬라이스를 포함하는 메모리 서브시스템을 제공하는 단계를 포함하되, 제1 메모리 슬라이스는 개개의 판독 및 기록 포트를 각각 갖는 복수의 랜덤 액세스 메모리(RAM) 타일을 포함한다. 방법은 제1 프로세싱 엘리먼트로부터의 제1 메모리 액세스 요청을, 상호접속 시스템의 로컬 상호접속부를 통하여 복수의 RAM 타일 중 하나와 연관된 중재 블록에 의해, 수신하는 단계를 더 포함한다. 방법은 부가적으로는 복수의 RAM 타일 중 하나로의 액세스 권한을 제1 프로세싱 엘리먼트에 부여하도록 제1 프로세싱 엘리먼트에 제1 수권 메시지를, 글로벌 상호접속부를 통하여 중재 블록에 의해, 보내는 단계를 포함한다.
일부 실시예에 있어서, 방법은 제2 프로세싱 엘리먼트로부터의 제2 메모리 액세스 요청을, 상호접속 시스템의 글로벌 상호접속부를 통하여 중재 블록에 의해, 수신하는 단계; 및 복수의 RAM 타일 중 하나로의 액세스 권한을 제2 프로세싱 엘리먼트에 부여하도록 제2 프로세싱 엘리먼트에 제2 수권 메시지를, 글로벌 상호접속부를 통하여 중재 블록에 의해, 보내는 단계를 더 포함한다.
일부 실시예에 있어서, 방법은 라운드-로빈 방식으로 복수의 RAM 타일 중 하나로의 액세스 권한을 부여하도록 복수의 프로세싱 엘리먼트에 복수의 수권 메시지를, 중재 블록에 의해, 보내는 단계를 더 포함한다.
일부 실시예에 있어서, 방법은 복수의 RAM 타일 중 하나로의 메모리 액세스 요청들을, 중재 블록에서의 충돌 검출기에 의해, 모니터링하는 단계; 및 복수의 프로세싱 엘리먼트 중 2개 이상이 동시에 복수의 RAM 타일 중 하나에 액세스하려 시도하고 있는지 결정하는 단계를 더 포함한다.
일부 실시예에 있어서, 복수의 프로세싱 엘리먼트는 적어도 하나의 벡터 프로세서 및 적어도 하나의 하드웨어 가속기를 포함한다.
일부 실시예에 있어서, 방법은 복수의 메모리 슬라이스 중 하나로의 액세스를 제공하도록 각각 구성된 복수의 메모리 슬라이스 컨트롤러를 제공하는 단계를 더 포함한다.
일부 실시예에 있어서, 방법은 상호접속 시스템의 제1 버스 시스템을 통하여 적어도 하나의 벡터 프로세서와 메모리 서브시스템 간 통신을 제공하는 단계를 더 포함한다.
일부 실시예에 있어서, 방법은 상호접속 시스템의 제2 버스 시스템을 통하여 적어도 하나의 하드웨어 가속기와 메모리 서브시스템 간 통신을 제공하는 단계를 더 포함한다.
일부 실시예에 있어서, 제2 버스 시스템은 적어도 하나의 하드웨어 가속기로부터 메모리 액세스 요청을 수신함으로써 그리고, 적어도 하나의 하드웨어 가속기에, 메모리 서브시스템으로의 액세스를 승인함으로써 적어도 하나의 하드웨어 가속기와 메모리 서브시스템 간 통신을 중재하도록 구성된 슬라이스 주소 요청 필터를 포함한다.
개시된 주제 사항은 전자 디바이스를 포함한다. 전자 디바이스는 병렬 프로세싱 디바이스를 포함한다. 프로세싱 디바이스는 명령어들을 실행하도록 각각 구성된 복수의 프로세싱 엘리먼트 및 복수의 프로세싱 엘리먼트 중 하나와 연관된 제1 메모리 슬라이스를 포함하는 복수의 메모리 슬라이스를 포함하는 메모리 서브시스템을 포함한다. 제1 메모리 슬라이스는 개개의 판독 및 기록 포트를 각각 갖는 복수의 랜덤 액세스 메모리(RAM) 타일을 포함한다. 병렬 프로세싱 디바이스는 복수의 프로세싱 엘리먼트와 메모리 서브시스템을 결합하도록 구성된 상호 접속 시스템을 포함할 수 있다. 상호접속 시스템은 복수의 프로세싱 엘리먼트 중 하나와 제1 메모리 슬라이스를 결합하도록 구성된 로컬 상호접속부, 및 복수의 프로세싱 엘리먼트 중 나머지와 상기 제1 메모리 슬라이스를 결합하도록 구성된 글로벌 상호접속부를 포함할 수 있다. 전자 디바이스는 또한 메모리에 저장된 모듈을 실행하도록 구성된, 병렬 프로세싱 디바이스와 통신하고 있는, 프로세서를 포함한다. 모듈은 데이터 프로세싱 프로세스와 연관된 흐름 그래프를 수신하고 복수의 노드 중 제1 노드를 병렬 프로세싱 디바이스의 제1 프로세싱 엘리먼트에 그리고 복수의 노드 중 제2 노드를 병렬 프로세싱 디바이스의 제2 프로세싱 엘리먼트에 배정하고, 그로써 제1 노드 및 제2 노드와 연관된 연산들을 병렬화하도록 구성되되, 흐름 그래프는 복수의 노드 및 복수의 노드 중 2개 이상을 접속하는 복수의 에지를 포함하고, 각각의 노드는 연산을 식별시키고 각각의 에지는 접속된 노드들 간 관계를 식별시킨다.
일부 실시예에 있어서, 흐름 그래프는 확장성 마크업 언어(XML) 포맷으로 제공된다.
일부 실시예에 있어서, 모듈은 병렬 프로세싱 디바이스에서의 메모리 서브시스템의 과거 성능에 기반하여 복수의 노드 중 제1 노드를 제1 프로세싱 엘리먼트에 배정하도록 구성된다.
일부 실시예에 있어서, 병렬 프로세싱 디바이스의 메모리 서브시스템은 사전 결정된 시간 기간에 걸쳐 메모리 충돌의 수를 카운팅하도록 구성되는 카운터를 포함하고, 메모리 서브시스템의 과거 성능은 카운터에 의해 측정된 메모리 충돌의 수를 포함한다.
일부 실시예에 있어서, 모듈은 병렬 프로세싱 디바이스가 흐름 그래프의 적어도 일부를 동작시키고 있는 동안 복수의 노드 중 제1 노드를 제1 프로세싱 엘리먼트에 배정하도록 구성된다.
일부 실시예에 있어서, 모듈은 복수의 흐름 그래프를 수신하고, 복수의 흐름 그래프와 연관된 모든 연산을 병렬 프로세싱 디바이스에서의 단일 프로세싱 엘리먼트에 배정하도록 구성된다.
일부 실시예에 있어서, 모듈은 메모리 충돌을 감축하도록 프로세싱 엘리먼트들에 의한 메모리 액세스들을 스태거링(staggering)하도록 구성된다.
일부 실시예에 있어서, 전자 디바이스는 모바일 디바이스를 포함한다.
일부 실시예에 있어서, 흐름 그래프는 병렬 프로세싱 디바이스와 연관된 애플리케이션 프로그래밍 인터페이스(API)를 사용하여 특정된다.
일부 실시예에 있어서, 모듈은 입력 이미지 데이터를 스트립들로 분할하고 입력 이미지 데이터의 하나의 스트립을 복수의 프로세싱 엘리먼트 중 하나에 제공함으로써 입력 이미지 데이터를 복수의 프로세싱 엘리먼트에 제공하도록 구성된다.
일부 실시예에 있어서, 입력 이미지 데이터의 스트립의 수는 복수의 프로세싱 엘리먼트의 수와 동일하다.
개시된 주제 사항은 방법을 포함한다. 방법은 데이터 프로세싱 프로세스와 연관된 흐름 그래프를, 병렬 프로세싱 디바이스와 통신하고 있는 프로세서에서, 수신하는 단계를 포함하되, 흐름 그래프는 복수의 노드 및 복수의 노드 중 2개 이상을 접속하는 복수의 에지를 포함하고, 각각의 노드는 연산을 식별시키고 각각의 에지는 접속된 노드들 간 관계를 식별시킨다. 방법은 또한 복수의 노드 중 제1 노드를 병렬 프로세싱 디바이스의 제1 프로세싱 엘리먼트에 그리고 복수의 노드 중 제2 노드를 병렬 프로세싱 디바이스의 제2 프로세싱 엘리먼트에 배정하고, 그로써 제1 노드 및 제2 노드와 연관된 연산을 병렬화하는 단계를 포함한다. 병렬 프로세싱 디바이스는 또한 제1 프로세싱 엘리먼트와 연관된 제1 메모리 슬라이스를 포함하는 복수의 메모리 슬라이스를 포함하는 메모리 서브시스템으로서, 제1 메모리 슬라이스는 개개의 판독 및 기록 포트를 각각 갖는 복수의 랜덤 액세스 메모리(RAM) 타일을 포함하는 메모리 서브시스템; 및 제1 프로세싱 엘리먼트, 제2 프로세싱 엘리먼트, 및 메모리 서브시스템을 결합하도록 구성된 상호접속 시스템을 포함한다. 상호접속 시스템은 제1 프로세싱 엘리먼트와 제1 메모리 슬라이스를 결합하도록 구성된 로컬 상호접속부, 및 제2 프로세싱 엘리먼트와 제1 메모리 슬라이스를 결합하도록 구성된 글로벌 상호접속부를 포함한다.
일부 실시예에 있어서, 복수의 노드 중 제1 노드를 병렬 프로세싱 디바이스의 제1 프로세싱 엘리먼트에 배정하는 단계는 병렬 프로세싱 디바이스에서의 제1 메모리 슬라이스의 과거 성능에 기반하여 복수의 노드 중 제1 노드를 제1 프로세싱 엘리먼트에 배정하는 단계를 포함한다.
일부 실시예에 있어서, 방법은 또한 사전 결정된 시간 기간에 걸쳐 제1 메모리 슬라이스에서의 메모리 충돌의 수를, 메모리 서브시스템에서의 카운터에서, 카운팅하는 단계를 포함하고, 제1 메모리 슬라이스의 과거 성능은 제1 메모리 슬라이스에서의 메모리 충돌의 수를 포함한다.
일부 실시예에 있어서, 복수의 노드 중 제1 노드를 제1 프로세싱 엘리먼트에 배정하는 단계는 병렬 프로세싱 디바이스가 흐름 그래프의 적어도 일부를 동작시키고 있는 동안 수행된다.
일부 실시예에 있어서, 방법은 또한 메모리 충돌을 감축하기 위해 제1 메모리 슬라이스로의 프로세싱 엘리먼트들에 의한 메모리 액세스들을 스태거링하는 단계를 포함한다.
일부 실시예에 있어서, 흐름 그래프는 병렬 프로세싱 디바이스와 연관된 애플리케이션 프로그래밍 인터페이스(API)를 사용하여 특정된다.
일부 실시예에 있어서, 방법은 또한 입력 이미지 데이터를 복수의 스트립으로 분할하고 상기 입력 이미지 데이터의 복수의 스트립 중 하나를 복수의 프로세싱 엘리먼트 중 하나에 제공함으로써 입력 이미지 데이터를 복수의 프로세싱 엘리먼트에 제공하는 단계를 포함한다.
일부 실시예에 있어서, 입력 이미지 데이터의 복수의 스트립의 수는 복수의 프로세싱 엘리먼트의 수와 동일하다.
개시된 주제 사항의 다양한 목적, 특징 및 이점은 유사한 참조 숫자가 유사한 구성요소를 식별시키는 이하의 도면과 연관하여 고려될 때 개시된 주제 사항의 이하의 상세한 설명을 참조하여 더 충분히 인식될 수 있다.
도 1은 키메라의 컴퓨터 이미징 플랫폼의 설명도;
도 2는 셀 프로세서의 멀티코어 아키텍처의 설명도;
도 3은 효율적 저-전력 마이크로프로세서(ELM) 아키텍처의 설명도;
도 4는 일부 실시예에 따른 개선된 메모리 서브시스템의 예시도;
도 5는 일부 실시예에 따른 병렬 프로세싱 디바이스의 섹션의 예시도;
도 6은 일부 실시예에 따른 타일 제어 로직 내 중앙집중형 충돌 검출 시스템의 예시도;
도 7은 일부 실시예에 따른 타일 제어 로직 내 분산형 충돌 검출 시스템의 예시도;
도 8은 일부 실시예에 따라 요청기에 충돌 신호를 보고하기 위한 중재 블록도;
도 9는 일부 실시예에 따른 사이클-지향 중재 블록의 예시도;
도 10은 일부 실시예에 따라 메모리 액세스 중재에 기인하는 메모리 액세스 레이턴시를 감축하기 위한 메커니즘의 예시도;
도 11은 일부 실시예에 따른 스케줄링 소프트웨어의 애플리케이션의 예시도;
도 12는 일부 실시예에 따라 병렬 프로세싱 디바이스를 갖는 시스템의 계층적 구조도;
도 13은 일부 실시예에 따라 방향성 비사이클 그래프(DAG) 또는 흐름 그래프의 기술이 어떻게 병렬 프로세싱 디바이스의 연산을 제어하는데 사용될 수 있는지의 예시도;
도 14a 내지 도 14b는 일부 실시예에 따라 컴파일러 및 스케줄러에 의한 태스크의 스케줄링 및 발행의 예시도;
도 15는 일부 실시예에 따른 실시간 DAG 컴파일러의 연산의 예시도;
도 16은 일부 실시예에 따라 제안된 온라인 DAG 스케줄러에 의해 발생된 스케줄 대 개방형 컴퓨팅 언어(OpenCL) 스케줄러에 의해 발생된 스케줄의 비교도;
도 17은 일부 실시예에 따라 프로세서 및/또는 필터 가속기의 연산을 동기화하기 위한 배리어 메커니즘의 예시도;
도 18은 일부 실시예에 따라 여러 다른 유형의 프로세싱 엘리먼트를 갖는 병렬 프로세싱 디바이스의 예시도;
도 19는 일부 실시예에 따라 제안된 멀티코어 메모리 서브시스템의 예시도;
도 20은 일부 실시예에 따라 접속 매트릭스(CMX) 기반구조의 단일 슬라이스의 예시도;
도 21은 일부 실시예에 따라 가속기 메모리 컨트롤러(AMC) 크로스바 아키텍처의 예시도;
도 22는 일부 실시예에 따라 AMC 크로스바 포트 컨트롤러의 예시도;
도 23은 일부 실시예에 따라 AMC를 사용하는 판독 연산의 예시도;
도 24는 일부 실시예에 따라 AMC를 사용하는 기록 연산의 예시도;
도 25는 일부 실시예에 따른 병렬 프로세싱 디바이스의 예시도; 및
도 26은 일부 실시예에 따라 병렬 프로세싱 디바이스를 포함하는 전자 디바이스의 예시도.
이하의 설명에서는, 개시된 주제 사항의 철저한 이해를 제공하기 위해 개시된 주제 사항의 시스템 및 방법과 그러한 시스템 및 방법이 동작 등을 할 수 있는 환경에 관하여 수많은 특정 상세가 제시된다. 그렇지만, 개시된 주제 사항이 그러한 특정 상세 없이 실시될 수 있음과, 당업계에 주지되어 있는 소정 특징이 개시된 주제 사항의 주제 사항의 복잡화를 회피하기 위해 상세히 설명되지는 않음은 당업자에게 명백할 것이다. 부가적으로, 아래에서 제공되는 예들은 예시적인 것임과, 개시된 주제 사항의 범위 내에 드는 다른 시스템 및 방법이 있다고 생각됨을 이해할 것이다.
그러한 여러 다른 프로세싱 자원(예를 들어, 프로세서 및 하드웨어 가속기)을 상호접속하는 하나의 가능한 방식은 엔비디아(NVidia)에 의해 개발된 컴퓨터 포토그래피 엔진 키메라(Chimera)에서 개괄된 바와 같은 버스를 사용하는 것이다. 도 1은 컴퓨터 포토그래피 엔진 키메라를 예시하고 있다. 키메라 컴퓨터 포토그래피 엔진(100)은 플랫-레벨 버스 기반구조(108)(예를 들어, 모든 프로세싱 엘리먼트를 접속하는 단일 계층 버스 시스템)를 통하여 멀티코어 ARM 프로세서 서브-시스템(104) 및 하드웨어(HW) 이미지 신호 프로세싱(ISP) 가속기(106)에 접속되는 다중 그래픽 프로세싱 유닛(GPU) 코어(102)를 포함한다. 키메라 컴퓨터 포토그래피 엔진은 프로그래머로부터 기저 GPU 코어(102), CPU(104) 및 ISP 블록(106)의 상세를 추상화하는 소프트웨어 프레임워크로서 일반적으로 제시된다. 더욱, 키메라 컴퓨터 포토그래피 엔진(100)은 2개의 정보 버스(108-0, 108-1), 이미지 또는 프레임 데이터를 반송하는 제1 버스(108-0) 및 각각의 프레임과 연관된 상태 정보를 반송하는 제2 버스(108-1)를 통하여 그들 컴퓨터 포토그래피 엔진을 통하는 데이터 흐름을 기술한다.
키메라에서와 같은, 플랫-레벨 버스 기반구조의 사용은 구현하기가 저렴하고 편리할 수 있다. 그렇지만, 플랫-레벨 버스 기반구조의 사용은, GPU 코어(102), CPU(104) 및 ISP 블록(106)과 같은, 이종 프로세싱 엘리먼트(예를 들어, 다양한 유형의 프로세싱 엘리먼트)를 상호접속하는 수단으로서 여러 주목할만한 단점을 가질 수 있다. 첫째로, 컴퓨터 자원을 상호접속하는데 버스의 사용은 각각의 중앙 프로세싱 유닛(CPU)(104), 그래픽 프로세싱 유닛(GPU)(102), 및/또는 이미지 신호 프로세서(ISP) 블록(106)에 로컬인 시스템 도처에 메모리가 분산될 수 있음을 의미한다. 그래서, 메모리는 프로그래머가 구현하기를 바라는 컴퓨터 포토그래피 파이프라인의 요건에 따라 프로세싱 파이프라인 내에서 융통성 있게 할당될 수 없다. 이러한 융통성 부족은 어떤 이미지 또는 비디오 프로세싱이 구현하기가 어렵거나 불가능함 또는 구현이 프레임-레이트, 이미지 품질 또는 그 밖의 관점에서 제한됨을 의미할 수 있다.
둘째로, 플랫-레벨 버스 기반구조의 사용은 또한 여러 다른 컴퓨터 자원(CPU(104), GPU(102) 및 ISP 블록(106))이 버스 대역폭을 두고 경합하여야 함을 의미한다. 이러한 경합은 이용가능한 버스 대역폭의 양을 감축하는 중재를 필요로 한다. 그래서, 실제 작업에는 이론적 대역폭 중 점점 더 적은 부분이 이용가능하다. 대역폭의 감축은 프로세싱 파이프라인이 프레임 레이트, 이미지 품질 및/또는 전력의 관점에서 애플리케이션의 성능 요건을 충족하지 못함을 의미할 수 있다.
셋째로, 특정 컴퓨터 자원에 근접한 불충분한 메모리는 주어진 GPU(102), CPU(104), 또는 하드웨어 ISP 블록(106) 및 다른 컴퓨터 자원과 연관된 메모리 사이에서 데이터가 이리저리 전송되어야 함을 의미할 수 있다. 이러한 집약성 부족은 부가적 버스 대역폭 및 중재 오버헤드가 초래될 수 있음을 의미한다. 더욱, 집약성 부족은 또한 부가적 전력이 소모됨을 의미한다. 그래서, 특정 목표 프레임-레이트로 특정 알고리즘을 지원하는 것이 어렵거나 불가능할 수 있다.
넷째로, 플랫-레벨 버스 기반구조의 사용은 또한, 각각 다른 레이턴시 특성을 가질 수 있는, 이종 프로세싱 엘리먼트로부터 파이프라인을 구성하는데 어려움을 악화시킬 수 있다. 예를 들면, GPU 코어(102)는 레이턴시를 커버하기 위해 메모리(보통은 외부 DRAM)로의 다중의 현저한 액세스를 취급하도록 다중 중첩 프로세스 스레드를 실행함으로써 레이턴시를 감내하도록 설계되는 반면, 정규 CPU(104) 및 하드웨어 ISP 블록(106)은 레이턴시를 감내하도록 설계되지 않는다.
여러 다른 프로세싱 자원을 상호접속하는 다른 방식은, 도 2에 예시되는, IBM에 의해 개발된 셀 프로세서 아키텍처에 의해 제공된다. 셀 프로세서 아키텍처(200)는 시너지 실행 유닛(SXU)이라고도 알려져 있는 각각의 프로세서(204)가 이용가능한 로컬 저장소(LS)(202)를 포함한다. 셀 프로세서(200)는 하나의 프로세서의 LS(202)와 다른 하나의 프로세서의 LS(202) 사이의 데이터-전송을 프로그램으로 스케줄링하도록 시간-공유 기반구조 및 직접 메모리 액세스(DMA)(206) 전송에 의존한다. 셀 아키텍처(200)에 대한 어려움은 필요할 때 각각의 프로세서(204)가 공유 데이터를 이용가능함을 보장하도록 (셀 아키텍처(200)에서의 높은 레이턴시에 기인하여) 미리 수백 사이클 배경 데이터-전송을 명시적으로 스케줄링하도록 프로그래머가 직면한 복잡도이다. 프로그래머가 배경 데이터 전송을 명시적으로 스케줄링하지 않으면, 프로세서(204)는 멎어서, 성능을 저하시킬 것이다.
여러 다른 프로세싱 자원을 상호접속하는 다른 방식은 멀티코어 프로세싱 시스템에서 프로세서들 사이에 효율적으로 데이터를 공유하도록 공유 멀티코어 메모리 서브시스템을 사용하는 것이다. 이러한 공유 멀티코어 메모리 서브시스템은 효율적 저-전력 마이크로프로세서(ELM) 시스템에서 사용된다. 도 3은 ELM 시스템을 예시한다. ELM 시스템(300)은 앙상블(302), ELM 시스템에서 자원을 컴퓨팅하기 위한 일차적 물리적 설계 유닛을 포함한다. 앙상블(302)은 소결합되는 4개의 프로세서(304)의 클러스터를 포함한다. 4개의 프로세서(304)의 클러스터는 상호접속 네트워크로의 인터페이스 및 앙상블 메모리(306)와 같은 로컬 자원을 공유한다. 앙상블 메모리(306)는 프로세서(304) 가까이에 있는 명령어 및 데이터 작업 세트를 캡처링하고, 로컬 프로세서(304) 및 네트워크 인터페이스 컨트롤러가 동시다발적으로 그것에 액세스할 수 있게 하도록 뱅킹된다. 앙상블(302) 내 각각의 프로세서(304)에는 앙상블 메모리(306)에서 선호되는 뱅크가 배정된다. 그 선호되는 뱅크로의 프로세서(304)에 의한 액세스는 다른 프로세서 및 네트워크 인터페이스에 의한 액세스에 앞서(그리고 액세스를 차단할 것임) 우선시된다. 단일 프로세서(304)에 사유인 명령어 및 데이터는 결정론적 액세스 시간을 제공하도록 그 선호되는 뱅크에 저장될 수 있다. 판독 및 기록 포트로의 액세스를 제어하는 중재기는 프로세서(304)와 메모리 뱅크(306) 사이의 친화도를 확립하도록 바이어싱된다. 이것은 소프트웨어가 다중 프로세서에 의해 공유될 수 있는 데이터에 액세스할 때 대역폭 가용성 및 레이턴시에 대한 더 강한 가정을 할 수 있게 한다.
그렇지만, ELM 아키텍처(300)는 물리적으로 큰 랜덤 액세스 메모리(RAM) 블록에 기인하여 많은 전력을 소모할 수 있다. 더욱, ELM 아키텍처(300)는 프로세서(304)들 사이에 많은 데이터-공유가 있는 경우 낮은 처리율에 시달릴 수 있다. 부가적으로, 프로비저닝은, 어떤 경우에는 전력 및 성능의 관점에서 유익할 수 있는, 프로세서(304)와 하드웨어 가속기 사이의 데이터-공유에 대해서는 이루어지지 않는다.
본 발명은 다중 프로세서 및 하드웨어 가속기가 다른 프로세서 및 하드웨어 가속기와 동시에 공유 데이터에 액세스 가능하게 하기 위한 장치, 시스템 및 방법에 관한 것이다. 본 발명은, 로컬 저장소에 액세스하는데 더 높은 친화도(예를 들어, 더 높은 우선순위)를 갖는 로컬 프로세서에 의해 차단됨이 없이, 공유 데이터에 동시에 액세스하기 위한 장치, 시스템 및 방법을 제공한다.
개시된 장치, 시스템 및 방법은 기존 멀티코어 메모리 아키텍처에 비해 실질적 이점을 제공한다. 기존 멀티코어 메모리 아키텍처는, 데이터가 액세스될 수 있는 대역폭을 제한할 수 있는, 프로세서당 RAM의 단일 모놀리식 블록을 사용한다. 개시된 아키텍처는 RAM의 단일 모놀리식 블록을 사용하는 기존 멀티코어 메모리 아키텍처에 비해 실질적으로 더 높은 대역폭으로 메모리에 액세스하기 위한 메커니즘을 제공할 수 있다. 개시된 아키텍처는, 프로세서당 단일의 큰 RAM 블록을 인스턴스 생성하는 대신에, 프로세서당 다중 물리적 RAM 블록을 인스턴스 생성함으로써 이러한 더 높은 대역폭을 획득한다. 각각의 RAM 블록은 전용 액세스 중재 블록 및 주위 기반구조를 포함할 수 있다. 그래서, 메모리 서브시스템 내 각각의 RAM 블록은 시스템 내 다중 프로세싱 엘리먼트, 예를 들어, 벡터 프로세서, 축소형 명령어 세트 컴퓨팅(RISC) 프로세서, 하드웨어 가속기 또는 DMA 엔진에 의해 다른 것들과 독립적으로 액세스될 수 있다.
다중의 작은 RAM 인스턴스의 사용이 단일의 큰 RAM 인스턴스를 사용하는 것에 비해 유익하다는 이러한 것은 단일의 큰 RAM 인스턴스에 기반하는 메모리 뱅크가 다중의 더 작은 RAM 인스턴스에 기반하는 메모리 뱅크보다 더 면적 효율적이기 때문에 다소 반직관적이다. 그렇지만, 더 작은 RAM 인스턴스에 대한 소비 전력은 전형적으로는 단일의 큰 RAM 인스턴스에 대한 것보다 상당히 더 낮다. 더욱, 단일의 큰 물리적 RAM 인스턴스가 멀티-인스턴스 RAM 블록과 동일한 대역폭을 달성한다면, 단일의 큰 물리적 RAM 인스턴스는 다중의 물리적 RAM 인스턴스로 이루어진 것보다 실질적으로 더 높은 전력에 처하게 될 것이다. 그래서, 적어도 소비 전력 관점으로부터, 메모리 서브시스템은 단일의 큰 RAM 인스턴스를 사용하는 것보다 다중의 물리적 RAM 인스턴스를 사용하는 것으로부터 혜택을 볼 수 있다.
다중의 물리적 RAM 인스턴스를 갖는 메모리 서브시스템은 더 작은 RAM 블록의 RAM 액세스당 비용, 예를 들어, 메모리 액세스 시간 또는 전력 소모가 전형적으로는 더 큰 RAM 블록의 그것보다 훨씬 더 낮다는 점에서 부가 이점을 가질 수 있다. 이것은 RAM으로부터 데이터를 판독/기록하는데 사용된 단축된 비트-라인에 기인한다. 더욱, 더 작은 RAM 블록에 대한 판독 및 기록을 위한 액세스-시간도 (더 짧은 비트-라인과 연관된 감축된 저항-커패시턴스(RC) 시상수에 기인하여) 더 낮다. 그래서, 멀티-RAM 기반 메모리 서브시스템에 결합된 프로세싱 엘리먼트는 더 높은 주파수에서 동작할 수 있어서, 순차적으로 정적 누설 전류에 기인하는 정적 전력을 감축한다. 이것은 프로세서와 메모리가 전력 도메인으로 격리될 때 특히 유용할 수 있다. 예를 들어, 주어진 프로세서 또는 필터 가속기가 그 태스크를 완료하였을 때, 주어진 프로세서 또는 필터 가속기와 연관된 전력 도메인은 유익하게는 게이트 오프될 수 있다. 그래서, 개시된 아키텍처에서의 메모리 서브시스템은 이용가능한 대역폭 및 소비 전력의 관점에서 우수한 특성을 갖는다.
부가적으로, 중재된 액세스를 각각 갖는 다중 RAM 인스턴스를 갖는 메모리 서브시스템은, RAM 블록을 로킹함으로써 RAM 블록을 특정 프로세서에 전용시킴이 없이, 프로세서와 하드웨어 가속기 사이에 데이터가 공유되도록 여러 방식을 제공할 수 있다. 원칙적으로, 더 큰 RAM이 N개의 서브-블록으로 세분되면, 그때 이용가능한 데이터 대역폭은 대략 N의 인수만큼 증가된다. 이것은 다중 프로세싱 엘리먼트에 의한 동시발생적 공유(예를 들어, 액세스 충돌)를 감축하도록 데이터가 적절히 파티셔닝될 수 있다는 가정에 기반한다. 예를 들어, 소비기 프로세서 또는 소비기 가속기가 생산기 프로세서 또는 생산기 가속기에 의해 채워지고 있는 데이터 버퍼로부터 데이터를 판독할 때, 그때 데이터 버퍼의 동시발생적 공유가 있어, 액세스 충돌을 초래한다.
일부 실시예에 있어서, 개시된 아키텍처는 데이터의 동시발생적 공유를 감축하기 위한 메커니즘을 제공할 수 있다. 특히, 개시된 아키텍처는 정적 메모리 할당 메커니즘 및/또는 동적 메모리 할당 메커니즘을 통하여 동시발생적 공유를 감축하도록 순종적일 수 있다. 예를 들어, 정적 메모리 할당 메커니즘에 있어서, 데이터는 데이터의 동시발생적 공유를 감축하기 위해, 프로그램이 시작되기 전에, 예를 들어, 프로그램 컴파일 스테이지 동안 메모리의 여러 다른 부분에 매핑된다. 다른 한편으로, 동적 메모리 할당 기법에 있어서, 데이터는 프로그램 실행 동안 메모리의 여러 다른 부분에 매핑된다. 정적 메모리 할당 메커니즘은 데이터에 메모리를 할당하기 위한 예측가능한 메커니즘을 제공하고, 그것은 전력 또는 성능의 관점에서 어떠한 실질적 오버헤드도 초래하지 않는다.
다른 일례로서, 개시된 아키텍처는 다중 RAM 블록에 걸쳐 파티셔닝된 데이터-구조로의 액세스를 중재하는 하나 이상의 프로세서 또는 컨트롤러(예를 들어, 감독하는 RISC 프로세서) 상에서 실행되는 런타임 스케줄러와 함께 사용될 수 있다. 런타임 스케줄러는 공유 데이터로의 동시 액세스를 감축하기 위해 데이터(예를 들어, 이미지 프레임)의 부분(예를 들어, 라인 또는 타일)들 상에 동작하는 여러 다른 프로세싱 엘리먼트의 시작-시간을 스태거링하도록 구성될 수 있다.
일부 실시예에 있어서, 런타임 스케줄러는 하드웨어 중재 블록으로 보완될 수 있다. 예를 들어, 하드웨어 중재 블록은 멎음을 감축하도록 설계된 공유 결정론적 상호접속부를 통하여 (벡터 프로세서와 같은) 프로세서에 의해 공유 메모리 액세스를 중재하도록 구성될 수 있다. 일부 경우에 있어서, 하드웨어 중재 블록은 사이클-지향 스케줄링을 수행하도록 구성될 수 있다. 사이클-지향 스케줄링은, 다중 클록-사이클을 필요로 할 수 있는 태스크-레벨 입도로 자원의 사용을 스케줄링하는 것과는 대조적으로, 클록-사이클 입도로 자원의 사용을 스케줄링하는 것을 포함할 수 있다. 클록 사이클 입도로 자원 할당을 스케줄링하는 것은 더 높은 성능을 제공할 수 있다.
다른 실시예에 있어서, 런타임 스케줄러는 데이터를 저장할 입력 버퍼 및 출력 버퍼를 각각 포함할 수 있는 다수의 하드웨어 가속기로 보완될 수 있다. 입력 및 출력 버퍼는 외부 메모리와 같은 외부 자원에 액세스함에 있어서 지연의 분산을 흡수하도록(또는 감추도록) 구성될 수 있다. 입력 및 출력 버퍼는 선입선출(FIFO) 버퍼를 포함할 수 있고, FIFO 버퍼는 외부 자원에 액세스함에 있어서 지연의 분산을 흡수하기에 충분한 양의 데이터 및/또는 명령어를 저장하기에 충분한 수의 슬롯을 포함할 수 있다.
일부 실시예에 있어서, 개시된 장치, 시스템 및 방법은 병렬 프로세싱 디바이스를 제공한다. 병렬 프로세싱 디바이스는 명령어를 각각 실행할 수 있는, 병렬 프로세서와 같은, 복수의 프로세서를 포함할 수 있다. 병렬 프로세싱 디바이스는 또한 복수의 메모리 슬라이스를 포함할 수 있으며, 각각의 메모리 슬라이스는 병렬 프로세싱 디바이스 중 하나와 연관되고 병렬 프로세싱 디바이스 내 다른 프로세싱 디바이스에 비해 그 프로세서에 우선적 액세스를 부여한다. 각각의 메모리 슬라이스는 복수의 RAM 타일을 포함할 수 있으며, 이 경우 각각의 RAM 타일은 판독 포트 및 기록 포트를 포함할 수 있다. 일부 경우에 있어서, 각각의 메모리 슬라이스에는 관련된 메모리 슬라이스로의 액세스를 제공하기 위한 메모리 슬라이스 컨트롤러가 제공될 수 있다. 프로세서 및 RAM 타일은 버스를 통하여 서로 결합될 수 있다. 일부 경우에 있어서, 버스는 프로세서 중 어느 하나를 메모리 슬라이스 중 어느 하나와 결합할 수 있다. 적합하게는, 각각의 RAM 타일은 타일로의 액세스를 승인하기 위한 타일 제어 로직 블록을 포함할 수 있다. 타일 제어 로직 블록은 때로는 타일 제어 로직 또는 중재 블록이라고 지칭된다.
일부 실시예에 있어서, 병렬 프로세싱 디바이스는 사전 정의된 프로세싱 기능, 예를 들어, 이미지 프로세싱을 수행하도록 구성된 적어도 하나의 하드웨어 가속기를 더 포함할 수 있다. 일부 경우에 있어서, 사전 정의된 프로세싱 기능은 필터링 연산을 포함할 수 있다.
일부 실시예에 있어서, 적어도 하나의 하드웨어 가속기는 별개의 버스를 통하여 메모리 슬라이스에 결합될 수 있다. 별개의 버스는, 적어도 하나의 하드웨어 가속기로부터의 요청을 수신하고 관련된 메모리 슬라이스 컨트롤러를 통해 메모리 슬라이스로의 액세스를 하드웨어 가속기에 승인하도록 구성되는, 연관된 가속기 메모리 컨트롤러(AMC)를 포함할 수 있다. 그리하여, 하드웨어 가속기에 의해 채용된 메모리 액세스 경로는 벡터-프로세서에 의해 채용된 경로와는 다를 수 있음을 인식할 것이다. 일부 실시예에 있어서, 적어도 하나의 하드웨어 가속기는 메모리 슬라이스에 액세스함에 있어서 지연을 처리하도록 내부 버퍼(예를 들어, FIFO 메모리)를 포함할 수 있다.
일부 실시예에 있어서, 병렬 프로세싱 디바이스는 호스트 프로세서를 포함할 수 있다. 호스트 프로세서는 호스트 버스를 통하여 AMC와 통신하도록 구성될 수 있다. 병렬 프로세싱 디바이스에는 또한 애플리케이션-프로그래밍 인터페이스(API)가 제공될 수 있다. API는 벡터 프로세서 및/또는 하드웨어 가속기에 하이 레벨 인터페이스를 제공한다.
일부 실시예에 있어서, 병렬 프로세싱 디바이스는 병렬 프로세싱 디바이스를 위한 명령어를 제공하는 컴파일러와 함께 동작할 수 있다. 일부 경우에 있어서, 컴파일러는 벡터 프로세서 또는 하드웨어 가속기와 같은 프로세싱 엘리먼트와는 구별되는 호스트 프로세서 상에서 실행되도록 구성된다. 일부 경우에 있어서, 컴파일러는 이미지 프로세싱 프로세스를 특정하는, 이미지/비디오 API(1206)(도 12)를 통하여, 흐름 그래프를 수신하도록 구성된다. 컴파일러는 벡터 프로세서 또는 하드웨어 가속기와 같은 프로세싱 엘리먼트 중 하나 이상에 흐름 그래프의 하나 이상의 태양을 매핑하도록 더 구성될 수 있다. 일부 실시예에 있어서, 흐름 그래프는 노드 및 에지를 포함할 수 있으며, 이 경우 각각의 노드는 연산을 식별시키고, 각각의 에지는, 연산이 수행되는 순서와 같은, 노드(예를 들어, 연산)들 간 관계를 식별시킨다. 컴파일러는 흐름 그래프의 컴퓨터 계산을 병렬화하기 위해 프로세싱 엘리먼트 중 하나에 노드(예를 들어, 연산)를 배정하도록 구성될 수 있다. 일부 실시예에 있어서, 흐름 그래프는 확장성 마크-업 언어(XML) 포맷으로 제공될 수 있다. 일부 실시예에 있어서, 컴파일러는 단일 프로세싱 엘리먼트에 다중 흐름 그래프를 할당하도록 구성될 수 있다.
일부 실시예에 있어서, 병렬 프로세싱 디바이스는 그 성능을 측정하고 정보를 컴파일러에 제공하도록 구성될 수 있다. 그래서, 컴파일러는 병렬 프로세싱 디바이스 내 프로세싱 엘리먼트에 현재 태스크의 할당을 결정하도록 병렬 프로세싱 디바이스로부터 수신된 과거 성능 정보를 사용할 수 있다. 일부 실시예에 있어서, 성능 정보는 프로세싱 디바이스에서 하나 이상의 프로세싱 엘리먼트에 의해 경험된 소정 수의 액세스 충돌을 나타낼 수 있다.
일부 경우에 있어서, 병렬 프로세싱 디바이스는 컴퓨터 계산 비용이 많이 들 수 있는 비디오 애플리케이션에서 사용될 수 있다. 비디오 애플리케이션의 컴퓨터 계산 요구를 다루기 위해, 병렬 프로세싱 디바이스는 메모리 액세스 동안 프로세싱 유닛들 간 액세스 충돌을 감축하도록 그 메모리 서브시스템을 구성할 수 있다. 이러한 목적을 위해, 앞서 논의된 바와 같이, 병렬 프로세싱 디바이스는, 모놀리식 메모리 뱅크를 메모리의 단일 물리적 블록으로서 사용하는 대신에, 모놀리식 메모리 뱅크를 다중의 물리적 RAM 인스턴스로 세분할 수 있다. 이러한 세분으로, 각각의 물리적 RAM 인스턴스는 판독 및 기록 연산에 대해 중재될 수 있고, 그로써 메모리 뱅크 내 물리적 RAM 인스턴스의 수만큼 이용가능한 대역폭을 증가시킬 수 있다.
일부 실시예에 있어서, 하드웨어 사이클-지향 중재는 또한 다중 트래픽 클래스 및 프로그래밍 가능한 스케줄링 마스크를 제공할 수 있다. 다중 트래픽 클래스 및 프로그래밍 가능한 스케줄링 마스크는 런타임 스케줄러를 사용하여 제어될 수 있다. 하드웨어 사이클-지향 중재 블록은, 라운드-로빈 스케줄링 기법으로 단일의 공유 자원의 다중 요청기를 할당하도록 구성될 수 있는, 포트 중재 블록을 포함할 수 있다. 라운드-로빈 스케줄링 기법에 있어서, 요청기(예를 들어, 프로세싱 엘리먼트)는 요청이 요청기들로부터 수신된 순서로 자원(예를 들어, 메모리)으로의 액세스가 승인된다. 일부 경우에 있어서, 포트 중재 블록은 다중 트래픽 클래스를 처리하도록 라운드-로빈 스케줄링 기법을 증강시킬 수 있다. 단일의 공유 자원은 벡터-프로세서, 필터 가속기 및 RISC 프로세서가 데이터를 공유하도록 액세스할 수 있는 RAM-타일, 공유 레지스터 또는 다른 자원을 포함할 수 있다. 부가적으로, 중재 블록은 우선순위 벡터 또는 최-우선순위 벡터로 자원의 라운드-로빈 할당에 우선하는 것에 대해 허용할 수 있다. 우선순위 벡터 또는 최우선순위 벡터는 관심 있는 특정 애플리케이션에 의한 필요에 따라 소정 트래픽 클래스(예를 들어, 비디오 트래픽 클래스)를 우선시하기 위해 런타임 스케줄러에 의해 제공될 수 있다.
일부 실시예에 있어서, 프로세싱 엘리먼트는 벡터 프로세서 또는 스트리밍 하이브리드 아키텍처 벡터 엔진 프로세서와 같은 프로세서, 하드웨어 가속기, 및 하드웨어 필터 연산기 중 하나 이상을 포함할 수 있다.
도 4는, 일부 실시예에 따라 다중 프로세서(예를 들어, 스트리밍 하이브리드 아키텍처 벡터 엔진(SHAVE) 프로세서)가 멀티포트 메모리 서브시스템을 공유할 수 있게 하는, 메모리 서브시스템을 갖는 병렬 프로세싱 디바이스를 예시하고 있다. 구체적으로, 도 4는 이미지 및 비디오 데이터를 프로세싱하는데 적합한 병렬 프로세싱 디바이스(400)를 도시하고 있다. 프로세싱 디바이스(400)는 프로세서와 같은 복수의 프로세싱 엘리먼트(402)를 포함한다. 도 4의 예시적 구성에 있어서, 프로세싱 디바이스(400)는 8개의 프로세서(SHAVE 0(402-0) 내지 SHAVE 7(402-7))를 포함한다. 각각의 프로세서(402)는 데이터가 메모리(412)로부터 로딩되고 그에 저장될 수 있게 하는 2개의 로드 스토어 유닛(404, 406)(LSU0, LSU1)을 포함할 수 있다. 각각의 프로세서(402)는 또한 명령어가 로딩될 수 있는 명령어 유닛(408)을 포함할 수 있다. 프로세서가 SHAVE를 포함하는 특정 실시예에 있어서, SHAVE는 축소형 명령어 세트 컴퓨터(RISC), 디지털 신호 프로세서(DSP), 매우 긴 명령어 워드(VLIW), 및/또는 그래픽 프로세싱 유닛(GPU) 중 하나 이상을 포함할 수 있다. 메모리(412)는 여기에서는 접속 매트릭스(CMX) 슬라이스라고 지칭되는 복수의 메모리 슬라이스(412-0 ... 412-7)를 포함한다. 각각의 메모리 슬라이스(412-N)는 대응하는 프로세서(402-7)와 연관된다.
병렬 프로세싱 디바이스(400)는 또한 프로세서(402)와 메모리 슬라이스(412)를 결합하는 상호접속 시스템(410)을 포함한다. 상호접속 시스템(410)은 여기에서는 SHAVE-간 상호접속부(ISI)라고 지칭된다. ISI는 프로세서(402)가 메모리 슬라이스(412) 중 어느 하나의 어느 부분에 데이터를 기록 또는 판독할 수 있게 통하는 버스를 포함할 수 있다.
도 5는 일부 실시예에 따른 병렬 프로세싱 디바이스의 섹션을 예시하고 있다. 섹션(500)은 단일 프로세서(402-N), 단일 프로세서(402-N)와 연관된 메모리 슬라이스(412-N), 단일 프로세서(402-N)와 다른 메모리 슬라이스(도시되지 않음)를 결합하는 ISI(410), 및 메모리 슬라이스(412-N) 내 타일과 프로세서(402) 간 통신을 중재하기 위한 타일 제어 로직(506)을 포함한다. 섹션(500)에서 예시된 바와 같이, 프로세서(402-N)는 프로세서(402-N)와 연관된 메모리 슬라이스(412-N)에 직접 액세스하도록 구성될 수 있고; 프로세서(402-N)는 ISI를 통하여 다른 메모리 슬라이스(도시되지 않음)에 액세스할 수 있다.
일부 실시예에 있어서, 각각의 메모리 슬라이스(412-N)는 복수의 RAM 타일 또는 물리적 RAM 블록(502-0 ... 502-N)을 포함할 수 있다. 예를 들면, 128kB의 사이즈를 갖는 메모리 슬라이스(412-N)는 4k x 32-비트 워드로서 조직된 4개의 32kB 단일-포트형 RAM 타일(예를 들어, 물리적 RAM 엘리먼트)을 포함할 수 있다. 일부 실시예에 있어서, 타일(502)은 논리적 RAM 블록이라고도 지칭될 수 있다. 일부 실시예에 있어서, 타일(502)은 단일 포트형 상보적 금속-산화막-반도체(CMOS) RAM을 포함할 수 있다. 단일 포트형 CMOS RAM의 이점은 그것이 대부분의 반도체 프로세스에서 일반적으로 이용가능하다는 것이다. 다른 실시예에 있어서, 타일(502)은 멀티-포트형 CMOS RAM을 포함할 수 있다.
일부 실시예에 있어서, 각각의 타일(502)은 타일 제어 로직(506)과 연관될 수 있다. 타일 제어 로직(506)은 프로세서(402)로부터 요청을 수신하도록 구성되고 연관된 타일(502)의 개개의 판독 및 기록-포트로의 액세스를 제공한다. 예를 들어, 프로세싱 엘리먼트(402-N)가 RAM 타일(502-0) 내 데이터에 액세스하기를 원할 때, 프로세싱 엘리먼트(402-N)가 직접 RAM 타일(502-0)에 메모리 데이터 요청을 보내기 전에, 프로세싱 엘리먼트(402-N)는 RAM 타일(502-0)과 연관된 타일 제어 로직(506-0)에 메모리 액세스 요청을 보낼 수 있다. 메모리 액세스 요청은 프로세싱 엘리먼트(402-N)에 의해 요청된 데이터의 메모리 주소를 포함할 수 있다. 후속하여, 타일 제어 로직(506-0)은 메모리 액세스 요청을 분석하고 프로세싱 엘리먼트(402-N)가 요청된 메모리에 액세스할 수 있는지 결정할 수 있다. 프로세싱 엘리먼트(402-N)가 요청된 메모리에 액세스할 수 있으면, 타일 제어 로직(506-0)은 프로세싱 엘리먼트(402-N)에 액세스 승인 메시지를 보낼 수 있고, 후속하여, 프로세싱 엘리먼트(402-N)는 RAM 타일(502-0)에 메모리 데이터 요청을 보낼 수 있다.
다중 프로세싱 엘리먼트에 의한 동시 액세스에 대한 잠재력이 있으므로, 일부 실시예에 있어서, 타일 제어 로직(506)은 프로세서 또는 가속기와 같은 2개 이상의 프로세싱 엘리먼트가 메모리 슬라이스 내 타일 중 어느 하나에 액세스하려고 시도하는 인스턴스를 검출하도록 구성되는 충돌 검출기를 포함할 수 있다. 충돌 검출기는 시도된 동시 액세스에 대한 각각의 타일(502)로의 액세스를 모니터링할 수 있다. 충돌 검출기는 액세스 충돌이 일어났고 해결될 필요가 있음을 런타임 스케줄러에 보고하도록 구성될 수 있다.
도 6은 일부 실시예에 따른 타일 제어 로직 내 중앙집중형 충돌 검출 시스템을 예시하고 있다. 충돌 검출 시스템은 복수의 원-핫 주소 인코더(602) 및 복수의 충돌 검출기(604)를 포함하는 중앙집중형 중재 블록(608)을 포함할 수 있다. 일부 실시예에 있어서, 원-핫 주소 인코더(602)는 프로세싱 엘리먼트(402) 중 하나로부터 메모리 액세스 요청을 수신하도록 그리고 메모리 액세스 요청이 원-핫 주소 인코더(602)와 연관된 RAM 타일(502)에 저장된 데이터에 대한 것인지 결정하도록 구성된다. 각각의 충돌 검출기(604)는, 충돌 검출기(602)와 연관된 타일(502)에 액세스할 수 있는 프로세싱 엘리먼트(402) 중 하나에 또한 결합되는, 하나 이상의 원-핫 주소 인코더(602)에 결합될 수 있다. 일부 실시예에 있어서, 충돌 검출기(604)는 특정 RAM 타일(502)과 연관된 모든 원-핫 주소 인코더(602)에 결합될 수 있다.
메모리 액세스 요청이 원-핫 주소 인코더(602)와 연관된 RAM 타일(502)에 저장된 데이터에 대한 것이면, 그때 원-핫 주소 인코더(602)는 특정 RAM 타일의 충돌 검출기(604)에 비트 값 "1"을 제공할 수 있고; 메모리 액세스 요청이 원-핫 주소 인코더(602)와 연관된 RAM 타일(502)에 저장된 데이터에 대한 것이 아니면, 그때 원-핫 주소 인코더(602)는 특정 RAM 타일의 충돌 검출기(604)에 비트 값 "0"을 제공할 수 있다.
일부 실시예에 있어서, 원-핫 주소 인코더(602)는 메모리 액세스 요청의 표적 주소를 분석함으로써 메모리 액세스 요청이 원-핫 주소 인코더(602)와 연관된 RAM 타일(502)에 저장된 데이터에 대한 것인지 결정하도록 구성된다. 예를 들어, 원-핫 주소 인코더(602)와 연관된 RAM 타일(502)이 0x0000과 0x00ff의 메모리 주소 범위로 설계될 때, 그때 원-핫 주소 인코더(602)는 메모리 액세스 요청의 표적 주소가 0x0000과 0x00ff의 범위 내에 드는지 결정할 수 있다. 그러하다면, 메모리 액세스 요청은 원-핫 주소 인코더(602)와 연관된 RAM 타일(502)에 저장된 데이터에 대한 것이고; 그러하지 않다면, 메모리 액세스 요청은 원-핫 주소 인코더(602)와 연관된 RAM 타일(502)에 저장된 데이터에 대한 것이 아니다. 일부 경우에 있어서, 원-핫 주소 인코더(602)는 메모리 액세스 요청의 표적 주소가 RAM 타일(502)과 연관된 주소 범위 내에 드는지 결정하도록 범위 비교 블록을 사용할 수 있다.
충돌 검출기(604)가 모든 원-핫 주소 인코더(602)로부터 비트 값을 수신하고 나면, 충돌 검출기(604)는 동일한 RAM 타일(502)로의 액세스를 현재 요청하고 있는 프로세싱 엘리먼트(402)가 하나보다 많은지 결정하도록 그 수신된 비트 값에서 "1"의 수를 카운팅(예를 들어, 비트 값을 합산)할 수 있다. 동일한 RAM 타일(502)로의 액세스를 현재 요청하고 있는 프로세싱 엘리먼트가 하나보다 많으면, 충돌 검출기(604)는 충돌을 보고할 수 있다.
도 7은 일부 실시예에 따른 타일 제어 로직 내 분산형 충돌 검출 시스템을 예시하고 있다. 분산형 충돌 검출 시스템은 복수의 충돌 검출기(704)를 포함하는 분상형 중재기(702)를 포함할 수 있다. 분산형 충돌 검출 시스템의 동작은 실질적으로는 중앙집중형 충돌 검출 시스템의 동작과 유사하다. 이러한 경우에 있어서, 충돌 검출기(704)는 분산된 방식으로 배열된다. 특히, 분산형 중재기(702)는 직렬 방식으로 배열되는 충돌 검출기(704)를 포함할 수 있고, 이 경우 각각의 충돌 검출기(704)는 특정 RAM 타일(502)과 연관된 원-핫 주소 인코더(602)의 서브세트에만 결합된다. 이러한 배열은 충돌 검출기(704)가 특정 RAM 타일(502)과 연관된 모든 원-핫 주소 인코더(602)에 결합되는 중앙집중형 충돌 검출 시스템과 다르다.
예를 들어, 특정 RAM 타일(502)이 64개의 프로세싱 엘리먼트(402)에 의해 액세스될 수 있을 때, 제1 충돌 검출기(704-0)는 32개의 프로세싱 엘리먼트로부터 메모리 액세스 요청을 수신할 수 있고 제2 충돌 검출기(704-1)는 잔여 32개의 프로세싱 엘리먼트로부터 메모리 액세스 요청을 수신할 수 있다. 제1 충돌 검출기(704-0)는 그 자신에 결합된 32개의 프로세싱 엘리먼트로부터의 하나 이상의 메모리 액세스 요청을 분석하고, 그 자신에 결합된 32개의 프로세싱 엘리먼트 중, 특정 RAM 타일(502-0)로의 액세스를 요청하고 있는 엘리먼트의 제1 수를 결정하도록 구성될 수 있다. 병렬로, 제2 충돌 검출기(704-1)는 그 자신에 결합된 32개의 프로세싱 엘리먼트로부터의 하나 이상의 메모리 액세스 요청을 분석하고, 그 자신에 결합된 32개의 프로세싱 엘리먼트 중, 특정 RAM 타일(502-0)로의 액세스를 요청하고 있는 엘리먼트의 제2 수를 결정하도록 구성될 수 있다. 그 후 제2 충돌 검출기(704)는 64개의 프로세싱 엘리먼트 중 얼마나 많은 것이 특정 RAM 타일(502-0)로의 액세스를 요청하고 있는지 결정하도록 제1 수와 제2 수를 가산할 수 있다.
충돌 검출 시스템이 충돌을 검출하고 나면, 충돌 검출 시스템은 요청기(402)에 정지 신호를 보낼 수 있다. 도 8은 일부 실시예에 따라 요청기에 충돌 신호를 보고하기 위한 중재 블록을 도시하고 있다. 더 구체적으로, 충돌 검출 시스템에서의 범위-비교 블록의 출력은 요청기에 정지 신호를 발생시키도록 OR 게이트를 사용하여 조합된다. 정지 신호는 하나보다 많은 프로세싱 엘리먼트가 요청기와 연관된 메모리 슬라이스 내 동일한 물리적 RAM 서브-블록에 액세스하려고 시도하고 있음을 나타낸다. 정지 신호 수신시, 요청기는 충돌이 치워질 때까지 메모리 액세스 연산을 정지할 수 있다. 일부 실시예에 있어서, 충돌은 프로그램 코드와는 독립적으로 하드웨어에 의해 치워질 수 있다.
일부 실시예에 있어서, 중재 블록은 사이클 입도로 동작할 수 있다. 그러한 실시예에 있어서, 중재 블록은 다중 클록 사이클을 포함할 수 있는 태스크 레벨 입도로보다는 클록 사이클 입도로 자원을 할당한다. 그러한 사이클-지향 스케줄링은 시스템의 성능을 개선할 수 있다. 중재 블록은 중재 블록이 실시간으로 사이클-지향 스케줄링을 수행할 수 있도록 하드웨어에서 구현될 수 있다. 예를 들어, 어느 특정 인스턴스에서, 하드웨어에서 구현된 중재 블록은 다음 클록 사이클에 대한 자원을 할당하도록 구성될 수 있다.
도 9는 일부 실시예에 따른 사이클-지향 중재 블록을 예시하고 있다. 사이클-지향 중재 블록은 포트 중재 블록(900)을 포함할 수 있다. 포트 중재 블록(900)은 제1 포트 선택 블록(930) 및 제2 포트 선택 블록(932)을 포함할 수 있다. 제1 포트 선택 블록(930)은 슬라이스 포트[0]에 결합된 메모리 슬라이스에 액세스하도록 (클라이언트 요청 벡터에서 비트 위치로서 식별된) 메모리 액세스 요청 중 어느 것이 슬라이스 포트[0]에 배정되는지 결정하도록 구성되는 반면, 제2 선택 블록(932)은 슬라이스 포트[1]에 결합된 메모리 슬라이스에 액세스하도록 클라이언트 요청 벡터 중 어느 것이 슬라이스 포트[1]에 배정되는지 결정하도록 구성된다.
제1 포트 선택 블록(930)은 제1 리딩 원 검출기(LOD)(902-0) 및 제2 LOD(902-1)를 포함한다. 제1 LOD(902-0)는, 복수의 비트를 포함할 수 있는, 클라이언트 요청 벡터를 수신하도록 구성된다. 클라이언트 요청 벡터에서의 각각의 비트는 메시지 액세스 요청이 그 비트 위치와 연관된 요청기로부터 수신되었는지 여부를 나타낸다. 일부 경우에 있어서, 클라이언트 요청 벡터는 "액티브 하이" 모드로 동작한다. 제1 LOD(902-0)가 클라이언트 요청 벡터를 수신하고 나면, 제1 LOD(902-0)는, 좌측으로부터 우측으로 카운팅하여, 요청이 처음으로 영이 아니게 되는 비트 위치를 검출하고, 그로써, 좌측으로부터 우측으로 카운팅하여, 제1 포트 선택 블록(930)에 제1 메모리 액세스 요청을 식별시키도록 구성된다. 병렬로, 클라이언트 요청 벡터는 마스크 레지스터(906) 및 마스크 좌측 시프터(904)에 의해 발생된 마스크를 사용하여 마스킹된 클라이언트 요청 벡터를 발생시키도록 AND 로직 연산기(912)에 의해 마스킹될 수 있다. 마스크 레지스터(906)는 마스크 레지스터(906)와 통신하고 있는 프로세서에 의해 설정될 수 있고, 마스크 좌측 시프터(904)는 마스크 레지스터(906)에 의해 표현된 마스크를 좌측으로 시프트하도록 구성될 수 있다. 제2 LOD(902-1)는 AND 로직 연산기(912)로부터 마스킹된 클라이언트 요청 벡터를 수신하고, 마스킹된 클라이언트 요청 벡터에서 리딩 1을 검출할 수 있다.
제1 LOD(902-0) 및 제2 LOD(902-1)로부터의 출력은 그 후 포트[0] 승자 선택 블록(908)에 제공된다. 포트[0] 승자 선택 블록(908)은 2개의 부가적 입력: 우선순위 벡터 및 최-우선순위 벡터를 더 수신한다. 포트[0] 승자 선택 블록(908)은, 입력의 우선순위에 기반하여, 수신된 메모리 액세스 요청 중 어느 것이 슬라이스 포트[0]에 배정되어야 하는지 결정하도록 구성된다. 일부 실시예에 있어서, 입력의 우선순위는 다음과 같이 랭킹될 수 있다: 가장 높은 우선순위를 갖는 최-우선순위 벡터로 시작하여, 마스킹된 LOD 벡터를 우선순위 요청과 비-우선순위 요청으로 분할하는 우선순위 벡터, 그 다음에 가장 낮은 우선순위를 갖는 마스킹되지 않은 LOD 벡터. 다른 실시예에서는, 다른 우선순위가 특정될 수 있다.
제1 포트 선택 블록(930)은 클라이언트 요청 벡터가 슬라이스 포트[0]에 배정될 수 있는지 결정하도록 구성될 수 있는 한편, 제2 포트 선택 블록(932)은 클라이언트 요청 벡터가 슬라이스 포트[1]에 배정될 수 있는지 결정하도록 구성될 수 있다. 제2 포트 선택 블록(932)은 제1 트레일링 원 검출기(TOD)(912-0), 제2 TOD(912-1), 마스크 레지스터(914), 마스크 우측 시프터(916), 포트[1] 승자 선택 블록(918), 및 마스킹 AND 로직 블록(920)을 포함한다. TOD(912)는 복수의 비트를 포함할 수 있는 클라이언트 요청 벡터를 수신하고, 우측으로부터 좌측으로 카운팅하여, 벡터가 처음으로 영이 아니게 되는 비트 위치를 검출하도록 구성된다. 제2 포트 선택 블록(932)의 동작은 그것이 입력 벡터의 우측으로부터 좌측으로 동작하여 트레일링-원 검출기(912-0)를 사용하여 입력 요청 벡터에서 트레일링 원을 선택한다는 것을 제외하고는 제1 포트 선택 블록(930)과 실질적으로 유사하다.
포트 승자 선택 블록(908, 918)의 출력은 또한, 동일한 메모리 액세스 요청이 슬라이스 포트[0]와 슬라이스 포트[1] 양자로의 액세스를 획득하였는지 결정하도록 구성되는, 동일한 승자 검출 블록(910)에 제공된다. 동일한 클라이언트 요청 벡터가 슬라이스 포트[0]와 슬라이스 포트[1] 양자로의 액세스를 획득하였으면, 동일한 승자 검출 블록(910)은 요청을 라우팅하도록 슬라이스 포트 중 하나를 선택하고 다른 포트를 입력 벡터에서의 다음의 가장 높은 랭킹 요청에 할당한다. 이것은 특정 요청에 대한 자원의 과잉-할당을 회피하고, 그로써 경쟁하는 요청에 대한 자원의 할당을 개선한다.
포트 중재 블록(900)의 동작은 32-비트 클라이언트 요청 벡터의 좌변으로부터 시작함으로써 작업하고 마스킹된 LOD(902-1)는 제1 마스킹된 요청 벡터의 위치를, 이러한 마스킹된 요청 벡터가 LOD 위치에 대응하는 요청기가 획득하는 우선순위 또는 최-우선순위 벡터를 통하여 더 높은 우선순위 입력에 의해 대체되지 않고 포트[0]로의 액세스를 승인받으면, 출력한다. LOD 위치는 또한 32-비트 좌측-시프터(904)를 통하여 마스크 위치를 전진시키는데 사용되고 그리고 또한 동일한 요청기가 양 포트로의 액세스를 부여받았는지 체크하도록 포트 1 LOD 배정과 비교하는데 사용되고 이러한 경우에 있어서 연속하는 동일한 승자 검출의 경우에 포트 0과 1 간 교번 기반으로 액세스를 승인하도록 토글링되는 플립-플롭으로 포트 중 하나만이 승인된다. 마스킹된 검출기(902-1)로부터 출력된 LOD에 우선순위 벡터에서의 대응하는 일 비트를 통하여 우선순위가 배정된 경우에, 요청하는 클라이언트는 포트 0으로의 2 백-투-백 사이클 액세스를 승인받는다. 마스킹된 클라이언트 요청 벡터에서 리딩 원이 없고 더 높은 우선순위 요청이 존재하지 않는 경우에, 마스킹되지 않은 LOD가 포트 0로의 액세스를 획득하고 배정받는다. 위 경우들 중 어느 경우에서라도, 최-우선순위 벡터에서의 1-비트는 이전 요청 중 어느 것보다도 우선하고 포트 0로의 무제한 액세스를 요청기에 승인할 것이다.
선도의 하위 부분에서의 로직은 요청 벡터의 우변으로부터 시작하고 그밖에는 요청 벡터의 좌변으로부터 시작하는 상위 부분과 동일한 방식으로 동작한다. 이러한 경우에 있어서, 우선순위 등의 관점에서 포트 1 중재 블록의 동작은 로직의 포트 0 부분의 동작과 똑같다.
일부 실시예에 있어서, 프로세싱 엘리먼트(402)는 메모리 액세스 중재에 기인하는 메모리 액세스의 레이턴시를 감축하도록 버퍼를 포함할 수 있다. 도 10은 일부 실시예에 따라 메모리 액세스 중재에 기인하는 메모리 액세스 레이턴시를 감축하기 위한 메커니즘을 예시하고 있다. 전형적 메모리 액세스 중재 기법에 있어서, 메모리 액세스 중재 블록은 파이프라인형이어서, RAM 타일(502)과 같은 공유 자원을 복수의 프로세싱 엘리먼트(예를 들어, 요청기) 중 하나에 할당할 때 고정된 오버헤드 중재 페널티를 초래한다. 예를 들어, 요청기(402)가 중재 블록(608/702)에 메모리 액세스 요청을 보낼 때, 이하의 단계의 각각에서 적어도 하나의 사이클이 걸리기 때문에 요청기(402)가 액세스 승인 메시지를 수신하는데 적어도 4개의 사이클이 걸린다: (1) 원-핫 주소 인코더(602)에서 메모리 액세스 요청을 분석한다, (2) 중재 블록(608/702)에서 원-핫 주소 인코더(602)의 출력을 분석한다, (3) 중재 블록(608/702)에 의해 원-핫 주소 인코더(602)에 액세스 승인 메시지를 보낸다, 그리고 (4) 원-핫 주소 인코더(602)에 의해 요청기(402)에 액세스 승인 메시지를 보낸다. 그 후, 후속하여, 요청기(402)는 RAM 타일(502)에 메모리 데이터 요청을 보내고 RAM 타일(502)로부터 데이터를 수신하여야 하는데, 그 각각은 적어도 하나의 사이클이 걸린다. 그래서, 메모리 액세스 연산은 적어도 6개의 사이클의 레이턴시를 갖는다. 이러한 고정된 페널티는 메모리 서브시스템의 대역폭을 감축할 것이다.
이러한 레이턴시 문제는 프로세싱 엘리먼트(402)에 유지된 메모리 액세스 요청 버퍼(1002)로 다뤄질 수 있다. 예를 들어, 메모리 액세스 요청 버퍼(1002)는 클록 사이클마다 프로세싱 엘리먼트로부터 메모리 액세스 요청을 수신하고, 수신된 메모리 액세스 요청을 그것들이 메모리 중재 블록(608/702)에 보내질 준비가 될 때까지 저장할 수 있다. 버퍼(1002)는 메모리 액세스 요청이 메모리 중재 블록(608/702)에 보내지는 레이트와 데이터가 메모리 서브시스템으로부터 수신되는 레이트를 사실상 동기화한다. 일부 실시예에 있어서, 버퍼는 큐를 포함할 수 있다. 버퍼(1002)에서의 엘리먼트의 수(예를 들어, 버퍼의 깊이)는 메모리 서브시스템으로부터 데이터를 검색하기 위한 사이클의 수보다 더 클 수 있다. 예를 들어, RAM 액세스 레이턴시가 6개의 사이클일 때, 버퍼(1002)에서의 엘리먼트의 수는 10일 수 있다. 버퍼(1002)는 중재 레이턴시 페널티를 감축하고 메모리 서브시스템의 처리율을 개선할 수 있다. 메모리 액세스 요청 버퍼로는, 원칙적으로, 총 메모리 대역폭의 100%까지 요청기 간에 할당될 수 있다.
다중 RAM 인스턴스를 사용하는 것과의 잠재적 문제는, 뱅크 내 서브-인스턴스로의 다중 프로세싱 엘리먼트에 의한 동시 액세스를 허용함으로써, 메모리 경합이 초래될 수 있다는 것임을 이해할 것이다.
본 발명은 메모리 경합을 다루도록 적어도 2개의 접근법을 제공한다. 첫째로, 추후 설명될 바와 같이, 경합 및/또는 메모리 충돌을 감축하도록 메모리 서브시스템에서 데이터를 주의깊게 레이아웃함으로써 메모리 경합 및/또는 메모리 충돌을 회피하도록 소프트웨어 설계에 주의한다. 더욱, 병렬 프로세싱 디바이스와 연관된 소프트웨어 개발 툴은 메모리 경합 또는 메모리 충돌이 소프트웨어 설계 단계 동안 보고될 수 있게 할 수 있다. 그래서, 메모리 경합 문제 또는 메모리 충돌 문제는 소프트웨어 설계 단계 동안 보고된 메모리 경합 또는 메모리 충돌에 응답하여 데이터 레이아웃을 개선함으로써 정정될 수 있다.
둘째로, 아래에서 더 설명되는 바와 같이, 아키텍처 내 ISI 블록은 하드웨어에서의 포트-충돌(경합)을 검출하고 더 낮은 우선순위를 갖는 프로세싱 엘리먼트를 멎게 하도록 구성된다. 예를 들어, ISI 블록은 프로세싱 엘리먼트로부터의 메모리 액세스 요청을 분석하고, 메모리 액세스 요청의 시퀀스에 서비싱하고, 모든 프로세싱 엘리먼트로부터의 모든 데이터 판독 또는 기록이 우선순위 순서로 완료되도록 우선순위 순서에 따라 메모리 액세스 요청을 라우팅하도록 구성된다.
프로세싱 엘리먼트 간 우선순위 순서는 여러 방식으로 확립될 수 있다. 일부 실시예에 있어서, 우선순위 순서는 시스템 설계 시간에서 정적으로 정의될 수 있다. 예를 들어, 우선순위 순서는 시스템 파워업 때 시스템이 사전-배정된 우선순위 세트로 파워업하도록 시스템 레지스터에 대한 재설정 상태로서 코딩될 수 있다. 다른 실시예에 있어서, 우선순위 순서는 사용자-프로그래밍 가능한 레지스터를 통하여 동적으로 결정될 수 있다.
일부 실시예에 있어서, 프로그래머는 메모리 슬라이스 내 메모리의 공유 서브-블록에 대한 경합을 감축하기 위해 그들 소프트웨어 애플리케이션에 대한 데이터-레이아웃을 계획할 수 있다. 일부 경우에 있어서, 데이터-레이아웃의 계획은 중재 블록에 의해 조력받을 수 있다. 예를 들어, 중재 블록은 메모리 경합을 검출하고, 가장 높은 우선순위 태스크와 연관된 프로세싱 엘리먼트에, 우선순위에 기반하여, 메모리로의 액세스를 승인하고, 경합하고 있는 다른 프로세싱 엘리먼트를 멎게 하고, 경합이 해결될 때까지 프로세스마다 일일이 경합을 풀 수 있다.
도 11은 일부 실시예에 따른 스케줄링 소프트웨어의 애플리케이션을 예시하고 있다. 이러한 애플리케이션에 있어서, 스케줄링 소프트웨어는 프로세싱 파이프라인 내 3x3 블러 커널의 구현을 조정할 수 있다. 스케줄링 소프트웨어는, 런타임에서, 연산의 순서화를 결정하고 프로세싱 엘리먼트에 의한 연산을 조정할 수 있다. 파이프라인에 대한 흐름-그래프(1100)는 엘리먼트1 내지 엘리먼트5(1102 내지 1110)를 포함한다. 엘리먼트1(1102)는 입력 버퍼(1112), 프로세싱 블록(1144) 및 출력 버퍼(1114)를 포함할 수 있다. 입력 버퍼(1112) 및 출력 버퍼(1114)는 플립-플롭을 사용하여 구현될 수 있다. 일부 실시예에 있어서, 다른 엘리먼트(1104 내지 1110)의 각각은 엘리먼트1(1102)와 실질적으로 유사한 구조를 가질 수 있다.
일부 실시예에 있어서, 엘리먼트2(1104)는 3x3 블러 필터로 입력을 필터링할 수 있는 프로세싱 엘리먼트(예를 들어, 벡터 프로세서 또는 하드웨어 가속기)를 포함할 수 있다. 엘리먼트2(1104)는, 엘리먼트1(1102)의 출력을 일시적으로 유지하는, 공유 버퍼(1118)로부터 입력을 수신하도록 구성될 수 있다. 3x3 블러 커널을 입력에 적용하기 위해, 엘리먼트2(1104)는 그것이 연산을 개시할 수 있기 전에 공유 입력 버퍼(1118)로부터 데이터의 적어도 3개 라인을 수신할 수 있다. 그리하여, RISC 프로세서(1122) 상에서 실행될 수 있는 SW 스케줄러(1120)는 그것이 필터링 연산을 개시할 수 있음을 엘리먼트2(1104)에 신호보내기 전에 공유 버퍼(1118)에 데이터의 라인의 올바른 수가 포함되어 있음을 검출할 수 있다.
데이터의 3개 라인이 존재한다는 초기 신호에 뒤이어, SW 스케줄러(1120)는 각각의 부가적 새로운 라인이 롤링 3-라인 버퍼(1118)에 부가되었을 때를 엘리먼트2(1104)에 신호보내도록 구성될 수 있다. 라인-대-라인 동기화에 부가하여, 사이클-대-사이클 중재 및 동기화가 파이프라인에서의 각각의 엘리먼트에 대해 수행된다. 예를 들면, 엘리먼트1(1102)는 사이클당 하나의 완전 출력 픽셀을 산출하는 하드웨어 가속기를 포함할 수 있다. 이러한 처리율을 달성하기 위해, 하드웨어 가속기는 입력 버퍼(1112)를 가득 차게 유지할 수 있고 그래서 프로세싱 블록(1114)은 그 연산을 계속하기에 충분한 데이터를 갖는다. 이러한 식으로, 프로세싱 블록(1114)은 엘리먼트(1102)의 처리율을 가능한 높게 유지하기에 충분한 출력을 산출할 수 있다.
일부 실시예에 있어서, 소프트웨어 툴 체인은 메모리 서브시스템을 사용하는 소프트웨어 프로그램을 분석하는 것으로부터 메모리 상충을 예측할 수 있다. 소프트웨어 툴 체인은 개발자가 코드를 편집하고, 컴파일러, 어셈블러를 호출하고, 필요할 때 소스-레벨 디버깅을 수행할 수 있는 그래픽 사용자 인터페이스(GUI)-기반 통합 개발 환경(IDE)(예를 들어, 이클립스(Eclipse)-기반 IDE)을 포함할 수 있다. 소프트웨어 툴 체인은, 모든 프로세싱, 버스, 메모리 엘리먼트 및 주변장치를 모델링하는, 시스템 시뮬레이터를 사용하여 다중 프로세서 상에서 실행 중인 프로그램의 동적 분석을 통하여 메모리 상충을 예측하도록 구성될 수 있다. 또한, 소프트웨어 툴 체인은, 여러 다른 프로세서 또는 하드웨어 자원 상에서 실행 중인 여러 다른 프로그램이 메모리 슬라이스의 특정 블록으로의 동시발생적 액세스를 시도하면, 로그 파일 또는 디스플레이 디바이스에 로깅하도록 구성될 수 있다. 소프트웨어 툴 체인은 사이클-대-사이클 기반으로 로깅하도록 구성될 수 있다.
일부 실시예에 있어서, 파이프라인(1100)은 메모리 충돌이 일어날 때마다 증분되는 하나 이상의 하드웨어 카운터(예를 들어, 각각의 메모리 인스턴스에 대해 하나의 카운터)를 또한 포함할 수 있다. 그때 이들 카운터는 하드웨어 디버거(예를 들어, JTAG)에 의해 판독되고 스크린 상에 디스플레이되거나 파일에 로깅될 수 있다. 시스템 프로그래머에 의한 로그 파일의 후속 분석은 메모리 포트 충돌 가능성을 감축하도록 메모리 액세스가 서로 다르게 스케줄링될 수 있게 할 수 있다.
(도 2에 예시된) IBM의 셀 아키텍처의 프로그래머에 대한 하나의 핵심적 어려움은 벡터 프로세서가 데이터에 액세스할 때까지 데이터가 DMA에 의해 제어되어 로컬 저장소(LS)에 저장될 수 있도록 미리 수백 사이클 데이터-전송을 프로그램으로 스케줄링하는 것이다. 개시된 아키텍처의 일부 실시예는 하드웨어에서 액세스의 중재 및 스케줄링을 취급하고 사용자-판독가능한 하드웨어 카운터에서 충돌을 로깅함으로써 이러한 문제를 다룰 수 있다. 이것은 개시된 아키텍처가 고성능 비디오/이미지 프로세싱 파이프라인을 생성하는데 사용될 수 있게 한다.
도 12는 일부 실시예에 따라 병렬 프로세싱 디바이스를 갖는 시스템의 계층적 구조를 제공하고 있다. 시스템(1200)은, 필터와 같은, 복수의 프로세싱 엘리먼트를 갖는 병렬 컴퓨팅 시스템(1202), 및 병렬 컴퓨팅 시스템(1204) 상에서 실행되는 소프트웨어 애플리케이션(1204), 병렬 컴퓨팅 시스템(1202)과 애플리케이션(1204)을 인터페이싱하기 위한 애플리케이션 프로그래밍 인터페이스(API)(1206), 병렬 컴퓨팅 시스템(1202) 상에서 실행되도록 소프트웨어 애플리케이션(1204)을 컴파일링하는 컴파일러(1208), 및 병렬 컴퓨팅 시스템(1202)에서의 프로세싱 엘리먼트의 연산을 제어하기 위한 런타임 스케줄러(1210)를 포함할 수 있다.
일부 실시예에 있어서, 개시된 병렬 프로세싱 디바이스는, 이미지-프로세싱 파이프라인이 흐름-그래프로서 기술될 수 있게 하는, 파이프라인 기술 툴(예를 들어, 소프트웨어 애플리케이션)(1204)과 함께 동작하도록 구성될 수 있다. 파이프라인 기술 툴(1204)은 기저 하드웨어/소프트웨어 플랫폼과는 독립적인 융통성 있는 방식으로 이미지/비전 프로세싱 파이프라인을 기술할 수 있다. 특히, 파이프라인 기술 툴에 의해 사용된 흐름-그래프는 흐름-그래프를 구현하는데 사용될 수 있는 프로세싱 엘리먼트(예를 들어, 프로세서 및 필터 가속기 자원)와는 독립적으로 태스크가 기술될 수 있게 한다. 파이프라인 기술 툴의 결과적 출력은 방향성 비사이클 그래프(DAG) 또는 흐름 그래프의 기술을 포함할 수 있다. DAG 또는 흐름 그래프의 기술은 XML과 같은 적합한 포맷으로 저장될 수 있다.
일부 실시예에 있어서, DAG 또는 흐름 그래프의 기술은 시스템(1200)에서의 모든 다른 툴이 액세스가능할 수 있고, DAG에 따라 병렬 프로세싱 디바이스의 연산을 제어하는데 사용될 수 있다. 도 13은 일부 실시예에 따라 DAG 또는 흐름 그래프의 기술이 어떻게 병렬 프로세싱 디바이스의 연산을 제어하는데 사용될 수 있는지 예시하고 있다.
컴퓨팅 디바이스의 실제 연산 이전에, 병렬 프로세싱 디바이스(1202)에 대한 컴파일러(1208)는 (1) 흐름-그래프의 기술(1306) 및 (2) 이용가능한 자원의 기술(1302)을 취하고, DAG가 다중 프로세싱 엘리먼트에 걸쳐 어떻게 수행될 수 있는지 나타내는 태스크 리스트(1304)를 발생시킬 수 있다. 예를 들어, 태스크가 단일 프로세싱 엘리먼트 상에서 수행될 수 없을 때, 컴파일러(1208)는 다중 프로세싱 엘리먼트에 걸쳐 태스크를 분할할 수 있고; 태스크가 단일 프로세싱 엘리먼트 상에서 수행될 수 있을 때, 컴파일러(1208)는 태스크를 단일 프로세싱 엘리먼트에 배정할 수 있다.
일부 경우에 있어서, 태스크가 프로세싱 엘리먼트의 능력의 일부만을 사용할 것일 때, 컴파일러(1208)는, 프로세싱 엘리먼트에 의해 지원될 수 있는 한도까지, 순차적 방식으로 단일 프로세싱 엘리먼트 상에서 실행될 다중 태스크를 융합 및 스케줄링할 수 있다. 도 14a는 일부 실시예에 따라 컴파일러 및 스케줄러에 의한 태스크의 스케줄링 및 발행을 예시하고 있다. 컴파일러 및 스케줄러를 사용하여 태스크를 스케줄링하는 이점은 컴파일러 및 스케줄러가 태스크에 의해 수행되는 연산에 기반하여 태스크를 자동으로 스케줄링할 수 있다는 것이다. 이것은 프로그래머가, 주변장치로부터 CMX로, CMX로부터 CMX 블록으로 그리고 CMX로부터 다시 주변장치로 DMA에 의한 데이터 전송을 언제 스케줄링할지를 포함하여, 특정 태스크를 실행하는 프로세싱 엘리먼트 또는 프로세싱 엘리먼트 그룹 상에서 실행 중인 코드에 대한 스케줄을 수동으로 결정해야 했었던 종래 기술에 비해 큰 이점이다. 이것은 고되고 오류나기 쉬운 태스크였고 DFG의 사용은 이러한 프로세스가 자동화될 수 있게 하여 시간을 절약하고 생산성을 증가시킨다.
컴퓨팅 디바이스의 런타임 동안, 런타임 스케줄러(1210)는 컴파일러(1208)에 의해 발생된 태스크 리스트(1304)에 기반하여 이용가능한 프로세싱 엘리먼트에 걸쳐 태스크를 동적으로 스케줄링할 수 있다. 런타임 스케줄러(1210)는 멀티코어 시스템에서 호스트 RISC 프로세서(1306) 상에서 동작할 수 있고, 하드웨어 성능 모니터 및 타이머(1308)로부터의 통계를 사용하여, 복수의 벡터 프로세서, 필터 가속기 및 직접 메모리 액세스(DMA) 엔진과 같은 프로세싱 엘리먼트에 걸쳐 태스크를 스케줄링할 수 있다. 일부 실시예에 있어서, 하드웨어 성능 모니터 및 타이머(1308)는, 런타임 스케줄러(1210)에 의해 판독될 수 있는, 멎음 카운터, CMX-충돌 카운터, 버스 사이클-카운터(ISI, APB 및 AXI) 밍 사이클-카운터를 포함할 수 있다.
일부 실시예에 있어서, 런타임 스케줄러(1210)는 하드웨어 성능 모니터 및 타이머(1308)로부터의 통계에 기반하여 이용가능한 프로세싱 엘리먼트에 태스크를 배정할 수 있다. 하드웨어 성능 모니터 및 타이머(1308)는 프로세싱 엘리먼트의 효율을 증가시키도록, 또는 전력을 절약하거나 다른 태스크가 병렬로 컴퓨팅될 수 있게 하기 위해 더 적은 수의 프로세싱 엘리먼트를 사용하여 태스크를 수행하도록 사용될 수 있다.
이러한 목적으로, 하드웨어 성능 모니터 및 타이머(1308)는 성능 메트릭을 제공할 수 있다. 성능 메트릭은 프로세싱 엘리먼트의 활동 레벨을 나타내는 수일 수 있다. 성능 메트릭은 태스크를 수행하도록 인스턴스 생성된 프로세싱 엘리먼트의 수를 제어하는데 사용될 수 있다. 예컨대, 특정 프로세싱 엘리먼트와 연관된 성능 메트릭이 사전 결정된 임계치보다 더 클 때, 그때 런타임 스케줄러(1210)는 특정 프로세싱 엘리먼트와 동일한 유형의 부가적 프로세싱 엘리먼트를 인스턴스 생성하여, 그로써 더 많은 프로세싱 엘리먼트에 걸쳐 태스크를 분산시킬 수 있다. 다른 일례로서, 특정 프로세싱 엘리먼트와 연관된 성능 메트릭이 사전 결정된 임계치보다 더 작을 때, 그때 런타임 스케줄러(1210)는 특정 프로세싱 엘리먼트와 동일한 유형의 인스턴스 생성된 프로세싱 엘리먼트 중 하나를 제거하여, 소정 태스크를 수행하는 프로세싱 엘리먼트의 수를 감축할 수 있다.
일부 실시예에 있어서, 런타임 스케줄러(1210)는 프로세싱 엘리먼트의 사용의 우선순위를 결정할 수 있다. 예를 들어, 런타임 스케줄러(1210)는 태스크가 프로세서에 배정되어야 하는 것이 바람직한지 하드웨어 필터 가속기에 배정되어야 하는 것이 바람직한지 결정하도록 구성될 수 있다.
일부 실시예에 있어서, 런타임 스케줄러(1210)는 시스템이 런타임 구성 기준을 준수할 수 있도록 메모리 서브시스템에서의 CMX 버퍼 레이아웃을 변경하도록 구성될 수 있다. 런타임 구성 기준은, 예를 들어, 이미지 프로세싱 처리율(초당 프레임), 에너지 소모, 시스템에 의해 사용되는 메모리의 양, 동작하는 프로세서의 수, 및/또는 동작하는 필터 가속기의 수를 포함할 수 있다.
출력 버퍼는 수개의 방식 중 하나로 메모리에서 레이아웃될 수 있다. 일부 경우에 있어서, 출력 버퍼는 메모리에서 물리적으로 연속할 수 있다. 다른 경우에 있어서, 출력 버퍼는 "청크" 또는 "슬라이스"될 수 있다. 예를 들어, 출력 버퍼는 N개의 수직 스트립으로 분할될 수 있으며, 여기서 N은 이미지 프로세싱 애플리케이션에 배정된 프로세서의 수이다. 각각의 스트립은 서로 다른 CMX 슬라이스에 위치하고 있다. 이러한 레이아웃은, 각각의 프로세서가 입력 및 출력 버퍼에 로컬 액세스할 수 있으므로, 프로세서에 유리할 수 있다. 그렇지만, 이러한 레이아웃은, 그러한 레이아웃이 필터 가속기에 대한 많은 충돌을 야기할 수 있기 때문에, 필터 가속기에는 유해할 수 있다. 필터 가속기는 흔히 좌측으로부터 우측으로 데이터를 프로세싱한다. 그래서, 모든 필터 가속기는 이미지의 처음 스트립에 액세스함으로써 그들 프로세스를 개시할 것이어서, 시작부터 많은 충돌을 야기할 수 있다. 다른 경우에 있어서, 출력 버퍼는 인터리빙될 수 있다. 예를 들어, 출력 버퍼는, 사전 결정된 사이즈 인터리빙으로, 모든 16개의 CMX 슬라이스에 걸쳐 분할될 수 있다. 사전 결정된 사이즈는 128 비트일 수 있다. 출력 버퍼의 인터리빙된 레이아웃은 CMX에 걸쳐 액세스를 분산시키는 것이 충돌의 가능성을 감축하기 때문에 필터 가속기에 유리할 수 있다.
일부 실시예에 있어서, 입력 버퍼 또는 출력 버퍼와 같은 버퍼는 그 생산기 및 소비기가 하드웨어인지 그리고/또는 소프트웨어인지에 기반하여 할당될 수 있다. 소비기는, 그것들이 전형적으로는 더 많은 대역폭을 필요로 하므로, 더 중요하다(필터는 보통 다수의 라인을 판독하고 하나의 라인을 출력한다). 하드웨어 필터는 버퍼의 레이아웃에 따라 프로그래밍된다(그것들은 연속하는, 인터리빙된 그리고 슬라이스된 메모리 주소지정을 지원한다).
도 14b는 일부 실시예에 따라 컴파일러 및 스케줄러를 사용하여 태스크를 자동으로 스케줄링하기 위한 프로세스를 도시하고 있다. 컴파일러는 DAG에 기반하여 병렬 프로세싱 디바이스에 의해 수행될 태스크의 리스트를 결정한다. 단계(1402)에서, 런타임 스케줄러는 태스크의 리스트를 수신하고 태스크의 리스트를 별개의 큐에 유지하도록 구성된다. 예를 들어, 태스크의 리스트가 (1) DMA에 의해 수행될 태스크, (2) 프로세서에 의해 수행될 태스크, 및 (3) 하드웨어 필터에 의해 수행될 태스크를 포함할 때, 런타임 스케줄러는 3개의 별개의 큐, 예를 들어, DMA에 대해서는 제1 큐, 프로세서에 대해서는 제2 큐, 및 하드웨어 필터에 대해서는 제3 큐에 태스크를 저장할 수 있다.
단계(1404 내지 1408)에서, 런타임 컴파일러는 연관된 하드웨어 컴포넌트가 새로운 태스크에 이용가능하게 됨에 따라 연관된 하드웨어 컴포넌트에 태스크를 발행하도록 구성된다. 예를 들어, 단계(1404)에서, DMA가 새로운 태스크를 수행하도록 이용가능하게 될 때, 런타임 컴파일러는 DMA에 대한 제1 큐를 큐 해제하고, 큐 해제된 태스크를 DMA에 제공하도록 구성된다. 마찬가지로, 단계(1406)에서, 프로세서가 새로운 태스크를 수행하도록 이용가능하게 될 때, 런타임 컴파일러는 프로세서에 대한 제2 큐를 큐 해제하고, 큐 해제된 태스크를 프로세서에 제공하도록 구성된다. 또한, 단계(1408)에서, 하드웨어 필터가 새로운 태스크를 수행하도록 이용가능하게 될 때, 런타임 컴파일러는 하드웨어 필터에 대한 제3 큐를 큐 해제하고, 큐 해제된 태스크를 하드웨어 필터에 제공하도록 구성된다.
일부 실시예에 있어서, 런타임 스케줄러(1210)는, 특히 하나보다 많은 파이프라인(예를 들어, 소프트웨어 애플리케이션(1204))이 동시에 프로세싱 엘리먼트의 어레이 상에서 실행 중인 경우, 이들 파이프라인은 반드시 공동-설계되지는 않았으므로, 프로세싱 엘리먼트의 사용을 조절하도록 하드웨어 성능 모니터 및 타이머(1308)로부터의 카운터 값을 사용할 수 있다. 예를 들면, 각각의 파이프라인에 할당된 유효 버스 대역폭이 예상된 것보다 더 작고, CMX 메모리에 액세스함에 있어서 일어나는 충돌의 수가 크면, 런타임 스케줄러(1210)는 2개 파이프라인 큐로부터 태스크가 취해지는 순서를 수정함으로써 2개 파이프라인의 실행을 스태거링하도록 이러한 정보를 사용하고, 그로써 메모리 충돌을 감축할 수 있다.
일부 실시예에 있어서, DAG 컴파일러는 실시간(예를 들어, 온라인)으로 동작할 수 있다. 도 15는 일부 실시예에 따른 실시간 DAG 컴파일러의 연산을 예시하고 있다. 실시간 DAG 컴파일러(1502)는 DAG의 입력 XML 기술, 이용가능한 프로세싱 엘리먼트의 기술, 및 프로세서의 수, 프레임-레이트, 소비-전력 목표 등과 같은 어느 사용자-정의된 제약이라도 수신하도록 구성될 수 있다. 그때, 실시간 DAG 컴파일러(1502)는 시스템 자원에 매핑될 때 특정된 바와 같은 DAG가 사용자-정의된 제약을 충족할 수 있음을 보장하도록, 예를 들어, DMA 엔진, 프로세서, 하드웨어 필터 및 메모리를 포함하는 프로세싱 엘리먼트에 걸쳐 DAG 컴포넌트를 스케줄링하도록 구성될 수 있다. 일부 실시예에 있어서, 실시간 DAG 컴파일러(1502)는 DAG에서의 태스크가 너비-우선 방식으로 병렬로 수행될 수 있는지 결정할 수 있다. DAG의 너비가 태스크를 병렬로 수행하는데 이용가능한 프로세싱 엘리먼트의 수보다 더 크면(예를 들어, 이용가능한 프로세싱 능력의 양이 DAG의 병렬도보다 더 적으면), 실시간 DAG 컴파일러(1502)는 이용가능한 프로세싱 엘리먼트 상에서 태스크가 순차적으로 수행되도록 태스크를 "폴딩"할 수 있다.
도 16은 일부 실시예에 따라 제안된 온라인 DAG 스케줄러에 의해 발생된 스케줄과 OpenCL 스케줄러에 의해 발생된 스케줄을 비교하고 있다. 제안된 스케줄러(1208/1502)에 의해 산출된 스케줄은 전형적 OpenCL 스케줄에 존재하는 중복 사본 및 DMA 전송을 없앨 수 있다. 이들 데이터-전송은 DAG 태스크 상의 프로세싱을 수행하는데 사용된 GPU가 스케줄을 실행하는 프로세서로부터 원격에 있기 때문에 OpenCL 스케줄 내에 존재한다. 모바일 디바이스에서 사용되는 전형적 애플리케이션 프로세서에서는, 데이터의 큰 블록이 스케줄을 실행하는 프로세서와 프로세싱을 하는 GPU 사이에서 이리저리 전송된다. 제안된 설계에서는, 프로세싱 엘리먼트 전부가 동일한 메모리 공간을 공유하고 그래서 이리저리 복사가 필요하지 않아 상당한 시간, 대역폭 및 소비 전력을 절약한다.
일부 실시예에 있어서, 태스크가 프로세싱 엘리먼트의 능력의 일부만을 사용할 것일 때, 도 14에 예시된 바와 같이, 런타임 스케줄러(1210)는 또한, 프로세싱 엘리먼트에 의해 지원될 수 있는 한도까지, 순차적 방식으로 단일 프로세싱 엘리먼트 상에서 실행될 다중 태스크를 융합 및 스케줄링하도록 구성될 수 있다.
이미지 프로세싱 애플리케이션에 있어서, 스케줄러는 이미지를 스트립으로 분할함으로써 프로세서들 간에 프로세싱 태스크를 분배하도록 구성될 수 있다. 예를 들어, 이미지는 사전 결정된 폭의 수직 스트립 또는 수평 스트립으로 분할될 수 있다.
일부 실시예에 있어서, 스케줄러는 특정 이미지 프로세싱 애플리케이션에 사용되는 프로세서의 수를 미리 결정할 수 있다. 이것은 스케줄러가 이미지에 대한 스트립의 수를 미리 결정할 수 있게 한다. 일부 실시예에 있어서, 필터링 연산은 직렬로 프로세서에 의해 수행될 수 있다. 예를 들어, 애플리케이션에 의해 실행되는 5개의 소프트웨어 필터가 있을 때, 프로세서(402)들은 각각 제1 타임 인스턴스에서 동시에 제1 소프트웨어 필터를, 제2 타임 인스턴스에서 동시에 제2 소프트웨어 필터를 등등 실행하도록 구성될 수 있다. 이것은 특정 이미지 프로세싱 애플리케이션에 배정된 프로세서들 간에 컴퓨터 계산 부하가 더 균등하게 균형을 이룬다는 것을 의미한다. 이것은 프로세서들이 동일한 순서로 필터의 동일한 리스트를 동시에 실행하도록 구성되기 때문이다.
너무 많은 프로세서가 이미지 프로세싱 애플리케이션에 배정될 때, 프로세서는, 하드웨어 필터 가속기가 태스크를 완료하도록 기다려, 유휴에 많은 시간을 소비할 수 있다. 다른 한편으로, 너무 적은 프로세서가 애플리케이션에 배정될 때, 하드웨어 필터 가속기는 유휴에 많은 시간을 소비할 수 있다. 일부 실시예에 있어서, 런타임 스케줄러(1210)는 이들 상황을 검출하고 그에 따라 적응하도록 구성될 수 있다. 다른 실시예에 있어서, 스케줄러(1210)는 특정 이미지 프로세싱 애플리케이션에 프로세서를 초과-배정하고, 프로세서가 하드웨어 필터 가속기에 앞서 그 태스크를 완료하고 나면 프로세서가 파워 다운 할 수 있게 하도록 구성될 수 있다.
일부 실시예에 있어서, 스케줄러는 하드웨어 필터 가속기 및 프로세서와 같은 프로세싱 엘리먼트를 동기화하도록 배리어 메커니즘을 사용할 수 있다. 스케줄러의 출력은 커맨드 스트림을 포함할 수 있다. 이들 커맨드는 (1) 하드웨어 필터 가속기 및 프로세서와 같은 프로세싱 엘리먼트에 대한 시작 커맨드, 및 (2) 배리어 커맨드를 포함할 수 있다. 배리어 커맨드는, 프로세싱 엘리먼트 중 일부가 그들 태스크를 실제로 완료하였더라도, 그룹 내 모든 프로세싱 엘리먼트가 배리어 커맨드에 도달할 때까지 프로세싱 엘리먼트가 다음 커맨드 세트로 진행하는 것으로부터 기다려야 함을 나타낸다. 일부 실시예에 있어서, 스케줄러는 프로세싱 엘리먼트에 의해 수행되는 태스크들 간 의존도에 기반하여 배리어 커맨드를 제공할 수 있다.
도 17은 일부 실시예에 따라 프로세싱 엘리먼트를 동기화하기 위한 배리어 메커니즘을 예시하고 있다. 커맨드 스트림은 배리어 커맨드(1702, 1712) 및 태스크 커맨드(1704, 1706, 1708, 1710)를 포함한다. 각각의 태스크 커맨드는 소정 프로세싱 엘리먼트와 연관될 수 있고, 아래 그래프에서 나타낸 바와 같이, 태스크 커맨드는 여러 다른 시간에 완료될 수 있다. 그래서, 스케줄러는 배리어 커맨드(1712)가 치워질 때까지 프로세싱 엘리먼트가 장래 태스크로 진행하지 않도록 배리어 커맨드(1712)를 삽입할 수 있다. 이러한 배리어 메커니즘은 병렬 태스크의 시간적 파이프라인으로 고려될 수 있다.
일부 실시예에 있어서, 배리어 메커니즘은 인터럽트 신호(1714)를 사용하여 하드웨어에서 구현된다. 예를 들어, 스케줄러는, 어느 프로세싱 엘리먼트가 소정 그룹에 속하는지 특정하는, 비트 마스크를 프로그래밍할 수 있다. 프로세싱 엘리먼트가 배정된 태스크를 완료함에 따라, 각각의 프로세싱 엘리먼트와 연관된 인터럽트 신호가 표명된다. 그룹 내 프로세싱 엘리먼트와 연관된 모든 인터럽트 신호가 표명되고 나면, 프로세싱 엘리먼트의 컨트롤러는 모든 프로세싱 엘리먼트가 배리어 커맨드에 도달하였음을 나타내는 글로벌 인터럽트 신호를 수신할 수 있다.
일부 실시예에 있어서, 인터럽트 소스는 SHAVE 벡터 프로세서, RISC 프로세서, 하드웨어 필터 또는 외부 이벤트를 포함할 수 있다. 특히, 하드웨어 필터는 입력/출력 버퍼가 프레임을 포함하고 있고 필터가 그것이 전체 입력 프레임을 프로세싱하였든 완전 대응하는 출력 프레임을 기록하였든 때 단일 인터럽트를 발행하도록 구성될 수 있는 경우 비-원형 버퍼 모드를 포함하는 다양한 모드를 지원할 수 있다. 또한, 필터는 이미지 치수, 버퍼 베이스 주소/라인 스트라이드 등에 적합한 설정을 사용하여 프레임으로부터의 라인, 패치 또는 타일 상에 연산하도록 프로그래밍 가능하다.
복합 병렬 프로세싱 디바이스와의 하나의 중요한 도전과제는, 특히 컴퓨터 자원 및 메모리와 같은 자원의 관점에서 매우 전력에 민감하고 희소한 매립형 시스템에 대해, 병렬 프로세싱 디바이스에서의 프로세싱 엘리먼트를 어떻게 프로그래밍할 것인가이다. 컴퓨터 이미징, 비디오 및 이미지 프로세싱은 프레임 치수 및 레이트가 매우 높고 해마다 강하게 증가해 감에 따라 매립형 시스템 상의 성능의 관점에서 특히 매우 요구가 많아지고 있다.
여기에서 제시된 이러한 문제에 대한 해법은 멀티코어 프로세서 아키텍처(1202)의 상세에 대한 정통한 지식 없이 프로그래머에 의해 하이 레벨로 애플리케이션이 기록될 수 있게 하는 애플리케이션 프로그래밍 인터페이스(API)(1206)를 제공하는 것이다. 소프트웨어 API(1206)를 사용하면, 기능이 프로그래밍 가능한 프로세서 상의 소프트웨어에서 구현되는지 하드웨어에서 구현되는지에 대한 상세가 프로그래머로부터 도외시되므로 프로그래머는 구현에 대한 정통한 상세를 알고 있지 않고도 새로운 이미지 또는 비디오 프로세싱 파이프라인을 신속히 생성할 수 있다. 예를 들면, 블러 필터 커널의 구현은 하나 이상의 프로세서 또는 하드웨어 가속기 필터 상에서 실행 중인 참조 소프트웨어 구현으로서 제공된다. 프로그래머는 처음에는 소프트웨어 블러 필터 구현을 사용할 수 있고 전반적 파이프라인 구현에 대한 변경 없이 하드웨어 필터를 사용하는 것으로 스위칭할 수 있는데, 프로그래머가 아니라, ISI, AMC 및 CMX 중재 블록이 어느 프로세서 및 HW 자원이 그리고 어느 순서로 물리적 메모리 블록으로의 액세스를 획득하는지를 다루기 때문이다.
위에서 설명된 멀티-포트형 메모리 접근법이 똑같은 프로세서들 간 높은 대역폭 및 낮은 레이턴시로 메모리를 공유하는데 충분하기는 하지만, 다른 디바이스들과 대역폭을 공유하는데 이상적이지는 않다. 이들 다른 디바이스는 특히 컴퓨터 비디오 및 이미지 프로세싱과 같은 매우 높은 대역폭 애플리케이션에서 다른 레이턴시 요건들을 갖는 다른 프로세서 및 하드웨어 가속기일 수 있다.
개시된 아키텍처는 고도로 결정론적인 레이턴시 요건을 갖는 다수의 프로그래밍 가능한 VLIW 프로세서, 큰 집단의 프로그래밍 가능한 이미지/비디오 프로세싱 하드웨어 필터, 및 관용적 호스트-프로세서 및 주변장치에 의한 제어 및 데이터-액세스를 가능하게 하는 버스 인터페이스로부터의 더 많은 동시 액세스를 지원하기 위해 더 높은 대역폭을 제공하도록 멀티-포트형 메모리 서브시스템과 함께 사용될 수 있다. 도 18은 일부 실시예에 따라 여러 다른 유형의 프로세싱 엘리먼트를 갖는 병렬 프로세싱 디바이스를 예시하고 있다. 병렬 프로세싱 디바이스는 복수의 프로세서(1802) 및 복수의 필터 가속기(1804)를 포함하고, 복수의 프로세서(1802) 및 복수의 필터 가속기(1804)는, 각각, ISI(410) 및 가속기 메모리 컨트롤러(AMC)(1806)를 통하여 메모리 서브시스템(412)에 결합될 수 있다.
AMC(1806)의 서브시스템 및 멀티코어 메모리(CMX) 서브시스템(412)은 특정 이미지/비디오 프로세싱 애플리케이션에 대해 하드웨어 필터 가속기(1804)뿐만 아니라 프로세서(1802) 상의 소프트웨어에서 저전력 스트리밍 디지털 신호 프로세싱을 용이하게 하는 온 칩 스토리지를 제공한다. 일부 실시예에 있어서, CMX 메모리(412)는 64-비트 워드로서 조직된 128kB의 16개 슬라이스로 조직된다(총 2MB). 각각의 프로세서(1802)는 메모리 서브시스템(412) 내 소정 슬라이스로의 직접 액세스 및 메모리 서브시스템(412) 내 모든 다른 슬라이스로의 간접 (더 높은 레이턴시) 액세스를 가질 수 있다. 하드웨어 필터 가속기(1804)가 데이터를 저장하도록 CMX 메모리(412)를 사용하는 동안 프로세서(1802)는 명령어 또는 데이터를 저장하도록 CMX 메모리(412)를 사용할 수 있다.
레이턴시를 감내하지 못하는 프로세서(1802)가 HW 필터 가속기(1804)와 공유 CMX 메모리(412)에 액세스할 때 고성능을 달성할 수 있게 하면서 이종 프로세싱 엘리먼트들 간 데이터-공유를 용이하게 하기 위해, HW 필터 가속기(1804)는 레이턴시를 감내하도록 설계된다. 이것은, 일부 실시예에 따라 도 10에 예시된 바와 같이, ISI가 HW 필터 가속기로부터의 경합 없이 자유롭게 SHAVE-간 통신을 지원하게 두면서 CMX로의 액세스를 공유하도록 크로스-바 스위치뿐만 아니라, 타이밍을 더 탄력적으로 하는 로컬 FIFO도 각각의 HW 필터 가속기(필터)(1804)에 제공함으로써 달성된다.
외부로 나가는 포트 충돌에 부가하여, 들어오는 ISI(410) 포트 액세스와 충돌하는 것이 가능하다. 하나보다 많은 외부 슬라이스가 어느 하나의 사이클에서 메모리의 동일한 슬라이스에 액세스하려고 시도하면, 그때 포트 충돌이 일어날 수 있다. LSU 포트 대 ISI 상호접속 포트의 매핑이 고정되고, 그래서 어떠한 충돌도 없이 SHAVE 0(1802-0)가 LSU 포트 0를 통해 슬라이스 2에 액세스하고 SHAVE 11(1702-11)이 LSU 포트 1을 통해 슬라이스 2에 액세스하는 것이 가능하다. ISI 매트릭스는 8x2포트x 매 사이클마다 전송될 데이터의 64-비트에 대해 허용할 수 있다. 예를 들어, SHAVE N(1802)는 LSU 포트 0 및 1을 통해 슬라이스 N+1에 액세스할 수 있고, 모든 8개의 SHAVE 프로세서는 어떠한 멎음도 없이 동시에 액세스할 수 있다.
일부 실시예에 있어서, 메모리 서브시스템(412)은 슬라이스(블록)로 논리적으로 분할될 수 있다. 도 19는 일부 실시예에 따라 제안된 멀티코어 메모리 서브시스템을 예시하고 있다. 도 19는 AXI, AHB, SHAVE, ISI와 CMX는 물론 필터 가속기, AMC와 CMX 간 상세한 버스 상호-접속을 도시하고 있다. 선도는 2개의 AMC 입력 및 2개의 AMC 출력 포트, 2개의 ISI 입력 및 2개의 ISI 출력 포트, L2 캐시 및 상호 배제(뮤텍스) 블록으로의 접속은 물론 FIFO 및 4개의 메모리 타일을 주소지정하는 내부 판독/기록 중재 및 소스 멀티플렉싱과 더불어 ISI 및 AMC로의 4개의 메모리 블록 출력의 출력 수신지 선택도 도시하고 있다.
각각의 슬라이스는, 12개의 SHAVE, DMA, 텍스처 관리 유닛(TMU), 및 온-보드 호스트 프로세서로의 AHB 버스 인터페이스를 포함하는, 16개의 가능한 ISI 입력 소스 중 2개에 접속될 수 있다. 유사하게, 각각의 슬라이스는 12개의 SHAVE, DMA, 텍스처 관리 유닛(TMU), 및 온-보드 호스트 프로세서로의 AXI 및 AHB 버스 인터페이스를 포함하는 16개의 가능한 수신지 중 2개에 슬라이스가 데이터를 보낼 수 있게 하는 2개의 출력 ISI 포트를 갖는다. 바람직한 구현에 있어서, 슬라이스는 로컬 SHAVE 프로세서(2xLSU 및 2x64-비트 명령어 포트), 2개의 ISI 입력 포트, 2개의 AMC 입력 포트, 및 SHAVE-간 메시징에 사용되는 FIFO는 물론 메시징 FIFO, L2 캐시 및 뮤텍스 블록에도 차례로 접속되는 입력 중재 블록을 갖는 4개의 물리적 RAM 블록을 포함하고 있다.
CMX 슬라이스로부터의 출력 경로 상에서, 수신지 선택 블록으로의 입력은, L2 캐시 및 하드웨어 뮤텍스 블록과 함께, 4개의 RAM 인스턴스에 접속된다. 수신지 선택 블록으로부터의 출력은, 블록(2002)으로서 도 20에 예시된 바와 같이, 2개의 로컬 LSU 포트 및 명령어 포트(SP_1, SP_0)는 물론 2xISI 출력 포트 및 2xAMC 출력 포트에도 접속된다. 2개의 ISI 포트는 로컬 슬라이스가 12개의 가능한 프로세서, DMA, TMU, AXI 및 AHB 호스트 버스로부터의 2개의 수신지에 접속될 수 있게 한다. 프로세서에는 멀티코어 메모리 서브시스템 슬라이스에 포함되어 있는 2x64-비트 ISI 입력 및 2x64-비트 ISI 출력 포트에 접속되는 SHAVE 간 상호접속부(ISI)를 통하여 메모리로의 액세스가 제공된다. ISI 상호접속부에 의해 제공되는 높은-대역폭, 낮은-레이턴시 결정론적 액세스는 프로세서에서의 멎음을 감축하고 높은 컴퓨터 계산 처리율을 제공한다.
도 21은 일부 실시예에 따라 AMC 크로스바 아키텍처를 예시하고 있다. AMC 크로스바(1806)는 하드웨어 이미지-프로세싱 필터(1804)를 CMX 멀티코어 메모리 슬라이스(412)의 AMC 포트에 접속하도록 구성될 수 있다. AMC(1806)는 하나 이상의 슬라이스 포트 컨트롤러(2102)를, 바람직하게는 각각의 CMX 슬라이스(412)에 대해 하나씩, 포함할 수 있다. 슬라이스 포트 컨트롤러(2102)는 차례로 슬라이스 주소 요청 필터(SARF)(2104)에 접속된다. SARF(2104)는 차례로 AMC 클라이언트에 접속된다(이 실시예에서 AMC 클라이언트는 하드웨어 이미지-프로세싱 가속기이다). SARF(2104)는 필터 가속기로부터의 판독/기록 요청을 수락하고 그것들로의 요청 또는 승인 신호보내기, 기록 액세스를 승인받은 SIPP 블록으로부터의 데이터 및 주소 수락하기, 및 판독 액세스를 승인받은 것들에 판독 데이터 제공하기를 제공한다. 부가적으로, SARF는 시스템 호스트 프로세서에 AXI 호스트 버스에 대한 AXI 마스터링을 제공하여, 호스트가 AMC 크로스바 스위치를 통하여 CMX 메모리에 질의(판독/기록)할 수 있게 한다.
일부 실시예에서는, 도 21에 도시된 바와 같이 슬라이스 포트 컨트롤러(2102)가 AMC(1806)에 제공되어 연관된 CMX 메모리 슬라이스(412)에서의 2x판독 및 2x기록 포트와 통신한다. CMX 메모리 서브시스템(412)의 필터 가속기측으로부터 보면, 각각의 하드웨어 필터는 가속기 메모리 컨트롤러(AMC) 크로스바(1806) 상의 소정 포트에 접속된다. AMC(1806)는 한 쌍의 64 비트 판독 및 한 쌍의 64-비트 기록-포트를 가지며, 그것을 CMX 메모리(412)의 각각의 슬라이스에 접속한다(바람직한 구현에서는 총 2MB에 대해 16개 슬라이스가 있다). 가속기 내 로컬 버퍼링 및 판독 또는 기록-클라이언트 인터페이스를 통하여 AMC(1806)에 이미지 프로세싱 하드웨어 가속기를 접속하는 것은 프로세서의 멎음이 감축될 수 있게 하는 고도로 결정론적인 타이밍으로 더 많은 대역폭을 ISI 및 프로세서가 이용가능하게 두어 더 완화된 레이턴시 요건을 허용한다.
도 20은 일부 실시예에 따라 CMX 기반구조의 단일 슬라이스를 예시하고 있다. 슬라이스는 CMX 슬라이스에서의 4개의 물리적 SRAM 타일로의 액세스를 8개의 가능한 64-비트 소스 중으로부터 4개까지 허용하는 중재기 및 소스 멀티플렉싱, 공유 L2 캐시, 스레드 간 상호 배제의 프로세서-간 교섭을 위한 공유 뮤텍스 하드웨어 블록은 물론, SHAVE-간 낮은 대역폭 메시징에 사용되는 64-비트 FIFO도 포함하고 있다. 6개의 입력 소스는: 도 21에 도시된 ACM로부터의 대응하는 슬라이스_포트[1] 및 슬라이스_포트[0] 포트에 접속되는 AMCout1 및 AMCout0; 부가적으로 2개의 ISI 포트, ISIout1 및 ISIout0; 2x LSU 포트 LSU_1 및 LSU_0; 및 마지막으로 조합될 때 128-비트 명령어가 CMX로부터 판독될 수 있게 하는 2x명령어 포트 SP_1 및 SP_0이다. 중재기 및 소스 멀티플렉싱은 8개의 입력 소스로부터의 우선순위 액세스에 응답하여 4xSRAM 타일을 제어하도록 판독/기록 주소 및 64-비트 데이터를 발생시킨다. 64-비트 SHAVE-간 통신 FIFO의 입력은 중재기 및 소스 멀티플렉서에 접속되는 한편, 그 출력은 CMX 슬라이스에서의 로컬 프로세서에 의해서만 판독가능하다. 실제로, 프로세서는, CMX, 슬라이스 및 프로세서를 함께 접속하는, CMX 슬라이스 외부 ISI 기반구조 및 ISIout1 및 ISIout0 포트를 통하여 서로의 메시징 FIFO와 통신한다.
도 20에 도시된 슬라이스에서의 2개의 AMC 포트의 각각 상의 64 요청기들 간 중재에 부가하여, 부가적 2:1 중재기가 AMC 포트 1와 0 간 중재하도록 제공된다. 이러한 2:1 중재기의 목적은 2개의 AMC 포트 중 하나 또는 다른 하나가, 요청하는 포트 중 하나 상에서의 과도한 멎음을 초래할 수 있는, AMC 포트 대역폭 전부를 포화시키는 것을 방지하는 것이다. 이러한 강화는 포트 대역폭의 다중의 과중한 요청기의 존재시 더 균형을 이루는 자원 할당 및 그리하여 전반적 아키텍처에 대한 더 높은 지속적 처리율을 제공한다. 유사하게, 2:1 중재기는 유사한 이유로 2개의 프로세서 포트 SP1와 SP0 간 중재한다.
또한, 중재 및 멀티플렉싱 로직은, 하나의 64-비트 포트가 16개의 CMX 슬라이스의 각각과 제2 레벨 중재기 사이에 접속되는 경우, 16개의 가능한 소스 간 엄밀한 라운드-로빈 기반으로 액세스를 공유하는 제2 레벨의 중재를 통하여, 공유 L2 캐시로 ISI를 통하여서든 직접적이든, 프로세서에 의한 액세스를 제어한다. 유사하게, 동일한 로직은 (ISI 상에서의 AHB 및 AXI 버스 접속을 통하여) 12개의 온-보드 프로세서 및 2x32-비트 RISC 프로세서 상에서 실행되는 스레드 간 상호 배제의 프로세서-간 교섭에 사용되는 32개의 하드웨어 뮤텍스로의 액세스를 허용한다.
우선순위는 바람직한 구현에서는 SP_1와 SP_0가 가장 높은 우선순위를 갖고, 그 후 LSU_1와 LSU_0, 그 다음에 ISIout1와 ISIout0 그리고 마지막으로 AMCout1와 AMCout0이고 마지막으로 FIFO는 가장 낮은 우선순위를 갖는다. 이러한 우선순위 배정에 대한 이유는 SP_1와 SP_0가 CMX로의 프로세서에 의한 프로그래밍 액세스를 제어하고 프로세서는 다음 명령어가 이용가능하지 않으면 즉시 멎을 것이고, 또다시 프로세서가 멎게 야기할 LSU_1와 LSU_0가 뒤따르고; 유사하게 ISIout1와 ISIout0가 다른 프로세서로부터 유래하고 데이터가 즉시 이용가능하지 않으면 그것들이 멎게 야기할 것이기 때문이다. AMCout1와 AMCout0 포트는 그것들이 내장 FIFO를 갖고 그리하여 멎기 전에 많은 레이턴시를 감내할 수 있으므로 가장 낮은 우선순위를 갖는다. 프로세서 FIFO는 낮은 대역폭 프로세서-간 메시징에 필요로 될 뿐이고 그리하여 모든 것 중 가장 낮은 우선순위를 갖는다.
중재기가 4개 소스까지 4개 SRAM 타일, L2 캐시, 뮤텍스 및 FIFO로의 액세스를 허용하고 나면, 4개 SRAM 타일, L2 캐시 및 뮤텍스를 포함하는 6개 판독-데이터 소스로부터의 출력 데이터는 8개의 가능한 64-비트 수신지 포트; 슬라이스와 연관된 프로세서 상의 4개(SP_1, SP_0, LSU_1, LSU_0), ISI와 연관된 2개(ISIout1, ISIout0) 및 마지막으로 AMC와 연관된 2개(AMCout1, AMCout0) 중으로부터 4개까지로 선택 및 지향된다. 출력 멀티플렉서에서는 8개의 수신지 포트에 4개의 64-비트 소스만이 분배될 필요가 있으므로 우선순위결정은 필요하지 않다.
도 22는 일부 실시예에 따라 AMC 크로스바 포트 컨트롤러를 예시하고 있다. AMC 크로스바 포트 컨트롤러(2202)는 프로세서를 통하여 요청이 필터링된 가속기(1804)에 포트 컨트롤러(2202)를 접속하는 라운드-로빈 중재기(2204)를 포함한다. 그 후, 중재기는 포트-컨트롤러 FIFO 상에 AMC 클라이언트로부터의 유효 요청을 푸싱할 수 있다. 판독 요청의 경우에, 요청에 대한 응답(판독-클라이언트 ID 및 라인 인덱스)이 판독 TX ID FIFO 상에 푸싱된다. 반환된 슬라이스 포트 데이터 및 유효 신호는 판독 TX ID FIFO로부터 판독 클라이언트 ID 및 라인 인덱스를 팝핑하고 대응하는 슬라이스 포트 판독 데이터 및 유효 신호를 그것이 요청하는 AMC 클라이언트에 의해 판독되어 나올 수 있는 판독 데이터 FIFO 상에 푸싱하는 포트-컨트롤러 판독 로직 내로 입력된다. FIFO의 CMX측 상에서, 포트 멎음 로직은 FIFO로부터 요청을 팝핑하고 연관된 CMX 메모리 슬라이스 상의 2xAMC 입력 포트에 슬라이스 포트 제어를 제공한다.
CMX로의 판독 및 기록 클라이언트 인터페이스의 수는 별개로 구성가능하다. 어느 클라이언트라도 CMX의 어느 슬라이스(또는 슬라이스들)라도 주소지정할 수 있다. CMX에서의 16개 슬라이스, 슬라이스당 2개 포트 및 600MHz의 시스템 클록 주파수로는, 클라이언트에 공급될 수 있는 최대 총 데이터 메모리 대역폭은 143GB/s이다: 최대 대역폭 = 600MHz * (64/8) * 2 * 16 = 1.536e11 B/s = 143GB/s.
800MHz의 더 높은 클록-레이트에서 대역폭은 191GB/s로 상승한다. AMC는 그것에 접속된 하드웨어 가속기 블록의 그 클라이언트 판독/기록 인터페이스 상의 동시 액세스 간 중재한다. 2개의 판독/기록 액세스 중 최대치가 클록 사이클당 슬라이스당 승인되어, 600MHz의 시스템 클록 주파수에서 8.9GB/s의 최대 슬라이스 메모리 대역폭을 줄 수 있다. 클라이언트 액세스는 CMX 주소 공간으로 제한되지 않는다. CMX 주소 공간 밖에 드는 어느 액세스라도 AMC의 AXI 버스 마스터에 포워딩된다.
도 23은 일부 실시예에 따라 AMC(1806)를 사용하는 판독 연산을 예시하고 있다. 이 예시에서는, 4개의 데이터 워드가 주소 범위 A0-3로부터 판독된다. AMC 클라이언트(예를 들어, 필터 가속기(1804))는 우선 포트 컨트롤러 입력 상에 요청을 표명한다. 포트 컨트롤러(2202)는 차례로 클라이언트가 주소 A0, A1, A2 그리고 마지막으로 A3를 방출하게 야기하는 승인 신호(gnt)를 발행함으로써 응답한다. 대응하는 rindex 값은 각각의 승인에 대응하여 클록(clk)의 상승 에지 상에 나타난다. CMX 슬라이스로부터 포트-컨트롤러로 출력되는, 인덱스 주소 및 데이터에 비교될 때, 클라이언트측 상의 타이밍은 아주 탄력적일 수 있음을 알 수 있다. 포트-컨트롤러의 CMX측상의 결정론적 타이밍은 레이턴시에 매우 민감한 프로세서와 AMC 클라이언트 간 CMX로의 효율적 공유 액세스를 가능하게 하는 한편, FIFO가 가능하고 AMC 클라이언트에서의 로컬 저장은 타이밍이 CMX 메모리 서브시스템(412)의 AMC 클라이언트(예를 들어, 필터 가속기)측 상에서 고도로 가변일 수 있게 한다.
도 24는 일부 실시예에 따라 AMC(1806)를 사용하는 기록 연산을 예시하고 있다. 타이밍 선도에서, AMC를 통하여 CMX로 4개의 데이터 워드의 전송이 도시되어 있다. 요청이 AMC 클라이언트에 의해 발행되고 클록(clk)의 다음의 상승 에지 상에서 승인 신호(gnt)는 하이로 가서 AMC를 통하여 주소 A0와 연관된 데이터-워드 D0를 전송한다. 그 후 gnt 신호는 한번의 클록 사이클 동안 로우로 가고 clk의 다음 상승 에지 상에서 gnt는 2번의 클록 사이클 동안 하이로 가서 gnt가 다시 로우로 가기 전에 D1 및 D2가 각각 A1 및 A2를 주소지정할 수 있게 한다. 다음의 상승 clk 에지 상에서 gnt는 다시 하이로 가서, 데이터 워드 D3가 주소 A3에 전송될 수 있고 하고, 그 결과 req 및 gnt는 clk의 다음 상승 에지 상에서 로우 가서 다음 판독/기록 요청을 기다린다.
도 12의 예시적 배열과 함께 사용되는 스트리밍 이미지 프로세싱 파이프라인(SIPP) 소프트웨어 프레임워크는 이미지/비디오 프로세싱 다이가 배속되는 기판에 와이어-본딩된 패키지에 외부 DRAM 다이의 부속으로 고해상도로 스캔-라인 버퍼, 프레임 타일(프레임의 서브섹션) 또는 참으로 프레임 전체에 대해 CMX 메모리(412)를 사용하여 이미지 프로세싱 파이프라인을 구현하는 것으로의 융통성 있는 접근법을 제공한다. SIPP 프레임워크는 원형 라인 버퍼 관리 및 이미지 보더(픽셀의 복제) 취급과 같은 복잡성을 처리하여 (프로세서 상의) 소프트웨어에서의 ISP(이미지 신호-프로세싱) 기능의 구현을 더 단순하고 더 일반적이게 한다.
도 25는 일부 실시예에 따른 병렬 프로세싱 디바이스(400)를 예시하고 있다. 병렬 프로세싱 디바이스(400)는 메모리 서브시스템(CMX)(412), 복수의 필터 가속기(1804), 및 메모리 서브시스템(412)으로의 액세스를 중재하기 위한 버스 구조(1806)를 포함할 수 있다. 메모리 서브시스템(CMX)(412)은 복수의 프로세싱 엘리먼트(402)가 멎음 없이, 병렬로, 데이터 및 프로그램 코드 메모리에 액세스할 수 있게 하도록 구축된다. 이들 프로세싱 엘리먼트(402)는, 예를 들어, SHAVE(스트리밍 하이브리드 아키텍처 벡터 엔진) 프로세서, 적합하게는 VLIW(매우 긴 명령어 워드) 프로세서, 멎음 없이 데이터 및 프로그램 코드 메모리로의 병렬 액세스, 또는 필터 가속기를 포함할 수 있다. 부가적으로, 메모리 서브시스템(CMX)(412)은 호스트 프로세서(도시되지 않음)가 AXI(도시되지 않음)와 같은 병렬 버스를 통하여 CMX 메모리 서브시스템(412)에 액세스하도록 준비할 수 있다. 일부 실시예에 있어서, 각각의 프로세싱 엘리먼트(402)는 그 LSU 포트를 통해 사이클당 128-비트까지 판독/기록하고 그 명령어 포트를 통해 사이클당 128 비트 프로그램 코드까지 판독할 수 있다. 각각 프로세서 및 필터 가속기에 대한 ISI 및 AMC 인터페이스에 부가하여, CMX(412)는 AHB 및 AXI 버스 인터페이스를 통해 메모리로의 동시 판독/기록 액세스를 제공한다. AHB 및 AXI는 프로세서, 메모리 및 주변장치가 공유 버스 기반구조(1806)를 사용하여 접속될 수 있게 하는 표준 ARM 병렬 인터페이스 버스이다. CMX 메모리 서브시스템(412)은 사이클당 18x128-비트 메모리 액세스 피크를 취급하도록 구성될 수 있다.
가속기(1804)는 SIPP 소프트웨어 프레임워크(1200)에서 사용될 수 있는 하드웨어 이미지 프로세싱 필터 집합을 포함한다. 가속기(1804)는 가장 컴퓨터 계산 집약적인 기능성 중 일부가 프로세싱 엘리먼트(1802)로부터 분담 가능하게 할 수 있다. 선도는 주소 필터링, 중재 및 멀티플렉싱을 수행하는 AMC(1804)에 복수의 필터 가속기(1804)가 어떻게 접속될 수 있는지 보여주고 있다. 또한, AMC(1804)에는 다중 MIPI 카메라 직렬 인터페이스(2502)가 접속될 수 있고, 바람직한 구현에서는 총 12개의 MIPI 직렬 레인이 2개 레인의 6개 그룹으로 접속된다. 또한, AMC(1804)는 참조 구현에서는 2개의 시스템 RISC 프로세서가 AMC를 통하여 CMX 메모리에 액세스할 수 있게 하도록 AXI 및 APB 인터페이스에 접속된다. 선도의 마지막 엘리먼트는 CMX(412)로서 AMC(1804)가 그로의 액세스를 중재하여, CMX 메모리(412)에서의 물리적 RAM 인스턴스로의 다중 하드웨어 필터 가속기(1804)에 의한 동시 액세스를 가능하게 한다. 참조 필터 가속기(1804)가 또한 도시되어 있고, 이 경우에서는 5x5 2D 필터 커널로서, fp16(IEEE754-같은 16-비트 부동-소수점 포맷) 산술 파이프라인, 연관된 파이프라인 멎음 컨트롤러, fp16 파이프라인으로의 입력의 라인을 저장하는 라인 버퍼 판독 클라이언트, 라인 시작 제어 입력, 및 fp16 파이프라인으로부터의 출력을 저장하는 라인 버퍼 기록 클라이언트를 포함하고 있다. 가속기가 SIPP 프레임워크에 들어맞을 수 있게 하기 위해 그것들은 CMX 메모리로의 높은 대역폭 액세스를 필요로 하고, 이것은 가속기 메모리 컨트롤러(AMC)에 의해 제공된다.
일부 실시예에 있어서, CMX 메모리 서브시스템(412)은 고속, 저전력 액세스를 위해 그 이웃하는 프로세싱 엘리먼트(402)와 연관된 128kB 블록 또는 슬라이스로 분할될 수 있다. 슬라이스 내에서, 메모리는 소정 수의 더 작은 타일, 예를 들어 3x32kB, 1x16kB 및 2x8KB 독립 SRAM 블록으로서 조직된다. 물리적 RAM 사이즈는 면적 이용도 및 구성 융통성의 절충점으로서 선택될 수 있다. 어느 프로세싱 엘리먼트(402)라도 동일한 레이턴시(3 사이클)로 메모리 서브시스템(CMX)(412)에서의 어느 곳에서라도 물리적 RAM에 액세스할 수 있지만, 로컬 프로세서 슬라이스 밖의 액세스는 대역폭이 제한되고 로컬 슬라이스의 액세스보다 더 많은 전력을 소모할 것이다. 일반적으로, 전력 소모를 감소시키기 위해 그리고 성능을 증가시키기 위해, 프로세싱 엘리먼트(402)는 데이터를 전용 메모리 슬라이스에 로컬 저장할 수 있다.
일부 실시예에 있어서, 각각의 물리적 RAM은 64-비트 폭일 수 있다. 하나보다 많은 프로세싱 엘리먼트(402)가 단일 물리적 RAM에 액세스하려고 시도하면, 충돌이 일어나 프로세서 멎음을 초래할 수 있다. CMX는 포트 충돌들 간 자동으로 중재하고 데이터가 손실되지 않음을 보장할 것이다. 모든 포트 충돌마다, 프로세싱 엘리먼트(402)가 소정 사이클 동안 멎어 더 낮은 처리율을 초래한다. CMX(412) 내에서의 (프로그래머에 의한) 주의깊은 데이터 레이아웃으로, 포트 충돌은 회피되고 프로세서 사이클은 더 잘 이용될 수 있다.
일부 실시예에 있어서, 복수의 프로세서에는 가속기 및 CMX 메모리가 제공된다.
각각의 필터 가속기(1804)는 CMX 메모리(412)에 액세스하도록 적어도 하나의 AMC 판독 및/또는 기록 클라이언트 인터페이스를 포함할 수 있음을 도 25에 도시된 이미지-프로세싱 HW 아키텍처로부터 알 수 있다. AMC(1806) 상의 판독/기록 클라이언트 인터페이스의 수는 적합하게 구성가능하다. AMC(1806)는 CMX 메모리(412)의 각각의 슬라이스로의 한 쌍의 64 비트 포트를 포함할 수 있다. AMC(1806)는 (부분적 주소 디코딩에 의해) 적합한 CMX 슬라이스(412)로 그 클라이언트로부터의 요청을 라우팅한다. 여러 다른 클라이언트로부터 동일 슬라이스로의 동시 요청은 라운드-로빈 방식으로 중재될 수 있다. CMX(412)로부터 반환된 판독 데이터는 다시 요청하는 AMC 판독 클라이언트로 라우팅된다.
AMC 클라이언트(가속기)(1804)는 AMC(1806)에 풀 32 비트 주소를 제시한다. CMX 메모리 공간에 매핑하지 않는 클라이언트로부터의 액세스는 AMC의 AXI 마스터에 포워딩된다. 여러 다른 클라이언트로부터의 (CMX 메모리 공간 밖의) 동시 액세스는 라운드-로빈 방식으로 중재된다.
AMC(1806)는 필터 가속기(1804)에 CMX(412) 액세스를 제공하는 것으로 한정되지 않고; 어느 하드웨어 가속기 또는 제3자 엘리먼트라도 CMX 및 플랫폼의 더 넓은 메모리 공간에, 그 메모리 인터페이스가 AMC 상의 판독/기록 클라이언트 인터페이스에 적합하게 적응되면, 액세스하도록 AMC(1806)를 사용할 수 있다.
하드웨어 이미지 프로세싱 파이프라인(SIPP)은 필터 가속기(1804), 중재 블록(1806), MIPI 제어(2502), APB 및 AXI 인터페이스 및 CMX 멀티포트 메모리(412)로의 접속은 물론 일례의 하드웨어 5x5 필터 커널을 포함할 수 있다. 이러한 배열은 이미지-프로세싱 애플리케이션에 대한 복수의 프로세서(1802) 및 하드웨어 필터 가속기(1804)가 복수의 단일-포트형 RAM(Random Access Memory) 물리적 블록으로 이루어진 메모리 서브시스템(412)을 공유할 수 있게 한다.
단일-포트형 메모리의 사용은 메모리 서브시스템의 전력 및 면적 효율을 증가시키지만 대역폭을 제한한다. 제안된 배열은 이들 RAM 블록이 다중 물리적 RAM 인스턴스를 사용하고 그것들로의 중재된 액세스를 제공하여 다중 소스에 서비싱함으로써 다중 소스(프로세서 및 하드웨어 블록)로부터의 다중 동시 판독 및 기록 요청에 서비싱할 수 있는 가상의 멀티-포트형 메모리 서브시스템으로서 거동할 수 있게 한다.
애플리케이션 프로그래밍 인터페이스(API)의 사용, 및 애플리케이션 레벨에서의 데이터 파티셔닝은 프로세서와 필터 가속기 간, 또는 프로세서 자신들 간 물리적 RAM 블록에 대한 경합이 감축되고 그리하여 프로세서 및 하드웨어에 전달되는 데이터 대역폭이 주어진 메모리 서브시스템 구성에 대해 증가됨을 보장하기 위해 중요하다.
일부 실시예에 있어서, 병렬 프로세싱 디바이스(400)는 전자 디바이스에 거주할 수 있다. 도 26은 일부 실시예에 따라 병렬 프로세싱 디바이스를 포함하는 전자 디바이스를 예시하고 있다. 전자 디바이스(2600)는 프로세서(2602), 메모리(2604), 하나 이상의 인터페이스(2606) 및 병렬 프로세싱 디바이스(400)를 포함할 수 있다.
전자 디바이스(2600)는 컴퓨터 판독가능한 매체, 플래시 메모리, 자기 디스크 드라이브, 광학 드라이브, 프로그래밍가능 판독 전용 메모리(PROM), 및/또는 판독 전용 메모리(ROM)와 같은 메모리(2604)를 가질 수 있다. 전자 디바이스(2600)는 명령어를 프로세싱하고 메모리(2604)에 저장될 수 있는 소프트웨어를 실행하는 하나 이상의 프로세서(2602)로 구성될 수 있다. 프로세서(2602)는 또한 다른 디바이스와 통신하도록 인터페이스(2606) 및 메모리(2604)와 통신할 수 있다. 프로세서(2602)는 CPU, 애플리케이션 프로세서 및 플래시 메모리를 조합하는 시스템-온-칩, 또는 축소형 명령어 세트 컴퓨팅(RISC) 프로세서와 같은 어느 적용가능한 프로세서라도 될 수 있다.
일부 실시예에 있어서, 컴파일러(1208) 및 런타임 스케줄러(1210)는 메모리(2604)에 저장된 소프트웨어에서 구현되고, 프로세서(2602) 상에서 동작할 수 있다. 메모리(2604)는 비-일시적 컴퓨터 판독가능한 매체, 플래시 메모리, 자기 디스크 드라이브, 광학 드라이브, 프로그래밍가능 판독 전용 메모리(PROM), 판독 전용 메모리(ROM), 또는 어느 다른 메모리 또는 메모리 조합이라도 될 수 있다. 소프트웨어는 컴퓨터 명령어 또는 컴퓨터 코드를 실행할 수 있는 프로세서 상에서 실행될 수 있다. 프로세서는 또한 주문형 반도체(ASIC), 프로그래밍가능 로직 어레이(PLA), 필드 프로그래밍가능 게이트 어레이(FPGA), 또는 어느 다른 집적 회로를 사용하여 하드웨어에서 구현될 수 있다.
일부 실시예에 있어서, 컴파일러(1208)는 인터페이스(2606)를 통하여 전자 디바이스(2600)와 통신하고 있는 별개의 컴퓨팅 디바이스에서 구현될 수 있다. 예를 들어, 컴파일러(1208)는 전자 디바이스(2600)와 통신하고 있는 서버에서 동작할 수 있다.
인터페이스(2606)는 하드웨어 또는 소프트웨어에서 구현될 수 있다. 인터페이스(2606)는, 텔레비전에 대한 리모컨과 같은, 로컬 소스뿐만 아니라 네트워크로부터도 데이터 및 제어 정보 양자를 수신하는데 사용될 수 있다. 전자 디바이스는 또한 키보드, 터치 스크린, 트랙볼, 터치 패드 및/또는 마우스와 같은 다양한 사용자 인터페이스를 제공할 수 있다. 전자 디바이스는 일부 실시예에서는 스피커 및 디스플레이 디바이스를 포함할 수도 있다.
일부 실시예에 있어서, 병렬 프로세싱 디바이스(400)에서의 프로세싱 엘리먼트는 컴퓨터 명령어 또는 컴퓨터 코드를 실행할 수 있는 집적 칩을 포함할 수 있다. 프로세서는 또한 주문형 반도체(ASIC), 프로그래밍가능 로직 어레이(PLA), 필드 프로그래밍가능 게이트 어레이(FPGA), 또는 어느 다른 집적 회로를 사용하여 하드웨어에서 구현될 수 있다.
일부 실시예에 있어서, 병렬 프로세싱 디바이스(400)는 시스템 온 칩(SOC)으로서 구현될 수 있다. 다른 실시예에 있어서, 병렬 프로세싱 디바이스에서의 하나 이상의 블록은 별개의 칩으로서 구현될 수 있고, 병렬 프로세싱 디바이스는 시스템 인 패키지(SIP)에 패키징될 수 있다. 일부 실시예에 있어서, 병렬 프로세싱 디바이스(400)는 데이터 프로세싱 애플리케이션에 사용될 수 있다. 데이터 프로세싱 애플리케이션은 이미지 프로세싱 애플리케이션 및/또는 비디오 프로세싱 애플리케이션을 포함할 수 있다. 이미지 프로세싱 애플리케이션은 이미지 필터링 연산을 포함하는 이미지 프로세싱 프로세스를 포함할 수 있고; 비디오 프로세싱 애플리케이션은 비디오 디코딩 연산, 비디오 인코딩 연산, 비디오 내 물체 또는 모션을 검출하기 위한 비디오 분석 연산을 포함할 수 있다. 본 발명의 부가적 애플리케이션은 비디오, 물체 또는 이미지의 시퀀스에 기반하는 기계 학습 및 분류, 및 게이밍 애플리케이션이 심도 가능 카메라를 포함하는 다중 카메라 뷰로부터 기하구조를 추출하고 와이어프레임 기하구조(예를 들면, 포인트-클라우드를 통하여)가 GPU에 의한 후속 정점 셰이딩을 위해 추출되어 나올 수 있는 다중 뷰로부터 특징을 추출하는 것들을 포함하는 증강 현실 애플리케이션을 포함한다.
전자 디바이스(2600)는 셀룰러 폰과 같은 모바일 디바이스를 포함할 수 있다. 모바일 디바이스는 복수의 액세스 기술을 사용하는 복수의 라디오 액세스 네트워크와 그리고 유선 통신 네트워크와 통신할 수 있다. 모바일 디바이스는 워드 프로세싱, 웹 브라우징, 게이밍, 전자책 능력, 운영 체제 및 풀 키보드와 같은 고급 능력을 제공하는 스마트 폰일 수 있다. 모바일 디바이스는 심비안 운영 체제, 아이폰 운영 체제, 림의 블랙베리, 윈도우즈 모바일, 리눅스, 팜 웹 운영 체제 및 안드로이드와 같은 운영 체제를 실행할 수 있다. 스크린은 모바일 디바이스에 데이터를 입력하는데 사용될 수 있는 터치 스크린일 수 있고 스크린은 풀 키보드 대신에 사용될 수 있다. 모바일 디바이스는 애플리케이션을 실행하거나 또는 통신 네트워크에서의 서버에 의해 제공되는 애플리케이션과 통신할 수 있는 능력을 가질 수 있다. 모바일 디바이스는 네트워크 상의 이들 애플리케이션으로부터 업데이트 및 다른 정보를 수신할 수 있다.
또한, 전자 디바이스(2600)는 텔레비전(TV), 비디오 프로젝터, 셋-톱 박스 또는 셋-톱 유닛, 디지털 비디오 레코더(DVR), 컴퓨터, 넷북, 랩톱, 태블릿 컴퓨터, 및 네트워크와 통신할 수 있는 어느 다른 청각/시각 장비와 같은 여러 다른 디바이스를 망라할 수 있다. 또한, 전자 디바이스는 전역 측위 좌표, 프로파일 정보, 또는 다른 위치 정보를 그 스택 또는 메모리에 유지할 수 있다.
여기에서 수개의 다른 배열이 설명되었기는 하지만, 각각의 특징은 이점을 달성하도록 다양한 형태로 함께 조합되는 것이 유익할 수도 있음을 인식할 것이다.
상기 명세서에서, 본 출원이 특정 예를 참조하여 설명되었다. 그렇지만, 첨부 청구범위에서 제시된 바와 같이 본 발명의 더 넓은 취지 및 범위로부터 벗어남이 없이 다양한 수정 및 변경이 여기에 이루어질 수 있음은 명백할 것이다. 예를 들어, 접속은, 예를 들어 중간 디바이스를 통하여, 각각의 노드, 유닛 또는 디바이스로 또는 그로부터 신호를 전송하는데 적합한 어느 유형의 접속이라도 될 수 있다. 따라서, 달리 내포되거나 서술되지 않는 한, 접속은 예를 들어 직접 접속일 수도 있고 간접 접속일 수도 있다.
여기에서 묘사된 아키텍처는 단지 예시일 뿐이고, 실제로는 동일한 기능성을 달성하는 많은 다른 아키텍처가 구현될 수 있다고 이해되는 것이다. 추상적이지만 그래도 확실한 의미로, 동일한 기능성을 달성하는 컴포넌트의 어느 배열이라도 소망 기능성이 달성되도록 효과적으로 "연관된다". 그리하여, 특정 기능성을 달성하도록 조합된 여기에서의 어느 2개의 컴포넌트라도, 아키텍처 또는 중간 컴포넌트와 무관하게, 소망 기능성이 달성되도록 서로 "연관된" 것으로 보일 수 있다. 마찬가지로, 그렇게 연관된 어느 2개의 컴포넌트라도 또한 소망 기능성을 달성하도록 서로 "동작가능하게 접속된" 또는 "동작가능하게 결합된" 것으로 보일 수 있다.
더욱, 당업자는 위에서 설명된 연산의 기능성 간 경계가 단지 예시적인 것임을 인식할 것이다. 다중 연산의 기능성은 단일 연산으로 조합될 수 있고, 그리고/또는 단일 연산의 기능성은 부가적 연산으로 분산될 수 있다. 더욱, 대안의 실시예는 특정 연산의 다중 인스턴스를 포함할 수 있고, 연산의 순서는 다양한 다른 실시예에서는 바뀔 수 있다.
그렇지만, 다른 수정, 변형 및 대안도 가능하다. 따라서, 명세서 및 도면은 제한적 의미라기보다는 예시적인 것으로 간주되는 것이다.
청구범위에서, 어구들 사이에 놓이는 어느 참조 기호라도 청구범위를 한정하는 것으로 해석되어서는 안 된다. 단어 '포함한다'는 청구범위에서 열거된 것들 이외의 다른 구성요소 또는 단계의 존재를 배제하지는 않는다. 더욱, 단수형 부정관사는, 여기에서 사용될 때, 하나보다는 하나 이상으로서 정의된다. 또한, 청구범위에서 "적어도 하나" 및 "하나 이상"과 같은 도입구의 사용은 단수형 부정 관사에 의한 다른 청구항 구성요소의 도입이 그러한 도입된 청구항 구성요소를 포함하고 있는 어느 특정 청구항이라도 단 하나의 그러한 구성요소를 포함하고 있는 발명으로 한정함을 내포하는 것으로 해석되어서는 안 되며, 동일한 청구항이 도입구 "하나 이상" 또는 "적어도 하나"와 단수형 부정관사를 포함할 때라도 그렇다. 정관사의 사용에 대해서도 동일하다. 달리 서술되지 않는 한, "제1" 및 "제2"와 같은 용어는 그러한 용어가 기술하는 구성요소들 간 임의로 구별하도록 사용된다. 그리하여, 이들 용어는 반드시 그러한 구성요소의 시간적 또는 다른 우선순위결정을 나타내려는 의도는 아니다. 어떤 조치들이 서로 다른 청구항에서 나열되고 있다는 사실만으로 이들 조치의 조합이 이롭게 사용될 수 없음을 나타내지는 않는다.

Claims (38)

  1. 병렬 프로세싱 디바이스에 있어서,
    명령어들을 실행하도록 구조화된 복수의 프로세싱 엘리먼트;
    복수의 메모리 슬라이스를 포함하는 메모리 서브시스템으로서, 상기 메모리 서브시스템은 상기 복수의 프로세싱 엘리먼트 중 제1 프로세싱 엘리먼트에 대응하는, 상기 복수의 메모리 슬라이스 중의 제1 메모리 슬라이스를 포함하며, 상기 복수의 메모리 슬라이스 중 제1 메모리 슬라이스는 개개의 판독 및 기록 포트를 각각 갖는 복수의 랜덤 액세스 메모리(RAM) 타일을 포함하는, 상기 메모리 서브시스템; 및
    (a) 상기 복수의 프로세싱 엘리먼트 중 제1 프로세싱 엘리먼트 및 (b) 상기 복수의 RAM 타일의 각각의 RAM 타일과 연관되는 복수의 중재 블록(arbitration block)을 포함하고, 상기 복수의 중재 블록 중 제1 중재 블록은,
    상기 복수의 프로세싱 엘리먼트 중 제1 프로세싱 엘리먼트가 상기 복수의 메모리 슬라이스 중 제1 메모리 슬라이스에 대응한다는 결정에 응답하여, 상기 복수의 프로세싱 엘리먼트 중 제1 프로세싱 엘리먼트에 액세스 승인 메시지(access grant message)를 보내고,
    상기 복수의 프로세싱 엘리먼트 중 제1 프로세싱 엘리먼트가 상기 복수의 메모리 슬라이스 중 제1 메모리 슬라이스에 대응하지 않는다는 결정에 응답하여, 상기 복수의 프로세싱 엘리먼트 중 제1 프로세싱 엘리먼트로부터의 요청을 상호접속 시스템(interconnect system)에 라우팅하는, 병렬 프로세싱 디바이스.
  2. 제1항에 있어서, 상기 복수의 중재 블록 중 제1 중재 블록은 라운드-로빈 방식으로 상기 복수의 프로세싱 엘리먼트 중 제1 프로세싱 엘리먼트에 상기 액세스 승인 메시지를 보내도록 구조화되는, 병렬 프로세싱 디바이스.
  3. 제1항에 있어서, 상기 복수의 중재 블록은, 상기 복수의 RAM 타일의 각각의 RAM 타일로의 메모리 액세스 요청들을 모니터링하고 상기 복수의 프로세싱 엘리먼트 중 2개 이상이 동시에 상기 복수의 RAM 타일 중 하나에 액세스하려 시도하고 있는지 결정하도록 구조화된 충돌 검출기(clash detector)를 포함하는, 병렬 프로세싱 디바이스.
  4. 제3항에 있어서, 상기 충돌 검출기는 복수의 주소 디코더에 결합되되, 상기 복수의 주소 디코더의 각각의 주소 디코더는 상기 복수의 프로세싱 엘리먼트의 각각의 프로세싱 엘리먼트에 결합되고, 상기 복수의 프로세싱 엘리먼트 중 하나가 상기 복수의 중재 블록 중 제1 중재 블록과 연관된, 상기 복수의 RAM 타일의 각각의 RAM 타일에 액세스하려 시도하고 있는지 결정하도록 구조화되는, 병렬 프로세싱 디바이스.
  5. 제1항에 있어서, 상기 복수의 프로세싱 엘리먼트는, 벡터 프로세서들 또는 하드웨어 가속기들 중 적어도 하나를 포함하는, 병렬 프로세싱 디바이스.
  6. 제5항에 있어서, 상기 복수의 메모리 슬라이스의 각각의 메모리 슬라이스로의 액세스를 제공하도록 구조화된 복수의 메모리 슬라이스 컨트롤러를 더 포함하는, 병렬 프로세싱 디바이스.
  7. 제6항에 있어서, 상기 상호접속 시스템은, 상기 벡터 프로세서들 중 적어도 하나와 상기 메모리 서브시스템 간 통신을 제공하도록 구조화된 제1 버스를 포함하는, 병렬 프로세싱 디바이스.
  8. 제7항에 있어서, 상기 상호접속 시스템은 상기 하드웨어 가속기들 중 적어도 하나와 상기 메모리 서브시스템 간 통신을 제공하도록 구조화된 제2 버스 시스템을 포함하는, 병렬 프로세싱 디바이스.
  9. 제8항에 있어서, 상기 제2 버스 시스템은, 상기 하드웨어 가속기들의 각각의 하드웨어 가속기로부터 메모리 액세스 요청을 수신함으로써 그리고 상기 하드웨어 가속기들의 각각의 하드웨어 가속기에, 상기 메모리 서브시스템으로의 액세스를 승인함으로써, 상기 하드웨어 가속기들 중 적어도 하나와 상기 메모리 서브시스템 간 통신을 중재하도록 구조화된 슬라이스 주소 요청 필터를 포함하는, 병렬 프로세싱 디바이스.
  10. 제1항에 있어서, 상기 복수의 프로세싱 디바이스 중 하나는 상기 메모리 서브시스템의 처리율을 증가시키도록 버퍼를 포함하되, 상기 버퍼 내 엘리먼트의 수는 상기 메모리 서브시스템으로부터 데이터를 검색(retrieving)하기 위한 사이클의 수보다 더 큰, 병렬 프로세싱 디바이스.
  11. 병렬 프로세싱 시스템을 동작시키기 위한 방법에 있어서,
    제1 프로세싱 엘리먼트를 포함하는 복수의 프로세싱 엘리먼트를 제공하는 단계로서, 상기 복수의 프로세싱 엘리먼트의 각각은 명령어들을 실행하도록 구조화되는, 상기 복수의 프로세싱 엘리먼트를 제공하는 단계;
    상기 제1 프로세싱 엘리먼트에 대응하는 제1 메모리 슬라이스를 포함하는 복수의 메모리 슬라이스를 포함하는 메모리 서브시스템을 제공하는 단계로서, 상기 제1 메모리 슬라이스는 개개의 판독 및 기록 포트를 각각 갖는 복수의 랜덤 액세스 메모리(RAM) 타일을 포함하는, 상기 메모리 서브시스템을 제공하는 단계;
    (a) 상기 복수의 RAM 타일 중 하나 및 (b) 상기 제1 프로세싱 엘리먼트와 연관된 중재 블록에 의해, 상기 제1 프로세싱 엘리먼트로부터의 요청을 수신하는 단계를 포함하고, 상기 중재 블록은, 상기 요청에 응답하여,
    상기 제1 프로세싱 엘리먼트가 상기 제1 메모리 슬라이스에 대응한다는 결정에 응답하여, 상기 제1 프로세싱 엘리먼트에 액세스 승인 메시지를 보내고,
    상기 제1 프로세싱 엘리먼트가 상기 제1 메모리 슬라이스에 대응하지 않는다는 결정에 응답하여, 상기 제1 프로세싱 엘리먼트로부터의 요청을 상호접속 시스템에 라우팅하는, 병렬 프로세싱 시스템 동작 방법.
  12. 제11항에 있어서, 라운드-로빈 방식으로 상기 복수의 프로세싱 엘리먼트 중 하나로의 액세스 권한을 부여하도록 상기 복수의 프로세싱 엘리먼트에 복수의 수권 메시지(authorization message)를, 상기 중재 블록에 의해, 보내는 단계를 더 포함하는, 병렬 프로세싱 시스템 동작 방법.
  13. 제11항에 있어서,
    상기 복수의 RAM 타일의 각각의 RAM 타일로의 메모리 액세스 요청들을, 상기 중재 블록에서의 충돌 검출기에 의해, 모니터링하는 단계; 및
    상기 복수의 프로세싱 엘리먼트 중 2개 이상이 동시에 상기 복수의 RAM 타일중 상기 각각의 RAM 타일에 액세스하려 시도하고 있는지 결정하는 단계를 더 포함하는, 병렬 프로세싱 시스템 동작 방법.
  14. 제11항에 있어서, 상기 복수의 프로세싱 엘리먼트는 벡터 프로세서들 또는 하드웨어 가속기들 중 적어도 하나를 포함하는, 병렬 프로세싱 시스템 동작 방법.
  15. 제14항에 있어서, 상기 복수의 메모리 슬라이스의 각각의 메모리 슬라이드로의 액세스를 제공하도록 구조화된 복수의 메모리 슬라이스 컨트롤러를 제공하는 단계를 더 포함하는, 병렬 프로세싱 시스템 동작 방법.
  16. 제15항에 있어서, 상기 상호접속 시스템의 제1 버스 시스템을 통하여 상기 벡터 프로세서들 중 적어도 하나와 상기 메모리 서브시스템 간 통신을 제공하는 단계를 더 포함하는, 병렬 프로세싱 시스템 동작 방법.
  17. 제16항에 있어서, 상기 상호접속 시스템의 제2 버스 시스템을 통하여 상기 하드웨어 가속기들 중 적어도 하나와 상기 메모리 서브시스템 간 통신을 제공하는 단계를 더 포함하는, 병렬 프로세싱 시스템 동작 방법.
  18. 제17항에 있어서, 상기 제2 버스 시스템은, 상기 하드웨어 가속기들의 각각의 하드웨어 가속기로부터 메모리 액세스 요청을 수신함으로써 그리고 상기 하드웨어 가속기들의 각각의 하드웨어 가속기에, 상기 메모리 서브시스템으로의 액세스를 승인함으로써, 상기 하드웨어 가속기들 중 적어도 하나와 상기 메모리 서브시스템 간 통신을 중재하도록 구조화된 슬라이스 주소 요청 필터를 포함하는, 병렬 프로세싱 시스템 동작 방법.
  19. 전자 디바이스에 있어서,
    복수의 프로세싱 엘리먼트로서, 상기 복수의 프로세싱 엘리먼트의 각각의 프로세싱 엘리먼트는 명령어들을 실행하는, 상기 복수의 프로세싱 엘리먼트;
    복수의 메모리 슬라이스를 포함하는 메모리 서브시스템으로서, 상기 메모리 서브시스템은 상기 복수의 프로세싱 엘리먼트 중 제1 프로세싱 엘리먼트에 대응하는, 상기 복수의 메모리 슬라이스 중의 제1 메모리 슬라이스를 포함하며, 상기 복수의 메모리 슬라이스 중 제1 메모리 슬라이스는 개개의 판독 및 기록 포트를 각각 갖는 복수의 랜덤 액세스 메모리(RAM) 타일을 포함하는, 상기 메모리 서브시스템;
    상기 복수의 프로세싱 엘리먼트와 상기 메모리 서브시스템을 결합시키는 상호접속 시스템으로서,
    상기 복수의 메모리 슬라이스 중 제1 메모리 슬라이스와 상기 복수의 프로세싱 엘리먼트 중 대응하는 제1 프로세싱 엘리먼트를 결합시키는 로컬 상호접속부, 및
    상기 복수의 메모리 슬라이즈 중 제1 메모리 슬라이스와 상기 복수의 프로세싱 엘리먼트 중 나머지 프로세싱 엘리먼트를 결합시키도록 구성된 글로벌 상호접속부를 포함하는, 상기 상호접속 시스템; 및
    프로세서를 포함하고,
    상기 프로세서는,
    데이터 프로세싱 프로세스와 연관된 흐름 그래프를 검색하되, 상기 흐름 그래프는 복수의 노드 및 상기 복수의 노드 중 2개 이상을 접속시키는 복수의 에지를 포함하고, 각각의 노드는 연산을 식별하고 각각의 에지는 접속된 노드들 간의 관계를 식별하며;
    상기 복수의 노드 중 제1 노드를 상기 복수의 병렬 프로세싱 엘리먼트 중 제1 프로세싱 엘리먼트에 배정(assign)하고;
    상기 복수의 노드 중 제2 노드를 상기 복수의 병렬 프로세싱 엘리먼트의 제2 프로세싱 엘리먼트에 배정함으로써, 상기 제1 노드 및 상기 제2 노드와 연관된 연산들을 병렬화하는, 전자 디바이스.
  20. 제19항에 있어서, 상기 흐름 그래프는 확장성 마크업 언어(XML) 포맷으로 검색되는, 전자 디바이스.
  21. 제19항에 있어서, 상기 프로세서는, 상기 전자 디바이스에서의 메모리 서브시스템의 과거 성능에 기반하여 상기 복수의 노드 중 제1 노드를 상기 제1 프로세싱 엘리먼트에 배정하는, 전자 디바이스.
  22. 제21항에 있어서, 상기 메모리 서브시스템은 한 시간 기간에 걸쳐 메모리 충돌의 수를 카운팅하는 카운터를 포함하고, 상기 메모리 서브시스템의 상기 과거 성능은 상기 카운터에 의해 측정된 상기 메모리 충돌의 수를 포함하는, 전자 디바이스.
  23. 제19항에 있어서, 상기 프로세서는, 상기 전자 디바이스가 상기 흐름 그래프의 적어도 일부를 실행하고 있는 동안, 상기 복수의 노드 중 제1 노드를 상기 제1 프로세싱 엘리먼트에 배정하는, 전자 디바이스.
  24. 제19항에 있어서, 상기 프로세서는,
    복수의 흐름 그래프를 검색하고,
    상기 복수의 흐름 그래프와 연관된 연산을 상기 전자 디바이스에서의 복수의 프로세싱 엘리먼트 중 하나에 배정하는, 전자 디바이스.
  25. 제19항에 있어서, 상기 프로세서는 메모리 충돌을 감축하도록 상기 복수의 프로세싱 엘리먼트에 의한 메모리 액세스들을 스태거링(staggering)하는, 전자 디바이스.
  26. 제19항에 있어서, 상기 전자 디바이스는 모바일 디바이스를 포함하는, 전자 디바이스.
  27. 제19항에 있어서, 상기 흐름 그래프를 특정하기 위해 애플리케이션 프로그래밍 인터페이스(API)를 더 포함하는, 전자 디바이스.
  28. 제19항에 있어서, 상기 프로세서는,
    입력 이미지 데이터를 복수의 스트립으로 분할하고; 그리고
    상기 입력 이미지 데이터의 상기 복수의 스트립 중 하나를 상기 복수의 프로세싱 엘리먼트 중 하나에 제공함으로써,
    상기 입력 이미지 데이터를 상기 복수의 프로세싱 엘리먼트에 제공하는, 전자 디바이스.
  29. 제28항에 있어서, 상기 입력 이미지 데이터의 상기 복수의 스트립의 수는 상기 복수의 프로세싱 엘리먼트의 수와 동일한, 전자 디바이스.
  30. 방법에 있어서,
    병렬 프로세싱 디바이스와 통신하고 있는 프로세서에 의해 명령어를 실행함으로써, 데이터 프로세싱 프로세스와 연관된 흐름 그래프를 검색(retrieving)하는 단계로서, 상기 흐름 그래프는 복수의 노드 및 상기 복수의 노드 중 2개 이상을 접속시키는 복수의 에지를 포함하고, 각각의 노드는 연산을 식별하고 각각의 에지는 접속된 노드들 간 관계를 식별하는, 상기 흐름 그래프를 검색하는 단계;
    상기 복수의 노드 중 제1 노드를 제1 프로세싱 엘리먼트에 배정하는 단계;
    상기 복수의 노드 중 제2 노드를 제2 프로세싱 엘리먼트에 배정함으로써, 상기 제1 노드 및 상기 제2 노드와 연관된 연산들을 병렬화하는 단계;
    복수의 메모리 슬라이스를 갖는 메모리 서브시스템을 구성하는 단계로서, 상기 복수의 메모리 슬라이스의 각각의 메모리 슬라이스는 상기 제1 프로세싱 엘리먼트와 연관된 제1 메모리 슬라이스를 포함하고, 상기 제1 메모리 슬라이스는 개개의 판독 및 기록 포트를 갖는 복수의 랜덤 액세스 메모리(RAM) 타일을 포함하는, 상기 메모리 서브시스템을 구성하는 단계;
    상기 제1 프로세싱 엘리먼트, 상기 제2 프로세싱 엘리먼트, 및 상기 메모리 서브시스템을 상호접속 시스템과 결합시키는 단계;
    상기 제1 메모리 슬라이스와 상기 제1 프로세싱 엘리먼트를 결합시키는 단계; 및
    상기 제1 메모리 슬라이스 및 상기 제2 프로세싱 엘리먼트를 글로벌 상호접속부와 결합시키는 단계를 포함하는, 방법.
  31. 제30항에 있어서, 상기 흐름 그래프을 확장성 마크업 언어(XML) 포맷으로서 검색하는 단계를 더 포함하는, 방법.
  32. 제30항에 있어서, 상기 병렬 프로세싱 디바이스에서의 제1 메모리 슬라이스의 과거 성능에 기반하여 상기 복수의 노드 중 제1 노드를 상기 제1 프로세싱 엘리먼트에 배정하는 단계를 더 포함하는, 방법.
  33. 제32항에 있어서, 한 시간 기간에 걸쳐 상기 제1 메모리 슬라이스에서의 메모리 충돌의 수를, 상기 메모리 서브시스템에서의 카운터에서, 카운팅하는 단계를 더 포함하고, 상기 제1 메모리 슬라이스의 상기 과거 성능은 상기 제1 메모리 슬라이스에서의 상기 메모리 충돌의 수를 포함하는, 방법.
  34. 제30항에 있어서, 상기 병렬 프로세싱 디바이스가 상기 흐름 그래프의 적어도 일부를 동작시키고 있는 동안에 상기 복수의 노드 중 상기 제1 노드를 상기 제1 프로세싱 엘리먼트에 배정하는 단계는 더 포함하는, 방법.
  35. 제30항에 있어서, 메모리 충돌을 감축하도록 상기 복수의 프로세싱 엘리먼트에 의한 상기 제1 메모리 슬라이스로의 메모리 액세스들을 스태거링하는 단계를 더 포함하는, 방법.
  36. 제30항에 있어서, 상기 흐름 그래프를 특정하기 위해 상기 병렬 프로세싱 디바이스와 연관된 애플리케이션 프로그래밍 인터페이스(API)를 사용하는 단계를 더 포함하는, 방법.
  37. 제30항에 있어서,
    입력 이미지 데이터를 복수의 스트립으로 분할하는 단계; 및
    상기 입력 이미지 데이터의 상기 복수의 스트립 중 하나를 상기 복수의 프로세싱 엘리먼트 중 하나에 제공하는 단계
    를 더 포함하는, 방법.
  38. 제37항에 있어서, 상기 입력 이미지 데이터의 상기 복수의 스트립의 수는 상기 복수의 프로세싱 엘리먼트의 수와 동일한, 방법.
KR1020217006168A 2013-08-08 2014-08-06 컴퓨터 이미징 파이프라인 KR102340003B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020217040695A KR102553932B1 (ko) 2013-08-08 2014-08-06 컴퓨터 이미징 파이프라인

Applications Claiming Priority (10)

Application Number Priority Date Filing Date Title
GBGB1314263.3A GB201314263D0 (en) 2013-08-08 2013-08-08 Configurable and composable computational imaging pipeline
GB1314263.3 2013-08-08
ROA201300812A RO129804A0 (ro) 2013-11-06 2013-11-06 Aparat, sistem şi metodă pentru a realiza o bandă configurabilă şi extensibilă de procesare de imagini
ROA/00812 2013-11-06
US14/082,396 2013-11-18
US14/082,645 2013-11-18
US14/082,645 US9146747B2 (en) 2013-08-08 2013-11-18 Apparatus, systems, and methods for providing configurable computational imaging pipeline
US14/082,396 US9934043B2 (en) 2013-08-08 2013-11-18 Apparatus, systems, and methods for providing computational imaging pipeline
PCT/IB2014/002541 WO2015019197A2 (en) 2013-08-08 2014-08-06 Computational imaging pipeline
KR1020167005928A KR102223840B1 (ko) 2013-08-08 2014-08-06 컴퓨터 이미징 파이프라인

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020167005928A Division KR102223840B1 (ko) 2013-08-08 2014-08-06 컴퓨터 이미징 파이프라인

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020217040695A Division KR102553932B1 (ko) 2013-08-08 2014-08-06 컴퓨터 이미징 파이프라인

Publications (2)

Publication Number Publication Date
KR20210027517A true KR20210027517A (ko) 2021-03-10
KR102340003B1 KR102340003B1 (ko) 2021-12-17

Family

ID=52449645

Family Applications (4)

Application Number Title Priority Date Filing Date
KR1020217040695A KR102553932B1 (ko) 2013-08-08 2014-08-06 컴퓨터 이미징 파이프라인
KR1020167005928A KR102223840B1 (ko) 2013-08-08 2014-08-06 컴퓨터 이미징 파이프라인
KR1020217006168A KR102340003B1 (ko) 2013-08-08 2014-08-06 컴퓨터 이미징 파이프라인
KR1020237022874A KR20230107412A (ko) 2013-08-08 2014-08-06 컴퓨터 이미징 파이프라인

Family Applications Before (2)

Application Number Title Priority Date Filing Date
KR1020217040695A KR102553932B1 (ko) 2013-08-08 2014-08-06 컴퓨터 이미징 파이프라인
KR1020167005928A KR102223840B1 (ko) 2013-08-08 2014-08-06 컴퓨터 이미징 파이프라인

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020237022874A KR20230107412A (ko) 2013-08-08 2014-08-06 컴퓨터 이미징 파이프라인

Country Status (6)

Country Link
US (6) US9146747B2 (ko)
EP (1) EP3031047A2 (ko)
JP (3) JP6571078B2 (ko)
KR (4) KR102553932B1 (ko)
CN (2) CN112037115A (ko)
WO (1) WO2015019197A2 (ko)

Families Citing this family (67)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9378560B2 (en) 2011-06-17 2016-06-28 Advanced Micro Devices, Inc. Real time on-chip texture decompression using shader processors
US11768689B2 (en) 2013-08-08 2023-09-26 Movidius Limited Apparatus, systems, and methods for low power computational imaging
US9146747B2 (en) 2013-08-08 2015-09-29 Linear Algebra Technologies Limited Apparatus, systems, and methods for providing configurable computational imaging pipeline
WO2015060845A1 (en) * 2013-10-23 2015-04-30 Intel Corporation Emi mitigation on high-speed lanes using false stall
KR102103543B1 (ko) * 2013-11-28 2020-05-29 삼성전자 주식회사 내부 하드웨어 필터를 포함하는 일체형 데이터 저장 장치, 이의 동작 방법, 및 상기 데이터 저장 장치를 포함하는 시스템
US10635544B1 (en) * 2014-03-13 2020-04-28 EMC IP Holding Company LLC Assigning VMware local proxy host-datastore groups for consistently optimized access
US9542321B2 (en) * 2014-04-24 2017-01-10 Avago Technologies General Ip (Singapore) Pte. Ltd. Slice-based random access buffer for data interleaving
KR102273023B1 (ko) * 2014-10-16 2021-07-05 삼성전자주식회사 화질 개선 알고리즘 처리 방법 및 장치
US10255183B2 (en) * 2015-07-23 2019-04-09 Arteris, Inc. Victim buffer for cache coherent systems
US9710876B2 (en) 2015-01-16 2017-07-18 Intel Corporation Graph-based application programming interface architectures with equivalency classes for enhanced image processing parallelism
US9818166B2 (en) 2015-01-16 2017-11-14 Intel Corporation Graph-based application programming interface architectures with producer/consumer nodes for enhanced image processing parallelism
KR102106541B1 (ko) 2015-03-18 2020-05-04 삼성전자주식회사 공유 리소스 액세스 중재 방법 및 이를 수행하기 위한 공유 리소스 액세스 중재 장치 및 공유 리소스 액세스 중재 시스템
US10691463B2 (en) * 2015-07-30 2020-06-23 Futurewei Technologies, Inc. System and method for variable lane architecture
US11120884B2 (en) 2015-09-30 2021-09-14 Sunrise Memory Corporation Implementing logic function and generating analog signals using NOR memory strings
US10169073B2 (en) 2015-12-20 2019-01-01 Intel Corporation Hardware accelerators and methods for stateful compression and decompression operations
US10055807B2 (en) 2016-03-02 2018-08-21 Samsung Electronics Co., Ltd. Hardware architecture for acceleration of computer vision and imaging processing
JP6592184B2 (ja) * 2016-03-24 2019-10-16 富士フイルム株式会社 画像処理装置、画像処理方法、及び画像処理プログラム
WO2017163591A1 (ja) * 2016-03-24 2017-09-28 富士フイルム株式会社 画像処理装置、画像処理方法、及び画像処理プログラム
CN108475213B (zh) * 2016-03-24 2021-11-30 富士胶片商业创新有限公司 图像处理装置、图像处理方法和图像处理程序
US10460704B2 (en) 2016-04-01 2019-10-29 Movidius Limited Systems and methods for head-mounted display adapted to human visual mechanism
US11531528B2 (en) 2016-05-19 2022-12-20 Cloudbees, Inc. Systems and methods for non-disruptive continuous software delivery
US10310897B2 (en) * 2016-09-30 2019-06-04 Intel Corporation Hardware accelerators and methods for offload operations
US20180122038A1 (en) * 2016-10-28 2018-05-03 Qualcomm Incorporated Multi-layer fetch during composition
US10567248B2 (en) * 2016-11-29 2020-02-18 Intel Corporation Distributed assignment of video analytics tasks in cloud computing environments to reduce bandwidth utilization
US10387160B2 (en) 2017-04-01 2019-08-20 Intel Corporation Shared local memory tiling mechanism
CN108733311B (zh) * 2017-04-17 2021-09-10 伊姆西Ip控股有限责任公司 用于管理存储系统的方法和设备
US10505860B1 (en) * 2017-05-30 2019-12-10 Xilinx, Inc. System and method for round robin scheduling
US10600147B2 (en) * 2017-08-22 2020-03-24 Intel Corporation Efficient memory layout for enabling smart data compression in machine learning environments
US10474600B2 (en) 2017-09-14 2019-11-12 Samsung Electronics Co., Ltd. Heterogeneous accelerator for highly efficient learning systems
US11243880B1 (en) 2017-09-15 2022-02-08 Groq, Inc. Processor architecture
US11360934B1 (en) 2017-09-15 2022-06-14 Groq, Inc. Tensor streaming processor architecture
US11114138B2 (en) 2017-09-15 2021-09-07 Groq, Inc. Data structures with multiple read ports
US11868804B1 (en) 2019-11-18 2024-01-09 Groq, Inc. Processor instruction dispatch configuration
US11170307B1 (en) 2017-09-21 2021-11-09 Groq, Inc. Predictive model compiler for generating a statically scheduled binary with known resource constraints
US10475151B2 (en) * 2017-11-06 2019-11-12 Basemark Oy Graphics engine resource management and allocation system
WO2019086765A1 (en) * 2017-11-06 2019-05-09 Basemark Oy Combined rendering and compute resource allocation management system
WO2019086764A1 (en) * 2017-11-06 2019-05-09 Basemark Oy Graphics engine resource management and allocation system
EP3651020A1 (en) 2017-11-20 2020-05-13 Shanghai Cambricon Information Technology Co., Ltd Computer equipment, data processing method, and storage medium
CN108076287B (zh) * 2017-12-14 2020-01-03 维沃移动通信有限公司 一种图像处理方法、移动终端及计算机可读存储介质
US10949947B2 (en) 2017-12-29 2021-03-16 Intel Corporation Foveated image rendering for head-mounted display devices
US10416899B2 (en) * 2018-02-13 2019-09-17 Tesla, Inc. Systems and methods for low latency hardware memory management
US10679070B1 (en) * 2018-02-23 2020-06-09 Facebook, Inc. Systems and methods for a video understanding platform
CN110555793B (zh) * 2018-06-04 2023-03-14 北京亮亮视野科技有限公司 高效的深度卷积实现方法及包括该方法的视觉处理方法
US11579921B2 (en) 2018-08-29 2023-02-14 Alibaba Group Holding Limited Method and system for performing parallel computations to generate multiple output feature maps
US10922203B1 (en) * 2018-09-21 2021-02-16 Nvidia Corporation Fault injection architecture for resilient GPU computing
US11455370B2 (en) 2018-11-19 2022-09-27 Groq, Inc. Flattened input stream generation for convolution with expanded kernel
CN112005275B (zh) * 2018-11-26 2023-04-21 北京嘀嘀无限科技发展有限公司 使用视频内存池进行点云渲染的系统和方法
US10963384B2 (en) * 2018-12-19 2021-03-30 SimpleMachines Inc. Method, computer program product, and apparatus for acceleration of simultaneous access to shared data
CN110032453B (zh) 2019-04-19 2022-05-03 上海兆芯集成电路有限公司 用以任务调度与分配的处理系统及其加速方法
CN110032452B (zh) 2019-04-19 2021-08-24 上海兆芯集成电路有限公司 处理系统与异构处理器加速方法
CN110083387B (zh) * 2019-04-19 2021-11-12 上海兆芯集成电路有限公司 使用轮询机制的处理系统及其访存方法
CN110058931B (zh) 2019-04-19 2022-03-22 上海兆芯集成电路有限公司 用以任务调度的处理系统及其加速方法
CN110046053B (zh) 2019-04-19 2021-11-12 上海兆芯集成电路有限公司 用以分配任务的处理系统及其访存方法
US11074213B2 (en) * 2019-06-29 2021-07-27 Intel Corporation Apparatuses, methods, and systems for vector processor architecture having an array of identical circuit blocks
US11269777B2 (en) * 2019-09-25 2022-03-08 Facebook Technologies, Llc. Systems and methods for efficient data buffering
US11392535B2 (en) 2019-11-26 2022-07-19 Groq, Inc. Loading operands and outputting results from a multi-dimensional array using only a single side
WO2021127218A1 (en) 2019-12-19 2021-06-24 Sunrise Memory Corporation Process for preparing a channel region of a thin-film transistor
EP4100839A4 (en) 2020-02-07 2024-03-13 Sunrise Memory Corp QUASI-VOLATILE SYSTEM LEVEL MEMORY
WO2021159028A1 (en) 2020-02-07 2021-08-12 Sunrise Memory Corporation High capacity memory circuit with low effective latency
CN113254070B (zh) 2020-02-07 2024-01-02 阿里巴巴集团控股有限公司 加速单元、片上系统、服务器、数据中心和相关方法
US11507301B2 (en) 2020-02-24 2022-11-22 Sunrise Memory Corporation Memory module implementing memory centric architecture
WO2021173572A1 (en) * 2020-02-24 2021-09-02 Sunrise Memory Corporation Channel controller for shared memory access
US20210312325A1 (en) * 2020-04-01 2021-10-07 Samsung Electronics Co., Ltd. Mixed-precision neural processing unit (npu) using spatial fusion with load balancing
US11287869B2 (en) * 2020-04-30 2022-03-29 Marvell Asia Pte Ltd System and methods for on-chip memory (OCM) port throttling for machine learning operations
CN112328522B (zh) * 2020-11-26 2023-05-26 北京润科通用技术有限公司 数据处理方法和装置
US11810640B2 (en) 2021-02-10 2023-11-07 Sunrise Memory Corporation Memory interface with configurable high-speed serial data lanes for high bandwidth memory
US11921559B2 (en) * 2021-05-03 2024-03-05 Groq, Inc. Power grid distribution for tensor streaming processors

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6184709B1 (en) * 1996-04-09 2001-02-06 Xilinx, Inc. Programmable logic device having a composable memory array overlaying a CLB array
US20090319730A1 (en) * 2008-06-19 2009-12-24 Sony Corporation Memory system, access control method therefor, and computer program
US20120110267A1 (en) * 2010-10-29 2012-05-03 Nokia Corporation Method and apparatus for providing efficient context classification
US20120311360A1 (en) * 2011-05-31 2012-12-06 Srikanth Balasubramanian Reducing Power Consumption Of Uncore Circuitry Of A Processor

Family Cites Families (100)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB710876A (en) 1951-04-27 1954-06-23 Chamberlain & Hookham Ltd Protective apparatus for electricity distributing systems
US4281312A (en) 1975-11-04 1981-07-28 Massachusetts Institute Of Technology System to effect digital encoding of an image
GB1488538A (en) 1975-11-28 1977-10-12 Ibm Compressed refresh buffer
JPS6015771A (ja) 1983-07-08 1985-01-26 Hitachi Ltd ベクトルプロセッサ
US5226171A (en) 1984-12-03 1993-07-06 Cray Research, Inc. Parallel vector processing system for individual and broadcast distribution of operands and control information
CA1236584A (en) 1984-12-03 1988-05-10 William E. Hall Parallel processing system
US5081573A (en) 1984-12-03 1992-01-14 Floating Point Systems, Inc. Parallel processing system
JPH0731669B2 (ja) 1986-04-04 1995-04-10 株式会社日立製作所 ベクトル・プロセツサ
GB2190560B (en) 1986-05-08 1990-06-20 Gen Electric Plc Data compression
JPH02290626A (ja) 1989-04-27 1990-11-30 Nhk Spring Co Ltd 金属ベローズの製造方法および製造装置
JPH04246745A (ja) * 1991-02-01 1992-09-02 Canon Inc 情報処理装置及びその方法
US5434623A (en) 1991-12-20 1995-07-18 Ampex Corporation Method and apparatus for image data compression using combined luminance/chrominance coding
US6104836A (en) 1992-02-19 2000-08-15 8×8, Inc. Computer architecture for video data processing and method thereof
US5262973A (en) 1992-03-13 1993-11-16 Sun Microsystems, Inc. Method and apparatus for optimizing complex arithmetic units for trivial operands
US5861873A (en) 1992-06-29 1999-01-19 Elonex I.P. Holdings, Ltd. Modular portable computer with removable pointer device
JP3042969B2 (ja) 1993-07-28 2000-05-22 凸版印刷株式会社 ゴルフボール用転写箔及びそれを用いたゴルフボールの製造方法並びにゴルフボール
JP3670041B2 (ja) * 1993-12-10 2005-07-13 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド 不揮発性メモリチップイネーブル符号化方法、コンピュータシステム、およびメモリコントローラ
FI97096C (fi) 1994-09-13 1996-10-10 Nokia Mobile Phones Ltd Videonkompressiomenetelmä
GB2311882B (en) 1996-04-04 2000-08-09 Videologic Ltd A data processing management system
JP3042969U (ja) 1997-04-28 1997-11-04 朝日印刷紙器株式会社 トレー兼用弁当容器
JPH1185512A (ja) 1997-09-03 1999-03-30 Fujitsu Ltd 命令圧縮格納および命令復元機能を有するデータ処理装置
US6173389B1 (en) 1997-12-04 2001-01-09 Billions Of Operations Per Second, Inc. Methods and apparatus for dynamic very long instruction word sub-instruction selection for execution time parallelism in an indirect very long instruction word processor
US6366999B1 (en) 1998-01-28 2002-04-02 Bops, Inc. Methods and apparatus to support conditional execution in a VLIW-based array processor with subword execution
WO1999063751A1 (en) 1998-05-30 1999-12-09 The Board Of Trustees Of The Leland Stanford Junior University Low-power parallel processor and imager integrated circuit
US6577316B2 (en) 1998-07-17 2003-06-10 3Dlabs, Inc., Ltd Wide instruction word graphics processor
US6839728B2 (en) 1998-10-09 2005-01-04 Pts Corporation Efficient complex multiplication and fast fourier transform (FFT) implementation on the manarray architecture
US6757019B1 (en) 1999-03-13 2004-06-29 The Board Of Trustees Of The Leland Stanford Junior University Low-power parallel processor and imager having peripheral control circuitry
WO2000062182A2 (en) 1999-04-09 2000-10-19 Clearspeed Technology Limited Parallel data processing apparatus
GB2348971B (en) 1999-04-09 2004-03-03 Pixelfusion Ltd Parallel data processing systems
US20080007562A1 (en) 1999-04-09 2008-01-10 Dave Stuttard Parallel data processing apparatus
US7526630B2 (en) * 1999-04-09 2009-04-28 Clearspeed Technology, Plc Parallel data processing apparatus
AU765931B2 (en) 1999-04-16 2003-10-02 Anticancer, Inc. Biological fluid assay methods
JP3412554B2 (ja) 1999-04-16 2003-06-03 日本電気株式会社 バス調停回路
US6523110B1 (en) 1999-07-23 2003-02-18 International Business Machines Corporation Decoupled fetch-execute engine with static branch prediction support
US6665708B1 (en) * 1999-11-12 2003-12-16 Telefonaktiebolaget Lm Ericsson (Publ) Coarse grained determination of data dependence between parallel executed jobs in an information processing system
US6591019B1 (en) 1999-12-07 2003-07-08 Nintendo Co., Ltd. 3D transformation matrix compression and decompression
US6859870B1 (en) 2000-03-07 2005-02-22 University Of Washington Method and apparatus for compressing VLIW instruction and sharing subinstructions
US6779066B2 (en) 2000-05-01 2004-08-17 Matsushita Electric Industrial Co., Ltd. Module having application-specific program stored therein
GB2362055A (en) 2000-05-03 2001-11-07 Clearstream Tech Ltd Image compression using a codebook
AU5235501A (en) 2000-05-03 2001-11-12 Clearstream Technologies Limited Video data transmission
GB2366643B (en) 2000-05-25 2002-05-01 Siroyan Ltd Methods of compressing instructions for processors
JP3560534B2 (ja) 2000-05-30 2004-09-02 エヌイーシーコンピュータテクノ株式会社 マルチプロセッサシステムとその排他制御方法
KR100466689B1 (ko) * 2000-08-28 2005-01-24 인터내셔널 비지네스 머신즈 코포레이션 콤팩트형 이중 포트 동적 랜덤 액세스 메모리 아키텍쳐 시스템 및 그 제조 방법
CA2357236C (en) 2000-10-17 2011-09-06 Spx Development Corporation Plug-in module for portable computing device
US7305092B2 (en) 2000-12-19 2007-12-04 Qualcomm Incorporated Method and system to accelerate cryptographic functions for secure e-commerce applications
EP1241892A1 (de) 2001-03-06 2002-09-18 Siemens Aktiengesellschaft Hardware-Accelerator eines Systems zur Videoverarbeitung
US6813390B2 (en) 2001-07-25 2004-11-02 Koninklijke Philips Electronics N.V. Scalable expandable system and method for optimizing a random system of algorithms for image quality
CN1511303A (zh) 2001-03-29 2004-07-07 皇家菲利浦电子有限公司 优化图像质量随机算法系统的可伸缩可扩展的系统和方法
JP3956652B2 (ja) * 2001-06-06 2007-08-08 株式会社日立製作所 プロセッサシステム
US20030005261A1 (en) 2001-06-29 2003-01-02 Gad Sheaffer Method and apparatus for attaching accelerator hardware containing internal state to a processing core
US20030149822A1 (en) 2002-02-01 2003-08-07 Bryan Scott Method for integrating an intelligent docking station with a handheld personal computer
KR100464406B1 (ko) 2002-02-08 2005-01-03 삼성전자주식회사 가변길이 vliw 명령어를 위한 디스패치 장치 및 방법
US6963342B2 (en) * 2002-02-28 2005-11-08 Sun Microsystems, Inc. Arbitration scheme for efficient parallel processing
AU2003221680A1 (en) 2002-04-09 2003-10-27 The Research Foundation Of State University Of New York Multiplier-based processor-in-memory architectures for image and graphics processing
US7061485B2 (en) 2002-10-31 2006-06-13 Hewlett-Packard Development Company, Lp. Method and system for producing a model from optical images
US7088777B2 (en) 2002-11-22 2006-08-08 Microsoft Corp. System and method for low bit rate watercolor video
JP4266619B2 (ja) * 2002-11-25 2009-05-20 株式会社ルネサステクノロジ 調停回路
US7038687B2 (en) 2003-06-30 2006-05-02 Intel Corporation System and method for high-speed communications between an application processor and coprocessor
US7777748B2 (en) 2003-11-19 2010-08-17 Lucid Information Technology, Ltd. PC-level computing system with a multi-mode parallel graphics rendering subsystem employing an automatic mode controller, responsive to performance data collected during the run-time of graphics applications
JPWO2005051099A1 (ja) 2003-11-28 2007-12-06 株式会社医食同源社 豆類食材及びその製造方法、並びに当該豆類食材を用いた加工食品
US8028164B2 (en) 2004-03-19 2011-09-27 Nokia Corporation Practical and secure storage encryption
US7196708B2 (en) 2004-03-31 2007-03-27 Sony Corporation Parallel vector processing
KR100618860B1 (ko) * 2004-09-09 2006-08-31 삼성전자주식회사 메모리 장치의 리프레쉬시 센싱 노이즈를 감소시킬 수있는 어드레스 코딩 방법 및 이를 구현한 어드레스 디코더
US20090009443A1 (en) * 2005-08-02 2009-01-08 Koninklijke Philips Electronics, N.V. Display Device
KR100707203B1 (ko) 2005-08-04 2007-04-13 삼성전자주식회사 3차원 그래픽스 가속 장치에 공급되는 전압을 제어하는장치 및 방법, 그를 이용한 3차원 그래픽스 가속 장치
JP2007207024A (ja) 2006-02-02 2007-08-16 Matsushita Electric Ind Co Ltd リソース管理装置
JP2007272357A (ja) * 2006-03-30 2007-10-18 Toshiba Corp ストレージクラスタシステム、データ処理方法、及びプログラム
US20070291571A1 (en) 2006-06-08 2007-12-20 Intel Corporation Increasing the battery life of a mobile computing system in a reduced power state through memory compression
KR100828128B1 (ko) 2006-07-20 2008-05-09 에이디반도체(주) 시분할 복수 주파수를 이용하는 정전용량 검출방법 및검출장치
JP2008108126A (ja) 2006-10-26 2008-05-08 Canon Inc データ転送制御装置及びそのバスアクセス調停方法
GB0700877D0 (en) 2007-01-17 2007-02-21 Linear Algebra Technologies Lt A device
GB2447494A (en) 2007-03-15 2008-09-17 Linear Algebra Technologies Lt A method and circuit for compressing data using a bitmap to identify the location of data values
US8291174B2 (en) * 2007-08-15 2012-10-16 Micron Technology, Inc. Memory device and method having on-board address protection system for facilitating interface with multiple processors, and computer system using same
US7856536B2 (en) * 2007-10-05 2010-12-21 International Business Machines Corporation Providing a process exclusive access to a page including a memory address to which a lock is granted to the process
US20090204837A1 (en) 2008-02-11 2009-08-13 Udaykumar Raval Power control system and method
US20090276559A1 (en) 2008-05-02 2009-11-05 International Business Machines Corporation Arrangements for Operating In-Line Memory Module Configurations
US8930644B2 (en) 2008-05-02 2015-01-06 Xilinx, Inc. Configurable transactional memory for synchronizing transactions
US8948270B2 (en) 2008-08-19 2015-02-03 Qualcomm Incorporated Power and computational load management techniques in video processing
US8200594B1 (en) * 2008-09-10 2012-06-12 Nvidia Corporation System, method, and computer program product for accelerating a game artificial intelligence process
WO2010086919A1 (ja) * 2009-01-27 2010-08-05 パナソニック株式会社 メモリアクセス装置およびその関連技術
ES2630045T3 (es) 2009-01-30 2017-08-17 Mauna Kea Technologies Método y sistema para el procesamiento de imágenes adquiridas en tiempo real mediante un dispositivo médico
US8615039B2 (en) 2009-05-21 2013-12-24 Microsoft Corporation Optimized allocation of multi-core computation for video encoding
KR101039782B1 (ko) * 2009-11-26 2011-06-09 한양대학교 산학협력단 능동 메모리 프로세서를 포함하는 네트워크-온-칩 시스템
US8095824B2 (en) * 2009-12-15 2012-01-10 Intel Corporation Performing mode switching in an unbounded transactional memory (UTM) system
US8539129B2 (en) * 2010-04-14 2013-09-17 Qualcomm Incorporated Bus arbitration techniques to reduce access latency
US20120096445A1 (en) 2010-10-18 2012-04-19 Nokia Corporation Method and apparatus for providing portability of partially accelerated signal processing applications
US20140040909A1 (en) 2010-10-21 2014-02-06 Paul Winser Data processing systems
JP2012168871A (ja) * 2011-02-16 2012-09-06 Nec Corp 計算機、消費電力低減方法およびプログラム
US8464190B2 (en) * 2011-02-17 2013-06-11 Maxeler Technologies Ltd. Method of, and apparatus for, stream scheduling in parallel pipelined hardware
US20130009980A1 (en) 2011-07-07 2013-01-10 Ati Technologies Ulc Viewing-focus oriented image processing
US9021146B2 (en) * 2011-08-30 2015-04-28 Apple Inc. High priority command queue for peripheral component
US8914262B2 (en) 2011-11-08 2014-12-16 The Mathworks, Inc. Visualization of data dependency in graphical models
US20140169669A1 (en) 2012-12-19 2014-06-19 National Chung Cheng University Tone mapping method of high dynamic range image/video
US9123128B2 (en) 2012-12-21 2015-09-01 Nvidia Corporation Graphics processing unit employing a standard processing unit and a method of constructing a graphics processing unit
US9405357B2 (en) 2013-04-01 2016-08-02 Advanced Micro Devices, Inc. Distribution of power gating controls for hierarchical power domains
US9727113B2 (en) 2013-08-08 2017-08-08 Linear Algebra Technologies Limited Low power computational imaging
US9146747B2 (en) 2013-08-08 2015-09-29 Linear Algebra Technologies Limited Apparatus, systems, and methods for providing configurable computational imaging pipeline
WO2015040450A1 (en) 2013-09-17 2015-03-26 Aselsan Elektronik Sanayi Ve Ticaret Anonim Sirketi Multi-purpose image processing core
US9978121B2 (en) 2013-12-04 2018-05-22 Razzor Technologies Adaptive sharpening in image processing and display
US9402018B2 (en) 2013-12-17 2016-07-26 Amazon Technologies, Inc. Distributing processing for imaging processing

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6184709B1 (en) * 1996-04-09 2001-02-06 Xilinx, Inc. Programmable logic device having a composable memory array overlaying a CLB array
US20090319730A1 (en) * 2008-06-19 2009-12-24 Sony Corporation Memory system, access control method therefor, and computer program
US20120110267A1 (en) * 2010-10-29 2012-05-03 Nokia Corporation Method and apparatus for providing efficient context classification
US20120311360A1 (en) * 2011-05-31 2012-12-06 Srikanth Balasubramanian Reducing Power Consumption Of Uncore Circuitry Of A Processor

Also Published As

Publication number Publication date
KR102553932B1 (ko) 2023-07-07
KR102340003B1 (ko) 2021-12-17
EP3031047A2 (en) 2016-06-15
CN105765623A (zh) 2016-07-13
KR20230107412A (ko) 2023-07-14
US20180349147A1 (en) 2018-12-06
US9146747B2 (en) 2015-09-29
KR20160056881A (ko) 2016-05-20
KR102223840B1 (ko) 2021-03-09
JP6571078B2 (ja) 2019-09-04
JP7025617B2 (ja) 2022-02-25
KR20210156845A (ko) 2021-12-27
JP7384534B2 (ja) 2023-11-21
JP2019220201A (ja) 2019-12-26
US20220147363A1 (en) 2022-05-12
US20190370005A1 (en) 2019-12-05
WO2015019197A3 (en) 2015-11-19
US11567780B2 (en) 2023-01-31
US9934043B2 (en) 2018-04-03
WO2015019197A2 (en) 2015-02-12
US20150046677A1 (en) 2015-02-12
US20230359464A1 (en) 2023-11-09
US11042382B2 (en) 2021-06-22
US10360040B2 (en) 2019-07-23
CN105765623B (zh) 2020-04-07
JP2016536692A (ja) 2016-11-24
CN112037115A (zh) 2020-12-04
JP2022058622A (ja) 2022-04-12
US20150046678A1 (en) 2015-02-12

Similar Documents

Publication Publication Date Title
US11567780B2 (en) Apparatus, systems, and methods for providing computational imaging pipeline
Elliott et al. GPUSync: A framework for real-time GPU management
US20120180068A1 (en) Scheduling and communication in computing systems
US8180998B1 (en) System of lanes of processing units receiving instructions via shared memory units for data-parallel or task-parallel operations
JP6201591B2 (ja) 情報処理装置および情報処理装置の制御方法
Hussain et al. Stand-alone memory controller for graphics system
Elliott et al. Gpusync: Architecture-aware management of gpus for predictable multi-gpu real-time systems
Sousa et al. Runtime reconfigurable bus arbitration for concurrent applications on heterogeneous MPSoC architectures
Zhou et al. An operating system framework for reconfigurable systems
KR20230119010A (ko) 그래픽 프로세서들에 대한 공유 제어 버스
Latif et al. Application development flow for on-chip distributed architectures
US20230075531A1 (en) Quality of Service Techniques in Distributed Graphics Processor
RO129804A0 (ro) Aparat, sistem şi metodă pentru a realiza o bandă configurabilă şi extensibilă de procesare de imagini
Dasari Timing Analysis of Real-Time Systems Considering the Contention on the Shared Interconnection Network in Multicores
Zebelein et al. A model-based inter-process resource sharing approach for high-level synthesis of dataflow graphs
Nadeem et al. Bandwidth Stealing TDMA Arbitration for Real-Time Multiprocessor Applications
CN117916716A (zh) 分布式图形处理器中的服务质量技术
WO2023038759A1 (en) Quality of service techniques in distributed graphics processor
Vrijnsen A NUMA Architecture Simulator
JP2009134635A (ja) マルチプロセッサシステム

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