KR101118486B1 - 온-디맨드 멀티 스레드 멀티미디어 프로세서 - Google Patents

온-디맨드 멀티 스레드 멀티미디어 프로세서 Download PDF

Info

Publication number
KR101118486B1
KR101118486B1 KR1020097019527A KR20097019527A KR101118486B1 KR 101118486 B1 KR101118486 B1 KR 101118486B1 KR 1020097019527 A KR1020097019527 A KR 1020097019527A KR 20097019527 A KR20097019527 A KR 20097019527A KR 101118486 B1 KR101118486 B1 KR 101118486B1
Authority
KR
South Korea
Prior art keywords
multimedia
application
core
configurable
processing units
Prior art date
Application number
KR1020097019527A
Other languages
English (en)
Other versions
KR20090115211A (ko
Inventor
윈 두
춘 위
궈팡 자오
Original Assignee
퀄컴 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 퀄컴 인코포레이티드 filed Critical 퀄컴 인코포레이티드
Publication of KR20090115211A publication Critical patent/KR20090115211A/ko
Application granted granted Critical
Publication of KR101118486B1 publication Critical patent/KR101118486B1/ko

Links

Images

Classifications

    • 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
    • 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
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • 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 or look ahead
    • 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 or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • 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 or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • 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]
    • 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/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the 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/10Address translation
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45579I/O management, e.g. providing access to device drivers or storage
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Image Generation (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Image Processing (AREA)

Abstract

그래픽, 오디오, 비디오, 카메라, 게임 등과 같이 다양한 유형의 멀티미디어에 대한 복수의 어플리케이션을 동시에 지원할 수 있는 멀티미디어 프로세서를 포함하는 디바이스가 여기 기술된다. 멀티미디어 프로세서는 명령들, 데이터 및 어플리케이션에 대한 상태 정보를 저장하는 구성가능 저장 자원 및 어플리케이션에 대한 다양한 유형의 프로세싱을 수행하는 할당가능 프로세싱 유닛을 포함한다. 구성가능 저장 자원은 어플리케이션에 대한 명령을 저장하는 명령 캐쉬, 어플리케이션에 대한 상태 정보를 저장하는 레지스터 뱅크, 어플리케이션의 스레드 (threads) 에 대한 상태 정보를 저장하는 콘텍스트 레지스터 (context register) 등을 포함할 수 있다. 프로세싱 유닛은 산술 논리 유닛 (ALU) 코어, 기초함수 코어, 로직 코어, 텍스쳐 샘플러, 로드 제어 유닛, 플로우 컨트롤러 등을 포함할 수 있으며, 이들은 하기에 상술되는 바와 같이 동작할 수 있다. 멀티미디어 프로세서는 저장 자원의 구성가능 부분을 각 어플리케이션에 대해 할당하고, 어플리케이션에 의해 요구됨에 따라 어플리케이션에 동적으로 지정한다.
멀티미디어 프로세서, 복수의 어플리케이션, 구성가능 자원

Description

온-디맨드 멀티 스레드 멀티미디어 프로세서 {ON-DEMAND MULTI-THREAD MULTIMEDIA PROCESSOR}
배경기술
기술분야
본 발명은 일반적으로 전자기기, 더 상세하게는 프로세서에 관한 발명이다.
배경기술
프로세서는 계산, 통신, 네트워킹등과 같은 다양한 목적으로 널리 사용된다. 프로세서는 중앙 처리 장치 (CPU) 와 같은 범용 프로세서 또는 디지털 신호 프로세서 (DSP) 나 그래픽 프로세싱 유닛 (GPU) 과 같은 전용 프로세서일 수 있다. 범용 프로세서는 명령들의 일반적인 세트 및 일반적인 기능을 지원할 수 있으며, 이들은 다양한 유형의 어플리케이션에 의해 사용될 수 있다. 범용 프로세서는 특정 프로세싱 요건이 필요한 특정 어플리케이션에 대해서는 비효율적일 수 있다. 대조적으로, 전용 프로세서는 명령들의 제한된 세트 및 특화된 기능을 지원할 수 있으며, 이들은 특정 어플리케이션에 대해 맞춤형 (customized) 일 수 있다. 이것은 어플리케이션을 위해 디자인된 전용 프로세서로 하여금 그 어플리케이션을 효율적으로 지원할 수 있게 한다. 그러나, 전용 프로세서에 의해 지원되는 어플리케이션의 범위는 제한될 수 있다.
셀룰러 폰, 개인 휴대용 정보 단말기 (PDA) 또는 랩탑 컴퓨터와 같은 디바이 스는 다양한 유형의 어플리케이션을 지원할 수 있다. 비용, 전력 등을 감소시키기 위해 가능한 최소한의 하드웨어 및 가능한 최대 효율성으로 이 어플리케이션을 실행시키는 것이 바람직하다.
요약
복수의 어플리케이션을 동시에 지원할 수 있는 멀티미디어 프로세서를 포함하는 디바이스가 여기 기술된다. 이 어플리케이션들은 그래픽, 오디오, 비디오, 카메라, 게임 등과 같이 다양한 유형의 멀티미디어에 대한 것일 수 있다. 멀티미디어 프로세서는 명령들, 데이터 및 어플리케이션에 대한 상태 정보를 저장하는 구성가능 저장 자원 및 어플리케이션에 대한 다양한 유형의 프로세싱을 수행하는 할당가능 프로세싱 유닛을 포함한다. 구성가능 저장 자원은 어플리케이션에 대한 명령을 저장하는 명령 캐쉬, 어플리케이션에 대한 상태 정보를 저장하는 레지스터 뱅크, 어플리케이션의 스레드 (threads) 에 대한 상태 정보를 저장하는 콘텍스트 레지스터 (context register) 등을 포함할 수 있다. 프로세싱 유닛은 산술 논리 유닛 (ALU) 코어, 기초함수 코어, 로직 코어, 텍스쳐 샘플러, 로드 제어 유닛, 플로우 컨트롤러 등을 포함할 수 있으며, 이들은 후술되는 바와 같이 동작할 수 있다. 멀티미디어 프로세서는 저장 자원의 구성가능 부분을 각 어플리케이션에 대해 할당하고, 어플리케이션에 의해 요구됨에 따라 프로세싱 유닛을 어플리케이션에 동적으로 할당한다. 따라서, 각 어플리케이션은 독립적인 가상 프로세서를 관찰하며, 동시에 실행되는 다른 어플리케이션을 인식할 필요가 없다. 멀티미디어 프로세서는 어플리케이션으로부터 스레드를 비동기식으로 수신하는 입 력 인터페이스 유닛, 결과를 어플리케이션에 비동기식으로 제공하는 출력 인터페이스 유닛 및 필요에 따라 캐쉬 메모리 및/또는 메인 메모리로부터 어플리케이션에 대한 명령 및 데이터를 페치하는 (fetch) 로드 제어 유닛을 더 포함할 수 있다.
멀티미디어 프로세서는 프로세싱 유닛이 어플리케이션에 대해 할당된 시간의 비율에 기초하여 로딩을 결정할 수 있다. 이 멀티미디어 프로세서는 전력 소비를 감소시키기 위해 로딩에 기초하여 클럭 스피드를 조정할 수 있다.
본 개시의 다양한 양태 및 특징은 하기에 더 자세히 기술된다.
도면의 간단한 설명
도 1 은 멀티미디어 시스템의 블록도를 도시한다.
도 2 는 멀티미디어 프로세서의 블록도를 도시한다.
도 3 은 저장 자원의 N 개의 어플리케이션으로의 할당을 도시한다.
도 4 는 프로세싱 유닛의 N 개의 어플리케이션으로의 할당을 도시한다.
도 5 는 N 개의 어플리케이션 각각에 대한 가상 프로세서를 도시한다.
도 6 은 스레드 스케쥴러의 블록도를 도시한다.
도 7 은 가상 메모리 아키텍쳐 (architecture) 를 구비한 저장 유닛의 설계를 도시한다.
도 8 은 도 7 의 저장 유닛에 대한 논리적 룩업 테이블 및 물리적 룩업 테이블을 도시한다.
도 9 는 멀티미디어 어플리케이션을 지원하는 프로세스를 도시한다.
도 10 은 무선 통신 디바이스의 블록도를 도시한다.
발명의 상세한 설명
도 1 은 멀티미디어 시스템 (100) 의 블록도를 도시한다. 시스템 (100) 은 독립형 (stand-alone) 시스템 또는 컴퓨팅 시스템 (예를 들어, 랩탑 컴퓨터), 무선 통신 디바이스 (예를 들어, 셀룰러 폰), 게임 시스템 (예를 들어, 게임 콘솔) 등과 같이 더 큰 시스템의 일부일 수 있다. 시스템 (100) 은 어플리케이션 1 부터 어플리케이션 N 으로 지칭되는 N 개의 멀티미디어 어플리케이션을 지원한다. 일반적으로, N 은 임의의 정수 값일 수 있다. 어플리케이션은 프로그램, 소프트웨어 프로그램 등으로 지칭될 수 있다. 멀티미디어 어플리케이션은 그래픽, 오디오, 비디오, 카메라, 게임 등과 같은 임의의 유형의 멀티미디어에 대한 것일 수 있다. 어플리케이션은 상이한 시간에 시작 및 종료할 수 있으며, 임의의 수의 어플리케이션이 임의의 주어진 시간에 병렬적으로 실행될 수 있다.
시스템 (100) 은 2-차원 (2-D) 및/또는 3-차원 (3-D) 그래픽을 지원할 수 있다. 2-D 또는 3-D 이미지는 다각형 (통상적으로 삼각형) 으로 표현될 수 있다. 각각의 삼각형은 픽쳐 엘리먼트 (픽셀) 로 구성될 수 있다. 각각의 픽셀은 공간 좌표, 컬러 값, 텍스쳐 좌표 등과 같은 다양한 속성을 가질 수 있다. 각 속성은 최대 4 개의 컴포넌트를 가질 수 있다. 예를 들어, 공간 좌표는 세 개의 컴포넌트 x, y 및 z 또는 네 개의 컴포넌트 x, y, z 및 w 로 주어질 수 있으며, 여기서 x 및 y 는 수평 및 수직 좌표이고, z 는 깊이이며, w 는 동차 좌표 (homogeneous coordinate) 이다. 컬러 값은 세 개의 컴포넌트 r, g 및 b 또는 네 개의 컴포넌트 r, g, b 및 a 로 주어질 수 있으며, 여기서 r 은 적색, g 는 녹 색, b 는 청색이며 a 는 픽셀의 투명도를 결정하는 투명 요소이다. 텍스쳐 좌표는 통상 수평 또는 수직 좌표인 u 및 v 로 주어진다. 픽셀은 또한 다른 속성과 연관될 수 있다.
시스템 (100) 은 멀티미디어 프로세서 (120), 텍스쳐 엔진 (180) 및 구성가능 캐쉬 메모리 (190) 를 포함한다. 멀티미디어 프로세서 (120) 는 아래에 서술되는 바와 같이, 멀티미디어 어플리케이션에 대해 다양한 유형의 프로세싱을 수행할 수 있다. 텍스쳐 엔진 (180) 은 텍스쳐 이미지의 컬러로 픽셀의 컬러를 수정하는 것을 수반하는 컴플렉스 그래픽 동작인 텍스쳐 매핑과 같은 그래픽 동작을 수행할 수 있다. 캐쉬 메모리 (190) 는 멀티미디어 프로세서 (120) 및 텍스쳐 엔진 (180) 에 대한 명령 및 데이터를 저장할 수 있는 고속 메모리이다. 시스템 (100) 은 다른 유닛을 포함할 수 있다.
멀티미디어 프로세서 (120) 는 N 개의 어플리케이션에 대해 프로세싱을 수행한다. 멀티미디어 프로세서 (120) 는 각 어플리케이션의 프로세싱을 예를 들어, 자동적이며 어플리케이션에 대해 투명하게 일련의 스레드로 나눌 수 있다. 스레드 (또는 실행의 스레드) 는 하나 이상의 명령의 세트로 수행될 수 있는 특정 태스크 (task) 를 지칭할 수 있다. 스레드는 어플리케이션으로 하여금 상이한 유닛에 의해 동시에 수행되는 복수의 태스크를 가질 수 있게 하며, 상이한 어플리케이션으로하여금 프로세싱 및 저장 자원을 공유하게 할 수 있다.
도 1 의 설계에서, 멀티미디어 프로세서 (120) 는 입력 인터페이스 유닛 (122), 출력 인터페이스 유닛 (124), 스레드 스케쥴러 (130), 플로우 컨트롤러 (132), 마스터 (master) 컨트롤러 (134), 할당가능 프로세싱 유닛 (140), 구성가능 저장 자원 (150) 및 로드 제어 유닛 (170) 을 포함한다. 입력 인터페이스 유닛 (122) 은 N 개의 어플리케이션으로부터 스레드를 수신하고 이 스레드를 스레드 스케줄러 (130) 로 제공한다. 스레드 스케줄러 (130) 는 아래에 서술되는 바와 같이, 스레드의 실행을 스케줄링하고 관리하기 위해 다양한 기능을 수행한다. 플로우 컨트롤러 (132) 는 어플리케이션/프로그램 플로우 제어를 돕는다. 마스터 컨트롤러 (134) 는 프로세싱 모드, 데이터 포맷과 같은 정보를 수신하고, 그에 알맞게 멀티미디어 프로세서 (120) 내의 다양한 유닛의 동작을 구성한다. 예를 들어, 마스터 컨트롤러 (134) 는 명령을 디코딩하고 어플리케이션에 대한 상태를 셋업하고 상태 업데이트 시퀀스를 제어한다.
도 1 의 설계에서, 할당가능 프로세싱 유닛 (140) 은 ALU 코어 (142), 기초함수 코어 (144), 로직 코어 (146) 및 텍스쳐 샘플러 (148) 를 포함한다. 코어는 일반적으로 집적회로 내의 프로세싱 유닛을 지칭한다. 용어 "코어", "엔진", "머신", "프로세서", "프로세싱 유닛", "하드웨어 유닛" 등은 교환가능하게 사용될 수 있다. 일반적으로, 할당 가능 프로세싱 유닛 (140) 은 임의의 수의 프로세싱 유닛 및 임의 유형의 프로세싱 유닛을 포함할 수 있다. 각 프로세싱 유닛은 다른 프로세싱 유닛에 독립하여 동작할 수 있다.
ALU 코어 (142) 는 덧셈, 뺄셈, 곱셈, 승산 및 누산, 내적 (dot product), 절대값구하기, 부정, 비교, 새츄레이션 (saturation) 등과 같은 산술 연산을 수행할 수 있다. ALU 코어 (142) 는 하나 이상의 스칼라 ALU 및/또는 하나 이상의 벡터 ALU 를 포함할 수 있다. 스칼라 ALU 는 한번에 하나의 콤포넌트에 대해 연산할 수 있다. 벡터 ALU 는 한번에 복수의 (예를 들어, 네 개) 컴포넌트에 대해 연산할 수 있다. 기초함수 코어 (144) 는 사인함수, 코사인함수, 역수함수, 로그함수, 지수함수, 제곱근 함수, 역수제곱근함수와 같은 기초 초월 함수를 계산할 수 있다. 기초함수 코어 (144) 는 간단한 명령을 사용하여 기초함수의 다항식 근사법을 수행하는데 요구되는 시간보다 훨씬 적은 시간으로 기초함수를 계산함으로써 성능을 향상시킬 수 있다. 기초함수 코어 (144) 는 하나 이상의 기초함수 유닛을 포함할 수 있다. 각각의 기초 함수 유닛은 한번에 한 개의 컴포넌트에 대해 기초함수를 계산할 수 있다.
로직 코어 (146) 는 논리 연산 (예를 들어, AND, OR, XOR 등), 비트 단위 연산 (예를 들어, 좌측 및 우측 쉬프트 (shift)), 정수 연산, 비교, 데이터 버퍼 관리 연산 (예를 들어, 푸쉬 (push), 팝(pop) 등) 및/또는 다른 연산을 수행할 수 있다. 로직 코어 (146) 는 포맷 변환, 예를 들어 정수로부터 부동소수점으로 또는 역으로 변환을 또한 수행할 수 있다. 텍스쳐 샘플러 (148) 는 텍스쳐 엔진 (180) 을 위한 사전-프로세싱을 수행할 수 있다. 예를 들어, 텍스쳐 샘플러 (148) 는 텍스쳐 좌표를 읽고, 코드 및/또는 다른 정보를 부착하고, 그 결과를 텍스쳐 엔진 (180) 으로 출력한다. 텍스쳐 샘플러 (148) 는 또한 텍스쳐 엔진 (180) 으로 명령을 제공하고 텍스쳐 엔진으로부터 결과를 수신한다.
도 1 의 설계에서, 구성가능 저장 자원 (150) 은 콘텍스트 레지스터 (152), 명령 캐쉬 (154), 레지스터 뱅크 (156) 및 상수 버퍼 (158) 를 포함한다. 일 반적으로, 구성가능 저장 자원 (150) 은 임의의 수의 저장 유닛 및 임의 유형의 저장 유닛을 포함할 수 있다. 콘텍스트 레지스터 (152) 는 N 개의 어플리케이션으로부터의 스레드에 대한 상태 정보 또는 콘텍스트를 저장한다. 명령 캐쉬 (154) 는 스레드에 대한 명령들을 저장한다. 이 명령들은 각 스레드에 대해 수행하는 특정 연산을 지칭한다. 각 연산은 산술 연산, 기초 함수, 논리 연산, 메모리 액세스 연산 등일 수 있다. 명령 캐쉬 (154) 는 필요에 따라 로드 제어 유닛 (170) 을 통해, 캐쉬 메모리 (190) 및/또는 메인 메모리 (도 1 에 도시되지 않음) 로부터 명령을 로딩할 수 있다. 레지스터 뱅크 (156) 는 프로세싱 유닛 (140) 으로부터의 중간 및 최종 결과뿐 아니라 어플리케이션에 대한 데이터를 저장한다. 상수 버퍼 (158) 는 프로세싱 유닛 (140) (예를 들어, ALU 코어 (142) 및 로직 코어 (146)) 에 의해 사용되는 상수 값 (예를 들어, 스케일 팩터, 필터 가중치 등) 을 저장한다.
로드 제어 유닛 (170) 은 N 개의 어플리케이션에 대한 명령, 데이터 및 상수의 로딩을 제어할 수 있다. 로드 제어 유닛 (170) 은 캐쉬 메모리 (190) 와 인터페이싱하고 캐쉬 메모리 (190) 로부터의 명령, 데이터 및 상수를 명령 캐쉬 (154), 레지스터 뱅크 (156) 및 상수 버퍼 (158) 에 로드한다. 로드 제어 유닛 (170) 은 또한 레지스터 뱅크 (156) 의 데이터 및 결과를 캐쉬 메모리 (190) 에 기록한다. 출력 인터페이스 유닛 (124) 은 레지스터 뱅크 (156) 로부터 실행된 스레드에 대한 최종 결과를 수신하고 그 결과를 어플리케이션에 제공한다. 입력 인터페이스 유닛 (122) 은 N 개의 어플리케이션과 연관된 외부 유닛 (예를 들 어, 카메라, 디스플레이 유닛 등) 과의 비동기식 인터페이스를 제공할 수 있다.
도 1 은 멀티미디어 프로세서 (120) 의 예시적인 설계를 도시한다. 일반적으로, 멀티미디어 프로세서 (120) 는 임의의 세트의 할당가능 프로세싱 유닛 및 임의의 세트의 구성가능 저장 자원을 포함할 수 있다. 구성가능 저장 자원은 어플리케이션에 대한 명령, 데이터, 상태 정보 등을 저장할 수 있다. 프로세싱 유닛은 어플리케이션에 대한 임의의 유형의 프로세싱을 수행할 수 있다. 플로우 컨트롤러 (132) 및 로드 제어 유닛 (170) 은 비록 이들이 유닛 (140) 내에 포함되지 않더라도 할당가능 프로세싱 유닛으로 고려될 수 있다. 멀티미디어 프로세서 (120) 는 도 1 에 도시되지 않은 다른 프로세싱, 저장 및 제어 유닛을 포함할 수 있다. 멀티미디어 프로세서 (120) 는 저장 자원의 구성가능 부분을 각 어플리케이션에 할당하고 프로세싱 유닛을 어플리케이션의 요구에 따라 어플리케이션에 동적으로 할당한다.
멀티미디어 프로세서 (120) 는 OpenGL (Open Graphics Library), Direct 3D, OpenVG (Open Vector Graphics) 등과 같은 하나 이상의 그래픽 응용 프로그래밍 인터페이스 (API:Application Programming Interface) 를 구현할 수 있다. 그러한 다양한 그래픽 API 는 당해 기술분야에서 공지되어 있다. 멀티미디어 프로세서 (120) 는 또한 2-D 그래픽 또는 3-D 그래픽, 또는 양자 모두를 지원할 수 있다.
도 2 는 도 1 의 멀티미디어 프로세서 (120) 의 설계의 블록도를 도시한다. 이 설계에서, 스레드 스케줄러 (130) 는 할당가능 프로세싱 유닛 (140) 내의 ALU 코어 (142), 기초 함수 코어 (144), 로직 코어 (146) 및 텍스쳐 샘플러 (148)와 인터페이싱한다. 스레드 스케줄러 (130) 는 또한 입력 인터페이스 유닛 (122), 플로우 컨트롤러 (132), 마스터 컨트롤러 (134), 콘텍스트 레지스터 (152), 명령 캐쉬 (154) 및 로드 제어 유닛 (170) 과 인터페이싱한다. 레지스터 뱅크 (156) 는 할당가능 프로세싱 유닛 (140) 내의 ALU 코어 (142), 기초 함수 코어 (144), 로직 코어 (146) 및 텍스쳐 샘플러 (148), 로드 제어 유닛 (170) 및 출력 인터페이스 유닛 (124) 과 인터페이싱한다. 로드 제어 유닛 (170) 은 또한 명령 캐쉬 (154), 상수 버퍼 (158) 및 캐쉬 메모리 (190) 와 인터페이싱한다. 멀티미디어 프로세서 (120) 내의 다양한 유닛은 또한 다른 방식으로 서로 인터페이싱할 수 있다.
메인 메모리 (192) 는 시스템 (100) 의 일부이거나 시스템 (100) 의 외부에 존재할 수 있다. 메인 메모리 (192) 는 멀티미디어 프로세서 (120) 에서 멀리 위치한 (예를 들어, 오프-칩) 크고, 느린 메모리이다. 메인 메모리 (192) 는 멀티미디어 프로세서 (120) 에 의해 실행되고 있는 N 개의 어플리케이션에 대한 모든 명령 및 데이터를 저장할 수 있다. 메모리 (192) 내의 명령 및 데이터는 필요에 따라 캐쉬 메모리 (190) 에 로딩될 수 있다.
멀티미디어 프로세서 (120) 는 실행되고 있는 각 어플리케이션에 대해 독립적인 가상 프로세서로 보이도록 설계되고 동작될 수 있다. 각 어플리케이션은 명령, 데이터, 상수 및 상태 정보를 위한 충분한 저장 자원을 할당받을 수 있다. 각 어플리케이션은 그 자신 개개의 상태 (예를 들어, 프로그램 카운터, 데이터 포맷 등) 를 가지며, 이 상태는 멀티미디어 프로세서 (120) 에 의해 유지될 수 있다. 각 어플리케이션은 그 어플리케이션에 대해 실행될 명령에 기초하여 프로세싱 유닛을 할당받을 수 있다. N 개의 어플리케이션은 서로 방해를 하지 않고 다른 어플리케이션에 대해 인지할 필요 없이 실행될 수 있다. 멀티미디어 프로세서 (120) 는 어플리케이션 요구 및/또는 다른 요소, 예를 들어 우선순위에 기초하여 각 어플리케이션에 대한 성능 목표를 조정할 수 있다.
도 3 은 저장 자원의 N개의 어플리케이션들로의 예시적인 할당을 도시하고 있다. 각 어플리케이션은 콘텍스트 레지스터 (152) 의 일부, 명령 캐쉬 (154) 의 일부, 레지스터 뱅크 (156) 의 일부 및 상수 버퍼 (158) 의 일부를 할당받을 수 있다. 각각의 저장 유닛에 대해, 소정의 어플리케이션에 할당된 부분은 그 어플리케이션의 저장 요건에 따라 영일 수도 있고 또는 영이 아닐 수도 있다.
콘텍스트 레지스터 (152) 는 아래에서 서술되는 바와 같이, N 개의 어플리케이션으로부터의 스레드에 동적으로 할당될 수 있으며 스레드에 대한 다양한 유형의 정보를 저장할 수 있다. 콘텍스트 레지스터 (152) 는 스레드가 수용되고, 실행되고, 완료됨에 따라 업데이트될 수 있다. 명령 캐쉬 (154) 및 레지스터 뱅크 (156) 는 실행의 시작시 예를 들어 어플리케이션의 요건에 기초하여 각 어플리케이션에 대해 할당될 수 있다. 각 어플리케이션에 대해, 명령 캐쉬 (154) 및/또는 레지스터 뱅크 (156) 에 대해 할당된 부분은 어플리케이션의 실행 중에 그것의 요구 및 다른 요소에 기초하여 변화할 수 있다. 상수 버퍼 (158) 는 임의의 어플리케이션에 대해 사용될 수 있는 상수를 저장할 수 있다. 소정의 어플리케이션 에 대한 상수는 요구될 때 상수 버퍼 (158) 로 로딩될 수 있으며, 그 후, 모든 어플리케이션에 의해 사용될 수 있다.
저장 유닛은 하기에 서술되는 바와 같이 저장 자원의 어플리케이션으로의 유연한 할당을 지원하도록 설계될 수 있다. 저장 유닛은 또한 하기에 서술되는 바와 같이 어플리케이션에 의한 메모리 액세스를 간략화하도록 설계될 수 있다.
도 4 는 프로세싱 유닛의 N 개의 어플리케이션으로의 예시적인 할당을 도시한다. 분리된 타임라인은 ALU 코어 (142), 기초 함수 코어 (144), 로직 코어 (146), 텍스쳐 샘플러 (148), 플로우 컨트롤러 (132) 및 로드 제어 유닛 (170) 과 같은 프로세싱 유닛 각각에 대해 유지될 수 있다. 각 프로세싱 유닛에 대한 타임라인은 타임 슬롯으로 구획될 수 있다. 타임 슬롯은 하나의 어플리케이션으로 할당되는 최소 시간 유닛이며 하나 이상의 클럭 싸이클에 대응할 수 있다. 프로세싱 유닛은 동일한 지속기간 또는 상이한 지속기간의 타임 슬롯을 가질 수 있다.
ALU 코어 (142) 에 대한 타임 슬롯은 임의의 어플리케이션에 대해 할당될 수 있다. 도 4 의 예에서, ALU 코어 (142) 는 타임 슬롯 t 및 타임 슬롯 t+1 에서 어플리케이션 1 (App 1) 로, 타임 슬롯 t+2 에서 어플리케이션 3 으로, 타임 슬롯 t+3 에서 어플리케이션 N, 등으로 할당될 수 있다. 이와 유사하게, 기초 함수 코어 (144), 로직 코어 (146), 텍스쳐 샘플러 (148), 플로우 컨트롤러 (132) 및 로드 제어 유닛 (170) 에 대한 타임 슬롯은 임의의 어플리케이션으로 할당될 수 있다. 멀티미디어 프로세서 (120) 는 이들 어플리케이션의 프로세싱 요건에 기초 하여 요구가 있는 즉시 프로세싱 유닛을 어플리케이션에 동적으로 할당할 수 있다.
도 5 는 N 개의 어플리케이션 각각에 대한 가상 프로세서를 도시한다. 각 어플리케이션은 그 어플리케이션에 의해 사용되는 프로세싱 유닛 모두를 가지는 가상 프로세서를 관찰한다. 각 어플리케이션은 그 어플리케이션의 프로세싱 요구에 따라 프로세싱 유닛을 할당받을 수 있고, 할당된 프로세싱 유닛은 그 어플리케이션에 대한 타임라인 상에 도시될 수 있다. 도 5 의 예에서, 어플리케이션 1 은 타임 슬롯 t 및 타임 슬롯 t+1 에서 ALU 코어 (142) 를, 그 후 타임 슬롯 t+2 에서 로직 코어 (144) 를, 그 후 타임 슬롯 t+3 에서 로드 제어 유닛 (170) 을, 그 후 타임 슬롯 t+4 에서 ALU 코어 (142) 를, 그 후 타임 슬롯 t+5 에서 로드 제어 유닛 (170) 을, 그 후 타임 슬롯 t+6 에서 로직 코어 (144) 등을 할당받을 수 있다. 어플리케이션 1 은 도 5 에 도시된 타임 슬룻동안에 기초 함수 코어 (144), 텍스쳐 샘플러 (148) 및 플로우 컨트롤러 (132)를 사용하지 않으며 할당받지 않는다. 어플리케이션 2 내지 어플리케이션 N 은 상이한 시퀀스로 프로세싱 유닛을 할당받는다.
도 5 에서 도시된 바와 같이, 각 어플리케이션은 멀티미디어 프로세서 (120) 내의 적절한 프로세싱 유닛을 할당받을 수 있다. 각 어플리케이션으로 할당되는 특정 프로세싱 유닛은 프로세싱 요건 및 시간에 따라 변화할 수 있다. 각 어플리케이션은 다른 어플리케이션이나 다른 어플리케이션으로의 프로세싱 유닛의 할당을 인식할 필요가 없다.
멀티미디어 프로세서 (120) 는 명령의 병렬 실행을 달성할 수 있고 전체 효 율을 향상시키기 위해 멀티-스레딩 (Multi-threading) 을 지원할 수 있다. 멀티-스레딩은 상이한 프로세싱 유닛에 의한 병렬적인 멀티 스레드의 실행을 의미한다. 스레드 스케줄러 (130) 는 N 개의 어플리케이션으로부터 스레드를 수용하고 어떤 스레드가 실행할 준비가 되어 있는지 결정하고, 준비된 스레드를 상이한 프로세싱 유닛으로 디스패치할 수 있다. 스레드 스케줄러 (130) 는 스레드의 실행 및 프로세싱 유닛의 사용을 관리할 수 있다.
도 6 은 도 1 및 도 2 의 스레드 스케줄러 (130) 의 설계의 블록도를 도시한다. 일 설계에서, 스레드 스케줄러 (130) 는 중앙 스레드 스케줄러 (610), 고-레벨 디코더 (612), 자원 사용 모니터 유닛 (614), 활성 큐 (620) 및 슬립 큐 (sleep queue) (622) 를 포함한다. 콘텍스트 레지스터 (152) 는 T 개의 스레드에 대한 T 개의 콘텍스트 레지스터 (630a 내지 630t) 를 포함할 수 있으며, 여기서 T 는 임의의 값일 수 있다.
중앙 스레드 스케줄러 (610) 는 프로세싱 유닛 (132, 142, 144, 146, 148 및 170) 및 콘텍스트 레지스터 (630a 내지 630t) 와 요청 (Req) 및 승인 인터페이스를 통해 통신할 수 있다. 스케줄러 (610) 는 요청을 명령 캐쉬 (154) 에 이슈할 수 있으며, 이에 응답하여 힛/미스 (hit/miss) 지시를 수신할 수 있다. 일반적으로, 이러한 유닛들 사이의 통신은 제어 신호, 인터럽트, 메시지, 레지스터등과 같은 다양한 메커니즘으로 달성될 수 있다.
중앙 스레드 스케줄러 (610) 는 스레드를 스케줄하기 위해 다양한 기능을 수행할 수 있다. 중앙 스레드 스케줄러 (610) 는 N 개의 어플리케이션으로부터 새로운 스레드를 수용할 것인지 여부를 결정하고, 실행을 위한 스레드를 디스패치하고, 완료된 스레드를 릴리즈/제거 할 수 있다. 각 스레드에 대해, 중앙 스레드 스케줄러 (610) 는 그 스레드에 의해 요구되는 자원 (예를 들어, 명령, 프로세싱 유닛, 레지스터 뱅크 등) 이 사용가능한지 여부를 결정하고, 요구되는 자원이 사용가능한 경우, 스레드를 활성화시키고, 그것을 활성 큐 (620) 에 배치하며, 요구되는 자원이 사용가능하지 않은 경우, 그 스레드를 슬립 큐 (622) 에 배치한다. 활성 큐 (620) 는 실행 준비가 된 스레드를 저장하고 슬립 큐 (622) 는 실행 준비가 안 된 스레드를 저장한다.
중앙 스레드 스케줄러 (610) 는 또한 스레드의 실행을 관리할 수 있다. 각 스케줄 간격 (예를 들어, 각 타임 슬롯) 에서, 중앙 스레드 스케줄러 (610) 는 평가 및 가능한 디스패치를 위해 활성 큐 (620) 에서 많은 수의 후보 스레드를 선택할 수 있다. 중앙 스레드 스케줄러 (610) 는 후보 스레드를 사용하기 위해 프로세싱 유닛을 결정할 수 있고, 저장 유닛의 read/write 상충에 대해 체크하고, 실행을 위해 상이한 스레드를 상이한 프로세싱 유닛으로 디스패치한다. 멀티미디어 프로세서 (120) 는 M 개의 스레드의 실행을 동시에 지원할 수 있으며, 여기서 M 은 임의의 적당한 값 (예를 들어, M=12) 일 수 있다. 일반적으로, M 은 저장 자원의 사이즈 (예를 들어, 명령 캐쉬 (154) 및 레지스터 뱅크 (156)), 로드 동작에 대한 레이턴시 (latency) 또는 딜레이 (delay), 프로세싱 유닛의 파이프라인, 및/또는 다른 요소들에 기초하여 프로세싱 유닛이 최대한 사용될 수 있도록 선택될 수 있다.
중앙 스레드 스케줄러 (610) 는 적절하게 스레드의 스테이터스 (status) 및상태를 업데이트할 수 있다. 중앙 스레드 스케줄러 (610) 는 (a) 스레드에 대한 다음 명령이 명령 캐쉬 (154) 에서 발견되지 않는 경우, (b) 다음 명령이 이전의 명령으로부터의 결과를 위해 대기하고 있는 경우 또는 (c) 몇몇 다른 슬립 조건이 만족되는 경우에 스레드를 슬립 큐 (622) 에 배치할 수 있다. 중앙 스레드 스케줄러 (610) 는 슬립 조건이 더 이상 참이지 않은 경우 슬립 큐 (622) 로부터 활성 큐 (620) 로 스레드를 이동시킬 수 있다.
중앙 스레드 스케줄러 (610) 는 각 스레드에 대해 프로그램 카운터를 유지할 수 있고 명령이 실행되거나 프로그램 플로우가 변경됨에 따라 프로그램 카운터를 업데이트시킬 수 있다. 스케줄러 (610) 는 스레드에 대한 프로그램 플로우를 제어하기 위해 플로우 컨트롤러 (132) 로부터 도움을 요청할 수 있다.
플로우 컨트롤러 (132) 는 if/else 명령문, 루프, 서브루틴 콜, 브랜치, 스위치 명령, 픽셀 킬 및/또는 다른 플로우 변경 명령들을 다룰 수 있다. 플로우 컨트롤러 (132) 는 각각의 명령에 대한 하나 이상의 조건을 평가하고, 조건이 만족하는 경우 일 방법으로 프로그램 카운터를 변경하고, 조건이 만족하지 않는 경우 다른 방법으로 프로그램 카운터를 변경할 수 있다. 플로우 컨트롤러 (132) 는 또한 동적 프로그램 플로우와 연관된 다른 기능을 수행할 수 있다. 중앙 스레드 스케줄러 (610) 는 플로우 컨트롤러 (132) 로부터의 결과에 기초하여 프로그램 카운터를 업데이트시킬 수 있다.
중앙 스레드 스케줄러 (610) 는 또한 콘텍스트 레지스터 (152) 를 관리하고 스레드가 수용되고 실행되고 완료됨에 따라 이 레지스터를 업데이트할 수 있다. 콘텍스트 레지스터 (152) 는 스레드에 대한 다양한 유형의 정보를 저장할 수 있다. 예를 들어, 하나의 스레드에 대한 콘텍스트 레지스터 (630) 는 (1) 그 스레드가 속하는 어플리케이션에 대한 어플리케이션/프로그램 식별자 (ID),(2) 스레드에 대한 현재 명령을 가리키는 프로그램 카운터, (3) 스레드에 대한 유효 픽셀 및 비유효 픽셀을 가리키는 커버리지 마스크, (4) 플로우 변경 명령의 경우에 어떤 픽셀에 대해 연산해야할 지를 나타내는 활성 플래그, (5) 비활성인 경우 픽셀이 재-활성되는 때를 나타내는 재개 명령 포인터, (6) 동적 플로우 제어에 대한 리턴 명령 포인터를 저장하는 스택, (7) 상대 어드레싱에 대한 어드레스 레지스터, (8) 조건 계산 결과를 저장하는 술어 레지스터, (9) 로드 요청 및 데이터 백 조건을 트랙킹 (track) 하는 로드 참조 카운터 및/또는 (10) 다른 정보를 저장할 수 있다. 콘텍스트 레지스터 (152) 는 또한 적거나 많거나 상이한 정보를 저장할 수 있다.
멀티미디어 프로세서 (120) 는 다양한 멀티미디어 어플리케이션에 대한 명령의 총괄적인 세트를 지원할 수 있다. 이 명령 세트는 산술, 기초 함수, 논리, 비트단위, 플로우 제어 및 다른 명령을 포함할 수 있다.
명령의 두 레벨의 디코딩은 성능을 향상시키도록 수행될 수 있다. 고-레벨 디코더 (612) 는 명령 유형, 연산자 유형, 소스 및 목적지 식별자 (IDs) 및/또는 스케줄링에 사용되는 다른 정보를 결정하기 위해 명령의 고-레벨 디코딩을 수행할 수 있다. 각 프로세싱 유닛은 그 프로세싱 유닛을 위한 명령의 저-레벨 디코딩을 수행하는 별개의 명령 디코더를 포함할 수 있다. 예를 들어, ALU 코어 (142) 를 위한 명령 디코더는 오직 ALU-관련 명령만을 다룰 수 있으며, 기초 함수 코어 (144) 를 위한 명령 디코더는 기초 함수 등을 위한 명령만을 다룰 수 있다. 두 레벨의 디코딩은 중앙 스레드 스케줄러 (610) 뿐 아니라 프로세싱 유닛을 위한 명령 디코더의 설계를 간소화시킬 수 있다.
자원 사용 모니터 유닛 (614) 은 예를 들어 각 프로세싱 유닛이 할당받은 시간의 비율을 감시함으로써 프로세싱 유닛의 사용을 모니터한다. 모니터 유닛 (614) 은 원하는 성능을 제공하면서 배터리 전력을 보존하기 위해 프로세싱 유닛의 동작을 동적으로 조정할 수 있다. 예를 들어, 모니터 유닛 (614) 은 전력 소비를 줄이기 위해 멀티미디어 프로세서의 로딩에 기초하여 멀티미디어 프로세서 (120) 에 대한 클럭 스피드를 조정할 수 있다. 모니터 유닛 (614) 은 또한 프로세싱 유닛의 로딩 또는 사용 비율에 기초하여 각 프로세싱 유닛에 대한 클럭 스피드를 조정할 수 있다. 모니터 유닛 (614) 은 풀 (full) 로딩에 대한 최고의 클럭 스피드를 선택할 수 있으며, 점진적으로 적은 로딩에 대해서는 점진적으로 낮은 클럭 스피드를 선택할 수 있다. 모니터 유닛 (614) 은 어떠한 어플리케이션으로도 할당되지 않은 임의의 프로세싱 유닛을 디스에이블/파워 다운할 수 있으며, 프로세싱 유닛이 할당되는 경우 그것을 인에이블/파워 업할 수 있다.
각 스레드는 패킷 기반일 수 있으며, 소정의 사이즈까지의 데이터의 유닛에서 동작할 수 있다. 데이터 유닛 사이즈는 프로세싱 및 저장 유닛의 설계, 프로세싱 되고 있는 데이터의 특성 등에 기초하여 선택될 수 있다. 일 설계에서, 각 스레드는 이미지 내의 최대 네 개의 픽셀 또는 최대 네 개의 정점 (vertices) 에서 동작할 수 있다. 레지스터 뱅크 (156) 는 (a) 레지스터 뱅크 당 하나의 컴포넌트 씩, 픽셀에 대한 각 속성의 네개의 컴포넌트, 또는 (b) 레지스터 뱅크당 한 개의 픽셀씩 픽셀에 대한 속성의 컴포넌트를 저장할 수 있다. ALU 코어 (142) 는 동시에 최대 네 개의 컴포넌트에 대해 연산할 수 있는 네 개의 스칼라 ALU 또는 네 개의 벡터 ALU 를 포함할 수 있다.
저장 유닛 (예를 들어, 명령 캐쉬 (154) 또는 레지스터 뱅크 (156)) 은 저장 자원의 어플리케이션으로의 효율적인 할당 및 어플리케이션에 의한 할당받은 저장 자원으로의 쉬운 액세스를 가능하게 하는 가상 메모리 아키텍쳐로써 구현될 수 있다. 가상 메모리 아키텍쳐는 가상 메모리 및 물리적 메모리 (physical memory) 를사용할 수 있다. 어플리케이션은 가상 메모리의 섹션을 할당받을 수 있으며, 가상 어드레스 공간을 통해 메모리 액세스를 수행할 수 있다. 가상 메모리의 상이한 섹션은 명령 및/또는 데이터를 저장하는 물리적 메모리의 상이한 섹션으로 매핑될 수 있다.
도 7 은 가상 메모리 아키텍쳐를 구비한 저장 유닛 (700) 의 설계를 도시한다. 저장 유닛 (700) 은 명령 캐쉬 (154), 레지스터 뱅크 (156) 등에 사용될 수 있다. 일 설계에서, 저장 유닛 (700) 은 어플리케이션에 대해 가상 메모리 (710) 로서 보인다. 가상 메모리 (710) 는 복수 개 (S 개) 의 로지컬 타일 또는 섹션으로 파티션될 수 있으며, 이들은 로지컬 타일 1 에서 로지컬 타일 S 로 지칭된다. 일반적으로, S 는 N 이상의 임의의 정수일 수 있다. S 개의 타일은 동일한 사이즈 또는 상이한 사이즈를 가질 수 있다. 각 어플리케이션은 그 어 플리케이션의 메모리 사용 및 사용가능한 타일에 기초하여 임의의 수의 연속적인 로지컬 타일을 할당받을 수 있다. 예를 들어, 도 7 에서 도시된 바와 같이 어플리케이션 1 은 로지컬 타일 1 및 2 를 할당받으며, 어플리케이션 2 는 로지컬 타일 3 내지 6 등을 할당받는 등이다.
저장 유닛 (700) 은 어플리케이션에 대한 명령 및/또는 데이터를 저장하는 물리적 메모리 (720) 를 구현할 수 있다. 물리적 메모리 (720) 는 1 에서 S 까지의 S 개의 물리적 타일을 포함한다. 가상 메모리 (710) 의 각 로지컬 타일은 물리적 메모리 (720) 의 하나의 타일로 매핑될 수 있다. 몇 개의 로지컬 타일의 예시적인 매핑이 도 7 에 도시되어 있다. 이 예에서, 물리적 타일 1 은 로지컬 타일 2 에 대한 명령 및/또는 데이터를 저장하며, 물리적 타일 2 는 로지컬 타일 S-1 에 대한 명령 및/또는 데이터를 저장하는 식이다.
로지컬 타일 및 물리적 타일의 사용은 타일의 어플리케이션에 대한 할당 및 타일의 관리를 간소화시킬 수 있다. 어플리케이션은 명령 및 데이터를 위해 저장 자원의 일정 양을 요청할 수 있다. 멀티미디어 프로세서 (120) 는 명령 캐쉬 (154) 내의 하나 이상의 타일 및 레지스터 뱅크 (156) 내의 하나 이상의 타일을 어플리케이션으로 할당할 수 있다. 어플리케이션은 필요에 따라 부가적이거나 더 적거나 또는 상이한 로지컬 타일을 할당받을 수 있다.
도 8 은 도 7 의 저장 유닛 (700) 에 대한 로지컬 타일 룩-업 테이블 (ULT) (810) 및 물리적 어드레스 룩-업 테이블 (820) 의 설계를 도시한다. 이 설계에서, 로지컬 타일 룩-업 테이블 (810) 은 각 어플리케이션 당 하나의 엔트리씩, N 개의 어플리케이션에 대한 N 개의 엔트리를 포함한다. N 개의 엔트리는 어플리케이션 ID 에 의해 인덱싱될 수 있다. 각 어플리케이션에 대한 엔트리는 어플리케이션으로 할당된 첫번째 로지컬 타일에 대한 필드 및 어플리케이션으로 할당된 로지컬 타일의 수에 대한 또 다른 필드를 포함한다. 도 8 에서 도시된 예시에서, 어플리케이션 1 은 로지컬 타일 1 로 시작하여 두 개의 로지컬 타일을 할당받고, 어플리케이션 2 는 로지컬 타일 3 로 시작하여 네 개의 로지컬 타일을 할당받고, 어플리케이션 3 은 로지컬 타일 7 로 시작하여 여덟 개의 로지컬 타일을 할당받는다. 각 어플리케이션은 메모리 액세스를 위한 어드레스의 생성을 간소화하기 위해 연속적인 로지컬 타일을 할당받을 수 있다. 그러나, 어플리케이션은 로지컬 타일을 임의의 순서로 할당받을 수 있으며, 예를 들어, 로지컬 타일 1 은 임의의 어플리케이션으로 할당될 수 있다.
도 8 에서 도시된 일 설계에서, 물리적 어드레스 룩-업 테이블 (820) 은 각 로지컬 타일 당 하나의 엔트리씩, S 개의 로지컬 타일에 대한 S 개의 엔트리를 포함한다. 테이블 (820) 의 S 개의 엔트리는 로지컬 타일 어드레스에 의해 인덱싱될 수 있다. 각 로지컬 타일에 대한 엔트리는 그 로지컬 타일이 매핑되는 물리적 타일을 나타낸다. 도 7 및 도 8 에서 도시된 일 예에서, 로지컬 타일 1 은 물리적 타일 4 로 매핑되며, 로지컬 타일 2 는 물리적 타일 1 로 매핑되며, 로지컬 타일 3 은 물리적 타일 i 로 매핑되며, 로지컬 타일 4 는 물리적 타일 S-2 로 매핑된다. 룩-업 테이블 (810 및 820) 은 어플리케이션이 부가적이거나, 적거나, 및/또는 상이한 로지컬 타일을 할당받는 경우마다 업데이트될 수 있다. 어 플리케이션은 물리적 타일 사이에서 명령 또는 데이터를 실제적으로 전송할 필요없이, 룩-업 테이블을 간단하게 업데이트함으로써 저장 자원의 상이한 양을 할당받을 수 있다.
저장 유닛은 따라서 가상 메모리 및 물리적 메모리와 연관될 수 있다. 각 어플리케이션은 가상 메모리의 구성가능 부분을 할당받을 수 있다. 적어도 하나의 테이블이 어플리케이션으로 할당된 가상 메모리의 부분을 물리적 메모리의 대응하는 부분으로 매핑하는데 사용될 수 있다.
각 어플리케이션은 통상적으로 각 어플리케이션에 대해 명령 및 데이터를 각각 저장하기 위해 명령 캐쉬 (154) 및 레지스터 뱅크 (156) 내의 저장 자원의 제한된 양을 할당받는다. 캐쉬 메모리 (190) 는 어플리케이션에 대한 부가적인 명령 및 데이터를 저장할 수 있다. 어플리케이션에 대한 명령이 명령 캐쉬 (154) 내에서 사용 불가능할 때마다, 캐쉬 미스 (cache miss) 가 스레드 스케줄러 (130) 로 리턴될 수 있으며, 스레드 스케줄러는 로드 제어 유닛 (170) 에 대해 명령 요청을 이슈할 수 있다. 유사하게, 어플리케이션에 대한 데이터가 레지스터 뱅크 (156) 내에서 사용 불가능하거나 또는 저장 유닛이 데이터로 오버플로우 (overflow) 될 때마다 데이터 요청이 로드 제어 유닛 (170) 으로 이슈될 수 있다.
로드 제어 유닛 (170) 은 스레드 스케줄러 (130) 로부터 명령 요청 및 다른 유닛으로부터 데이터 요청을 수신할 수 있다. 로드 제어 유닛 (170) 은 (a) 캐쉬 메모리 (190) 또는 메인 메모리 (192) 로부터 원하는 명령 및/또는 데이터를 로드 및/또는 (b) 데이터를 캐쉬 메모리 (190) 또는 메인 메모리 (192) 에 기록하기 위해 이러한 다양한 요청을 중재하고 메모리 요청을 생성할 수 있다.
멀티미디어 프로세서 (120) 내의 저장 유닛은 어플리케이션을 위해 현재 사용되는 명령 및 데이터의 작은 부분을 저장할 수 있다. 캐쉬 메모리 (190) 는 어플리케이션을 위해 사용될 수 있는 명령 및 데이터의 더 큰 부분을 저장할 수 있다. 멀티미디어 프로세서 (120) 는 캐쉬 메모리 (190) 를 통해 제한되지 않는 명령 및 데이터 액세스를 지원할 수 있다. 이러한 능력은 멀티미디어 프로세서 (120) 로 하여금 임의의 사이즈의 어플리케이션을 지원할 수 있도록 한다. 멀티미디어 프로세서 (120) 는 또한 캐쉬 메모리 (190) 와 메인 메모리 (192) 사이의 일반적인 메모리 로드 및 텍스쳐 로드를 지원할 수 있다.
도 9 는 멀티미디어 어플리케이션을 지원하는 프로세스 (900) 를 도시한다. 복수의 어플리케이션이 현재 예를 들어 멀티미디어 프로세서에 의해 지원되고 있다(블록 912). 저장 자원의 구성가능 부분은 어플리케이션에 대한 명령, 데이터 및 상태 정보를 저장하기 위해 각 어플리케이션으로 할당된다 (블록 914). 블록 914 의 경우, 각 어플리케이션은 어플리케이션에 대한 명령을 저장하기 위해 명령 캐쉬의 구성가능 부분을, 어플리케이션에 대한 데이터를 저장하기 위해 레지스터 뱅크의 구성가능 부분을, 어플리케이션의 상태 정보를 저장하기 위해 하나 이상의 콘텍스트 레지스터를 할당받는 등일 수 있다. 프로세싱 유닛은 이 들 어플리케이션의 요구에 따라 동적으로 할당될 수 있다 (블록 916). 스레드는 어플리케이션으로부터 비동기식으로 수신될 수 있으며 실행을 위해 스케줄링될 수 있다 (블록 918). 스레드의 실행의 결과는 어플리케이션으로 비동기식으로 제 공될 수 있다 (블록 920).
여기 기재된 멀티미디어 프로세서는 무선 통신 디바이스, 휴대용 디바이스, 게임 디바이스, 컴퓨팅 디바이스, 소비자 전자기기, 컴퓨터 등에 사용될 수 있다. 무선 통신 디바이스에 대한 멀티미디어 프로세서의 예시적인 사용이 하기에 기술된다.
도 10 은 무선 통신 시스템내의 무선 통신 디바이스 (1000) 의 설계의 블록도를 도시한다. 무선 통신 디바이스 (1000) 는 셀룰러 폰, 단말기, 핸드셋, 개인 휴대용 정보 단말기 (PDA), 또는 다른 디바이스일 수 있다. 무선 통신 시스템은 코드 분할 다중 접속 (CDMA) 시스템, 이동 통신용 글로벌 시스템 (GSM) 또는 다른 시스템일 수 있다.
무선 디바이스 (1000) 는 수신 경로 및 송신 경로를 통해 양-방향 통신의 제공을 할 수 있다. 수신 경로에서, 기지국에 의해 송신된 신호는 안테나 (1012) 에 의해 수신되며 수신기 (RCVR) (1014) 로 제공된다. 수신기 (1014) 는 수신된 신호를 컨디셔닝 및 디지털화하고 이후의 프로세싱을 위해 그 샘플을 디지털 섹션 (1020) 에 제공한다. 송신 경로에서, 송신기 (TMTR) (1016) 는 송신될 데이터를 디지털 섹션 (1020) 으로부터 수신하고, 데이터를 프로세싱 및 컨디셔닝하고 변조된 신호를 생성하며, 이 변조된 신호가 안테나 (1012) 를 통해 기지국으로 송신된다.
디지털 섹션 (1020) 은 예를 들어, 모뎀 프로세서 (1022), 디지털 신호 프로세서 (DSP) (1024), 비디오/오디오 프로세서 (1026), 컨트롤러/프로세서 (1028), 디스플레이 프로세서 (1030), 중앙 프로세싱 유닛 (CPU)/축소 명령 세트 컴퓨터 (RISC) (1032), 멀티미디어 프로세서 (1034), 카메라 프로세서 (1036), 내부/캐쉬 메모리 (1038) 및 외부 버스 인터페이스 (EBI) (1040) 와 같은 다양한 프로세서, 인터페이스 및 메모리 유닛을 포함한다. 모뎀 프로세서 (1022) 는 데이터 송신 및 수신을 위한 프로세싱 (예를 들어, 인코딩, 변조, 복조 및 디코딩) 을 수행한다. DSP (1024) 는 무선 디바이스 (1000) 을 위한 전용 프로세싱을 수행할 수 있다. 비디오/오디오 프로세서 (1026) 는 캠코더, 비디오 플레이백 및 영상 회의와 같은 비디오 어플리케이션을 위한 비디오 콘텐츠 (예를 들어, 정지 이미지, 동영상 및 무빙 텍스트) 에 대한 프로세싱을 수행한다. 비디오/오비오 프로세서 (1026) 는 또한 오디오 어플리케이션을 위한 오디오 콘텐츠 (예를 들어, 합성된 오디오) 에 대한 프로세싱을 수행할 수 있다. 컨트롤러/프로세서 (1028) 는 디지털 섹션 (1020) 내의 다양한 유닛의 동작을 지시할 수 있다. 디스플레이 프로세서 (1030) 는 디스플레이 유닛 (1050) 상에 비디오, 그래픽 및 텍스트의 디스플레이를 용이하게 하는 프로세싱을 수행할 수 있다. CPU/RISC (1032) 는 무선 디바이스 (1000) 에 대한 범용 프로세싱을 수행할 수 있다. 멀티미디어 프로세서 (1034) 는 멀티미디어 어플리케이션에 대한 프로세싱을 수행하고 도 1 내지 도 8 에 대해 상술한 바와 같이 구현될 수 있다. 카메라 프로세서 (1036) 는 카메라 (도 10 에서 도시되지 않음) 에 대한 프로세싱을 수행할 수 있다. 내부/캐쉬 메모리 (1038) 는 디지털 섹션 (1020) 내의 다양한 유닛에 대한 데이터 및/또는 명령을 저장하고 도 1 및 도 2 의 캐쉬 메모리 (1090) 를 구현할 수 있다. EBI (1040) 는 디지털 섹션 (1020) (예를 들어, 내부/캐쉬 메모리 (1038)) 과 메인 메모리 (1060) 사이의 데이터 전송을 용이하게 할 수 있다. 멀티미디어 어플리케이션은 디지털 섹션 (1020) 내의 임의의 프로세서에 대해 실행될 수 있다.
디지털 섹션 (1020) 은 하나 이상의 프로세서, 마이크로-프로세서, DSP, RISC 등으로 구현될 수 있다. 디지털 섹션 (1020) 은 하나 이상의 온-디맨드 집적회로 (ASIC) 및/또는 다른 유형의 집적 회로 (IC) 상에 제조될 수 있다.
여기 기재된 멀티미디어 프로세서는 다양한 하드웨어 디바이스에서 구현될 수 있다. 예를 들어, 멀티미디어 프로세서는 ASIC, 디지털 신호 처리 디바이스 (DSPD), 프로그래머블 로직 디바이스 (PLD), 필드 프로그래머블 게이트 어레이 (FPGA), 프로세서, 컨트롤러, 마이크로 컨트롤러, 마이크로 프로세서, 전자 디바이스, 다른 전자 유닛 내에서 구현될 수 있다. 멀티미디어 프로세서는 집적/내장 메모리를 포함할 수도 있고 안 할 수도 있다.
여기 기재된 멀티미디어 프로세서를 구현하는 장치는 독립한 유닛일 수도 있고 디바이스의 일부일 수도 있다. 디바이스는 (ⅰ) 독립 IC ,(ⅱ) 데이터 및/또는 명령을 저장하는 메모리 IC 를 포함할 수 있는 하나 이상의 IC 의 세트, (ⅲ) 이동국 모뎀 (MSM) 과 같은 ASIC, (ⅳ) 다른 디바이스에 내장될 수 있는 모듈, (ⅴ) 셀롤러 폰, 무선 기기, 핸드셋 또는 모바일 유닛, (ⅵ) 기타 등등이 될 수 있다.
개시의 전술한 설명은 당업자가 본 개시를 제조 또는 사용가능할 수 있게 제공된다. 본 개시에 대한 다양한 수정은 당업자에게 쉽게 명백할 것이며, 여기 정의된 일반 원리는 본 개시의 사상 또는 범위를 벗어남이 없이 다른 변형예 들에 적용될 수 있을 것이다. 따라서, 본 개시는 여기 개시된 예시들로 한정되는 것이 아니라 여기에 개시된 원리 및 신규한 특성에 일치하는 가장 넓은 범위를 포함할 수 있다.

Claims (35)

  1. 동시에 복수의 멀티미디어 어플리케이션을 지원하는 멀티미디어 프로세서를 포함하는 디바이스로서,
    상기 멀티미디어 프로세서는,
    상기 복수의 멀티미디어 어플리케이션에 대한 명령, 데이터 및 상태 정보를 저장하는 구성가능 저장 자원; 및
    상기 복수의 멀티미디어 어플리케이션에 대한 프로세싱을 수행하는 할당가능 프로세싱 유닛들을 포함하며,
    상기 멀티미디어 프로세서는 상기 구성가능 저장 자원의 구성가능 부분을 각 멀티미디어 어플리케이션으로 할당하고, 상기 멀티미디어 어플리케이션의 요구에 따라 상기 프로세싱 유닛들을 상기 복수의 멀티미디어 어플리케이션으로 동적으로 할당하며,
    상기 할당가능 프로세싱 유닛들은 상기 복수의 멀티미디어 어플리케이션에 대한 상이한 유형의 프로세싱을 수행하는 상이한 프로세싱 유닛들을 포함하고,
    상기 할당가능 프로세싱 유닛들은 적어도 하나의 산술 논리 유닛 (ALU) 코어, 적어도 하나의 기초 함수 코어, 적어도 하나의 로직 코어 및 적어도 하나의 텍스쳐 샘플러를 포함하는, 멀티미디어 프로세서를 포함하는 디바이스.
  2. 제 1 항에 있어서,
    상기 구성가능 저장 자원은 상기 복수의 멀티미디어 어플리케이션에 대한 명령을 저장하는 명령 캐쉬를 포함하며, 각 멀티미디어 어플리케이션은 상기 명령 캐쉬의 구성가능 부분을 할당받는, 멀티미디어 프로세서를 포함하는 디바이스.
  3. 제 1 항에 있어서,
    상기 구성가능 저장 자원은 상기 복수의 멀티미디어 어플리케이션에 대한 데이터를 저장하는 레지스터 뱅크를 포함하며, 각 멀티미디어 어플리케이션은 상기 레지스터 뱅크의 구성가능 부분을 할당받는, 멀티미디어 프로세서를 포함하는 디바이스.
  4. 제 1 항에 있어서,
    상기 구성가능 저장 자원은,
    상기 복수의 멀티미디어 어플리케이션에 대한 명령 또는 데이터를 저장하고, 가상 메모리 및 물리적 메모리와 연관되는 저장 유닛으로서, 각 멀티미디어 어플리케이션은 상기 가상 메모리의 구성가능 부분을 할당받는, 상기 저장 유닛; 및
    각 멀티미디어 어플리케이션에 할당된 상기 가상 메모리의 부분을 상기 물리적 메모리의 대응하는 부분에 매핑하는 적어도 하나의 테이블을 포함하는, 멀티미디어 프로세서를 포함하는 디바이스.
  5. 제 1 항에 있어서,
    상기 멀티미디어 프로세서는,
    상기 멀티미디어 어플리케이션으로 할당된 상기 구성가능 저장 자원의 부분에 저장을 위해 캐쉬 메모리 또는 메인 메모리로부터 각 멀티미디어 어플리케이션에 대한 명령 및 데이터를 요구에 따라 페치하는 로드 제어 유닛을 더 포함하는, 멀티미디어 프로세서를 포함하는 디바이스.
  6. 제 1 항에 있어서,
    상기 프로세싱 유닛들은 독립적으로 동작하며, 각 프로세싱 유닛은 주어진 타임 슬롯에서 상기 복수의 멀티미디어 어플리케이션 중 임의의 멀티미디어 어플리케이션으로 할당가능한, 멀티미디어 프로세서를 포함하는 디바이스.
  7. 제 1 항에 있어서,
    상기 멀티미디어 프로세서는 상기 복수의 멀티미디어 어플리케이션 중 임의의 멀티미디어 어플리케이션으로 할당되지 않은 프로세싱 유닛을 파워 다운 (power down) 하는, 멀티미디어 프로세서를 포함하는 디바이스.
  8. 제 1 항에 있어서,
    상기 프로세싱 유닛들은 로드 제어 유닛 및 플로우 컨트롤러 (flow controller) 중 적어도 하나를 더 포함하는, 멀티미디어 프로세서를 포함하는 디바이스.
  9. 제 1 항에 있어서,
    상기 멀티미디어 프로세서는,
    상기 복수의 멀티미디어 어플리케이션으로부터 스레드를 비동기식으로 수신하는 입력 인터페이스 유닛; 및
    상기 복수의 멀티미디어 어플리케이션으로 결과를 비동기식으로 제공하는 출력 인터페이스 유닛을 더 포함하는, 멀티미디어 프로세서를 포함하는 디바이스.
  10. 제 1 항에 있어서,
    상기 멀티미디어 프로세서는 전력 소비를 감소시키기 위해 상기 멀티미디어 프로세서의 로딩에 기초하여 클럭 스피드를 조정하는, 멀티미디어 프로세서를 포함하는 디바이스.
  11. 제 10 항에 있어서,
    상기 멀티미디어 프로세서는 특정 시간 주기에서 상기 프로세싱 유닛들이 할당되는 시간의 비율에 기초하여 상기 로딩을 결정하는, 멀티미디어 프로세서를 포함하는 디바이스.
  12. 제 1 항에 있어서,
    상기 멀티미디어 프로세서는 상기 복수의 멀티미디어 어플리케이션에 대한 복수의 스레드를 동시에 지원하는, 멀티미디어 프로세서를 포함하는 디바이스.
  13. 제 12 항에 있어서,
    상기 구성가능 저장 자원은 상기 복수의 스레드에 대한 복수의 콘텍스트 레지스터를 포함하며, 각 콘텍스트 레지스터는 연관된 스레드에 대한 상태 정보를 저 장하는, 멀티미디어 프로세서를 포함하는 디바이스.
  14. 제 13 항에 있어서,
    상기 각 스레드에 대한 상태 정보는 프로그램 카운터, 동적 플로우 제어에 대한 포인터를 저장하는 스택, 상대 어드레싱을 위한 어드레스 레지스터, 조건 연산 결과를 저장하는 술어 레지스터 (pedicate register) 및 로드 요청과 데이터 백 조건을 트랙킹하는 로드 참조 카운터 중 적어도 하나를 포함하는, 멀티미디어 프로세서를 포함하는 디바이스.
  15. 제 12 항에 있어서,
    각 스레드는 소정의 사이즈까지의 데이터 단위로 동작하는, 멀티미디어 프로세서를 포함하는 디바이스.
  16. 제 12 항에 있어서,
    각 스레드는 이미지 내의 최대 네 개의 픽셀 또는 최대 네 개의 정점 (vertices) 으로 동작하는, 멀티미디어 프로세서를 포함하는 디바이스.
  17. 제 1 항에 있어서,
    상기 멀티미디어 프로세서는 상기 복수의 멀티미디어 어플리케이션에 대해 적용할 수 있는 명령의 단일 세트를 지원하는, 멀티미디어 프로세서를 포함하는 디바이스.
  18. 제 1 항에 있어서,
    상기 복수의 멀티미디어 어플리케이션은 그래픽 어플리케이션, 오디오 어플리케이션, 비디오 어플리케이션, 카메라 어플리케이션 및 게임 어플리케이션 중 적어도 하나를 포함하는, 멀티미디어 프로세서를 포함하는 디바이스.
  19. 복수의 멀티미디어 어플리케이션을 동시에 지원하는 단계;
    상기 멀티미디어 어플리케이션에 대한 명령, 데이터 및 상태 정보를 저장하기 위해 저장 자원의 구성가능 부분을 각 멀티미디어 어플리케이션으로 할당하는 단계; 및
    상기 멀티미디어 어플리케이션의 요구에 따라 프로세싱 유닛들을 상기 복수의 멀티미디어 어플리케이션으로 동적으로 할당하는 단계를 포함하며,
    상기 프로세싱 유닛들은 상기 복수의 멀티미디어 어플리케이션에 대한 상이한 유형의 프로세싱을 수행하는 상이한 프로세싱 유닛들을 포함하고,
    상기 프로세싱 유닛들은 적어도 하나의 산술 논리 유닛 (ALU) 코어, 적어도 하나의 기초 함수 코어, 적어도 하나의 로직 코어 및 적어도 하나의 텍스쳐 샘플러를 포함하는, 방법.
  20. 제 19 항에 있어서,
    상기 저장 자원의 구성가능한 부분을 할당하는 단계는,
    상기 멀티미디어 어플리케이션에 대한 명령을 저장하기 위해 명령 캐쉬의 구성가능 부분을 각 멀티미디어 어플리케이션으로 할당하는 단계를 포함하는, 방법.
  21. 제 19 항에 있어서,
    상기 저장 자원의 구성가능한 부분을 할당하는 단계는,
    상기 멀티미디어 어플리케이션에 대한 데이터를 저장하기 위해 레지스터 뱅크의 구성가능 부분을 각 멀티미디어 어플리케이션으로 할당하는 단계를 포함하는, 방법.
  22. 제 19 항에 있어서,
    상기 복수의 멀티미디어 어플리케이션으로부터 스레드를 비동기식으로 수신하는 단계; 및
    상기 복수의 멀티미디어 어플리케이션으로 결과를 비동기식으로 제공하는 단계를 더 포함하는, 방법.
  23. 복수의 멀티미디어 어플리케이션을 동시에 지원하는 수단;
    상기 멀티미디어 어플리케이션에 대한 명령, 데이터 및 상태 정보를 저장하기 위해 저장 자원의 구성가능 부분을 각 멀티미디어 어플리케이션으로 할당하는 수단; 및
    상기 멀티미디어 어플리케이션의 요구에 따라 프로세싱 유닛들을 상기 복수의 멀티미디어 어플리케이션으로 동적으로 할당하는 수단을 포함하며,
    상기 프로세싱 유닛들은 상기 복수의 멀티미디어 어플리케이션에 대한 상이한 유형의 프로세싱을 수행하는 상이한 프로세싱 유닛들을 포함하고,
    상기 프로세싱 유닛들은 적어도 하나의 산술 논리 유닛 (ALU) 코어, 적어도 하나의 기초 함수 코어, 적어도 하나의 로직 코어 및 적어도 하나의 텍스쳐 샘플러를 포함하는, 장치.
  24. 제 23 항에 있어서,
    상기 저장 자원의 구성가능한 부분을 할당하는 수단은,
    상기 멀티미디어 어플리케이션에 대한 명령을 저장하기 위해 명령 캐쉬의 구성가능 부분을 각 멀티미디어 어플리케이션으로 할당하는 수단을 포함하는, 장치.
  25. 제 23 항에 있어서,
    상기 저장 자원의 구성가능한 부분을 할당하는 수단은,
    상기 멀티미디어 어플리케이션에 대한 데이터를 저장하기 위해 레지스터 뱅크의 구성가능 부분을 각 멀티미디어 어플리케이션으로 할당하는 수단을 포함하는, 장치.
  26. 제 23 항에 있어서,
    상기 복수의 멀티미디어 어플리케이션으로부터 스레드를 비동기식으로 수신하는 수단; 및
    상기 복수의 멀티미디어 어플리케이션으로 결과를 비동기식으로 제공하는 수단을 더 포함하는, 장치.
  27. 복수의 멀티미디어 어플리케이션을 동시에 지원하는 멀티미디어 프로세서; 및
    캐쉬 메모리를 포함하고,
    상기 멀티미디어 프로세서는 상기 복수의 멀티미디어 어플리케이션에 대한 명령, 데이터 및 상태 정보를 저장하는 구성가능 저장 자원, 및
    상기 복수의 멀티미디어 어플리케이션에 대한 프로세싱을 수행하는 할당가능 프로세싱 유닛들을 포함하며,
    상기 멀티미디어 프로세서는 상기 구성가능 저장 자원의 구성가능 부분을 각 멀티미디어 어플리케이션으로 할당하고 상기 멀티미디어 어플리케이션의 요구에 따라 상기 프로세싱 유닛들을 상기 복수의 멀티미디어 어플리케이션으로 동적으로 할당하며,
    상기 할당가능 프로세싱 유닛들은 상기 복수의 멀티미디어 어플리케이션에 대한 상이한 유형의 프로세싱을 수행하는 상이한 프로세싱 유닛들을 포함하고,
    상기 할당가능 프로세싱 유닛들은 적어도 하나의 산술 논리 유닛 (ALU) 코어, 적어도 하나의 기초 함수 코어, 적어도 하나의 로직 코어 및 적어도 하나의 텍스쳐 샘플러를 포함하며,
    상기 캐쉬 메모리는 상기 구성가능 저장 자원으로의 로딩을 위한 명령 및 데이터를 저장하는, 무선 디바이스.
  28. 삭제
  29. 제 1 항에 있어서,
    상기 ALU 코어는 산술 연산을 수행하며,
    상기 기초 함수 코어는 다항식 근사법의 수행 없이 기초 초월 함수를 계산하며,
    상기 로직 코어는 논리 연산, 비트 단위 연산 및 데이터 버퍼 관리 연산을 수행하며,
    상기 텍스쳐 샘플러는 텍스쳐 엔진에 대한 사전 프로세싱을 수행하는, 멀티미디어 프로세서를 포함하는 디바이스.
  30. 삭제
  31. 제 19 항에 있어서,
    상기 ALU 코어는 산술 연산을 수행하며,
    상기 기초 함수 코어는 다항식 근사법의 수행 없이 기초 초월 함수를 계산하며,
    상기 로직 코어는 논리 연산, 비트 단위 연산 및 데이터 버퍼 관리 연산을 수행하며,
    상기 텍스쳐 샘플러는 텍스쳐 엔진에 대한 사전 프로세싱을 수행하는, 방법.
  32. 삭제
  33. 제 23 항에 있어서,
    상기 ALU 코어는 산술 연산을 수행하며,
    상기 기초 함수 코어는 다항식 근사법의 수행 없이 기초 초월 함수를 계산하며,
    상기 로직 코어는 논리 연산, 비트 단위 연산 및 데이터 버퍼 관리 연산을 수행하며,
    상기 텍스쳐 샘플러는 텍스쳐 엔진에 대한 사전 프로세싱을 수행하는, 장치.
  34. 삭제
  35. 제 27 항에 있어서,
    상기 ALU 코어는 산술 연산을 수행하며,
    상기 기초 함수 코어는 다항식 근사법의 수행 없이 기초 초월 함수를 계산하며,
    상기 로직 코어는 논리 연산, 비트 단위 연산 및 데이터 버퍼 관리 연산을 수행하며,
    상기 텍스쳐 샘플러는 텍스쳐 엔진에 대한 사전 프로세싱을 수행하는, 무선 디바이스.
KR1020097019527A 2007-02-21 2008-02-21 온-디맨드 멀티 스레드 멀티미디어 프로세서 KR101118486B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/677,362 2007-02-21
US11/677,362 US7685409B2 (en) 2007-02-21 2007-02-21 On-demand multi-thread multimedia processor
PCT/US2008/054620 WO2008103854A1 (en) 2007-02-21 2008-02-21 On-demand multi-thread multimedia processor

Publications (2)

Publication Number Publication Date
KR20090115211A KR20090115211A (ko) 2009-11-04
KR101118486B1 true KR101118486B1 (ko) 2012-03-13

Family

ID=39535482

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097019527A KR101118486B1 (ko) 2007-02-21 2008-02-21 온-디맨드 멀티 스레드 멀티미디어 프로세서

Country Status (10)

Country Link
US (1) US7685409B2 (ko)
EP (1) EP2126690B1 (ko)
JP (1) JP5149311B2 (ko)
KR (1) KR101118486B1 (ko)
CN (1) CN101627367B (ko)
BR (1) BRPI0807951B1 (ko)
CA (1) CA2676184C (ko)
RU (1) RU2425412C2 (ko)
TW (1) TWI367453B (ko)
WO (1) WO2008103854A1 (ko)

Families Citing this family (79)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3413198A1 (en) 2007-04-11 2018-12-12 Apple Inc. Data parallel computing on multiple processors
US8276164B2 (en) * 2007-05-03 2012-09-25 Apple Inc. Data parallel computing on multiple processors
US8341611B2 (en) 2007-04-11 2012-12-25 Apple Inc. Application interface on multiple processors
US8108633B2 (en) * 2007-04-11 2012-01-31 Apple Inc. Shared stream memory on multiple processors
US11836506B2 (en) 2007-04-11 2023-12-05 Apple Inc. Parallel runtime execution on multiple processors
US8286196B2 (en) 2007-05-03 2012-10-09 Apple Inc. Parallel runtime execution on multiple processors
JP2008299610A (ja) * 2007-05-31 2008-12-11 Toshiba Corp マルチプロセッサ
TWI386814B (zh) * 2007-12-31 2013-02-21 Ind Tech Res Inst 具動態工作管理能力之多處理器界面及其程式載卸方法
US8947460B2 (en) 2008-04-22 2015-02-03 Htc Corporation Method and apparatus for operating graphic menu bar and recording medium using the same
US8286198B2 (en) 2008-06-06 2012-10-09 Apple Inc. Application programming interfaces for data parallel computing on multiple processors
US8225325B2 (en) 2008-06-06 2012-07-17 Apple Inc. Multi-dimensional thread grouping for multiple processors
US9013498B1 (en) * 2008-12-19 2015-04-21 Nvidia Corporation Determining a working set of texture maps
US8819258B2 (en) * 2009-05-07 2014-08-26 International Business Machines Corporation Architecture for building multi-media streaming applications
KR20110116553A (ko) * 2010-04-19 2011-10-26 삼성전자주식회사 미디어 프로세싱 애플리케이션 실행 장치 및 방법
CN101901167A (zh) * 2010-07-22 2010-12-01 网御神州科技(北京)有限公司 一种多cpu架构下的多网络安全审计方法和系统
CN101937368A (zh) * 2010-08-31 2011-01-05 苏州阊亦宏环保科技有限公司 一种面向云计算的数据中心管理系统
US8762644B2 (en) * 2010-10-15 2014-06-24 Qualcomm Incorporated Low-power audio decoding and playback using cached images
KR101359717B1 (ko) 2010-11-08 2014-02-07 한국전자통신연구원 에너지 타일 프로세서
US8775836B2 (en) * 2010-12-23 2014-07-08 Intel Corporation Method, apparatus and system to save processor state for efficient transition between processor power states
WO2012087566A2 (en) * 2010-12-23 2012-06-28 Intel Corporation Method, apparatus and system to save processor state for efficient transition between processor power states
US8789065B2 (en) 2012-06-08 2014-07-22 Throughputer, Inc. System and method for input data load adaptive parallel processing
GB2487355B (en) 2011-01-13 2020-03-25 Advanced Risc Mach Ltd Processing apparatus, trace unit and diagnostic apparatus
US9201689B2 (en) * 2011-04-22 2015-12-01 Cray Inc. Software emulation of massive hardware threading for tolerating remote memory references
US10061618B2 (en) * 2011-06-16 2018-08-28 Imagination Technologies Limited Scheduling heterogenous computation on multithreaded processors
US9448847B2 (en) 2011-07-15 2016-09-20 Throughputer, Inc. Concurrent program execution optimization
US8935491B2 (en) * 2011-07-15 2015-01-13 Throughputer, Inc. Memory architecture for dynamically allocated manycore processor
TWI454905B (zh) 2011-09-30 2014-10-01 Intel Corp 在多核心平台中之受限制的啓動技術
KR101881019B1 (ko) 2011-10-26 2018-07-24 삼성전자 주식회사 휴대 단말기의 전원절약 장치 및 방법
WO2013149374A1 (zh) * 2012-04-01 2013-10-10 华为技术有限公司 媒体处理系统和处理媒体业务的方法
RU2490696C1 (ru) * 2012-07-20 2013-08-20 Открытое акционерное общество "КОНСТРУКТОРСКОЕ БЮРО "КОРУНД-М" (ОАО КБ "КОРУНД-М") Устройство детектирования и корректирования ошибок с функцией самотестирования памяти
US9082078B2 (en) 2012-07-27 2015-07-14 The Intellisis Corporation Neural processing engine and architecture using the same
CN103853605B (zh) * 2012-11-28 2017-06-09 宏达国际电子股份有限公司 线程管理方法及其电子装置
US9465655B2 (en) 2012-11-28 2016-10-11 Htc Corporation Method for managing threads using executing time scheduling technique and electronic device using the same method
US9185057B2 (en) 2012-12-05 2015-11-10 The Intellisis Corporation Smart memory
US9697006B2 (en) * 2012-12-19 2017-07-04 Nvidia Corporation Technique for performing memory access operations via texture hardware
US10007323B2 (en) 2012-12-26 2018-06-26 Intel Corporation Platform power consumption reduction via power state switching
US10437591B2 (en) 2013-02-26 2019-10-08 Qualcomm Incorporated Executing an operating system on processors having different instruction set architectures
US9396012B2 (en) 2013-03-14 2016-07-19 Qualcomm Incorporated Systems and methods of using a hypervisor with guest operating systems and virtual processors
US10114756B2 (en) 2013-03-14 2018-10-30 Qualcomm Incorporated Externally programmable memory management unit
US9606818B2 (en) 2013-03-14 2017-03-28 Qualcomm Incorporated Systems and methods of executing multiple hypervisors using multiple sets of processors
US9471318B2 (en) * 2013-03-15 2016-10-18 International Business Machines Corporation System management and instruction counting
GB2516435A (en) 2013-04-05 2015-01-28 Continental Automotive Systems Embedded memory management scheme for real-time applications
JP6094356B2 (ja) * 2013-04-22 2017-03-15 富士通株式会社 演算処理装置
RU2538920C2 (ru) * 2013-05-06 2015-01-10 Общество с ограниченной ответственностью "Аби ИнфоПоиск" Способ распределения задач сервером вычислительной системы, машиночитаемый носитель информации и система для реализации способа
US20140379725A1 (en) * 2013-06-19 2014-12-25 Microsoft Corporation On demand parallelism for columnstore index build
CN104521180B (zh) * 2013-07-01 2017-11-24 华为技术有限公司 基于统一通信的视频会议呼叫方法、设备和系统
US20150077635A1 (en) * 2013-09-18 2015-03-19 Htc Corporation Method for outputting multiple multimedia tracks along multiple processing paths from a portable electronic device
US9223574B2 (en) * 2014-03-27 2015-12-29 International Business Machines Corporation Start virtual execution instruction for dispatching multiple threads in a computer
US9542221B2 (en) * 2014-05-22 2017-01-10 Oracle International Corporation Dynamic co-scheduling of hardware contexts for parallel runtime systems on shared machines
US9507655B2 (en) * 2014-10-31 2016-11-29 AppDynamics, Inc. Tracking asynchronous entry points for an application
US10061531B2 (en) 2015-01-29 2018-08-28 Knuedge Incorporated Uniform system wide addressing for a computing system
US9552327B2 (en) 2015-01-29 2017-01-24 Knuedge Incorporated Memory controller for a network on a chip device
US10489197B2 (en) * 2015-06-01 2019-11-26 Samsung Electronics Co., Ltd. Highly efficient inexact computing storage device
US9977693B2 (en) 2015-09-23 2018-05-22 Hanan Potash Processor that uses plural form information
US10061511B2 (en) 2015-09-23 2018-08-28 Hanan Potash Computing device with frames/bins structure, mentor layer and plural operand processing
US10067878B2 (en) 2015-09-23 2018-09-04 Hanan Potash Processor with logical mentor
US10140122B2 (en) * 2015-09-23 2018-11-27 Hanan Potash Computer processor with operand/variable-mapped namespace
US10095641B2 (en) 2015-09-23 2018-10-09 Hanan Potash Processor with frames/bins structure in local high speed memory
US10157133B2 (en) 2015-12-10 2018-12-18 Arm Limited Snoop filter for cache coherency in a data processing system
US9900260B2 (en) 2015-12-10 2018-02-20 Arm Limited Efficient support for variable width data channels in an interconnect network
US20170185516A1 (en) * 2015-12-28 2017-06-29 Arm Limited Snoop optimization for multi-ported nodes of a data processing system
US10027583B2 (en) 2016-03-22 2018-07-17 Knuedge Incorporated Chained packet sequences in a network on a chip architecture
US11093286B2 (en) * 2016-04-26 2021-08-17 Hanan Potash Computing device with resource manager and civilware tier
US10346049B2 (en) 2016-04-29 2019-07-09 Friday Harbor Llc Distributed contiguous reads in a network on a chip architecture
US9990292B2 (en) 2016-06-29 2018-06-05 Arm Limited Progressive fine to coarse grain snoop filter
US10031834B2 (en) 2016-08-31 2018-07-24 Microsoft Technology Licensing, Llc Cache-based tracing for time travel debugging and analysis
US10565024B2 (en) * 2016-10-19 2020-02-18 Oracle International Corporation Generic concurrency restriction
US10209887B2 (en) 2016-12-20 2019-02-19 Texas Instruments Incorporated Streaming engine with fetch ahead hysteresis
US10042766B1 (en) 2017-02-02 2018-08-07 Arm Limited Data processing apparatus with snoop request address alignment and snoop response time alignment
US10409614B2 (en) * 2017-04-24 2019-09-10 Intel Corporation Instructions having support for floating point and integer data types in the same register
US10783011B2 (en) * 2017-09-21 2020-09-22 Qualcomm Incorporated Deadlock free resource management in block based computing architectures
GB201717303D0 (en) 2017-10-20 2017-12-06 Graphcore Ltd Scheduling tasks in a multi-threaded processor
US10606641B2 (en) 2017-10-20 2020-03-31 Graphcore Limited Scheduling tasks in a multi-threaded processor
US10642737B2 (en) * 2018-02-23 2020-05-05 Microsoft Technology Licensing, Llc Logging cache influxes by request to a higher-level cache
US11513837B2 (en) * 2018-05-07 2022-11-29 Micron Technology, Inc. Thread commencement and completion using work descriptor packets in a system having a self-scheduling processor and a hybrid threading fabric
US11100604B2 (en) * 2019-01-31 2021-08-24 Advanced Micro Devices, Inc. Multiple application cooperative frame-based GPU scheduling
CN110704368B (zh) * 2019-09-25 2020-11-06 支付宝(杭州)信息技术有限公司 基于fpga的安全智能合约处理器的高效运算方法及装置
CN114816529A (zh) * 2020-10-21 2022-07-29 上海壁仞智能科技有限公司 配置向量运算系统中的协作线程束的装置和方法
US20220263691A1 (en) * 2021-02-16 2022-08-18 Nvidia Corporation Technique to perform demodulation of wireless communications signal data

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2006122102A2 (en) * 2005-05-10 2006-11-16 Qualcomm Incorporated Idle-element prediction circuitry and anti-thrashing logic

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10506492A (ja) * 1995-07-21 1998-06-23 フィリップス エレクトロニクス ネムローゼ フェンノートシャップ 高性能密度を有するマルチメディアプロセッサアーキテクチャ
GB2311882B (en) * 1996-04-04 2000-08-09 Videologic Ltd A data processing management system
US5966734A (en) * 1996-10-18 1999-10-12 Samsung Electronics Co., Ltd. Resizable and relocatable memory scratch pad as a cache slice
US6092175A (en) 1998-04-02 2000-07-18 University Of Washington Shared register storage mechanisms for multithreaded computer systems with out-of-order execution
US6041400A (en) * 1998-10-26 2000-03-21 Sony Corporation Distributed extensible processing architecture for digital signal processing applications
US6507903B1 (en) * 2000-06-20 2003-01-14 International Business Machines Corporation High performance non-blocking parallel storage manager for parallel software executing on coordinates
US7111294B2 (en) * 2001-01-16 2006-09-19 Microsoft Corporation Thread-specific heaps
JP2004157636A (ja) * 2002-11-05 2004-06-03 Renesas Technology Corp データ処理装置
US7185215B2 (en) * 2003-02-24 2007-02-27 International Business Machines Corporation Machine code builder derived power consumption reduction
KR100591755B1 (ko) 2003-07-22 2006-06-22 삼성전자주식회사 복수의 스레드를 동시에 처리하는 장치 및 방법
US7239322B2 (en) * 2003-09-29 2007-07-03 Ati Technologies Inc Multi-thread graphic processing system
JP2005182791A (ja) * 2003-12-12 2005-07-07 Sharp Corp 汎用組込みプロセッサ

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2006122102A2 (en) * 2005-05-10 2006-11-16 Qualcomm Incorporated Idle-element prediction circuitry and anti-thrashing logic

Also Published As

Publication number Publication date
RU2425412C2 (ru) 2011-07-27
US20080201716A1 (en) 2008-08-21
CA2676184C (en) 2014-12-23
US7685409B2 (en) 2010-03-23
JP2010519652A (ja) 2010-06-03
BRPI0807951A2 (pt) 2014-06-03
CN101627367B (zh) 2016-04-27
CN101627367A (zh) 2010-01-13
WO2008103854A1 (en) 2008-08-28
JP5149311B2 (ja) 2013-02-20
BRPI0807951B1 (pt) 2019-05-14
TWI367453B (en) 2012-07-01
RU2009135022A (ru) 2011-04-10
TW200842757A (en) 2008-11-01
CA2676184A1 (en) 2008-08-28
EP2126690B1 (en) 2014-04-02
KR20090115211A (ko) 2009-11-04
EP2126690A1 (en) 2009-12-02

Similar Documents

Publication Publication Date Title
KR101118486B1 (ko) 온-디맨드 멀티 스레드 멀티미디어 프로세서
US8345053B2 (en) Graphics processors with parallel scheduling and execution of threads
KR101012625B1 (ko) 산술 유닛 및 기본 함수 유닛을 갖는 그래픽 프로세서
US9575807B2 (en) Processing accelerator with queue threads and methods therefor
US10217183B2 (en) System, method, and computer program product for simultaneous execution of compute and graphics workloads
US7805589B2 (en) Relative address generation
WO2008014289A1 (en) Tiled cache for multiple software programs
KR20140125821A (ko) 그래픽 병렬 처리 유닛에 대한 버퍼 관리
WO2017155610A1 (en) Method and apparatus for efficient submission of workload to a high performance graphics sub-system
US10114755B2 (en) System, method, and computer program product for warming a cache for a task launch
US9171525B2 (en) Graphics processing unit with a texture return buffer and a texture queue
US9165396B2 (en) Graphics processing unit with a texture return buffer and a texture queue
US9378139B2 (en) System, method, and computer program product for low latency scheduling and launch of memory defined tasks
CN117350911A (zh) 一种着色器输入数据的处理方法和图形处理装置
CN118245188A (zh) 线程控制方法及装置、处理器和计算机可读存储介质

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20150129

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20151230

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20161229

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20171228

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20190107

Year of fee payment: 8