KR100831472B1 - 데이터 셔플링을 위한 방법 및 장치 - Google Patents

데이터 셔플링을 위한 방법 및 장치 Download PDF

Info

Publication number
KR100831472B1
KR100831472B1 KR20057025313A KR20057025313A KR100831472B1 KR 100831472 B1 KR100831472 B1 KR 100831472B1 KR 20057025313 A KR20057025313 A KR 20057025313A KR 20057025313 A KR20057025313 A KR 20057025313A KR 100831472 B1 KR100831472 B1 KR 100831472B1
Authority
KR
South Korea
Prior art keywords
data
operand
shuffle
zero
data element
Prior art date
Application number
KR20057025313A
Other languages
English (en)
Other versions
KR20060040611A (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 KR20060040611A publication Critical patent/KR20060040611A/ko
Application granted granted Critical
Publication of KR100831472B1 publication Critical patent/KR100831472B1/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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • 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/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
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/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
    • 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
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • 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/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/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]
    • 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/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion

Abstract

데이터를 셔플링하는 방법, 장치 및 프로그램 수단이 제공된다. 일 실시예의 방법은 L개의 데이터 요소의 집합을 갖는 제1 피연산자 및 L개의 제어 요소의 집합을 갖는 제2 피연산자를 수신하는 단계를 포함한다. 각각의 제어 요소에 대해, 그의 영으로 플러시(flush to zero) 필드가 설정되어 있지 않은 경우, 개별적인 제어 요소에 의해 지정된 제1 피연산자 데이터 요소로부터의 데이터가 연관된 결과 데이터 요소 위치로 셔플링되고, 그의 영으로 플러시 필드가 설정되어 있는 경우, 연관된 결과 데이터 요소 위치에 영(zero)이 삽입된다.
Figure R1020057025313
마이크로프로세서, 데이터 셔플, 마스크, SIMD

Description

