KR20070083872A - Simd 명령을 지원하는 프로그램 가능한 데이터 처리회로 - Google Patents

Simd 명령을 지원하는 프로그램 가능한 데이터 처리회로 Download PDF

Info

Publication number
KR20070083872A
KR20070083872A KR1020077009826A KR20077009826A KR20070083872A KR 20070083872 A KR20070083872 A KR 20070083872A KR 1020077009826 A KR1020077009826 A KR 1020077009826A KR 20077009826 A KR20077009826 A KR 20077009826A KR 20070083872 A KR20070083872 A KR 20070083872A
Authority
KR
South Korea
Prior art keywords
instruction
register
simd
operand
series
Prior art date
Application number
KR1020077009826A
Other languages
English (en)
Other versions
KR101239304B1 (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 KR20070083872A publication Critical patent/KR20070083872A/ko
Application granted granted Critical
Publication of KR101239304B1 publication Critical patent/KR101239304B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • 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/30181Instruction operation extension or modification
    • 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
    • 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/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
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

Abstract

데이터 프로세싱 회로는 SIMD 명령을 포함하는 명령 집합을 가지는 명령 실행 회로(12b)를 포함한다. 상기 명령 실행 회로는, SIMD 명령에 대한 응답으로 N개의 개별적인 동일한 동작을 동시에 수행하도록 배열된, 복수의 산술 회로(26a-d)를 포함한다. 상기 SIMD 명령은 어드레싱된 레지스터로부터 SIMD 명령의 N개의 개별적인 SIMD 명령 오퍼랜드의 제 1 및 제 2 시리즈를 정의한다. 각 산술 회로(26a,b)는, SIMD 명령을 수행할 때, 제 1 및 제 2 시리즈 각각으로부터 각 제 1 오퍼랜드 및 각 제 2 오퍼랜드를 수신한다. 명령 수행 회로(12b)는 제 1 및 제 2 시리즈를 선택하기 위해 배열되어, 이들이 부분적으로 오버랩된다. 바람직하게는, 적어도 한 시리즈의 오퍼랜드의 위치는 프로그램의 제어하에 있고, 바람직하게는 오퍼랜드 데이터 제어하에 있다. 바람직하게는 프로그램 제어는 제 1 레지스터의 개시에 관한 시리즈의 개시를 선택하며, 상기 시리즈는 만약 제 1 레지스터의 개시에서 시작되지 않는 경우, 제 2 레지스터에서 실행된다.

Description

SIMD 명령을 지원하는 프로그램 가능한 데이터 처리 회로{PROGRAMMABLE DATA PROCESSING CIRCUIT THAT SUPPORTS SIMD INSTRUCTION}
본 발명은 SIMD(Single Instruction Multiple Data : 단일 명령 복수 데이터) 명령을 포함하는 명령어 집합을 가지는 프로그램 가능한 데이터 처리 회로에 관한 것이다. 본 발명은 또한 이미지 데이터의 보간을 수행하는 방법에 관한 것이다.
인텔 펜티엄(R)Ⅲ 프로세서의 명령 세트에서 SIMD명령의 사용은 1999년 인텔 테크놀로지 저널 Q2에서 발행된, 제임스 아벨(James Abel), 쿠마르 발라수브라마니안(Kumar Balasubramanian), 마이크 바제론(Mike Bargeron), 톰 크레이버(Tom Craver) 및 마이크 필포트(Mike Philpot)에 의한, " 스트리밍 단일 명령 복수 데이터 확장을 위한 응용 조정(Application Tuning for Streaming SIMD Extensions)"라는 제목의 논문에서 기술되며, 인터넷 www.intel.com/technology/itj/q21999/articles/art_5.htm 상에서 이용가능하다. 이 논문은 아벨 등등 으로 명명될 것이다. SIMD 명령에 대한 응답으로, 프로세서는 오퍼랜드(operand)의 내용 및 결과 레지스터를 처리하고 일련의 복수의 숫자(예를 들어, 32 비트의 레지스터에서 4개의 8비트 숫자)로서 처리한다. 프로세서는 오퍼 랜드(operand)로서 각각의 입력 레지스터로부터 다른 쌍의 숫자를 이용할 때마다, SIMD 명령에 의해 동시에 다수 회수로 동작을 수행한다. 상기 프로세서는 조합된 결과를 기록하는데, 이 결과는 이들 동시-수행된 동작으로부터 기인한 개별 숫자를 명령에 의해 지정된 결과 레지스터에 포함한다.
프로세서의 명령 세트에서 SIMD 명령의 이러한 타입의 사용가능성은, 동일한 기능이 예를 들어 컴퓨터 그래픽 처리, 이미지 압축 및 압축해제와 같은 이미지 처리 작업과 같은 대용량의 데이터에 적용되어야만 하는 작업을 수행하기 위해 실행되어야만 하는 전체 명령어의 개수를 감소시킨다. 전체 명령 개수의 감소는 그러한 작업이 수행될 수 있는 속도를 증가시키고, 그러한 작업 수행에 관련된 전력 소모를 감소시킨다.
작업이 SIMD를 사용하여 수행될 때, 정렬이 문제점을 야기할 수 있다. 정렬 문제는, 오퍼랜드 데이터가 메모리로부터 오퍼랜드 데이터를 SIMD 명령에 공급하는데 사용되는 레지스터로 로딩될 수 있도록 하는 방법의 결과이다. 통상적으로, 오퍼랜드 데이터는 복수의 기본 어드레스 간격의 일부 정수배인 어드레스만으로부터 시작하여 로딩될 수 있다. 대부분의 경우, 처리되어야 하는 데이터(예. 연속적인 픽셀에 대한 데이터)가 할당된 어드레스로부터 출발하여 연속적으로 저장되고, 모든 데이터는 일련의 로딩 명령어에 의해 로딩될 수 있으므로,이는 문제가 아니다. 아벨 등등은 캐시 라인(cache line)이 나뉘어지는 콘텍스트(context)에서 정렬 문제를 언급한다. 특별한 경우에 대해, 아벨 등등은 정렬되지 않은 어드레스들로부터의 로딩을 지원하기 위한 "무브업(moveups)"명령의 사용을 설명한다. 덧붙여서, 아벨 등등은 "셔플링(shuffling)" 명령도 설명하는데, 이는 레지스터로부터 숫자를 재배열하는데 사용될 수 있다. 이 타입의 명령의 사용에 대한 필요성은 실행되어야만 하는 명령의 개수를 증가시킨다.
정렬 문제의 한 예는 이미지 데이터의 보간 기간 동안 일어나는데, 이는 인접 픽셀에 대한 정보의 조합을 포함한다. 아벨 등등은, SIMD 명령의 병렬화가 동일한 픽셀의 다른 색 성분을 함께 보간하는데 사용되는, 보간 접근을 설명한다. 이 경우, 메모리는 연속된 픽셀에 대한 색 성분 세트가 연속적으로 저장되는 데 사용된다.
대안적으로, 인접 픽셀에 대한 하나의 색성분의 픽셀 데이터는 연속적으로 인접한 메모리 위치에 저장될 것이다. 바람직하게는, 복수의 픽셀 위치에 대한 보간된 데이터를 병렬로 생성하기 위해 SIMD 명령을 사용하는 것이 가능하여야 한다. 이 경우, 통상적으로 SIMD 명령의 제 1 오퍼랜드는 제 1 복수의 인접 픽셀에 대한 픽셀 데이터를 포함해야 하고, 제 2 오퍼랜드는 제 2 복수의 픽셀에 대한 픽셀 데이터를 포함해야 하는데, 이들의 픽셀 위치는 고정된 오프셋에 의한 제 1 복수의 픽셀의 위치(통상적으로 하나의 픽셀 위치)에 대한 오프셋이다. 그러나, 이 경우 적어도 하나의 오퍼랜드는 정렬되지 않은 위치로부터 로딩되어야 하고, 이는 요구되는 명령의 개수를 증가시킨다.
그 중에 특히, 본 발명의 목적은, 이격된 정렬 간격의 정수배가 아닌 어드레스 간격으로, 메모리에 저장되는 오퍼랜드를 사용하는 SIMD 연산을 수행하기 위해 필요로 하는 명령의 개수의 감소를 지원하는 명령어 집합으로 프로그램 가능한 프로세서를 제공하는 것이다.
그 중에 특히, 본 발명의 선택 가능한 정렬되지 않은 어드레스 간격으로 메모리에 저장되는 오퍼랜드를 사용하는 SIMD 명령을 수행하는데 필요로 하는 명령의 개수의 감소를 지원하는 명령어 집합을 프로그램 가능한 프로세서에 제공하는 것이다.
본 발명은 청구항 1에 따라 데이터 프로세싱 회로를 제공한다. 본 발명에 따라 데이터 프로세싱 회로는 새로운 타입의 SIMD 명령을 포함하는 명령어 집합을 가진다. 이 SIMD 명령에 대한 응답으로, N개의 산술 회로(예를 들면 N=4 또는 N=8)는 N개의 각각의 동일한 동작을 병렬로 수행한다. SIMD 명령은, SIMD 명령에 의해 선택된 제 1 및 제 2 레지스터로부터 SIMD 명령의 N개의 개별적인 SIMD 명령 오퍼랜드의 제 1 및 제 2 시리즈(series)를 정의한다. 각각의 산술 회로는, SIMD 명령을 수행할 때, 제 1 및 제 2 시리즈 각각으로부터 각 제 1 오퍼랜드 및 각 제 2 오퍼랜드를 수신하도록 배열된다. 명령 수행 유닛은 제 1 및 2 시리즈가 부분적인 오버랩을 가지는 것을 가능하게 하도록 설계된다. 즉, 제 1 및 제 2 레지스터로부터의 모든 오퍼랜드는 아니지만, 적어도 하나는 2개의 산술 유닛에 의해 이용된다. 통상적으로, 제 1 및 제 2 시리즈의 적어도 하나는 그 일부가 제 1 레지스터로부터 취해지고 일부가 제 2 레지스터로부터 취해지는 N개의 오퍼랜드를 포함한다.
하나의 실시예에서, SIMD 명령은 신호 샘플의 보간 혹은 필터링에 적용되는데, 여기서 연속적인 출력 샘플 위치에 대한 보간 값은 입력 샘플 위치에 대한 각각의 오퍼랜드 쌍으로부터 계산된 N개의 SIMD 결과다. 이 실시예에서, 각 연속적인 쌍의 하나의 오퍼랜드는 이전 쌍의 다른 오퍼랜드와 오버랩된다.
바람직하게는, 제 1 및 제 2 레지스터 내에서 제 1 시리즈의 위치는 프로그램 가능하게 선택 가능하다. 따라서, 보간 또는 필터링 어플리케이션에서, 개시 SIMD 결과가 계산되기 위한, 개시 입력 샘플 위치는 오퍼랜드 레지스터의 내용이 정렬된 로딩 동작으로 로딩됨에도 불구하고, 개별적인 샘플 위치에 대해 프로그램 가능하게 조정될 수 있다. 이는, 만약 필터링 혹은 보간이, 예를 들어 임의로 위치지정된 윈도우로부터와 같은, 임의의 위치로부터 시작하여 저장되는 어래이(array)를 위해 실행되어야만 하는 경우에 특히 유용하다. 제2 시리즈는, 바람직하게는, 예를 들어 오퍼랜드 레지스터 내에서 하나의 오퍼랜드 위치에 의한 오프셋과 같은, 제 1 시리즈에 대해 미리 결정된 관련 위치를 가진다.
하나의 실시예에서, 위치 선정은 SIMD 명령의 실행 코드에 의해 제어된다. 다른 실시예에서, 상기 위치는 SIMD 명령에 의해 선택된 추가적인 레지스터로부터 오퍼랜드 데이터에 의해 제어된다. 이러한 식으로 최소의 상이한 명령어 타입이 필요하다. 바람직하게는, 추가적인 레지스터는 또한 필터링 혹은 보간에 대한 계수를 제공하는데, 이는 모든 산술 회로에 공통으로 제공된다.
추가적인 실시예에서, 데이터 프로세싱 회로는 일련의 레지스터(통상적으로 레지스터 파일)와 산술회로 사이에 결합된 오퍼랜드 분배 회로를 포함한다. 이 실시예에서 오퍼랜드 분배 회로는, 적어도 오퍼랜드의 제 1 시리즈의 위치를 선정하기 위해, 명령 데이터 및/또는 오퍼랜드 데이터에 의해 제어된다.
추가적인 실시예에서 SIMD 명령은, 제 1 및 제 2 오퍼랜드에 대해 선택된 위치와 무관한, 추가적인 오퍼랜드 레지스터에서 미리 결정된 위치로부터 제공되는 추가적인 오퍼랜드를 가진다. 필터링 또는 보간 어플리케이션에서, 예를 들면, SIMD 명령이 바람직하게는 N번의 곱의 합을 계산한다. 이 경우, N개의 이전 합은 추가적인 오퍼랜드 레지스터로부터 제공될 수 있다. 대안적으로, 그러한 합은 산술회로와 더불어 포함된 누산기 레지스터로부터 제공될 수 있으나, 이는 SIMD 명령이 사용될 수 있는 융통성을 제한한다.
이러한 타입의 SIMD 명령을 사용하면, 예를 들어, 위치의 개수에 대해, 오퍼랜드 값의 배열(a[])로부터,
r[i]=s[i]+w1*a[i+offset]+w2*a[i+offset+1]
과 같은 결과의 배열(r[i])을 동시에 계산하는 것이 가능하다. 다른 오퍼랜드 또는 오프셋이 사용된, 이러한 타입의 명령의 또다른 실행에 대해 입력값(s)으로서 결과(r)를 사용함으로써, 더 넓은 지지 영역(결과에 영향을 미치는 위치의 영역)을 가지는 보간 또는 필터링 동작은 최소 개수의 명령을 가지는 프로세싱 회로에 대한 프로그램으로 구현될 수 있다.
게다가, 명령어 집합은 바람직하게는, 종래의 SIMD 명령 또한 포함하며 이 명령에 응답하여 상기 산술 회로가 N개의 동일한 동작을 동시에 실행하는데, 각 산술 회로는 추가적인 SIMD 명령에 의해 선택된 레지스터의 제 1 레지스터로부터의 각 제 1 오퍼랜드 및 추가적인 SIMD 명령에 의해 선택된 레지스터의 제 2 레지스터로부터의 각 제 2 오퍼랜드를 사용한다.
본 발명의 이들 및 다른 목적과 유리한 측면은 다음의 도면에서 도시되는 비-제한적인 예시들을 사용하여 보다 자세히 설명될 것이다.
도 1은 데이터 프로세싱 회로를 도시하는 도면.
도 2는 기능 유닛의 일부분을 도시하는 도면.
도 3은 종래의 SIMD 명령의 데이터 흐름을 도시하는 도면.
도 4a 내지 c는 새로운 SIMD 명령의 데이터 흐름을 도시하는 도면.
도 5는 간략화된 데이터 흐름을 구비한 기능 유닛을 도시하는 도면.
도 6은 추가적인 오퍼랜드 입력을 구비한 기능 유닛을 도시하는 도면.
도 7은 공통 오퍼랜드에 대한 오퍼랜드 입력을 구비한 기능 유닛을 도시하는 도면.
도 8은 피가수(summand) 입력을 구비한 기능 유닛을 도시하는 도면.
도 9는 산술 회로를 도시하는 도면.
도 1은 본 발명이 구현되는 데이터 프로세싱 회로의 예시를 도시한다. 데이터 프로세싱 회로는 명령 발행 회로(10), 복수의 기능 유닛(12a,b), 레지스터 파일(14) 및 데이터 메모리(16)를 포함한다. 명령 발행 회로(10)는 기능 유닛(12a,b)에 결합된 이슈 슬롯 출력(11a,b) 및 레지스터 파일(14)의 어드레스 단자(address port)를 가진다. 기능 유닛(12a,b)은 레지스터 파일에 연결된 오퍼랜드/결과 통신라인(13a,b)을 가진다. 제 1 기능 유닛(12a)은 데이터 메모리(16)에 결합된 어드레 스/데이터 인터페이스(15)를 가진다.
동작시, 명령 발행 회로(10)는 발행 슬롯(11a,b)을 통해 명령을 발행한다. 각 명령은 기능 유닛(12a,b)에 제공되는 실행 코드, 이는 레지스터 파일(14)에 제공되는, 적어도 하나의 오퍼랜드 레지스터 어드레스 및 레지스터 파일 (14)에 제공되는 적어도 하나의 결과 레지스터 어드레스를 포함한다. 오퍼랜드 레지스터 어드레스(들)에 대한 응답으로, 레지스터 파일(14)은, 어드레싱된 레지스터(들)로부터 오퍼랜드 데이터를 판독하고, 이 오퍼랜드 데이터를 명령어를 수행하는 기능 유닛(12a,b)에 제공한다. 실행 코드에 대한 응답으로, 기능 유닛(12a,b)은 입력으로서 오퍼랜드 데이터를 이용하여 선택된 동작을 수행한다. 기능 유닛(12a,b)은 결과 레지스터 어드레스(들)에 의해 어드레싱된 레지스터(들)에 결과 데이터를 저장하는 레지스터 파일(14)에 대한 결과 데이터로서, 동작 결과(들)을 기록한다.
도면의 데이터 프로세싱 회로의 구조가 단지 하나의 예시이고 많은 다른 구조들이 사용될 수 있다는 점이 강조되어야 한다. 프로세싱 회로의 특별한 아키텍쳐가 본 발명을 도시하는데 사용되었지만, 프로세싱 회로는 본 발명을 구현하는데 사용될 수 있는 프로세싱 회로의 단지 하나의 예시일 뿐이고, 임의의 경우에 단지 상세 항목의 최소 개수만이 도시됨이 이해되어야 한다. 예를 들어, 두 개의 발행 슬롯(11a,b) 및 두 개의 기능 유닛(12a,b)을 갖는 프로세싱 회로가 도시되었으나, 더 많은 혹은 더 적은 수의 발행 슬롯 및/또는 기능 유닛이 사용될 수 있음이 이해되어야 한다. 또 다른 예시로서, 간략화를 위한 파이프라이닝(pipelining)에 대한 어떠한 언급도 이루어지지 않았지만, 통상적으로 파이프라이닝이 사용되어 다른 명령 프로세싱의 다른 부분이 오버랩 될 수 있고, 한 명령의 다른 부분들이 다른 시간에 발행될 수 있다. 더욱이, 분리된 발행 슬롯에 연결된 분리된 기능 유닛이 도시됨에도 불구하고, 이들 기능 유닛의 기능은 하나의 기능 유닛으로 통합될 수 있거나, 다른 기능 유닛이 동일한 발행 슬롯에 연결될 수 있으므로 하나 또는 그 이상의 이들 기능 유닛은 적절한 명령을 수신할때 활성화된다는 점이 이해되어야 한다. 나아가, 단일 레지스터 파일(14)이 명료화를 위해 도시되었지만, 실제로 레지스터 파일은, 예를 들어, 가능하게는 상호 다른 비트 폭의 레지스터를 구비한 복수의 레지스터 파일을 포함하는 레지스터의 임의의 집합을 나타낼 수 있다는 점이 이해되어야 한다. 발생 슬롯에서의 다른 필드(field)는 이들 레지스터 파일의 다른 필드를 어드레싱 할 수 있다. 더욱이, 단일 선들은 다른 부분들 사이의 연결을 나타내기 위해 도시되었지만, 각 선은 일반적으로 복수의 비트를 병렬로 제공하기 위한 복수의 실행자를 나타낸다는 점이 이해될 것이다.
제 1 기능 유닛(12a)은 데이터 메모리로의 액세스 동작을 수행함에 의한 실행 코드에 응답하는 메모리 액세스 유닛(memory access unit)이다. 예를 들어, 판독 실행 코드에 대한 응답으로, 기능 유닛(12a)는 어드레스 및 판독 제어 신호를 메모리로 제공하고, 메모리가 어드레스로부터 판독한 데이터를 역으로 수신하고, 레지스터 파일(14)에 데이터를 기록할 수 있다. 기록 실행 코드에 대한 응답으로 또다른 예로서, 기능 유닛(12a)은 어드레스, 기록 데이터 및 기록 제어 신호를 메모리로 제공할 수 있는데, 상기 기록 데이터는 레지스터 파일(14)로부터 수신된 오퍼랜드 데이터이다. 그 결과, 데이터 메모리(16)는 상기 어드레스에 의해 어드레싱 된 위치에서 기록 데이터를 저장할 것이다. 통상적으로, 메모리 액세스 유닛은, 정렬된 어드레스라고 명명된, 선택된 어드레스로부터만 시작하여 레지스터로 데이터를 로딩할 수 있는 빠른 로딩 및/또는 저장 명령을 지원하여, 연속적으로 정렬된 어드레스간의 간격은 단일 레지스터로 함께 로딩될 수 있는 메모리 위치의 개수에 해당한다.
제 2 기능 유닛(12b)은 여러 SIMD(단일 명령 복수 데이터) 명령을 수행할 수 있는 산술 프로세서를 포함한다.
도 2는 그러한 산술 프로세서의 실시예의 예를 도시한다. 이 예에서, 기능 유닛(12b)은 두 개의 오퍼랜드 입력(20a,b), 입력 연결(22a,b), 오퍼랜드 분배 회로(24), 복수의 산술 회로(26a-d) 및 출력 연결(28) 및 결과 출력(29)을 가진다. 통상적으로 입력(20a,b) 각각은 레지스터 파일 (14)에 병렬로 기능적으로 연결된 복수의 실행자를 포함한다. 32 또는 64개의 실행자는 예를 들어 각 입력(20a,b)에 대해 병렬로 사용될 수 있다. 입력 연결(22a,b)은 실제 회로에 해당할 필요는 없으나, 단지 입력 (20a,b)이 복수의 오퍼랜드로 세분될 때 처리될 수 있음을 나타내기 위해 도시되었다. 32개의 입력 (20a,b)은 예를 들어, 각 8비트인 4개의 오퍼랜드로 세분될 수 있거나, 64 비트의 입력(20a,b)은 예를 들어, 각 16비트인 4개의 오퍼랜드 또는 각 8비트인 8개의 오퍼랜드로 세분될 수 있다. 통상적으로, 각 입력(20a,b)은 오퍼랜드 분배 회로(24)의 입력에 제공되는 각 오퍼랜드에 대해 그룹으로 나뉘어질 수 있다.
오퍼랜드 분배 회로(24)는 산술 회로(26a-d)의 각 입력에 연결된 출력을 가 진다. 산술 회로(26a-d)는 출력 연결(28)에 결합된 출력을 가지는데, 이는 그 다음에 결과 출력(29)에 결합된 출력을 가진다. 출력 연결(28)은 또한 단지 출력(29)이 복수의 결과로 세분될 때 처리될 수 있음을 나타내기 위해 도시된다. 통상적으로, 각 산술회로(26a-d)의 출력은 복수의 실행자를 병렬로 나타내는데, 이는 출력(29)로 통합될 수 있다. 32 또는 64개의 실행자는 예를 들어 출력 (29)에 대해 병렬로 사용될 수 있다. 32 비트의 출력(29)은 예를 들면, 각 산술 회로(26a-d)로부터 각 8비트인 4개의 결과로 세분되거나 또는 각 산술 회로(26a-d)로부터 각 16비트인 4개의 결과로 세분되거나 또는 각 산술회로(26a-d)로부터 각 8비트인 8개의 오퍼랜드(미도시)로 세분될 수 있다.
명령 발행 회로(10)로부터 실행 코드를 수신하기 위한 입력(27)은 산술 회로(26a-d) 각각 및 오퍼랜드 분배 회로(24)에 결합된다. SIMD 동작을 위해, 각 산술 회로(26a-d)는 입력 오퍼랜드에서 동일한 동작을 수행함으로써 응답한다. 종래의 SIMD 명령 실행을 위해, 오퍼랜드 분배 회로(24)는, 제 1 입력(20)에서 개별 위치로부터 산술 회로(26a-d)의 제 1 입력까지 오퍼랜드를 공급함에 의해, 및 제 2 입력(20b)에서 개별 위치로부터 산술 회로(26a-d)의 제 1 입력까지 대응하는 오퍼랜드를 공급함으로써, 그러한 종래의 SIMD 명령을 선택하는 실행 코드에 응답하도록 배열된다.
도 3은 그러한 종래의 SIMD 명령에 대한 데이터 흐름을 도시한다. 여기서, 각각의 레지스터로부터의 입력(30a,b)은 각 오퍼랜드에 대응하는 필드로 나뉘어지는 것으로 도시된다. 원(32)는 동작을 나타내고, 필드와 동작 간의 화살표는 데이 터 흐름을 부호화한다. 이 SIMD 명령은 예를 들어,
ADDVECTOR R1,R2,R3
와 같은 어셈블리어 표현을 구비한, 벡터 ADD 명령일 수 있다.
여기서, "ADDVECTOR"는 실행 코드를 나타내는데, 이는 실행되어야만 하는 동작을 식별하며, R1 및 R2는 레지스터의 어드레스를 나타내며, 각각은 복수의 오퍼랜드로서 처리될 콘텐츠를 구비하고, 상기 명령은 복수의 가산을 수행함으로써 실행되고, 제 1 가산은 R1 및 R2에 의해 어드레싱된 레지스터에서 체 1 위치로부터의 오퍼랜드를 가산하고, 제 2 가산은 R1 및 R2에 의해 어드레싱된 레지스터에서 제 2위치로부터의 오퍼랜드를 가산한다. R3은 복수의 결과합이 명령에 응답하여 저장되는 레지스터의 어드레스를 나타낸다. 물론, 유사한 종래의 SIMD 명령법은 감산, 곱과 같은 다른 연산에 대해서도 가능하다.
SUBVECTOR R1,R2,R3
MULVECTOt R1,R2,R3
도 4는 본 발명에 따른 SIMD 명령의 예에 대한 데이터 흐름을 도시한다. 이 예에서, 동작은 제 1 입력(30a)의 제 1 및 제 2 필드로부터의 오퍼랜드를 사용하여 수행되며, 동일한 동작이 제 1 입력(30a)의 제 2 및 제 3 필드로부터의 오퍼랜드를 사용하여 수행되며, 동일한 동작이 제 1 입력(30a)의 제 3 및 제 4 필드로부터의 오퍼랜드를 이용하여 수행되고, 동일한 동작이 제 1 입력(30a)의 제 3 및 제 4 필드 및 제 2 입력(30b)의 제 1 필드로부터의 오퍼랜드를 이용하여 수행된다. SIMD 명령은 예를 들어
ADDADJACENT R1, R2, R3
인 가산 명령일 수 있다.
여기서, R1에 의해 어드레싱된 레지스터에서 인접 위치의 쌍으로부터의 오퍼랜드가 가산될 수 있고, R2에 의해 어드레싱된 레지스터는 R1에 의해 어드레싱된 레지스터의 확장으로서 처리된다. 상기 가산의 결과는 R3에 의해 어드레싱된 레지스터에 저장된다. 물론, 레지스터에서 인접한 위치의 쌍으로부터 오퍼랜드에 대해 ,감산, 곱, 곱하여 누적(MAC) 동작 등과 같은, 다른 동작에 대한 다른 명령도 가능하다.
SUBADJACENT R1, R2, R3
MULADJACENT R1, R2, R3
MACADJACENT R1, R2, R3
오퍼랜드 분배 회로(24)는 오퍼랜드 분배를 구현한다. 종래의 타입의 SIMD명령을 선택하는 입력(27)으로부터의 실행 코드에 대한 응답으로, 오퍼랜드 분포회로(24)는 도 3의 데이터 흐름에 따라 산술회로(26a-d)에 오퍼랜드를 전송한다. 새로운 타입의 SIMD 명령을 선택하는 입력(27)으로부터의 실행 코드에 대한 응답으로, 오퍼랜드 분배 회로(24)는 도 4a의 데이터 흐름에 따라 오퍼랜드를 산술 회로(26a-d)로 전송한다.
본 발명은 도 4a에서 도시된 유형의 데이터 흐름에 제한되지 않는다는 점이 이해되어야 한다. 다른 명령에 대한 응답으로, 오퍼랜드 분배 회로(24)는 도 4b 또는 4c에 도시된 데이터 흐름을 제공할 수 있다. 도 4b는 SIMD 명령의 실행 코드에 대한 응답을 도시하는데, 여기서 상기 산술 회로(26a,b)는 제 1 입력의 제 1, 제 2, 제 3 및 제 4 필드 각각으로부터의 제 1 오퍼랜드, 및 제 1 입력의 제 4 필드 로부터 및 제 2 입력의 제 1, 제 2, 및 제 3 필드로부터 제 2 오퍼랜드를 각각 수신한다. 그러한 명령은
ADD14 R1, R2, R3 or MAC14 R1,R2,R3 등
과 같은 어셈블리어 표현을 가질 수 있다.
여기서, 상기 실행 코드(ADD14 또는 MAC14)는 R1에 의해 어드레싱된 레지스터에서 제 1 오퍼랜드의 위치 및 동작을 나타낸다.
도 4c는 상기 산술 회로(26a,b)가 제 1 입력의 제 2,제 3,제 4 필드로부터 및 제 2 입력의 제 1 필드로부터 제 1 오퍼랜드와, 제 1 입력의 제 3,제 4 필드로부터 및 제 2 입력의 제 1 및 제 2 필드로부터 제 2 오퍼랜드를 각각 수신하는, SIMD 명령의 실행 코드에 대한 응답을 도시한다.
그러한 명령은
ADD23 R1, R2, R3 or MAC23 R1,R2,R3 등
과 같은 어셈블리어 표현을 가질 수 있다.
물론, 동일한 동작에 대한 위치의 모든 조합의 실행 코드가 존재할 필요는 없다: 즉, 프로그램에서 종종 요구되는 특정 조합만 제공하는 것이 충분할 수 있다.
따라서 지금까지 주어진 예시에서, 오퍼랜드 분배 회로(24)는 명령 발행 회로(10)로부터 실행 코드의 제어하에 필드로부터 오퍼랜드의 선택을 수행한다. 대안 적으로, 선택은 레지스터 파일(14)로부터 수신된 추가적인 오퍼랜드의 제어하에, 또는 그러한 오퍼랜드와 명령 발행 회로(10)로부터의 실행 코드의 조합의 제어하에수행될 수 있다.
도 5는 기능 유닛(12b)의 실시예를 도시하는데, 이는 레지스터 파일(14)(미도시)에 결합된 오퍼랜드 입력(50)을 더 포함한다. 이 실시예에서, 명령 발행 회로(10)에 의해 발행된 명령은 명령 발행 회로(10)가 레지스터 파일(14)에 공급하는 오퍼랜드 레지스터 선택 어드레스를 더 포함한다. 그러한 명령의 예시적인 어셈블리어 표현은 예를 들면
ADDSUCCESSIVE Rp, R1, R2, R3
이다.
여기서, 레지스터 어드레스(Rp)는 추가적인 오퍼랜드를 제공하는 레지스터의 어드레스를 나타낸다.
이 실시예에서 오퍼랜드 분배 회로(24)는 추가적인 오퍼랜드 입력(50)으로부터의 추가적인 오퍼랜드와 명령 발행 회로로부터의 실행 코드의 조합의 제어하에서 오퍼랜드의 선택을 수행한다. 이 실시예에서 실행 코드는 (도 3에서 도시된 바와 같은)종래의 흐름이 요구되는지 아닌지의 여부를 나타내고, 그렇지 않으면 추가적인 오퍼랜드 입력(50)으로부터의 추가적인 오퍼랜드가 어느 오퍼랜드 선택이 사용되는지를 제어한다.
한 예에서, 추가적인 오퍼랜드는 제 1 입력(30a)으로부터의 오퍼랜드에 대한 제 1 필드를 선택하고, 오퍼랜드 분배 회로(24)는 그 필드로부터 시작하고, 제 1 입력(30a)에서 시작하는 필드를 따르며, 제 2 입력(30b)의 제 1 필드로부터 계속되는 각각의 산술 회로(26a-d)에 대해 4개의 제 1 오퍼랜드를 선택한다. 이 경우, 오퍼랜드 분배 회로(24)는 제 1 입력 (30a)에서 선택된 필드를 따르는 다음 필드로부터 시작하는, 그리고 만약 있다면 제 1 입력(30a)에서 필드를 따르고, 제 2입력(30b)의 제 1 필드로부터 계속하는, 각각의 산술 회로(26a-d)에 대한 4개의 제 2 오퍼랜드를 선택하도록 배열될 수 있다. 이 방법으로, 예를 들어 도 4c의 데이터 흐름이 선택될 수 있다. 이 경우, 추가적인 오퍼랜드가 각각의 값은 다른 위치를 나타내는, 예를 들어, 4개의 값(0,1,2,3) 중 하나를 가질 수 있다. 이 경우 추가적인 오퍼랜드의 2 비트는 이러한 목적을 위해 충분하다.
다른 예에서, 오퍼랜드 분배 회로(24)는, 추가적인 오퍼랜드 제어하에, 두 개의 추가적인 오퍼랜드로부터, 또는 두 개의 개시 오퍼랜드의 위치의 독립적인 선택을 이루도록 배열될 수 있다. 따라서 예를 들어, 추가적인 오퍼랜드는 제 1 또는 제 2 입력에서 제 1 필드를 선택하기 위한 제 1 필드와 제 1 혹은 제 2 입력에서 제 2 필드를 선택하기 위한 제 2 필드인, 두 개의 필드를 포함할 수 있다. 이 경우, 오퍼랜드 분배 회로(24)는 만약 존재한다면 제 1 입력(30a)에서 제 1 필드로부터 시작하는, 그리고 제 2 입력(30b)의 제 1 필드로부터 계속되는, 각각의 산술회로(26a-d)에 대한 4개의 제 1 오퍼랜드를 선택하도록 배열될 수 있다. 유사하게, 오퍼랜드 분배 회로(24)는 만약 존재한다면 제 1 입력(30a)에서 제 1 필드로부터 시작하는, 그리고 제 2 입력(30b)의 제 1 필드로부터 계속되는, 각각의 산술회로(26a-d)에 대한 4개의 제 2 오퍼랜드를 선택하도록 배열될 수 있다. 이 방법으 로, 만약 추가적인 오퍼랜드의 제 1 필드가 제 1 입력의 제 1 필드를 선택하고, 추가적인 오퍼랜드의 제 2 필드가 제 1 입력의 제 4 필드를 선택한다면, 도 4b의 데이터 흐름이 구현될 수 있다. 이러한 방법으로, 각각의 필드에 대한 추가적인 오퍼랜드의 2개의 비트는 이 목적을 두 번 만족시킨다.
추가적인 실시예에서, 추가적인 오퍼랜드는 각각의 오퍼랜드의 독립적인 선택에 대한 선택 필드를 포함할 수 있다. 그러므로, 만약 각 레지스터가 N 개의 오퍼랜드를 포함하는 것으로 처리된다면, 추가적인 레지스터는 상기 오퍼랜드를 선택하기 위해 각각 2logN 비트인 2N개의 필드를 포함할 수 있다. 그러나, 실제 프로그램에서, 축소된 선택, 예를 들면 제 1 동작의 제 1 오퍼랜드(연속적인 위치로부터 선택된 남아있는 오퍼랜드가 선택됨)에 대한 단 하나의 오프셋만 선택하는 것 또는 제 1 동작의 제 1 및 제 2 오퍼랜드(연속적인 위치로부터 남아 있는 오퍼랜드가 선택됨)에 대해 단지 2개의 오프셋만을 선택하는 것으로 충분하다는 것이 알려졌다.
도 6은 단지 제한된 오퍼랜드 선택만이 사용될 때 사용될 수 있는 간략화된 기능 유닛의 일부분을 도시하는데, 여기서 마지막 산술 회로(26d)를 제외한 각 산술회로의 제 2 오퍼랜드는 다음 산술 회로에 대한 제 1 오퍼랜드로서의 역할을 한다. 오퍼랜드 분배 회로(24)는 예를 들어 다중화기(multiplexer)의 집합으로서 구현될 수 있는데, 각각은 산술 회로(26d)의 각 오퍼랜드 입력으로 선택가능한 입력을 선택적으로 결합시킨다. 그러나, 본 발명의 다른 구현이 가능하다. 예를 들어, 복수의 산술회로(26a-d)는 한 타입만의 명령을 실행하는데 제공될 수 있는데, 이것은 이 형태의 명령에서 어드레싱된 레지스터로부터의 미리 결정된 필드로부터 오퍼 랜드 데이터를 이용한다. 이 경우, 산술 회로의 입력은 어드레싱된 레지스터의 콘텐츠의 미리 결정된 부분을 수신하도록 배선될 수 있고, 상기 산술 회로는 명령어가 이 타입임을 나타내는 실행 코드에 대한 응답으로 결과 레지스터에 결과를 기록하도록 동작된다. 이 경우, 오퍼랜드 분배 회로(24)는 연관된 배선 연결 이상은 포함할 필요가 없다.
도 7은 모든 산술 회로(26a-d)에 인가되는, 추가적인 오퍼랜드 데이터가 공급되는 추가적인 입력(60)이 인가되는, 추가적인 실시예를 도시한다. 이 경우 기능 유닛에 대한 명령은
OPCODE Rp,Rc,R1, R2, R3
와 같은 어셈블리어 표현을 가진다.
여기서 Rc는 산술 회로(26a-d)에 대해 공통으로 추가 오퍼랜드(들)을 구비한 레지스터의 어드레스를 나타낸다. 추가적인 오퍼랜드 데이터는 예를 들면 필터 계수를 나타낼 수 있다. 한 실시예에서 그러한 명령은
b[0]=w0*a[offset+0]+w1*a[offset+1]
b[1]=w0*a[offset+1]+w1*a[offset+2]
b[2]=w0*a[offset+2]+w1*a[offset+3]
b[3]=w0*a[offset+3]+w1*a[offset+4]
의 계산을 실행하기 위해 사용될 수 있다.
여기서 a[0],a[1],a[2],a[3],a[4] 등은 R1과 R2에 의해 어드레싱된 레지스터(R2에 의해 어드레싱된 레지스터는 R1에 의해 어드레싱된 레지스터의 확장으로 처리됨)에서 각각의 필드에 저장되는 오퍼랜드 데이터를 나타낸다. 상기 오퍼랜드"offset"은 Rp에 의해 어드레싱된 레지스터로부터 획득되고, R1 및 R2에 의해 어드레싱된 레지스터에서 개시 필드 위치를 나타낸다. 각 산술 회로(26a-d)는 b[0],b[1],b[2] 및 b[3]의 각각을 계산하고, 이 결과는 R3에 의해 어드레싱된 레지스터의 각각의 필드(부분)에 기록된다.
이 실시예에서 Rc에 의해 어드레싱된 레지스터는 산술 회로(26a-d)의 각각에 제공되는 계수(w0,w1)을 포함한다. 또다른 실시예에서, 오퍼랜드 분배 회로(24)를 제어하는 오퍼랜드와 산술회로(26a-d)에 공통으로 제공되는 오퍼랜드는 추가적인 단일 오퍼랜드로부터 취해질 수 있다. 예를 들어, 32비트를 가진 레지스터의 경우, 2개의 8비트 계수 및 2비트 오프셋 선택은 단일 오퍼랜드에서 각각의 필드로부터 제공될 수 있다:
OPCODE Rs, Rpc, R1, R2, R3
여기서, 위치 및 계수 정보는 Rpc에 의해 어드레스 지정된 레지스터로부터 하나의 오퍼랜드에서 조합되어 제공된다 점을 가정한다. 필드는 Rs의 콘텐츠에 의해 선택된다.
도 8은 기능 유닛의 추가적인 실시예를 도시하는데, 여기서 추가적인 오퍼랜드 연결이 추가되고, 추가적인 오퍼랜드 연결(70)으로부터 산술회로(26a-d)의 개별 항목까지 각각의 오퍼랜드를 제공하는 입력(72)에 연결된다. 게다가, 추가적인 결과 연결(74)이 출력 연결(28)에 더해진다. 이 기능 유닛은 예를 들어 명령어에 응답하여 다음의 계산을 수행하기 위해 사용될 수 있다.
b[0]=s[0]+w[0]*a[offset+0]+w1*a[offset+1]
b[1]=s[1]+w[0]*a[offset+1]+w1*a[offset+2]
b[2]=s[2]+w[0]*a[offset+2]+w1*a[offset+3]
b[3]=s[3]+w[0]*a[offset+3]+w1*a[offset+4]
이것은 레지스터에서 연속적인 인접필드로부터 오퍼랜드를 사용하는 곱-합 명령이다.
도 9는 이러한 목적으로 사용될 수 있는 곱 w0*a[..]및 w1*a[..]의 곱을 계산하기 위해 곱셈기(90a,b)와 합산회로(92)를 포함하는 산술 회로(26)를 도시한다.
이 예에서, 기능 유닛은 피가수(summand)(s[..])의 각각의 합 및 곱(w0*a[..] 및 w1*a[..])을 출력한다. 각각의 산술 회로(26a-d)에 대한 피가수(s[..])는, Rs에 의해 어드레싱되는 레지스터의 미리 결정된 필드로부터 취해지고, 공통 계수는 Rpc에 의해 어드레싱되는 레지스터로부터 취해지고, 오퍼랜드(a[..])는 R1과 R2에 의해 어드레싱되는 레지스터의 개별적인 필드로부터 취해진다. 이들 오퍼랜드가 유도되는 위치는 Rpc에 의해 어드레싱되는 레지스터로부터 오프셋 정보에 의해 제어된다. 다른 산술 회로(26a-d)로부터의 결과가 조합되어 R3에 의해 어드레싱된 레지스터에 기록된다.
바람직하게는, 여기에 결과가 저장되는 레지스터(R3)가 오퍼랜드(a[..])를 제공하기 위해 사용되는 레지스터(R1,R2)의 폭(비트 수)의 두 배를 가진다. 이것은 정확성의 손실 없이 두 개의 M 비트 수의 곱을 나타내는데 2M 비트가 필요하다는 사실을 설명하는데 사용된다. 누산기(곱에 대한 수의 가산)가 사용된다면, 예를 들 어 2M+2비트인, 훨씬 더 많은 비트가 요구된다. 그 폭은 결과의 관련 폭에 따라 선택될 수 있다. 그러므로, 예를 들어, 만약 4개의 8비트 오퍼랜드(a[..])(M=8)가 32비트의 입력 레지스터(R1,R2)로부터 공급된다면, 이후 바람직하게 64비트 출력 레지스터(R3)가 4개의 16비트 결과(M=16)를 저장하는데 사용된다. 더욱이, 명령에 대한 응답으로, 상기 결과는 바람직하게는 추가적인 결과 레지스터(R4)에 정확성이 감소되어 저장되는데, 이는 입력 레지스터(R1, R2)와 동일한 폭을 가진다. 이 추가적인 레지스터에서, 각 결과(b[..])의 단지 일부분만이, 예를 들면 최상위 비트의 절반만이 저장되거나, 또는 관련된 절반의 최상위 비트만이, 예를 들면 각 결과로부터의 많은 미리 결정된 위치로부터의 비트, 소위 4 내지 12 비트만이 저장된다. 바람직하게는, 합(s[..])을 공급하기 위해 사용되는 레지스터(Rs) 또한 오퍼랜드(a[..])를 제공하는데 사용되는 레지스터(R1,R2)의 합의 폭(비트수)의 두 배의 폭을 가진다.
이것은 다음의 명령을 사용하여 다차원 보간(예. 2-차원 이미지 보간)의 구현에 사용될 수 있다.
MAC Rs, Rpc1, R1, R2, R3, R4
MAC R3, Rpc2, R1', R2', R3, R4
여기서, R1에 의해 어드레싱된 레지스터는 이미지 라인(예. 픽셀 값 p[i,j],p[i+1,j],p[i+2,j],p[i+3,j], 정수(j)는 라인을 나타내고, i는 시작 픽셀 위치를 나타냄)을 따라 인접 픽셀 위치에 대한 N개의(예를 들면 N=4) 픽셀 값을 포함하고, R2에 의해 어드레싱된 레지스터는 R1의 값(예. 픽셀 값 p[i+4,j],p[i+5,j],p[i+6,j],p[i+7,j])들을 따르는 위치에 대한 픽셀 값을 포함한다고 가정한다. Rpc1에 의해 어드레싱된 레지스터는 두 개의 계수(w00,w01)를 포함한다. 유사하게, R1'와 R2' 각각은 R1과 R2의 이미지 라인에 인접한, 다음 이미지 라인을 따라 인접 픽셀 위치에 대한 N(예를 들면 N=4)개의 픽셀 값(예. 픽셀 값은 각각 p[i,j+1],p[i+1,j+1],p[i+2,j+1],p[i+3,j+1] 및 p[i+4,j+1],p[i+5,j+1],p[i+6,j+1],p[i+7,j+1])을 포함한다고 가정한다. Rpc2에 의해 어드레싱된 레지스터는 두 개의 계수(w10, w11)을 포함한다. Rs에 의해 어드레싱된 레지스터는 영(zero) 값을 포함한다. 이 경우, 두 동작 후 R3에 의해 어드레싱되는 레지스터에서의 결과는
b[0]=w00 p[i+0,j]+w01 p[i+1,j]+w10p[i+0,j+1]+w11p[i+1,j+1]
b[1]=w00 p[i+1,j]+w01 p[i+2,j]+w10p[i+1,j+1]+w11p[i+2,j+1]
b[2]=w00 p[i+2,j]+w01 p[i+3,j]+w10p[i+2,j+1]+w11p[i+3,j+1]
b[3]=w00 p[i+3,j]+w01 p[i+4,j]+w10p[i+3,j+1]+w11p[i+4,j+1]
를 포함할 것이다.
따라서, 4개의 4 픽셀 보간은 2개의 명령을 수행함으로써 실행된다. 완전한 이미지를 보간하기 위해, 이는 픽셀의 연속적인 그룹을 로딩하는 것과 조합하여 반복될 것이다.
바람직하게는, 더욱이 기능 유닛이, 예를 들어 Rpc1 및 Rpc2에 의해 어드레싱되는 레지스터에서 오퍼랜드의 일부로서, 오프셋을 규정하는 최소한 한개의 오프랜드를 지원한다. 이 방법으로, R1,R2 및 R1',R2'에 의해 어드레싱되는 레지스터에 서 시작 픽셀 값(p[i+0,j], p[i+0,j+1])의 위치는 프로그램의 제어하에 선택될 수 있다. 이것은,정렬된 어드레스를 사용하는 로딩 동작과 더불어 추가적인 재정렬 없이, 데이터 메모리에서 임의의 어드레스로부터 시작되는 저장된 픽셀 값에 대한 결과를 생성하는 것이 가능하도록 한다. 그러므로, 예를 들어 라인을 따라 일련의 픽셀이 다음의 명령을 사용하여 프로세싱될 수 있다.
LOAD A, R1
INC4 A
LOAD A, R2
LOAD A', R1'
INC4 A'
LOAD A', R2'
repeat
MAC Rs,Rpc1,R1,R2,R3,R4
INC4 A
LOAD A,R1
MAC R3,Rpc2,R1',R2',R3,R4
STORE A",R4
INC4 A"
INC4 A'
LOAD A',R1'
MAC Rs,Rpc1,R2,R1,R3,R4
INC4 A
LOAD A,R2
MAC R3,Rpc2,R2',R1',R3,R4
STORE A",R4
INC4 A"
INC4 A'
LOAD A',R2'
여기서, 인접 메모리 위치의 그룹으로부터의 픽셀 값은 R1과 R2와 R1'와 R2'에 의해 어드레싱된 레지스터로 로딩되고, 4개의 보간 결과(MAC 명령에서)의 그룹을 생성하는데 사용된다. 여기서, 제 1 보간 결과를 생성하는데 사용되는 레지스터(R1,R2)로부터 사용되는 제 1 픽셀의 오프셋은 Rpc1에 의해 어드레싱된 레지스터에 의해서 제어된다. 인접 메모리 위치의 다음 그룹으로부터의 다음 픽셀 값은 R1( 및 R1')으로 로딩되고, R1과 R2의 역할이 보간 명령(MAC)에서 뒤바뀐다. 이 과정 후 루프가 반복된다.
인식되는 바와 같이, 이 프로그램에서 메모리 액세스 명령(LOAD 및 STORE) 모두 정렬된 어드레스를 사용한다. 따라서, 정렬되지 않은 개시 어드레스로부터 시작되는, 저장된 픽셀 데이터의 보간이 용이해진다. 이것은, 보간이 이미지에서 임의의 선택가능한 위치에서 시작되는 비교적 작은 윈도우에서 요구된다면, 특히 속도를 증가시킨다.
비록 본 발명의 어플리케이션이 2차원 이미지 프로세싱에 대해 예시되었다 할 지라도, 본 발명이 이 어플리케이션에 제한되지 않는다는 점이 인식되어야 한다. 본 발명은 또한 1차원 어래이(array) 프로세싱 또는 3차원 및 그 이상의 차원의 어래이 프로세싱에도 적용될 수 있다. 더욱이, 픽셀과 계수의 곱의 합을 포함하는 SIMD 명령에 대한 어플리케이션이 예시되었으나, 다른 명령이 사용될 수 있다는 점이 이해되어야 한다.
본 발명에 따라 프로세싱 회로는 그것의 명령어 집합에 특정한 새로운 명령을 포함하도록 배열된다. 잘 알려진 바와 같이, 프로세서의 명령 집합의 상세 사항은 일반적으로 프로세서를 구현하기 위해 어떤 구현예가 선택되었는지 당업자에게 알리기에 충분하다. 명령 집합은 프로세서에 대한 기계 프로그램에 포함될 수 있는 명령의 각각의 다른 타입을 정의한다{여기서 사용된 단어인, 명령은 기계 프로그램의 "최소단위(atom)", 즉 명령어 자체가 아닌 부분(fragment)으로 종결되지 않고 프로그램이 나뉘어질 수 있는 최소 유닛을 나타낸다}. 본 발명에 따른 프로세싱 회로의 명령 집합은, 각각이 복수의 잠재적인 오퍼랜드를 포함하는 레지스터로부터 오퍼랜드를 이용하여, 병렬로 동일한 타입의 동작을 실행함으로써 복수의 결과가 생성되는 점을 감지하는 의미에서, 프로세싱 회로가 SIMD 동작을 수행하도록 하는 명령을 포함한다. 병렬로 실행되는 상기 동작은 오퍼랜드의 오버랩 시리즈를 이용한다. 바람직하게는, 상기 명령은 오퍼랜드가 이로부터 획득되어야 하는 레지스터에서 위치를 나타내는 오퍼랜드를 더 포함해야 하며, 대안적으로, 다른 실행 코드는 다른 위치를 나타낸다.
본 발명은 SIMD(Single Instruction Multiple Data : 단일 명령 복수 데이터) 명령을 포함하는 명령어 집합을 가지는 프로그램 가능한 데이터 처리 회로에 이용가능하다. 본 발명은 또한 이미지 데이터의 보간을 수행하는 방법에 이용가능하다.

Claims (16)

  1. 데이터 프로세싱 회로로서,
    - 명령 선택 가능한 레지스터를 포함하는 레지스터 집합으로서, 각 레지스터는 각각의 SIMD 명령 오퍼랜드 및/또는 결과를 저장하기에 적절한 복수의 N개의 부분을 포함하는, 레지스터의 집합;
    -SIMD 명령을 포함하는 명령 집합을 가지는 명령 실행 회로(12b)로서, 명령 실행 회로가 SIMD 명령에 대한 응답으로 동시에 N개의 개별적인 동일한 동작을 수행하도록 배열된 복수의 산술 회로(26a-d)를 포함하며, SIMD 명령을 수행할 때, 상기 SIMD 명령은, SIMD 명령에 의해 선택된 레지스터의 제 1 및 제 2 레지스터로부터의 SIMD 명령의 N개의 개별적인 SIMD 명령 오퍼랜드를 정의하며, 각 산술 회로(26a,b)는 제 1 및 제 2 시리즈 각각으로부터 각 제 1 오퍼랜드 및 각 제 2 오퍼랜드를 수신하도록 배열되며, 명령 실행 회로(12b)는 제1 및 제 2 시리즈가 부분적으로 오버랩하도록 이들을 선택하기 위해 배열되는, 명령 실행 회로(12b);
    를 포함하는, 데이터 프로세싱 회로.
  2. 제 1 항에 있어서, 상기 명령 실행 회로(12b)는 레지스터의 제 1 및 제 2 레지스터 둘 다의 각각의 부분으로부터 적어도 오퍼랜드의 제 2 시리즈를 추출하도록 배열되는, 데이터 프로세싱 회로.
  3. 제 1 항에 있어서, 상기 명령 실행 회로(12b)는 프로그램 제어하에 레지스터의 제 1 및 제 2 레지스터 내에서 적어도 제 1 시리즈의 위치를 선택하도록 배열되는, 데이터 프로세싱 회로.
  4. 제 3 항에 있어서,
    - 명령 실행 회로(12b)에 결합된 명령 발행 회로(10) 및 SIMD 명령을 선택하고 레지스터의 제 1 및 제 2 레지스터를 각각 선택하도록 명령 데이터를 제공하기 위한 레지스터 집합(14);
    -제 1 시리즈의 위치를 선택하기 위해 레지스터 집합과 산술 회로 사이에 결합되고, 명령 데이터 및/또는 오퍼랜드 데이터에 의해 제어되는 오퍼랜드 분배 회로(24)로서, 제 1 시리즈의 선택 가능한 위치는 적어도 하나의 위치를 포함하고, 제 1 시리즈는 레지스터의 제 1 및 제 2 레지스터 둘 다의 일부에 걸쳐 확장되는, 오퍼랜드 분배 회로(24)
    를 포함하는, 데이터 프로세싱 회로.
  5. 제 3 항에 있어서, SIMD 명령은 추가적인 레지스터를 선택하고, 명령 실행 회로(12b)는 선택된 추가적인 레지스터로부터의 정보 제어 하에 제 1 시리즈의 위치를 제어하도록 배열되는, 데이터 프로세싱 회로.
  6. 제 3 항에 있어서, 명령 실행 회로(12b)는 제 1 시리즈에 관하여 미리 결정 된 상대적 위치로부터 제 2 시리즈를 선택하도록 배열되는, 데이터 프로세싱 회로.
  7. 제 1 항에 있어서, SIMD 명령이 각각의 SIMD 명령 오퍼랜드를 저장하기 위해 복수의 부분을 포함하는 추가적인 레지스터를 선택하고, 명령 실행 회로(12b)는 추가적인 레지스터 내 미리 결정된 위치로부터의 일부분을 산술 회로(26a-d) 중 각각 미리 결정된 회로에 결합하는, 데이터 프로세싱 회로.
  8. 제 7 항에 있어서, 명령 실행 회로(12b)는 프로그램 제어하에서 레지스터의 제 1 및 제 2 레지스터 내에서 적어도 제 1 시리즈의 위치를 선택하도록 배열되어 상기 미리 결정된 위치는 프로그램된 상기 제 1 시리즈의 위치 선택에 의해 영향받지 않는,데이터 프로세싱 회로.
  9. 제 7 항에 있어서, 각 산술 회로(26a-d)는 추가적인 레지스터로부터 오퍼랜드 및 모든 산술 회로(26a-d)에 공통인 계수를 가지는 제 1 및 제 2 시리즈로부터 오퍼랜드의 각 곱의 합을 계산하도록 배열된, 데이터 프로세싱 회로.
  10. 제 9 항에 있어서, 명령이 추가적인 레지스터를 선택하고, 그 계수들은 추가적인 레지스터로부터 산술 회로(26a-d)로 제공되는, 데이터 프로세싱 회로.
  11. 제 10 항에 있어서, 명령 실행 회로(12b)는 명령에 의해 선택된 추가 레지스 터로부터 데이터 제어 하에, 레지스터의 제 1 및 제 2 레지스터 내에서 적어도 제 1 시리즈의 위치를 선택하도록 배열되는, 데이터 프로세싱 회로.
  12. 제 9 항에 있어서, 픽셀 그룹에 대해 동시에 픽셀 보간을 수행하기 위한 상기 SIMD 명령을 포함하는 프로그램을 구비하여 프로그래밍된, 데이터 프로세싱 회로.
  13. 제 1 항에 있어서, 명령 집합이 추가적인 SIMD 명령을 포함하고, 상기 명령 실행 회로가 추가적인 SIMD 명령에 응답하여, 산술 회로가 동시에 N개의 동일한 추가 동작을 수행하게 하도록 배열되며, 각 산술 회로는 추가적인 SIMD 명령에 의해 선택되는 레지스터의 제 1 레지스터로부터의 개별적인 제 1 오퍼랜드 및 추가적인 SIMD 명령에 의해 선택되는 레지스터의 제 2 레지스터로부터의 개별적인 제 2 오퍼랜드를 사용하는, 데이터 프로세싱 회로.
  14. SIMD 명령을 포함하는 명령 집합을 가지는 프로그램 가능한 명령 처리 회로상에서의 컴퓨터 프로그램 실행 방법으로서, 상기 컴퓨터 프로그램은 SIMD 명령의 적어도 하나의 인스턴스(instance)를 포함하며, 상기 방법은
    - SIMD 명령에 대한 응답으로, SIMD 명령에 의해 선택된 제 1 및 제 2 레지스터의 콘텐츠를 검색하는 하는 단계로서, 각 레지스터는 복수의 N개의 각 SIMD 오퍼랜드를 저장하고, SIMD 명령은 제 1 및 제 2 레지스터로부터의 오퍼랜드 중 N개 오퍼랜드의 제 1 및 제 2 시리즈를 정의하고, 제 1 및 제 2 시리즈는 오버랩을 가지는 검색 단계와;
    - SIMD 명령에 대한 응답으로, N개의 각각 동일한 동작을 동시에 실행하는 단계로서, 각 동작은 제 1 및 제 2 시리즈 각각으로부터의 각 제 1 오퍼랜드 및 각 제 2 오퍼랜드를 사용하는 실행 단계
    를 포함하는, 컴퓨터 프로그램 실행 방법.
  15. 제 14 항에 있어서,
    - 이미지 데이터 값의 2차원 어래이를 수신하는 단계와;
    - SIMD 명령을 사용하여 보간된 이미지 데이터 값을 계산하는 단계
    를 포함하는, 컴퓨터 프로그램 실행 방법.
  16. 컴퓨터 프로그램 제품으로서, 기계 판독 가능한 명령을 포함하며, 이는 실행시 청구항 14의 방법을 프로그램 가능한 명령 프로세싱 회로가 실행하게 하고, 상기 명령은 상기 SIMD 명령을 포함하는, 컴퓨터 프로그램 제품.
KR1020077009826A 2004-11-03 2005-11-02 Simd 명령을 지원하는 프로그램 가능한 데이터 처리회로 KR101239304B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP04105471 2004-11-03
EP04105471.9 2004-11-03
PCT/IB2005/053575 WO2006048828A1 (en) 2004-11-03 2005-11-02 Programmable data processing circuit that supports simd instruction

Publications (2)

Publication Number Publication Date
KR20070083872A true KR20070083872A (ko) 2007-08-24
KR101239304B1 KR101239304B1 (ko) 2013-03-05

Family

ID=34929799

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020077009826A KR101239304B1 (ko) 2004-11-03 2005-11-02 Simd 명령을 지원하는 프로그램 가능한 데이터 처리회로

Country Status (8)

Country Link
US (2) US8122227B2 (ko)
EP (1) EP1812849B8 (ko)
JP (2) JP5748935B2 (ko)
KR (1) KR101239304B1 (ko)
CN (1) CN101052947A (ko)
AT (1) ATE493703T1 (ko)
DE (1) DE602005025677D1 (ko)
WO (1) WO2006048828A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7814296B2 (en) 2008-05-07 2010-10-12 Electronics And Telecommunications Research Institute Arithmetic units responsive to common control signal to generate signals to selectors for selecting instructions from among respective program memories for SIMD / MIMD processing control

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5182284B2 (ja) * 2007-03-08 2013-04-17 日本電気株式会社 ベクトル処理装置
US8248422B2 (en) * 2008-01-18 2012-08-21 International Business Machines Corporation Efficient texture processing of pixel groups with SIMD execution unit
US8831101B2 (en) * 2008-08-02 2014-09-09 Ecole De Technologie Superieure Method and system for determining a metric for comparing image blocks in motion compensated video coding
US9100656B2 (en) 2009-05-21 2015-08-04 Ecole De Technologie Superieure Method and system for efficient video transcoding using coding modes, motion vectors and residual information
US8411756B2 (en) * 2009-05-21 2013-04-02 Ecole De Technologie Superieure Method and system for generating block mode conversion table for efficient video transcoding
US8755438B2 (en) 2010-11-29 2014-06-17 Ecole De Technologie Superieure Method and system for selectively performing multiple video transcoding operations
WO2013089791A1 (en) * 2011-12-16 2013-06-20 Intel Corporation Instruction and logic to provide vector linear interpolation functionality
CN103377031B (zh) * 2012-04-27 2017-09-26 腾讯科技(深圳)有限公司 一种多数据处理方法和装置
US9201828B2 (en) * 2012-10-23 2015-12-01 Analog Devices, Inc. Memory interconnect network architecture for vector processor
US9342306B2 (en) 2012-10-23 2016-05-17 Analog Devices Global Predicate counter
US9092429B2 (en) 2012-10-23 2015-07-28 Analog Devices Global DMA vector buffer
JP6003744B2 (ja) 2013-03-22 2016-10-05 富士通株式会社 演算処理装置及び演算処理方法
US9898286B2 (en) * 2015-05-05 2018-02-20 Intel Corporation Packed finite impulse response (FIR) filter processors, methods, systems, and instructions
US20170003966A1 (en) * 2015-06-30 2017-01-05 Microsoft Technology Licensing, Llc Processor with instruction for interpolating table lookup values
GB2540943B (en) * 2015-07-31 2018-04-11 Advanced Risc Mach Ltd Vector arithmetic instruction
CN105159766B (zh) * 2015-08-31 2018-05-25 安一恒通(北京)科技有限公司 数据的同步访问方法和同步访问装置
US11126439B2 (en) 2019-11-15 2021-09-21 Apple Inc. SIMD operand permutation with selection from among multiple registers

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2840686B2 (ja) 1989-12-28 1998-12-24 ソニー株式会社 画像処理装置
JP3251421B2 (ja) 1994-04-11 2002-01-28 株式会社日立製作所 半導体集積回路
GB9509983D0 (en) * 1995-05-17 1995-07-12 Sgs Thomson Microelectronics Replication of data
US5668638A (en) 1996-06-27 1997-09-16 Xerox Corporation Error diffusion method with symmetric enhancement
JPH1115801A (ja) * 1997-06-24 1999-01-22 Sony Corp データ演算装置および方法、並びに伝送媒体
EP3073388A1 (en) 1998-03-18 2016-09-28 Koninklijke Philips N.V. Data processing device and method of computing the cosine transform of a matrix
US6212618B1 (en) * 1998-03-31 2001-04-03 Intel Corporation Apparatus and method for performing multi-dimensional computations based on intra-add operation
US6041404A (en) * 1998-03-31 2000-03-21 Intel Corporation Dual function system and method for shuffling packed data elements
US6115812A (en) * 1998-04-01 2000-09-05 Intel Corporation Method and apparatus for efficient vertical SIMD computations
JP3922859B2 (ja) * 1999-12-28 2007-05-30 株式会社リコー 画像処理装置、画像処理方法およびその方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体
GB2362731B (en) * 2000-05-23 2004-10-06 Advanced Risc Mach Ltd Parallel processing of multiple data values within a data word
US7155601B2 (en) * 2001-02-14 2006-12-26 Intel Corporation Multi-element operand sub-portion shuffle instruction execution
US7685212B2 (en) * 2001-10-29 2010-03-23 Intel Corporation Fast full search motion estimation with SIMD merge instruction
US7558816B2 (en) * 2001-11-21 2009-07-07 Sun Microsystems, Inc. Methods and apparatus for performing pixel average operations
US7315934B2 (en) 2002-03-06 2008-01-01 Matsushita Electric Industrial Co., Ltd. Data processor and program for processing a data matrix
JP4020804B2 (ja) * 2002-03-06 2007-12-12 松下電器産業株式会社 データ処理装置
US7392368B2 (en) * 2002-08-09 2008-06-24 Marvell International Ltd. Cross multiply and add instruction and multiply and subtract instruction SIMD execution on real and imaginary components of a plurality of complex data elements
GB2409063B (en) * 2003-12-09 2006-07-12 Advanced Risc Mach Ltd Vector by scalar operations

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7814296B2 (en) 2008-05-07 2010-10-12 Electronics And Telecommunications Research Institute Arithmetic units responsive to common control signal to generate signals to selectors for selecting instructions from among respective program memories for SIMD / MIMD processing control

Also Published As

Publication number Publication date
JP6239544B2 (ja) 2017-11-29
CN101052947A (zh) 2007-10-10
JP2015133132A (ja) 2015-07-23
EP1812849B1 (en) 2010-12-29
EP1812849B8 (en) 2011-02-16
US8856494B2 (en) 2014-10-07
DE602005025677D1 (de) 2011-02-10
JP5748935B2 (ja) 2015-07-15
US20090083524A1 (en) 2009-03-26
JP2008519349A (ja) 2008-06-05
US8122227B2 (en) 2012-02-21
ATE493703T1 (de) 2011-01-15
US20120124334A1 (en) 2012-05-17
EP1812849A1 (en) 2007-08-01
KR101239304B1 (ko) 2013-03-05
WO2006048828A1 (en) 2006-05-11

Similar Documents

Publication Publication Date Title
KR101239304B1 (ko) Simd 명령을 지원하는 프로그램 가능한 데이터 처리회로
US6467036B1 (en) Methods and apparatus for dynamic very long instruction word sub-instruction selection for execution time parallelism in an indirect very long instruction word processor
US8595280B2 (en) Apparatus and method for performing multiply-accumulate operations
JP3149348B2 (ja) 代理命令を用いる並列処理システム及び方法
JP3541669B2 (ja) 演算処理装置
JP7253492B2 (ja) データ処理装置における乗累算
US7308559B2 (en) Digital signal processor with cascaded SIMD organization
US20180307489A1 (en) Apparatus and method for performing multiply-and-accumulate-products operations
JPS61160176A (ja) ベクトル処理装置
JP5052713B2 (ja) 条件付き命令を備えるベクトルデータプロセッサ
KR19980041758A (ko) 축소 데이타 경로 폭을 갖는 2-비트 부스 곱셈기
KR102295677B1 (ko) 연속적인 데이터 병렬처리가 가능한 병렬 처리장치
US11106465B2 (en) Vector add-with-carry instruction
US7793072B2 (en) Vector execution unit to process a vector instruction by executing a first operation on a first set of operands and a second operation on a second set of operands
JP2018005369A (ja) 演算処理装置及び演算処理装置の制御方法
EP1499956B1 (en) Method and apparatus for swapping the contents of address registers
US8200945B2 (en) Vector unit in a processor enabled to replicate data on a first portion of a data bus to primary and secondary registers
US20040243788A1 (en) Vector processor and register addressing method
KR102358612B1 (ko) 연속적인 데이터 병렬처리가 가능한 병렬 처리장치
JP2019519864A (ja) ベクトルレジスタのアクセス
WO2008077803A1 (en) Simd processor with reduction unit
WO2023242531A1 (en) Technique for performing outer product operations
JP3547316B2 (ja) プロセッサ
CN115993951A (zh) 用于重用乘法累加运算的矩阵乘法的装置、方法和系统
JPH0758459B2 (ja) マイクロプログラム制御装置

Legal Events

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

Payment date: 20160127

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20170201

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20180201

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20190129

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20200129

Year of fee payment: 8