KR20120099236A - 단일 명령어에서 시프트 및 배타적 or 연산을 수행하는 방법 및 장치 - Google Patents

단일 명령어에서 시프트 및 배타적 or 연산을 수행하는 방법 및 장치 Download PDF

Info

Publication number
KR20120099236A
KR20120099236A KR1020127012770A KR20127012770A KR20120099236A KR 20120099236 A KR20120099236 A KR 20120099236A KR 1020127012770 A KR1020127012770 A KR 1020127012770A KR 20127012770 A KR20127012770 A KR 20127012770A KR 20120099236 A KR20120099236 A KR 20120099236A
Authority
KR
South Korea
Prior art keywords
value
shifted
shift
xor
data
Prior art date
Application number
KR1020127012770A
Other languages
English (en)
Other versions
KR101411064B1 (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 KR20120099236A publication Critical patent/KR20120099236A/ko
Application granted granted Critical
Publication of KR101411064B1 publication Critical patent/KR101411064B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • 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
    • 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/30029Logical and Boolean instructions, e.g. XOR, NOT
    • 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
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3816Instruction alignment, e.g. cache line crossing
    • 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/3893Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator

Abstract

시프트 및 XOR 연산을 수행하는 방법 및 장치가 개시된다. 일 실시예에서, 장치는 제1 명령어를 실행하는 실행 자원을 포함한다. 제1 명령어에 응답하여, 상기 실행 자원은 적어도 하나의 값에 대해 시프트 및 XOR을 수행한다.

Description

단일 명령어에서 시프트 및 배타적 OR 연산을 수행하는 방법 및 장치{METHOD AND APPARATUS FOR PERFORMING A SHIFT AND EXCLUSIVE OR OPERATION IN A SINGLE INSTRUCTION}
본 개시 내용은 컴퓨터 처리의 분야에 관한 것이다. 보다 상세하게는, 실시예는 시프트 및 XOR(exclusive OR, 배타적 OR) 연산을 수행하는 명령어에 관한 것이다.
SIMD(single-instruction-multiple data) 명령어가 수많은 데이터 요소[패킹된 데이터(packed data)]를 병렬로 처리하는 다양한 응용에서 유용하다. 시프트 연산 및 XOR(exclusive OR) 연산과 같은 연산을 직렬로 수행하는 것은 성능을 떨어뜨릴 수 있다.
첨부 도면의 도면들에, 본 발명이 제한이 아닌 예로서 도시되어 있다.
도 1a는 본 발명의 일 실시예에 따른, 시프트 및 XOR 연산을 위한 명령어를 실행하는 실행 유닛을 포함하는 프로세서로 형성된 컴퓨터 시스템의 블록도이다.
도 1b는 본 발명의 대안의 실시예에 따른 다른 예시적인 컴퓨터 시스템의 블록도이다.
도 1c는 본 발명의 다른 대안의 실시예에 따른 또 다른 예시적인 컴퓨터 시스템의 블록도이다.
도 2는 본 발명에 따른, 시프트 및 XOR 연산을 수행하는 논리 회로를 포함하는 일 실시예의 프로세서에 대한 마이크로-아키텍처(micro-architecture)의 블록도이다.
도 3a는 본 발명의 일 실시예에 따른, 멀티미디어 레지스터 내의 다양한 패킹된 데이터 유형(packed data type) 표현을 나타낸 도면이다.
도 3b는 대안의 실시예에 따른 패킹된 데이터 유형을 나타낸 도면이다.
도 3c는 본 발명의 일 실시예에 따른, 멀티미디어 레지스터 내의 다양한 부호 있는(signed) 및 부호 없는(unsigned) 패킹된 데이터 유형(packed data type) 표현을 나타낸 도면이다.
도 3d는 연산 인코딩(operation encoding)(연산 코드) 형식의 일 실시예를 나타낸 도면이다.
도 3e는 대안의 연산 인코딩(연산 코드) 형식을 나타낸 도면이다.
도 3f는 또 다른 대안의 연산 인코딩 형식을 나타낸 도면이다.
도 4는 본 발명에 따른, 명령어를 수행하는 논리의 일 실시예의 블록도이다.
도 5는 일 실시예와 관련하여 수행되는 연산의 흐름도이다.
이하의 설명은 처리 장치, 컴퓨터 시스템, 또는 소프트웨어 프로그램 내에서 시프트 및 XOR 연산을 수행하는 기법의 실시예에 대해 기술한다. 이하의 설명에서, 본 발명의 보다 완전한 이해를 제공하기 위해 프로세서 유형, 마이크로-아키텍처 조건, 이벤트, 실시가능 메커니즘(enablement mechanism) 등과 같은 수많은 구체적인 상세가 기재되어 있다. 그러나, 당업자는 본 발명의 실시예가 이러한 구체적인 상세 없이도 실시될 수 있다는 것을 알 것이다. 또한, 본 발명의 실시예를 불필요하게 모호하게 하는 것을 피하기 위해 일부 공지된 구조, 회로 등은 상세히 설명되어 있지 않다.
이하의 실시예가 프로세서를 참조하여 기술되어 있지만, 다른 실시예가 다른 유형의 집적 회로 및 논리 장치에 적용가능하다. 본 발명의 동일한 기법 및 개시 내용이 보다 높은 파이프라인 처리율(pipeline throughput) 및 개선된 성능으로부터 이득을 볼 수 있는 다른 유형의 회로 또는 반도체 장치에 용이하게 적용될 수 있다. 본 발명의 개시 내용은 데이터 조작을 수행하는 임의의 프로세서 또는 기계에 적용가능하다. 그러나, 본 발명의 실시예가 256 비트, 128 비트, 64 비트, 32 비트 또는 16 비트 데이터 연산을 수행하는 프로세서 또는 기계로 제한되지 않고, 패킹된 데이터의 조작이 필요한 임의의 프로세서 및 기계에 적용될 수 있다.
이하의 예가 실행 유닛 및 논리 회로와 관련하여 명령어 처리 및 배포를 기술하고 있지만, 본 발명의 다른 실시예는 유형의 매체(tangible medium)에 저장된 소프트웨어를 통해 달성될 수 있다. 일 실시예에서, 본 발명의 방법은 기계 실행가능 명령어로 구현된다. 명령어는 그 명령어로 프로그램되는 범용 또는 특수-목적 프로세서로 하여금 본 발명의 단계들을 수행하게 하기 위해 사용될 수 있다. 본 발명의 실시예가 본 발명에 따른 프로세스를 수행하도록 컴퓨터(또는 기타 전자 장치)를 프로그램하는 데 사용될 수 있는 명령어를 저장하는 기계 또는 컴퓨터 판독가능 매체를 포함할 수 있는 컴퓨터 프로그램 제품 또는 소프트웨어로서 제공될 수 있다. 대안으로서, 본 발명의 단계들이 그 단계들을 수행하는 하드와이어드 논리(hardwired logic)를 포함하는 특정의 하드웨어 구성요소에 의해, 또는 프로그램된 컴퓨터 구성요소 및 커스텀 하드웨어 구성요소의 임의의 조합에 의해 수행될 수 있다. 이러한 소프트웨어는 시스템에서의 메모리 내에 저장될 수 있다. 유사하게, 코드가 네트워크를 통해 또는 다른 컴퓨터 판독가능 매체를 통해 배포될 수 있다.
따라서, 기계 판독가능 매체는 기계(예컨대, 컴퓨터)에 의해 판독가능한 형태로 정보를 저장하거나 전송하는 임의의 메커니즘을 포함할 수 있지만, 플로피 디스켓, 광 디스크, CD-ROM(Compact Disc, Read-Only Memory), 및 광자기 디스크, ROM(Read-Only Memory), RAM(Random Access Memory), EPROM(Erasable Programmable Read-Only Memory), EEPROM(Electrically Erasable Programmable Read-Only Memory), 자기 또는 광 카드, 플래시 메모리, 인터넷을 통한 전송, 전기, 광, 음향 또는 기타 형태의 전파 신호(예컨대, 반송파, 적외선 신호, 디지털 신호 등) 등으로 제한되지 않는다. 그에 따라, 컴퓨터 판독가능 매체는 기계(예컨대, 컴퓨터)에 의해 판독가능한 형태로 전자 명령어 또는 정보를 저장하거나 전송하기에 적당한 임의의 유형의 매체/기계 판독가능 매체를 포함한다. 더욱이, 본 발명은 또한 컴퓨터 프로그램 제품으로서 다운로드될 수 있다. 그에 따라, 프로그램이 원격 컴퓨터(예컨대, 서버)로부터 요청측 컴퓨터(예컨대, 클라이언트)로 전송될 수 있다. 프로그램의 전송은 통신 링크(예컨대, 모뎀, 네트워크 연결 등)를 통해 반송파 또는 기타 전파 매체에 구현되는 전기, 광, 음향, 또는 기타 형태의 데이터 신호를 통할 수 있다.
설계는 생성부터 시뮬레이션을 거쳐 제조까지의 다양한 스테이지를 거칠 수 있다. 설계를 표현하는 데이터는 설계를 다수의 방식으로 표현할 수 있다. 먼저, 시뮬레이션에서 유용한 바와 같이, 하드웨어가 하드웨어 기술 언어(hardware description language) 또는 다른 기능 기술 언어(functional description language)를 사용하여 표현될 수 있다. 또한, 설계 프로세스의 일부 스테이지에서 논리 및/또는 트랜지스터 게이트를 갖는 회로 레벨 모델이 생성될 수 있다. 게다가, 대부분의 설계가, 일부 스테이지에서, 하드웨어 모델에서의 다양한 디바이스의 물리적 배치를 표현하는 데이터의 레벨에 도달한다. 종래의 반도체 제조 기법이 사용되는 경우에, 하드웨어 모델을 표현하는 데이터는 집적 회로를 제조하는 데 사용되는 마스크에 대한 상이한 마스크 층에서의 다양한 특징의 존재 또는 부존재를 명시하는 데이터일 수 있다. 설계의 임의의 표현에서, 데이터는 임의의 형태의 기계 판독가능 매체에 저장될 수 있다. 이러한 정보를 전송하기 위해 변조되거나 다른 방식으로 발생된 광파 또는 전기파, 메모리, 또는 자기 또는 광 저장 장치, 예컨대 디스크는 기계 판독가능 매체일 수 있다. 이들 매체 중 임의의 것이 설계 또는 소프트웨어 정보를 "전달"하거나 "표시"할 수 있다. 코드 또는 설계를 표시하거나 전달하는 전기 반송파가 전송될 때, 전기 신호의 복사, 버퍼링 또는 재전송이 수행되는 한, 새로운 사본이 만들어진다. 따라서, 통신 제공업자 또는 네트워크 제공업자는 본 발명의 기법을 구현하는 물품(반송파)의 사본을 만들 수 있다.
최신의 프로세서에서, 각종의 코드 및 명령어를 처리하고 실행하기 위해 다수의 상이한 실행 유닛이 사용된다. 모든 명령어가 동일하게 생성되지는 않는데, 그 이유는 일부는 보다 빨리 완료되는 반면 다른 것은 엄청난 수의 클록 사이클을 필요로 할 수 있기 때문이다. 명령어의 처리율이 빠를수록, 프로세서의 전체 성능이 좋다. 따라서, 많은 명령어를 가능한 한 빨리 실행하는 것이 유리할 것이다. 그러나, 보다 높은 복잡도를 갖고 실행 시간 및 프로세서 자원을 보다 많이 필요로 하는 특정 명령어가 있다. 예를 들어, 부동 소수점 명령어, 로드/저장 연산, 데이터 이동 등이 있다.
인터넷 및 멀티미디어 응용에서 점점 더 많은 컴퓨터 시스템이 사용됨에 따라, 시간의 경과에 따라 부가적인 프로세서 지원이 도입되어 왔다. 예를 들어, SIMD(Single Instruction, Multiple Data, 단일 명령어 다중 데이터) 정수/부동 소수점 명령어 및 SSE(Streaming SIMD Extension, 스트리밍 SIMD 확장)은 특정의 프로그램 작업을 실행하는 데 필요한 명령어의 총수를 감소시키는 - 이는 차례로 전력 소모를 감소시킬 수 있음 - 명령어이다. 이들 명령어는 다수의 데이터 요소를 병렬로 처리함으로써 소프트웨어 성능을 향상시킬 수 있다. 그 결과, 비디오, 음성, 및 영상/사진 처리를 비롯한 광범위한 응용에서 성능 이득이 달성될 수 있다. 마이크로프로세서 및 유사한 유형의 논리 회로에서의 SIMD 명령어의 구현은 보통 다수의 문제점을 포함한다. 게다가, SIMD 연산의 복잡성으로 인해 종종 데이터를 올바르게 처리하고 조작하기 위해 부가의 회로가 필요하게 된다.
현재, SIMD 시프트 및 XOR 명령어가 이용가능하지 않다. 본 발명의 실시예에 따른 SIMD 시프트 및 XOR 명령어가 없는 경우, 오디오/비디오/그래픽 압축, 처리 및 조작 등의 응용에서 동일한 결과를 달성하기 위해 다수의 명령어 및 데이터 레지스터가 필요할 수 있다. 따라서, 본 발명의 실시예에 따른 적어도 하나의 시프트 및 XOR 명령어는 코드 오버헤드 및 자원 요구사항을 감소시킬 수 있다. 본 발명의 실시예는 SIMD 관련 하드웨어를 사용하는 알고리즘으로서 시프트 및 XOR 연산을 구현하는 방법을 제공한다. 현재, SIMD 레지스터에서 데이터에 대한 시프트 및 XOR 연산을 수행하는 것이 얼마간 어렵고 지루하다. 일부 알고리즘은 산술 연산을 위해 데이터를 준비하는 데 그 산술 연산을 실행하는 명령어의 실제 수보다 더 많은 명령어를 필요로 한다. 본 발명의 실시예에 따른 시프트 및 XOR 연산의 실시예를 구현함으로써, 시프트 및 XOR 처리를 달성하는 데 필요한 명령어의 수가 급격히 감소될 수 있다.
본 발명의 실시예는 시프트 및 XOR 연산을 구현하는 명령어를 포함한다. 일 실시예에서, 시프트 및 XOR 연산...
데이터 요소에 적용되는 일 실시예에 따른 시프트 및 XOR 연산은 일반적으로 다음과 같이 표현될 수 있다:
DEST1 <- SRC1 [SRC2];
일 실시예에서, SRC1은 복수의 데이터 요소를 갖는 제1 피연산자를 저장하고, SRC2는 시프트 및 XOR 명령어에 의해 시프트될 값을 나타내는 값을 포함한다. 다른 실시예에서, 시프트 및 XOR 값 표시자는 즉치 필드(immediate field)에 저장될 수 있다.
상기 흐름에서, "DEST" 및 "SRC"는 대응하는 데이터 또는 연산의 소스 및 목적지를 나타내는 일반항이다. 일부 실시예에서, 이들은 레지스터, 메모리, 또는 나타낸 것과 다른 이름 또는 기능을 갖는 기타 저장 영역에 의해 구현될 수 있다. 예를 들어, 일 실시예에서, DEST1 및 DEST2는 제1 및 제2 임시 저장 영역(예컨대, "TEMP1" 및 "TEMP2" 레지스터)일 수 있고, SRC1 및 SRC3는 제1 및 제2 목적지 저장 영역(예컨대, "DEST1" 및 "DEST2" 레지스터)일 수 있으며, 이하 마찬가지이다. 다른 실시예에서, SRC 및 DEST 저장 영역들 중 2개 이상은 동일한 저장 영역(예컨대, SIMD 레지스터) 내의 상이한 데이터 저장 요소에 대응할 수 있다.
도 1a는 본 발명의 일 실시예에 따른, 시프트 및 XOR 연산을 위한 명령어를 실행하는 실행 유닛을 포함하는 프로세서로 형성된 예시적인 컴퓨터 시스템의 블록도이다. 시스템(100)은, 본 명세서에 기술된 실시예에서와 같이 본 발명에 따른, 프로세스 데이터에 대한 알고리즘을 수행하는 논리를 포함하는 실행 유닛을 이용하는 프로세서(102)와 같은 구성요소를 포함한다. 시스템(100)은 미국 캘리포니아주 산타 클라라 소재의 Intel Corporation으로부터 입수가능한 PENTIUM® III, PENTIUM® 4, Xeon™, Itanium®, XScale™ 및/또는 StrongARM™ 마이크로프로세서에 기초한 처리 시스템을 나타내지만, 다른 시스템(다른 마이크로프로세서를 갖는 PC, 엔지니어링 워크스테이션, 셋톱 박스 등을 포함함)도 사용될 수 있다. 일 실시예에서, 샘플 시스템(100)은 미국 워싱턴주 레드몬드 소재의 Microsoft Corporation으로부터 입수가능한 WINDOWS™ 운영 체제의 어떤 버전을 실행할 수 있지만, 다른 운영 체제(예컨대, UNIX 및 Linux), 내장된 소프트웨어, 및/또는 그래픽 사용자 인터페이스도 역시 사용될 수 있다. 따라서, 본 발명의 실시예가 하드웨어 회로 및 소프트웨어의 임의의 특정의 조합으로 제한되지 않는다.
실시예가 컴퓨터 시스템으로 제한되지 않는다. 본 발명의 대안의 실시예가 핸드헬드 장치 및 임베디드 애플리케이션(embedded application)과 같은 다른 장치에서 사용될 수 있다. 핸드헬드 장치의 일부 예는 휴대폰, 인터넷 프로토콜 장치, 디지털 카메라, PDA(personal digital assistant), 및 핸드헬드 PC를 포함한다. 임베디드 애플리케이션은 마이크로제어기, DSP(digital signal processor, 디지털 신호 처리기), 시스템 온 칩(system on a chip), 네트워크 컴퓨터(NetPC), 셋톱 박스, 네트워크 허브, WAN(wide area network) 스위치, 또는 피연산자에 대해 시프트 및 XOR 연산을 수행하는 임의의 다른 시스템을 포함할 수 있다. 게다가, 일부 아키텍처는 멀티미디어 응용의 효율을 향상시키기 위해 명령어가 몇 개의 데이터를 동시에 처리할 수 있게 하도록 구현되었다. 데이터의 유형 및 양이 증가함에 따라, 컴퓨터 및 그의 프로세서가 보다 효율적인 방법으로 데이터를 조작하도록 향상되어야만 한다.
도 1a는 본 발명의 일 실시예에 따른, 다수의 데이터 요소를 시프트 및 XOR하는 알고리즘을 수행하는 하나 이상의 실행 유닛(108)을 포함하는 프로세서(102)로 형성된 컴퓨터 시스템(100)의 블록도이다. 일 실시예는 단일 프로세서 데스크톱 또는 서버 시스템과 관련하여 기술될 수 있지만, 대안의 실시예는 멀티프로세서 시스템에 포함될 수 있다. 시스템(100)은 허브 아키텍처의 예이다. 컴퓨터 시스템(100)은 데이터 신호를 처리하는 프로세서(102)를 포함한다. 프로세서(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)에 대한 마이크로코드를 저장하는 마이크로코드(ucode) ROM도 포함한다. 이 실시예에서, 실행 유닛(108)은 패킹된 명령어 집합(109)을 처리하는 논리를 포함한다. 일 실시예에서, 패킹된 명령어 집합(109)은 다수의 피연산자에 대해 시프트 및 XOR을 수행하는 패킹된 시프트 및 XOR 명령어를 포함한다. 패킹된 명령어 집합(109)을 범용 프로세서(102)의 명령어 집합에 포함시킴으로써, 명령어를 실행하는 연관된 회로와 함께, 많은 멀티미디어 응용에서 사용되는 연산이 범용 프로세서(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)는 명령어 및 데이터 저장을 위한 그리고 그래픽 명령, 데이터 및 텍스처의 저장을 위한 메모리(120)로의 고대역폭 메모리 경로(118)를 제공한다. MCH(116)는 프로세서(102), 메모리(120) 및 시스템(100) 내의 다른 구성요소 사이에서 데이터 신호를 보내고 프로세서 버스(110), 메모리(120) 및 시스템 I/O(122) 사이에서 데이터 신호를 브리징한다. 일부 실시예에서, 시스템 논리 칩(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 장치, 플래시 메모리 장치, 또는 기타 대용량 저장 장치를 포함할 수 있다.
시스템의 다른 실시예에서, 시프트 및 XOR 명령어를 갖는 알고리즘을 실행하는 실행 유닛은 시스템 온 칩에서 사용될 수 있다. 시스템 온 칩의 일 실시예는 프로세서 및 메모리를 포함한다. 하나의 이러한 시스템에 대한 메모리는 플래시 메모리이다. 플래시 메모리는 프로세서 및 기타 시스템 구성요소와 동일한 다이 상에 위치할 수 있다. 또한, 메모리 제어기 또는 그래픽 제어기와 같은 다른 논리 블록도 역시 시스템 온 칩 상에 위치할 수 있다.
도 1b는 본 발명의 일 실시예의 원리를 구현하는 데이터 처리 시스템(140)을 나타낸 것이다. 당업자는 본 명세서에 기술된 실시예가 본 발명의 범위를 벗어나지 않고 대안의 처리 시스템에서 사용될 수 있다는 것을 쉽게 알 것이다.
컴퓨터 시스템(140)은 시프트 및 XOR 연산을 비롯한 SIMD 연산을 수행할 수 있는 처리 코어(159)를 포함한다. 일 실시예에서, 처리 코어(159)는 CISC, RISC, 또는 VLIW 유형 아키텍처를 포함하지만 이들로 제한되지 않는 임의의 유형의 아키텍처의 처리 유닛을 나타낸다. 처리 코어(159)는 또한 하나 이상의 공정 기술에서의 제조에 적당할 수 있고, 기계 판독가능 매체 상에 충분히 상세히 표현됨으로써, 상기 제조를 용이하게 하는 데 적당할 수 있다.
처리 코어(159)는 실행 유닛(142), 일련의 레지스터 파일(들)(145), 및 디코더(144)를 포함한다. 처리 코어(159)는 또한 본 발명을 이해하는 데 필요하지 않은 부가의 회로(도시 생략)를 포함한다. 실행 유닛(142)은 처리 코어(159)에 의해 수신된 명령어를 실행하는 데 사용된다. 전형적인 프로세서 명령어를 인식하는 것에 부가하여, 실행 유닛(142)은 패킹된 데이터 형식에 대한 연산을 수행하기 위해 패킹된 명령어 집합(143) 내의 명령어를 인식할 수 있다. 패킹된 명령어 집합(143)은 시프트 및 XOR 연산을 지원하는 명령어를 포함하고, 또한 다른 패킹된 명령어도 포함할 수 있다. 실행 유닛(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(universal serial bus)(156), 블루투스 무선 UART(157), 및 I/O 확장 인터페이스(158)를 포함할 수 있지만 이들로 제한되지 않는다.
데이터 처리 시스템(140)의 일 실시예는 모바일, 네트워크 및/또는 무선 통신과, 시프트 및 XOR 연산을 포함하는 SIMD 연산을 수행할 수 있는 처리 코어(159)를 제공한다. 처리 코어(159)는 Walsh-Hadamard 변환, FFT(fast Fourier transform), DCT(discrete cosine transform) 및 그 각자의 역변환과 같은 이산 변환; 색 공간 변환, 비디오 인코드 움직임 추정 또는 비디오 디코드 움직임 보상과 같은 압축/압축 해제 기법; 및 PCM(pulse coded modulation)과 같은 변조/복조(모뎀) 기능을 비롯한 다양한 오디오, 비디오, 영상 및 통신 알고리즘으로 프로그램될 수 있다. 본 발명의 일부 실시예는 또한 3차원("3D") 모델링, 렌더링, 객체 충돌 탐지, 3D 객체 변환 및 조명 등과 같은 그래픽 응용에 적용될 수 있다.
도 1c는 SIMD 시프트 및 XOR 연산을 수행할 수 있는 데이터 처리 시스템의 또 다른 대안의 실시예를 나타낸 것이다. 한 대안의 실시예에 따르면, 데이터 처리 시스템(160)은 주 프로세서(main processor)(166), SIMD 코프로세서(161), 캐시 메모리(167), 및 입/출력 시스템(168)을 포함할 수 있다. 입/출력 시스템(168)은 선택적으로 무선 인터페이스(169)에 결합될 수 있다. SIMD 코프로세서(161)는 시프트 및 XOR 연산을 비롯한 SIMD 연산을 수행할 수 있다. 처리 코어(170)는 하나 이상의 공정 기술에서의 제조에 적당할 수 있고, 기계 판독가능 매체 상에 충분히 상세히 표현됨으로써, 처리 코어(170)를 비롯한 데이터 처리 시스템(160)의 전부 또는 일부의 제조를 용이하게 하는 데 적당할 수 있다.
일 실시예에서, SIMD 코프로세서(161)는 실행 유닛(162) 및 일련의 레지스터 파일(들)(164)을 포함한다. 주 프로세서(165)의 일 실시예는 실행 유닛(162)에 의해 실행되는 SIMD 시프트 및 XOR 명령어를 비롯한 명령어 집합(163)의 명령어를 인식하는 디코더(165)를 포함한다. 대안의 실시예에서, SIMD 코프로세서(161)는 또한 명령어 집합(163)의 명령어를 디코딩하는 디코더(165B)의 적어도 일부를 포함한다. 처리 코어(170)는 또한 본 발명의 실시예를 이해하는 데 필요하지 않은 부가의 회로(도시 생략)도 포함한다.
동작에서, 주 프로세서(166)는 캐시 메모리(167) 및 입/출력 시스템(168)과의 상호작용을 비롯한 일반 유형의 데이터 처리 동작을 제어하는 데이터 처리 명령어의 스트림을 실행한다. SIMD 코프로세서 명령어는 데이터 처리 명령어의 스트림 내에 포함된다. 주 프로세서(166)의 디코더(165)는 이들 SIMD 코프로세서 명령어를 부속된 SIMD 코프로세서(161)에 의해 실행되어야 하는 유형인 것으로 인식한다. 그에 따라, 주 프로세서(166)는 코프로세서 버스(166) 상에 이들 SIMD 코프로세서 명령어(또는 SIMD 코프로세서 명령어를 나타내는 제어 신호)를 발행하고, 이들 명령어는 코프로세서 버스(166)로부터 임의의 부속된 SIMD 코프로세서에 의해 수신된다. 이 경우에, SIMD 코프로세서(161)는 그에게로 보내진 임의의 수신된 SIMD 코프로세서 명령어를 받아서 실행할 것이다.
SIMD 코프로세서 명령어에 의해 처리하기 위해 무선 인터페이스(169)를 통해 데이터가 수신될 수 있다. 한 예에서, 음성 통신이 디지털 신호의 형태로 수신될 수 있고, 이는 음성 통신을 나타내는 디지털 오디오 샘플을 재생성하기 위해 SIMD 코프로세서 명령어에 의해 처리될 수 있다. 다른 예에서, 압축된 오디오 및/또는 비디오가 디지털 비트 스트림의 형태로 수신될 수 있고, 이는 디지털 오디오 샘플 및/또는 동영상 프레임을 재생성하기 위해 SIMD 코프로세서 명령어에 의해 처리될 수 있다. 처리 코어(170)의 일 실시예에서, 주 프로세서(166) 및 SIMD 코프로세서(161)는 실행 유닛(162), 일련의 레지스터 파일(들)(164), 및 SIMD 시프트 및 XOR 명령어를 포함하는 명령어 집합(163)의 명령어를 인식하는 디코더(165)를 포함하는 단일 처리 코어(170) 내에 통합된다.
도 2는 본 발명의 일 실시예에 따른, 시프트 및 XOR 명령어를 수행하는 논리 회로를 포함하는 프로세서(200)에 대한 마이크로-아키텍처의 블록도이다. 시프트 및 XOR 명령어의 일 실시예에서, 명령어는 부동 소수점 가수 값을 지수가 나타내는 양만큼 오른쪽으로 시프트하고, 시프트된 값을 어떤 값과 XOR하여, 최종 결과를 생성할 수 있다. 일 실시예에서, 순차 프런트 엔드(in-order front end)(201)는 실행될 매크로-명령어를 페치하고 이들 명령어가 프로세서 파이프라인에서 나중에 사용되도록 준비하는 프로세서(200)의 일부이다. 프런트 엔드(201)는 몇 개의 유닛을 포함할 수 있다. 일 실시예에서, 명령어 프리페처(226)는 매크로-명령어를 메모리로부터 페치하고 이들 명령어를 명령어 디코더(228)에 공급하며, 명령어 디코더는 차례로 이들 명령어를 기계가 실행할 수 있는 마이크로명령어 또는 마이크로-연산(마이크로 op 또는 uop라고도 함)이라고 하는 프리미티브(primitive)로 디코딩한다. 일 실시예에서, 트레이스 캐시(230)는 디코딩된 uop를 받아서 이들을 실행을 위해 uop 큐(234)에서 프로그램 순서화된 시퀀스 또는 트레이스로 어셈블링한다. 트레이스 캐시(230)가 복잡한 매크로-명령어를 만날 때, 마이크로코드 ROM(232)은 연산을 완료하는 데 필요한 uop를 제공한다.
많은 매크로-명령어가 단일 마이크로-op로 변환되는 반면, 다른 것들은 전체 연산을 완료하는 데 몇 개의 마이크로-op를 필요로 한다. 일 실시예에서, 매크로-명령어를 완료하는 데 5개 이상의 마이크로-op가 필요한 경우, 디코더(228)는 그 매크로-명령어를 실행하기 위해 마이크로코드 ROM(232)에 액세스한다. 일 실시예에서, 패킹된 시프트 및 XOR 명령어는 명령어 디코더(228)에서의 처리를 위해 적은 수의 마이크로-op로 디코딩될 수 있다. 다른 실시예에서, 연산을 달성하기 위해 다수의 마이크로-op가 필요한 경우, 패킹된 시프트 및 XOR 알고리즘에 대한 명령어는 마이크로코드 ROM(232) 내에 저장될 수 있다. 트레이스 캐시(230)는 마이크로코드 ROM(232)에서 시프트 및 XOR 알고리즘에 대한 마이크로코드 시퀀스를 읽기 위한 올바른 마이크로-명령어 포인터를 결정하는 진입점 PLA(programmable logic array)를 말한다. 마이크로코드 ROM(232)이 현재의 매크로-명령어에 대한 마이크로-op를 시퀀싱하는 것을 끝낸 후에, 기계의 프런트 엔드(201)는 트레이스 캐시(230)로부터 마이크로-op를 페치하는 것을 재개한다.
일부 SIMD 및 다른 멀티미디어 유형의 명령어는 복잡한 명령어(complex instruction)로 간주된다. 대부분의 부동 소수점 관련 명령어도 역시 복잡한 명령어이다. 그에 따라, 명령어 디코더(228)가 복잡한 매크로-명령어를 만날 때, 그 매크로-명령어에 대한 마이크로코드 시퀀스를 검색하기 위해 적절한 위치에서 마이크로코드 ROM(232)에 액세스한다. 그 매크로-명령어를 수행하는 데 필요한 다양한 마이크로-op가 적절한 정수 및 부동 소수점 실행 유닛에서의 실행을 위해 비순차적 실행 엔진(203)으로 전달된다.
비순차적 실행 엔진(203)은 마이크로-명령어가 실행을 위해 준비되는 곳이다. 비순차적 실행 논리는 마이크로-명령어가 파이프라인을 따라 내려가면서 실행을 위해 스케줄링될 때 성능을 최적화하기 위해 마이크로-명령어의 흐름을 매끄럽게 하고 재정렬하는 다수의 버퍼를 가진다. 할당기 논리는 각각의 uop가 실행되기 위해 필요로 하는 기계 버퍼 및 자원을 할당한다. 레지스터 이름 변경 논리는 논리 레지스터를 레지스터 파일 내의 항목으로 이름 변경한다. 할당기는 또한, 명령어 스케줄러, 즉 메모리 스케줄러, 고속 스케줄러(fast scheduler)(202), 저속/일반 부동 소수점 스케줄러(204), 및 간단한 부동 소수점 스케줄러(206)의 앞에, 2개의 uop 큐 - 하나는 메모리 연산을 위한 것이고 하나는 비메모리 연산을 위한 것임 - 중 하나에서의 각각의 uop에 대한 항목을 할당한다. uop 스케줄러(202, 204, 206)는, 그의 의존적인 입력 레지스터 피연산자 소스의 준비성(readiness) 및 uop가 그의 연산을 완료하는 데 필요한 실행 자원의 이용가능성에 기초하여, uop가 언제 실행될 준비가 되는지를 결정한다. 이 실시예의 고속 스케줄러(202)는 주 클록 사이클의 1/2마다 스케줄링할 수 있는 반면, 다른 스케줄러는 단지 주 프로세서 클록 사이클마다 한 번만 스케줄링할 수 있다. 스케줄러는 실행을 위한 uop를 스케줄링하기 위해 디스패치 포트를 중재한다.
레지스터 파일(208, 210)은 스케줄러(202, 204, 206)와 실행 블록(211) 내의 실행 유닛(212, 214, 216, 218, 220, 222, 224) 사이에 있다. 정수 및 부동 소수점 연산을 위해, 각각, 개별적인 레지스터 파일(208, 210)이 있다. 이 실시예의 각각의 레지스터 파일(208, 210)은 또한 아직 레지스터 파일에 기입되지 않은 금방 완성된 결과를 새로운 의존적 uop로 바이패스 또는 전달할 수 있는 바이패스 네트워크를 포함한다. 정수 레지스터 파일(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), 부동 소수점 이동 유닛(224) - 으로 이루어져 있다. 이 실시예에서, 부동 소수점 실행 블록(222, 224)은 부동 소수점, MMX, SIMD 및 SSE 연산을 실행한다. 이 실시예의 부동 소수점 ALU(222)는 나눗셈, 제곱근 및 나머지 마이크로-op를 실행하는 64 비트 x 64 비트 부동 소수점 나눗셈기를 포함한다. 본 발명의 실시예에서, 부동 소수점 값을 포함하는 임의의 동작은 부동 소수점 하드웨어에서 행해진다. 예를 들어, 정수 형식과 부동 소수점 형식 간의 변환은 부동 소수점 레지스터 파일을 수반한다. 유사하게, 부동 소수점 나눗셈 연산은 부동 소수점 나눗셈기에서 행해진다. 한편, 비부동 소수점 숫자 및 정수 유형은 정수 하드웨어 자원에서 처리된다. 간단하고 아주 빈번한 ALU 연산은 고속 ALU 실행 유닛(216, 218)으로 간다. 이 실시예의 고속 ALU(216, 218)는 1/2 클록 사이클의 유효 지연 시간으로 고속 연산을 실행할 수 있다. 일 실시예에서, 가장 복잡한 정수 연산은 저속 ALU(220)로 가는데, 그 이유는 저속 ALU(220)가 곱셈기, 시프트, 플래그 논리 및 분기 처리와 같은 긴 지연 시간 유형의 연산에 대한 정수 실행 하드웨어를 포함하기 때문이다. 메모리 로드/저장 연산은 AGU(212, 214)에 의해 실행된다. 이 실시예에서, 정수 ALU(216, 218, 220)는 64 비트 데이터 피연산자에 대해 정수 연산을 수행하는 것과 관련하여 기술되어 있다. 대안의 실시예에서, ALU(216, 218, 220)는 16, 32, 128, 256 등을 비롯한 각종의 데이터 비트를 지원하도록 구현될 수 있다. 유사하게, 부동 소수점 유닛(222, 224)은 다양한 폭의 비트를 갖는 일정 범위의 피연산자를 지원하도록 구현될 수 있다. 일 실시예에서, 부동 소수점 유닛(222, 224)은 SIMD 및 멀티미디어 명령어와 관련하여 128 비트 폭의 패킹된 데이터 피연산자를 처리할 수 있다.
"레지스터"라는 용어는 본 명세서에서 온-보드 프로세서 저장 장소 - 매크로-명령어의 일부로서 피연산자를 식별하는 데 사용됨 - 를 말한다. 달리 말하면, 본 명세서에서 말하는 레지스터는 프로세서의 외부로부터(프로그래머의 관점에서) 볼 수 있는 것이다. 그러나, 일 실시예의 레지스터가 의미에 있어서 특정의 유형의 회로로 제한되어서는 안 된다. 오히려, 일 실시예의 레지스터는 데이터를 저장하고 제공하며 본 명세서에 기술된 기능을 수행할 수 있기만 하면 된다. 본 명세서에 기술된 레지스터는 임의의 수의 상이한 기법, 예컨대 전용 물리 레지스터, 레지스터 이름 변경을 사용하여 동적으로 할당된 물리 레지스터, 및 전용 물리 레지스터와 동적으로 할당된 물리 레지스터의 조합 등을 사용하여 프로세서 내의 회로에 의해 구현될 수 있다. 일 실시예에서, 정수 레지스터는 32 비트 정수 데이터를 저장한다. 일 실시예의 레지스터 파일은 또한 16개의 MMX 및 범용 레지스터, 패킹된 데이터에 대한 8개의 멀티미디어(예컨대, "EM64T" 덧셈) 멀티미디어 SIMD 레지스터를 포함한다. 이하에서의 논의를 위해, 레지스터는 패킹된 데이터를 보유하도록 설계된 데이터 레지스터, 예컨대 미국 캘리포니아주 산타 클라라 소재의 Intel Corporation의 MMX 기술에 의해 가능하게 되는 마이크로프로세서에서의 64 비트 폭의 MMX™ 레지스터(일부 경우에, "mm" 레지스터라고도 함)인 것으로 이해된다. 정수 및 부동 소수점 형태 둘 다로 이용가능한 이들 MMX 레지스터는 SIMD 및 SSE 명령어에 수반하는 패킹된 데이터 요소에 대해 동작될 수 있다. 유사하게, SSE2, SSE3, SSE4, 또는 그 이상(일반적으로 "SSEx"라고 함)의 기술과 관련한 128 비트 폭의 MMX 레지스터도 역시 이러한 패킹된 데이터 피연산자를 보유하는 데 사용될 수 있다. 이 실시예에서, 패킹된 데이터 및 정수 데이터를 저장할 시에, 레지스터는 2개의 데이터 유형을 구별할 필요가 없다. 일 실시예에서, 다른 레지스터 또는 레지스터의 조합이 256 비트 또는 그 이상의 데이터를 저장하는 데 사용될 수 있다.
이하의 도면의 예에서, 다수의 데이터 피연산자가 기술되어 있다. 도 3a는 본 발명의 일 실시예에 따른, 멀티미디어 레지스터 내의 다양한 패킹된 데이터 유형(packed data type) 표현을 나타낸 것이다. 도 3a는 128 비트 폭의 피연산자의 패킹된 바이트(310), 패킹된 워드(320) 및 패킹된 더블워드(dword)(330)에 대한 데이터 유형을 나타낸 것이다. 이 예의 패킹된 바이트 형식(packed byte format)(310)은 128 비트 길이이고, 16개의 패킹된 바이트 데이터 요소를 포함한다. 바이트는 여기에서 8 비트의 데이터로서 정의된다. 각각의 바이트 데이터 요소에 대한 정보는 바이트 0에 대해서는 비트 7 내지 비트 0에, 바이트 1에 대해서는 비트 15 내지 비트 8에, 바이트 2에 대해서는 비트 23 내지 비트 16에, 마지막으로 바이트 15에 대해서는 비트 120 내지 비트 127에 저장된다. 따라서, 모든 이용가능한 비트가 레지스터에서 사용된다. 이 저장 배열은 프로세서의 저장 효율을 향상시킨다. 또한, 16개의 데이터 요소가 액세스되는 경우, 하나의 연산이 이제 16개의 데이터 요소에 대해 병렬로 수행될 수 있다.
일반적으로, 데이터 요소는 동일한 길이의 다른 데이터 요소와 함께 단일 레지스터 또는 메모리 장소에 저장되는 개개의 데이터이다. SSEx 기술과 관련된 패킹된 데이터 시퀀스에서, MMX 레지스터에 저장된 데이터 요소의 수는 128 비트를 개개의 데이터 요소의 비트 단위의 길이로 나눈 것이다. 유사하게, MMX 및 SSE 기술과 관련된 패킹된 데이터 시퀀스에서, MMX 레지스터에 저장된 데이터 요소의 수는 64 비트를 개개의 데이터 요소의 비트 단위의 길이로 나눈 것이다. 도 3a에 예시된 데이터 유형이 128 비트 길이이지만, 본 발명의 실시예는 또한 64 비트 폭 또는 기타 크기의 피연산자에 대해서도 동작할 수 있다. 이 예의 패킹된 워드 형식(packed word format)(320)은 128 비트 길이이고, 8개의 패킹된 워드 데이터 요소를 포함한다. 각각의 패킹된 워드는 16 비트의 정보를 포함한다. 도 3a의 패킹된 더블워드 형식(packed doubleword format)(330)은 128 비트 길이이고, 4개의 패킹된 더블워드 데이터 요소를 포함한다. 각각의 패킹된 더블워드 데이터 요소는 32 비트의 정보를 포함한다. 패킹된 쿼드워드는 128 비트 길이이고 2개의 패킹된 쿼드워드 데이터 요소를 포함한다.
도 3b는 대안의 레지스터내 데이터 저장 형식을 나타낸 것이다. 각각의 패킹된 데이터는 2개 이상의 독립적인 데이터 요소를 포함할 수 있다. 3개의 패킹된 데이터 형식 - 패킹된 하프(packed half)(341), 패킹된 싱글(packed single)(342) 및 패킹된 더블(packed double)(343) - 이 예시되어 있다. 패킹된 하프(341), 패킹된 싱글(342) 및 패킹된 더블(343)의 일 실시예는 고정 소수점 데이터 요소를 포함한다. 대안의 실시예에서, 패킹된 하프(341), 패킹된 싱글(342) 및 패킹된 더블(343) 중 하나 이상은 부동 소수점 데이터 요소를 포함할 수 있다. 패킹된 하프(341)의 하나의 대안의 실시예는 128 비트 길이로서 8개의 16 비트 데이터 요소를 포함한다. 패킹된 싱글(342)의 하나의 실시예는 128 비트 길이로서 4개의 32 비트 데이터 요소를 포함한다. 패킹된 더블(343)의 하나의 실시예는 128 비트 길이로서 2개의 64 비트 데이터 요소를 포함한다. 이러한 패킹된 데이터 형식이 다른 레지스터 길이로, 예를 들어, 96 비트, 160 비트, 192 비트, 224 비트, 256 비트 또는 그 이상으로 추가로 확장될 수 있다는 것을 알 것이다.
도 3c는 본 발명의 일 실시예에 따른, 멀티미디어 레지스터 내의 다양한 부호 있는(signed) 및 부호 없는(unsigned) 패킹된 데이터 유형(packed data type) 표현을 나타낸 것이다. 부호 없는 패킹된 바이트 표현(344)은 부호 없는 패킹된 바이트를 SIMD 레지스터에 저장한 것을 나타낸 것이다. 각각의 바이트 데이터 요소에 대한 정보는 바이트 0에 대해서는 비트 7 내지 비트 0에, 바이트 1에 대해서는 비트 15 내지 비트 8에, 바이트 2에 대해서는 비트 23 내지 비트 16에, 마지막으로 바이트 15에 대해서는 비트 120 내지 비트 127에 저장된다. 따라서, 모든 이용가능한 비트가 레지스터에서 사용된다. 이 저장 배열은 프로세서의 저장 효율을 향상시킬 수 있다. 또한, 16개의 데이터 요소가 액세스되는 경우, 하나의 연산이 이제 16개의 데이터 요소에 대해 병렬로 수행될 수 있다. 부호 있는 패킹된 바이트 표현(345)은 부호 있는 패킹된 바이트의 저장을 나타낸 것이다. 모든 바이트 데이터 요소의 제8 비트가 부호 표시자라는 것에 유의한다. 부호 없는 패킹된 워드 표현(346)은 워드 7 내지 워드 0가 SIMD 레지스터에 어떻게 저장되는지를 나타낸 것이다. 부호 있는 패킹된 워드 표현(347)은 부호 없는 패킹된 워드의 레지스터 내 표현(346)과 유사하다. 각각의 워드 데이터 요소의 제16 비트가 부호 표시자라는 것에 유의한다. 부호 없는 패킹된 더블워드 표현(348)은 더블워드 데이터 요소가 어떻게 저장되는지를 나타낸 것이다. 부호 있는 패킹된 더블워드 표현(349)은 부호 없는 패킹된 더블워드의 레지스터 내 표현(348)과 유사하다. 필요한 부호 비트가 각각의 더블워드 데이터 요소의 제32 비트라는 것에 유의한다.
도 3d는 32 또는 그 이상의 비트 및 "IA-32 Intel Architecture Software Developer's Manual Volume 2: Instruction Set Reference" - 이는 월드 와이드 웹(www)의 intel.com/design/litcentr에서 미국 캘리포니아주 산타 클라라 소재의 Intel Corporation로부터 입수가능함 - 에 기술된 연산 코드 형식의 유형에 부합하는 레지스터/메모리 피연산자 어드레싱 모드를 갖는, 연산 인코딩(연산 코드) 형식(360)의 일 실시예를 나타낸 것이다. 일 실시예에서, 시프트 및 XOR 연산은 필드(361) 및 필드(362) 중 하나 이상에 의해 인코딩될 수 있다. 최대 2개의 소스 피연산자 식별자(364, 365)를 비롯하여 명령어당 최대 2개의 피연산자 장소가 식별될 수 있다. 시프트 및 XOR 명령어의 일 실시예에서, 목적지 피연산자 식별자(366)는 소스 피연산자 식별자(364)와 동일한 반면, 다른 실시예에서, 이들은 상이하다. 대안의 실시예에서, 목적지 피연산자 식별자(366)는 소스 피연산자 식별자(365)와 동일한 반면, 다른 실시예에서, 이들은 상이하다. 시프트 및 XOR 명령어의 일 실시예에서, 소스 피연산자 식별자(364, 365)에 의해 식별되는 소스 피연산자들 중 하나가 시프트 및 XOR 연산의 결과에 의해 덮어쓰기되는 반면, 다른 실시예에서, 식별자(364)는 소스 레지스터 요소에 대응하고 식별자(365)는 목적지 레지스터 요소에 대응한다. 시프트 및 XOR 명령어의 일 실시예에서, 피연산자 식별자(364, 365)는 32-비트 또는 64-비트 소스 및 목적지 피연산자를 식별하는 데 사용될 수 있다.
도 3e는 40 또는 그 이상의 비트를 갖는 다른 대안의 연산 인코딩(연산 코드) 형식(370)을 나타낸 것이다. 연산 코드 형식(370)은 연산 코드 형식(360)에 대응하고, 선택적인 프리픽스 바이트(378)를 포함한다. 시프트 및 XOR 연산의 유형은 필드들(378, 371, 372) 중 하나 이상에 의해 인코딩될 수 있다. 명령어당 최대 2개의 피연산자 장소가 소스 피연산자 식별자(374, 375)에 의해 그리고 프리픽스 바이트(378)에 의해 식별될 수 있다. 시프트 및 XOR 명령어의 일 실시예에서, 프리픽스 바이트(378)는 32-비트 또는 64-비트 소스 및 목적지 피연산자를 식별하는 데 사용될 수 있다. 시프트 및 XOR 명령어의 일 실시예에서, 목적지 피연산자 식별자(376)는 소스 피연산자 식별자(374)와 동일한 반면, 다른 실시예에서, 이들은 상이하다. 대안의 실시예에서, 목적지 피연산자 식별자(376)는 소스 피연산자 식별자(375)와 동일한 반면, 다른 실시예에서, 이들은 상이하다. 일 실시예에서, 시프트 및 XOR 연산은 피연산자 식별자(374, 375)에 의해 식별된 피연산자들 중 하나를 시프트하고 피연산자 식별자(374, 375)에 의해 식별된 다른 피연산자와 XOR하고 이 시프트 및 XOR 연산의 결과로 덮어쓰기되는 반면, 다른 실시예에서, 식별자(374, 375)에 의해 식별된 피연산자들의 시프트 및 XOR는 다른 레지스터 내의 다른 데이터 요소에 기입된다. 연산 코드 형식(360, 370)은 MOD 필드(363, 373)에 의해 그리고 선택적인 스케일-인덱스-베이스(scale-index-base) 및 변위(displacement) 바이트에 의해 부분적으로 지정된 레지스터 투 레지스터(register to register), 메모리 투 레지스터(memory to register), 레지스터 바이 메모리(register by memory), 레지스터 바이 레지스터(register by register), 레지스터 바이 즉치(register by immediate), 레지스터 투 메모리(register to memory) 어드레싱을 가능하게 한다.
그 다음에 도 3f를 참조하면, 일부 대안의 실시예에서, 64 비트 SIMD(single instruction multiple data) 산술 연산은 CDP(coprocessor data processing) 명령어를 통해 수행될 수 있다. 연산 인코딩(연산 코드) 형식(380)은 CDP 연산 코드 필드(382, 389)를 갖는 하나의 이러한 CDP 명령어를 나타낸다. 시프트 및 XOR 연산의 대안의 실시예에 대한 CDP 명령어의 유형은 필드들(383, 384, 387, 388) 중 하나 이상에 의해 인코딩될 수 있다. 최대 2개의 소스 피연산자 식별자(385, 390) 및 하나의 목적지 피연산자 식별자(386)를 비롯하여 명령어당 최대 3개의 피연산자 장소가 식별될 수 있다. 코프로세서의 일 실시예는 8, 16, 32, 및 64 비트값을 처리할 수 있다. 일 실시예에서, 시프트 및 XOR 연산이 부동 소수점 데이터 요소에 대해 수행된다. 일부 실시예에서, 시프트 및 XOR 명령어가 선택 필드(381)를 사용하여 조건부로 실행될 수 있다. 일부 시프트 및 XOR 명령어에서, 소스 데이터 크기는 필드(383)에 의해 인코딩될 수 있다. 시프트 및 XOR 명령어의 일부 실시예에서, SIMD 필드에 대해 영(Z), 마이너스(N), 캐리(C), 및 오버플로우(V) 탐지가 행해질 수 있다. 일부 명령어에서, 포화의 유형이 필드(384)에 의해 인코딩될 수 있다.
도 4는 본 발명에 따른, 패킹된 데이터 피연산자에 대해 시프트 및 XOR 연산을 수행하는 논리의 일 실시예의 블록도이다. 본 발명의 실시예는 앞서 기술한 것과 같은 다양한 유형의 피연산자에 대해 기능하도록 구현될 수 있다. 간단함을 위해, 하기의 논의 및 이하의 예는 데이터 요소를 처리하는 시프트 및 XOR 명령어와 관련한 것이다. 일 실시예에서, 제1 피연산자(401)는 입력(405)에 의해 지정된 양만큼 시프터(410)에 의해 시프트된다. 일 실시예에서, 이는 우측 시프트이다. 그러나, 다른 실시예에서, 시프터는 좌측 시프트 연산을 수행한다. 일부 실시예에서, 피연산자는 스칼라 값인 반면, 다른 실시예에서, 이는 다수의 상이한 가능한 데이터 크기 및 유형(예컨대, 부동 소수점, 정수)을 갖는 패킹된 데이터 값이다. 일 실시예에서, 시프트 카운트(405)는 패킹된(또는 "벡터") 값이고, 그의 각각의 요소는 대응하는 시프트 카운트 요소에 의해 시프트될 패킹된 피연산자의 요소에 대응한다. 다른 실시예에서, 시프트 카운트는 제1 데이터 피연산자의 모든 요소에 적용된다. 게다가, 일부 실시예에서, 시프트 카운트는 즉치, r/m, 또는 기타 필드와 같은 명령어 내의 필드에 의해 지정된다. 다른 실시예에서, 시프트 카운트는 명령어가 나타내는 레지스터에 의해 지정된다.
시프트된 피연산자는 이어서 논리(420)에 의해 값(430)과 XOR되고, XOR된 결과가 목적지 저장 장소(예컨대, 레지스터)(425)에 저장된다. 일 실시예에서, XOR 값(430)은 패킹된(또는 "벡터") 값이고, 그의 각각의 요소는 대응하는 XOR 요소에 의해 XOR될 패킹된 피연산자의 요소에 대응한다. 다른 실시예에서, XOR 값(430)은 제1 데이터 피연산자의 모든 요소에 적용된다. 게다가, 일부 실시예에서, XOR 값은 즉치, r/m, 또는 기타 필드와 같은 명령어 내의 필드에 의해 지정된다. 다른 실시예에서, XOR 값은 명령어가 나타내는 레지스터에 의해 지정된다.
도 5는 본 발명의 일 실시예에 따른 시프트 및 XOR 명령어의 연산을 나타낸 것이다. 연산(501)에서, 시프트 및 XOR 명령어가 수신되면, 연산(505)에서 제1 피연산자가 시프트 카운트만큼 시프트된다. 일 실시예에서, 이는 우측 시프트이다. 그러나, 다른 실시예에서, 시프터는 좌측 시프트 연산을 수행한다. 일부 실시예에서, 피연산자는 스칼라 값인 반면, 다른 실시예에서, 이는 다수의 상이한 가능한 데이터 크기 및 유형(예컨대, 부동 소수점, 정수)을 갖는 패킹된 데이터 값이다. 일 실시예에서, 시프트 카운트(405)는 패킹된(또는 "벡터") 값이고, 그의 각각의 요소는 대응하는 시프트 카운트 요소에 의해 시프트될 패킹된 피연산자의 요소에 대응한다. 다른 실시예에서, 시프트 카운트는 제1 데이터 피연산자의 모든 요소에 적용된다. 게다가, 일부 실시예에서, 시프트 카운트는 즉치, r/m, 또는 기타 필드와 같은 명령어 내의 필드에 의해 지정된다. 다른 실시예에서, 시프트 카운트는 명령어가 나타내는 레지스터에 의해 지정된다.
연산(510)에서, 시프트된 값은 XOR 값과 XOR된다. 일 실시예에서, XOR 값(430)은 패킹된(또는 "벡터") 값이고, 그의 각각의 요소는 대응하는 XOR 요소에 의해 XOR될 패킹된 피연산자의 요소에 대응한다. 다른 실시예에서, XOR 값(430)은 제1 데이터 피연산자의 모든 요소에 적용된다. 게다가, 일부 실시예에서, XOR 값은 즉치, r/m, 또는 기타 필드와 같은 명령어 내의 필드에 의해 지정된다. 다른 실시예에서, XOR 값은 명령어가 나타내는 레지스터에 의해 지정된다.
연산(515)에서, 시프트되고 XOR된 값이 장소에 저장된다. 일 실시예에서, 장소는 스칼라 레지스터이다. 다른 실시예에서, 장소는 패킹된 데이터 레지스터이다. 다른 실시예에서, 목적지 장소는 또한 명령어에 의해 지정된 패킹된 데이터 레지스터와 같은 소스 장소로서도 사용된다. 다른 실시예에서, 목적지 장소는 시프트 카운트 또는 XOR 값과 같은 초기 피연산자 또는 기타 값을 저장하는 소스 장소와 상이한 장소이다.
일 실시예에서, 시프트 및 XOR 명령어는 다양한 컴퓨터 응용 프로그램에서 데이터 중복 해제(de-duplication)를 수행하는 데 유용하다. 데이터 중복 해제는 디스크 저장 장치 및/또는 네트워크 대역폭을 최적화하기 위해 파일들 사이의 공통의 데이터 블록을 찾으려고 시도한다. 일 실시예에서, 시프트 및 XOR 명령어는 롤링 해시(rolling hash), 해시 다이제스트(hash digest)(예컨대, SHA1 또는 MD5) 및 (고속 Lempel-Ziv 방식을 사용한) 고유 청크의 압축을 사용하여 청크 경계를 찾는 것과 같은 연산을 사용하여 데이터 중복 해제 연산에서의 성능을 향상시키는 데 유용하다.
예를 들어, 하나의 데이터 중복 해제 알고리즘이 다음과 같은 의사 코드에 의해 설명될 수 있다:
Figure pct00001
상기 알고리즘에서, 스크램블 테이블(scramble table)은 랜덤한 32-비트 상수의 256-항목 어레이이고, v는 과거의 32 바이트의 데이터의 해시 값을 갖는 롤링 해시이다. 청크 경계가 발견될 때, 알고리즘은 ret=1에서 되돌아가고, 위치 p는 청크의 경계를 나타낸다. 값 z는 양호한 청크 탐지를 가져오는 12 내지 15와 같은 상수일 수 있고 응용에 고유할 수 있다. 일 실시예에서, 시프트 및 XOR 명령어는 상기 알고리즘이 약 2 사이클/바이트의 레이트로 동작하는 데 도움을 줄 수 있다. 다른 실시예에서, 시프트 및 XOR 명령어는 알고리즘이 용도에 따라 훨씬 더 빠르게 또는 느리게 기능하는 데 도움을 준다.
시프트 및 XOR 명령어가 사용되는 적어도 하나의 실시예가 다음과 같은 의사 코드에 의해 설명될 수 있다:
Figure pct00002
상기 알고리즘에서, brefl_scramble 어레이의 각각의 항목은 원래의 스크램블 어레이에서의 대응하는 항목의 비트-반사된 버전을 포함한다. 일 실시예에서, 상기 알고리즘은 우측 대신에 좌측으로 v를 시프트하고, v는 롤링 해시의 비트-반사된 버전을 포함한다. 일 실시예에서, 청크 경계에 대한 검사는 최소 수의 선행 제로를 검사함으로써 수행된다.
다른 실시예에서, 시프트 및 XOR 명령어는 다른 유용한 컴퓨터 연산 및 알고리즘에서 사용될 수 있다. 게다가, 실시예는 시프트 및 XOR 연산을 광범위하게 사용하는 많은 프로그램의 성능을 향상시키는 데 도움을 준다.
따라서, 시프트 및 XOR 명령어를 수행하는 기법이 개시되어 있다. 특정의 예시적인 실시예가 기술되고 첨부 도면에 도시되어 있지만, 다양한 다른 수정이 본 개시 내용을 살펴볼 시에 당업자에게 안출될 수 있기 때문에, 이러한 실시예가 광의의 발명을 제한하는 것이 아니라 단지 예시적인 것이고 본 발명이 도시되고 기술된 특정의 구성 및 배열로 제한되지 않는다는 것을 이해하여야 한다. 성장이 빠르고 추가적인 개선이 쉽게 예상되지 않는 이것과 같은 기술의 영역에서, 개시된 실시예는, 본 개시 내용의 원리 또는 첨부된 특허청구범위의 범위를 벗어나지 않고 기술적 진보를 가능하게 함으로써 용이하게 되는 바와 같이, 구성 및 상세가 용이하게 수정될 수 있다.

Claims (36)

  1. 시프트 및 XOR 명령어를 수행하는 논리를 포함하고, 제1 값은 시프트 양만큼 시프트되고, 상기 시프트된 값은 제2 값과 XOR되는 프로세서.
  2. 제1항에 있어서, 상기 제1 값은 좌측으로 시프트되어야 하는 프로세서.
  3. 제1항에 있어서, 상기 제1 값은 우측으로 시프트되어야 하는 프로세서.
  4. 제1항에 있어서, 상기 제1 값은 논리적으로 시프트되는 프로세서.
  5. 제1항에 있어서, 상기 제1 값은 산술적으로 시프트되는 프로세서.
  6. 제1항에 있어서, 시프터 및 XOR 회로를 포함하는 프로세서.
  7. 제1항에 있어서, 상기 시프트 및 XOR 명령어는 상기 제2 값을 저장하는 제1 필드를 포함하는 프로세서.
  8. 제1항에 있어서, 상기 제1 값은 패킹된 데이터 유형(packed datatype)인 프로세서.
  9. 시프트 및 XOR 연산을 수행하는 제1 명령어를 저장하는 저장 장치; 및
    시프트 및 XOR 명령어를 수행하는 논리를 실행하는 프로세서를 포함하고,
    제1 값은 시프트 양만큼 시프트되고, 상기 시프트된 값은 제2 값과 XOR되는 시스템.
  10. 제9항에 있어서, 상기 제1 값은 좌측으로 시프트되어야 하는 시스템.
  11. 제9항에 있어서, 상기 제1 값은 우측으로 시프트되어야 하는 시스템.
  12. 제9항에 있어서, 상기 제1 값은 논리적으로 시프트되는 시스템.
  13. 제9항에 있어서, 상기 제1 값은 산술적으로 시프트되는 시스템.
  14. 제9항에 있어서, 시프터 및 XOR 회로를 포함하는 시스템.
  15. 제9항에 있어서, 상기 시프트 및 XOR 명령어는 상기 제2 값을 저장하는 제1 필드를 포함하는 시스템.
  16. 제9항에 있어서, 상기 제1 값은 패킹된 데이터 유형인 시스템.
  17. 시프트 및 XOR 명령어를 수행하는 단계를 포함하고, 제1 값은 시프트 양만큼 시프트되고, 상기 시프트된 값은 제2 값과 XOR되는 방법.
  18. 제17항에 있어서, 상기 제1 값은 좌측으로 시프트되어야 하는 방법.
  19. 제17항에 있어서, 상기 제1 값은 우측으로 시프트되어야 하는 방법.
  20. 제17항에 있어서, 상기 제1 값은 논리적으로 시프트되는 방법.
  21. 제17항에 있어서, 상기 제1 값은 산술적으로 시프트되는 방법.
  22. 제17항에 있어서, 시프터 및 XOR 회로를 포함하는 방법.
  23. 제17항에 있어서, 상기 시프트 및 XOR 명령어는 상기 제2 값을 저장하는 제1 필드를 포함하는 방법.
  24. 제17항에 있어서, 상기 제1 값은 패킹된 데이터 유형인 방법.
  25. 기계에 의해 실행되는 경우, 상기 기계로 하여금 방법을 수행하게 하는 명령어를 저장하는 기계 판독가능 매체로서, 상기 방법은,
    제1 값을 시프트 양만큼 시프트하는 단계; 및
    상기 시프트된 값을 제2 값과 XOR하는 단계를 포함하는 기계 판독가능 매체.
  26. 제25항에 있어서, 상기 제1 값은 좌측으로 시프트되어야 하는 기계 판독가능 매체.
  27. 제25항에 있어서, 상기 제1 값은 우측으로 시프트되어야 하는 기계 판독가능 매체.
  28. 제25항에 있어서, 상기 제1 값은 논리적으로 시프트되는 기계 판독가능 매체.
  29. 제25항에 있어서, 상기 제1 값은 산술적으로 시프트되는 기계 판독가능 매체.
  30. 제25항에 있어서, 시프터 및 XOR 회로를 포함하는 기계 판독가능 매체.
  31. 제25항에 있어서, 상기 시프트 및 XOR 명령어는 상기 제2 값을 저장하는 제1 필드를 포함하는 기계 판독가능 매체.
  32. 제25항에 있어서, 상기 제1 값은 패킹된 데이터 유형인 기계 판독가능 매체.
  33. 제1 시프트된 값과 제2 비트 반사된 값(bit reflected value) 사이에서 XOR(exclusive OR, 배타적 OR) 연산을 수행하고 결과를 제1 레지스터에 저장하는 단계; 및
    상기 결과에 최소 수의 선행 제로(leading zero)가 있는지 검사하는 단계를 포함하는 방법.
  34. 제33항에 있어서, 상기 최소 수의 선행 제로가 상기 결과에 있는 경우, 상기 결과가 제1 청크에 대응한다는 것을 나타내는 방법.
  35. 제34항에 있어서, 상기 제1 시프트된 값은 한 비트 위치만큼 좌측으로 시프트되어야 하는 방법.
  36. 제34항에 있어서, 상기 제1 시프트된 값은 한 비트 위치만큼 우측으로 시프트되어야 하는 방법.
KR1020127012770A 2009-12-17 2010-10-29 단일 명령어에서 시프트 및 배타적 or 연산을 수행하는 방법 및 장치 KR101411064B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/653,704 2009-12-17
US12/653,704 US9747105B2 (en) 2009-12-17 2009-12-17 Method and apparatus for performing a shift and exclusive or operation in a single instruction
PCT/US2010/054754 WO2011084214A2 (en) 2009-12-17 2010-10-29 Method and apparatus for performing a shift and exclusive or operation in a single instruction

Publications (2)

Publication Number Publication Date
KR20120099236A true KR20120099236A (ko) 2012-09-07
KR101411064B1 KR101411064B1 (ko) 2014-06-27

Family

ID=44152595

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020127012770A KR101411064B1 (ko) 2009-12-17 2010-10-29 단일 명령어에서 시프트 및 배타적 or 연산을 수행하는 방법 및 장치

Country Status (8)

Country Link
US (5) US9747105B2 (ko)
JP (5) JP5567668B2 (ko)
KR (1) KR101411064B1 (ko)
CN (7) CN104598203B (ko)
DE (1) DE112010004887T5 (ko)
GB (2) GB2552117B (ko)
TW (5) TWI575456B (ko)
WO (1) WO2011084214A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210111866A (ko) * 2014-09-25 2021-09-13 인텔 코포레이션 비트 셔플 프로세서, 방법, 시스템, 및 명령어

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4930251B2 (ja) * 2007-07-31 2012-05-16 富士通セミコンダクター株式会社 誤り訂正装置及びデスクランブル回路
US8515052B2 (en) 2007-12-17 2013-08-20 Wai Wu Parallel signal processing system and method
US9747105B2 (en) 2009-12-17 2017-08-29 Intel Corporation Method and apparatus for performing a shift and exclusive or operation in a single instruction
CN105955704B (zh) * 2011-11-30 2018-12-04 英特尔公司 用于提供向量横向比较功能的指令和逻辑
US10318291B2 (en) 2011-11-30 2019-06-11 Intel Corporation Providing vector horizontal compare functionality within a vector register
WO2013095513A1 (en) * 2011-12-22 2013-06-27 Intel Corporation Packed data operation mask shift processors, methods, systems, and instructions
CN110471699B (zh) 2011-12-23 2023-07-28 英特尔公司 用于指令处理的处理器核、方法和系统
WO2013095607A1 (en) 2011-12-23 2013-06-27 Intel Corporation Instruction execution unit that broadcasts data values at different levels of granularity
EP2798804A4 (en) * 2011-12-26 2015-09-23 Intel Corp COMMUNICATION BETWEEN COPROCESSORS WITH DIRECT CONNECTION SYNCHRONIZATION
CN104025033B (zh) * 2011-12-30 2017-11-21 英特尔公司 利用控制操纵的simd可变移位和循环
US9128698B2 (en) * 2012-09-28 2015-09-08 Intel Corporation Systems, apparatuses, and methods for performing rotate and XOR in response to a single instruction
JP6219631B2 (ja) * 2013-07-29 2017-10-25 学校法人明星学苑 論理演算装置
US10001995B2 (en) * 2015-06-02 2018-06-19 Intel Corporation Packed data alignment plus compute instructions, processors, methods, and systems
US10423411B2 (en) 2015-09-26 2019-09-24 Intel Corporation Data element comparison processors, methods, systems, and instructions
US9916159B2 (en) * 2016-01-14 2018-03-13 International Business Machines Corporation Programmable linear feedback shift register
SG11201704732PA (en) * 2016-04-19 2017-11-29 Huawei Tech Co Ltd Vector processing for segmentation hash values calculation
US10606587B2 (en) * 2016-08-24 2020-03-31 Micron Technology, Inc. Apparatus and methods related to microcode instructions indicating instruction types
US20180121202A1 (en) * 2016-11-02 2018-05-03 Intel Corporation Simd channel utilization under divergent control flow
CN107145334B (zh) * 2017-04-26 2020-10-09 龙芯中科技术有限公司 常量获取方法、装置、处理器及计算机可读存储介质
EP3619810A4 (en) * 2017-07-31 2020-12-23 Hewlett-Packard Development Company, L.P. XOR PROCESSING OF VOXELS OF THREE-DIMENSIONAL MODELS
CN107612684B (zh) * 2017-10-20 2020-09-15 中博龙辉装备集团股份有限公司 基于国产化处理器平台专有指令集的数据对称加密方法
CN110058884B (zh) * 2019-03-15 2021-06-01 佛山市顺德区中山大学研究院 用于计算型存储指令集运算的优化方法、系统及存储介质
CN109976705B (zh) * 2019-03-20 2020-06-02 上海燧原智能科技有限公司 浮点格式数据处理装置、数据处理设备及数据处理方法
CN110221807B (zh) * 2019-06-06 2021-08-03 龙芯中科(合肥)技术有限公司 数据移位方法、装置、设备及计算机可读存储介质
US11269631B2 (en) 2020-07-29 2022-03-08 Ghost Locomotion Inc. Extending fused multiply-add instructions

Family Cites Families (62)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3781819A (en) * 1971-10-08 1973-12-25 Ibm Shift unit for variable data widths
JPS53147593A (en) 1977-05-27 1978-12-22 Hitachi Ltd Oxygen density measuring device
US4356549A (en) * 1980-04-02 1982-10-26 Control Data Corporation System page table apparatus
US4467444A (en) 1980-08-01 1984-08-21 Advanced Micro Devices, Inc. Processor unit for microcomputer systems
JPS6491228A (en) * 1987-09-30 1989-04-10 Takeshi Sakamura Data processor
US5504914A (en) * 1993-06-23 1996-04-02 National Science Council Multi-level instruction boosting method using plurality of ordinary registers forming plurality of conjugate register pairs that are shadow registers to each other with different only in MSB
US5559730A (en) * 1994-02-18 1996-09-24 Matsushita Electric Industrial Co., Ltd. Shift operation unit and shift operation method
JPH08137666A (ja) 1994-11-14 1996-05-31 Matsushita Electric Ind Co Ltd 演算装置およびその演算方法
ZA9510127B (en) 1994-12-01 1996-06-06 Intel Corp Novel processor having shift operations
CN102841776B (zh) 1994-12-02 2016-06-29 英特尔公司 可以对复合操作数进行压缩操作的微处理器
WO1997002546A1 (fr) * 1995-07-03 1997-01-23 Tsuneo Ikedo Circuit graphique pour ordinateur
EP0847551B1 (en) 1995-08-31 2012-12-05 Intel Corporation A set of instructions for operating on packed data
JPH09115298A (ja) * 1995-10-19 1997-05-02 Mitsubishi Electric Corp 半導体記憶装置
JPH1040078A (ja) 1996-07-24 1998-02-13 Hitachi Ltd 先行0、1数予測回路、浮動小数点演算装置、マイクロプロセッサおよび情報処理装置
TW325552B (en) 1996-09-23 1998-01-21 Advanced Risc Mach Ltd Data processing condition code flags
US6009451A (en) * 1996-11-22 1999-12-28 Lucent Technologies Inc. Method for generating barrel shifter result flags directly from input data
US5896406A (en) 1997-03-31 1999-04-20 Adaptec, Inc. Shift register-based XOR accumulator engine for generating parity in a data processing system
GB9707861D0 (en) 1997-04-18 1997-06-04 Certicom Corp Arithmetic processor
US5917914A (en) 1997-04-24 1999-06-29 Cirrus Logic, Inc. DVD data descrambler for host interface and MPEG interface
US6134597A (en) 1997-05-28 2000-10-17 International Business Machines Corporation CRC hash compressed server object identifier
US5909520A (en) 1997-08-25 1999-06-01 The United States Of America As Represented By The Secretary Of The Navy Noise coding processor
US6223320B1 (en) 1998-02-10 2001-04-24 International Business Machines Corporation Efficient CRC generation utilizing parallel table lookup operations
JP2001142694A (ja) * 1999-10-01 2001-05-25 Hitachi Ltd データフィールドのエンコード方法、情報フィールドの拡張方法、及び、コンピュータシステム
US6539467B1 (en) 1999-11-15 2003-03-25 Texas Instruments Incorporated Microprocessor with non-aligned memory access
US6889319B1 (en) 1999-12-09 2005-05-03 Intel Corporation Method and apparatus for entering and exiting multiple threads within a multithreaded processor
US7046802B2 (en) 2000-10-12 2006-05-16 Rogaway Phillip W Method and apparatus for facilitating efficient authenticated encryption
US6810398B2 (en) 2000-11-06 2004-10-26 Avamar Technologies, Inc. System and method for unorchestrated determination of data sequences using sticky byte factoring to determine breakpoints in digital sequences
CA2429080A1 (en) * 2000-11-15 2002-05-23 Advanced Communications Technologies (Australia) Pty Ltd. A method of updating a shift register
TWI261968B (en) 2001-09-13 2006-09-11 Macronix Int Co Ltd Shifting apparatus for bit-shifting manipulation in a digital processor device
DE10201441A1 (de) 2002-01-16 2003-08-14 Infineon Technologies Ag Schiebevorrichtung und Verfahren zum Verschieben
US7114116B2 (en) 2002-09-13 2006-09-26 Sun Microsystems, Inc. Accelerated Galois data integrity crosscheck system and method
JP4084801B2 (ja) * 2002-10-11 2008-04-30 富士通株式会社 Pn符号発生器、gold符号発生器、pn符号逆拡散器、pn符号発生方法、gold符号発生方法、pn符号逆拡散方法、及びコンピュータプログラム
JP4057876B2 (ja) 2002-10-11 2008-03-05 フリースケール セミコンダクター インコーポレイテッド ガロア体掛け算器の制御方法
US7395294B1 (en) * 2003-01-10 2008-07-01 Altera Corporation Arithmetic logic unit
JP4228728B2 (ja) 2003-03-06 2009-02-25 日立工機株式会社 遠心分離機及び遠心分離機用スイングロ−タ
US7539714B2 (en) 2003-06-30 2009-05-26 Intel Corporation Method, apparatus, and instruction for performing a sign operation that multiplies
KR100960095B1 (ko) 2003-10-23 2010-05-31 마이크로칩 테크놀로지 인코포레이티드 마이크로컨트롤러 명령어 셋트
GB2411975B (en) 2003-12-09 2006-10-04 Advanced Risc Mach Ltd Data processing apparatus and method for performing arithmetic operations in SIMD data processing
JP3845636B2 (ja) * 2004-01-21 2006-11-15 株式会社東芝 関数近似値の演算器
JP4418713B2 (ja) 2004-06-11 2010-02-24 キヤノン株式会社 乱数発生方法及び乱数発生装置
US7653674B2 (en) * 2004-10-07 2010-01-26 Infoprint Solutions Company Llc Parallel operations on multiple signed elements in a register
US8209366B2 (en) * 2005-02-28 2012-06-26 Hitachi Global Storage Technologies Netherlands B.V. Method, apparatus and program storage device that provides a shift process with saturation for digital signal processor operations
US8195922B2 (en) 2005-03-18 2012-06-05 Marvell World Trade, Ltd. System for dynamically allocating processing time to multiple threads
US7590930B2 (en) 2005-05-24 2009-09-15 Intel Corporation Instructions for performing modulo-2 multiplication and bit reflection
US8253751B2 (en) 2005-06-30 2012-08-28 Intel Corporation Memory controller interface for micro-tiled memory access
JP2007174312A (ja) * 2005-12-22 2007-07-05 Sanyo Electric Co Ltd 符号化回路およびデジタル信号処理回路
CN100495322C (zh) 2006-05-18 2009-06-03 中国科学院计算技术研究所 对预处理微指令发生异常多层嵌套进行处理的设备及方法
US7941435B2 (en) 2006-08-01 2011-05-10 Cisco Technology, Inc. Substring search algorithm optimized for hardware acceleration
US20080071851A1 (en) 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
US9069547B2 (en) 2006-09-22 2015-06-30 Intel Corporation Instruction and logic for processing text strings
US20080077772A1 (en) 2006-09-22 2008-03-27 Ronen Zohar Method and apparatus for performing select operations
US7886255B2 (en) 2007-01-22 2011-02-08 Texas Instruments Incorporated Method for design of programmable data processors
DK176721B1 (da) 2007-03-06 2009-04-27 I/S Boewind V/Chr. I S Boewind V Chr Fremgangsmode til akkumulering og udnyttelse af vedvarende energi
US8762345B2 (en) 2007-05-31 2014-06-24 Netapp, Inc. System and method for accelerating anchor point detection
US20090083507A1 (en) 2007-09-24 2009-03-26 Moore Charles H Shift-add mechanism
US7729185B2 (en) * 2007-11-01 2010-06-01 Arm Limited Apparatus and method for detection of address decoder open faults
IL188089A (en) * 2007-12-12 2013-02-28 Nds Ltd Bit generator
US7689816B2 (en) 2008-01-31 2010-03-30 International Business Machines Corporation Branch prediction with partially folded global history vector for reduced XOR operation time
CN102084335B (zh) 2008-05-12 2015-01-07 高通股份有限公司 任意伽罗瓦域算术在可编程处理器上的实施
US8340280B2 (en) * 2008-06-13 2012-12-25 Intel Corporation Using a single instruction multiple data (SIMD) instruction to speed up galois counter mode (GCM) computations
EP2382101A1 (en) 2009-01-28 2011-11-02 NV Bekaert SA Crimped flat wire as core of oval cord
US9747105B2 (en) 2009-12-17 2017-08-29 Intel Corporation Method and apparatus for performing a shift and exclusive or operation in a single instruction

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210111866A (ko) * 2014-09-25 2021-09-13 인텔 코포레이션 비트 셔플 프로세서, 방법, 시스템, 및 명령어

Also Published As

Publication number Publication date
US9495166B2 (en) 2016-11-15
JP6615819B2 (ja) 2019-12-04
CN104699456B (zh) 2019-02-15
TWI531969B (zh) 2016-05-01
JP5567668B2 (ja) 2014-08-06
GB2552117A (en) 2018-01-10
CN104598204A (zh) 2015-05-06
DE112010004887T5 (de) 2012-09-20
JP5941498B2 (ja) 2016-06-29
CN102103487A (zh) 2011-06-22
US20170351519A1 (en) 2017-12-07
TW201123008A (en) 2011-07-01
CN104598204B (zh) 2018-01-02
TWI575455B (zh) 2017-03-21
WO2011084214A3 (en) 2011-09-01
US20110153700A1 (en) 2011-06-23
CN102103487B (zh) 2017-08-01
GB201119720D0 (en) 2011-12-28
JP5941493B2 (ja) 2016-06-29
TWI562067B (en) 2016-12-11
TW201730760A (zh) 2017-09-01
JP6126162B2 (ja) 2017-05-10
JP2017152016A (ja) 2017-08-31
TW201533660A (zh) 2015-09-01
TWI575456B (zh) 2017-03-21
CN104598203B (zh) 2019-02-15
CN104699457B (zh) 2019-02-15
GB201715480D0 (en) 2017-11-08
JP2012530978A (ja) 2012-12-06
JP2014194825A (ja) 2014-10-09
TW201533661A (zh) 2015-09-01
CN104699459B (zh) 2018-01-09
CN104679478B (zh) 2019-03-15
CN104598203A (zh) 2015-05-06
JP2015164061A (ja) 2015-09-10
CN104699459A (zh) 2015-06-10
GB2552117B (en) 2018-07-18
KR101411064B1 (ko) 2014-06-27
JP2014160500A (ja) 2014-09-04
US9747105B2 (en) 2017-08-29
WO2011084214A2 (en) 2011-07-14
CN104699456A (zh) 2015-06-10
TWI610235B (zh) 2018-01-01
GB2483575A (en) 2012-03-14
US9501281B2 (en) 2016-11-22
GB2483575B (en) 2017-11-01
US20150089197A1 (en) 2015-03-26
US9495165B2 (en) 2016-11-15
CN104679478A (zh) 2015-06-03
US20150089195A1 (en) 2015-03-26
US10684855B2 (en) 2020-06-16
TW201533662A (zh) 2015-09-01
CN104699457A (zh) 2015-06-10
US20150089196A1 (en) 2015-03-26

Similar Documents

Publication Publication Date Title
US10684855B2 (en) Method and apparatus for performing a shift and exclusive or operation in a single instruction
CN107094369B (zh) 用于提供simd sm3密码散列函数的指令和逻辑
CN107741842B (zh) 用于执行点积运算的指令和逻辑
KR101300362B1 (ko) 텍스트 문자열을 처리하기 위한 명령 및 논리
KR20170102865A (ko) 벡터 패킹된 투플 교차 비교 기능을 제공하기 위한 방법, 장치, 명령어들 및 로직
KR102307105B1 (ko) Simd sm3 암호화 해싱 기능을 제공하기 위한 명령어 및 로직

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

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20180529

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20190530

Year of fee payment: 6