데이터 셔플링을 위한 방법 및 장치{METHOD AND APPARATUS FOR SHUFFLING DATA}
본 특허 출원은 2001년 10월 29일자로 출원된 발명의 명칭이 "콘텐츠 데이터의 효율적인 필터링 및 콘벌루션을 위한 장치 및 방법(An Apparatus And Method For Efficient Filtering And Convolution Of Content Data)"인 미국 특허 출원 제09/952,891호의 일부 계속 출원이다.
본 출원은 2003년 6월 30일자로 출원된 동시 계류 중인 발명의 명칭이 "SIMD 명령어를 사용하는 병렬 테이블 룩업을 위한 방법 및 장치(Method And Apparatus For Parallel Table Lookup Using SIMD Instructions)"인 미국 특허 출원 제 / , 호, 그리고 2003년 6월 30일자로 출원된 발명의 명칭이 "다수의 레지스터 간에 데이터를 재정렬하기 위한 방법 및 장치(Method And Apparatus For Rearranging Data Between Multiple Registers)"인 동시 계류 중인 미국 특허 출원 제 / , 호에 관한 것이다.
본 발명은 일반적으로 마이크로프로세서 및 컴퓨터 시스템에 관한 것이다. 보다 상세하게는, 본 발명은 데이터를 셔플링하기 위한 방법 및 장치에 관한 것이다.
컴퓨터 시스템이 우리 사회에 점점 널리 보편화되고 있다. 컴퓨터의 프로세싱 능력은 광범위한 직업의 근로자들의 효율성 및 생산성을 향상시켰다. 컴퓨터의 구매 및 소유 비용이 계속하여 떨어짐에 따라, 더 많은 소비자가 더 새롭고 더 빠른 시스템(machine)을 이용할 수 있게 되었다. 게다가, 많은 사람이 자유로움으로 인해 노트북 컴퓨터를 사용하고 있다. 모바일 컴퓨터는 사용자가 사무실을 떠나거나 여행을 할 때 그의 데이터 및 작업을 용이하게 들고다닐 수 있게 해준다. 이 시나리오는 마케팅 직원, 회사 중역 및 심지어 학생의 경우에도 흔히 있는 일이다.
프로세서 기술이 진보함에 따라, 더욱 새로운 소프트웨어 코드도 역시 이들 프로세서를 갖는 시스템(machine) 상에서 실행되기 위해 생성되고 있다. 사용자는 일반적으로 사용되고 있는 소프트웨어의 유형에 상관없이 그의 컴퓨터로부터 더 나은 성능을 기대하고 또 요구한다. 이러한 한가지 문제가 프로세서 내에서 실제로 수행되고 있는 여러 종류의 명령어 및 연산으로부터 발생할 수 있다. 어떤 유형의 연산은 연산의 복잡성 및/또는 필요한 회로의 유형에 기초하여 완료하는데 많은 시간을 필요로 한다. 이것은 어떤 복잡한 연산이 프로세서 내에서 실행되는 방법을 최적화할 기회를 제공한다.
미디어 애플리케이션은 10년 넘도록 마이크로프로세서 개발을 주도하고 있다. 실제로, 최근의 대부분의 컴퓨팅 업그레이드는 미디어 애플리케이션에 의해 주도되어 왔다. 이들 업그레이드는 주로 소비자 부문에서 있었지만, 기업 부문에서도 역시 교육 및 통신 목적이 강화된 엔터테인먼트를 위해 상당히 진보하였다. 그럼에도 불구하고, 장래의 미디어 애플리케이션은 훨씬 더 높은 계산 요구 사항을 필요로 한다. 그 결과, 앞으로의 개인 컴퓨팅 경험은 오디오-비주얼 효과에서 훨씬 더 풍부해질 뿐만 아니라 사용하기 더 쉬워질 것이며, 보다 중요한 것은 컴퓨팅이 통신과 융합될 것이라는 점이다.
따라서, 이미지의 디스플레이는 물론 오디오 및 비디오 데이터의 재생은 현재 컴퓨팅 장치에 대하여 점점 더 보편화된 애플리케이션이 되었다. 필터링 및 컨벌루션 연산은 이미지 오디오 및 비디오 데이터 등의 콘텐츠 데이터에 대해 수행되는 가장 통상적인 연산 중 일부이다. 이러한 연산은 많은 계산을 필요로 하지만, 예를 들어 SIMD(single instruction multiple data) 레지스터 등의 여러 가지 데이터 저장 장치를 사용하는 효율적인 구현을 통해 이용될 수 있는 고도의 데이터 병렬 기능(parallelism)을 제공한다. 다수의 현재의 아키텍처도 역시 명령어 처리량(instruction throughput)을 최소화시키고 또 산술 연산을 위한 데이터를 주문하는 데 걸리는 클록 사이클의 수를 상당히 증가시키는 불필요한 데이터 유형 변경을 필요로 한다.
데이터를 셔플링하기 위한 방법 및 장치가 개시되어 있다. SIMD 명령어를 사용하는 병렬 테이블 룩업을 위한 방법 및 장치도 역시 기술되어 있다. 다수의 레지스터 간에 데이터를 재정렬하기 위한 방법 및 장치도 역시 개시되어 있다. 본 명세서에 기술된 실시예들은 마이크로프로세서의 컨텍스트에서 기술되어 있지만, 그에 한정되는 것은 아니다. 이하의 실시예들이 프로세서와 관련하여 기술되어 있지만, 다른 실시예들은 다른 유형의 집적 회로 및 로직 장치에 적용가능하다. 본 발명의 동일한 기술 및 개시 내용이 더 높은 파이프라인 처리량 및 개선된 성능으로부터 이익을 얻을 수 있는 다른 유형의 회로 또는 반도체 장치에 용이하게 적용될 수 있다. 본 발명의 개시 내용은 데이터 처리를 수행하는 임의의 프로세서 또는 시스템(machine)에 적용가능하다. 그렇지만, 본 발명은 256비트, 128비트, 64비트, 32비트 또는 16비트 연산을 수행하는 프로세서 또는 시스템(machine)에 한정되지 않으며 데이터의 셔플링이 요구되는 임의의 프로세서 및 시스템(machine)에 적용될 수 있다.
이하의 설명에서, 설명의 목적상, 본 발명의 철저한 이해를 제공하기 위해 여러 가지 구체적인 상세가 기술되어 있다. 그렇지만, 당업자라면 이들 구체적인 상세가 본 발명을 실시하는 데 필요하지는 않음을 잘 알 것이다. 다른 예에서, 본 발명을 불명료하게 하지 않도록 공지의 전기 구조 및 회로가 상세하게 기술되어 있지 않다. 게다가, 이하의 설명은 예를 제공하며, 첨부 도면은 설명을 위해 여러 가지 예를 나타낸 것이다. 그렇지만, 이들 예는 한정적인 의미로 해석되어서는 안 되는데, 그 이유는 이들이 본 발명의 모든 가능한 구현의 전체 리스트를 제공하기보다는 단지 본 발명의 예를 제공하기 위한 것에 불과하기 때문이다.
일 실시예에서, 본 발명의 방법은 시스템(machine) 실행가능 명령어로 구현된다. 명령어는 명령어로 프로그램되어 있는 범용 또는 전용 프로세서로 하여금 본 발명의 단계들을 수행하게 하는 데 사용될 수 있다. 다른 대안으로서, 본 발명의 단계들은 이 단계들을 수행하는 하드와이어된 로직을 포함하는 특정의 하드웨어 컴포넌트에 의해, 또는 프로그램된 컴퓨터 컴포넌트 및 커스텀 하드웨어 컴포넌트의 임의의 조합에 의해 수행될 수 있다.
이하의 예들이 실행 유닛 및 로직 회로의 컨텍스트에서 명령어 처리 및 배포에 대해 기술하고 있지만, 본 발명의 다른 실시예들은 소프트웨어에 의해 달성될 수 있다. 본 발명은 본 발명에 따라 프로세스를 수행하도록 컴퓨터(또는 다른 전자 장치)를 프로그램하는 데 사용될 수 있는 명령어를 그 위에 저장하고 있는 시스템(machine) 또는 컴퓨터 판독가능 매체를 포함할 수 있는 컴퓨터 프로그램 제품 또는 소프트웨어로서 제공될 수 있다. 이러한 소프트웨어는 시스템 내의 메모리 내부에 저장될 수 있다. 이와 유사하게, 코드는 네트워크를 통해 또는 다른 컴퓨터 판독가능 매체를 통해 배포될 수 있다. 따라서, 시스템(machine) 판독가능 매체는 시스템(machine)(예를 들어, 컴퓨터)에 의해 판독가능한 형태로 정보를 저장 또는 전달하는 임의의 메커니즘을 포함할 수 있지만, 플로피 디스켓, 광학 디스크, 콤팩트 디스크, 판독 전용 메모리(CD-ROM) 및 자기 광학 디스크, 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 소거가능 프로그램가능 판독 전용 메모리(EPROM), 전기적 소거가능 프로그램가능 판독 전용 메모리(EEPROM), 자기 또는 광학 카드, 플래시 메모리, 인터넷을 통한 전송, 전기, 광학, 음향 또는 다른 형태의 전파 신호(예를 들어, 반송파, 적외선 신호, 디지털 신호, 기타 등등) 또는 기타 등등에 제한되지 않는다.
따라서, 컴퓨터 판독가능 매체는 전자 명령어 또는 정보를 시스템(machine)(예를 들어, 컴퓨터)에 의해 판독가능한 형태로 저장 또는 전달하는 데 적당한 임의의 유형의 매체/시스템(machine) 판독가능 매체를 포함한다. 게다가, 본 발명은 또한 컴퓨터 프로그램 제품으로서 다운로드될 수 있다. 그 자체로서, 프로그램은 원격 컴퓨터(예를 들어, 서버)로부터 요청측 컴퓨터(예를 들어, 클라이언트)로 전송될 수 있다. 프로그램의 전송은 통신 링크(예를 들어, 모뎀, 네트워크 연결 또는 기타 등등)를 통해 반송파 또는 다른 전파 매체에 구현된 전기, 광학, 음향 또는 다른 형태의 데이터 신호를 통할 수 있다.
게다가, 본 발명에 따른 집적 회로 설계의 실시예들은 테이프 또는 다른 시스템(machine) 판독가능 매체 상에 데이터베이스로서 전자 형태로 전달 또는 전송될 수 있다. 예를 들어, 일 실시예에서 전자 형태의 프로세서의 집적 회로 설계는 컴퓨터 컴포넌트를 획득하기 위해 팹(fab)을 통해 처리 또는 제조될 수 있다. 다른 예에서, 전자 형태의 집적 회로 설계는 컴퓨터 컴포넌트를 시뮬레이션하기 위해 시스템(machine)에 의해 처리될 수 있다. 따라서, 어떤 실시예에서 프로세서의 회로 레이아웃 계획 및/또는 설계는 시스템(machine) 판독가능 매체를 통해 배포되거나 회로 내에 제조하기 위해 또는 시스템(machine)에 의해 처리될 때 프로세서를 시뮬레이션하는 집적 회로의 시뮬레이션을 위해 그 위에 구현되어 있을 수 있다. 다른 실시예에서, 시스템(machine) 판독가능 매체는 또한 본 발명에 따른 소정의 기능을 나타내는 데이터를 저장할 수 있다.
최신의 프로세서에서, 다양한 코드 및 명령어를 처리 및 실행하기 위해 다수의 서로 다른 실행 유닛이 사용된다. 모든 명령어가 똑같게 생성되는 것은 아닌데 그 이유는 어떤 것은 더 빨리 완료하는 데 다른 것은 엄청난 수의 클록 사이클을 요할 수 있기 때문이다. 명령어의 처리량이 더 빠를수록, 프로세서의 전체 성능이 더 낫다. 따라서, 동수의 명령어가 가능한 한 빨리 실행되게 하는 것이 유리하게 된다. 그렇지만, 더욱 복잡하고 또 실행 시간 및 프로세서 자원의 관점에서 더 많은 것을 요구하는 어떤 명령어가 있다. 예를 들어, 부동 소수점 명령어, 로드/저장 동작, 데이터 이동, 기타 등등이 있다.
점점 더 많은 컴퓨터 시스템이 인터넷 및 멀티미디어 응용에서 사용됨에 따라, 시간이 지남에 따라 부가의 프로세서 지원이 도입되었다. 예를 들어, SIMD(Single Instruction, Multiple Data) 정수/부동소수점 명령어 및 SSE(Streaming SIMD Extension)은 특정의 프로그램 작업을 실행하는 데 요구되는 명령어의 전체 개수를 감소시키는 명령어이다. 이들 명령어는 다수의 데이터 요소에 대해 병렬로 연산함으로써 소프트웨어 성능을 가속시킬 수 있다. 그 결과, 비디오, 음성, 이미지/사진 프로세싱을 비롯한 광범위한 응용에서 성능 이득이 달성될 수 있다. 마이크로프로세서 및 유사한 유형의 로직 회로에서의 SIMD 명령어의 구현은 보통 많은 문제를 수반한다. 게다가, SIMD 연산의 복잡성은 데이터를 정확하게 프로세싱 및 처리하기 위해 종종 부가의 회로를 필요로 한다.
본 발명의 실시예들은 SIMD 관련 하드웨어를 사용하는 알고리즘으로서 영으로 플러시(flush to zero) 기능을 갖는 패킹된 바이트 셔플 명령어를 구현하는 방법을 제공한다. 일 실시예에서, 이 알고리즘은 각각의 데이터 요소 위치에 대한 제어 마스크의 값에 기초하여 특정의 레지스터 또는 메모리 장소로부터의 데이터를 셔플링하는 개념에 기초한다. 패킹된 바이트 셔플의 실시예들은 데이터를 재정렬하는 많은 서로 다른 응용에서 요구되는 명령어의 개수를 감소시키는 데 사용될 수 있다. 패킹된 바이스 셔플 명령어는 또한 비정렬 로드(unaligned load)를 갖는 임의의 응용에서 사용될 수 있다. 이 셔플 명령어의 실시예들은 효율적인 곱셈-누적 연산(multiply-accumulate operation)을 위해 데이터를 정렬하는 데 필터링을 위해 사용될 수 있다. 이와 유사하게, 패킹된 셔플 명령어는 데이터 및 작은 룩업 테이블을 순서화하는 데 비디오 및 암호화 응용에서 사용될 수 있다. 이 명령어는 2개 이상의 레지스터로부터의 데이터를 혼합(mix)하는 데 사용될 수 있다. 따라서, 본 발명에 따른 영으로 플러시(flush to zero) 기능 알고리즘을 갖는 패킹된 셔플의 실시예들은 전체 성능을 심각하게 악화시키지 않고 SIMD 연산을 효율적으로 지원하기 위해 프로세서에서 구현될 수 있다.
본 발명의 실시예들은 임의의 크기의 데이터를 효율적으로 순서화 및 정렬하기 위한 영으로 플러시 기능을 갖는 패킹된 데이터 셔플 명령어(PSHUFB)를 제공한다. 일 실시예에서, 데이터는 바이트 입도(byte granularity)를 갖는 레지스터에서 셔플링 또는 재정렬된다. 바이트 셔플 동작은 셔플 동작 동안에 더 큰 데이터 내의 바이트의 상대 위치를 유지함으로써 바이트보다 큰 데이터 크기를 순서화한다. 게다가, 바이트 셔플 동작은 SIMD 레지스터 내의 데이터의 상대 위치를 변경시킬 수 있고 또한 데이터를 복제할 수 있다. 이 PSHUFB 명령어는 제2 소스 레지스터 내의 셔플 제어 바이트의 내용에 따라 제1 소스 레지스터로부터의 바이트를 셔플링한다. 명령어가 데이터를 대체시키지만, 셔플 마스크는 이 실시예의 이 셔플 동작 동안에 영향을 받지 않고 또 변경되지도 않은 채로 있다. 한 구현에서의 니모닉(mnemonic)은 "PSHUFB register 1, register 2/memory"이며, 여기서 제1 및 제2 피연산자는 SIMD 레지스터이다. 그렇지만, 제2 피연산자의 레지스터는 또한 메모리 장소로 대체될 수 있다. 제1 피연산자는 셔플링을 위한 소스 데이터를 포함한다. 이 실시예에서, 제1 피연산자에 대한 레지스터는 또한 목적지 레지스터이다. 본 발명에 따른 실시예들은 또한 선택된 바이트의 위치를 변경시키는 것 이외에 그 바이트를 0으로 설정하는 기능을 포함한다.
제2 피연산자는 셔플 패턴을 지정하기 위한 셔플 제어 마스크 바이트의 집합을 포함한다. 소스 데이터 요소를 선택하는 데 사용되는 비트의 개수는 소스 피연산자 내의 데이터 요소의 개수의 log2이다. 예를 들어, 128비트 레지스터 실시예에서의 바이트의 개수는 16이다. 16의 log2는 4이다. 따라서, 4비트, 즉 니블(nibble)이 필요하게 된다. 이하의 코드에서의 [3:0] 인덱스는 4비트를 말한다. 이 실시예에서 셔플 제어 바이트의 최상위 비트(MSB), 즉 비트 7이 설정(set)되어 있는 경우, 상수 0이 결과 바이트에 기입된다. 제2 피연산자의 바이트 I의 최하위 니블, 즉 마스크 집합(mask set)이 정수 J를 포함하는 경우, 셔플 명령어는 제1 소스 레지스터의 J번째 바이트로 하여금 목적지 레지스터의 I번째 바이트 위치로 복사되게 한다. 이하는 128비트 피연산자에 대한 패킹된 바이트 셔플 동작의 일 실시예에 대한 예시적인 의사 코드이다.
Figure 112005077870918-pct00001
이와 유사하게, 이것은 64비트 피연산자에 대한 패킹된 바이트 셔플 동작의 다른 실시예의 예시적인 의사 코드이다.
Figure 112005077870918-pct00002
유의할 점은 이 64비트 레지스터 실시예에서 마스크의 하위 3비트가 사용되는 것은 64비트 레지스터에 8개의 바이트가 있기 때문이라는 것이다. 8의 log2는 3이다. 상기 코드에서의 [2:0] 인덱스는 3비트를 말한다. 대체 실시예에서, 마스크 내의 비트의 개수는 소스 데이터에서 이용가능한 데이터 요소의 개수에 대응하기 위해 변할 수 있다. 예를 들어, 하위 5비트를 갖는 마스크는 256비트 레지스터 내의 데이터 요소를 선택하는 데 사용된다.
현재, SIMD 레지스터에서 데이터를 재정렬하는 것은 얼마간 어렵고 지루하다. 어떤 알고리즘은 그 연산을 실행하기 위한 명령어의 실제 개수보다 산술 연산을 위해 데이터를 정렬하는 데 더 많은 명령어를 필요로 한다. 본 발명에 따른 패킹된 바이트 셔플 명령어의 실시예를 구현함으로써, 데이터 재정렬을 달성하는 데 필요한 명령어의 개수는 급격히 감소될 수 있다. 예를 들어, 패킹된 바이트 셔플 명령어의 일 실시예는 한 바이트의 데이터를 128비트 레지스터의 모든 위치로 브로드캐스트할 수 있다. 레지스터 내의 데이터를 브로드캐스트하는 것은 단일의 데이터 항목에 많은 계수가 곱해지는 필터링 응용에서 종종 사용된다. 이 명령어가 없는 경우, 데이터 바이트는 그의 소스로부터 필터링되고 최하위 바이트 위치로 시프트되어야만 한다. 이어서, 그 단일의 바이트는 먼저 바이트로서 복제되고, 이어서 그 2바이트는 더블워드(doubleword)를 형성하기 위해 다시 복제되고, 그 더블워드는 최종적으로 쿼드워드(quadword)를 형성하기 위해 복제된다. 이들 연산 모두는 단일의 패킹된 셔플 명령어로 대체될 수 있다.
이와 유사하게, 빅 엔디안(big endian) 포맷과 리틀 엔디안(little endian) 포맷 간의 변경에서와 같이, 128비트 레지스터 내의 모든 바이트를 역순으로 하는 것은 단일의 패킹된 셔플 명령어로 용이하게 수행될 수 있다. 패킹된 셔플 명령어가 사용되지 않는 경우 심지어 이들 아주 간단한 패턴이 많은 수의 명령어를 필요로 하는 반면, 복잡한 또는 랜덤한 패턴은 훨씬 더 비효율적인 명령어 루틴을 요구한다. SIMD 레지스터 내의 랜덤한 바이트를 재정렬하는 가장 간단한 해결책은 이들을 버퍼에 기록한 다음에 정수 바이트 읽기/쓰기를 사용하여 이들을 재정렬하고 SIMD 레지스터 내로 이들을 다시 읽어들이는 것이다. 이들 데이터 처리 모두는 긴 코드 시퀀스를 요구하지만, 단일의 패킹된 셔플 명령어로 충분할 수 있다. 요구되는 명령어의 개수를 감소시킴으로써, 동일한 결과를 생성하는 데 필요한 클록 사이클의 개수가 크게 감소된다. 본 발명의 실시예들은 또한 SIMD 명령어로 테이블 내의 다수의 값에 액세스하는 데 셔플 명령어를 사용한다. 테이블이 레지스터 크기의 2배인 경우조차도, 본 발명에 따른 알고리즘은 정수 연산에서와 같이 명령어 당 하나의 데이터 요소보다 더 빠른 속도로 데이터 요소에 액세스할 수 있다.
본 발명은 유사한 참조 번호가 유사한 구성요소를 나타내는 첨부 도면에 제한이 아닌 예로서 예시되어 있다.
도 1a는 본 발명의 일 실시예에 따라 데이터를 셔플링하기 위한 명령어를 실행하는 실행 유닛을 포함하는 프로세서를 구비한 컴퓨터 시스템의 블록도.
도 1b는 본 발명의 대체 실시예에 따른 다른 예시적인 컴퓨터 시스템의 블록도.
도 1c는 본 발명의 다른 대체 실시예에 따른 또 다른 예시적인 컴퓨터 시스템의 블록도.
도 2는 본 발명에 따라 데이터 셔플 동작을 수행하는 로직 회로를 포함하는 일 실시예의 프로세서의 마이크로-아키텍처의 블록도.
도 3a 내지 도 3c는 본 발명의 여러 가지 실시예에 따른 셔플 마스크를 나타낸 도면.
도 4a는 본 발명의 일 실시예에 따른 멀티미디어 레지스터 내의 여러 가지 패킹된 데이터 타입 표현을 나타낸 도면.
도 4b는 대체 실시예에 따른 패킹된 데이터 타입을 나타낸 도면.
도 4c는 셔플 명령어에 대한 연산 인코딩(operation encoding)(opcode) 포맷의 일 실시예를 나타낸 도면.
도 4d는 대안의 연산 인코딩 포맷을 나타낸 도면.
도 4e는 다른 대안의 연산 인코딩 포맷을 나타낸 도면.
도 5는 본 발명에 따른 셔플 마스크에 기초한 데이터 피연산자에 대한 셔플 동작을 수행하는 로직의 일 실시예의 블록도.
도 6은 본 발명에 따른 데이터 셔플링 연산을 수행하는 회로의 일 실시예의 블록도.
도 7은 본 발명의 일 실시예에 따른 바이트 폭 데이터 요소에 대한 데이터 셔플 동작을 나타낸 도면.
도 8은 본 발명의 다른 실시예에 따른 워드 폭 데이터 요소에 대한 데이터 셔플 동작을 나타낸 도면.
도 9는 데이터를 셔플링하는 방법의 일 실시예를 나타낸 흐름도.
도 10a 내지 도 10h는 SIMD 명령어를 사용하는 병렬 테이블 룩업 알고리즘의 동작을 나타낸 도면.
도 11은 SIMD 명령어를 사용하여 테이블 룩업을 수행하는 방법의 일 실시예를 나타낸 흐름도.
도 12는 테이블 룩업을 수행하는 방법의 다른 실시예를 나타낸 흐름도.
도 13a 내지 도 13c는 다수의 레지스터 간에 데이터를 재정렬하는 알고리즘을 나타낸 도면.
도 14는 다수의 레지스터 간에 데이터를 재정렬하는 방법의 일 실시예를 나타낸 흐름도.
도 15a 내지 도 15k는 인터리빙된 데이터를 생성하기 위해 다수의 레지스터 간에 데이터를 셔플링하는 알고리즘을 나타낸 도면.
도 16은 인터리빙된 데이터를 생성하기 위해 다수의 레지스터 간에 데이터를 셔플링하는 방법의 일 실시예를 나타낸 흐름도.
도 1a는 본 발명의 일 실시예에 따라 데이터를 셔플링하기 위해 명령어를 실행하는 실행 유닛을 포함하는 프로세서를 구비하는 예시적인 컴퓨터 시스템의 블록도이다. 시스템(100)은 본 명세서에 기술된 실시예에서와 같이, 본 발명에 따라 데이터를 셔플링하기 위한 알고리즘을 수행하는 로직을 포함하는 실행 유닛을 이용하는 프로세서(102) 등의 컴포넌트를 포함한다. 시스템(100)은 미국 캘리포니아주 산타 클라라 소재의 인텔사로부터 입수가능한 펜티엄(PENTIUM)
Figure 112005077870918-pct00003
III, 펜티엄
Figure 112005077870918-pct00004
4, 셀러론(Celeron)
Figure 112005077870918-pct00005
, 제온(Xeon)™, 아이테니엄(Itanium)
Figure 112005077870918-pct00006
, XScale™, 및/또는 StrongARM™ 마이크로프로세서에 기반한 프로세싱 시스템을 나타내지만, 다른 시스템(다른 마이크로프로세서를 갖는 PC, 엔지니어링 워크스테이션, 셋톱 박스 및 기타 등등을 포함함)도 역시 사용될 수 있다. 일 실시예에서, 샘플 시스템(100)은 미국 워싱턴주 레드몬드 소재의 마이크로소프트사로부터 입수가능한 WINDOWS™ 오퍼레이팅 시스템의 한 버전을 실행할 수 있지만, 다른 오퍼레이팅 시스템(예를 들어, UNIX 및 Linux), 내장된 소프트웨어, 및/또는 그래픽 사용자 인터페이스도 역시 사용될 수 있다. 따라서, 본 발명은 하드웨어 회로 및 소프트웨어의 임의의 특정의 조합에 한정되지 않는다.
본 발명은 컴퓨터 시스템에 한정되지 않는다. 본 발명의 대체 실시예는 핸드헬드 장치 및 내장된 애플리케이션 등의 다른 장치에서 사용될 수 있다. 핸드헬드 장치의 어떤 예는 셀룰러 전화, 인터넷 프로토콜 장치, 디지털 카메라, 개인 휴 대 단말기(PDA), 및 핸드헬드 PC를 포함한다. 내장된 애플리케이션은 마이크로 컨트롤러, 디지털 신호 처리기(DSP), SoC(system on a chip), 네트워크 컴퓨터(NetPC), 셋톱 박스, 네트워크 허브, 원거리 통신망(WAN) 스위치 또는 피연산자에 대해 정수 셔플 동작을 수행하는 임의의 다른 시스템을 포함할 수 있다. 게다가, 어떤 아키텍처는 멀티미디어 애플리케이션의 효율성을 향상시키기 위해 명령어가 몇 개의 데이터에 대해 동시에 연산할 수 있게 해주도록 구현되어 있다. 데이터의 유형 및 볼륨이 증가함에 따라, 컴퓨터 및 그의 프로세서는 데이터를 보다 효율적인 방법으로 처리하기 위해 향상되어야만 한다.
도 1a는 본 발명에 따라 데이터 셔플 알고리즘을 수행하는 하나 이상의 실행 유닛(108)을 포함하는 프로세서(102)를 구비한 컴퓨터 시스템(100)의 블록도이다. 본 실시예는 단일 프로세서 데스크톱 또는 서버 시스템의 관점에서 기술되어 있지만, 대체 실시예는 멀티프로세서 시스템 내에 포함될 수 있다. 시스템(100)은 허브 아키텍처의 예이다. 컴퓨터 시스템(100)은 데이터 신호를 처리하는 프로세서를 포함한다. 프로세서(102)는 CISC(complex instruction set computer) 마이크로프로세서, RISC(reduced instruction set computing) 마이크로프로세서, VLIW(very long instruction word) 마이크로프로세서, 명령어 집합의 조합을 구현하는 프로세서 또는 예를 들어 디지털 신호 처리기 등의 임의의 다른 프로세서 장치일 수 있다. 프로세서(102)는 프로세서(102)와 시스템(100) 내의 다른 컴포넌트 간에 데이터 신호를 전송할 수 있는 프로세서 버스(110)에 연결되어 있다. 시스템(100)의 구성요소는 당업자라면 잘 알고 있는 그의 종래의 기능을 수행한다.
일 실시예에서, 프로세서(102)는 1차(L1) 내부 캐시 메모리(104)를 포함한다. 아키텍처에 따라, 프로세서(102)는 단일의 내부 캐시 또는 다중 레벨의 내부 캐시를 가질 수 있다. 다른 대안으로서, 다른 실시예에서, 캐시 메모리는 프로세서(102)의 외부에 존재할 수 있다. 다른 실시예들은 또한 특정의 구현 및 필요성에 따라 내부 캐시 및 외부 캐시 둘 다의 조합을 포함할 수 있다. 레지스터 파일(106)은 정수 레지스터, 부동소수점 레지스터, 상태 레지스터, 및 명령어 포인터 레지스터를 비롯한 여러 가지 레지스터에 서로 다른 유형의 데이터를 저장할 수 있다.
정수 및 부동소수점 연산을 수행하는 로직을 비롯한 실행 유닛(108)도 역시 프로세서(102)에 존재할 수 있다. 프로세서(102)는 또한 어떤 매크로명령어(macroinstruction)에 대한 마이크로코드(microcode)를 저장하는 마이크로코드(ucode) ROM을 포함한다. 이 실시예에서, 실행 유닛(108)은 패킹된 명령어 집합(109)을 처리하는 로직을 포함한다. 일 실시예에서, 패킹된 명령어 집합(109)은 데이터를 조직화하는 패킹된 셔플 명령어를 포함한다. 범용 프로세서(102)의 명령어 집합에 패킹된 명령어 집합(109)을 포함함으로써, 명령어를 실행하는 관련 회로와 함께, 많은 멀티미디어 애플리케이션에 의해 사용되는 연산은 범용 프로세서(102)에서 패킹된 데이터를 사용하여 수행될 수 있다. 따라서, 많은 멀티미디어 애플리케이션은 패킹된 데이터에 대한 연산을 수행하기 위해 프로세서의 데이터 버스의 전체 폭을 사용함으로써 가속화될 수 있고 또 보다 효율적으로 실행될 수 있다. 이렇게 함으로써 한번에 하나의 데이터 요소씩 하나 이상의 연산을 수행하기 위해 더 작은 단위의 데이터를 프로세서의 데이터 버스를 통해 전송할 필요가 없게 될 수 있다.
실행 유닛(108)의 대체 실시예는 또한 마이크로컨트롤러, 내장 프로세서, 그래픽 장치, DSP, 및 다른 유형의 로직 회로에서 사용될 수 있다. 시스템(100)은 메모리(120)를 포함한다. 메모리(120)는 DRAM(dynamic random access memory) 장치, SRAM(static random access memory) 장치, 플래시 메모리 장치, 또는 다른 메모리 장치일 수 있다. 메모리(120)는 프로세서(102)에 의해 실행될 수 있는 데이터 신호로 표현된 명령어 및/또는 데이터를 저장할 수 있다.
시스템 로직 칩(116)은 프로세서 버스(110) 및 메모리(120)에 연결되어 있다. 예시된 실시예에서의 시스템 로직 칩(116)은 메모리 컨트롤러 허브(memory controller hub, MCH)이다. 프로세서(102)는 프로세서 버스(110)를 통해 MCH(116)와 통신할 수 있다. MCH(116)는 명령어 및 데이터 저장을 위해 또 그래픽 명령어, 데이터 및 텍스처의 저장을 위해 메모리에 고대역폭 메모리 경로(118)를 제공한다. MCH(116)는 프로세서(102), 메모리(120) 및 시스템(100) 내의 다른 컴포넌트 간에 데이터 신호를 보내고 또 프로세서 버스(110), 메모리(120) 및 시스템 I/O(122) 간에 데이터 신호를 브리지(bridge)하기 위한 것이다. 어떤 실시예에서, 시스템 로직 칩(116)은 그래픽 컨트롤러(112)와 연결하기 위한 그래픽 포트를 제공할 수 있다. MCH(116)는 메모리 인터페이스(118)를 통해 메모리(120)에 연결되어 있다. 그래픽 카드(112)는 AGP(Accelerated Graphics Port) 상호연결부(114)를 통해 MCH(116)에 연결되어 있다.
시스템(100)은 MCH(116)를 I/O 컨트롤러 허브(ICH)(130)에 연결시키기 위해 전용 허브 인터페이스 버스(122)를 사용한다. ICH(130)는 로컬 I/O 버스를 통해 어떤 I/O 장치로의 직접 연결을 제공한다. 로컬 I/O 버스는 주변 장치를 메모리(120), 칩셋 및 프로세서(102)에 연결시키는 고속 I/O 버스이다. 어떤 예로는 오디오 컨트롤러, 펌웨어 허브(플래시 BIOS)(128), 무선 송수신기(126), 데이터 저장소(124), 사용자 입력 및 키보드 인터페이스를 포함하는 레거시 I/O 컨트롤러, USB(Universal Serial Bus) 등의 직렬 확장 포트, 및 네트워크 컨트롤러(134)가 있다. 데이터 저장소(124)는 하드 디스크 드라이브, 플로피 디스크 드라이브, CD-ROM 장치, 플래시 메모리 장치, 또는 다른 대용량 저장 장치를 포함할 수 있다.
시스템의 다른 실시예에서, 셔플 명령어로 알고리즘을 실행하는 실행 유닛은 SoC와 함께 사용될 수 있다. SoC의 일 실시예는 프로세서 및 메모리를 포함한다. 한가지 이러한 시스템에 대한 메모리가 플래시 메모리이다. 플래시 메모리는 프로세서 및 다른 시스템 컴포넌트와 동일한 다이 상에 위치될 수 있다. 그 밖에, 메모리 컨트롤러 또는 그래픽 컨트롤러 등의 다른 로직 블록도 역시 SoC 상에 위치될 수 있다.
도 1b는 본 발명의 원리들을 구현하는 데이터 프로세싱 시스템(140)의 대체 실시예를 나타낸 것이다. 데이터 프로세싱 시스템(140)의 일 실시예는 인텔 XScale™ 기술(월드 와이드 웹 상의 develop.intel.com에 기술되어 있음)을 갖는 Intel
Figure 112005077870918-pct00007
PCA(Intel
Figure 112005077870918-pct00008
Personal Internet Client Architecture) 애플리케이션 프로세서이다. 당업자라면 본 명세서에 기술된 실시예들이 본 발명의 범위를 벗어나지 않고 대안적인 프로세싱 시스템에서 사용될 수 있음을 잘 알 것이다.
컴퓨터 시스템(140)은 셔플을 포함하는 SIMD 연산을 수행할 수 있는 프로세싱 코어(159)를 포함한다. 일 실시예에서, 프로세싱 코어(159)는 CISC, RISC 또는 VLIW 유형 아키텍처(이에 한정되는 것은 아님)를 비롯한 임의의 유형의 아키텍처의 프로세싱 유닛을 나타낸다. 프로세싱 코어(159)는 또한 하나 이상의 프로세스 기술에서 제조하기에 적당할 수 있으며 또 시스템(machine) 판독가능 매체 상에 충분히 상세히 표현됨으로써 상기 제조를 용이하게 해주는 데 적합할 수 있다.
프로세싱 코어(159)는 실행 유닛(142), 레지스터 파일(들)의 집합(145) 및 디코더(144)를 포함한다. 프로세싱 코어(159)는 또한 본 발명의 이해에 필요하지 않은 부가의 회로(도시 생략)를 포함한다. 실행 유닛(142)은 프로세싱 코어(159)에 의해 수신된 명령어를 실행하는 데 사용된다. 일반적인 프로세서 명령어를 인식하는 것 이외에, 실행 유닛(142)은 패킹된 데이터 포맷에 대한 연산을 수행하는 패킹된 명령어 집합(143) 내의 명령어를 인식할 수 있다. 패킹된 명령어 집합(143)은 셔플 동작을 지원하는 명령어를 포함하며, 또한 다른 패킹된 명령어를 포함할 수 있다. 실행 유닛(142)은 내부 버스에 의해 레지스터 파일(145)에 연결되어 있다. 레지스터 파일(145)은 데이터를 비롯한 정보를 저장하기 위한 프로세싱 코어(159) 상의 저장 영역을 나타낸다. 앞서 언급한 바와 같이, 패킹된 데이터를 저장하는 데 사용되는 저장 영역이 중요하지 않음을 잘 알 것이다. 실행 유닛(142)은 디코더(144)에 연결되어 있다. 디코더(144)는 프로세싱 코어(159)에 의해 수신된 명령어를 제어 신호 및/또는 마이크로코드 진입점으로 디코딩하는 데 사용 된다. 이들 제어 신호 및/또는 마이크로코드 진입점에 응답하여, 실행 유닛(142)은 적절한 연산을 수행한다.
프로세싱 코어(159)는 예를 들어 SDRAM(synchronous dynamic random access memory) 컨트롤러(146), SRAM(static random access memory) 컨트롤러(147), 버스트 플래시 메모리 인터페이스(148), PCMCIA/CF(personal computer memory card international association/compact flash) 카드 컨트롤러(149), LCD(liquid crystal display) 컨트롤러(150), DMA(direct memory access) 컨트롤러(151) 및 대안적인 버스 마스터 인터페이스(152)(이에 한정되는 것은 아님)를 포함할 수 있는 여러 가지 다른 시스템 장치와 통신하기 위해 버스(141)와 연결되어 있다. 일 실시예에서, 데이터 프로세싱 시스템(140)은 또한 I/O 버스(153)를 통해 여러 가지 I/O 장치와 통신하기 위한 I/O 브리지(154)를 포함할 수 있다. 이러한 I/O 장치는 예를 들어 UART(universal asynchronous receiver/transmitter)(155), USB(156), 블루투스 무선 UART(157) 및/또는 I/O 확장 인터페이스(158)(이에 한정되는 것은 아님)를 포함할 수 있다.
데이터 프로세싱 시스템(140)의 일 실시예는 모바일, 네트워크 및/또는 무선 통신, 및 셔플 동작을 포함하는 SIMD 연산을 수행할 수 있는 프로세싱 코어(159)를 제공한다. 프로세싱 코어(159)는 Walsh-Hadamard 변환, 고속 푸리에 변환(FFT), 이산 코사인 변환(DCT), 및 이들의 각각의 역변환 등의 이산 변환, 컬러 공간 변환, 비디오 인코드 움직임 추정 또는 비디오 디코드 움직임 보상 등의 압축/복원 기술, 및 펄스 부호 변조(PCM) 등의 변조/복조(MODEM) 기능을 포함하는 여러 가지 오디오, 비디오, 이미징 및 통신 알고리즘으로 프로그램될 수 있다.
도 1c는 SIMD 셔플 동작을 수행할 수 있는 데이터 프로세싱 시스템의 또 다른 대체 실시예를 나타낸 것이다. 한 대체 실시예에 따르면, 데이터 프로세싱 시스템(160)은 메인 프로세서(166), SIMD 코프로세서(161), 캐시 메모리(167), 및 입출력 시스템(168)을 포함할 수 있다. 입출력 시스템(168)은 선택적으로 무선 인터페이스(169)에 연결될 수 있다. SIMD 코프로세서(161)는 데이터 셔플을 비롯한 SIMD 연산을 수행할 수 있다. 프로세싱 코어(170)는 하나 이상의 프로세스 기술에서 제조하기에 적합할 수 있으며, 시스템(machine) 판독가능 매체 상에 충분히 상세히 나타냄으로써, 프로세싱 코어(170)를 포함하는 데이터 프로세싱 시스템(160)의 전부 또는 일부의 제조를 용이하게 해주는 데 적합할 수 있다.
일 실시예에서, SIMD 코프로세서(161)는 실행 유닛(162) 및 레지스터 파일(들)의 집합(164)을 포함한다. 메인 프로세서(165)의 일 실시예는 실행 유닛(162)에 의해 실행하기 위한 SIMD 셔플 명령어를 포함하는 명령어 집합(163)의 명령어를 인식하는 디코더(165)를 포함한다. 대체 실시예에서, SIMD 코프로세서(161)는 또한 명령어 집합(163)의 명령어를 디코딩하는 디코더(165B)의 적어도 일부분을 포함한다. 프로세싱 코어(170)는 또한 본 발명의 이해에 필요하지 않은 부가의 회로(도시 생략)를 포함한다.
동작을 설명하면, 메인 프로세서(166)는 캐시 메모리(167) 및 입출력 시스템(168)과의 상호작용을 비롯한 일반적인 유형의 데이터 프로세싱 동작을 제어하는 데이터 프로세싱 명령어의 스트림을 실행한다. SIMD 코프로세서 명령어는 데이터 프로세싱 명령어의 스트림 내에 내장되어 있다. 메인 프로세서(166)의 디코더(165)는 이들 SIMD 코프로세서 명령어를 부착된 SIMD 코프로세서(161)에 의해 실행되어야만 하는 유형인 것으로 인식한다. 그에 따라, 메인 프로세서(166)는 이들 코프로세서 명령어(또는 SIMD 코프로세서 명령어를 나타내는 제어 신호)를 코프로세서 버스(166)를 통해 발행하며, 이 버스로부터 이들 명령어는 임의의 부착된 SIMD 코프로세서에 의해 수신된다. 이 경우, SIMD 코프로세서(161)는 그에 대한 것인 임의의 수신된 SIMD 코프로세서 명령어를 받아서 실행한다.
데이터는 SIMD 코프로세서 명령어에 의한 프로세싱을 위해 무선 인터페이스(169)를 통해 수신될 수 있다. 한 예에서, 음성 통신은 디지털 신호의 형태로 수신될 수 있으며, 이 디지털 신호는 음성 통신을 나타내는 디지털 오디오 샘플을 재생성하기 위해 SIMD 코프로세서 명령어에 의해 프로세싱될 수 있다. 다른 경우에, 압축된 오디오 및/또는 비디오가 디지털 비트 스트림의 형태로 수신될 수 있으며, 이 디지털 비트 스트림은 디지털 오디오 샘플 및/또는 동영상 프레임(motion video frame)을 재생성하기 위해 SIMD 코프로세서 명령어에 의해 프로세싱될 수 있다. 프로세싱 코어(170)의 일 실시예에서, 메인 프로세서(166) 및 SIMD 코프로세서(161)는 실행 유닛(162), 레지스터 파일(들)의 집합(164) 및 SIMD 셔플 명령어를 포함하는 명령어 집합(163)의 명령어를 인식하는 디코더(165)를 포함하는 단일의 프로세싱 코어(170)에 통합될 수 있다.
도 2는 본 발명에 따른 셔플 동작을 수행하는 로직 회로를 포함하는 일 실시예의 프로세서(200)의 마이크로-아키텍처의 블록도이다. 셔플 동작은 또한 이상의 논의에서와 같이 패킹된 데이터 셔플 동작(packed data shuffle operation) 및 패킹된 셔플 명령어(packed shuffle instruction)라고도 말해질 수 있다. 셔플 명령어의 일 실시예에서, 명령어는 바이트 입도(byte granularity)를 갖는 패킹된 데이터를 셔플링할 수 있다. 그 명령어는 PSHUFB 또는 패킹된 셔플 바이트(packed shuffle byte)라고도 말해질 수 있다. 다른 실시예들에서, 셔플 명령어는 또한 워드(word), 더블워드(doubleword), 쿼드워드(quadword), 기타 등등의 크기를 갖는 데이터 요소에 대해 동작하도록 구현될 수 있다. 순차적 프런트 엔드(in-order front end)(201)는 실행될 매크로-명령어를 패치하고 나중에 프로세서 파이프라인에서 사용되기 위해 이들을 준비시키는 프로세서(200)의 일부이다. 이 실시예의 프런트 엔드는 몇 가지 유닛을 포함한다. 명령어 프리페처(instruction prefetcher)(226)는 메모리로부터 매크로-명령어를 패치하여 이들을 명령어 디코더(228)로 피드시키고 명령어 디코더(228)는 이어서 이들을, 시스템(machine)이 어떻게 실행해야 하는지를 알고 있는 마이크로-명령어 또는 마이크로-연산(마이크로 op 또는 uop라고도 함)이라고 하는 프리미티브(primitive)로 디코딩한다. 트레이스 캐시(trace cache)(230)는 디코딩된 uop를 받아서 이들을 실행을 위해 uop 큐(234)에 프로그램 순서화된 시퀀스, 즉 트레이스로 조립한다. 트레이스 캐시(230)가 복잡한 매크로-명령어를 만날 때, 마이크로코드 ROM(232)은 그 동작을 완료하는 데 필요한 uop를 제공한다.
많은 매크로-명령어는 단일의 마이크로-op로 변환되며, 다른 것들은 전체 동작을 완료하기 위해 몇 개의 마이크로-op를 필요로 한다. 이 실시예에서, 매크로- 명령어를 완료하기 위해 5개 이상의 마이크로-op가 필요한 경우, 디코더(228)는 매크로-명령어를 행하기 위해 마이크로코드 ROM(232)에 액세스한다. 일 실시예에서, 패킹된 셔플 명령어는 명령어 디코더(228)에서의 프로세싱을 위해 적은 수의 마이크로-op로 디코딩될 수 있다. 다른 실시예에서, 다수의 마이크로-op가 동작을 달성하는 데 필요한 경우, 패킹된 데이터 셔플 알고리즘에 대한 명령어는 마이크로코드 ROM(232) 내에 저장될 수 있다. 트레이스 캐시(230)는 마이크로-코드 ROM(232)에서 셔플 알고리즘에 대한 마이크로-코드 시퀀스를 읽기 위한 정확한 마이크로-명령어 포인터를 결정하는 진입점 프로그램가능 로직 어레이(PLA)를 말한다. 마이크로코드 ROM(232)이 현재의 매크로-명령어에 대한 마이크로-op의 시퀀싱을 마친 후에, 시스템(machine)의 프런트 엔드(201)는 트레이스 캐시(230)로부터 마이크로-op를 다시 패치하기 시작한다.
어떤 SIMD 및 다른 멀티미디어 유형의 명령어는 복잡한 명령어인 것으로 생각된다. 대부분의 부동소수점 관련 명령어도 역시 복잡한 명령어이다. 그 자체로서, 명령어 디코더(228)가 복잡한 매크로-명령어를 만날 때, 그 매크로-명령어에 대한 마이크로코드 시퀀스를 검색하기 위해 적절한 장소에서 마이크로코드 ROM(232)이 액세스된다. 그 매크로-명령어를 수행하는 데 필요한 여러 가지 마이크로-op는 적절한 정수 및 부동소수점 실행 유닛에서 실행하기 위해 비순차적 실행 엔진(out-of-order execution engine)(203)으로 전달된다.
비순차적 실행 엔진(203)은 마이크로-명령어가 실행을 위해 준비되는 곳이다. 비순차적 실행 로직은 마이크로-명령어가 파이프라인을 따라 내려가면서 실행 을 위해 스케줄링될 때 마이크로-명령어의 흐름을 원활하게 하고 또 재정렬(re-order)하여 성능을 최적화하기 위해 다수의 버퍼를 갖는다. 할당기 로직(allocator logic)은 각각의 uop가 실행하기 위해 필요로 하는 시스템(machine) 버퍼 및 자원을 할당한다. 레지스터 이름 변경 로직(register renaming logic)은 로직 레지스터를 이름 변경하여 레지스터 파일 내의 엔트리에 넣는다. 할당기는 또한 명령어 스케줄러, 즉 메모리 스케줄러, 고속 스케줄러(202), 저속/일반 부동소수점 스케줄러(204), 및 단순 부동소수점 스케줄러(206)에 앞서, 2개의 uop 큐 중 하나 내의 각각의 uop에 대한 엔트리, 메모리 연산에 대한 엔트리, 및 비메모리 연산에 대한 엔트리를 할당한다. uop 스케줄러(202, 204,206)는 uop의 의존적 입력 레지스터 피연산자 소스의 준비 완료(readiness) 및 uop가 그의 동작을 완료하는 데 필요로 하는 실행 자원의 이용가능성(availability)에 기초하여 uop가 실행할 준비가 되는 때를 결정한다. 이 실시예의 고속 스케줄러(202)는 메인 클록 사이클의 각각의 절반에서 스케줄링할 수 있는 반면 다른 스케줄러들은 메인 프로세서 클록 사이클마다 한 번씩만 스케줄링할 수 있다. 스케줄러는 디스패치 포트(dispatch port)가 실행을 위해 uop를 스케줄링하도록 중재한다.
레지스터 파일(208, 210)은 스케줄러(202, 204, 206)와 실행 블록(211) 내의 실행 유닛(212, 214, 216, 218, 220, 222, 224) 사이에 있다. 정수 및 부동소수점 연산을 위해 각각 별도의 레지스터 파일(208, 210)이 있다. 이 실시예의 각각의 레지스터 파일(208, 210)은 또한 레지스터 파일에 아직 기록되지 않은 이제 막 완료된 결과를 새로운 의존적 uop로 바이패스 또는 포워드(forward)할 수 있는 바이 패스 네트워크(bypass network)를 포함한다. 정수 레지스터 파일(208) 및 부동소수점 레지스터 파일(210)은 또한 상대방과 데이터를 주고 받을 수 있다. 일 실시예에서, 정수 레지스터 파일(208)은 2개의 개별적인 레지스터 파일, 즉 데이터의 하위 32비트에 대한 하나의 레지스터 파일 및 데이터의 상위 32비트에 대한 또 하나의 레지스터 파일로 분할된다. 일 실시예의 부동소수점 레지스터 파일(210)은 128비트 폭 엔트리를 가지는 데, 그 이유는 부동소수점 명령어가 일반적으로 64 내지 128비트 폭의 피연산자를 가지기 때문이다.
실행 블록(211)은 명령어들이 실제로 실행되는 곳인 실행 유닛(212, 214, 216, 218, 220, 222, 224)을 포함한다. 이 섹션은 마이크로-명령어가 실행하기 위해 필요로 하는 정수 및 부동소수점 데이터 피연산자 값을 저장하는 레지스터 파일(208, 210)을 포함한다. 이 실시예의 프로세서(200)는 다수의 실행 유닛, 즉 주소 생성 유닛(address generation unit, AGU)(212), AGU(214), 고속 ALU(216), 고속 ALU(218), 저속 ALU(220), 부동소수점 ALU(222), 부동소수점 이동 유닛(move unit)(224)으로 이루어져 있다. 이 실시예에서, 부동소수점 실행 블록(222, 224)은 부동소수점, MMX, SIMD, 및 SSE 연산을 실행한다. 이 실시예의 부동소수점 ALU(222)는 나눗셈, 제곱근 및 나머지 마이크로-op를 실행하기 위한 부동소수점 나눗셈기(floating point divider)를 포함한다. 본 발명의 실시예에서, 부동소수점 값을 수반하는 어떤 동작도 부동소수점 하드웨어에서 행해진다. 예를 들어, 정수 포맷과 부동소수점 포맷 간의 변환은 부동소수점 레지스터 파일을 필요로 한다. 이와 유사하게, 부동소수점 나눗셈 연산은 부동소수점 나눗셈기에서 행해진다. 반 면에, 비부동소수점 숫자 및 정수 타입은 정수 하드웨어 자원으로 처리된다. 간단하고 아주 빈번한 ALU 연산은 고속 ALU 실행 유닛(216, 218)으로 간다. 이 실시예의 고속 ALU(216, 218)는 반 클록 사이클의 유효 지연시간(effective latency)으로 고속 연산을 실행할 수 있다. 일 실시예에서, 대부분의 복잡한 정수 연산은 저속 ALU(220)로 가는데 그 이유는 저속 ALU(220)가 곱셈기, 시프트(shift), 플래그 로직(flag logic) 및 분기(branch) 프로세싱 등의 긴 지연시간(long latency) 타입의 연산을 위한 정수 실행 하드웨어를 포함하기 때문이다. 메모리 로드/저장 동작은 AGU(212, 214)에 의해 실행된다. 이 실시예에서, 정수 ALU(216, 218, 220)는 64비트 데이터 피연산자에 대해 정수 연산을 수행하는 것과 관련하여 기술되어 있다. 대체 실시예에서, ALU(216, 218, 220)는 16, 32, 128, 256, 기타 등등을 포함하는 다양한 데이터 비트를 지원하도록 구현될 수 있다. 이와 유사하게, 부동소수점 유닛(222, 224)은 여러 가지 폭의 비트를 갖는 일정 범위의 피연산자를 지원하도록 구현될 수 있다. 일 실시예에서, 부동소수점 유닛(222, 224)은 SIMD 및 멀티미디어 명령어와 관련하여 128비트 폭 패킹된 데이터 피연산자에 대해 동작할 수 있다.
이 실시예에서, uop 스케줄러(202, 204, 206)는 부모 로드(parent load)가 실행을 종료하기 전에 의존적 동작을 디스패치한다. uop가 프로세서(200)에서 투기적으로 스케줄링되어 실행될 때, 프로세서(200)는 또한 메모리 미스(memory miss)를 처리하는 로직을 포함한다. 데이터 로드가 데이터 캐시에서 미스인 경우, 스케줄러에 일시적으로 부정확한 데이터를 맡겨 놓은 의존적 동작이 파이프라인에 남아 있을 수 있다. 재연 메커니즘(replay mechanism)은 부정확한 데이터를 사용 하는 명령어를 추적하여 재실행한다. 의존적 동작만이 재연될 필요가 있으며 독립적 동작은 완료될 수 있다. 프로세서의 일 실시예의 스케줄러 및 재연 메커니즘은 또한 셔플 동작을 위한 명령어 시퀀스를 포착(catch)하도록 설계되어 있다.
본 명세서에서 용어 "레지스터"는 피연산자를 식별하기 위해 매크로-명령어의 일부로서 사용되는 온-보드 프로세서 저장 장소를 말한다. 환언하면, 본 명세서에서 언급되는 레지스터는 프로세서의 외부에서(프로그래머의 관점에서) 볼 수 있는 것이다. 그렇지만, 일 실시예의 레지스터는 의미에 있어서 특정의 유형의 회로에 한정되어서는 안 된다. 오히려, 실시예의 레지스터는 데이터를 저장 및 제공할 수 있고 또 본 명세서에 기술된 기능을 수행할 수 있기만 하면 된다. 본 명세서에 기술된 레지스터는 전용의 물리적 레지스터, 레지스터 이름 변경을 사용하는 동적 할당된 물리적 레지스터, 전용 및 동적 할당된 물리적 레지스터의 조합, 기타 등등의 임의의 수의 여러 가지 기술을 사용하여 프로세서 내의 회로에 의해 구현될 수 있다. 일 실시예에서, 정수 레지스터는 32비트 정수 데이터를 저장한다. 일 실시예의 레지스터 파일은 또한 패킹된 데이터를 위한 8개의 멀티미디어 SIMD 레지스터를 포함한다. 이하의 논의에서, 레지스터는 미국 캘리포니아주 산타 클라라 소재의 인텔사로부터의 MMX 기술을 지원하는 마이크로프로세서 내의 64비트 폭 MMX™ 레지스터(어떤 경우에 'mm' 레지스터라고도 함) 등의 패킹된 데이터를 보유하도록 설계된 데이터 레지스터로서 이해된다. 정수 및 부동소수점 형태 둘 다로 이용가능한 이들 MMX 레지스터는 SIMD 및 SSE 명령어에 수반하는 패킹된 데이터 요소로 동작될 수 있다. 이와 유사하게, SSE2 기술과 관련한 128비트 폭 XMM 레지스터도 역시 이러한 패킹된 데이터 피연산자를 보유하는 데 사용될 수 있다. 이 실시예에서, 패킹된 데이터 및 정수 데이터를 저장함에 있어서, 레지스터는 2개의 데이터 타입 간을 구분할 필요가 없다.
이하의 도면의 예에서, 다수의 데이터 피연산자가 기술된다. 간단함을 위해, 최초 소스 데이터 세그먼트는 문자 A부터 알파벳순으로 표시되어 있으며, A는 최하위 주소에 위치하고 Z는 최상위 주소에 위치한다. 따라서, A는 최초로 주소 0에 있을 수 있고, B는 주소 1에, C는 주소 3에 있을 수 있으며, 이하 마찬가지이다. 개념적으로, 셔플 동작은, 일 실시예에서의 패킹된 바이트 셔플에서와 같이, 제1 피연산자로부터의 데이터 세그먼트를 셔플링하고 소스 데이터 요소 중 하나 이상을 제2 피연산자 내의 마스크의 집합에 의해 지정된 패턴으로 재정렬하는 것을 수반한다. 따라서, 셔플은 데이터 요소 중 일부 또는 그 전부를 회전시키거나 또는 임의의 원하는 순서로 완전히 재정렬할 수 있다. 게다가, 그 결과에서 임의의 특정의 데이터 요소 또는 임의의 특정 개수의 데이터 요소가 복제 또는 브로드캐스트될 수 있다. 본 발명에 따른 셔플 명령어의 실시예는 영으로 플러시(flush to zero) 기능을 포함하며, 각각의 특정의 데이터 요소에 대한 마스크는 결과에서 그 데이터 요소 위치를 영으로 만들 수 있다.
도 3a 내지 도 3c는 본 발명의 여러 가지 실시예에 따른 셔플 마스크를 예시한 것이다. 이 예에서, 복수의 개별적인 데이터 요소(311, 312, 313, 314)로 이루어진 패킹된 데이터 피연산자(310)가 도시되어 있다. 이 예의 패킹된 피연산자(310)는 다른 피연산자의 대응하는 패킹된 데이터 요소에 대한 셔플 패턴을 나타내는 마스크의 집합을 포함하기 위해 패킹된 데이터 피연산자의 관점에서 기술되어 있다. 따라서, 패킹된 피연산자(310)의 데이터 요소(311, 312, 313, 314) 각각에 있는 마스크는 그 결과의 대응하는 데이터 요소 위치에서의 내용을 지정한다. 예를 들어, 데이터 요소(311)는 최좌측 데이터 요소 위치이다. 데이터 요소(311) 내의 마스크는 어느 데이터가 셔플되어야만 하는지, 즉 셔플 동작에 대한 결과의 최좌측 데이터 요소 위치에 배치되어야만 하는지를 지정한다. 이와 유사하게, 데이터 요소(312)는 두 번째 최좌측의 데이터 요소 위치이다. 데이터 요소(312) 내의 마스크는 어느 데이터가 그 결과의 두 번째 최좌측 데이터 요소 위치에 배치되어야만 하는지를 지정한다. 이 실시예에서, 셔플 마스크를 포함하는 패킹된 피연산자 내의 데이터 요소들 각각은 패킹된 결과 내의 데이터 요소 위치와 일대일 대응관계를 갖는다.
도 3a에서, 데이터 요소(312)는 일 실시예에 대한 예시적인 셔플 마스크의 내용을 기술하는 데 사용된다. 일 실시예에 대한 셔플 마스크(318)는 3 부분, 즉 '영으로 설정 플래그(set to zero flag)' 필드(315), '예비(reserved)' 필드(316), 및 '선택 비트(selection bits)' 필드(317)로 이루어져 있다. '영으로 설정 플래그' 필드(315)는 현재의 마스크에 의해 지정된 결과 데이터 요소 위치가 영으로 되어야만 하는지, 즉 환언하면 영('0')의 값으로 대체되어야만 하는지를 나타낸다. 일 실시예에서, '영으로 설정 플래그' 필드가 지배적(dominant)이며, '영으로 설정 플래그' 필드(315)가 설정되어 있는 경우, 마스크(318) 내의 나머지 필드들은 무시되고 결과 데이터 요소 위치가 '0'으로 채워진다. '예비' 필드(316)는 대체 실시 예에서 사용되거나 사용되지 않을 수 있는, 또는 장래의 사용 또는 특별한 사용을 위해 예비된 것일 수 있는 하나 이상의 비트를 포함한다. 이 셔플 마스크(318)의 '선택 비트' 필드(317)는 패킹된 결과 내의 대응하는 데이터 요소 위치에 대한 데이터의 소스를 지정한다.
패킹된 데이터 셔플 명령어의 일 실시예에서, 한 피연산자는 마스크의 집합으로 이루어져 있다 또 하나의 피연산자는 패킹된 데이터 요소의 집합으로 이루어져 있다. 양 피연산자는 동일한 크기를 갖는다. 피연산자 내의 데이터 요소의 개수에 따라, 패킹된 결과에 배치하기 위한 제2 패킹된 데이터 피연산자로부터 개별적인 데이터 요소를 선택하는 데 여러 가지 개수의 선택 비트가 필요하다. 예를 들어, 패킹된 바이트의 128비트 소스 피연산자에 있어서, 적어도 4개의 선택 비트가 필요한데 그 이유는 16바이트 데이터 요소가 선택에 이용가능하기 때문이다. 마스크의 선택 비트에 의해 표시된 값에 기초하여, 소스 데이터 피연산자로부터의 적절한 데이터 요소가 그 마스크에 대한 대응하는 데이터 요소 위치에 배치된다. 예를 들어, 데이터 요소(312)의 마스크(318)는 두 번째 최좌측 데이터 요소 위치에 대응한다. 이 마스크(318)의 선택 비트(317)가 'X'의 값을 포함하는 경우, 소스 데이터 피연산자 내의 데이터 요소 위치 'X'로부터의 데이터 요소는 결과에서의 두 번째 최좌측 데이터 요소 위치로 셔플링된다. 그렇지만, '영으로 설정 플래그' 필드(315)가 설정되어 있는 경우, 결과에서의 두 번째 최좌측 데이터 요소 위치는 '0'으로 대체되고 선택 비트(317)의 지정은 무시된다.
도 3b는 바이트 크기 데이터 요소 및 128비트 폭 패킹된 피연산자로 동작하 는 일 실시예에 대한 마스크(328)의 구조를 나타낸 것이다. 이 실시예에서, '영으로 설정(set to zero)' 필드(325)는 비트 7로 이루어져 있고 '선택' 필드(327)는 비트 3 내지 비트 0으로 이루어져 있는데 그 이유는 16개의 가능한 데이터 요소 선택이 있기 때문이다. 비트 6 내지 비트 4는 이 실시예에서 사용되지 않으며 '예비' 필드(326)에 존재한다. 다른 실시예에서, '선택' 필드(327)에서 사용되는 비트의 수는 소스 데이터 피연산자에서 이용가능한 가능한 데이터 요소 선택의 수에 대응하기 위해 필요에 따라 증가되거나 감소될 수 있다.
도 3c는 바이트 크기 데이터 요소 및 128비트 폭 패킹된 피연산자, 그렇지만 다수의 데이터 요소 소스로 동작하는 다른 실시예에 대한 마스크(338)의 구조를 나타낸 것이다. 이 실시예에서, 마스크(338)는 '영으로 설정(set to zero)' 필드(335), '소스 선택(source(src) select)' 필드(336), 및 '선택(selection)' 필드(337)로 이루어져 있다. '영으로 설정' 필드(335) 및 '선택' 필드(337)는 상기 설명과 유사하게 기능한다. 이 실시예의 '소스 선택' 필드(336)는 선택 비트에 의해 지정된 데이터 피연산자가 어느 데이터 소스로부터 획득되어야만 하는지를 표시한다. 예를 들어, 동일한 마스크의 집합이 복수의 멀티미디어 레지스터 등의 다수의 데이터 소스와 함께 사용될 수 있다. 각각의 소스 멀티미디어 레지스터는 숫자 값을 할당받고, '소스 선택' 필드(336) 내의 값은 이들 소스 레지스터 중 하나를 가리킨다. '소스 선택' 필드(336)의 내용에 따라, 선택된 데이터 요소는 패킹된 결과에서의 그 대응하는 데이터 요소 위치에 배치하기 위해 적절한 데이터 소스로부터 선택된다.
도 4a는 본 발명의 일 실시예에 따른 멀티미디어 레지스터에서의 여러 가지 패킹된 데이터 타입 표현을 나타낸 것이다. 도 4a는 128비트 폭 피연산자에 대한 패킹된 바이트(410), 패킹된 워드(420), 및 패킹된 더블워드(dword)(430)에 대한 데이터 타입을 나타낸 것이다. 이 예의 패킹된 바이트 포맷(410)은 128비트 길이이고 16개의 패킹된 바이스 데이터 요소를 포함한다. 여기서 바이트는 8비트의 데이터로서 정의된다. 각각의 바이트 데이터 요소에 대한 정보는 바이트 0에 대해서는 비트 7 내지 비트 0, 바이트 1에 대해서는 비트 15 내지 비트 8, 바이트 2에 대해서는 비트 23 내지 비트 16, 그리고 마지막으로 바이트 15에 대해서는 비트 120 내지 비트 127에 저장된다. 따라서, 모든 이용가능한 비트가 레지스터에서 사용된다. 이 저장 배열은 프로세서의 저장 효율을 향상시킨다. 또한, 16개의 데이터 요소가 액세스되는 경우, 이제 16개의 데이터 요소에 대해 하나의 동작이 병렬로 수행될 수 있다.
일반적으로, 데이터 요소는 동일한 길이의 다른 데이터 요소와 함께 피연산자(단일의 레지스터 또는 메모리 장소)에 저장된 개개의 데이터이다. SSE2 기술과 관련한 패킹된 데이터 시퀀스에서, 피연산자(XMM 레지스터 또는 메모리 장소)에 저장된 데이터 요소의 개수는 128비트를 개개의 데이터 요소의 길이(비트 단위)로 나눈 것이다. 이와 유사하게, MMX 및 SSE 기술과 관련한 패킹된 데이터 시퀀스에서, 피연산자(MMX 레지스터 또는 메모리 장소)에 저장된 데이터 요소의 개수는 64비트를 개개의 데이터 요소의 길이(비트 단위)로 나눈 것이다. 이 예의 패킹된 워드 포맷(420)은 128비트 길이이며, 8개의 패킹된 워드 데이터 요소를 포함한다. 각각 의 패킹된 워드는 16비트의 정보를 포함한다. 도 4a의 패킹된 더블워드 포맷(430)은 128비트 길이이며, 4개의 패킹된 더블워드 데이터 요소를 포함한다. 각각의 패킹된 더블워드 데이터 요소는 32비트의 정보를 포함한다. 패킹된 쿼드워드(quadword)는 128비트이며, 2개의 패킹된 쿼드-워드 데이터 요소를 포함한다.
도 4b는 대안적인 레지스터 내 데이터 저장 포맷(in-register data storage format)을 나타낸 것이다. 각각의 패킹된 데이터는 2개 이상의 독립적인 데이터 요소를 포함할 수 있다. 3개의 패킹된 데이터 포맷, 즉 패킹된 하프(packed half)(441), 패킹된 싱글(packed single)(442), 및 패킹된 더블(packed double)(443)이 예시되어 있다. 패킹된 하프(441), 패킹된 싱글(442) 및 패킹된 더블(443)의 일 실시예는 고정점 데이터 요소(fixed-point data element)를 포함한다. 대체 실시예에서, 패킹된 하프(441), 패킹된 싱글(442) 및 패킹된 더블(443) 중 하나 이상이 부동소수점 데이터 요소를 포함할 수 있다. 패킹된 하프(441)의 한 대체 실시예는 128비트 길이이고 8개의 16비트 데이터 요소를 포함한다. 패킹된 싱글(442)의 일 실시예는 128비트 길이이고 4개의 32비트 데이터 요소를 포함한다. 패킹된 더블(443)의 일 실시예는 128비트 길이이고 2개의 64비트 데이터 요소를 포함한다. 이러한 패킹된 데이터 포맷이 다른 레지스터 길이, 예를 들어 96비트, 192비트, 224비트, 256비트 또는 그 이상으로 추가로 확장될 수 있음을 잘 알 것이다.
도 4c는 32 이상의 비트 및 월드 와이드 웹(www) 상의 intel.com/design/litcentr에서 미국 캘리포니아주 산타 클라라 소재의 인텔사로부 터 입수가능한 "IA-32 Intel Architecture Software Developer's Manual Volume 2: Instruction Set Reference"에 기술된 유형의 opcode 포맷과 부합하는 레지스터/메모리 피연산자 어드레싱 모드를 갖는 연산 인코딩(opcode) 포맷(460)의 일 실시예를 나타낸 것이다. 셔플 동작의 유형은 필드(461, 462) 중 하나 이상에 의해 인코딩될 수 있다. 최대 2개의 소스 피연산자 식별자(464, 465)를 포함하는, 명령어 당 최대 2개의 피연산자 장소가 식별될 수 있다. 셔플 명령어의 일 실시예에서, 목적지 피연산자 식별자(466)는 소스 피연산자 식별자(464)와 동일하다. 대체 실시예에서, 목적지 피연산자 식별자(466)는 소스 피연산자 식별자(465)와 동일하다. 따라서, 셔플 동작의 실시예들에서, 소스 피연산자 식별자(464, 465)에 의해 식별된 소스 피연산자 중 하나는 셔플 동작의 결과에 의해 오버라이트된다. 셔플 명령어의 일 실시예에서, 피연산자 식별자(464, 465)는 64비트 소스 및 목적지 피연산자를 식별하는 데 사용될 수 있다.
도 4d는 40 이상의 비트를 갖는 다른 대안적인 연산 인코딩(opcode) 포맷(470)을 나타낸 것이다. opcode 포맷(470)은 opcode 포맷(460)과 부합하며, 선택적인 프리픽스 바이트(prefix byte)(478)를 포함한다. 셔플 동작의 유형은 필드(478, 471, 472) 중 하나 이상에 의해 인코딩될 수 있다. 명령어 당 최대 2개의 피연산자 장소가 소스 피연산자 식별자(474, 475)에 의해 또 프리픽스 바이트(478)에 의해 식별될 수 있다. 셔플 명령어의 일 실시예에서, 프리픽스 바이트(478)는 128비트 소스 및 목적지 피연산자를 식별하는 데 사용될 수 있다. 셔플 명령어의 일 실시예에서, 목적지 피연산자 식별자(476)는 소스 피연산자 식별자(474)와 동일 하다. 대체 실시예에서, 목적지 피연산자 식별자(476)는 소스 피연산자 식별자(475)와 동일하다. 따라서, 셔플 동작의 실시예들에서, 소스 피연산자 식별자(474, 475)에 의해 식별된 소스 피연산자 중 하나가 셔플 동작의 결과에 의해 오버라이트된다. opcode 포맷(460, 470)은 MOD 필드(463, 473)에 의해 또 선택적인 스케일-인덱스-베이스(scale-index-base) 및 변위 바이트(displacement byte)에 의해 부분적으로 지정된 레지스터 대 레지스터(register to register), 메모리 대 레지스터(memory to register), 레지스터 바이 메모리(register by memory), 레지스터 바이 레지스터(register by register), 레지스터 바이 직접(register by immediate), 레지스터 대 메모리(register to memory) 어드레싱을 허용한다.
그 다음에 도 4e를 참조하면, 어떤 대체 실시예에서, 64비트 SIMD 산술 연산은 코프로세서 데이터 프로세싱(coprocessor data processing, CDP) 명령어를 통해 수행될 수 있다. 연산 인코딩(opcode) 포맷(480)은 CDP opcode 필드(482, 489)를 갖는 하나의 이러한 CDP 명령어를 나타낸 것이다. CDP 명령어의 유형은, 셔플 동작의 대체 실시예에서, 필드(483, 484, 487, 488) 중 하나 이상에 의해 인코딩될 수 있다. 최대 2개의 소스 피연산자 식별자(485, 490) 및 하나의 목적지 피연산자 식별자(586)를 포함하는, 명령어 당 최대 3개의 피연산자 장소가 식별될 수 있다. 코프로세서의 일 실시예는 8, 16, 32 및 64비트 값에 대해 동작할 수 있다. 일 실시예에서, 셔플 동작은 고정점, 즉 정수 데이터 요소에 대해 수행된다. 어떤 실시예에서, 셔플 명령어는 조건 필드(481)를 사용하여 조건부로 실행될 수 있다. 어떤 셔플 명령어에서, 소스 데이터 크기는 필드(483)에 의해 인코딩될 수 있다. 셔 플 명령어의 어떤 실시예에서, 제로(zero)(Z), 네거티브(negative)(N), 캐리(carry)(C) 및 오버플로우(overflow)(V) 검출은 SIMD 필드 상에서 행해질 수 있다. 어떤 명령어에서, 포화(saturation)의 유형은 필드(484)에 의해 인코딩될 수 있다.
도 5는 본 발명에 따라 셔플 마스크에 기초하여 데이터 피연산자에 셔플 동작을 수행하는 로직의 일 실시예의 블록도이다. 이 실시예의 영으로 설정(set to zero) 기능을 갖는 셔플 동작에 대한 명령어(PSHUFB)는 2가지 정보, 즉 제1 (마스크) 피연산자(510) 및 제2 (데이터) 피연산자(520)로 시작한다. 이하의 논의에서, MASK, DATA 및 RESULTANT는 일반적으로 피연산자 또는 데이터 블록을 말하지만 그 자체로서 한정되는 것은 아니며, 또한 레지스터, 레지스터 파일, 및 메모리 장소도 포함한다. 일 실시예에서, 셔플 PSHUFB 명령어는 하나의 마이크로-연산으로 디코딩된다. 대체 실시예에서, 이 명령어는 데이터 피연산자에 대해 셔플 동작을 수행하기 위해 다양한 개수의 마이크로-op로 디코딩될 수 있다. 이 예에서, 피연산자(510, 520)는 바이트 폭 데이터 요소를 갖는 소스 레지스터/메모리에 저장된 128비트 폭의 정보이다. 일 실시예에서, 피연산자(510, 520)는 128비트 SSE2 XMM 레지스터 등의 128비트 길이의 SIMD 레지스터에 보유된다. 그렇지만, 피연산자(510, 520) 중 하나 또는 둘 다는 또한 메모리 장소로부터 로드될 수 있다. 일 실시예에서, RESULTANT(540)는 또한 MMX 또는 XMM 데이터 레지스터이다. 게다가, RESULTANT(540)는 또한 소스 피연산자 중 하나와 동일한 레지스터 또는 메모리 장소일 수 있다. 특정의 구현에 따라, 피연산자 및 레지스터는 32, 64 및 256비트 등의 다른 폭일 수 있으며, 워드, 더블워드, 또는 쿼드워드 크기의 데이터 요소를 가질 수 있다. 이 예에서 첫 번째 피연산자(510)는 16개의 마스크 집합(16진수 포맷임), 즉 0x0E, 0x0A, 0x09, 0x8F, 0x02, 0x0E, 0x06, 0x06, 0x06, 0xF0, 0x04, 0x08, 0x08, 0x06, 0x0D, 및 0x00로 이루어져 있다. 각각의 개별적인 마스크는 결과(540) 내의 그의 대응하는 데이터 요소 위치의 내용을 지정한다.
두 번째 피연산자(520)는 16개의 데이터 세그먼트, 즉 P, O, N, M, L, K, J, I, H, G, F, E, D, C, B 및 A로 이루어져 있다. 두 번째 피연산자(520) 내의 각각의 데이터 세그먼트는 또한 16진수 포맷의 데이터 요소 위치 값으로 표시되어 있다. 여기서 데이터 세그먼트는 동일한 길이를 가지며 각각이 단일 바이트(8비트)의 데이터로 이루어져 있다. 각각의 데이터 요소가 워드(16비트), 더블워드(32비트) 또는 쿼드워드(64비트)인 경우, 128비트 피연산자는 각각 8 워드 폭, 4 더블워드 폭, 또는 2 쿼드워드 폭의 데이터 요소를 갖는다. 그렇지만, 본 발명의 다른 실시예는 다른 크기의 피연산자 및 데이터 세그먼트로 동작할 수 있다. 본 발명의 실시예들은 특정 길이 데이터 피연산자, 데이터 세그먼트, 또는 시프트 카운트에 한정되지 않으며, 각각의 구현을 위해 적절한 크기일 수 있다.
피연산자(510, 520)는 레지스터 또는 메모리 장소 또는 레지스터 파일 또는 이의 혼합(mix)에 존재할 수 있다. 데이터 피연산자(510, 520)는 셔플 명령어와 함께 프로세서 내의 실행 유닛의 셔플 로직(530)으로 전송된다. 셔플 명령어가 실행 유닛에 도착할 때, 이 명령어는 프로세서 파이프라인에서 앞서 디코딩되어 있어야만 한다. 따라서, 셔플 명령어는 마이크로 연산(uop) 또는 어떤 다른 디코딩된 포맷의 형태일 수 있다. 이 실시예에서, 2개의 데이터 피연산자(510, 520)가 셔플 로직(530)에서 수신된다. 셔플 로직(530)은 마스크 피연산자(510) 내의 값들에 기초하여 소스 데이터 피연산자(520)로부터 데이터 요소를 선택하고 선택된 데이터 요소를 결과(540) 내의 적절한 위치로 정렬/셔플링한다. 셔플 로직(530)은 또한 지정된 바에 따라 결과(540) 내의 주어진 데이터 요소 위치를 영으로 할 수 있다. 여기서, 결과(540)는 16개의 데이터 세그먼트, 즉 O, K, J, '0', C, O, G, G, F, '0', E, I, I, G, N, 및 A로 이루어져 있다.
셔플 로직(530)의 동작은 여기에서 몇 개의 데이터 요소로 기술되어 있다. 마스크 피연산자(510) 내의 최좌측 데이터 요소 위치에 대한 셔플 마스크는 0x0E이다. 셔플 로직(530)은 도 3a 내지 도 3c에서 전술한 바와 같이 마스크의 여러 가지 필드를 해석한다. 이 경우, '영으로 설정' 필드는 설정되어 있지 않다. 하위 4비트, 즉 니블을 포함하는 선택 필드는 'E'의 16진수 값을 갖는다. 셔플 로직(530)은 데이터 피연산자(520)의 데이터 요소 위치 '0xE' 내의 데이터 O를 결과(540)의 최좌측 데이터 요소 위치로 셔플링한다. 이와 유사하게, 마스크 피연산자(510)에서의 두 번째 최좌측 데이터 요소 위치의 마스크는 0x0A이다. 셔플 로직(530)은 그 위치에 대한 마스크를 해석한다. 이 선택 필드는 'A'의 16진수 값을 갖는다. 셔플 로직(530)은 데이터 피연산자(520)의 데이터 요소 위치 '0xA'에 있는 데이터 K를 결과(540)의 두 번째 최좌측 데이터 요소 위치로 복사한다.
이 실시예의 셔플 로직(530)은 또한 셔플 명령어의 영으로 플러시(flush to zero) 기능을 지원한다. 마스크 피연산자(510)의 좌측으로부터 4번째 데이터 요소 위치에 있는 셔플 마스크는 0x8F이다. 셔플 로직(530)은 마스크의 비트 8에 '1'로 표시되어 있는 바와 같이 '영으로 설정' 필드가 설정되어 있음을 인식한다. 그에 응답하여, 영으로 플러시 디렉티브는 선택 필드보다 우선하며, 셔플 로직(530)은 그 마스크의 선택 필드에 있는 16진수 값 'F'를 무시한다. '0'이 결과(540)에서 좌측으로부터 대응하는 4번째 데이터 요소 위치에 배치된다. 이 실시예에서, 셔플 로직(530)은 각각의 마스크에 대한 '영으로 설정' 및 선택 필드를 평가하고 예비 비트 또는 소스 선택 필드 등의 마스크 내의 이들 필드들 밖에 존재할 수 있는 다른 비트들에 신경 쓰지 않는다. 셔플 마스크 및 데이터 셔플링의 이 프로세싱은 마스크 피연산자(510) 내의 마스크의 집합 전체에 대해 반복된다. 일 실시예에서, 마스크 모두가 병렬로 처리된다. 다른 실시예에서, 마스크 집합 및 데이터 요소의 어떤 부분은 한꺼번에 모두 처리될 수 있다.
본 셔플 명령어의 실시예들에서, 피연산자 내의 데이터 요소들은 여러 가지 방식으로 재정렬될 수 있다. 게다가, 특정의 데이터 요소로부터의 어떤 데이터는 다수의 데이터 요소 위치에서 반복되거나 심지어 모든 위치로 브로드캐스트될 수 있다. 예를 들어, 4번째 및 5번째 마스크 둘 다는 0x08의 16진수 값을 갖는다. 그 결과, 데이터 피연산자(520)의 데이터 요소 위치 0x8에 있는 데이터 I는 결과(540)의 우측으로부터 4번째 및 5번째 데이터 요소 위치 둘 다로 셔플링된다. 영으로 설정 기능으로, 셔플 명령어의 실시예들은 결과(540) 내의 임의의 데이터 요소 위치들을 강제로 '0'이 되게 할 수 있다.
특정의 구현에 따라, 각각의 셔플 마스크는 결과에서의 단일의 데이터 요소 위치의 내용을 지정하는 데 사용될 수 있다. 이 예에서와 같이, 각각의 개별적인 바이트 폭 셔플 마스크는 결과(540)에서의 바이트 폭 데이터 요소 위치에 대응한다. 다른 실시예에서, 다수의 마스크의 조합이 데이터 요소의 블록 모두를 지정하는 데 사용될 수 있다. 예를 들어, 2바이트 폭 마스크는 워드 폭 데이터 요소를 전부 지정하는 데 사용될 수 있다. 셔플 마스크는 바이트 폭인 것으로 제한되지 않으며 그 특정의 구현에서 필요로 하는 임의의 다른 크기일 수 있다. 이와 유사하게, 데이터 요소 및 데이터 요소 위치는 바이트와 다른 입도를 처리할 수 있다.
도 6은 본 발명에 따른 데이터 셔플링 연산을 수행하는 회로(600)의 일 실시예의 블록도이다. 이 실시예의 회로는 제2 피연산자의 디코딩 셔플 마스크에 기초하여 제1 소스 피연산자로부터 정확한 결과 바이트를 선택하는 멀티플렉싱 구조를 포함한다. 여기서 소스 데이터 피연산자는 상위 패킹된 데이터 요소 및 하위 패킹된 데이터 요소로 이루어져 있다. 본 실시예의 멀티플렉싱 구조는 다른 패킹된 명령어를 구현하는데 사용되는 다른 멀티플렉싱 구조보다 비교적 더 간단하다. 결과적으로, 본 실시예의 멀티플렉싱 구조는 임의의 새로운 임계적 타이밍 경로를 도입하지 않는다. 본 실시예의 회로(600)는 셔플 마스크 블록, 소스 피연산자로부터의 하위/상위 패킹된 데이터 요소를 보유하기 위한 블록, 데이터 요소의 초기 선택을 위한 제1 복수의 8:1 멀티플렉서, 상위 및 하위 데이터 요소의 선택을 위한 또 다른 복수의 3:1 멀티플렉서, 멀티플렉서 선택 및 제로 로직(mux select & zero logic), 그리고 다수의 제어 신호를 포함한다. 간명함을 위하여, 8:1 및 3:1 멀티플렉서는 한정된 개수만이 도 6에 도시되어 있으며, 이는 점으로 나타나 있다. 그러나 이들의 기능은 도시된 것들과 유사하며, 이하의 설명으로부터 이해될 것이다.
본 예시에서 셔플 동작 동안, 2개의 피연산자가 이 셔플 취급 회로(600)에서 수신되는데, 제1 피연산자는 패킹된 데이터 요소의 집합을, 제2 피연산자는 셔플 마스크의 집합을 포함한다. 셔플 마스크는 셔플 마스크 블록(602)으로 전달된다. 셔플 마스크의 집합은 멀티플렉서 선택 및 제로 로직 블록(604)에서 디코딩되어, 다양한 선택 신호(SELECT A 606, SELECT B 608, SELECT C 610) 및 영으로 설정 신호(ZERO)(611)를 생성한다. 이 신호들은 결과(632)를 결합하는 멀티플렉서의 동작을 제어하는데 사용된다.
본 예시에서, 마스크 피연산자 및 데이터 피연산자는 모두 128비트 길이이며, 각각은 16바이트 크기의 데이터 세그먼트로 패킹된다. 다양한 신호 상에 도시된 N 값은 이 경우 16이 된다. 본 실시예에서, 데이터 세그먼트는 하위 및 상위 패킹된 데이터 요소의 집합으로 분리되며, 각각의 집합은 8개의 데이터 요소를 갖는다. 이는 데이터 요소를 선택하는 동안 16:1 멀티플렉서가 아닌 그보다 작은 8:1 멀티플렉서를 사용하는 것을 가능하게 한다. 이러한 패킹된 데이터 요소의 하위 및 상위 집합은 하위 및 상위 저장 공간(612, 622)에 각각 보유된다. 하위 데이터 집합으로 시작하여, 8개의 데이터 요소 각각은 라우팅 라인(614)과 같은 라인의 집합을 경유하여 16개의 개별적인 8:1 멀티플렉서(618A-D)의 제1 집합으로 전송된다. 16개의 8:1 멀티플렉서(618A-D) 각각은 N개의 SELECT A 신호(606) 중 하나로 제어된다. 그의 SELECT A(606)의 값에 따라, 그 멀티플렉서는 추가의 처리를 위해 8개의 하위 데이터 요소(614) 중 하나를 출력한다. 하위 패킹된 데이터 요소들의 집합에 대해 16개의 8:1 멀티플렉서가 있는데 그 이유는 하위 데이터 요소 중 임의의 것을 16개의 결과 데이터 요소 위치 중 임의의 것으로 셔플링할 수 있기 때문이다. 16개의 8:1 멀티플렉서 각각은 16개 결과 데이터 요소 위치 중 하나에 대한 것이다. 이와 유사하게, 16개의 8:1 멀티플렉서는 상위 패킹된 데이터 요소를 위해 존재한다. 8개의 상위 데이터 요소는 16개의 8:1 멀티플렉서(624A-D)의 제2 집합 각각으로 전송된다. 16개의 8:1 멀티플렉서(624A-D) 각각은 N개의 SELECT B 신호(608) 중 하나로 제어된다. 그의 SELECT B(608)의 값에 기초하여, 그 8:1 멀티플렉서는 추가의 처리를 위해 8개의 상위 데이터 요소(616) 중 하나를 출력한다.
16개의 3:1 멀티플렉서(628A-D) 각각은 결과(632)에서의 데이터 요소 위치에 대응한다. 16개의 하위 데이터 멀티플렉서(618A-D)로부터의 16개의 출력(620A-D)은 상위 데이터 멀티플렉서(624A-D)로부터의 출력(626A-D)과 같이 16개의 3:1 상위/하위 선택 멀티플렉서(628A-D)의 집합으로 보내진다. 이들 3:1 선택 멀티플렉서(628A-D) 각각은 그 자신의 SELECT C(610) 및 ZERO(611) 신호를 멀티플렉서 선택 및 제로 로직(mux select & zero logic)(604)으로부터 수신한다. 그 3:1 멀티플렉서에 대한 SELECT C(610) 상의 값은 멀티플렉서가 하위 데이터 집합으로부터 선택된 데이터 피연산자를 출력하는지 상위 데이터 집합으로부터 선택된 데이터 피연산자를 출력하는지를 나타낸다. 각각의 3:1 멀티플렉서로의 제어 신호 ZERO(611)는 그 멀티플렉서가 그의 출력을 강제로 영('0')이 되게 하는지를 나타낸다. 이 실시예에서, 제어 신호 ZERO(611)는 SELECT C(610) 상의 선택을 대신하며, 그 데이터 요소 위치에 대한 출력을 결과(632)에서 강제로 '0'이 되게 한다.
예를 들어, 3:1 멀티플렉서(628A)는 그 데이터 요소 위치에 대해 8:1 멀티플 렉서(618A)로부터 선택된 하위 데이터 요소(620A)를 수신하고 8:1 멀티플렉서(624A)로부터 선택된 상위 데이터 요소(626A)를 수신한다. SELECT C(610)는 데이터 요소 중 어느 것을 그의 출력(630A)에서 결과(632) 내의 그가 관리하는 데이터 요소 위치로 셔플링할지를 제어한다. 그렇지만, 멀티플렉서(628A)로의 신호 ZERO(611)가 활성이어서, 그 데이터 요소 위치에 대한 셔플 마스크가 '0'이 요망된다는 것을 나타내는 경우, 멀티플렉서 출력(630A)은 '0'이고 데이터 요소 입력(620A, 626A) 중 어느 것도 사용되지 않는다. 셔플 동작의 결과(632)는 16개의 3:1 멀티플렉서(628A-D)로부터의 출력(630A-D)으로 이루어져 있으며, 각각의 출력은 특정의 데이터 요소 위치에 대응하고 또 데이터 요소 또는 '0' 중 어느 하나이다. 이 예에서, 각각의 3:1 멀티플렉서 출력은 바이트 폭이고, 결과는 16개의 패킹된 바이트의 데이터로 이루어진 데이터 블록이다.
도 7은 본 발명의 일 실시예에 따른 바이트 폭 데이터 요소에 대한 데이터 셔플의 동작을 나타낸 것이다. 이것은 명령어 "PSHUFB DATA, MASK"의 예이다. 유의할 점은 MASK(701)의 바이트 위치 0x6 및 0xC에 대한 셔플 마스크의 최상위 비트가 설정되어 있고 따라서 그 위치들에 대한 결과(741) 내의 결과가 0이라는 것이다. 이 예에서, 소스 데이터는 목적지 데이터 저장소(721) 내에 조직되어 있고, 이 저장소는 일 실시예에서 주소를 지정하는 마스크의 집합(701)의 관점에서 볼 때 소스 데이터 저장소(721)이기도 하며, 소스 피연산자(721)로부터의 각각의 데이터 요소는 목적지 레지스터(741)에 저장된다. 2개의 소스 피연산자, 마스크(701) 및 데이터(721) 각각은 이 예에서 결과(741)와 마찬가지로 16개의 패킹된 데이터 요소 로 이루어져 있다. 이 실시예에서, 관여된 데이터 요소 각각은 8비트, 즉 1바이트 폭이다. 따라서, 마스크(701), 데이터(721) 및 결과(741) 데이터 블록은 각각 128비트 길이이다. 게다가, 이들 데이터 블록은 메모리 또는 레지스터에 존재할 수 있다. 일 실시예에서, 마스크의 배열은 원하는 데이터 프로세싱 연산에 기초하며, 이 연산은 예를 들어 필터링 연산 또는 컨벌루션 연산일 수 있다.
도 7에 도시한 바와 같이, 마스크 피연산자(701)는 셔플 마스크, 즉 0x0E(702), 0x0A(703), 0x09(704), 0x8F(705), 0x02(706), 0x0E(707), 0x06(708) 0x06(709), 0x05(710) 0xF0(711), 0x04(712), 0x08(713), 0x08(714), 0x06(715), 0x0D(716), 0x00(717)를 갖는 데이터 요소를 포함한다. 이와 유사하게, 데이터 피연산자(721)는 P(722), O(723), N(724), M(725), L(726), K(727), J(728), I(729), H(730), G(731), F(732), E(733), D(734), C(735), B(736), A(737)의 소스 데이터 요소를 포함한다. 도 7의 데이터 세그먼트의 표현에서, 데이터 요소 위치도 역시 데이터 아래쪽에 16진수 값으로서 표시되어 있다. 따라서, 패킹된 셔플 동작은 마스크(701) 및 데이터(721)로 수행된다. 셔플 마스크의 집합(701)을 사용하여, 데이터(721)의 프로세싱은 병렬로 수행될 수 있다.
데이터 요소 셔플 마스크 각각이 평가될 때, 지정된 데이터 요소로부터의 적절한 데이터 또는 '0'이 그 특정의 셔플 마스크에 대한 대응하는 데이터 요소 위치로 셔플링된다. 예를 들어, 최우측 셔플 마스크(717)는 값 0x00을 가지며, 이값은 소스 데이터 피연산자의 위치 0x0로부터의 데이터를 지정하도록 디코딩된다. 이에 응답하여, 데이터 위치 0x0로부터의 데이터 A는 결과(741)의 최우측 위치로 복사된 다. 이와 유사하게, 우측으로부터 두 번째 셔플 마스크(716)는 0x0D의 값을 가지며, 이는 0xD인 것으로 디코딩된다. 따라서, 데이터 위치 0xD로부터의 데이터 N은 결과(741)에서 우측에서 두 번째 위치로 복사된다.
결과(741)에서 좌측으로부터 4번째 데이터 요소 위치는 '0'이다. 이것은 그 데이터 요소 위치에 대한 셔플 마스크 내의 0x8F의 값에 기인한다. 이 실시예에서, 셔플 마스크 바이트의 비트 7은 "영으로 설정(set to zero)" 또는 "영으로 플러시(flush to zero)" 표시자이다. 이 필드가 설정되어 있는 경우, 결과에서의 대응하는 데이터 요소 위치는 소스 데이터 피연산자(721)로부터의 데이터 대신에 '0' 값으로 채워진다. 이와 유사하게, 결과(741)에서 우측으로부터 7번째 위치는 '0'의 값을 갖는다. 이것은 마스크(701)에서의 그 데이터 요소 위치에 대한 0xF0의 셔플 마스크 값으로 인한 것이다. 유의할 점은 어떤 실시예에서 셔플 마스크 내의 모든 비트가 사용될 수 있는 것은 아니라는 것이다. 이 실시예에서, 셔플 마스크의 하위 니블, 즉 하위 4비트는 소스 데이터 피연산자(721) 내의 16개의 가능한 데이터 요소 중 임의의 것을 선택하는 데 충분하다. 비트 7이 '영으로 설정' 필드이므로, 3개의 다른 비트가 미사용인 채로 있으며, 어떤 실시예에서 예비 또는 무시될 수 있다. 이 실시예에서, '영으로 설정' 필드는 셔플 마스크의 하위 니블에 표시된 바와 같이 데이터 요소 선택을 제어 및 무시한다. 이들 경우, 좌측으로부터 4번째 데이터 요소 위치 및 우측으로부터 7번째 위치 둘 다에서, '영으로 플러시' 플래그가 비트 7에 설정되어 있는 0x80의 셔플 마스크 값은 또한 대응하는 결과 데이터 요소 위치가 '0'으로 채워지게 할 수 있다.
도 7에 도시한 바와 같이, 화살표는 마스크(701) 내의 셔플 마스크마다의 데이터 요소의 셔플링을 나타낸다. 특정 셔플 마스크의 집합에 따라, 소스 데이터 요소 중 하나 이상이 결과(741)에 나타나지 않을 수 있다. 어떤 경우에, 하나 이상의 '0'이 결과(741) 내의 여러 데이터 요소 위치에 나타날 수도 있다. 셔플 마스크는 데이터 요소 중 하나 또는 그 특정 그룹을 브로드캐스트하도록 구성되어 있으며, 그 데이터 요소들에 대한 데이터는 결과에서 선택된 패턴으로서 반복될 수 있다. 본 발명의 실시예는 임의의 특정의 배열 또는 셔플 패턴에 한정되지 않는다.
전술한 바와 같이, 소스 데이터 레지스터는 또한 이 실시예에서 목적지 데이터 저장 레지스터로서 이용되며, 그에 따라 필요한 레지스터의 수를 감소시킨다. 소스 데이터(721)가 이와 같이 무시되지만, 셔플 마스크의 집합(701)은 변경되지 않으며 장래의 참조를 위해 이용가능하다. 소스 데이터 저장소 내의 오버라이트된 데이터는 메모리 또는 다른 레지스터로부터 재로드될 수 있다. 다른 실시예에서, 다수의 레지스터가 소스 데이터 저장소로서 사용될 수 있으며, 그 각자의 데이터는 원하는 바에 따라 목적지 데이터 저장소 내에 조직되어 있다.
도 8은 본 발명의 다른 실시예에 따른 워드 폭 데이터 요소에 대한 데이터 셔플 동작의 동작을 나타낸 것이다. 이 예의 일반적인 논의는 도 7의 것과 얼마간 유사하다. 그렇지만, 이 시나리오에서, 데이터 피연산자(821) 및 결과(831)의 데이터 요소는 워드 길이이다. 이 실시예에서, 데이터 요소 워드들은 데이터 요소 바이트의 쌍으로서 취급되는데, 그 이유는 마스크 피연산자(801) 내의 셔플 마스크 가 바이트 크기이기 때문이다. 따라서, 한 쌍의 셔플 마스크 바이트는 각각의 데이터 요소 워드 위치를 정의하는 데 사용된다. 그렇지만, 다른 실시예에서, 셔플 마스크는 또한 워드 입도를 가지며 결과에서의 워드 크기의 데이터 요소 위치를 기술할 수 있다.
이 예의 마스크 피연산자(801)는 0x03(802), 0x02(803), 0x0F(804), 0x0E(805), 0x83(806), 0x82(807), 0x0D(808), 0x0C(809), 0x05(810), 0x04(811), 0x0B(812), 0x0A(813), 0x0D(814), 0x0C(815), 0x01(816), 0x00(817)의 셔플 마스크를 갖는 바이트 폭 데이터 요소를 포함한다. 데이터 피연산자(821)는 H(822), G(823), F(824), E(825), D(826), C(827), B(828), A(829)의 소스 데이터 요소를 포함한다. 도 8의 데이터 세그먼트의 표현에서, 데이터 요소 위치는 또한 데이터 아래쪽에 16진수 값으로서 표시되어 있다. 도 8에 도시한 바와 같이, 데이터 피연산자(821) 내의 워드 크기 데이터 요소들 각각은 2바이트 크기 위치를 차지하는 데이터 위치 주소를 갖는다. 예를 들어, 데이터 H(822)는 바이트 크기 데이터 요소 위치 OxF 및 OxE를 차지한다.
패킹된 셔플 동작은 마스크(801) 및 데이터(821)로 수행된다. 도 8의 화살표는 마스크(801) 내의 셔플 마스크마다의 데이터 요소의 셔플링을 나타낸다. 데이터 요소 셔플 마스크 각각이 평가될 때, 데이터 피연산자(821)의 지정된 데이터 요소 위치로부터의 적절한 데이터 또는 '0'이 그 특정의 셔플 마스크에 대한 결과(831) 내의 대응하는 데이터 요소 위치로 셔플링된다. 이 실시예에서, 바이트 크기 셔플 마스크는 워드 크기 데이터 요소를 지정하기 위해 쌍으로 연산된다. 예를 들어, 마스크 피연산자(801) 내의 2개의 최좌측 셔플 마스크 0x03(802), 0x02(803)는 함께 결과(831)의 최좌측 워드 폭 데이터 요소 위치(832)에 대응한다. 셔플 동작 동안에, 데이터 요소 바이트 위치 0x03 및 0x02에 있는 2개의 데이터 바이트, 즉 단일의 데이터 워드(이 경우, 데이터 B(828)임)는 결과(831) 내의 2개의 최좌측 바이트 크기 데이터 요소 위치(832) 내에 정렬된다.
게다가, 셔플 마스크는 또한 결과(831) 내의 3번째 워드 크기 데이터 요소 위치(834)에 대해 셔플 마스크 0x83(806) 및 0x82(807)로 나타낸 바와 같이, 워드 크기 데이터 요소를 결과에서 강제로 '0'이 되게 하도록 구성될 수 있다. 셔플 마스크 0x83(806) 및 0x82(807)는 그의 '영으로 설정' 필드가 설정되어 있다. 여기서 2개의 셔플 마스크 바이트가 함께 쌍으로 되어 있지만, 예를 들어 4바이트를 함께 쿼드워드로서 정렬하거나 또는 더블 쿼드워드를 형성하도록 8바이트를 함께 정렬하는 다른 쌍도 역시 구현될 수 있다. 이와 유사하게, 이 쌍은 연속적인 셔플 마스크 또는 특정의 바이트에 한정되지 않는다. 다른 실시예에서, 워드 크기 셔플 마스크가 워드 크기 데이터 요소를 지정하는 데 사용될 수 있다.
도 9는 데이터를 셔플링하는 방법의 일 실시예를 나타낸 흐름도(900)이다. L의 길이 값은 여기서 일반적으로 피연산자 및 데이터 블록의 폭을 표현하는 데 사용된다. 특정의 실시예에 따라, L은 그 폭을 데이터 세그먼트, 즉 비트, 바이트, 워드, 기타 등등의 수로 지정하는 데 사용될 수 있다. 블록(910)에서, 제1 길이 L 패킹된 데이터 피연산자가 셔플 동작에서 사용하기 위해 수신된다. 셔플 패턴을 지정하는 길이 L의 M 길이 셔플 마스크의 집합은 블록(920)에서 수신된다. 이 예 에서, L은 128비트이고 M은 8비트, 즉 한 바이트이다. 다른 실시예에서, L 및 M은 또한 각각 256 및 16 등의 다른 값일 수 있다. 블록(930)에서, 셔플 동작이 수행되며, 데이터 피연산자로부터의 데이터 요소가 셔플 패턴에 따라 결과로 셔플링되어 정렬된다.
각각의 데이터 요소 위치에 대해 무슨 일이 일어나는지의 관점에서 이 실시예의 블록(930)에서의 셔플에 대한 상세에 대해 더 기술한다. 일 실시예에서, 패킹된 결과 데이터 요소 위치 모두에 대한 셔플링은 병렬로 처리된다. 다른 실시예에서, 마스크의 어떤 부분은 한번에 모두 처리될 수 있다. 블록(932)에서, 제로 플래그(zero flag)가 설정되어 있는지를 결정하기 위해 검사가 행해진다. 이 제로 플래그는 각각의 셔플 마스크의 영으로 설정(set to zero)/영으로 플러시(flush to zero) 필드를 말한다. 블록(932)에서 제로 플래그가 설정된 것으로 결정된 경우, 그 특정의 셔플 마스크에 대응하는 결과 데이터 요소 위치에 있는 엔트리는 '0'으로 설정된다. 블록(932)에서 제로 플래그가 설정되어 있지 않은 것으로 판명된 경우, 셔플 마스크에 의해 지정된 소스 데이터 요소로부터의 데이터는 그 셔플 마스크에 대응하는 결과의 목적지 데이터 요소 위치로 정렬된다.
현재, 정수 명령어를 사용하는 테이블 룩업은 많은 수의 명령어를 필요로 한다. SIMD 명령어로 구현된 알고리즘에 대한 데이터에 액세스하기 위해 정수 연산이 사용되는 경우 룩업마다 훨씬 더 많은 수의 명령어가 필요하다. 그렇지만, 패킹된 바이트 셔플 명령어의 실시예를 사용함으로써, 명령어 카운트 및 실행 시간은 급격히 감소된다. 예를 들어, 테이블 크기가 16바이트 이하인 경우, 16개의 데이 터 바이트는 테이블 룩업 동안에 단일의 명령어로 액세스될 수 있다. 테이블 크기가 17 내지 32바이트인 경우 테이블 데이터를 룩업하는 데 11개 SIMD 명령어가 사용될 수 있다. 테이블 크기가 33 내지 64바이트인 경우 23개의 SIMD 명령어가 필요하다.
룩업 테이블의 사용으로 인해 SIMD 명령어로 구현될 수 없는 데이터 병렬 기능(parallelism)을 갖는 어떤 응용이 있다. 비디오 압축 방법 H.26L의 양자화 및 디블록킹(deblocking) 알고리즘은 128비트 레지스터에 들어가지 않을 수 있는 작은 룩업 테이블을 사용하는 알고리즘의 예이다. 어떤 경우에, 이들 알고리즘에 의해 사용되는 룩업 테이블은 작다. 테이블이 단일의 레지스터에 들어갈 수 있는 경우, 테이블 룩업 동작은 하나의 패킹된 셔플 명령어로 달성될 수 있다. 그렇지만, 테이블의 메모리 공간 요구사항이 단일의 레지스터의 크기를 초과하는 경우, 패킹된 셔플 명령어의 실시예는 여전히 다른 알고리즘을 통해 동작할 수 있다. 과도한 크기의 테이블을 처리하는 방법의 일 실시예는 테이블을 섹션들(각 섹션은 레지스터의 용량과 같음)로 나누며 셔플 명령어로 이들 테이블 섹션 각각에 액세스한다. 셔플 명령어는 테이블의 각 섹션에 액세스하기 위해 동일한 셔플 제어 시퀀스를 사용한다. 그 결과, 이들 경우에 패킹된 바이트 셔플 명령어로 병렬 테이블 룩업이 구현될 수 있으며, 따라서 알고리즘 성능을 향상하기 위해 SIMD 명령어를 사용할 수 있다. 본 발명의 실시예는 성능을 개선하고 또 작은 룩업 테이블을 사용하는 알고리즘을 위해 필요한 메모리 액세스의 횟수를 감소시키는 데 도움이 될 수 있다. 다른 실시예들도 역시 SIMD 명령어를 사용하여 다수의 룩업 테이블 요소에 액 세스할 수 있다. 본 발명에 따른 패킹된 바이트 셔플 명령어는 작은 룩업 테이블을 사용하는 알고리즘의 덜 효율적인 정수 구현 대신에 효율적인 SIMD 명령어 구현을 할 수 있다. 본 발명의 이 실시예는 단일 레지스터보다 더 큰 메모리 공간을 필요로 하는 테이블로부터의 데이터에 어떻게 액세스하는지를 설명한다. 이 예에서, 레지스터는 테이블의 서로 다른 세그먼트를 포함한다.
도 10a 내지 도 10h는 SIMD 명령어를 사용하는 병렬 테이블 룩업 알고리즘의 동작을 나타낸다. 도 10a 내지 도 10h에 도시된 예는 다수의 테이블로부터의 데이터의 룩업을 수반하며, 마스크의 집합에 지정된 어떤 선택된 데이터 요소들은 이들 다수의 테이블로부터 결과 데이터의 병합된 블록으로 셔플링된다. 이하의 논의는 패킹된 연산, 특히 앞서 개시된 바와 같은 패킹된 셔플 명령어의 관점에서 설명된다. 이 예의 셔플 동작은 레지스터 내의 소스 테이블 데이터를 오버라이트한다. 테이블이 룩업 동작 이후에 재사용되는 경우, 테이블 데이터는 또 한 번의 로드가 필요 없도록 그 동작이 실행되기 이전에 다른 레지스터로 복사되어야만 한다. 대체 실시예에서, 셔플 동작은 3개의 별도의 레지스터 또는 메모리 장소, 즉 2개의 소스 및 한 개의 목적지를 사용한다. 대체 실시예에서 목적지는 소스 피연산자 중 하나와 다른 레지스터 또는 메모리 장소이다. 따라서, 소스 테이블 데이터는 무시되지 않고 재사용될 수 있다. 이 예에서, 테이블 데이터는 보다 큰 테이블의 서로 다른 부분으로부터 오는 것으로 취급된다. 예를 들어, 하위 테이블 데이터(1021)는 테이블의 하위 주소 영역으로부터 온 것이고, 상위 테이블 데이터(1051)는 테이블의 상위 주소 영역으로부터 온 것이다. 본 발명의 실시예들은 테이블 데이터의 출처에 관하여 제한적인 것은 아니다. 데이터 블록(1021, 1051)은 인접하여 있거나, 멀리 떨어져 있거나 또는 심지어 중첩하고 있을 수 있다. 이와 유사하게, 테이블 데이터도 역시 서로 다른 데이터 테이블 또는 서로 다른 메모리 소스로부터 온 것일 수 있다. 또한, 이러한 테이블 룩업 및 데이터 병합이 다수의 테이블로부터의 데이터에 대해 수행될 수 있다는 것도 생각된다. 예를 들어, 동일한 테이블의 서로 다른 부분으로부터 오지 않고, 하위 테이블 데이터(1021)는 제1 테이블로부터 온 것일 수 있고, 상위 테이블 데이터(1051)는 제2 테이블로부터 온 것일 수 있다.
도 10a는 셔플 마스크의 집합에 기초하여 테이블로부터의 데이터 요소의 제1 집합의 패킹된 데이터 셔플을 나타낸 것이다. 이 데이터 요소의 제1 집합은 LOW TABLE DATA(1021)라는 이름의 피연산자로서 그룹화된다. MASK(1001) 및 LOW TABLE DATA(1021) 각각은 이 예에서 16개의 요소로 이루어져 있다. MASK(1001) 및 LOW TABLE DATA(1021)의 셔플 동작은 결과 TEMP RESULTANT A(1041)를 생성한다. 셔플 제어 마스크의 하위 부분은 레지스터 내의 데이터 요소를 선택한다. 데이터 요소를 선택하는 데 필요한 비트 수는 레지스터 데이터 요소의 수의 log2이다. 예를 들어, 레지스터 용량이 128비트이고 데이터 유형이 바이트인 경우, 레지스터 데이터 요소의 수는 16이다. 이 경우, 데이터 요소를 선택하는 데 4비트가 필요하다. 도 10b는 도 10a의 동일한 셔플 마스크의 집합에 기초하여 테이블로부터의 데이터 요소의 제2 집합의 패킹된 데이터 셔플을 나타낸 것이다. 이 데이터 요소의 제2 집 합은 HIGH TABLE DATA(1051)이라는 이름의 피연산자로서 그룹화된다. HIGH TABLE DATA(1051)는 또한 이 예에서 16개의 요소로 이루어져 있다. MASK(1001) 및 HIGH TABLE DATA(1051)의 셔플 동작은 결과 TEMP RESULTANT B(1041)를 생성한다.
동일한 마스크의 집합(1001)이 LOW TABLE DATA(1021) 및 HIGH TABLE DATA(1051) 둘 다와 함께 사용되었기 때문에, 그들 각각의 결과(1041, 1042)는 유사하게 배치된 데이터를 갖는 것처럼 보이지만 서로 다른 소스 데이터로부터 온 것이다. 예를 들어, 양 결과(1041, 1042)의 최좌측 데이터 위치는 그 각자의 데이터 소스(1021, 1051)의 데이터 요소 OxE(1023, 1053)로부터의 데이터를 갖는다. 도 10c는 SELECT FILTER(1043)와 셔플 마스크의 집합 MASK(1001)를 수반하는 논리적 패킹된 AND 연산을 나타낸 것이다. 이 경우 SELECT FILTER는 MASK(1001) 내의 셔플 마스크 중 어느 것이 제1 테이블 데이터(1021)와 연관되어 있고 어느 것이 제2 테이블 데이터(1051)와 연관되어 있는지를 구분하는 필터이다. 이 실시예의 셔플 마스크는 도 3c에서 이미 논의된 바와 같이, 소스 선택 필드 SRC SELECT(336)를 이용한다. 셔플 제어 바이트의 하위 비트는 레지스터 내의 데이터 요소 위치를 선택하는 데 사용되고, 최상위 비트를 제외한 상위 비트는 테이블의 세그먼트를 선택하는 데 사용된다. 이 실시예에서, 데이터를 선택하는 데 사용된 비트의 바로 위와 그에 인접한 비트는 테이블의 섹션을 선택한다. SELECT FILTER(1043)는 MASK(1001) 내의 모든 셔플 마스크에 0x10을 적용하여 셔플 마스크로부터 소스 선택 필드를 분리시킨다. 패킹된 AND 연산은 최종 결과 내의 어느 데이터 요소 위치가 제1 데이터 집합(1021)으로부터 또는 제2 데이터 집합(1051)으로부터 온 것이어 야 하는지를 나타내는 TABLE SELECT MASK(1044)를 생성한다.
테이블 섹션을 선택하기 위한 비트 수는 테이블 섹션의 수의 log2와 같다. 예를 들어, 16바이트 레지스터를 갖는 17 내지 32바이트 범위의 테이블 크기의 경우에, 최하위 4비트가 데이터를 선택하고 5번째 비트가 테이블 섹션을 선택한다. 여기서, 2개의 데이터 소스(1021, 1051)가 있을 때, 소스 선택은 데이터 소스를 지정하기 위해 각각의 셔플 마스크의 두 번째 니블의 최하위 비트, 즉 비트 4를 사용한다. 0 내지 15의 인덱스를 갖는 테이블의 섹션은 도 10a의 패킹된 셔플 명령어로 액세스된다. 16 내지 31의 인덱스를 갖는 테이블의 섹션은 도 10b의 패킹된 셔플 명령어로 액세스된다. 테이블의 섹션을 선택하는 필드는 도 10c의 셔플 제어 바이트/인덱스와 분리되어 있다. 더 많은 수의 데이터 소스를 갖는 구현에서, 소스 선택 필드를 위해 부가의 비트가 필요할 수 있다. 32바이트 테이블의 경우, 셔플 제어 바이트 0x00 내지 0x0F는 첫 번째 테이블 섹션에서 테이블 요소 0 내지 15를 선택하고, 셔플 제어 바이트 0x10 내지 0x1F는 두 번째 테이블 섹션에서 테이블 요소 16 내지 31을 선택한다. 예를 들어, 셔플 제어 바이트가 0x19를 지정하는 것으로 생각해보자. 0x19의 비트 표현은 0001 1001이다. 하위 4비트, 1001은 9번째 바이트(0부터 카운트함)를 선택하고 1로 설정되어 있는 5번째 비트는 2개의 테이블 중 두 번째 테이블을 선택한다. 5번째 비트가 0이면 첫 번째 테이블을 선택한다.
인덱스 0 내지 15를 갖는 첫 번째 테이블 섹션으로부터 액세스되는 데이터 값을 선택하는 마스크는 5번째 비트가 0인 셔플 제어 바이트를 선택함으로써 도 10d의 이 실시예에서 패킹된 동등 비교(compare equal) 연산으로 계산된다. 도 10d는 LOW FILTER(1045) 및 TABLE SELECT MASK(1044)의 패킹된 "동등 비교 연산"을 설명한다. 첫 번째 테이블 섹션에 대해 도 10d에서 생성되는 하위 테이블 선택 마스크는 또 하나의 패킹된 셔플 동작으로 첫 번째 테이블 섹션으로부터 액세스되는 데이터 요소를 선택한다. 이 예에서의 LOW FILTER(1045)는 제1 데이터 집합(1021)으로부터 오는 것으로 셔플 마스크에 의해 표시된 데이터 요소 위치를 뽑아내는(pull out) 또는 하이라이트(highlight)하는 마스크이다. 이 실시예에서 소스 선택 필드가 '0'인 경우, 데이터 소스는 LOW TABLE DATA(1021)가 된다. 동등 비교 연산은 '0'의 소스 선택 값을 갖는 데이터 요소 위치에 대해 0xFF 값을 갖는 LOW TABLE SELECT MASK(1046)를 생성한다.
인덱스 16 내지 31을 갖는 두 번째 테이블 섹션으로부터 액세스되는 데이터 값을 선택하는 마스크는 5번째 비트가 1인 셔플 제어 바이트를 선택함으로써 도 10e에서 패킹된 동등 비교(compare equal) 연산으로 계산된다. 도 10e는 HIGH FILTER(1047) 및 TABLE SELECT MASK(1044)에 대한 유사한 동등 비교 연산을 설명한다. 두 번째 테이블 섹션에 대해 도 10e에서 생성되는 상위 테이블 선택 마스크는 패킹된 셔플 동작으로 두 번째 테이블 섹션으로부터 액세스되는 데이터 요소를 선택한다. HIGH FILTER(1047)는 제2 데이터 집합(1051)으로부터 오는 것으로 셔플 마스크의 소스 선택 필드에 의해 표시된 데이터 요소 위치를 뽑아내는(pull out) 마스크이다. 이 실시예에서 소스 선택 필드가 '1'인 경우, 데이터 소스는 HIGH TABLE DATA(1051)가 된다. 동등 비교 연산은 '1'의 소스 선택 값을 갖는 데이터 요소 위치에 대해 0xFF 값을 갖는 HIGH TABLE SELECT MASK(1048)를 생성한다.
2개의 테이블 섹션으로부터 선택된 데이터 요소는 도 10f에서 병합된다. 도 10f에, LOW TABLE SELECT MASK(1046)와 TEMP RESULTANT A(1041)에 대한 패킹된 AND 연산이 도시되어 있다. 패킹된 AND 연산은 소스 선택 필드에 기초하는 마스크(1046)에 따라 제1 데이터 집합(1021)으로부터 선택된 셔플링된 데이터 요소를 필터링 제거한다. 예를 들어, 최좌측 데이터 요소 위치에 대한 셔플 마스크(1002) 내의 소스 선택 필드는 TABLE SELECT MASK(1044)에 나타낸 바와 같이 '0'의 값을 갖는다. 따라서, LOW TABLE SELECT MASK(1046)는 그 위치에서 OxFF 값을 갖는다. 여기 도 10f에서 OxFF와 최좌측 데이터 요소 위치 내의 데이터 간의 AND 연산은 데이터 O를 SELECTED LOW TABLE DATA(1049)로 옮겨가게 만든다. 반면에, 좌측으로부터 3번째 데이터 요소 위치에 대한 셔플 마스크(1004) 내의 소스 선택 필드는 그 데이터가 제1 데이터 집합(1021)이 아닌 소스로부터 온 것임을 나타내기 위해 '1'의 값을 갖는다. 따라서, LOW TABLE SELECT MASK(1046)는 그 위치에서 0x00 값을 갖는다. 여기서 AND 연산은 데이터 J를 SELECTED LOW TABLE DATA(1049)로 전달하지 않으며 그 위치는 0x00로서 비어 둔다.
HIGH TABLE SELECT MASK(1048) 및 TEMP RESULTANT B(1042)에 대한 유사한 패킹된 AND 연산은 도 10g에 도시되어 있다. 이 패킹된 AND 연산은 마스크(1048)에 따라 제2 데이터 집합(1051)으로부터 선택된 셔플링된 데이터 요소를 필터링 제거한다. 도 10f에 설명된 패킹된 AND 연산과는 달리, 마스크(1048)는 제2 데이터 집합으로부터 온 것으로서 소스 선택 필드에 의해 지정된 데이터가 SELECTED HIGH TABLE DATA(1050)으로 전달될 수 있게 해주는 반면 다른 데이터 요소 위치는 비어 둔다.
도 10h는 제1 데이터 집합 및 제2 데이터 집합으로부터의 선택된 데이터의 병합을 나타낸 것이다. 패킹된 논리적 OR 연산이 SELECTED LOW TABLE DATA(1049) 및 SELECTED HIGH TABLE DATA(1050)에 대해 수행되어, 이 예에서 병렬 테이블 룩업 알고리즘의 원하는 결과인 MERGED SELECTED TABLE DATA(1070)를 얻는다. 대체 실시예에서, SELECTED LOW TABLE DATA(1049)와 SELECTED HIGH TABLE DATA(1050)을 서로 부가하는 패킹된 부가(addition) 연산도 역시 MERGED SELECTED TABLE DATA(1070)를 생성한다. 도 10h에 도시된 바와 같이, SELECTED LOW TABLE DATA(1049)나 SELECTED HIGH TABLE DATA(1050) 중 어느 하나는 이 실시예에서 주어진 데이터 위치에 대해 0x00 값을 갖는다. 이 이유는 0x00 값을 갖지 않는 상대편 피연산자가 적절한 소스로부터 선택된 원하는 테이블 데이터를 포함해야 하기 때문이다. 여기서, 결과(1070)에서의 최좌측 데이터 요소 위치는 제1 데이터 집합(1021)으로부터의 셔플링된 데이터(1041)인 O이다. 이와 유사하게, 결과(1070)에서의 좌측으로부터 3번째 데이터 요소 위치는 제2 데이터 집합(1051)으로부터의 셔플링된 데이터(1042)인 Z이다.
이 예시적인 실시예에서 과도한 크기의 테이블에서 데이터를 탐색하는 방법은 일반적으로 이하의 동작으로 요약될 수 있다. 첫째, 테이블 데이터를 레지스터로 복사 또는 로드한다. 각각의 테이블 섹션으로부터의 테이블 값은 패킹된 셔플 동작으로 액세스된다. 테이블 섹션을 식별하는 소스 선택 필드는 셔플 마스크로부 터 추출된다. 어느 테이블 섹션이 셔플링된 데이터 요소에 대한 적절한 소스인지를 결정하기 위해 소스 선택 필드와 테이블 섹션 번호에 대해 동등 비교 연산(compare-if-equal operation)을 수행한다. 동등 비교 연산은 각각의 테이블 섹션에 대한 원하는 셔플링된 데이터 요소를 추가로 필터링 제거하기 위한 마스크를 제공한다. 적절한 테이블 섹션으로부터의 원하는 데이터 요소는 최종 테이블 룩업 결과를 형성하기 위해 서로 병합된다.
도 11은 SIMD 명령어를 사용하여 테이블 룩업을 수행하는 방법의 일 실시예를 나타낸 흐름도이다. 여기 설명된 흐름은 일반적으로 도 10a 내지 도 10h의 방법을 따르지만, 그 자체로서 한정되는 것은 아니다. 이들 동작 중 일부는 또한 다른 순서로 또는 여러 가지 유형의 SIMD 명령어를 사용하여 수행될 수 있다. 블록(1102)에서, 셔플 패턴을 지정하는 셔플 마스크의 집합이 수신된다. 이들 셔플 마스크는 또한 원하는 결과를 얻기 위해 어느 테이블 또는 소스로부터 데이터 요소를 셔플링해야 하는지를 나타내는 소스 필드를 포함한다. 블록(1104)에서, 테이블의 제1 부분, 즉 제1 데이터 집합에 대한 데이터 요소가 로드된다. 블록(1106)에서, 제1 부분 데이터 요소는 블록(1102)의 셔플 패턴에 따라 셔플링된다. 블록(1108)에서, 테이블의 제1 부분, 즉 제2 데이터 집합에 대한 데이터 요소가 로드된다. 블록(1110)에서, 제2 부분 데이터 요소는 블록(1102)의 셔플 패턴에 따라 셔플링된다. 블록(1112)에서, 테이블 선택이 셔플 마스크로부터 필터링 제거된다. 이 실시예의 테이블 선택은 데이터 요소의 출처를 지정하는 소스 선택 필드를 포함한다. 블록(1114)에서, 테이블의 제1 부분으로부터의 셔플링된 데이터에 대해 테이블 선 택 마스크가 생성된다. 블록(1116)에서, 테이블의 제2 부분으로부터의 셔플링된 데이터에 대해 테이블 선택 마스크가 생성된다. 이들 테이블 선택 마스크는 적절한 테이블 데이터 소스로부터 특정의 데이터 요소 위치에 대한 원하는 셔플링된 데이터 요소를 필터링 제거한다.
블록(1118)에서, 데이터 요소들이 제1 테이블 부분에 대한 블록(1114)의 테이블 선택 마스크에 따라 제1 테이블 부분의 셔플링된 데이터로부터 선택된다. 블록(1120)에서, 데이터 요소들이 제2 테이블 부분에 대한 블록(1116)의 테이블 선택 마스크에 따라 제2 테이블 부분의 셔플링된 데이터로부터 선택된다. 블록(1122)에서, 블록(1118)에서 제1 테이블 부분으로부터 선택된 셔플링된 데이터 요소 및 블록(1120)에서 제2 테이블 부분으로부터 선택된 셔플링된 데이터 요소가 병합된 테이블 데이터를 얻기 위해 서로 병합된다. 일 실시예의 병합된 테이블 데이터는 제1 테이블 데이터 및 제2 테이블 데이터 둘 다로부터 셔플링된 데이터 요소를 포함한다. 다른 실시예에서, 병합된 테이블 데이터는 3개 이상의 테이블 소스 또는 메모리 영역으로부터 탐색된 데이터를 포함할 수 있다.
도 12는 테이블 룩업을 수행하는 방법의 다른 실시예를 나타낸 흐름도이다. 블록(1202)에서, 복수의 데이터 요소를 갖는 테이블이 로드된다. 블록(1204)에서, 테이블이 단일의 레지스터에 들어가는지에 관한 판정이 행해진다. 테이블이 단일의 레지스터에 들어가는 경우, 블록(1216)에서 셔플 동작으로 테이블 룩업이 수행된다. 데이터가 단일의 레지스터에 들어가지 않는 경우, 블록(1206)에서 테이블의 각각의 관련 부분에 대해 셔플 동작으로 테이블 룩업이 수행된다. 테이블 부분 또 는 데이터 소스를 선택하는 비트 또는 필드를 획득하기 위해 논리적 패킹된 AND 연산이 수행된다. 블록(1210)에서의 "동등 비교" 동작은 룩업될 테이블의 관련 부분들로부터 테이블 데이터를 선택하는 마스크를 생성한다. 블록(1212)에서, 테이블 섹션으로부터 데이터 항목을 룩업 및 선택하기 위해 논리적 AND 연산이 사용된다. 블록(1214)에서, 논리적 OR 연산은 원하는 테이블 룩업 데이터를 얻기 위해 선택된 데이터를 병합한다.
패킹된 셔플 명령어의 일 실시예는 영으로 플러시(flush to zero) 기능을 사용하여 다수의 레지스터 간에 데이터를 재정렬하기 위한 알고리즘으로 구현된다. 혼합(mix) 동작의 목적은 2개 이상의 SIMD 레지스터의 내용을 단일의 SIMD 레지스터에 선택된 배열로 병합하는 것이며, 이 경우 결과에서의 데이터의 위치는 소스 피연산자에서의 그의 원래의 위치와 다르다. 선택된 데이터 요소는 먼저 원하는 결과 위치로 이동되고, 미선택된 데이터 요소는 0으로 설정된다. 한 레지스터에 있어서 선택된 데이터 요소가 이동된 위치는 다른 레지스터에서 0으로 설정된다. 결과적으로, 결과 레지스터 중 단 하나가 주어진 데이터 요소 위치에 비제로(nonzero) 데이터 항목을 포함할 수 있다. 이하의 일반적인 명령어 시퀀스는 2개의 피연산자로부터의 데이터를 혼합하는 데 사용될 수 있다.
packed byte shuffle DATA A, MASK A;
packed byte shuffle DATA B, MASK B;
packed logical OR RESULTANT A, RESULTANT B.
피연산자 DATA A 및 DATA B는 재정렬되거나 0으로 설정될 요소를 포함한다. 피연산자 MASK A 및 MASK B는 데이터 요소가 어디로 이동되는지 및 어느 데이터 요소가 0으로 설정되는지를 지정하는 셔플 제어 바이트를 포함한다. 이 실시예에서, MASK A에 의해 0으로 설정되지 않는 목적지 위치 내의 데이터 요소는 MASK B에 의해 0으로 설정되고, MASK B에 의해 0으로 설정되지 않는 목적지 위치 내의 데이터 요소는 MASK A에 의해 0으로 설정된다. 도 13a 내지 도 13c는 다수의 레지스터 간에 데이터를 재정렬하는 알고리즘을 나타낸 것이다. 이 예에서, 2개의 데이터 소스 또는 레지스터(1304, 1310)로부터의 데이터 요소는 함께 셔플링되어 인터리빙된 데이터 블록(1314)으로 된다. 이 예의 마스크(1302, 1308), 소스 데이터(1304, 1310), 및 결과(1306, 1312, 1314)는 각각 128비트 길이이고, 16바이트 크기 데이터 요소로 이루어져 있다. 그렇지만, 대체 실시예는 여러 가지 크기의 데이터 요소를 갖는 다른 길이의 데이터 블록을 포함할 수 있다.
도 13a는 제1 소스 데이터 피연산자 DATA A(1304)에 대한 제1 마스크 MASK A(1302)의 제1 패킹된 데이터 셔플 동작을 나타낸 것이다. 이 예에서, 원하는 인터리빙된 결과(1314)는 제1 데이터 소스(1304)로부터의 하나의 데이터 요소와 제2 데이터 소스(1310)로부터의 또 하나의 데이터 요소의 인터리빙된 패턴을 포함한다. 이 예에서, DATA A(1304)의 5번째 바이트는 DATA B(1310)의 20번째 바이트와 인터리빙된다. 이 실시예에서, MASK A(1302)는 "0x80" 및 "0x05"의 반복된 패턴을 포함한다. 이 실시예에서, 0x80은 영으로 설정(set to zero) 필드가 설정되어 있으며, 여기서 관련 데이터 요소 위치는 '0'으로 채워진다. 0x05 값은 그 셔플 마스크에 대한 관련 데이터 요소 위치가 DATA A(1304)의 데이터 요소 Ox5로부터의 데이 터 F1으로 정렬되어야만 함을 나타낸다. 기본적으로, MASK A(1302)에서의 셔플 패턴은 하나 걸러 결과 데이터 요소 위치에 데이터 F1을 정렬 및 반복한다. 여기서, 데이터 F1은 DATA A(1304)로부터 셔플링될 단일의 데이터이다. 대체 실시예에서, 다수의 소스 데이터 요소로부터의 데이터가 셔플링될 수 있다. 따라서, 실시예들은 임의의 특정 패턴 또는 단일의 데이터를 포함하는 패턴으로 한정되지 않는다. 마스크 패턴에 대한 정렬 조합은 어느 것이나 가능하다. 도 13a에서의 화살표는 MASK A(1302)의 셔플 마스크에 따라 데이터 요소를 셔플링하는 것을 나타낸다. 이 셔플 동작의 RESULTANT A(1306)는 따라서 마스크 패턴(1302)에 따라 '0'과 F1의 패턴으로 이루어져 있다.
도 13b는 제2 소스 데이터 피연산자 DATA B(1310)와 함께 제2 마스크 MASK B(1308)를 수반하는 제2 패킹된 데이터 셔플 동작을 나타낸 것이다. MASK B(1308)는 "0x0C" 및 "0x80"의 반복된 패턴을 포함한다. 0x80 값은 그 셔플 마스크에 대한 관련 데이터 위치가 '0'을 수신하게 한다. Ox0C 값은 그 셔플 마스크에 대응하는 결과 데이터 요소 위치가 DATA B(1310)의 데이터 요소 OxC로부터의 데이터 M2로 정렬되게 한다. MASK B(1308)의 셔플 패턴은 하나 걸러 결과 데이터 요소 위치에 데이터 M2를 정렬한다. 도 13b에서의 화살표는 MASK B(1308) 내의 셔플 마스크의 집합에 따라 데이터 요소를 셔플링하는 것을 나타낸다. 이 셔플 동작의 RESULTANT B(1312)는 따라서 마스크 패턴(1308)에 따라 '0'과 M2의 패턴으로 이루어져 있다.
도 13c는 INTERLEAVED RESULTANT(1314)를 얻기 위해 셔플링된 데이터 RESULTANT A(1306) 및 RESULTANT B(1312)를 병합하는 것을 나타낸 것이다. 이 병합은 패킹된 논리적 OR 연산으로 달성된다. RESULTANT A(1306) 및 RESULTANT B(1312)에서의 '0' 값의 패턴은 M2 및 F1 데이터 값(1314)의 인터리빙을 가능하게 해준다. 예를 들어, 최좌측 데이터 요소 위치에서, '0'과 M2의 논리적 OR의 결과, M2는 결과(1314)의 최좌측 데이터 요소 위치에 있게 된다. 이와 유사하게, 최우측 데이터 요소 위치에서, F1과 '0'의 논리적 OR의 결과, F1은 결과(1314)의 최우측 데이터 요소 위치에 있게 된다. 따라서, 다수의 레지스터 또는 메모리 장소로부터의 데이터가 원하는 패턴으로 재정렬될 수 있다.
도 14는 다수의 레지스터 간에 데이터를 재정렬하는 방법의 일 실시예를 나타낸 흐름도이다. 블록(1402)에서, 제1 레지스터 또는 메모리 장소로부터 데이터가 로드된다. 블록(1404)에서, 제1 레지스터 데이터가 셔플 마스크의 제1 집합에 기초하여 셔플링된다. 블록(1406)에서, 제1 레지스터 또는 메모리 장소로부터 데이터가 로드된다. 블록(1408)에서, 이 제2 레지스터 데이터가 셔플 마스크의 제2 집합에 따라 셔플링된다. 블록(1410)에서, 제1 및 제2 레지스터로부터의 셔플링된 데이터는 논리적 OR로 병합되어 제1 및 제2 레지스터로부터의 데이터를 갖는 인터리빙된 데이터 블록에 도달한다.
도 15a 내지 도 15k는 인터리빙된 데이터를 생성하기 위해 다수의 레지스터 간에 데이터를 셔플링하는 알고리즘을 나타낸 것이다. 이것은 평면 컬러 데이터를 인터리빙하는 응용의 예이다. 이미지 데이터는 종종 별도의 컬러 평면에서 처리되고 이어서 이들 평면은 나중에 디스플레이를 위해 인터리빙된다. 이하에 기술되는 알고리즘은 비트맵 등의 이미지 포맷에 의해 사용되는 적색 평면, 녹색 평면 및 청색 평면에 대한 인터리빙을 설명한다. 다수의 컬러 공간 및 인터리빙 패턴이 가능하다. 그 자체로서, 이 방법은 용이하게 다른 컬러 공간 및 포맷으로 확장될 수 있다. 이 예는 적색(R) 평면, 녹색(G) 평면 및 청색(B)평면 데이터가 RGB 포맷으로 인터리빙되는, 종종 사용되는 이미지 처리 데이터 포맷 프로세스를 구현한다. 이 예는 본 발명에 따른 영으로 플러시(flush to zero) 기능이 메모리 액세스를 어떻게 상당히 감소시키는지를 설명한다.
3개의 소스로부터의 데이터가 인터리빙된 방식으로 합성된다. 보다 상세하게는, 데이터는 픽셀 컬러 데이터에 관한 것이다. 예를 들어, 각 픽셀에 대한 컬러 데이터는 적색(R), 녹색(G) 및 청색(B) 소스로부터의 정보를 포함할 수 있다. 컬러 정보를 합성함으로써, 그 특정 픽셀에 대한 원하는 컬러를 제공하는 적색/녹색/청색(RGB) 데이터가 평가될 수 있다. 여기서, 적색 데이터는 피연산자 DATA A(1512)에 보유되고, 녹색 데이터는 피연산자 DATA B(1514)에 보유되며, 청색 데이터는 피연산자 DATA C(1516)에 보유된다. 이 배열은 그래픽 또는 메모리 시스템에 존재할 수 있으며, 여기서 각각의 개별적인 컬러에 대한 데이터가 스트리밍 데이터에서와 같이 함께 저장되거나 개별적으로 수집된다. 원하는 이미지를 재생성 또는 디스플레이하는 데 이 정보를 사용하기 위해, 픽셀 데이터는 특정의 픽셀에 대한 데이터 모두가 함께 그룹화되어 있는 RGB 패턴으로 정렬되어야만 한다.
이 실시예에서, 소정의 패턴을 갖는 마스크의 집합이 RGB 데이터를 서로 인터리빙하는 데 사용된다. 도 15a는 마스크의 집합, 제1 패턴을 갖는 MASK A(1502), 제2 패턴을 갖는 MASK B(1504) 및 제3 패턴을 갖는 MASK C(1506)를 나타낸 것이다. 각 레지스터로부터의 데이터는 2개의 다른 레지스터로부터의 데이터와 인터리빙될 수 있도록 3바이트 간격으로 떨어져 있다. 16진수 값 0x80을 갖는 제어 바이트는 최상위 비트가 설정되어 있으며, 따라서 대응하는 바이트는 패킹된 바이트 셔플 명령어에 의해 영으로 플러시된다. 이들 마스크 각각에서, 매 3번째 셔플 마스크는 2개의 인터리빙 셔플 마스크가 0x80의 값을 갖는 동안 셔플링을 위한 데이터 요소를 선택할 수 있게 된다. 0x80 값은 그 대응하는 데이터 요소 위치에 대한 마스크 내의 영으로 설정(set to zero) 필드가 설정되어 있음을 나타낸다. 따라서, '0'은 그 마스크와 연관된 데이터 요소 위치에 배치된다. 이 예에서, 마스크 패턴은 인터리빙을 달성하기 위해 기본적으로 각 컬러에 대한 데이터 요소를 분리시킨다. 예를 들어, MASK A(1502)가 셔플링 동작에서 데이터 피연산자에 적용될 때, MASK A(1502)는 6개의 데이터 요소(0x1, 0x2, 0x3, 0x4, 0x5, 0x6)가 각 데이터 요소 사이에 2개의 데이터 요소 공간을 갖게 떨어져 셔플링되게 한다. 이와 유사하게, MASK B(1504)는 0x0, 0x1, 0x2, 0x3, 0x4에 있는 데이터 요소를 떨어져 있게 셔플링한다. MASK C(1506)는 0x0, 0x1, 0x2, 0x3, 0x4에 있는 데이터 요소를 떨어져 있게 셔플링한다.
유의할 점은 이 구현에서 각각의 특정의 중첩하는 데이터 요소 위치에 대한 셔플 마스크가 2개의 영으로 설정 필드가 설정되어 있으며 하나의 셔플 마스크가 데이터 요소를 지정한다. 예를 들어, 3개의 마스크 집합(1502, 1504, 1506)에 대한 최우측 데이터 요소 위치를 참조하면, 셔플 마스크 값은 MASK A(1502), MASK B(1504) 및 MASK C(1506)에 대해 각각 0x00, 0x80 및 0x80이다. 따라서, MASK A(1502)에 대한 셔플 마스크 0x00만이 이 위치에 대한 데이터를 지정한다. 이 실시예에서, 마스크는 셔플링된 데이터가 인터리빙된 RGB 데이터 블록을 형성하기 위해 용이하게 병합될 수 있도록 패턴화되어 있다.
도 15b는 인터리빙될 데이터의 블록들, DATA A(1512), DATA B(1514) 및 DATA C(1516)을 나타낸 것이다. 이 실시예에서, 각각의 데이터 집합은 16개 픽셀 위치에 대한 컬러 정보를 갖는 데이터 엔트리를 갖는다. 여기서, 데이터 요소에서의 각각의 컬러 문자에 수반되는 첨자 표시는 그 픽셀 번호를 나타낸다. 예를 들어, R0는 픽셀 0에 대한 적색 데이터이고, G15는 픽셀 15에 대한 녹색 데이터이다. 예시된 각 데이터 요소에서의 16진수 값은 그 데이터 요소 위치의 번호이다. 컬러 데이터(DATA A(1512), DATA B(1514), DATA C(1516))는 데이터가 셔플 동작에 의해 오버라이트되지 않고 또 또 하나의 로드 동작 없이 재사용될 수 있도록 다른 레지스터로 복사될 수 있다. 이 실시예의 예에서, 픽셀 데이터 인터리빙을 완료하기 위해 3개의 마스크(1502, 1504, 1506)에 의한 3번의 패스(pass)가 필요하다. 대체 구현 및 다른 데이터 양에 있어서, 패스 및 셔플링 동작의 횟수는 필요에 따라 변할 수 있다.
도 15c는 제1 셔플 패턴 MASK A(1502)로 적색 픽셀 데이터 DATA A(1512)에 대한 패킹된 셔플 동작의 결과 데이터 블록 MASKED DATA A(1522)를 나타낸 것이다. MASK A(1502)에 응답하여, 적색 픽셀 데이터는 매 3번째 데이터 요소 위치로 정렬된다. 이와 유사하게, 도 15d는 제2 셔플 패턴 MASK B(1504)로 녹색 픽셀 데이터 DATA B(1514)에 대한 패킹된 셔플 동작의 결과 데이터 블록 MASKED DATA B(1524)를 나타낸 것이다. 도 15e는 제3 셔플 패턴 MASK C(1506)로 청색 픽셀 데이터 DATA C(1516)에 대한 셔플 동작의 결과 데이터 블록 MASKED DATA C(1526)를 나타낸 것이다. 이 실시예의 마스크 패턴에서, 이들 셔플 동작으로부터의 결과 데이터 블록은 2개가 '0'을 갖는 동안 데이터 요소 중 하나가 데이터를 갖도록 엇갈리게 되어 있는 데이터 요소를 제공한다. 예를 들어, 이들 결과(1522, 1524, 1526)의 최좌측 데이터 요소 위치는 각각 R5, '0' 및 '0'을 포함한다. 그 다음 데이터 요소 위치에, RGB 컬러의 또 다른 하나에 대한 픽셀 데이터가 제공된다. 따라서, 서로 병합될 때, RGB 유형의 그룹화가 달성된다.
이 실시예에서, 적색 데이터 및 녹색 데이터에 대한 상기 셔플링된 데이터는 먼저 패킹된 논리적 OR 연산으로 서로 병합된다. 도 15f는 MASKED DATA A(1522) 및 MASKED DATA B(1524)의 패킹된 논리적 OR에 대한 결과 데이터 INTERLEAVED A & B DATA(1530)를 나타낸 것이다. 셔플링된 청색 데이터가 이제 또 하나의 패킹된 논리적 OR 연산으로 인터리빙된 적색 및 녹색 데이터와 서로 병합된다. 도 15g는 MASKED DATA C(1526) 및 MASKED DATA A & B(1530)의 패킹된 논리적 OR 연산으로부터의 새로운 결과 INTERLEAVED A, B & C DATA(1532)를 나타낸 것이다. 따라서, 도 15g의 결과 데이터 블록은 처음 5개의 픽셀 및 6번째 픽셀의 일부에 대한 인터리빙 된 RGB 데이터를 포함한다. 이 실시예의 알고리즘의 차후의 반복은 16개 픽셀의 나머지에 대한 인터리빙된 RGB 데이터를 생성한다.
이 시점에서, DATA A(1512), DATA B(1514) 및 DATA C(1516) 내의 데이터의 1/3이 인터리빙되었다. 이들 레지스터 내의 나머지 데이터를 처리하는 데 2가지 방법이 사용될 수 있다. 인터리빙될 데이터를 정렬하는 데 또 하나의 셔플 제어 바이트의 집합이 사용될 수 있거나 DATA A(1512), DATA B(1514) 및 DATA C(1516) 내의 데이터는 셔플 마스크(1502, 1504, 1506)가 다시 사용될 수 있도록 우측으로 시프트될 수 있다. 여기 설명한 구현에서, 부가의 셔플 제어 바이트를 로드하는 데 요구되는 메모리 액세스를 행하지 않기 위해 데이터가 시프트된다. 이들 시프트 동작이 없으면, 이 실시예에서 3개(MASK A(1502), MASK B(1504), MASK C(1506))가 아닌 9개의 제어 바이트 집합이 필요하게 된다. 이 실시예는 또한 제한된 수의 레지스터가 이용가능하고 또 메모리 액세스가 긴 아키텍처에서 적용될 수 있다.
많은 수의 레지스터가 이용가능한 대체 실시예에서, 시프트 동작이 필요 없도록 모든 마스크 집합 또는 많은 수의 마스크 집합을 레지스터에 보관하는 것이 보다 효율적일 수 있다. 게다가, 많은 레지스터 및 실행 유닛을 갖는 아키텍처에서, 모든 셔플 동작은 시프트가 일어나기를 기다릴 필요없이 병렬로 수행될 수 있다. 예를 들어, 9개의 셔플 유닛 및 9개의 마스크 집합을 갖는 비순차적 프로세서(out-of-order processor)는 9개의 셔플 동작을 병렬로 수행할 수 있다. 상기 실시예에서, 데이터는 마스크가 재적용되기 이전에 시프트되어야만 한다.
DATA A(1512), DATA B(1514) 및 DATA C(1516)의 원래의 컬러 데이터 내의 데 이터 요소들은 그 특정의 컬러에 대해 이미 처리된 데이터 요소의 수에 따라 시프트된다. 이 예에서, 6개의 픽셀에 대한 데이터가 이미 적색에 대해 처리되었고, 따라서 적색 데이터 피연산자 DATA A(1512)에 대한 데이터 요소는 6개의 데이터 요소 위치만큼 우측으로 시프트된다. 이와 유사하게, 녹색 및 청색 둘 다에 대해 5개의 픽셀에 대한 데이터가 처리되었고, 따라서 녹색 데이터 피연산자 DATA B(1514) 및 청색 데이터 피연산자 DATA C(1516)는 각각 5개의 데이터 요소 위치만큼 우측으로 시프트된다. 시프트된 소스 데이터는 도 15h에서 적색, 녹색 및 청색 컬러에 대해 각각 DATA A'(1546), DATA B'(1542) 및 DATA C'(1544)로서 예시되어 있다.
도 15a 내지 도 15g에서 전술한 바와 같은 셔플 및 논리적 OR 연산은 이 시프트된 데이터에 대해 반복된다. 3개의 패킹된 셔플 결과에 대한 패킹된 논리적 OR 연산과 관련하여 MASK A(1502), MASK B(1504) 및 MASK C(1506)으로 각각 DATA B'(1542), DATA C'(1544) 및 DATA A'(1546)에 대한 차후의 패킹된 셔플 동작은 또 다른 4개의 픽셀 및 또 다른 2개의 일부에 대해 인터리빙된 RGB 데이터를 제공한다. 이 결과 데이터 INTERLEAVED A', B' AND C' DATA(1548)는 도 15i에 나타내어져 있다. 유의할 점은 최우측 2개의 데이터 요소가 그의 적색 데이터 R5가 이미 제1 인터리빙된 데이터 집합(1532)으로 정렬되어 있는 6번째 픽셀과 관련이 있다는 것이다. 원래의 픽셀 컬러 데이터는 두 번째 패스의 처리 결과에 따라 적절한 자릿수만큼 다시 시프트된다. 여기서, 5개의 부가의 픽셀에 대한 데이터가 적색 및 청색에 대해 처리되고, 따라서 적색 데이터 피연산자 DATA A'(1546) 및 청색 데이터 피연산자 DATA C'(1544)에 대한 데이터 요소가 5개의 데이터 요소 위치만큼 우측으로 시프트된다. 6개의 픽셀에 대한 데이터가 녹색에 대해 처리되고, 따라서 녹색 데이터 피연산자 DATA B'(1542)에 대한 데이터 요소는 6개 위치만큼 우측으로 시프트된다. 이 세 번째 패스에 대한 시프트된 데이터는 도 15j에 나타내어져 있다. 상기 패킹된 셔플 및 논리적 OR 연산의 반복이 DATA C"(1552), DATA B"(1554) 및 DATA B"(1556)에 적용된다. 16개 픽셀 중 마지막 것에 대한 결과 인터리빙된 RGB 데이터는 도 15k에 INTERLEAVED A",B" DATA(1558)로서 나타내어져 있다. B10을 갖는 최우측 데이터 요소는 그의 녹색 데이터 G10 및 적색 데이터 R10이 이미 제2 인터리빙된 데이터 집합(1548)으로 정렬되어 있는 11번째 픽셀과 관련되어 있다. 따라서, 패킹된 논리적 OR 연산 및 마스크 패턴의 집합으로 패킹된 셔플의 집합을 통해, 다수의 소스(1512, 1514, 1516)로부터의 데이터는 이들 결과(1532, 1548, 1558)와 같이 추가의 사용 또는 처리를 위해 원하는 방식으로 함께 병합되고 재정렬될 수 있다.
도 16은 인터리빙된 데이터를 생성하기 위해 다수의 레지스터 간에 데이터를 셔플링하는 방법의 일 실시예를 나타낸 흐름도이다. 예를 들어, 본 방법의 실시예는 도 15a 내지 도 15k에서 논의된 바와 같이 인터리빙된 픽셀 데이터의 생성에 적용될 수 있다. 본 실시예가 3개의 데이터 소스 또는 데이터 평면의 관점에서 기술되어 있지만, 다른 실시예들은 2개 이상의 데이터 평면으로 동작할 수 있다. 이들 데이터 평면은 하나 이상의 이미지 프레임에 대한 컬러 데이터를 포함할 수 있다. 블록(1602)에서, 제1, 제2 및 제3 평면에 대한 프레임 데이터가 로드된다. 이 예에서, 복수의 픽셀에 대한 RGB 컬러 데이터는 3개의 서로 다른 평면으로부터의 개별적인 컬러로서 이용가능하다. 제1 평면에서의 데이터는 적색 컬러에 대한 것이고, 제2 평면에서의 데이터는 녹색에 대한 것이며, 제3 평면에서의 데이터는 청색에 대한 것이다. 블록(1604)에서, 셔플 제어 패턴(M1, M2, M3)을 갖는 마스크의 집합이 로드된다. 이들 셔플 제어 패턴은 컬러를 서로 인터리빙하기 위하여 데이터의 배열 및 셔플 패턴을 결정한다. 구현에 따라, 원하는 데이터 정렬을 생성하기 위해 임의의 수의 셔플 패턴이 사용될 수 있다.
블록(1606)에서, 각각의 데이터 평면에 대해 적절한 제어 패턴이 선택된다. 이 실시예에서, 컬러 데이터가 어느 순서로 요망되는지 및 현재 어느 반복이 실행되고 있는지에 기초하여 셔플 패턴이 선택된다. 블록(1608)에서, 제1 데이터 집합, 즉 적색으로부터의 프레임 데이터는 셔플링된 적색 데이터를 얻기 위해 제1 셔플 제어 패턴으로 셔플링된다. 블록(1610)에서, 제2 데이터 집합, 즉 녹색은 셔플링된 녹색 데이터를 얻기 위해 제2 셔플 제어 패턴으로 셔플링된다. 블록(1612)에서, 제3 데이터 집합, 즉 청색은 셔플링된 청색 데이터를 얻기 위해 제3 셔플 제어 패턴으로 셔플링된다. 이 실시예에서 3개의 마스크 및 그의 셔플 제어 패턴이 서로 다르지만, 마스크 및 그의 셔플 패턴은 각각의 반복 동안에 2개 이상의 데이터 집합에 대해 사용될 수 있다. 게다가, 어떤 마스크는 다른 것보다 더 자주 사용될 수 있다.
블록(1614)에서, 3개의 데이터 집합에 대한 셔플링된 데이터 블록(1608, 1610, 1612)이 이 패스에 대한 인터리빙된 결과를 형성하기 위해 서로 병합된다. 예를 들어, 첫 번째 패스의 결과는 도 15g의 인터리빙된 데이터(1532)처럼 보일 수 있고, 여기서 각 픽셀에 대한 RGB 데이터는 집합으로서 서로 그룹화된다. 블록(1616)에서, 셔플링하기 위해 레지스터에 로드된 프레임 데이터가 더 있는지를 판정하기 위한 검사가 행해진다. 없는 경우, 블록(1620)에서, 인터리빙될 3개의 데이터 평면으로부터의 데이터가 더 있는지를 판정하기 위한 검사가 행해진다. 없는 경우, 방법은 종료된다. 블록(1620)에서 이용가능한 평면 데이터가 더 있는 경우, 프로세스는 셔플링을 위한 추가의 프레임 데이터를 로드하기 위해 블록(1602)으로 되돌아간다.
블록(1616)에서의 판정이 참(true)인 경우, 컬러 데이터의 각 평면 내의 프레임 데이터는 마지막 패스 동안에 그 특정의 컬러에 대한 데이터 집합에 어느 마스크 패턴이 적용되었는지에 대응하는 소정의 카운트만큼 시프트된다. 예를 들어, 도 15g로부터의 첫 번째 패스 예를 따라가면, 제1, 제2 및 제3 평면에서의 적색, 녹색 및 청색 데이터는 각각 6개, 5개 및 5개 위치만큼 시프트된다. 구현에 따라, 각각의 컬러 데이터에 대해 선택된 셔플 패턴은 각 패스마다 서로 다르거나 동일한 것이 재사용될 수 있다. 일 실시예에서, 두 번째 패스 동안에, 제1 반복으로부터의 3개의 마스크는 제1 평면 데이터가 제3 마스크와 짝을 이루고 제2 평면 데이터는 제1 마스크와 짝을 이루며, 또 제3 평면 데이터는 제3 마스크와 짝을 이루도록 회전된다. 이 마스크 회전은 도 15g 및 도 15i에 나타낸 바와 같이, 한 패스에서 그 다음 패스로 인터리빙된 RGB 데이터의 적절한 연속성을 가능하게 해준다. 셔플 링 및 병합은 첫 번째 패스에서와 같이 계속된다. 3번째 또는 그 이상의 반복이 요망되는 경우, 이 실시예의 셔플 마스크 패턴은 더 많은 인터리빙된 RGB 데이터를 생성하기 위해 서로 다른 데이터 평면들 간을 계속하여 회전된다.
본 발명에 따라 패킹된 셔플 명령어를 사용하는 알고리즘의 실시예는 또한 현재의 하드웨어 자원을 갖는 프로세서 및 시스템 성능을 향상시킬 수 있다. 그렇지만, 기술이 계속하여 향상됨에 따라, 본 발명의 실시예는 더 많은 하드웨어 자원 및 더 빠르고 더 효율적인 로직 회로와 결합되면 성능 개선에 훨씬 더 엄청난 영향을 줄 것이다. 따라서, 바이트 입도 및 영으로 플러시 옵션을 갖는 패킹된 셔플 명령어의 한 효율적인 실시예는 프로세서 세대에 걸쳐 서로 다른 더 큰 영향을 줄 수 있다. 최신의 프로세서 아키텍처에 더 많은 자원을 단순히 부가하는 것만으로는 더 나은 성능 개선을 보장하지 못한다. 병렬 테이블 룩업 및 패킹된 바이트 셔플 명령어(PSHUFB)의 일 실시예와 같이 애플리케이션의 효율성을 유지함으로써도, 더 나은 성능 개선이 가능하다.
상기 예가 일반적으로 논의를 단순화시키기 위해 128비트 폭 하드웨어/레지스터/피연산자의 관점에서 기술되어 있지만, 다른 실시예들은 패킹된 셔플 동작, 병렬 테이블 룩업, 및 다중 레지스터 데이터 재정렬을 수행하기 위해 64 또는 128비트 폭 하드웨어/레지스터/피연산자를 사용한다. 게다가, 본 발명의 실시예들은 MMX/SSE/SSE2 기술 등의 특정의 하드웨어 또는 기술 유형에 한정되지 않으며, 다른 SIMD 구현 및 다른 그래픽 데이터 처리 기술과 함께 사용될 수 있다.
이상의 설명에서, 본 발명은 그의 특정의 예시적인 실시예를 참조하여 기술되었다. 그렇지만, 첨부된 청구항에 기술된 본 발명의 광의의 정신 및 범위를 벗어나지 않고 여러 가지 수정 및 변경이 행해질 수 있음은 명백하다. 따라서, 명세서 및 도면은 제한적 의미가 아닌 예시적 의미로서 고려되어야만 한다.

Claims (54)

  1. L개의 데이터 요소의 집합을 갖는 제1 피연산자 및 L개의 제어 요소의 집합을 갖는 제2 피연산자를 수신하는 단계; 및
    각각의 제어 요소에 대해, 영으로 플러시 필드(flush to zero field)가 설정되어 있지 않은 경우, 상기 제어 요소에 의해 지정된 제1 피연산자 데이터 요소로부터의 데이터를 연관된 결과 데이터 요소 위치로 셔플링하고, 영으로 플러시 필드가 설정되어 있는 경우, 상기 연관된 결과 데이터 요소 위치에 영(zero)을 삽입하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서, 상기 L개의 제어 요소 각각은 상기 제2 피연산자에서 특정 위치를 차지하며, 결과에서 대응하는 위치에 위치한 데이터 요소와 연관되어 있는 방법.
  3. 제2항에 있어서, 상기 L개의 데이터 요소 각각은 상기 제1 피연산자에서 특정 위치를 차지하는 방법.
  4. 제3항에 있어서, 상기 제어 요소는 데이터 요소 위치 번호에 의해 제1 피연산자 데이터 요소를 지정하는 방법.
  5. 제4항에 있어서, 상기 제어 요소 각각은,
    영으로 플러시 필드(flush to zero field) - 상기 영으로 플러시 필드는 이 제어 요소와 연관된 데이터 요소 위치가 영(zero) 값으로 채워져야 하는지 여부를 나타냄 -; 및
    선택 필드(selection field) - 상기 선택 필드는 어느 제1 피연산자 데이터 요소로부터의 데이터를 셔플링해야 하는지를 나타냄 - 를 포함하는 방법.
  6. 제5항에 있어서, 상기 제어 요소 각각은 소스 선택 필드(source select field)를 더 포함하는 방법.
  7. 제2항에 있어서, 상기 제2 피연산자의 상기 제어 요소들에 응답하여 상기 제1 피연산자로부터 셔플링된 데이터를 포함하는 결과 데이터 블록을 출력하는 단계를 더 포함하는 방법.
  8. 제1항에 있어서, 상기 데이터 요소 각각은 한 바이트의 데이터(a byte of data)를 포함하는 방법.
  9. 제8항에 있어서, 상기 제어 요소 각각은 한 바이트 폭(a byte wide)인 방법.
  10. 제9항에 있어서, L은 8이고,
    상기 제1 피연산자, 상기 제2 피연산자 및 상기 결과는 각각 64비트 폭의 패킹된 데이터(packed data)를 포함하는 방법.
  11. 제9항에 있어서, L은 16이고,
    상기 제1 피연산자, 상기 제2 피연산자 및 상기 결과는 각각 128비트 폭의 패킹된 데이터를 포함하는 방법.
  12. L개의 데이터 요소의 집합을 포함하는 제1 피연산자 및 L개의 제어 요소의 집합을 포함하는 제2 피연산자를 포함하는 셔플 명령어(shuffle instruction)를 실행하는 실행 유닛을 포함하며,
    상기 셔플 명령어는 상기 실행 유닛으로 하여금,
    각각의 개별적인 제어 요소에 대해, 영으로 플러시 필드가 설정되어 있는지 여부를 판정하고, 설정되어 있는 경우 연관된 결과 데이터 요소 위치에 영을 삽입하고, 그렇지 않은 경우 상기 개별적인 제어 요소에 의해 지정된 제1 피연산자 데이터 요소로부터의 데이터를 상기 연관된 결과 데이터 요소 위치로 셔플링하게 하는 장치.
  13. 제12항에 있어서, 상기 L개의 제어 요소 각각은 상기 제2 피연산자에서 한 위치를 차지하며, 결과에서 대응하는 위치에 위치한 데이터 요소와 연관되어 있는 장치.
  14. 제13항에 있어서, 각각의 개별적인 제어 요소는 데이터 요소 위치 번호에 의해 제1 피연산자 데이터 요소를 지정하는 장치.
  15. 제14항에 있어서, 상기 제어 요소 각각은,
    영으로 플러시 필드 - 상기 영으로 플러시 필드는 이 제어 요소와 연관된 데이터 요소 위치가 영(zero) 값으로 채워져야 하는지 여부를 나타냄 -; 및
    선택 필드 - 상기 선택 필드는 어느 제1 피연산자 데이터 요소로부터의 데이터를 셔플링해야 하는지를 나타냄 - 를 포함하는 장치.
  16. 제15항에 있어서, 상기 제어 요소 각각은 소스 선택 필드를 더 포함하는 장치.
  17. 제16항에 있어서, 상기 셔플 명령어는 또한 상기 실행 유닛으로 하여금 상기 L개의 제어 요소의 집합에 기초하여 채워진 L개의 데이터 요소 위치를 갖는 결과를 발생하게 하는 장치.
  18. 제12항에 있어서, 상기 데이터 요소 각각은 한 바이트의 데이터(a byte of data)를 포함하고, 상기 제어 요소 각각은 한 바이트 폭(a byte wide)인 장치.
  19. 제18항에 있어서, L은 8이고,
    상기 제1 피연산자, 상기 제2 피연산자 및 상기 결과는 각각 64비트 폭의 패킹된 데이터(packed data)를 포함하는 장치.
  20. 제18항에 있어서, L은 16이고,
    상기 제1 피연산자, 상기 제2 피연산자 및 상기 결과는 각각 128비트 폭의 패킹된 데이터를 포함하는 장치.
  21. 머신(machine)에 의해 실행되는 경우, 상기 머신으로 하여금,
    L개의 데이터 요소의 집합을 갖는 제1 피연산자 및 L개의 제어 요소의 집합을 갖는 제2 피연산자를 수신하는 단계; 및
    각각의 제어 요소에 대해, 영으로 플러시(flush to zero) 필드가 설정되어 있지 않은 경우, 상기 제어 요소에 의해 지정된 제1 피연산자 데이터 요소로부터의 데이터를 연관된 결과 데이터 요소 위치로 셔플링하고, 영으로 플러시 필드가 설정되어 있는 경우, 상기 연관된 결과 데이터 요소 위치에 영(zero)을 삽입하는 단계
    를 포함하는 미리 정해진 기능을 수행하게 하는 컴퓨터 명령어를 저장하는 머신 판독가능 매체(machine readable medium).
  22. 제21항에 있어서, 상기 머신은 단일 명령어에 응답하여 상기 미리 정해진 기능을 수행하는 집적 회로를 포함하는 머신 판독가능 매체.
  23. 제22항에 있어서, 상기 미리 정해진 기능은 상기 L개의 제어 요소의 집합에 따라 채워진 L개의 데이터 요소 위치를 갖는 결과를 발생하는 단계를 더 포함하는 머신 판독가능 매체.
  24. 제23항에 있어서, 상기 L개의 제어 요소 각각은 결과에서 대응하는 위치에 위치한 데이터 요소와 연관되어 있는 머신 판독가능 매체.
  25. 제24항에 있어서, 각각의 개별적인 제어 요소는 데이터 요소 위치 번호에 의해 제1 피연산자 데이터 요소를 지정하는 머신 판독가능 매체.
  26. 제25항에 있어서, 상기 데이터 요소 각각은 한 바이트의 데이터(a byte of data)를 포함하는 머신 판독가능 매체.
  27. 제26항에 있어서, 상기 제어 요소 각각은,
    영으로 플러시 필드 - 상기 영으로 플러시 필드는 이 제어 요소와 연관된 데이터 요소 위치가 영(zero) 값으로 채워져야 하는지 여부를 나타냄 -; 및
    선택 필드 - 상기 선택 필드는 어느 제1 피연산자 데이터 요소로부터의 데이터를 셔플링해야 하는지를 나타냄 - 를 포함하는 머신 판독가능 매체.
  28. 제27항에 있어서, 상기 제어 요소 각각은 소스 선택 필드를 더 포함하는 머신 판독가능 매체.
  29. 삭제
  30. L개의 데이터 요소의 집합을 갖는 제1 피연산자를 수신하는 단계;
    L개의 마스크의 집합을 갖는 제2 피연산자를 수신하는 단계 - 상기 L개의 마스크 각각은 상기 제2 피연산자에서 특정 위치를 차지하며, 결과에서 대응하는 위치에 위치한 데이터 요소와 연관되어 있고, 상기 L개의 마스크 각각은 영으로 플러시 필드를 포함함 -;
    각각의 마스크에 대해, 영으로 플러시 필드가 설정되어 있는지 여부를 판정하고, 설정되어 있는 경우, 연관된 결과 데이터 요소 위치에 영(zero)을 삽입하는 단계; 및
    영으로 플러시 필드가 설정되어 있지 않은 경우, 상기 마스크에 의해 지정된 제1 피연산자 데이터 요소로부터의 데이터를 상기 연관된 결과 데이터 요소 위치로 셔플링하는 단계
    를 포함하는 방법.
  31. 제30항에 있어서, 상기 L개의 마스크 각각은 상기 제2 피연산자에서 특정 위치를 차지하며, 상기 결과에서 대응하는 위치에 위치한 데이터 요소와 연관되어 있는 방법.
  32. 제31항에 있어서, 상기 L개의 마스크 각각은,
    영으로 플러시 필드 - 상기 영으로 플러시 필드는 이 제어 요소와 연관된 데이터 요소 위치가 영(zero) 값으로 채워져야 하는지 여부를 나타냄 -; 및
    선택 필드 - 상기 선택 필드는 어느 제1 피연산자 데이터 요소로부터의 데이터를 셔플링해야 하는지를 나타냄 - 를 포함하는 방법.
  33. 제32항에 있어서, 상기 마스크 각각은 소스 선택 필드를 더 포함하는 방법.
  34. 제33항에 있어서, 상기 제1 피연산자, 상기 제2 피연산자, 및 상기 결과는 각각 64비트 폭의 패킹된 데이터(packed data)를 포함하는 방법.
  35. 제33항에 있어서, 상기 제1 피연산자, 상기 제2 피연산자 및 상기 결과는 각각 128비트 폭의 패킹된 데이터를 포함하는 방법.
  36. L개의 데이터 요소의 집합을 갖는 제1 피연산자를 수신하는 단계;
    L개의 셔플 마스크(shuffle mask)의 집합을 갖는 제2 피연산자를 수신하는 단계 - 상기 L개의 셔플 마스크 각각은 결과에서 대응하는 위치에 위치한 데이터 요소와 연관되어 있음 -; 및
    각각의 개별적인 셔플 마스크에 대해, 영으로 플러시 필드가 설정되어 있는지 여부를 판정하고, 설정되어 있는 경우 연관된 결과 데이터 요소 위치에 영(zero)을 삽입하고, 그렇지 않은 경우 상기 개별적인 셔플 마스크에 의해 지정된 제1 피연산자 데이터 요소로부터의 데이터를 상기 연관된 결과 데이터 요소 위치로 셔플링하는 단계
    를 포함하는 방법.
  37. 제36항에 있어서, 상기 L개의 셔플 마스크 각각은,
    영으로 플러시 필드 - 상기 영으로 플러시 필드는 이 제어 요소와 연관된 데이터 요소 위치가 영(zero) 값으로 채워져야 하는지 여부를 나타냄 -; 및
    선택 필드 - 상기 선택 필드는 어느 제1 피연산자 데이터 요소로부터의 데이터를 셔플링해야 하는지를 나타냄 - 를 포함하는 방법.
  38. 제37항에 있어서, 상기 마스크 각각은 소스 선택 필드를 더 포함하는 방법.
  39. 복수의 소스 데이터 요소를 저장하는 제1 메모리 장소;
    복수의 제어 요소를 저장하는 제2 메모리 장소 - 상기 제어 요소 각각은 결과 데이터 요소 위치에 대응하고, 상기 제어 요소 각각은 영으로 플러시 필드 및 선택 필드를 포함함 -;
    상기 제2 메모리 장소에 연결된 제어 로직 - 상기 제어 로직은 상기 제어 요소들의 값들에 응답하여 복수의 선택 신호 및 복수의 영으로 플러시 신호(flush to zero signal)를 발생함 -;
    상기 제1 메모리 장소 및 상기 복수의 선택 신호에 연결된 제1 복수의 멀티플렉서 - 상기 제1 복수의 멀티플렉서 각각은 특정 결과 데이터 요소 위치에 대한 데이터 요소를 상기 특정 결과 데이터 요소 위치에 대응하는 선택 신호에 응답하여 셔플링함 -; 및
    상기 제1 복수의 멀티플렉서 및 상기 복수의 영으로 플러시 신호에 연결된 제2 복수의 멀티플렉서 - 상기 제2 복수의 멀티플렉서 각각은 특정 결과 데이터 요소 위치와 연관되어 있으며, 상기 제2 복수의 멀티플렉서 각각은 영으로 플러시 신호가 활성인 경우 영(zero)을 출력하거나 그 특정 결과 데이터 요소 위치에 대해 셔플링된 데이터 요소를 출력함 -
    를 포함하는 장치.
  40. 제39항에 있어서, 상기 복수의 소스 데이터 요소는 제1 패킹된 데이터 피연산자인 장치.
  41. 제40항에 있어서, 상기 복수의 제어 요소는 제2 패킹된 데이터 피연산자인 장치.
  42. 제40항에 있어서, 상기 제1 및 제2 메모리 장소들은 단일 명령어 다중 데이터 레지스터(single instruction multiple data register)들인 장치.
  43. 제41항에 있어서,
    상기 제1 패킹된 데이터 피연산자는 64비트 길이이고 상기 소스 데이터 요소 각각은 한 바이트 폭이며,
    상기 제2 패킹된 데이터 피연산자는 64비트 길이이고 상기 제어 요소 각각은 한 바이트 폭인 장치.
  44. 제41항에 있어서,
    상기 제1 패킹된 데이터 피연산자는 128비트 길이이고 상기 소스 데이터 요소 각각은 한 바이트 폭이며,
    상기 제2 패킹된 데이터 피연산자는 128비트 길이이고 상기 제어 요소 각각은 한 바이트 폭인 장치.
  45. L개의 셔플 마스크의 집합을 수신하는 제어 로직 - 각각의 셔플 마스크는 고유의 결과 데이터 요소 위치와 연관되어 있으며, 상기 제어 로직은 각각의 결과 데이터 요소 위치에 대해 선택 신호 및 영으로 플러시 신호를 제공함 -; 및
    상기 제어 로직에 연결된 L개의 멀티플렉서의 집합 - 각각의 멀티플렉서는 또한 고유의 결과 데이터 요소 위치와 연관되어 있으며, 각각의 멀티플렉서는 연관된 영으로 플러시 신호가 활성인 경우 영을 출력하고, 연관된 영으로 플러시 신호가 비활성인 경우 연관된 선택 신호에 기초하여 M개의 데이터 요소의 집합으로부터 셔플링된 데이터를 출력함 -
    을 포함하는 장치.
  46. 제45항에 있어서, L개의 고유의 데이터 요소 위치를 갖는 레지스터 - 각각의 데이터 요소 위치는 연관된 멀티플렉서로부터의 출력을 보유함 - 를 더 포함하는 장치.
  47. 제46항에 있어서, L은 16이고 M은 16인 장치.
  48. 데이터 및 명령어를 저장하는 메모리; 및
    버스를 통해 상기 메모리에 연결된 프로세서 - 상기 프로세서는 셔플 동작을 수행하는 동작을 함 - 를 포함하며,
    상기 프로세서는,
    상기 메모리로부터 명령어를 수신하는 버스 유닛 - 상기 명령어는 제2 피연산자로부터의 L개의 셔플 제어 요소의 집합에 기초하여 제1 피연산자로부터의 L개의 데이터 요소 중 적어도 하나에 대해 데이터 셔플을 야기함 -; 및
    상기 버스 유닛에 연결된 실행 유닛 - 상기 실행 유닛은 상기 명령어를 실행함 - 을 포함하고,
    상기 명령어는 상기 실행 유닛으로 하여금,
    각각의 셔플 제어 요소에 대해, 영으로 플러시 필드가 설정되어 있지 않은 경우, 상기 셔플 제어 요소에 의해 지정된 제1 피연산자 데이터 요소로부터의 데이터를 연관된 결과 데이터 요소 위치로 셔플링하고, 영으로 플러시 필드가 설정되어 있는 경우, 상기 연관된 결과 데이터 요소 위치에 영(zero)을 삽입하게 하는 시스템.
  49. 제48항에 있어서, 각각의 셔플 제어 요소는,
    영으로 플러시 필드 - 상기 영으로 플러시 필드는 이 셔플 제어 요소와 연관된 데이터 요소 위치가 영(zero) 값으로 채워져야 하는지 여부를 나타냄 -; 및
    선택 필드 - 상기 선택 필드는 어느 제1 피연산자 데이터 요소로부터의 데이터를 셔플링해야 하는지를 나타냄 - 를 포함하는 시스템.
  50. 제49항에 있어서, 각각의 셔플 제어 요소는 소스 선택 필드를 더 포함하는 시스템.
  51. 제48항에 있어서, 상기 명령어는 영으로 플러시 기능(flush to zero capability)을 갖는 패킹된 바이트 셔플 명령어(packed byte shuffle instruction)인 시스템.
  52. 제48항에 있어서, 각각의 데이터 요소는 한 바이트 폭이고, 각각의 셔플 명령 요소는 한 바이트 폭이며, L은 8인 시스템.
  53. 제48항에 있어서, 상기 제1 피연산자는 64비트 길이이고, 상기 제2 피연산자 는 64비트 길이인 시스템.
  54. 제1항에 있어서,
    상기 제1 피연산자를 수신하는 단계, 상기 제2 피연산자를 수신하는 단계, 및 상기 연관된 결과 데이터 요소 위치에 영을 삽입하는 단계는, 3비트로 상기 제1 피연산자를 저장하는 제1 레지스터를 지정하고 3비트로 상기 제2 피연산자를 저장하는 제2 레지스터를 지정하는 단일 패킹된 셔플 명령어를 수신하는 것에 응답하여, 수행되며,
    상기 제1 피연산자 및 상기 제2 피연산자는 동일한 크기로 되어 있고,
    상기 L개의 데이터 요소 및 상기 L개의 제어 요소 각각은 동일한 크기로 되어 있고,
    상기 L개의 제어 요소의 각각의 제어 요소는 제1 부분, 제2 부분 및 제3 부분의 3개의 부분으로 분할되고, 상기 제1 부분은 각각의 제어 요소의 최상위 비트를 차지하는 영으로 플러시 비트(a flush to zero bit)이고, 상기 제2 부분은 적어도 log2 L 비트 폭이고 상기 L개의 데이터 요소 중 하나의 위치를 나타내는 위치 선택 필드인 방법.
KR20057025313A 2003-06-30 2004-06-24 데이터 셔플링을 위한 방법 및 장치 KR100831472B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/611,344 US20040054877A1 (en) 2001-10-29 2003-06-30 Method and apparatus for shuffling data
US10/611,344 2003-06-30

Publications (2)

Publication Number Publication Date
KR20060040611A KR20060040611A (ko) 2006-05-10
KR100831472B1 true KR100831472B1 (ko) 2008-05-22

Family

ID=34062338

Family Applications (1)

Application Number Title Priority Date Filing Date
KR20057025313A KR100831472B1 (ko) 2003-06-30 2004-06-24 데이터 셔플링을 위한 방법 및 장치

Country Status (11)

Country Link
US (8) US20040054877A1 (ko)
EP (1) EP1639452B1 (ko)
JP (4) JP4607105B2 (ko)
KR (1) KR100831472B1 (ko)
CN (2) CN101620525B (ko)
AT (1) ATE442624T1 (ko)
DE (1) DE602004023081D1 (ko)
HK (1) HK1083657A1 (ko)
RU (1) RU2316808C2 (ko)
TW (1) TWI270007B (ko)
WO (1) WO2005006183A2 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160139823A (ko) 2015-05-28 2016-12-07 손규호 두 키 값과 바이트 중첩을 이용한 다중 자료형 데이터 패킹 또는 패킹 복원 방법
US11003449B2 (en) 2011-09-14 2021-05-11 Samsung Electronics Co., Ltd. Processing device and a swizzle pattern generator

Families Citing this family (113)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040054877A1 (en) 2001-10-29 2004-03-18 Macy William W. Method and apparatus for shuffling data
US7739319B2 (en) * 2001-10-29 2010-06-15 Intel Corporation Method and apparatus for parallel table lookup using SIMD instructions
US7925891B2 (en) * 2003-04-18 2011-04-12 Via Technologies, Inc. Apparatus and method for employing cryptographic functions to generate a message digest
US7647557B2 (en) * 2005-06-29 2010-01-12 Intel Corporation Techniques for shuffling video information
US7971042B2 (en) * 2005-09-28 2011-06-28 Synopsys, Inc. Microprocessor system and method for instruction-initiated recording and execution of instruction sequences in a dynamically decoupleable extended instruction pipeline
US20070106883A1 (en) * 2005-11-07 2007-05-10 Choquette Jack H Efficient Streaming of Un-Aligned Load/Store Instructions that Save Unused Non-Aligned Data in a Scratch Register for the Next Instruction
US20070226469A1 (en) * 2006-03-06 2007-09-27 James Wilson Permutable address processor and method
US8290095B2 (en) 2006-03-23 2012-10-16 Qualcomm Incorporated Viterbi pack instruction
US20080071851A1 (en) * 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
US20080077772A1 (en) * 2006-09-22 2008-03-27 Ronen Zohar Method and apparatus for performing select operations
US9069547B2 (en) * 2006-09-22 2015-06-30 Intel Corporation Instruction and logic for processing text strings
US7536532B2 (en) * 2006-09-27 2009-05-19 International Business Machines Corporation Merge operations of data arrays based on SIMD instructions
JP4686435B2 (ja) * 2006-10-27 2011-05-25 株式会社東芝 演算装置
US7962718B2 (en) * 2007-10-12 2011-06-14 Freescale Semiconductor, Inc. Methods for performing extended table lookups using SIMD vector permutation instructions that support out-of-range index values
US8700884B2 (en) * 2007-10-12 2014-04-15 Freescale Semiconductor, Inc. Single-instruction multiple-data vector permutation instruction and method for performing table lookups for in-range index values and determining constant values for out-of-range index values
US8515052B2 (en) 2007-12-17 2013-08-20 Wai Wu Parallel signal processing system and method
US8078836B2 (en) 2007-12-30 2011-12-13 Intel Corporation Vector shuffle instructions operating on multiple lanes each having a plurality of data elements using a common set of per-lane control bits
GB2456775B (en) * 2008-01-22 2012-10-31 Advanced Risc Mach Ltd Apparatus and method for performing permutation operations on data
US9513905B2 (en) 2008-03-28 2016-12-06 Intel Corporation Vector instructions to enable efficient synchronization and parallel reduction operations
WO2009144681A1 (en) * 2008-05-30 2009-12-03 Nxp B.V. Vector shuffle with write enable
US8195921B2 (en) * 2008-07-09 2012-06-05 Oracle America, Inc. Method and apparatus for decoding multithreaded instructions of a microprocessor
JP5375114B2 (ja) * 2009-01-16 2013-12-25 富士通株式会社 プロセッサ
JP5438551B2 (ja) * 2009-04-23 2014-03-12 新日鉄住金ソリューションズ株式会社 情報処理装置、情報処理方法及びプログラム
US9507670B2 (en) * 2010-06-14 2016-11-29 Veeam Software Ag Selective processing of file system objects for image level backups
EP2691850B1 (en) * 2011-03-30 2018-05-16 NXP USA, Inc. Integrated circuit device and methods of performing bit manipulation therefor
US20120254588A1 (en) * 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
US20120278591A1 (en) * 2011-04-27 2012-11-01 Advanced Micro Devices, Inc. Crossbar switch module having data movement instruction processor module and methods for implementing the same
WO2013057872A1 (ja) * 2011-10-18 2013-04-25 パナソニック株式会社 シャッフルパターン生成回路、プロセッサ、シャッフルパターン生成方法、命令
WO2013089750A1 (en) * 2011-12-15 2013-06-20 Intel Corporation Methods to optimize a program loop via vector instructions using a shuffle table and a blend table
CN104011646B (zh) 2011-12-22 2018-03-27 英特尔公司 用于产生按照数值顺序的连续整数的序列的处理器、方法、系统和指令
US10223112B2 (en) 2011-12-22 2019-03-05 Intel Corporation Processors, methods, systems, and instructions to generate sequences of integers in which integers in consecutive positions differ by a constant integer stride and where a smallest integer is offset from zero by an integer offset
CN108681465B (zh) * 2011-12-22 2022-08-02 英特尔公司 用于产生整数序列的处理器、处理器核及系统
CN104011644B (zh) 2011-12-22 2017-12-08 英特尔公司 用于产生按照数值顺序的相差恒定跨度的整数的序列的处理器、方法、系统和指令
WO2013095541A1 (en) * 2011-12-22 2013-06-27 Intel Corporation Apparatus and method for performing a permute operation
WO2013095611A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Apparatus and method for performing a permute operation
WO2013095610A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Apparatus and method for shuffling floating point or integer values
WO2013095657A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Instruction and logic to provide vector blend and permute functionality
JP5935319B2 (ja) * 2011-12-26 2016-06-15 富士通株式会社 回路エミュレーション装置、回路エミュレーション方法及び回路エミュレーションプログラム
US8683296B2 (en) 2011-12-30 2014-03-25 Streamscale, Inc. Accelerated erasure coding system and method
US8914706B2 (en) 2011-12-30 2014-12-16 Streamscale, Inc. Using parity data for concurrent data authentication, correction, compression, and encryption
US9329863B2 (en) 2012-03-13 2016-05-03 International Business Machines Corporation Load register on condition with zero or immediate instruction
JP5730812B2 (ja) * 2012-05-02 2015-06-10 日本電信電話株式会社 演算装置、その方法およびプログラム
US9268683B1 (en) * 2012-05-14 2016-02-23 Kandou Labs, S.A. Storage method and apparatus for random access memory using codeword storage
US9953436B2 (en) 2012-06-26 2018-04-24 BTS Software Solutions, LLC Low delay low complexity lossless compression system
WO2014004486A2 (en) * 2012-06-26 2014-01-03 Dunling Li Low delay low complexity lossless compression system
US9218182B2 (en) * 2012-06-29 2015-12-22 Intel Corporation Systems, apparatuses, and methods for performing a shuffle and operation (shuffle-op)
US9342479B2 (en) * 2012-08-23 2016-05-17 Qualcomm Incorporated Systems and methods of data extraction in a vector processor
US9715385B2 (en) 2013-01-23 2017-07-25 International Business Machines Corporation Vector exception code
US9778932B2 (en) * 2013-01-23 2017-10-03 International Business Machines Corporation Vector generate mask instruction
US9471308B2 (en) 2013-01-23 2016-10-18 International Business Machines Corporation Vector floating point test data class immediate instruction
US9513906B2 (en) 2013-01-23 2016-12-06 International Business Machines Corporation Vector checksum instruction
US9823924B2 (en) 2013-01-23 2017-11-21 International Business Machines Corporation Vector element rotate and insert under mask instruction
US9804840B2 (en) 2013-01-23 2017-10-31 International Business Machines Corporation Vector Galois Field Multiply Sum and Accumulate instruction
US9207942B2 (en) * 2013-03-15 2015-12-08 Intel Corporation Systems, apparatuses,and methods for zeroing of bits in a data element
US9405539B2 (en) * 2013-07-31 2016-08-02 Intel Corporation Providing vector sub-byte decompression functionality
US11768689B2 (en) 2013-08-08 2023-09-26 Movidius Limited Apparatus, systems, and methods for low power computational imaging
US10001993B2 (en) 2013-08-08 2018-06-19 Linear Algebra Technologies Limited Variable-length instruction buffer management
CN103501348A (zh) * 2013-10-16 2014-01-08 华仪风能有限公司 一种风力发电机组主控系统与监控系统的通讯方法及系统
US9582419B2 (en) * 2013-10-25 2017-02-28 Arm Limited Data processing device and method for interleaved storage of data elements
KR102122406B1 (ko) 2013-11-06 2020-06-12 삼성전자주식회사 셔플 명령어 처리 장치 및 방법
US9880845B2 (en) * 2013-11-15 2018-01-30 Qualcomm Incorporated Vector processing engines (VPEs) employing format conversion circuitry in data flow paths between vector data memory and execution units to provide in-flight format-converting of input vector data to execution units for vector processing operations, and related vector processor systems and methods
KR101898791B1 (ko) * 2013-12-23 2018-09-13 인텔 코포레이션 멀티 스트랜드 비순차 프로세서에서 회수를 위한 명령어들을 식별하는 명령어 및 로직
US9552209B2 (en) * 2013-12-27 2017-01-24 Intel Corporation Functional unit for instruction execution pipeline capable of shifting different chunks of a packed data operand by different amounts
US9274835B2 (en) 2014-01-06 2016-03-01 International Business Machines Corporation Data shuffling in a non-uniform memory access device
US9256534B2 (en) 2014-01-06 2016-02-09 International Business Machines Corporation Data shuffling in a non-uniform memory access device
JP6374975B2 (ja) * 2014-03-27 2018-08-15 インテル・コーポレーション 連続ソースエレメントを複数のマスクされていない結果エレメントにストアすると共に、複数のマスクされた結果エレメントに伝搬するプロセッサ、方法、システム、及び命令
CN106030514B (zh) * 2014-03-28 2022-09-13 英特尔公司 用于执行采用传播的被屏蔽源元素存储指令的处理器及其方法
US9996579B2 (en) * 2014-06-26 2018-06-12 Amazon Technologies, Inc. Fast color searching
US10169803B2 (en) 2014-06-26 2019-01-01 Amazon Technologies, Inc. Color based social networking recommendations
US9424039B2 (en) * 2014-07-09 2016-08-23 Intel Corporation Instruction for implementing vector loops of iterations having an iteration dependent condition
WO2016016726A2 (en) * 2014-07-30 2016-02-04 Linear Algebra Technologies Limited Vector processor
US9619214B2 (en) 2014-08-13 2017-04-11 International Business Machines Corporation Compiler optimizations for vector instructions
JP2017199045A (ja) * 2014-09-02 2017-11-02 パナソニックIpマネジメント株式会社 プロセッサ及びデータ並び替え方法
US9785649B1 (en) 2014-09-02 2017-10-10 Amazon Technologies, Inc. Hue-based color naming for an image
US10133570B2 (en) 2014-09-19 2018-11-20 Intel Corporation Processors, methods, systems, and instructions to select and consolidate active data elements in a register under mask into a least significant portion of result, and to indicate a number of data elements consolidated
EP3001307B1 (en) * 2014-09-25 2019-11-13 Intel Corporation Bit shuffle processors, methods, systems, and instructions
US10169014B2 (en) 2014-12-19 2019-01-01 International Business Machines Corporation Compiler method for generating instructions for vector operations in a multi-endian instruction set
US10296334B2 (en) * 2014-12-27 2019-05-21 Intel Corporation Method and apparatus for performing a vector bit gather
US10296489B2 (en) 2014-12-27 2019-05-21 Intel Corporation Method and apparatus for performing a vector bit shuffle
US10001995B2 (en) * 2015-06-02 2018-06-19 Intel Corporation Packed data alignment plus compute instructions, processors, methods, and systems
CN105022609A (zh) * 2015-08-05 2015-11-04 浪潮(北京)电子信息产业有限公司 一种数据混洗方法和数据混洗单元
US9880821B2 (en) 2015-08-17 2018-01-30 International Business Machines Corporation Compiler optimizations for vector operations that are reformatting-resistant
US10503502B2 (en) 2015-09-25 2019-12-10 Intel Corporation Data element rearrangement, processors, methods, systems, and instructions
US10620957B2 (en) 2015-10-22 2020-04-14 Texas Instruments Incorporated Method for forming constant extensions in the same execute packet in a VLIW processor
US9946541B2 (en) * 2015-12-18 2018-04-17 Intel Corporation Systems, apparatuses, and method for strided access
US20170177350A1 (en) * 2015-12-18 2017-06-22 Intel Corporation Instructions and Logic for Set-Multiple-Vector-Elements Operations
US10338920B2 (en) * 2015-12-18 2019-07-02 Intel Corporation Instructions and logic for get-multiple-vector-elements operations
US20170177354A1 (en) * 2015-12-18 2017-06-22 Intel Corporation Instructions and Logic for Vector-Based Bit Manipulation
US20170177351A1 (en) * 2015-12-18 2017-06-22 Intel Corporation Instructions and Logic for Even and Odd Vector Get Operations
US10467006B2 (en) * 2015-12-20 2019-11-05 Intel Corporation Permutating vector data scattered in a temporary destination into elements of a destination register based on a permutation factor
US10565207B2 (en) * 2016-04-12 2020-02-18 Hsilin Huang Method, system and program product for mask-based compression of a sparse matrix
US10331830B1 (en) * 2016-06-13 2019-06-25 Apple Inc. Heterogeneous logic gate simulation using SIMD instructions
US10592468B2 (en) * 2016-07-13 2020-03-17 Qualcomm Incorporated Shuffler circuit for lane shuffle in SIMD architecture
US10169040B2 (en) * 2016-11-16 2019-01-01 Ceva D.S.P. Ltd. System and method for sample rate conversion
CN106775587B (zh) 2016-11-30 2020-04-14 上海兆芯集成电路有限公司 计算机指令的执行方法以及使用此方法的装置
EP3336692B1 (en) 2016-12-13 2020-04-29 Arm Ltd Replicate partition instruction
EP3336691B1 (en) * 2016-12-13 2022-04-06 ARM Limited Replicate elements instruction
US9959247B1 (en) 2017-02-17 2018-05-01 Google Llc Permuting in a matrix-vector processor
US10140239B1 (en) 2017-05-23 2018-11-27 Texas Instruments Incorporated Superimposing butterfly network controls for pattern combinations
US11194630B2 (en) 2017-05-30 2021-12-07 Microsoft Technology Licensing, Llc Grouped shuffling of partition vertices
US10970081B2 (en) * 2017-06-29 2021-04-06 Advanced Micro Devices, Inc. Stream processor with decoupled crossbar for cross lane operations
CN109324981B (zh) * 2017-07-31 2023-08-15 伊姆西Ip控股有限责任公司 高速缓存管理系统和方法
US10460416B1 (en) * 2017-10-17 2019-10-29 Xilinx, Inc. Inline image preprocessing for convolution operations using a matrix multiplier on an integrated circuit
US10956125B2 (en) 2017-12-21 2021-03-23 International Business Machines Corporation Data shuffling with hierarchical tuple spaces
US10891274B2 (en) 2017-12-21 2021-01-12 International Business Machines Corporation Data shuffling with hierarchical tuple spaces
US11789734B2 (en) * 2018-08-30 2023-10-17 Advanced Micro Devices, Inc. Padded vectorization with compile time known masks
US10620958B1 (en) 2018-12-03 2020-04-14 Advanced Micro Devices, Inc. Crossbar between clients and a cache
CN109783054B (zh) * 2018-12-20 2021-03-09 中国科学院计算技术研究所 一种rsfq fft处理器的蝶形运算处理方法及系统
US11200239B2 (en) 2020-04-24 2021-12-14 International Business Machines Corporation Processing multiple data sets to generate a merged location-based data set
KR102381644B1 (ko) * 2020-11-27 2022-04-01 한국전자기술연구원 고속 이차원 FFT 신호처리를 위한 데이터 정렬 방법 및 이를 적용한 SoC
US20220197974A1 (en) * 2020-12-22 2022-06-23 Intel Corporation Processors, methods, systems, and instructions to select and store data elements from two source two-dimensional arrays indicated by permute control elements in a result two-dimensional array
CN114297138B (zh) * 2021-12-10 2023-12-26 龙芯中科技术股份有限公司 向量混洗方法、处理器及电子设备
CN115061731B (zh) * 2022-06-23 2023-05-23 摩尔线程智能科技(北京)有限责任公司 混洗电路和方法、以及芯片和集成电路装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010006789A (ko) * 1999-03-22 2001-01-26 썬 마이크로시스템즈, 인코포레이티드 초장 명령어 프로세서의 효율적인 서브-명령 에뮬레이션
US20030046559A1 (en) * 2001-08-31 2003-03-06 Macy William W. Apparatus and method for a data storage device with a plurality of randomly located data
US20030084082A1 (en) * 2001-10-29 2003-05-01 Eric Debes Apparatus and method for efficient filtering and convolution of content data

Family Cites Families (81)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3711692A (en) 1971-03-15 1973-01-16 Goodyear Aerospace Corp Determination of number of ones in a data field by addition
US3723715A (en) 1971-08-25 1973-03-27 Ibm Fast modulo threshold operator binary adder for multi-number additions
US4139899A (en) 1976-10-18 1979-02-13 Burroughs Corporation Shift network having a mask generator and a rotator
US4161784A (en) 1978-01-05 1979-07-17 Honeywell Information Systems, Inc. Microprogrammable floating point arithmetic unit capable of performing arithmetic operations on long and short operands
US4418383A (en) 1980-06-30 1983-11-29 International Business Machines Corporation Data flow component for processor and microprocessor systems
US4393468A (en) 1981-03-26 1983-07-12 Advanced Micro Devices, Inc. Bit slice microprogrammable processor for signal processing applications
JPS57209570A (en) 1981-06-19 1982-12-22 Fujitsu Ltd Vector processing device
US4498177A (en) 1982-08-30 1985-02-05 Sperry Corporation M Out of N code checker circuit
US4569016A (en) 1983-06-30 1986-02-04 International Business Machines Corporation Mechanism for implementing one machine cycle executable mask and rotate instructions in a primitive instruction set computing system
US4707800A (en) 1985-03-04 1987-11-17 Raytheon Company Adder/substractor for variable length numbers
JPS6297060A (ja) 1985-10-23 1987-05-06 Mitsubishi Electric Corp デイジタルシグナルプロセツサ
US4989168A (en) 1987-11-30 1991-01-29 Fujitsu Limited Multiplying unit in a computer system, capable of population counting
US5019968A (en) 1988-03-29 1991-05-28 Yulan Wang Three-dimensional vector processor
EP0363176B1 (en) 1988-10-07 1996-02-14 International Business Machines Corporation Word organised data processors
US4903228A (en) 1988-11-09 1990-02-20 International Business Machines Corporation Single cycle merge/logic unit
KR920007505B1 (ko) 1989-02-02 1992-09-04 정호선 신경회로망을 이용한 곱셈기
US5081698A (en) 1989-02-14 1992-01-14 Intel Corporation Method and apparatus for graphics display data manipulation
US5497497A (en) 1989-11-03 1996-03-05 Compaq Computer Corp. Method and apparatus for resetting multiple processors using a common ROM
US5168571A (en) 1990-01-24 1992-12-01 International Business Machines Corporation System for aligning bytes of variable multi-bytes length operand based on alu byte length and a number of unprocessed byte data
FR2666472B1 (fr) 1990-08-31 1992-10-16 Alcatel Nv Systeme de memorisation temporaire d'information comprenant une memoire tampon enregistrant des donnees en blocs de donnees de longueur fixe ou variable.
US5268995A (en) 1990-11-21 1993-12-07 Motorola, Inc. Method for executing graphics Z-compare and pixel merge instructions in a data processor
US5680161A (en) 1991-04-03 1997-10-21 Radius Inc. Method and apparatus for high speed graphics data compression
US5187679A (en) 1991-06-05 1993-02-16 International Business Machines Corporation Generalized 7/3 counters
US5321810A (en) 1991-08-21 1994-06-14 Digital Equipment Corporation Address method for computer graphics system
US5423010A (en) 1992-01-24 1995-06-06 C-Cube Microsystems Structure and method for packing and unpacking a stream of N-bit data to and from a stream of N-bit data words
JP2642039B2 (ja) 1992-05-22 1997-08-20 インターナショナル・ビジネス・マシーンズ・コーポレイション アレイ・プロセッサ
US5426783A (en) 1992-11-02 1995-06-20 Amdahl Corporation System for processing eight bytes or less by the move, pack and unpack instruction of the ESA/390 instruction set
US5408670A (en) 1992-12-18 1995-04-18 Xerox Corporation Performing arithmetic in parallel on composite operands with packed multi-bit components
US5465374A (en) 1993-01-12 1995-11-07 International Business Machines Corporation Processor for processing data string by byte-by-byte
US5568415A (en) 1993-02-19 1996-10-22 Digital Equipment Corporation Content addressable memory having a pair of memory cells storing don't care states for address translation
US5524256A (en) 1993-05-07 1996-06-04 Apple Computer, Inc. Method and system for reordering bytes in a data stream
JPH0721034A (ja) 1993-06-28 1995-01-24 Fujitsu Ltd 文字列複写処理方法
US5625374A (en) * 1993-09-07 1997-04-29 Apple Computer, Inc. Method for parallel interpolation of images
US5390135A (en) 1993-11-29 1995-02-14 Hewlett-Packard Parallel shift and add circuit and method
US5487159A (en) 1993-12-23 1996-01-23 Unisys Corporation System for processing shift, mask, and merge operations in one instruction
US5399135A (en) 1993-12-29 1995-03-21 Azzouni; Paul Forearm workout bar
US5781457A (en) 1994-03-08 1998-07-14 Exponential Technology, Inc. Merge/mask, rotate/shift, and boolean operations from two instruction sets executed in a vectored mux on a dual-ALU
US5594437A (en) 1994-08-01 1997-01-14 Motorola, Inc. Circuit and method of unpacking a serial bitstream
US5579253A (en) 1994-09-02 1996-11-26 Lee; Ruby B. Computer multiply instruction with a subresult selection option
US6275834B1 (en) 1994-12-01 2001-08-14 Intel Corporation Apparatus for performing packed shift operations
US5819101A (en) 1994-12-02 1998-10-06 Intel Corporation Method for packing a plurality of packed data elements in response to a pack instruction
US5636352A (en) 1994-12-16 1997-06-03 International Business Machines Corporation Method and apparatus for utilizing condensed instructions
TW388982B (en) 1995-03-31 2000-05-01 Samsung Electronics Co Ltd Memory controller which executes read and write commands out of order
GB9509989D0 (en) 1995-05-17 1995-07-12 Sgs Thomson Microelectronics Manipulation of data
US6381690B1 (en) 1995-08-01 2002-04-30 Hewlett-Packard Company Processor for performing subword permutations and combinations
CN103092564B (zh) 1995-08-31 2016-04-06 英特尔公司 执行乘加指令的处理器和对分组数据执行乘加操作的系统
US5819117A (en) 1995-10-10 1998-10-06 Microunity Systems Engineering, Inc. Method and system for facilitating byte ordering interfacing of a computer system
US5838984A (en) 1996-08-19 1998-11-17 Samsung Electronics Co., Ltd. Single-instruction-multiple-data processing using multiple banks of vector registers
US5909572A (en) 1996-12-02 1999-06-01 Compaq Computer Corp. System and method for conditionally moving an operand from a source register to a destination register
US6061521A (en) * 1996-12-02 2000-05-09 Compaq Computer Corp. Computer having multimedia operations executable as two distinct sets of operations within a single instruction cycle
DE19654846A1 (de) 1996-12-27 1998-07-09 Pact Inf Tech Gmbh Verfahren zum selbständigen dynamischen Umladen von Datenflußprozessoren (DFPs) sowie Bausteinen mit zwei- oder mehrdimensionalen programmierbaren Zellstrukturen (FPGAs, DPGAs, o. dgl.)
US5933650A (en) 1997-10-09 1999-08-03 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
US6223277B1 (en) 1997-11-21 2001-04-24 Texas Instruments Incorporated Data processing circuit with packed data structure capability
US6307553B1 (en) 1998-03-31 2001-10-23 Mohammad Abdallah System and method for performing a MOVHPS-MOVLPS instruction
US6122725A (en) * 1998-03-31 2000-09-19 Intel Corporation Executing partial-width packed data instructions
US6192467B1 (en) 1998-03-31 2001-02-20 Intel Corporation Executing partial-width packed data instructions
US6041404A (en) 1998-03-31 2000-03-21 Intel Corporation Dual function system and method for shuffling packed data elements
US6211892B1 (en) 1998-03-31 2001-04-03 Intel Corporation System and method for performing an intra-add operation
US6115812A (en) 1998-04-01 2000-09-05 Intel Corporation Method and apparatus for efficient vertical SIMD computations
US6288723B1 (en) 1998-04-01 2001-09-11 Intel Corporation Method and apparatus for converting data format to a graphics card
US5996057A (en) * 1998-04-17 1999-11-30 Apple Data processing system and method of permutation with replication within a vector register file
US6098087A (en) 1998-04-23 2000-08-01 Infineon Technologies North America Corp. Method and apparatus for performing shift operations on packed data
US6263426B1 (en) 1998-04-30 2001-07-17 Intel Corporation Conversion from packed floating point data to packed 8-bit integer data in different architectural registers
JP3869947B2 (ja) * 1998-08-04 2007-01-17 株式会社日立製作所 並列処理プロセッサ、および、並列処理方法
US20020002666A1 (en) * 1998-10-12 2002-01-03 Carole Dulong Conditional operand selection using mask operations
US6484255B1 (en) 1999-09-20 2002-11-19 Intel Corporation Selective writing of data elements from packed data based upon a mask using predication
US6446198B1 (en) 1999-09-30 2002-09-03 Apple Computer, Inc. Vectorized table lookup
US6546480B1 (en) 1999-10-01 2003-04-08 Hitachi, Ltd. Instructions for arithmetic operations on vectored data
US20050188182A1 (en) * 1999-12-30 2005-08-25 Texas Instruments Incorporated Microprocessor having a set of byte intermingling instructions
US6745319B1 (en) 2000-02-18 2004-06-01 Texas Instruments Incorporated Microprocessor with instructions for shuffling and dealing data
EP1261912A2 (en) * 2000-03-08 2002-12-04 Sun Microsystems, Inc. Processing architecture having sub-word shuffling and opcode modification
WO2001069938A1 (en) 2000-03-15 2001-09-20 Digital Accelerator Corporation Coding of digital video with high motion content
US7155601B2 (en) 2001-02-14 2006-12-26 Intel Corporation Multi-element operand sub-portion shuffle instruction execution
KR100446235B1 (ko) 2001-05-07 2004-08-30 엘지전자 주식회사 다중 후보를 이용한 움직임 벡터 병합 탐색 방법
US20040054877A1 (en) 2001-10-29 2004-03-18 Macy William W. Method and apparatus for shuffling data
US7739319B2 (en) 2001-10-29 2010-06-15 Intel Corporation Method and apparatus for parallel table lookup using SIMD instructions
US7631025B2 (en) * 2001-10-29 2009-12-08 Intel Corporation Method and apparatus for rearranging data between multiple registers
US7272622B2 (en) 2001-10-29 2007-09-18 Intel Corporation Method and apparatus for parallel shift right merge of data
US7685212B2 (en) 2001-10-29 2010-03-23 Intel Corporation Fast full search motion estimation with SIMD merge instruction
US7343389B2 (en) * 2002-05-02 2008-03-11 Intel Corporation Apparatus and method for SIMD modular multiplication
US6914938B2 (en) 2002-06-18 2005-07-05 Motorola, Inc. Interlaced video motion estimation

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010006789A (ko) * 1999-03-22 2001-01-26 썬 마이크로시스템즈, 인코포레이티드 초장 명령어 프로세서의 효율적인 서브-명령 에뮬레이션
US20030046559A1 (en) * 2001-08-31 2003-03-06 Macy William W. Apparatus and method for a data storage device with a plurality of randomly located data
US20030084082A1 (en) * 2001-10-29 2003-05-01 Eric Debes Apparatus and method for efficient filtering and convolution of content data

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11003449B2 (en) 2011-09-14 2021-05-11 Samsung Electronics Co., Ltd. Processing device and a swizzle pattern generator
KR20160139823A (ko) 2015-05-28 2016-12-07 손규호 두 키 값과 바이트 중첩을 이용한 다중 자료형 데이터 패킹 또는 패킹 복원 방법

Also Published As

Publication number Publication date
JP5567181B2 (ja) 2014-08-06
JP2010282649A (ja) 2010-12-16
TWI270007B (en) 2007-01-01
CN101620525B (zh) 2014-01-29
US20090265523A1 (en) 2009-10-22
JP4607105B2 (ja) 2011-01-05
US9229718B2 (en) 2016-01-05
JP2007526536A (ja) 2007-09-13
EP1639452A2 (en) 2006-03-29
US9229719B2 (en) 2016-01-05
ATE442624T1 (de) 2009-09-15
JP5490645B2 (ja) 2014-05-14
JP2011138541A (ja) 2011-07-14
US20170039066A1 (en) 2017-02-09
CN1813241A (zh) 2006-08-02
RU2006102503A (ru) 2006-06-27
US8214626B2 (en) 2012-07-03
WO2005006183A3 (en) 2005-12-08
US8225075B2 (en) 2012-07-17
TW200515279A (en) 2005-05-01
US20110029759A1 (en) 2011-02-03
US20150154023A1 (en) 2015-06-04
RU2316808C2 (ru) 2008-02-10
US20120272047A1 (en) 2012-10-25
DE602004023081D1 (de) 2009-10-22
KR20060040611A (ko) 2006-05-10
US9477472B2 (en) 2016-10-25
CN100492278C (zh) 2009-05-27
US20040054877A1 (en) 2004-03-18
US20150121039A1 (en) 2015-04-30
JP5535965B2 (ja) 2014-07-02
EP1639452B1 (en) 2009-09-09
CN101620525A (zh) 2010-01-06
US8688959B2 (en) 2014-04-01
US20130007416A1 (en) 2013-01-03
US10152323B2 (en) 2018-12-11
WO2005006183A2 (en) 2005-01-20
HK1083657A1 (en) 2006-07-07
JP2013229037A (ja) 2013-11-07

Similar Documents

Publication Publication Date Title
KR100831472B1 (ko) 데이터 셔플링을 위한 방법 및 장치
US7739319B2 (en) Method and apparatus for parallel table lookup using SIMD instructions
US7631025B2 (en) Method and apparatus for rearranging data between multiple registers
US10684855B2 (en) Method and apparatus for performing a shift and exclusive or operation in a single instruction
CN107741842B (zh) 用于执行点积运算的指令和逻辑
US20130007417A1 (en) Processor to execute shift right merge instructions

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: 20130503

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20140502

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20150430

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20160427

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20170504

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20180427

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20190429

Year of fee payment: 12