KR101748535B1 - Methods, apparatus, instructions and logic to provide vector population count functionality - Google Patents

Methods, apparatus, instructions and logic to provide vector population count functionality Download PDF

Info

Publication number
KR101748535B1
KR101748535B1 KR1020167000144A KR20167000144A KR101748535B1 KR 101748535 B1 KR101748535 B1 KR 101748535B1 KR 1020167000144 A KR1020167000144 A KR 1020167000144A KR 20167000144 A KR20167000144 A KR 20167000144A KR 101748535 B1 KR101748535 B1 KR 101748535B1
Authority
KR
South Korea
Prior art keywords
portion
vector
processor
register
bit
Prior art date
Application number
KR1020167000144A
Other languages
Korean (ko)
Other versions
KR20160018664A (en
Inventor
엘모우스타파 울드-아흐메드-발
Original Assignee
인텔 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority to US13/960,769 priority Critical
Priority to US13/960,769 priority patent/US9513907B2/en
Application filed by 인텔 코포레이션 filed Critical 인텔 코포레이션
Priority to PCT/US2014/049937 priority patent/WO2015021151A1/en
Publication of KR20160018664A publication Critical patent/KR20160018664A/en
Application granted granted Critical
Publication of KR101748535B1 publication Critical patent/KR101748535B1/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING; 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 operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING; 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/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING; 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; 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/30112Register structure for variable length data, e.g. single or double registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING; 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, e.g. SIMD

Abstract

명령어들 및 로직은 SIMD 벡터 개체군 카운트 기능성을 제공한다. The command logic and provides a SIMD vector population count functionality. 일부 실시예들은 벡터 레지스터 또는 메모리 벡터의 n개의 데이터 필드의 부분의 각각의 데이터 필드에 복수의 비트의 데이터를 저장한다. Some embodiments may store the data of the plurality of bits in each data field of the portion of the n data fields of a vector register or a memory vector. 프로세서에서, 벡터 개체군 카운트를 위한 SIMD 명령어가 실행되어, 벡터 레지스터 또는 메모리 벡터에서의 n개의 데이터 필드의 그 부분에 대하여, 하나 이상의 제1 미리 결정된 2진 값 각각과 동등한 2진 값들의 출현들이 카운트되고, 하나 이상의 제1 미리 결정된 2진 값에 대응하는 하나 이상의 제1 카운트로서, 카운트된 출현들은 벡터 레지스터 또는 메모리 벡터에서의 n개의 데이터 필드의 부분에 대응하는 목적지 레지스터의 부분에 저장된다. In a processor, is a SIMD instruction for vector population count executed, a vector register or for that portion of the n data fields in a memory vector, at least a first predetermined binary value, respectively, and equivalent 2 appearance of binary values ​​to count and, as at least a first count corresponding to the one or more first predetermined binary value, the occurrence count are stored in a portion of a destination register corresponding to the portion of the n fields of data in the vector register or a memory vector.

Description

벡터 개체군 카운트 기능성을 제공하는 방법, 장치, 명령어 및 로직{METHODS, APPARATUS, INSTRUCTIONS AND LOGIC TO PROVIDE VECTOR POPULATION COUNT FUNCTIONALITY} A method of providing a vector population count functionality, devices, and logic instructions {METHODS, APPARATUS, INSTRUCTIONS AND LOGIC TO PROVIDE VECTOR POPULATION COUNT FUNCTIONALITY}

관련 출원들에 대한 상호 참조 Cross-references to related applications

본 출원은 2013년 8월 6일자로 출원된 미국 출원 제13/960,769호(대리인 정리 번호 P59592)의 이익을 주장한다. This application claims the benefit of Application dated August 6, 2013, US Application No. 13 / 960,769 No. (attorney reference number P59592). 이러한 출원 13/960,769호는 본 명세서에 완전히 포함되어 있다. The application 13/960 769 discloses a fully incorporated herein by reference.

기술분야 Art

본 개시물은 처리 로직, 마이크로프로세서, 및 프로세서 또는 다른 처리 로직에 의해 실행될 때에 논리, 수학 또는 다른 함수 연산들(functional operations)을 수행하는 연관된 명령어 세트 아키텍처의 분야에 관한 것이다. This disclosure relates to the field of processing logic, a microprocessor, and a processor or other processing logic, when executed by logic, or other mathematical function operation associated set of instructions for performing (functional operations) architecture. 구체적으로, 본 개시물은, 개체군 카운트 기능성(population count functionality)을 제공하는 명령어 및 로직에 관한 것이다. More specifically, the disclosure relates to instructions and logic to provide a population count functionality (population count functionality).

인간 게놈은 상당량의 정보를 나타내며, 이러한 다량의 정보를 저장하는 것은 일반적으로 4가지 염기 뉴클레오티드(base nucleotide)인 티민(thymine), 시토신(cytosine), 아데닌(adenine) 및 구아닌(guanine)(T, C, A, G)을 비트 쌍들로서 표현하는 것을 수반한다. The human genome has a thymine (thymine), cytosine (cytosine), adenine (adenine) and guanine (guanine) indicates a significant amount of information, storing this large amount of information generally in four base nucleotide (base nucleotide) (T, a C, a, G) involves represented as a bit pair. 인간 게놈에는 약 3십억개의 염기 쌍들이 존재하고, 염기당 2 비트로(4가지 선택안), 인간 게놈은 약 6십억 비트 또는 약 750MB의 정보를 갖는다(각각의 염색체의 하나의 카피를 저장함). The human genome has there are about 3 billion base pairs, base by 2 bits (not the four selections) per human genome is less than or equal to approximately 6 billion bits or about 750MB (storing a single copy of each chromosome). 통상적으로, 염기 쌍의 각각의 염기 뉴클레오티드를 2 비트로 표현하는 것이 더 일반적인 관행일 수 있으며, 이는 약 1.4GB의 정보를 요구한다. Typically, the number of days it is more common practice to represent two bits each nucleotide base of a base pair and which requests information about 1.4GB. 시퀀스들을 저장하기 위한 한가지 포맷은 "packedDna"로서 알려져 있다. One kinds of formats for storing a sequence is known as a "packedDna". 염기당 2 비트로 패킹되는 DNA 또는 디옥시리보핵산(deoxyribonucleic acid)은 2진의 2-비트 값들로서 표현된다: T = 00, C = 01, A = 10, G = 11. 제1 염기는 바이트의 최상위 2 비트에 있으며; DNA or deoxyribonucleic acid (deoxyribonucleic acid) is packed by 32 bits per base, it is represented as a 2-bit binaries values: T = 00, C = 01, A = 10, G = 11. The first base is the most significant two bits of the byte in which; 마지막 염기는 최하위 2 비트에 있다. Last base is in the least significant two bits. 예를 들어, 시퀀스 TCAG는 2진법으로 00011011(16진 0x1B)로서 표현된다. For example, the sequence is expressed as TCAG 00,011,011 (hex 0x1B) to binary. 일부 다른 데이터베이스들, 데이터 마이닝 애플리케이션들 및 검색 애플리케이션들에서 또한 유사한 압축 스킴들이 이용된다. Some other databases, are also similar compression scheme in the data mining applications and search applications are used.

게놈 정렬에 있어서의 일반적인 연산은, 염기-쌍 스트링들을 매칭하거나 부분적으로 매칭하기 위해서 스트링 내의 뉴클레오티드들의 출현들을 카운트하는 것이다. Typical operation of the genome alignment, a base-to count the occurrence of nucleotide in the string to the matching or partial matching of a pair of strings. (packedDna와 같은) 패킹된 데이터 포맷에 있어서, 기술들은, 스트링 내의 상이한 뉴클레오티드 출현들을 카운트하기 위해서 논리 연산들과 함께 비트단위 개체군 카운트들, 그리고/또는 시프트 및 마스크 연산들과 함께 룩업 테이블들의 이용을 수반할 수 있다. In a packed data format (such as packedDna), techniques, counting different nucleotide occurrence in the string, the use of look-up tables with s-bit units population count with logical operations, and / or a shift and mask operations to It may entail.

현대의 프로세서들은 종종 계산 집약적인 연산들을 제공하는 명령어들을 포함하지만, 예를 들어 SIMD(single-instruction multiple-data) 벡터 레지스터들과 같은 다양한 데이터 스토리지 디바이스들을 이용한 효율적인 구현을 통해 활용될 수 있는 하이 레벨의 데이터 병렬성(data parallelism)을 제공한다. Modern processors often include instructions for providing computationally intensive operation, but, for example, a high level that can be utilized through an efficient implementation using various data storage devices, such as SIMD (single-instruction multiple-data) vector register It provides the parallelism of the data (data parallelism). SIMD 실행 시에, 단일의 명령어는 다수의 데이터 요소에 대해 동시에(concurrently) 또는 동시적으로(simultaneously) 연산한다. When the SIMD execution, a single command is used at the same time (concurrently) or concurrently (simultaneously) operation on multiple data elements. 통상적으로, 이것은 레지스터들 및 산술 로직 유닛들(arithmetic logic units)(ALU들)과 같은 다양한 자원들의 폭을 확장함으로써 구현되어, 이들이 각각 다수의 데이터 요소에 대해 연산하거나 다수의 데이터 요소를 유지하는 것을 허용한다. Typically, this is to be implemented by extending the width of the various resources such as registers and arithmetic logic units (arithmetic logic units) (ALU s), it maintains the operation, or multiple data points for a plurality of data elements each permits.

중앙 처리 유닛(CPU)은 벡터들의 SIMD 처리를 지원하기 위해 이러한 병렬 하드웨어를 제공할 수 있다. The central processing unit (CPU) may provide such parallel hardware to support SIMD processing of vector. 벡터는 다수의 연속적인 데이터 요소를 유지하는 데이터 구조이다. Vector is a data structure for holding the plurality of successive data elements. 크기 L의 벡터 레지스터는 크기 M의 N개의 벡터 요소를 포함할 수 있는데, 여기서 N = L/M이다. A vector register of size L may include the N element vector of size M, is where L = N / M. 예를 들어, 64-바이트 벡터 레지스터는 (a) 64개의 벡터 요소로 파티셔닝되고 - 각각의 요소는 1 바이트를 점유하는 데이터 항목을 유지함 -, (b) 2 바이트(또는 하나의 "워드")를 각각 점유하는 데이터 항목들을 유지하는 32개의 벡터 요소로 파티셔닝되고, (c) 4 바이트(또는 하나의 "더블워드")를 각각 점유하는 데이터 항목들을 유지하는 16개의 벡터 요소로 파티셔닝되고, 또는 (d) 8 바이트(또는 하나의 "쿼드워드")를 각각 점유하는 데이터 항목들을 유지하는 8개의 벡터 요소로 파티셔닝될 수 있다. For example, a 64 byte vector register (a), 64 of vector elements is partitioned into, wherein each element is maintaining a data item occupying one byte -, (b) a two-byte (or one of the "word") is partitioned into 32 the vector element for holding data items, each occupied, (c) 4-byte (or one of the "double word") to be partitioned into 16 the vector element for holding data items to occupy, respectively, or (d ) it may be partitioned 8 bytes (or a "quadword") with eight vector element for holding data items occupying respectively. 한편, 일부 애플리케이션들은 패킹된 서브-바이트(sub-byte) 데이터 요소들을 저장하고 이들에 대해 연산할 수 있는데, 여기서 크기가 k 비트인 레지스터의 부분 또는 레지스터는 크기 m의 n개의 벡터 요소를 포함할 수 있으며, n = k/m이다. On the other hand, some applications the packed sub-store bytes (sub-byte) data points, and may be calculated for these, parts or register in the register, the size of k bits herein comprise n number of vector elements of size m number, and the n = k / m. 예를 들어, 64-비트 레지스터 또는 레지스터의 부분은 (e) 64개의 패킹된 요소로 파티셔닝되고 - 각각의 요소는 1 비트를 점유하는 데이터 항목을 유지함 -, (f) 2 비트를 각각 점유하는 데이터 항목들을 유지하는 32개의 패킹된 요소로 파티셔닝되고, 또는 (g) 4 비트(또는 하나의 "니블")를 각각 점유하는 데이터 항목들을 유지하는 16개의 패킹된 요소로 파티셔닝될 수 있다. For example, part of the 64-bit register or a register is partitioned into (e) 64 of the packing element, each element is maintaining a data item occupying one bit -, (f) data to account for 2 bits each It is partitioned into 32 a packing element for holding the item, or (g) may be partitioned into 16 of a packing element for holding data items occupying the 4-bit (or a "nibble"), respectively. 32-비트 레지스터 또는 레지스터의 부분은 (h) 32개의 패킹된 요소로 파티셔닝되고 - 각각의 요소는 1 비트를 점유하는 데이터 항목을 유지함 -, (i) 2 비트를 각각 점유하는 데이터 항목들을 유지하는 16개의 패킹된 요소로 파티셔닝되고, 또는 (j) 4 비트를 각각 점유하는 데이터 항목들을 유지하는 8개의 패킹된 요소로 파티셔닝될 수 있다. Portion of the 32-bit register or registers (h) of 32 is partitioned into the packing element, each element is maintaining a data item occupying one bit -, (i) for holding data items that occupy 2 bits, respectively is partitioned into 16 of packing elements, or (j) may be partitioned into eight packing element for holding data items occupying the 4-bit, respectively.

다수의 애플리케이션은 다량의 데이터-레벨 병렬성을 가지며, SIMD 지원으로부터 이익을 얻는 것이 가능할 수 있다. Many applications are large amounts of data-level parallelism has, it may be possible to benefit from SIMD support. 그러나, 일부 애플리케이션들은 SIMD 병렬성을 이용하기 위해 데이터를 재포맷팅하는 것과 같은 연산들에서 상당량의 시간을 소비한다. However, some applications may consume a significant amount of time in operations such as re-formatting the data to take advantage of the SIMD parallelism. (예를 들어, 게놈 시퀀싱 및 정렬, 데이터베이스, 데이터 마이닝, 및 검색 애플리케이션들과 같은) 일부 애플리케이션들은 8-비트보다 작은 데이터 요소들을 가질 수 있다. (E. G., Such as genome sequencing and alignment, databases, data mining and search applications), some applications may have a small data elements than the eight-bit. SIMD 효율을 유지하기 위해서, 이러한 서브-바이트 요소들은 병렬로 처리되기 이전에 1 바이트를 각각 점유하도록 압축해제될 필요가 있을 수 있다. In order to maintain the SIMD efficiency, such a sub-byte elements may need to be decompressed so as to occupy a single byte, respectively prior to being processed in parallel. 결과적으로, 이러한 애플리케이션들은 SIMD 연산들로부터 다소 제한된 성능 이익들을 얻을 수 있다. As a result, these applications are able to get a somewhat limited performance benefits from SIMD operations.

지금까지, 이러한 성능 우려 및 관련된 처리의 어려움에 대한 잠재적인 해결책들이 충분히 탐구되지 않았다. So far, the potential solutions to these performance concerns and challenges related to the process was not fully explored.

본 발명은 첨부 도면들에서 제한이 아니라 예로서 예시되어 있다. The invention is illustrated by way of example and not limitation in the accompanying drawings.
도 1a는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어들을 실행하는 시스템의 일 실시예의 블록도이다. Figure 1a is a block diagram of one embodiment of a system for executing instructions to provide a SIMD vector population count functionality.
도 1b는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어들을 실행하는 시스템의 다른 실시예의 블록도이다. Figure 1b is a block diagram of another embodiment of the system that executes instructions to provide a SIMD vector population count functionality.
도 1c는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어들을 실행하는 시스템의 다른 실시예의 블록도이다. Figure 1c is a block diagram of another embodiment of the system that executes instructions to provide a SIMD vector population count functionality.
도 2는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어들을 실행하는 프로세서의 일 실시예의 블록도이다. 2 is a block diagram of one embodiment of a processor that executes instructions to provide a SIMD vector population count functionality.
도 3a는 일 실시예에 따른 패킹된 데이터 타입들을 도시한다. Figure 3a illustrates packed data types according to one embodiment.
도 3b는 일 실시예에 따른 패킹된 데이터 타입들을 도시한다. Figure 3b illustrates packed data types according to one embodiment.
도 3c는 일 실시예에 따른 패킹된 데이터 타입들을 도시한다. Figure 3c illustrates packed data types according to one embodiment.
도 3d는 일 실시예에 따른 SIMD 벡터 개체군 카운트 기능성을 제공하기 위한 명령어 인코딩을 도시한다. Figure 3d illustrates an instruction encoding to provide a SIMD vector population count functionality according to one embodiment.
도 3e는 다른 실시예에 따른 SIMD 벡터 개체군 카운트 기능성을 제공하기 위한 명령어 인코딩을 도시한다. Figure 3e illustrates an instruction encoding to provide a SIMD vector population count functionality according to another embodiment.
도 3f는 다른 실시예에 따른 SIMD 벡터 개체군 카운트 기능성을 제공하기 위한 명령어 인코딩을 도시한다. Figure 3f illustrates the instruction encoding to provide a SIMD vector population count functionality according to another embodiment.
도 3g는 다른 실시예에 따른 SIMD 벡터 개체군 카운트 기능성을 제공하기 위한 명령어 인코딩을 도시한다. Figure 3g illustrates an instruction encoding to provide a SIMD vector population count functionality according to another embodiment.
도 3h는 다른 실시예에 따른 SIMD 벡터 개체군 카운트 기능성을 제공하기 위한 명령어 인코딩을 도시한다. Figure 3h illustrates the instruction encoding to provide a SIMD vector population count functionality according to another embodiment.
도 4a는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어들을 실행하기 위한 프로세서 마이크로아키텍처의 일 실시예의 요소들을 도시한다. Figure 4a illustrates one embodiment of components of a micro-processor architecture for executing the instruction to provide a SIMD vector population count functionality.
도 4b는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어들을 실행하기 위한 프로세서 마이크로아키텍처의 다른 실시예의 요소들을 도시한다. Figure 4b illustrates another embodiment of elements of a micro-processor architecture for executing the instruction to provide a SIMD vector population count functionality.
도 5는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어들을 실행하기 위한 프로세서의 일 실시예의 블록도이다. Figure 5 is a block diagram of one embodiment of a processor to execute instructions to provide a SIMD vector population count functionality.
도 6은 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어들을 실행하기 위한 컴퓨터 시스템의 일 실시예의 블록도이다. Figure 6 is a block diagram of one embodiment of a computer system to execute instructions to provide a SIMD vector population count functionality.
도 7은 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어들을 실행하기 위한 컴퓨터 시스템의 다른 실시예의 블록도이다. 7 is a block diagram of another embodiment of a computer system to execute instructions to provide a SIMD vector population count functionality.
도 8은 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어들을 실행하기 위한 컴퓨터 시스템의 다른 실시예의 블록도이다. Figure 8 is a block diagram of another embodiment of a computer system to execute instructions to provide a SIMD vector population count functionality.
도 9는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어들을 실행하기 위한 시스템 온 칩의 일 실시예의 블록도이다. Figure 9 is a block diagram of one embodiment of a system-on-a-chip to execute instructions to provide a SIMD vector population count functionality.
도 10은 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어들을 실행하기 위한 프로세서의 실시예의 블록도이다. 10 is a block diagram of an embodiment of a processor to execute instructions to provide a SIMD vector population count functionality FIG.
도 11은 SIMD 벡터 개체군 카운트 기능성을 제공하는 IP 코어 개발 시스템의 일 실시예의 블록도이다. 11 is a block diagram of one embodiment of the IP core development system that provides a SIMD vector population count functionality.
도 12는 SIMD 벡터 개체군 카운트 기능성을 제공하는 아키텍처 에뮬레이션 시스템의 일 실시예를 도시한다. Figure 12 illustrates one embodiment of an architecture emulation system for providing a SIMD vector population count functionality.
도 13은 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어들을 번역하기 위한 시스템의 일 실시예를 도시한다. Figure 13 illustrates one embodiment of a system for translating the instructions that provide the functionality SIMD vector population count.
도 14는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 이용할 수 있는 게놈 시퀀싱 및 정렬 처리의 예의 일 실시예에 대한 도면을 도시한다. Figure 14 shows a diagram for illustrating one embodiment of an instruction to provide a SIMD vector population count functional genome sequencing and alignment process that can be used.
도 15a는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어의 이용에 대한 준비 중의 벡터 서브-바이트 압축해제의 예의 일 실시예에 대한 흐름도를 도시한다. It shows a flow diagram for illustrating one embodiment of byte decompression - Figure 15a is a vector in the preparation of the use of the instruction to provide a SIMD vector population count functional sub.
도 15b는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어의 이용에 대한 준비 중의 벡터 서브-바이트 압축해제의 예의 대안적인 실시예에 대한 흐름도를 도시한다. Shows a flow diagram of the alternative example embodiment of bytes of uncompressed - Figure 15b is a vector in the preparation of the use of the instruction to provide a SIMD vector population count functional sub.
도 16a는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 위한 장치의 실시예를 도시한다. Figure 16a illustrates an embodiment of a device for executing the instructions to provide a SIMD vector population count functionality.
도 16b는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 위한 장치의 대안적인 실시예를 도시한다. Figure 16b shows an alternative embodiment of an apparatus for executing the instructions to provide a SIMD vector population count functionality.
도 16c는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 위한 장치의 다른 대안적인 실시예를 도시한다. Figure 16c shows a further alternative embodiment of a device for executing the instructions to provide a SIMD vector population count functionality.
도 16d는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 위한 장치의 다른 대안적인 실시예를 도시한다. Figure 16d shows a further alternative embodiment of a device for executing the instructions to provide a SIMD vector population count functionality.
도 16e는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 위한 장치의 다른 대안적인 실시예를 도시한다. Figure 16e shows a further alternative embodiment of a device for executing the instructions to provide a SIMD vector population count functionality.
도 17a는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 위한 예시적인 프로세스의 일 실시예에 대한 흐름도를 도시한다. Figure 17a shows a flow diagram of one embodiment of an exemplary process for executing a command provided by the SIMD vector population count functionality.
도 17b는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 위한 예시적인 프로세스의 대안적인 실시예에 대한 흐름도를 도시한다. Figure 17b shows a flow diagram of an alternative embodiment of an exemplary process for executing a command provided by the SIMD vector population count functionality.
도 17c는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 위한 예시적인 프로세스의 다른 대안적인 실시예에 대한 흐름도를 도시한다. Figure 17c illustrates a flow diagram for another alternative embodiment of an exemplary process for executing a command provided by the SIMD vector population count functionality.
도 17d는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 위한 예시적인 프로세스의 다른 대안적인 실시예에 대한 흐름도를 도시한다. Figure 17d shows a flow diagram for another alternative embodiment of an exemplary process for executing a command provided by the SIMD vector population count functionality.
도 18a는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 위한 예시적인 프로세스의 일 실시예에 대한 흐름도를 도시한다. Figure 18a shows a flow diagram of one embodiment of an exemplary process for executing a command provided by the SIMD vector population count functionality.
도 18b는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 위한 예시적인 프로세스의 대안적인 실시예에 대한 흐름도를 도시한다. Figure 18b shows a flow diagram of an alternative embodiment of an exemplary process for executing a command provided by the SIMD vector population count functionality.
도 18c는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 위한 예시적인 프로세스의 다른 대안적인 실시예에 대한 흐름도를 도시한다. Figure 18c illustrates a flow diagram for another alternative embodiment of an exemplary process for executing a command provided by the SIMD vector population count functionality.
도 18d는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 위한 예시적인 프로세스의 다른 대안적인 실시예에 대한 흐름도를 도시한다. Figure 18d shows a flow diagram for another alternative embodiment of an exemplary process for executing a command provided by the SIMD vector population count functionality.

다음의 설명은, 프로세서, 컴퓨터 시스템 또는 다른 처리 장치 내에서 또는 이들과 연관하여 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어 및 처리 로직을 개시하고 있다. The following description, Processors, discloses a computer system or an instruction, and processing logic to provide a SIMD vector population count functionality in connection with other processing units in the thereof. 일부 실시예들은 복수의 패킹된 데이터 필드를 포함하는 소스 벡터 부분을 저장하기 위한 레지스터 또는 다른 스토리지 매체를 갖는 프로세서들을 포함하는데, 여기서 소스 벡터의 부분에서의 복수의 패킹된 데이터 필드 각각은 적어도 4 비트의 데이터를 저장하고, 소스 벡터 부분에 대응하는 목적지 레지스터 부분은, 대응하는 하나 이상의 미리 결정된 2진 값의, 소스 벡터의 대응하는 부분에서의 출현들의 하나 이상의 카운트를 저장한다. Some embodiments plural includes the packed data field processor having a register or other storage media for storing the source vector part containing, in which the packed plurality of at a portion of the source vector data field, each of at least four bits storing the data, a destination register parts corresponding to the vector portion of the source is, and stores the one or more counts of occurrence in the corresponding portion of the at least one predetermined binary value corresponding to the source vector. 프로세서 디코드 스테이지는 패킹된 데이터 필드 크기 및 벡터 개체군 카운트 연산을 특정하는 명령어를 디코딩한다. Processor decode stage decodes a specific data field, the size and the packed vector population count operation instructions. 하나 이상의 프로세서 실행 유닛은, 디코딩된 명령어에 응답하여, 소스 벡터의 부분에서의 패킹된 데이터 필드들 각각의 비트들을 판독한다. One or more processors, execution unit, in response to the decoded instructions, and reading each bit of the packed data field in the portion of the source vector. 소스 벡터의 그 부분에서의 복수의 데이터 필드에 대하여, 하나 이상의 미리 결정된 2진 값 각각과 동등한 2진 값들의 출현들의 카운트가 생성되고, 대응하는 하나 이상의 미리 결정된 2진 값 각각에 대한 하나 이상의 카운트로서, 카운트된 출현들은 소스 벡터 부분에 대응하는 목적지 레지스터의 부분에 저장된다. For a plurality of data fields in the portions of the source vector, the one or more previously the determined binary occurrence count of of the binary value equivalent to the value of each is generated, and one or more of the count for a corresponding one or more predetermined binary value to each as, the occurrence count are stored in a portion of the destination register corresponding to the vector portion of the source.

일부 실시예들은 벡터 레지스터 또는 메모리 벡터의 n개의 데이터 필드의 부분의 각각의 데이터 필드에 적어도 4 비트의 데이터를 저장한다. Some embodiments may store at least a 4-bit data in each data field of the portion of the n data fields of a vector register or a memory vector. 프로세서에서, 벡터 개체군 카운트를 위한 SIMD 명령어가 실행되어, 벡터 레지스터 또는 메모리 벡터에서의 n개의 데이터 필드의 그 부분에 대하여, 하나 이상의 제1 미리 결정된 2진 값 각각과 동등한 2진 값들의 출현들이 카운트되고, 하나 이상의 제1 미리 결정된 2진 값에 대응하는 하나 이상의 제1 카운트로서, 카운트된 출현들은 벡터 레지스터 또는 메모리 벡터에서의 n개의 데이터 필드의 부분에 대응하는 목적지 레지스터의 부분에 저장된다. In a processor, is a SIMD instruction for vector population count executed, a vector register or for that portion of the n data fields in a memory vector, at least a first predetermined binary value, respectively, and equivalent 2 appearance of binary values ​​to count and, as at least a first count corresponding to the one or more first predetermined binary value, the occurrence count are stored in a portion of a destination register corresponding to the portion of the n fields of data in the vector register or a memory vector.

SIMD 개체군 카운트 명령어들은 게놈 시퀀싱 및 정렬 처리를 위해 이용될 수 있다는 것이 인식될 것이다. SIMD population count instruction will be appreciated that the same may be used for genome sequencing and sorting process. 보다 일반적으로 다른 데이터베이스들, 데이터 마이닝 애플리케이션들 및 검색 애플리케이션들에서 또한 유사한 압축 스킴들이 이용되어, 이러한 애플리케이션들도 또한 SIMD 개체군 카운트 명령어들을 이용할 수 있게 된다. More generally, is also similar to the compression scheme used in the other databases, data mining applications and search application, also these applications, it is possible to also utilize the SIMD population count instruction.

게놈 정렬에 있어서의 일반적인 연산은, 염기-쌍 스트링들을 매칭하거나 부분적으로 매칭하기 위해서 스트링 내의 뉴클레오티드들의 출현들을 카운트하는 것이다. Typical operation of the genome alignment, a base-to count the occurrence of nucleotide in the string to the matching or partial matching of a pair of strings. (packedDna와 같은) 패킹된 데이터 포맷에 있어서, 스트링 내의 상이한 뉴클레오티드 출현들을 카운트하기 위해서 논리 연산들과 함께 비트단위 개체군 카운트들, 그리고/또는 시프트 및 마스크 연산들과 함께 룩업 테이블들의 이용을 수반할 수 있는 기술들은 대신에 SIMD 개체군 카운트 명령어들을 이용할 수 있다. In a packed data format (such as packedDna), the bit-populations with the logical operation count to count different nucleotide occurrence in the string, and may involve the use of look-up table with / or shift and mask operations that the techniques may utilize SIMD population count instructions instead. SIMD 개체군 카운트 명령어들을 이용함으로써, 스트링 내의 상이한 뉴클레오티드 출현들을 카운트하기 위해서 이전에 요구된 많은 연산이 제거될 수 있다. By using SIMD population count instruction, the previously calculated number of requirements to be removed in order to count different nucleotide occurrence in the string. 따라서, 게놈 시퀀싱 및 정렬 처리와 같은 애플리케이션들의 성능, 및 보다 일반적으로는 데이터 마이닝과 같은 데이터베이스 애플리케이션들 및 검색 애플리케이션들에 대한 성능이 상당히 개선될 수 있다. Therefore, the performance of applications, and, more generally, such as genome sequencing and alignment process has the performance for database applications and search applications such as data mining can be significantly improved.

다음의 설명에서, 본 발명의 실시예들의 보다 철저한 이해를 제공하기 위해서 처리 로직, 프로세서 타입들, 마이크로아키텍처 상태들, 이벤트들, 구현 메커니즘들 등과 같은 다수의 특정 상세가 제시된다. In the following description, numerous specific details, such as the processing logic, processor types, micro-architectural conditions, events, implementations mechanism is proposed in order to provide a thorough understanding of embodiments of the invention. 그러나, 관련 기술분야의 통상의 기술자라면, 본 발명은 이러한 특정 상세들 없이 실시될 수 있다는 것을 인식할 것이다. However, one of ordinary skill in the relevant art will recognize that the invention may be practiced without these specific details. 부가적으로, 본 발명의 실시예들을 불필요하게 모호하게 하는 것을 회피하기 위해서 일부 잘 알려진 구조들, 회로들 등은 상세하게 제시되지 않았다. Additionally, some well-known structure in order to avoid unnecessarily obscuring the embodiments of the invention, circuits, etc. are not specifically presented.

다음의 실시예들은 프로세서를 참조하여 설명되지만, 다른 타입의 집적 회로들 및 로직 디바이스들에 다른 실시예들이 적용가능하다. The following examples will be described with reference to a processor, other embodiments can be applied to other types of integrated circuits and logic devices. 본 발명의 실시예들의 유사한 기술들 및 교시들은, 더 높은 파이프라인 스루풋 및 개선된 성능으로부터 이익을 얻을 수 있는 다른 타입의 회로들 또는 반도체 디바이스들에 적용될 수 있다. Similar techniques and teachings of embodiments of the invention, may be applied to a higher pipeline throughput and improved performance benefit from other types of circuits or semiconductor devices that can. 본 발명의 실시예들의 교시들은 데이터 조작들을 수행하는 임의의 프로세서 또는 머신에 적용가능하다. The teachings of embodiments of the invention are applicable to any processor or machine that performs data manipulations. 그러나, 본 발명은, 512 비트, 256 비트, 128 비트, 64 비트, 32 비트 또는 16 비트 데이터 연산들을 수행하는 프로세서들 또는 머신들에 제한되지는 않으며, 데이터의 조작 또는 관리가 수행되는 임의의 프로세서 및 머신에 적용될 수 있다. However, the invention is, 512-bit, 256-bit, 128-bit, 64-bit, 32-bit or 16-bit data arithmetic but are not limited to processors or machines that perform, any processor which is operating or managing the data do and it can be applied to the machine. 또한, 다음의 설명은 예들을 제공하고, 첨부 도면들은 예시를 목적으로 다양한 예들을 도시한다. In addition, the following description provides examples, and the annexed drawings show various examples for purposes of illustration. 그러나, 이러한 예들은 제한적인 의미로 해석되어서는 안 되는데, 그 이유는 그것들이 본 발명의 실시예들의 모든 가능한 구현의 완전 목록을 제공하는 것보다는 본 발명의 실시예들의 예들을 제공하는 것으로 의도될 뿐이기 때문이다. However, these examples there is not to be construed in a limiting sense, because that is the intention that they provide examples of the embodiment of the present rather than to provide a complete list of all possible implementations of the embodiments of this invention because only group.

이하의 예들은 실행 유닛들 및 로직 회로들의 콘텍스트에서 명령어 핸들링 및 분산을 설명하지만, 본 발명의 다른 실시예들은, 머신에 의해 수행될 때에 이 머신으로 하여금 본 발명의 적어도 하나의 실시예에 따른 기능들을 수행하게 하는 머신 판독가능한 유형의(tangible) 매체 상에 저장된 데이터 및/또는 명령어들에 의해 달성될 수 있다. The following examples describe instruction handling and distribution in the context of the execution units and logic circuits, however, other embodiments, cause the the machine when it is performed by a machine function according to at least one embodiment of the invention of the present invention the possible machine-readable type to perform the (tangible) the data and / or stored on the media can be achieved by the command. 일 실시예에서, 본 발명의 실시예들과 연관된 기능들은 머신 실행가능한 명령어들로 구현된다. In one embodiment, the functions associated with embodiments of the invention are embodied in machine-executable instructions. 명령어들은, 명령어들로 프로그램되는 범용 또는 특수 목적 프로세서가 본 발명의 단계들을 수행하게 하는데 이용될 수 있다. Instructions, a general-purpose or special-purpose processor that is programmed with the instructions may be used to perform the steps of the present invention. 본 발명의 실시예들은, 본 발명의 실시예들에 따른 하나 이상의 연산을 수행하도록 컴퓨터(또는 다른 전자 디바이스들)를 프로그램하는데 이용될 수 있는 명령어들이 저장되어 있는 머신 또는 컴퓨터 판독가능 매체를 포함할 수 있는 컴퓨터 프로그램 제품 또는 소프트웨어로서 제공될 수 있다. Embodiments of the present invention, comprise a computer (or other electronic device) machine or computer-readable medium in which instructions are stored, which can be used to program to perform one or more operations in accordance with embodiments of the present invention a computer program that can be provided as a product or software. 대안적으로, 본 발명의 실시예들의 단계들은 이 단계들을 수행하기 위한 고정 기능 로직(fixed-function logic)을 포함하는 특정 하드웨어 컴포넌트들에 의해 수행되거나, 또는 프로그램된 컴퓨터 컴포넌트들과 고정 기능 하드웨어 컴포넌트들의 임의의 조합에 의해 수행될 수 있다. Alternatively, the steps of the embodiments of the invention may be performed by specific hardware components that contain fixed-function logic (fixed-function logic) for performing the steps, or the programmed computer components and fixed function hardware component It may be performed by any combination of these.

본 발명의 실시예들을 수행하도록 로직을 프로그램하는데 이용되는 명령어들은 시스템에서의 메모리, 예컨대 DRAM, 캐시, 플래시 메모리 또는 다른 스토리지 내에 저장될 수 있다. Instruction which is used to program the logic to perform the embodiments of the invention may be stored in a memory in the system, such as DRAM, cache, Flash memory, or other storage. 또한, 이러한 명령어들은 네트워크를 통해 또는 다른 컴퓨터 판독가능 매체에 의해 분산될 수 있다. Further, such instructions may be distributed by the or other computer readable medium via a network. 따라서, 머신 판독가능 매체는 머신(예를 들어, 컴퓨터)에 의해 판독가능한 형태로 정보를 저장하거나 전송하기 위한 임의의 메커니즘을 포함할 수 있지만, 플로피 디스켓, 광학 디스크, CD-ROM(Compact Disc, Read-Only Memory), 광자기 디스크, 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), EPROM(Erasable Programmable Read-Only Memory), EEPROM(Electrically Erasable Programmable Read-Only Memory), 자기 또는 광학 카드, 플래시 메모리, 또는 전기, 광학, 음향 또는 다른 형태의 전파 신호들(예를 들어, 반송파들, 적외선 신호들, 디지털 신호들 등)을 통해 인터넷을 경유하여 정보를 전송하는데 이용되는 유형의 머신 판독가능 스토리지에 제한되지는 않는다. Accordingly, the machine-readable medium machine (e.g., a computer), but may include any mechanism for storing or transmitting information in a form readable by a, floppy diskettes, optical disks, CD-ROM (Compact Disc, read-only memory), a magnetic optical disk, a read-only memory (ROM), a random access memory (RAM), EPROM (Erasable Programmable read-only memory), EEPROM (Electrically Erasable Programmable read-only memory), magnetic or optical cards, flash memory, or the electrical, optical, acoustical or other form of propagated signals (e.g., carrier waves, infrared signals, digital signals, etc.) to by way of the Internet machine reading of the type used for transmitting information over but it is not limited to storage. 따라서, 컴퓨터 판독가능 매체는, 머신(예를 들어, 컴퓨터)에 의해 판독가능한 형태로 전자 명령어들 또는 정보를 저장하거나 전송하기에 적합한 임의의 타입의 유형의 머신 판독가능 매체를 포함한다. Thus, computer-readable media, machine (e.g., a computer) includes any type of type of machine-readable medium suitable for in a form readable by a storage or transmitting electronic instructions or information.

설계는 생성으로부터 시뮬레이션 내지 제조까지의 다양한 스테이지들을 겪을 수 있다. The design may undergo various stages of up to simulate production from generation. 설계를 표현하는 데이터는 설계를 다수의 방식으로 표현할 수 있다. Data representing a design may represent the design in a number of ways. 먼저, 시뮬레이션들에서 유용한 바와 같이, 하드웨어는 하드웨어 기술 언어(hardware description language) 또는 다른 기능 기술 언어(functional description language)를 이용하여 표현될 수 있다. First, as is useful in simulations, the hardware may be represented using a hardware description language (hardware description language) or another functional description language (functional description language). 부가적으로, 로직 및/또는 트랜지스터 게이트들을 갖는 회로 레벨 모델이 설계 프로세스의 일부 스테이지들에서 생성될 수 있다. Additionally, logic and / or a circuit level model with the transistor gates may be produced at some stages of the design process. 또한, 대부분의 설계들은, 일부 스테이지에서, 하드웨어 모델에서의 다양한 디바이스들의 물리적 배치를 표현하는 데이터의 레벨에 도달한다. Furthermore, most designs, at some stage, reach a level of data representing the physical placement of various devices in the hardware model. 통상의 반도체 제조 기술들이 이용되는 경우에, 하드웨어 모델을 표현하는 데이터는 집적 회로를 제조하는데 이용되는 마스크들을 위한 상이한 마스크 층들 상의 다양한 피처들의 존재 또는 부재를 특정하는 데이터일 수 있다. When conventional semiconductor fabrication techniques are used, data representing a hardware model may be the presence or absence of various features on different mask layers for the data for specifying the mask used to fabricate the integrated circuit. 설계의 임의의 표현에서, 데이터는 임의의 형태의 머신 판독가능 매체에 저장될 수 있다. In any representation of the design, the data may be stored in any form of a machine-readable medium. 메모리, 또는 디스크와 같은 자기 또는 광학 스토리지는, 정보를 전송하기 위해 변조되거나 다른 방식으로 생성된 광학 또는 전기 파를 통해 전송되는 이러한 정보를 저장하는 머신 판독가능 매체일 수 있다. Magnetic or optical storage such as a memory, or a disk, may be modulated or machine-readable medium storing such information transmitted via an optical or electrical wave generated in a different way to transmit information. 코드 또는 설계를 나타내거나 반송하는 전기 반송파가 전송될 때, 전기 신호의 카피, 버퍼링 또는 재전송이 수행되는 한, 새로운 카피가 만들어진다. When electrical carrier wave display or carrying the code or design is transmitted, to be a copy of the electrical signal, buffering, or retransmission is performed, a new copy is made. 따라서, 통신 제공자 또는 네트워크 제공자는 반송파로 인코딩되는 정보와 같은 아티클(article)을 유형의 머신 판독가능 매체 상에 적어도 일시적으로 저장하여, 본 발명의 실시예들의 기술들을 구현할 수 있다. Thus, a communication provider or a network provider is at least temporarily stored in an article (article) such as information encoded in a carrier wave in a machine-readable medium of this type, it is possible to implement the techniques of the embodiments of the present invention.

현대의 프로세서들에서, 각종 코드 및 명령어들을 처리하고 실행하기 위해서 다수의 상이한 실행 유닛이 이용된다. In modern processors, a number of different execution units are used to process and execute a variety of code and instructions. 모든 명령어들이 동등하게 생성되지는 않는데, 그 이유는 일부는 더 신속하게 완성되는 한편, 다른 것들은 완성하는데 다수의 클록 사이클이 걸릴 수 있기 때문이다. It does not generate all the commands are equivalent, the reason is because some may take longer to be completed quickly, while others are a number of clock cycles to complete. 명령어들의 스루풋이 빠를수록, 프로세서의 전체 성능이 양호해진다. The faster the throughput of instructions, it is excellent in overall performance of the processor. 따라서, 가능한 한 신속하게 많은 명령어들을 실행하는 것이 유리할 것이다. Therefore, it would be advantageous to quickly executing a number of instructions as possible. 그러나, 더 큰 복잡도를 가지며, 실행 시간 및 프로세서 자원들에 관하여 더 많은 것을 요구하는 특정 명령어들이 존재한다. However, it has a greater complexity, there are certain instructions that require more with respect to the execution time and processor resources. 예를 들어, 부동 소수점 명령어들, 로드/스토어 연산들(load/store operations), 데이터 이동들(data moves) 등이 존재한다. For example, such as the floating point instructions, load / store operations (load / store operations), data moves (moves data) exists.

더 많은 컴퓨터 시스템들이 인터넷, 텍스트 및 멀티미디어 애플리케이션들에서 이용되므로, 부가적인 프로세서 지원이 시간 경과에 따라 도입되었다. Since more computer systems are used in internet, text, and multimedia applications, additional processor support has been introduced in accordance with the passage of time. 일 실시예에서, 명령어 세트는, 데이터 타입들, 명령어들, 레지스터 아키텍처, 어드레싱 모드들, 메모리 아키텍처, 인터럽트 및 예외 핸들링, 및 외부 입력 및 출력(I/O)을 비롯한 하나 이상의 컴퓨터 아키텍처와 연관될 수 있다. In one embodiment, the instruction set, data types, instructions, register architecture, addressing modes, to be associated with the memory architecture, the interrupt and exception handling, and one or more computer architectures, including the external input and output (I / O) can.

일 실시예에서, 명령어 세트 아키텍처(ISA: instruction set architecture)는 하나 이상의 명령어 세트를 구현하는데 이용되는 프로세서 로직 및 회로들을 포함하는 하나 이상의 마이크로아키텍처에 의해 구현될 수 있다. In one embodiment, the instruction set architecture (ISA: instruction set architecture) may be implemented by one or more micro-architecture including a processor and logic circuitry used to implement one or more instruction sets. 따라서, 상이한 마이크로아키텍처들을 갖는 프로세서들은 공통의 명령어 세트의 적어도 일부를 공유할 수 있다. Thus, a processor having different micro-architecture can share at least a portion of the instruction set of the common. 예를 들어, 인텔® Pentium 4 프로세서들, 인텔® Core™ 프로세서들, 및 캘리포니아주 서니베일에 있는 Advanced Micro Devices, Inc.로부터의 프로세서들은 (더 새로운 버전들이 추가된 소정의 확장들을 갖는) x86 명령어 세트의 거의 동일한 버전들을 구현하지만, 상이한 내부 설계들을 갖는다. For example, Intel ® Pentium 4 processors, Intel ® Core ™ processors, and processors from Sunnyvale, California, Advanced Micro Devices, Inc. in the Vale are (with the newer versions have added some extensions) x86 instructions implementing substantially the same version of the set, but have different internal design. 유사하게, ARM Holdings, Ltd., MIPS, 또는 그들의 실시권자들 또는 채택자들과 같은 다른 프로세서 개발 회사들에 의해 설계된 프로세서들은 공통의 명령어 세트의 적어도 일부를 공유할 수 있지만, 상이한 프로세서 설계들을 포함할 수 있다. Similarly, processors designed by other processor development companies, such as ARM Holdings, Ltd., MIPS, or their licensees or adopters may share at least a portion of a common instruction set, but include different processor designs can. 예를 들어, ISA의 동일한 레지스터 아키텍처는, 전용 물리적 레지스터들, 레지스터 리네이밍 메커니즘을 이용(예를 들어, RAT(Register Alias Table), ROB(Reorder Buffer) 및 리타이어먼트 레지스터 파일(retirement register file)을 이용)하는 하나 이상의 동적으로 할당된 물리적 레지스터를 포함하여, 새로운 또는 잘 알려진 기술들을 이용하여 상이한 마이크로아키텍처들에서 상이한 방식들로 구현될 수 있다. For example, the same register architecture of the ISA is the only physical register, using the register renaming mechanism (for example, RAT (Register Alias ​​Table), ROB (Reorder Buffer) and retired garment register file (retirement register file) the use), including the physical register allocated to one or more dynamic, and can be used with new or well-known techniques implemented in different micro-architecture in different ways. 일 실시예에서, 레지스터들은, 소프트웨어 프로그래머에 의해 어드레싱가능할 수도 있고 가능하지 않을 수도 있는 하나 이상의 레지스터, 레지스터 아키텍처, 레지스터 파일 또는 다른 레지스터 세트를 포함할 수 있다. In one embodiment, the registers, can also be addressed by programmer software, and may include one or more registers, register architecture, the register file or other set of registers that may not be possible.

일 실시예에서, 명령어는 하나 이상의 명령어 포맷을 포함할 수 있다. In one embodiment, the instruction may include more than one instruction format. 일 실시예에서, 명령어 포맷은, 다양한 필드들(비트 수, 비트들의 위치 등)을 표시하여, 다른 것들 중에서, 수행될 연산, 및 그 연산이 수행되어야 하는 피연산자(들)를 특정할 수 있다. In one embodiment, the instruction format may specify a variety of fields to display the (number of bits, bit positions, etc. of) operation to be performed, among other things, and the operand (s) of the calculation is to be performed. 일부 명령어 포맷들은 명령어 템플릿들(또는 서브포맷들)의 정의를 통해 추가로 쪼개질 수 있다. Some instruction format may be split further by the definition of the command template (or sub-format). 예를 들어, 주어진 명령어 포맷의 명령어 템플릿들은 명령어 포맷의 필드들의 상이한 서브세트들을 갖는 것으로 정의될 수 있고/있거나, 상이하게 해석되는 주어진 필드를 갖는 것으로 정의될 수 있다. For example, the command format template for a given instruction may be defined as having a given field that can be defined as having different subset of the instruction format field, and / interpreted differently. 일 실시예에서, 명령어는 명령어 포맷을 이용하여(그리고 정의되는 경우에 그 명령어 포맷의 명령어 템플릿들 중 주어진 명령어 템플릿으로) 표현되고, 연산 및 이러한 연산이 연산되는 피연산자들을 특정하거나 표시한다. In one embodiment, the command using the command format is represented by (and a given instruction template of the template of the command that the command formats when the definition), the specific or display the operation and the operand which such operation is operation.

과학, 금융, 자동 벡터화 범용(auto-vectorized general purpose), RMS(recognition, mining, and synthesis), 및 비주얼 및 멀티미디어 애플리케이션들(예를 들어, 2D/3D 그래픽스, 이미지 처리, 비디오 압축/압축해제, 음성 인식 알고리즘 및 오디오 조작)은 다수의 데이터 항목에 대해 동일한 연산이 수행되는 것을 요구한다. Science, finance, automatic vectorization Universal (auto-vectorized general purpose), RMS (recognition, mining, and synthesis), and the visual and multimedia applications (e.g., 2D / 3D graphics, image processing, video compression / decompression, speech recognition algorithms and audio manipulation) require that the same operations are performed for a plurality of data items. 일 실시예에서, SIMD(Single Instruction Multiple Data)는, 프로세서가 다수의 데이터 요소에 대해 연산을 수행하게 하는 명령어의 타입을 지칭한다. In one embodiment, SIMD (Single Instruction Multiple Data) will be referred to the type of instructions that the processor is performing an operation on multiple data elements. SIMD 기술은, 레지스터에서의 비트들을, 별개의 값을 각각 나타내는 다수의 고정 크기의 데이터 요소 또는 가변 크기의 데이터 요소로 논리적으로 분할할 수 있는 프로세서들에서 이용될 수 있다. SIMD technology, and the bits in the register, may be used in a number of fixed sizes of data elements or a processor that can be logically divided into data elements of variable size that is the discrete value of each. 예를 들어, 일 실시예에서, 64-비트 레지스터에서의 비트들은, 별개의 16-비트 값을 각각 나타내는 4개의 별개의 16-비트 데이터 요소를 포함하는 소스 피연산자로서 조직될 수 있다. For example, in one embodiment, bits in 64-bit registers, and as a source operand containing four separate 16-bit data element that represents a separate 16-bit values ​​each of which may be organized. 이러한 타입의 데이터는 '패킹된' 데이터 타입 또는 '벡터' 데이터 타입으로 지칭될 수 있으며, 이러한 데이터 타입의 피연산자들은 패킹된 데이터 피연산자들 또는 벡터 피연산자들로 지칭된다. Data of this type may be referred to as "packed" data type or "vector" data types, the operands of these data types are referred to as the packed data operand or a vector operand. 일 실시예에서, 패킹된 데이터 항목 또는 벡터는 단일의 레지스터 내에 저장된 패킹된 데이터 요소들의 시퀀스일 수 있으며, 패킹된 데이터 피연산자 또는 벡터 피연산자는 SIMD 명령어(또는 '패킹된 데이터 명령어' 또는 '벡터 명령어')의 소스 또는 목적지 피연산자일 수 있다. In one embodiment, a packed data item or vector may be a sequence of data elements packing stored in a single register, the packed data operand or a vector operand SIMD instructions (or "packed data instructions" or "vector instructions" ) it can be a source or destination operand of. 일 실시예에서, SIMD 명령어는, 동일하거나 상이한 크기를 갖고 동일하거나 상이한 개수의 데이터 요소를 가지며 동일하거나 상이한 데이터 요소 순서로 이루어진 목적지 벡터 피연산자(결과 벡터 피연산자로 또한 지칭됨)를 생성하기 위해 2개의 소스 벡터 피연산자에 대해 수행될 단일의 벡터 연산을 특정한다. In one embodiment, SIMD instruction, two to produce an (also referred to as a result vector operand) the same or the same have a different size, or destination vector operands comprising the same and a data element of a different number or different data element sequence It specifies a single vector operation to be performed on the source vector operand.

x86, MMX™, SSE(Streaming SIMD Extensions), SSE2, SSE3, SSE4.1 및 SSE4.2 명령어들을 포함하는 명령어 세트를 갖는 인텔® Core™ 프로세서들, 벡터 부동 소수점(VFP) 및/또는 NEON 명령어들을 포함하는 명령어 세트를 갖는 ARM Cortex® 계열의 프로세서들과 같은 ARM 프로세서들, 및 중국 과학원의 계산 기술 연구소(ICT)에 의해 개발된 Loongson 계열의 프로세서들과 같은 MIPS 프로세서들에 의해 이용된 것과 같은 SIMD 기술은, 애플리케이션 성능에서의 상당한 개선을 가능하게 하였다(Core™ 및 MMX™는 캘리포니아주 산타 클라라에 있는 인텔 코포레이션의 상표들 또는 등록 상표들임). x86, MMX ™, SSE of Intel ® Core ™ processors having an instruction set that includes (Streaming SIMD Extensions), SSE2, SSE3, SSE4.1 and SSE4.2 instruction, the vector floating point (VFP) and / or NEON instructions the ARM processor such as the ARM Cortex® series having a command set which includes a processor, and a SIMD such as that used by the processor such as the MIPS family of processors Loongson developed by the calculated Research Institute of Chinese Academy of Sciences (ICT) technology, and enables a significant improvement in application performance (Core ™ and MMX ™ are trademarks or registered trademarks of Intel Corporation deulim in Santa Clara, California).

일 실시예에서, 목적지 및 소스 레지스터/데이터는 대응하는 데이터 또는 연산의 소스 및 목적지를 나타내는 일반 용어들이다. In one embodiment, the destination and source register / data are the general term for the source and destination of data or operation corresponding. 일부 실시예들에서, 그들은 레지스터들, 메모리, 또는 도시된 것들과 다른 명칭들이나 기능들을 갖는 다른 스토리지 영역들에 의해 구현될 수 있다. In some embodiments, they may be implemented by another storage area with registers, memory, or those shown and other names or functions. 예를 들어, 일 실시예에서, "DEST1"은 일시적인 스토리지 레지스터 또는 다른 스토리지 영역인 한편, "SRC1" 및 "SRC2"는 제1 및 제2 소스 스토리지 레지스터 또는 다른 스토리지 영역 등일 수 있다. For example, in one embodiment, "DEST1" is a temporary storage register or other storage area, while, "SRC1" and "SRC2" may be a first and second source storage register or other storage area. 다른 실시예들에서, SRC 및 DEST 스토리지 영역들 중 2개 이상은 동일한 스토리지 영역(예를 들어, SIMD 레지스터) 내의 상이한 데이터 스토리지 요소들에 대응할 수 있다. In other embodiments, two or more of the SRC and DEST storage areas may correspond to different data storage elements within the same storage area (e.g., SIMD register). 일 실시예에서, 소스 레지스터들 중 하나는, 예를 들어, 제1 및 제2 소스 데이터에 대해 수행된 연산의 결과를, 목적지 레지스터들의 역할을 하는 2개의 소스 레지스터 중 하나의 소스 레지스터에 후기입함으로써, 목적지 레지스터의 역할을 또한 할 수 있다. In one embodiment, a source one of the registers includes, for example, the first and second reviews the results of the operations performed on the source data, in the two source registers a source of the register that the role of the destination register mouth by, and it can also act as a destination register.

도 1a는 본 발명의 일 실시예에 따른 명령어를 실행하기 위한 실행 유닛들을 포함하는 프로세서로 구성된 예시적인 컴퓨터 시스템의 블록도이다. Figure 1a is a block diagram of an exemplary computer system with a processor that includes execution units to execute an instruction in accordance with one embodiment of the present invention. 시스템(100)은, 본 명세서에 설명된 실시예에서와 같이, 본 발명에 따라 데이터를 처리하기 위한 알고리즘들을 수행하기 위해 로직을 포함한 실행 유닛들을 이용하는 프로세서(102)와 같은 컴포넌트를 포함한다. The system 100, as in the embodiment described herein, includes components such as the processor 102 using the execution units including logic to perform algorithms for processing data in accordance with the present invention. 시스템(100)은 캘리포니아주 산타 클라라에 있는 인텔 코포레이션으로부터 입수가능한 PENTIUM ® Ⅲ, PENTIUM ® 4, Xeon™, Itanium ® , XScale™ 및/또는 StrongARM™ 마이크로프로세서들에 기초한 처리 시스템들을 나타내지만, 다른 시스템들(다른 마이크로프로세서들을 갖는 PC들, 엔지니어링 워크스테이션들, 셋톱 박스들 등을 포함함)도 또한 사용될 수 있다. System 100 represents a processing system based on the California, available from Intel Corporation in Santa Clara available PENTIUM ® Ⅲ, PENTIUM ® 4, Xeon ™, Itanium ®, XScale ™ and / or StrongARM ™ microprocessors and other system s (including the PC, engineering workstations, set-top boxes, and so on having different micro-processor) can also be used. 일 실시예에서, 예시적인 시스템(100)은, 워싱턴주 레드몬드에 있는 마이크로소프트 코포레이션으로부터 입수가능한 WINDOWS™ 운영 체제의 버전을 실행할 수 있지만, 다른 운영 체제들(예를 들어, UNIX 및 Linux), 임베디드 소프트웨어 및/또는 그래픽 사용자 인터페이스들도 또한 이용될 수 있다. In one embodiment, an exemplary system 100 can run Microsoft Corporation, available WINDOWS ™ versions of the operating system from which the Redmond, Washington, but other operating systems (eg, UNIX, and Linux), embedded also software and / or graphical user interface can also be used. 따라서, 본 발명의 실시예들은 하드웨어 회로와 소프트웨어의 임의의 특정 조합에 제한되지는 않는다. Thus, embodiments of the present invention are not limited to any specific combination of hardware circuitry and software.

실시예들은 컴퓨터 시스템들에 제한되지는 않는다. The embodiments are not limited to the computer system. 본 발명의 대안적인 실시예들은 다른 디바이스들, 예컨대 핸드헬드 디바이스들, 및 임베디드 애플리케이션들에서 이용될 수 있다. Alternative embodiments of the invention may be used in other devices, such as handheld devices and embedded applications. 핸드헬드 디바이스들의 일부 예들은 셀룰러 전화기, 인터넷 프로토콜 디바이스, 디지털 카메라, PDA(personal digital assistant) 및 핸드헬드 PC를 포함한다. Some examples of handheld devices include cellular phones, Internet Protocol devices, digital cameras, (personal digital assistant) PDA and handheld PC. 임베디드 애플리케이션들은, 마이크로컨트롤러, 디지털 신호 프로세서(DSP), 시스템 온 칩, 네트워크 컴퓨터(NetPC), 셋톱 박스, 네트워크 허브, WAN(wide area network) 스위치, 또는 적어도 하나의 실시예에 따른 하나 이상의 명령어를 수행할 수 있는 임의의 다른 시스템을 포함할 수 있다. Embedded applications, a microcontroller, a digital signal processor (DSP), system on chip, network computers (NetPC), one or more instructions of the set-top boxes, network hubs, WAN (wide area network) switch, or at least one of the embodiments It may include any other system that can perform.

도 1a는 본 발명의 일 실시예에 따른 적어도 하나의 명령어를 수행하는 알고리즘을 수행하기 위한 하나 이상의 실행 유닛(108)을 포함하는 프로세서(102)로 형성된 컴퓨터 시스템(100)의 블록도이다. Figure 1a is a block diagram of a computer system 100 formed with a processor 102 that includes one or more execution units 108 to perform an algorithm that performs at least one of the instruction in accordance with one embodiment of the present invention. 일 실시예는 단일의 프로세서 데스크톱 또는 서버 시스템의 콘텍스트에서 설명될 수 있지만, 대안적인 실시예들은 멀티프로세서 시스템에 포함될 수 있다. One embodiment may be described in the context of a single processor desktop or server system, alternative embodiments may be included in a multiprocessor system. 시스템(100)은 '허브' 시스템 아키텍처의 예이다. System 100 is an example of a "hub" system architecture. 컴퓨터 시스템(100)은 데이터 신호들을 처리하는 프로세서(102)를 포함한다. Computer system 100 includes a processor 102 that processes data signals. 프로세서(102)는, 예를 들어, CISC(complex instruction set computer) 마이크로프로세서, RISC(reduced instruction set computing) 마이크로프로세서, VLIW(very long instruction word) 마이크로프로세서, 명령어 세트들의 조합을 구현하는 프로세서, 또는 디지털 신호 프로세서와 같은 임의의 다른 프로세서 디바이스일 수 있다. The processor 102, for example, CISC (complex instruction set computer) microprocessor, a RISC (reduced instruction set computing) microprocessor, a VLIW (very long instruction word) microprocessor, a processor implementing a combination of instruction sets, or It may be any other processor device, such as a digital signal processor. 프로세서(102)는, 프로세서(102)와 시스템(100)에서의 다른 컴포넌트들 사이에 데이터 신호들을 전송할 수 있는 프로세서 버스(110)에 연결된다. Processor 102 is coupled to the processor 102 and the system processor bus 110 that can transmit data signals between the other components in (100). 시스템(100)의 요소들은 관련 기술분야의 통상의 기술자에게 잘 알려져 있는 그들의 통상의 기능들을 수행한다. Elements of system 100 perform their conventional functions well known to those of ordinary skill in the relevant art.

일 실시예에서, 프로세서(102)는 레벨 1(L1) 내부 캐시 메모리(104)를 포함한다. In one embodiment, the processor 102 includes a Level 1 (L1) internal cache memory 104. 아키텍처에 종속하여, 프로세서(102)는 단일의 내부 캐시 또는 다중 레벨의 내부 캐시를 가질 수 있다. And depend on the architecture, the processor 102 can have a single internal cache or multiple levels of internal cache. 대안적으로, 다른 실시예에서, 캐시 메모리는 프로세서(102) 외부에 존재할 수 있다. Alternatively, in another embodiment, the cache memory may be external to the processor 102. 다른 실시예들은 특정 구현 및 니즈에 종속하여 내부 캐시와 외부 캐시 양쪽 모두의 조합을 또한 포함할 수 있다. Other embodiments may also include a combination of both the internal cache and the external cache, dependent on the particular implementation and needs. 레지스터 파일(106)은, 정수 레지스터, 부동 소수점 레지스터, 상태 레지스터 및 명령어 포인터 레지스터를 비롯한 다양한 레지스터들에 상이한 타입의 데이터를 저장할 수 있다. Register file 106 can store different types of data in integer registers, floating point registers, status registers, and instruction pointer register, including the variety of registers.

정수 및 부동 소수점 연산들을 수행하는 로직을 포함하는 실행 유닛(108)도 또한 프로세서(102)에 존재한다. Execution unit 108, including logic to perform integer and floating point operations also are also present on the processor 102. 프로세서(102)는, 특정 매크로명령어들에 대한 마이크로코드를 저장하는 마이크로코드(ucode) ROM을 또한 포함한다. The processor 102 also includes a microcode (ucode) ROM that stores microcode for certain macro instruction. 일 실시예에 있어서, 실행 유닛(108)은 패킹된 명령어 세트(109)를 핸들링하는 로직을 포함한다. In one embodiment, the execution unit 108 includes logic to handle a packed instruction set 109. 명령어들을 실행하는 연관 회로와 함께, 범용 프로세서(102)의 명령어 세트에 패킹된 명령어 세트(109)를 포함함으로써, 많은 멀티미디어 애플리케이션에 의해 이용되는 연산들은 범용 프로세서(102)에서 패킹된 데이터를 이용하여 수행될 수 있다. Along with associated circuitry to execute instructions, by including a set of instructions (109) packed in the instruction set of a general-purpose processor 102, a computation which is used by many multimedia applications using the packed data in a general-purpose processor (102) It can be carried out. 따라서, 많은 멀티미디어 애플리케이션은 패킹된 데이터에 대한 연산들을 수행하기 위해 프로세서의 데이터 버스의 전체 폭(full width)을 이용함으로써 보다 효율적으로 실행되고 가속화될 수 있다. Thus, many multimedia applications can be executed and more effectively accelerated by using the full width of a processor's data bus (full width) to perform operations on packed data. 이는, 한번에 하나의 데이터 요소씩, 하나 이상의 연산을 수행하기 위해 프로세서의 데이터 버스에 걸쳐 데이터의 더 작은 유닛들을 전송할 필요성을 제거할 수 있다. This can eliminate the need to transfer smaller units of data across the processor's data bus to perform one time of data elements by, one or more operations.

실행 유닛(108)의 대안적인 실시예들도 또한 마이크로컨트롤러들, 임베디드 프로세서들, 그래픽스 디바이스들, DSP들 및 다른 타입의 로직 회로들에서 이용될 수 있다. Alternative embodiments of an execution unit 108 may also be utilized in the microcontroller, embedded processors, graphics devices, DSP, and other types of logic circuits. 시스템(100)은 메모리(120)를 포함한다. The system 100 includes a memory 120. 메모리(120)는 동적 랜덤 액세스 메모리(DRAM) 디바이스, 정적 랜덤 액세스 메모리(SRAM) 디바이스, 플래시 메모리 디바이스 또는 다른 메모리 디바이스일 수 있다. Memory 120 may be a dynamic random access memory (DRAM) device, a static random access memory (SRAM) device, flash memory device, or other memory device. 메모리(120)는 프로세서(102)에 의해 실행될 수 있는 데이터 신호들에 의해 표현되는 데이터 및/또는 명령어들을 저장할 수 있다. Memory 120 may store data and / or instructions that are represented by data signals that may be executed by the processor 102.

시스템 로직 칩(116)은 프로세서 버스(110) 및 메모리(120)에 연결된다. System logic chip 116 is coupled to the processor bus 110 and memory 120. 도시된 실시예에서의 시스템 로직 칩(116)은 메모리 제어기 허브(MCH)이다. System logic chip 116 in the illustrated embodiment is a memory controller hub (MCH). 프로세서(102)는 프로세서 버스(110)를 통해 MCH(116)와 통신할 수 있다. The processor 102 may communicate with the MCH (116) via a processor bus 110. MCH(116)는 명령어 및 데이터 스토리지를 위해 그리고 그래픽스 커맨드들, 데이터 및 텍스처들의 스토리지를 위해 메모리(120)에 대한 고대역폭 메모리 경로(118)를 제공한다. MCH (116) provides a bandwidth memory path 118 and to the memory 120 for storage of the graphics command, and for instruction and data storage, data and textures. MCH(116)는, 프로세서(102), 메모리(120) 및 시스템(100)에서의 다른 컴포넌트들 사이에 데이터 신호들을 안내하고, 이러한 데이터 신호들을 프로세서 버스(110), 메모리(120) 및 시스템 I/O(122) 사이에 브리징하기 위한 것이다. MCH (116) has a processor 102, memory instructions, and a processor bus 110, such data signals of data signals between the other components of the unit 120 and the system 100, memory 120, and system I It is for bridging between / O (122). 일부 실시예들에서, 시스템 로직 칩(116)은 그래픽스 제어기(112)에 연결하기 위한 그래픽스 포트를 제공할 수 있다. In some embodiments, the system logic chip 116 can provide a graphics port for coupling to a graphics controller 112. MCH(116)는 메모리 인터페이스(118)를 통해 메모리(120)에 연결된다. MCH (116) is coupled to the memory 120 via the memory interface 118. 그래픽스 카드(112)는 가속화 그래픽스 포트(AGP: Accelerated Graphics Port) 상호접속부(114)를 통해 MCH(116)에 연결된다. Graphics card 112 is accelerated graphics port, is coupled to the MCH (116) through (Accelerated Graphics Port AGP) interconnect 114. [

시스템(100)은 사유 허브 인터페이스 버스(proprietary hub interface bus)(122)를 이용하여, MCH(116)를 I/O 제어기 허브(ICH)(130)에 연결한다. The system 100 using the private hub interface bus (proprietary hub interface bus) (122), connects the MCH (116) to the I / O controller hub (ICH) (130). ICH(130)는 로컬 I/O 버스를 통해 일부 I/O 디바이스들에 대한 직접 접속들을 제공한다. ICH (130) provides the direct connections to some I / O devices via a local I / O bus. 로컬 I/O 버스는 주변 장치들을 메모리(120), 칩셋 및 프로세서(102)에 접속하기 위한 고속 I/O 버스이다. Local I / O bus is a high-speed I / O bus for connecting peripherals to the memory 120, chipset, and processor 102. 일부 예들은 오디오 제어기, 펌웨어 허브(플래시 BIOS)(128), 무선 송수신기(126), 데이터 스토리지(124), 사용자 입력과 키보드 인터페이스들을 포함하는 레거시 I/O 제어기, USB(Universal Serial Bus)와 같은 직렬 확장 포트, 및 네트워크 제어기(134)이다. Some examples, such as the audio controller, firmware hub (flash BIOS) (128), the wireless transceiver 126, data storage 124, legacy I / O controller, a USB (Universal Serial Bus) containing user input and keyboard interfaces a serial expansion port, and the network controller 134. 데이터 스토리지 디바이스(124)는 하드 디스크 드라이브, 플로피 디스크 드라이브, CD-ROM 디바이스, 플래시 메모리 디바이스 또는 다른 대용량 스토리지 디바이스를 포함할 수 있다. Data storage device 124 may include a hard disk drive, a floppy disk drive, CD-ROM device, flash memory device or other mass storage device.

시스템의 다른 실시예에 있어서, 일 실시예에 따른 명령어는 시스템 온 칩과 함께 이용될 수 있다. In another embodiment of the system, the instruction in accordance with one embodiment may be used with the system-on-chip. 시스템 온 칩의 일 실시예는 프로세서 및 메모리를 포함한다. One embodiment of a system-on-a-chip includes a processor and memory. 하나의 이러한 시스템을 위한 메모리는 플래시 메모리이다. Memory for one such system is a flash memory. 플래시 메모리는, 프로세서 및 다른 시스템 컴포넌트들과 동일한 다이 상에 위치될 수 있다. The flash memory can be located on the same die as the processor and other system components. 부가적으로, 메모리 제어기 또는 그래픽스 제어기와 같은 다른 로직 블록들도 또한 시스템 온 칩 상에 위치될 수 있다. Additionally, these other logic blocks such as a memory controller or graphics controller can also be located on a system-on-chip.

도 1b는 본 발명의 일 실시예의 원리들을 구현하는 데이터 처리 시스템(140)을 도시한다. Figure 1b shows a data processing system 140 for implementing one embodiment of the principles of the invention. 본 명세서에 설명된 실시예들은 본 발명의 실시예들의 범위로부터 벗어나지 않고 대안적인 처리 시스템들과 함께 이용될 수 있다는 것이 관련 기술분야의 통상의 기술자에 의해 손쉽게 인식될 것이다. The embodiments described herein are examples that the same may be used with alternative processing systems without departing from the scope of the embodiments of the present invention will be readily understood by the skilled in the relevant art.

컴퓨터 시스템(140)은 일 실시예에 따른 적어도 하나의 명령어를 수행할 수 있는 처리 코어(159)를 포함한다. The computer system 140 includes a processing core 159 capable of performing at least one instruction in accordance with one embodiment. 일 실시예에 있어서, 처리 코어(159)는, CISC, RISC 또는 VLIW 타입 아키텍처를 포함하지만 이에 제한되지는 않는 임의의 타입의 아키텍처의 처리 유닛을 나타낸다. In one embodiment, processing core 159, CISC, a RISC or a VLIW type architecture including, but represents a processing unit of any type of architecture that are not limited. 또한, 처리 코어(159)는 하나 이상의 프로세스 기술로 제조하기에 적합할 수 있고, 머신 판독가능 매체 상에서 충분히 상세하게 표현됨으로써 이러한 제조를 용이하게 하기에 적합할 수 있다. The processing core 159 may be adapted to facilitate the manufacture of these being particularly well represented on one or more processes may be suitable for manufacture by technology, a machine-readable medium.

처리 코어(159)는 실행 유닛(142), 레지스터 파일(들)(145)의 세트 및 디코더(144)를 포함한다. The processing core 159 comprises an execution unit 142, and sets the decoder 144 of the register file (s) 145. 처리 코어(159)는 본 발명의 실시예들의 이해에 필요하지는 않은 부가적인 회로(도시되지 않음)를 또한 포함한다. A processing core 159 (not shown), additional circuitry that is not necessary for understanding of the embodiments of the present invention also includes. 실행 유닛(142)은 처리 코어(159)에 의해 수신된 명령어들을 실행하기 위해 이용된다. Execution unit 142 is used to execute the instructions received by processing core 159. 통상적인 프로세서 명령어들을 수행하는 것에 부가하여, 실행 유닛(142)은 패킹된 데이터 포맷들에 대한 연산들을 수행하기 위해 패킹된 명령어 세트(143)에서의 명령어들을 수행할 수 있다. In addition to performing the conventional processor instructions, execution unit 142 may perform the instructions in the instruction set 143 to perform the packing operations on packed data formats. 패킹된 명령어 세트(143)는 본 발명의 실시예들을 수행하기 위한 명령어들 및 다른 패킹된 명령어들을 포함한다. Packed instruction set 143 includes instructions and other packed instructions for performing the embodiment of the present invention. 실행 유닛(142)은 내부 버스에 의해 레지스터 파일(145)에 연결된다. Execution unit 142 is coupled to register file 145 by an internal bus. 레지스터 파일(145)은 데이터를 비롯한 정보를 저장하기 위한 처리 코어(159) 상의 스토리지 영역을 나타낸다. Register file 145 represents a storage area on processing core 159 for storing information, including data. 이전에 언급된 바와 같이, 패킹된 데이터를 저장하기 위해 이용된 스토리지 영역은 중대하지는 않다고 이해된다. As mentioned previously, to store the packed data storage area used it is understood andago not critical. 실행 유닛(142)은 디코더(144)에 연결된다. Execution unit 142 is coupled to decoder 144. 디코더(144)는 처리 코어(159)에 의해 수신된 명령어들을 제어 신호들 및/또는 마이크로코드 엔트리 포인트들로 디코딩하기 위해 이용된다. Decoder 144 is used for decoding in the processing core of the control signal of the instruction received by the 159 and / or microcode entry points. 이러한 제어 신호들 및/또는 마이크로코드 엔트리 포인트들에 응답하여, 실행 유닛(142)은 적절한 연산들을 수행한다. In response to these control signals and / or microcode entry points, execution unit 142 performs the appropriate operations. 일 실시예에서, 디코더는, 명령어 내에 표시된 대응하는 데이터에 대해 어떠한 연산이 수행되어야 하는지를 나타내는 명령어의 오피코드(opcode)를 해석하는데 이용된다. In one embodiment, the decoder is used to interpret the operational code (opcode) in the command indicating whether any operation should be performed on the corresponding data displayed in the command.

처리 코어(159)는, 예를 들어, 동기식 동적 랜덤 액세스 메모리(SDRAM) 컨트롤(146), 정적 랜덤 액세스 메모리(SRAM) 컨트롤(147), 버스트 플래시 메모리 인터페이스(148), PCMCIA(personal computer memory card international association)/CF(compact flash) 카드 컨트롤(149), 액정 디스플레이(LCD) 컨트롤(150), 직접 메모리 액세스(DMA: direct memory access) 제어기(151) 및 대안적인 버스 마스터 인터페이스(152)를 포함할 수 있지만 이에 제한되지는 않는 다양한 다른 시스템 디바이스들과 통신하기 위해 버스(141)와 연결된다. Processing core 159 may be, for example, synchronous dynamic random access memory (SDRAM) control 146, static random access memory (SRAM) control 147, burst flash memory interface (148), PCMCIA (personal computer memory card international association) / CF (compact flash) card control 149, liquid crystal display (LCD) control 150, direct memory access (DMA: direct memory access), and a controller 151, and alternative bus master interface 152 It can be, but is coupled to the various other system devices and a bus 141 for communicating not limited to this. 일 실시예에서, 데이터 처리 시스템(140)은 I/O 버스(153)를 통해 다양한 I/O 디바이스들과 통신하기 위해 I/O 브리지(154)를 또한 포함할 수 있다. In one embodiment, data processing system 140 may include an I / O bridge 154 for communicating with various I / O devices also through the I / O bus 153. 이러한 I/O 디바이스들은, 예를 들어, UART(universal asynchronous receiver/transmitter)(155), USB(universal serial bus)(156), 블루투스 무선 UART(157) 및 I/O 확장 인터페이스(158)를 포함할 수 있지만, 이에 제한되지는 않는다. These I / O devices are, for example, UART (universal asynchronous receiver / transmitter) (155), USB (universal serial bus) (156), a Bluetooth wireless UART (157) and I / O expansion interface (158) but it can be, but is not limited thereto.

데이터 처리 시스템(140)의 일 실시예는, 텍스트 스트링 비교 연산을 비롯한 SIMD 연산들을 수행할 수 있는 처리 코어(159), 및 모바일, 네트워크 및/또는 무선 통신들을 제공한다. One embodiment of a data processing system 140, and provides the processing core 159, and a mobile, network and / or wireless communication with the text to perform SIMD operations including a string comparison operation. 처리 코어(159)는, 펄스 코드 변조(PCM)와 같은 변조/복조(MODEM) 기능들; The processing core 159, a modulation / demodulation such as pulse code modulation (PCM) (MODEM) functions; 컬러 공간 변환, 비디오 인코드 모션 추정 또는 비디오 디코드 모션 보상과 같은 압축/압축해제 기술들; The color space conversion, compression / decompression techniques such as video encode motion estimation or video decode motion compensation; 및 월시-하다마르 변환, 고속 푸리에 변환(FFT), 이산 코사인 변환(DCT), 및 그들의 각각의 역변환들과 같은 이산 변환들을 포함하는 다양한 오디오, 비디오, 이미징 및 통신 알고리즘들로 프로그램될 수 있다. And the Walsh-Hadamard may be programmed with the transform, a fast Fourier transform (FFT), discrete cosine transform (DCT), and a variety of audio, video, imaging and communications algorithms including discrete transformations, such as their respective inverse transformation.

도 1c는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어들을 실행할 수 있는 데이터 처리 시스템의 다른 대안적인 실시예들을 도시한다. Figure 1c illustrates another alternative embodiment of a data processing system that may execute instructions that provide a SIMD vector population count functionality. 하나의 대안적인 실시예에 따르면, 데이터 처리 시스템(160)은 메인 프로세서(166), SIMD 코프로세서(161), 캐시 메모리(167) 및 입/출력 시스템(168)을 포함할 수 있다. According to one alternative embodiment, data processing system 160 may include a main processor (166), SIMD coprocessor 161, a cache memory 167, and input / output system 168. 입/출력 시스템(168)은 선택적으로 무선 인터페이스(169)에 연결될 수 있다. Input / output system 168 may optionally be coupled to a wireless interface (169). SIMD 코프로세서(161)는 일 실시예에 따른 명령어들을 포함하는 연산들을 수행할 수 있다. SIMD co-processor 161 may perform an operation that includes instructions in accordance with one embodiment. 처리 코어(170)는 하나 이상의 프로세스 기술로 제조하기에 적합할 수 있고, 머신 판독가능 매체 상에서 충분히 상세하게 표현됨으로써, 처리 코어(170)를 포함한 데이터 처리 시스템(160)의 전부 또는 일부의 제조를 용이하게 하기에 적합할 수 있다. All or a part manufactured in the processing core 170 being one or more processes may be suitable for manufacture by technology, expressed in sufficient detail on the machine readable medium, the processing core 170, the data processing system 160, including It can be adapted to facilitate.

일 실시예에 있어서, SIMD 코프로세서(161)는 실행 유닛(162) 및 레지스터 파일(들)(164)의 세트를 포함한다. For one embodiment, SIMD coprocessor 161 comprises a set of execution unit 162 and register file (s) 164. 메인 프로세서(166)의 일 실시예는, 실행 유닛(162)에 의한 실행을 위해 일 실시예에 따른 명령어들을 포함한 명령어 세트(163)의 명령어들을 인식하는 디코더(165)를 포함한다. One embodiment of main processor 166, for example, includes a decoder 165 to recognize instructions of instruction set 163 including instructions in accordance with one embodiment for execution by execution unit 162. 대안적인 실시예들에 있어서, SIMD 코프로세서(161)는 명령어 세트(163)의 명령어들을 디코딩하는 디코더(165B)의 적어도 일부를 또한 포함한다. In alternative embodiments, SIMD coprocessor 161 comprises at least a portion of the decoder (165B) for decoding instructions of instruction set 163 also. 처리 코어(170)는 본 발명의 실시예들의 이해에 필요하지는 않은 부가적인 회로(도시되지 않음)를 또한 포함한다. A processing core 170 (not shown), additional circuitry that is not necessary for understanding of the embodiments of the present invention also includes.

동작 시에, 메인 프로세서(166)는, 캐시 메모리(167) 및 입/출력 시스템(168)과의 상호작용들을 포함한 일반적인 타입의 데이터 처리 연산들을 제어하는 데이터 처리 명령어들의 스트림을 실행한다. In operation, the main processor 166 executes a cache memory 167, and input / output stream of data processing instructions that control data processing operations of a general type including interactions with the system (168). 데이터 처리 명령어들의 스트림 내에 SIMD 코프로세서 명령어들이 임베딩된다. SIMD coprocessor instructions are embedded in the stream of data processing instructions. 메인 프로세서(166)의 디코더(165)는, 이러한 SIMD 코프로세서 명령어들을, 부착된 SIMD 코프로세서(161)에 의해 실행되어야 하는 타입의 것으로서 인식한다. The main processor of the decoder 166, 165 will be recognized as a type that should be executed by the SIMD coprocessor 161 is attached to these SIMD coprocessor instructions. 따라서, 메인 프로세서(166)는 코프로세서 버스(171) 상에 이러한 SIMD 코프로세서 명령어들(또는 SIMD 코프로세서 명령어들을 나타내는 제어 신호들)을 발행하고, 이러한 명령어들은 임의의 부착된 SIMD 코프로세서들에 의해 코프로세서 버스로부터 수신된다. Accordingly, the main processor 166 is a co-processor bus 171, these SIMD coprocessor instructions on the publication (or SIMD co-control signals indicative of processor instructions), and these commands are any attached SIMD coprocessors It is received from the bus by the coprocessor. 이 경우, SIMD 코프로세서(161)는 그것을 위해 의도되는 임의의 수신된 SIMD 코프로세서 명령어들을 수락하고 실행할 것이다. In this case, SIMD coprocessor 161 will accept any of the received SIMD coprocessor instructions intended for it, and run.

SIMD 코프로세서 명령어들에 의한 처리를 위해 무선 인터페이스(169)를 통해 데이터가 수신될 수 있다. For processing by the SIMD coprocessor instructions to the data it can be received over the air interface (169). 일례에 있어서, 음성 통신이 디지털 신호의 형태로 수신될 수 있으며, 이는 음성 통신을 나타내는 디지털 오디오 샘플들을 재생하기 위해 SIMD 코프로세서 명령어들에 의해 처리될 수 있다. In one example, and the voice communication may be received in the form of digital signals, which can be processed by the SIMD coprocessor instructions to regenerate digital audio samples representative of the voice communications. 다른 예에 있어서, 압축된 오디오 및/또는 비디오가 디지털 비트 스트림의 형태로 수신될 수 있으며, 이는 디지털 오디오 샘플들 및/또는 모션 비디오 프레임들을 재생하기 위해 SIMD 코프로세서 명령어들에 의해 처리될 수 있다. In another example, and the compressed audio and / or video may be received in the form of a digital bit stream, which can be processed by the SIMD coprocessor instructions to regenerate digital audio samples and / or motion video frames . 처리 코어(170)의 일 실시예에 있어서, 메인 프로세서(166) 및 SIMD 코프로세서(161)는, 실행 유닛(162), 레지스터 파일(들)(164)의 세트, 및 일 실시예에 따른 명령어들을 포함한 명령어 세트(163)의 명령어들을 인식하는 디코더(165)를 포함하는 단일의 처리 코어(170)로 통합된다. For one embodiment of processing core 170, main processor 166 and a SIMD coprocessor 161, the instructions of the set, and in one embodiment of the execution unit 162, register file (s) 164 It is integrated into a single processing core 170 that includes a decoder 165 to recognize instructions of instruction set 163 including.

도 2는 본 발명의 일 실시예에 따른 명령어들을 수행하는 로직 회로들을 포함하는 프로세서(200)에 대한 마이크로아키텍처의 블록도이다. Figure 2 is a block diagram of the micro-architecture for a processor 200 that includes logic circuitry that performs the instructions, according to one embodiment of the present invention. 일부 실시예들에서, 일 실시예에 따른 명령어는, 단정도(single precision) 및 배정도(double precision) 정수 및 부동 소수점 데이터타입들과 같은 데이터타입들뿐만 아니라, 바이트, 워드, 더블워드, 쿼드워드 등의 크기들을 갖는 데이터 요소들에 대해 연산하도록 구현될 수 있다. In some embodiments, the instructions, according to one embodiment, single-precision (single precision) and double precision, as well as data types, such as (double precision) integer and floating-point data type, a byte, word, doubleword, quadword It may be configured to operation on data elements having sizes of like. 일 실시예에서, 순차(in-order) 프론트 엔드(201)는, 실행될 명령어들을 페치하여 이들을 프로세서 파이프라인에서 나중에 이용되도록 준비하는 프로세서(200)의 일부이다. In one embodiment, a part of the sequence (in-order) front-end 201 includes a processor 200 that is ready to be fetched by using them later in the processor pipeline of instructions to be executed. 프론트 엔드(201)는 수개의 유닛을 포함할 수 있다. Front-end 201 may include several units. 일 실시예에서, 명령어 프리페처(instruction prefetcher)(226)는 메모리로부터 명령어들을 페치하고 이들을 명령어 디코더(228)에 피딩하고, 다음에 명령어 디코더는 명령어들을 디코딩하거나 해석한다. In one embodiment, the instruction prefetcher (instruction prefetcher) (226) fetches instructions from memory and feeding them to the instruction word decoder 228, the instruction decoder then decodes and interpret instructions. 예를 들어, 일 실시예에서, 디코더는, 수신된 명령어를, 머신이 실행할 수 있는 "마이크로명령어들" 또는 "마이크로연산들"(마이크로-op 또는 uop들로 또한 지칭됨)이라고 불리는 하나 이상의 연산으로 디코딩한다. For example, in one embodiment, the decoder, that the received command, the machine is run, "the micro-instruction" or "micro-operations" (also referred to as micro -op or uop) one or more operations known as the decoded. 다른 실시예들에서, 디코더는, 명령어를, 일 실시예에 따른 연산들을 수행하기 위해서 마이크로아키텍처에 의해 이용되는 오피코드 및 대응하는 데이터 및 제어 필드들로 파싱한다. In other embodiments, the decoder, parses the command, to the data and control fields for opcode and response are used by the micro-architecture in order to perform operations according to one embodiment. 일 실시예에서, 트레이스 캐시(230)는 디코딩된 uop들을 취하여, 이들을 실행을 위해 uop 큐(234)에서 프로그램 정렬된 시퀀스들 또는 트레이스들로 어셈블링한다. In one embodiment, the trace cache 230 is assembled in the uop queue 234 for taking the decoded uop, these run into the sequences or traces arranged program. 트레이스 캐시(230)가 복합 명령어를 만날 때, 마이크로코드 ROM(232)은 연산을 완료하는데 필요한 uop들을 제공한다. When the trace cache 230 encounters a complex instruction, the microcode ROM (232) provides a uop required to complete the operation.

일부 명령어들은 단일의 마이크로-op로 변환되는 한편, 다른 것들은 전체 연산(full operation)을 완료하는데 수개의 마이크로-op를 필요로 한다. Some instructions may be converted into a single micro -op the other hand, others require several micro -op to complete the entire operation (full operation). 일 실시예에서, 명령어를 완료하는데 4개보다 많은 마이크로-op가 필요한 경우, 디코더(228)는 이 명령어를 완료하기 위해 마이크로코드 ROM(232)에 액세스한다. In one embodiment, when to complete the instruction requires more than four micro -op, the decoder 228 accesses the microcode ROM (232) in order to complete the command. 일 실시예에 있어서, 명령어는 명령어 디코더(228)에서 처리하기 위한 작은 수의 마이크로-op들로 디코딩될 수 있다. In one embodiment, the instruction may be decoded into a small number of micro -op for processing in the instruction decoder 228. 다른 실시예에서, 연산을 달성하는데 다수의 마이크로-op가 필요한 경우, 명령어는 마이크로코드 ROM(232) 내에 저장될 수 있다. In another embodiment, to achieve the operations required a large number of micro -op, instructions may be stored in a microcode ROM (232). 트레이스 캐시(230)는, 마이크로코드 ROM(232)으로부터 일 실시예에 따른 하나 이상의 명령어를 완료하기 위한 마이크로코드 시퀀스들을 판독하기 위해 올바른 마이크로명령어 포인터를 결정하기 위해서 엔트리 포인트 프로그램가능 로직 어레이(PLA: programmable logic array)를 참조한다. A trace cache 230, a microcode ROM (232) of one embodiment to determine a correct micro-instruction pointer for reading the microcode sequences for completing one or more instructions in accordance with an example entry point programmable logic array from (PLA: refer to the programmable logic array). 마이크로코드 ROM(232)이 명령어에 대한 마이크로-op들의 시퀀싱을 완료한 이후에, 머신의 프론트 엔드(201)는 트레이스 캐시(230)로부터 마이크로-op들을 페치하는 것을 재개한다. A microcode ROM (232), a front end (201) of the machine after completion of the sequencing of micro -op for this command will resume fetching micro -op from the trace cache (230).

비순차(out-of-order) 실행 엔진(203)은 명령어들이 실행을 위해 준비되는 곳이다. Out-of-order (out-of-order), the execution engine 203 is where the instructions are ready for execution. 비순차 실행 로직은, 명령어들이 파이프라인으로 가서(go down) 실행을 위해 스케줄링됨에 따라 성능을 최적화하기 위해서 명령어들의 흐름을 평활화하고 재정렬하는 다수의 버퍼를 갖는다. Out-of-order execution logic has a number of instructions are for smoothing buffer and reorder the flow of instructions to optimize performance as scheduled for the execution, go to the pipeline (go down). 할당자 로직은 실행을 위해 각각의 uop가 필요로 하는 머신 버퍼들 및 자원들을 할당한다. Allocator logic allocates the machine buffers and resources that each uop needs in order to run. 레지스터 리네이밍 로직은 레지스터 파일에서의 엔트리들 상으로 로직 레지스터들을 리네이밍한다. Register renaming logic re-naming a logic registers onto entries in a register file. 또한, 할당자는, 명령어 스케줄러들: 메모리 스케줄러, 고속 스케줄러(202), 저속/일반 부동 소수점 스케줄러(204) 및 단순 부동 소수점 스케줄러(206)의 앞에, 2개의 uop 큐들(메모리 연산들에 대한 하나 및 비메모리 연산들에 대한 하나) 중 하나에서 각각의 uop에 대한 엔트리를 할당한다. In addition, he is assigned, the instruction schedulers: in front of the memory scheduler, fast scheduler 202, slow / general floating point scheduler 204, and simple floating point scheduler 206, one of the two uop queues (memory operation, and It allocates an entry for each uop in one of a) for non-memory operations. uop 스케줄러들(202, 204, 206)은, uop들이 그들의 연산을 완료하는데 필요로 하는 실행 자원들의 이용가능성, 및 그들의 종속 입력 레지스터 피연산자 소스들(dependent input register operand sources)의 준비성(readiness)에 기초하여, uop가 실행될 준비가 된 때를 결정한다. The uop schedulers 202, 204, 206 is based on the readiness (readiness) of the uop that the availability of the execution resources that need to complete their operation, and their dependent input register operand sources (dependent input register operand sources) to, to determine when a uop is ready to run. 일 실시예의 고속 스케줄러(202)는 메인 클록 사이클의 각각의 절반마다 스케줄링할 수 있는 한편, 다른 스케줄러들은 단지 메인 프로세서 클록 사이클마다 한번 스케줄링할 수 있다. One embodiment of a high-speed scheduler 202, while the other schedulers can be scheduled for each half of the main clock cycle may only schedule once per main processor clock cycle. 스케줄러들은 디스패치 포트들이 실행을 위해 uop들을 스케줄링하는 것을 중재한다. Schedulers arbitrate for the dispatch ports that are uop scheduling for execution.

레지스터 파일들(208, 210)은 실행 블록(211)에서의 실행 유닛들(212, 214, 216, 218, 220, 222, 224)과 스케줄러들(202, 204, 206) 사이에 있다. The register file (208, 210) is between the execution unit in execute block 211 (212, 214, 216, 218, 220, 222, 224) with the scheduler (202, 204, 206). 정수 연산 및 부동 소수점 연산 각각을 위한 별개의 레지스터 파일(208, 210)이 존재한다. A separate register file 208, 210, for integer and floating point operations, respectively, are present. 일 실시예의 각각의 레지스터 파일(208, 210)은, 레지스터 파일에 아직 기입되지 않은 막 완료된 결과들을 새로운 종속 uop들에 포워딩하거나 바이패스할 수 있는 바이패스 네트워크를 또한 포함한다. One embodiment, each of the register file (208, 210), forward the just completed results that have not yet been written into the register file to new dependent or uop also include a bypass network that can bypass. 정수 레지스터 파일(208) 및 부동 소수점 레지스터 파일(210)은 또한 다른 것과 데이터를 통신할 수 있다. An integer register file 208 and the floating-point register file 210 may also communicate with the other as data. 일 실시예에 있어서, 정수 레지스터 파일(208)은 2개의 별개의 레지스터 파일, 즉 데이터의 하위 32 비트에 대한 하나의 레지스터 파일 및 데이터의 상위 32 비트에 대한 제2 레지스터 파일로 분리된다. In one embodiment, the integer register file 208 is split into two separate register files, i.e., a second register file for the high 32 bits of the register file and data for the lower 32 bits of the data. 일 실시예의 부동 소수점 레지스터 파일(210)은 128 비트 폭의 엔트리들을 갖는데, 그 이유는 부동 소수점 명령어들이 통상적으로 폭이 64 내지 128 비트인 피연산자들을 갖기 때문이다. One embodiment of a floating-point register file 210 gatneunde entries of 128 bits wide, because floating point instructions typically have operands has a width which is 64 to 128 bits.

실행 블록(211)은 명령어들이 실제로 실행되는 실행 유닛들(212, 214, 216, 218, 220, 222, 224)을 포함한다. The execution block 211 contains the execution units in which instructions are actually executed (212, 214, 216, 218, 220, 222, 224). 이 섹션은, 마이크로명령어들이 실행하는데 필요로 하는 정수 및 부동 소수점 데이터 피연산자 값들을 저장하는 레지스터 파일들(208, 210)을 포함한다. This section, comprises the register file (208, 210) for storing integer and floating point data operand values ​​that are required to execute the micro instruction. 일 실시예의 프로세서(200)는 다수의 실행 유닛: 어드레스 생성 유닛(AGU: address generation unit)(212), AGU(214), 고속 ALU(216), 고속 ALU(218), 저속 ALU(220), 부동 소수점 ALU(222), 부동 소수점 이동 유닛(224)으로 구성된다. One embodiment of a processor 200 includes a plurality of execution units: address generation unit (AGU: address generation unit) (212), AGU (214), high-speed ALU (216), high-speed ALU (218), low-speed ALU (220), It consists of a floating-point ALU (222), floating point move unit 224. 일 실시예에 있어서, 부동 소수점 실행 블록들(222, 224)은 부동 소수점, MMX, SIMD 및 SSE, 또는 다른 연산들을 실행한다. In one embodiment, the floating point execution blocks 222, 224 should execute floating point, MMX, SIMD, and SSE, or other operations. 일 실시예의 부동 소수점 ALU(222)는, 제산, 제곱근 및 나머지 마이크로-op들을 실행하는 64 비트 x 64 비트 부동 소수점 제산기(divider)를 포함한다. One embodiment of a floating-point ALU (222) includes a 64-bit x 64-bit floating point divider (divider) for executing the division, and square root of the remaining micro -op. 본 발명의 실시예들에 있어서, 부동 소수점 값을 수반하는 명령어들은 부동 소수점 하드웨어로 핸들링될 수 있다. In embodiments of the present invention, instructions involving the floating point values ​​can be handled as a floating point hardware. 일 실시예에서, ALU 연산들은 고속 ALU 실행 유닛들(216, 218)로 간다. In one embodiment, ALU operations are going to the high-speed ALU execution units 216, 218. 일 실시예의 고속 ALU들(216, 218)은 클록 사이클의 절반의 유효 레이턴시로 고속 연산들을 실행할 수 있다. In one embodiment of a high-speed ALU (216, 218) is able to carry out high-speed operation to the effective latency of half a clock cycle. 일 실시예에 있어서, 가장 복잡한 정수 연산들은 저속 ALU(220)로 가는데, 그 이유는 저속 ALU(220)가, 승산기(multiplier), 시프트, 플래그 로직 및 분기 처리와 같이, 긴 레이턴시 타입의 연산들을 위한 정수 실행 하드웨어를 포함하기 때문이다. For one embodiment, most complex integer operations are going to the low-speed ALU (220), The reason is that as the slow ALU (220), a multiplier (multiplier), shifts, flag logic, and branch processing, the operation of the long latency type for due to include an integer execution hardware. 메모리 로드/스토어 연산들이 AGU들(212, 214)에 의해 실행된다. Memory load / store operations are executed by the AGU (212, 214). 일 실시예에 있어서, 정수 ALU들(216, 218, 220)은 64 비트 데이터 피연산자들에 대해 정수 연산들을 수행하는 콘텍스트에서 설명된다. In one embodiment, the integer ALU (216, 218, 220) is described in the context of performing integer operations on 64 bit data operands. 대안적인 실시예들에서, ALU들(216, 218, 220)은, 16, 32, 128, 256 등을 비롯한 각종 데이터 비트를 지원하도록 구현될 수 있다. In alternative embodiments, the ALU (216, 218, 220) may be implemented to support a variety of data bits including such as 16, 32, 128, 256. 유사하게, 부동 소수점 유닛들(222, 224)은 다양한 폭들의 비트들을 갖는 피연산자들의 범위를 지원하도록 구현될 수 있다. Similarly, the floating point units 222 and 224 may be implemented to support a range of operands having bits of various widths. 일 실시예에 있어서, 부동 소수점 유닛들(222, 224)은, SIMD 및 멀티미디어 명령어들과 관련하여 128 비트 폭의 패킹된 데이터 피연산자들에 대해 연산할 수 있다. In one embodiment, the floating point units 222 and 224 are, in connection with SIMD and multimedia instructions can be calculated for the 128-bit wide packed data operands.

일 실시예에서, uop들 스케줄러들(202, 204, 206)은, 페어런트 로드(parent load)가 실행을 완료하기 이전에 종속 연산들을 디스패치한다. In one embodiment, the uop schedulers 202, 204, 206 is, the dispatch dependent operations before the parent load (load parent) to complete the run. uop들이 추측적으로 프로세서(200)에서 스케줄링되고 실행되므로, 프로세서(200)는 메모리 부적중(memory misses)을 핸들링하는 로직을 또한 포함한다. Since uop are speculatively scheduled and executed in the processor 200, the processor 200 also includes logic for handling of memory charm (memory misses). 데이터 로드가 데이터 캐시에서 부적중되는 경우, 일시적으로 부정확한 데이터를 갖는 스케줄러를 떠난, 파이프라인에서 인 플라이트(in flight)인 종속 연산들이 존재할 수 있다. If the data to be loaded in the data cache of the talisman, there may be left the scheduler with temporarily incorrect data, the dependency of the flight (in flight) in the pipeline operation. 리플레이 메커니즘이 부정확한 데이터를 이용하는 명령어들을 추적하여 재실행한다. The Redo command to track the replay mechanism using inaccurate data. 종속 연산들만이 리플레이될 필요가 있고, 독립 연산들은 완료되는 것이 허용된다. Only the dependent operations need to be replayed, and independent operations are allowed to complete. 프로세서의 일 실시예의 스케줄러들 및 리플레이 메커니즘은 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어들을 캐치하도록 또한 설계된다. One embodiment of a scheduler and replay mechanism of the processor is also designed to catch instructions that provide a SIMD vector population count functionality.

"레지스터들"이라는 용어는, 피연산자들을 식별하기 위해 명령어들의 일부로서 이용되는 온-보드 프로세서 스토리지 위치들을 지칭할 수 있다. The term "registers" is one that is used as part of instructions to identify operands may refer to the board processor storage locations. 다시 말하면, 레지스터들은 (프로그래머의 관점에서) 프로세서의 외부로부터 이용가능한 것들일 수 있다. In other words, the registers can be those available from the outside of the processor (from a programmer's perspective). 그러나, 실시예의 레지스터들은 의미에 있어서 특정 타입의 회로에 제한되어서는 안 된다. However, the embodiment of the register should not be limited to a particular type of circuit according to the sense. 오히려, 실시예의 레지스터는 데이터를 저장 및 제공할 수 있고, 본 명세서에 설명된 기능들을 수행할 수 있다. Rather, the embodiment of the register may provide storage of data and may perform the functions described herein. 본 명세서에 설명된 레지스터들은, 전용 물리적 레지스터들, 레지스터 리네이밍을 이용하여 동적으로 할당된 물리적 레지스터들, 전용 물리적 레지스터들과 동적으로 할당된 물리적 레지스터들의 조합 등과 같이, 임의의 개수의 상이한 기술들을 이용하여 프로세서 내의 회로에 의해 구현될 수 있다. Such as present in the registers, only the physical registers described in the specification, the register resources of the physical register dynamically assigned by a naming, dedicated physical registers and dynamic combination of the physical register allocated, different techniques of any number of utilized can be implemented by circuitry within a processor. 일 실시예에서, 정수 레지스터들은 32 비트 정수 데이터를 저장한다. In one embodiment, integer registers store 32 bit integer data. 일 실시예의 레지스터 파일은 패킹된 데이터에 대한 8개의 멀티미디어 SIMD 레지스터를 또한 포함한다. One embodiment of a register file also contains eight multimedia SIMD registers for packed data. 이하의 논의에 있어서, 레지스터들은, 캘리포니아주 산타 클라라에 있는 인텔 코포레이션으로부터의 MMX 기술로 인에이블된 마이크로프로세서들에서의 64 비트 폭의 MMX™ 레지스터들(일부 경우에 'mm' 레지스터들로 또한 지칭됨)과 같이, 패킹된 데이터를 유지하도록 설계된 데이터 레지스터들인 것으로 이해된다. In the following discussion, registers, CA in Santa Clara MMX technology in the MMX ™ 64-bit width in the enabled microprocessor registers from the Intel Corporation in (also referred to in some cases as the 'mm' registers as search), and which are understood to be data registers designed to hold packed data. 정수 형태 및 부동 소수점 형태 양쪽 모두로 이용가능한 이러한 MMX 레지스터들은 SIMD 및 SSE 명령어들을 동반하는 패킹된 데이터 요소들에 대해 동작할 수 있다. These MMX registers available in both integer and floating point forms both may be operating on packed data elements that accompany SIMD and SSE instructions. 유사하게, SSE2, SSE3, SSE4 또는 그 이상의(일반적으로, "SSEx"로 지칭됨) 기술에 관한 128 비트 폭의 XMM 레지스터들도 또한 이러한 패킹된 데이터 피연산자들을 유지하는데 이용될 수 있다. Similarly, SSE2, SSE3, SSE4 or more may be used in a register of 128 bits wide XMM about (in general, referred to as "SSEx") technology is also to maintain such a packed data operand. 일 실시예에서, 패킹된 데이터 및 정수 데이터를 저장하는데 있어서, 레지스터들은 2개의 데이터 타입을 구별할 필요는 없다. In one embodiment, the method for storing packed data and integer data, the registers do not need to differentiate between the two data types. 일 실시예에서, 정수 및 부동 소수점은 동일한 레지스터 파일 또는 상이한 레지스터 파일들에 포함된다. In one embodiment, the integer and floating point register files are included in the same or a different register file. 또한, 일 실시예에서, 부동 소수점 및 정수 데이터는 상이한 레지스터들 또는 동일한 레지스터들에 저장될 수 있다. Further, in one embodiment, the floating-point and integer data may be stored in different registers or the same register.

다음의 도면들의 예들에서, 다수의 데이터 피연산자가 설명된다. In the examples of the following figures, a number of data operands are described. 도 3a는 본 발명의 일 실시예에 따른 멀티미디어 레지스터들에서의 다양한 패킹된 데이터 타입 표현들을 도시한다. Figure 3a illustrates various packed data type representations in multimedia registers according to one embodiment of the present invention. 도 3a는 128 비트 폭의 피연산자들에 있어서 패킹된 바이트(310), 패킹된 워드(320) 및 패킹된 더블워드(dword)(330)에 대한 데이터 타입들을 도시한다. Figure 3a shows the data type for the byte 310, a packed word 320, and packed doubleword (dword) (330) packed according to a 128-bit wide operand. 이 예의 패킹된 바이트 포맷(310)은 128 비트 길이이고, 16개의 패킹된 바이트 데이터 요소를 포함한다. In this example, packed byte format 310 is 128 bits long and contains sixteen packed byte data elements. 바이트는 여기서 8 비트 데이터로서 정의된다. Byte is defined here as 8 bits of data. 각각의 바이트 데이터 요소에 대한 정보는 바이트 0에 대하여 비트 7 내지 비트 0에 저장되고, 바이트 1에 대하여 비트 15 내지 비트 8에 저장되고, 바이트 2에 대하여 비트 23 내지 비트 16에 저장되고, 최종적으로 바이트 15에 대하여 비트 120 내지 비트 127에 저장된다. And information for each byte data element is stored in bit 7 through bit 0 for byte 0, it is stored in the bit 15 through bit 8 for byte 1, and stored in bit 23 to bit 16 for the byte 2, and finally It is stored in bit 120 through bit 127 for byte to 15. 따라서, 모든 이용가능한 비트가 레지스터에서 이용된다. Thus, all available bits are used in the register. 이러한 스토리지 배열은 프로세서의 스토리지 효율을 증가시킨다. This storage arrangement increases the storage efficiency of the processor. 또한, 16개의 데이터 요소가 액세스되는 경우, 16개의 데이터 요소에 대해 하나의 연산이 병렬로 수행될 수 있다. Also, if the 16 data elements accessed, one operation on the 16 data elements can be performed in parallel.

일반적으로, 데이터 요소는 동일한 길이의 다른 데이터 요소들과 함께 단일의 레지스터 또는 메모리 위치에 저장되는 개별 데이터 조각이다. Generally, a data element is an individual piece of data that is stored in a single register or memory location with other data elements of the same length. SSEx 기술에 관한 패킹된 데이터 시퀀스들에서, XMM 레지스터에 저장되는 데이터 요소들의 개수는 128 비트를 개별 데이터 요소의 비트 길이로 나눈 것이다. In the data sequence related to the packing SSEx technology, the number of data elements to be stored in a XMM register is 128 bits divided by the length in bits of an individual data element. 유사하게, MMX 및 SSE 기술에 관한 패킹된 데이터 시퀀스들에서, MMX 레지스터에 저장되는 데이터 요소들의 개수는 64 비트를 개별 데이터 요소의 비트 길이로 나눈 것이다. Similarly, in packed data sequences relating to MMX and SSE technology, the number of data elements to be stored in the MMX register is 64 bits divided by the length in bits of an individual data element. 도 3a에 도시된 데이터 타입들은 128 비트 길이이지만, 본 발명의 실시예들은 64 비트 폭, 256 비트 폭, 512 비트 폭, 또는 다른 크기의 피연산자들에 대해 또한 동작할 수 있다. Although the data types are 128 bits in length as shown in Figure 3a, an embodiment of the present invention can also operate on 64-bit wide, 256 bits wide, 512 bits wide, or other sizes of operands. 이 예의 패킹된 워드 포맷(320)은 128 비트 길이이고, 8개의 패킹된 워드 데이터 요소를 포함한다. In this example, packed word format 320 is 128 bits long and contains eight packed word data elements. 각각의 패킹된 워드는 16 비트의 정보를 포함한다. Each packed word contains 16 bits of information. 도 3a의 패킹된 더블워드 포맷(330)은 128 비트 길이이고, 4개의 패킹된 더블워드 데이터 요소를 포함한다. The doubleword format 330 of Fig. 3a packing is 128 bits long and contains four packed doubleword data elements. 각각의 패킹된 더블워드 데이터 요소는 32 비트의 정보를 포함한다. Each packed doubleword data element contains 32 bits of information. 패킹된 쿼드워드는 128 비트 길이이고, 2개의 패킹된 쿼드워드 데이터 요소를 포함한다. A packed quadword is 128 bits long and contains two packed quadword data elements.

도 3b는 대안적인 레지스터내(in-register) 데이터 스토리지 포맷들을 도시한다. Figure 3b illustrates an alternative in register (in-register) the data storage format. 각각의 패킹된 데이터는 하나보다 많은 독립적인 데이터 요소를 포함할 수 있다. Each of the packed data may include a number of independent data points than one. 3개의 패킹된 데이터 포맷, 즉 패킹된 하프(packed half)(341), 패킹된 싱글(packed single)(342) 및 패킹된 더블(packed double)(343)이 도시되어 있다. Three packed data formats, that is, half the packing (packed half) (341), a single packing (packed single) (342) and a double packing (packed double) (343) is shown. 패킹된 하프(341), 패킹된 싱글(342) 및 패킹된 더블(343)의 일 실시예는 고정 소수점 데이터 요소들을 포함한다. One embodiment of packed half 341, packed single 342 and packed double 343 may include the fixed-point data elements. 대안적인 실시예에 있어서, 패킹된 하프(341), 패킹된 싱글(342) 및 패킹된 더블(343) 중 하나 이상은 부동 소수점 데이터 요소들을 포함할 수 있다. In an alternative embodiment, a packed half 341, one or more of the packed single 342 and packed double 343 may contain floating-point data elements. 패킹된 하프(341)의 하나의 대안적인 실시예는 8개의 16-비트 데이터 요소를 포함하는 128 비트 길이이다. One alternative embodiment of packed half 341 is eight bits long containing eight 16-bit data elements. 패킹된 싱글(342)의 일 실시예는 128 비트 길이이고, 4개의 32-비트 데이터 요소를 포함한다. One embodiment of packed single 342 is 128 bits long and contains four 32-bit data elements. 패킹된 더블(343)의 일 실시예는 128 비트 길이이고, 2개의 64-비트 데이터 요소를 포함한다. One embodiment of packed double 343 is 128 bits long and contains two 64-bit data elements. 이러한 패킹된 데이터 포맷들은 다른 레지스터 길이들로, 예를 들어 96-비트, 160-비트, 192-비트, 224-비트, 256-비트, 512-비트 또는 그 이상으로 추가로 확장될 수 있다는 것이 인식될 것이다. These packed data formats appreciated that in other register lengths, for example 96-bit, 160-bit, 192-bit, 224- bit, 256-bit, 512-bit or can be extended to more than to more It will be.

도 3c는 본 발명의 일 실시예에 따른 멀티미디어 레지스터들에서의 다양한 부호있는(signed) 그리고 부호없는(unsigned) 패킹된 데이터 타입 표현들을 도시한다. Figure 3c shows the various marks (signed) and unsigned (unsigned) the packed data type representations in multimedia registers according to one embodiment of the present invention. 부호없는 패킹된 바이트 표현(344)은 SIMD 레지스터에서의 부호없는 패킹된 바이트의 스토리지를 나타낸다. Packed sign bytes no expression 344 represents the storage of a signed packed byte in a SIMD register no. 각각의 바이트 데이터 요소에 대한 정보는 바이트 0에 대하여 비트 7 내지 비트 0에 저장되고, 바이트 1에 대하여 비트 15 내지 비트 8에 저장되고, 바이트 2에 대하여 비트 23 내지 비트 16에 저장되거나 하고, 최종적으로 바이트 15에 대하여 비트 120 내지 비트 127에 저장된다. Is stored in the information bit 7 through bit 0 for byte 0 for each byte data element is stored in bit 15 through bit 8 for byte 1, stored in bit 23 to bit 16 for the byte 2 or, and finally as it stored in bit 120 through bit 127 for byte to 15. 따라서, 모든 이용가능한 비트가 레지스터에서 이용된다. Thus, all available bits are used in the register. 이러한 스토리지 배열은 프로세서의 스토리지 효율을 증가시킬 수 있다. This storage arrangement can increase the storage efficiency of the processor. 또한, 16개의 데이터 요소가 액세스되는 경우, 16개의 데이터 요소에 대해 하나의 연산이 병렬 방식으로 수행될 수 있다. On the contrary, if the sixteen data elements accessed, one operation on the 16 data elements may be performed in parallel. 부호있는 패킹된 바이트 표현(345)은 부호있는 패킹된 바이트의 스토리지를 나타낸다. Expression marks a packed byte 345 represents the storage of a signed packed byte. 모든 바이트 데이터 요소의 8번째 비트는 부호 표시자라는 점에 유의한다. The eighth bit of every byte data element is to be noted that grow display sign. 부호없는 패킹된 워드 표현(346)은 SIMD 레지스터에서 워드 7 내지 워드 0이 어떻게 저장되는지를 나타낸다. Marks the packed word representation without 346 indicates whether the word 7 to word 0 how stored in a SIMD register. 부호있는 패킹된 워드 표현(347)은 부호없는 패킹된 워드의 레지스터내 표현(346)과 유사하다. It marks the packed word representation 347 is similar in representation of a packed unsigned word register 346. 각각의 워드 데이터 요소의 16번째 비트는 부호 표시자라는 점에 유의한다. Each of the 16-th bit of the data element is to be noted that grow display sign. 부호없는 패킹된 더블워드 표현(348)은 더블워드 데이터 요소들이 어떻게 저장되는지를 나타낸다. Numeral packed doubleword representation without 348 shows how doubleword data elements are stored. 부호있는 패킹된 더블워드 표현(349)은 부호없는 패킹된 더블워드의 레지스터내 표현(348)과 유사하다. Numeral packed doubleword representation 349 is similar to the representation within the register of a packed doubleword 348. unsigned. 필요한 부호 비트는 각각의 더블워드 데이터 요소의 32번째 비트라는 점에 유의한다. Necessary sign bit is to be noted that each double word 32-th bit of the data element.

도 3d는 캘리포니아주 산타 클라라에 있는 인텔 코포레이션으로부터 월드 와이드 웹(www)의 intel.com/products/processor/manuals/ 상에서 입수가능한 "Intel® 64 and IA-32 Intel Architecture Software Developer's Manual Combined Volumes 2A and 2B: Instruction Set Reference AZ"에 설명되어 있는 오피코드 포맷의 타입과 대응하는 레지스터/메모리 피연산자 어드레싱 모드들, 및 32 이상의 비트를 갖는 연산 인코딩(오피코드) 포맷(360)의 일 실시예를 도시한다. Figure 3d intel.com/products/processor/manuals/, available on the World Wide Web (www) from Intel Corporation in Santa Clara, California, "Intel® 64 and IA-32 Intel Architecture Software Developer's Manual Combined Volumes 2A and 2B : the Instruction Set Reference AZ "Description is shown an embodiment of the opcode type and corresponding operations encoded with a register / memory operand addressing modes, and 32 or more bits of the format (opcode) format 360 in. 일 실시예에서, 명령어는 필드들(361 및 362) 중 하나 이상에 의해 인코딩될 수 있다. In one embodiment, the instructions may be encoded by one or more of the fields (361 and 362). 최대 2개의 소스 피연산자 식별자(364 및 365)를 포함하여, 명령어당 최대 2개의 피연산자 위치가 식별될 수 있다. , There are up to two operand locations per instruction may be identified, including up to two source operand identifiers (364 and 365). 일 실시예에 있어서, 목적지 피연산자 식별자(366)는 소스 피연산자 식별자(364)와 동일한 한편, 다른 실시예들에서는 그들은 상이하다. In one embodiment, they are different in the same hand, other embodiments and destination operand identifier 366 is the source operand identifier 364. 대안적인 실시예에 있어서, 목적지 피연산자 식별자(366)는 소스 피연산자 식별자(365)와 동일한 한편, 다른 실시예들에서는 그들은 상이하다. In an alternative embodiment, they are different in the same hand, other embodiments and destination operand identifier 366 is the source operand identifier 365. 일 실시예에서, 소스 피연산자 식별자들(364 및 365)에 의해 식별되는 소스 피연산자들 중 하나는 명령어의 결과들에 의해 겹쳐쓰기되는 한편, 다른 실시예들에서, 식별자(364)는 소스 레지스터 요소에 대응하고, 식별자(365)는 목적지 레지스터 요소에 대응한다. In one embodiment in the source operand identifiers (364 and 365) one of a source operand that is to be overwritten by the result of the instruction, while the other embodiment identified by the examples, the identifier 364 to a source register element It corresponds, and identifier 365 corresponds to a destination register element. 일 실시예에 있어서, 피연산자 식별자들(364 및 365)은 32-비트 또는 64-비트 소스 및 목적지 피연산자들을 식별하는데 이용될 수 있다. In one embodiment, the operands identifiers (364 and 365) may be used to identify 32-bit or 64-bit source and destination operands.

도 3e는 40 이상의 비트를 갖는 다른 대안적인 연산 인코딩(오피코드) 포맷(370)을 도시한다. Figure 3e shows another alternative operation encoding (opcode) format 370, having at least 40 bits. 오피코드 포맷(370)은 오피코드 포맷(360)과 대응하고, 선택적인 프리픽스 바이트(prefix byte)(378)를 포함한다. The operational code format 370 includes an opcode format 360 and a corresponding, and an optional prefix byte (prefix byte) (378). 일 실시예에 따른 명령어는 필드들(378, 371 및 372) 중 하나 이상에 의해 인코딩될 수 있다. Instruction in accordance with an embodiment may be encoded by one or more of the fields (378, 371 and 372). 명령어당 최대 2개의 피연산자 위치가 소스 피연산자 식별자들(374 및 375)에 의해 그리고 프리픽스 바이트(378)에 의해 식별될 수 있다. Up to two operand locations per instruction may be identified by a prefix byte and 378 by source operand identifiers (374 and 375). 일 실시예에 있어서, 프리픽스 바이트(378)는 32-비트 또는 64-비트 소스 및 목적지 피연산자들을 식별하는데 이용될 수 있다. In one embodiment, prefix byte 378 may be used to identify 32-bit or 64-bit source and destination operands. 일 실시예에 있어서, 목적지 피연산자 식별자(376)는 소스 피연산자 식별자(374)와 동일한 한편, 다른 실시예들에서는 그들은 상이하다. In one embodiment, they are different in the same hand, other embodiments and destination operand identifier 376 is the source operand identifier 374. 대안적인 실시예에 있어서, 목적지 피연산자 식별자(376)는 소스 피연산자 식별자(375)와 동일한 한편, 다른 실시예들에서는 그들은 상이하다. In an alternative embodiment, they are different in the same hand, other embodiments and destination operand identifier 376 is the source operand identifier 375. 일 실시예에서, 명령어는 피연산자 식별자들(374 및 375)에 의해 식별된 피연산자들 중 하나 이상에 대해 연산하고, 피연산자 식별자들(374 및 375)에 의해 식별된 하나 이상의 피연산자는 이 명령어의 결과들에 의해 겹쳐쓰기되는 한편, 다른 실시예들에서는 식별자들(374 및 375)에 의해 식별된 피연산자들은 다른 레지스터에서의 다른 데이터 요소에 기입된다. In one embodiment, the instructions are the result of the operand identifiers (374 and 375), the operation on one or more of the operands and one or more operands identified by operand identifiers (374 and 375) identified by this instruction the operands identified by the overlap of that letter, while the other embodiments by the identifiers (374 and 375) are written to another data element in another register. 오피코드 포맷들(360 및 370)은, 선택적인 스케일-인덱스-베이스(scale-index-base) 및 변위 바이트들에 의해 그리고 MOD 필드들(363 및 373)에 의해 부분적으로 특정되는 레지스터 대 레지스터(register to register), 메모리 대 레지스터(memory to register), 레지스터 바이 메모리(register by memory), 레지스터 바이 레지스터(register by register), 레지스터 바이 즉시(register by immediate), 레지스터 대 메모리(register to memory) 어드레싱을 허용한다. The opcode in formats (360 and 370), an optional scale-index-base (scale-index-base) and the and the MOD field by the displacement bytes (363 and 373) registers for registers that are partially specified by the ( register to register), memory-to-register (memory to register), register by memory (register by memory), register by register (register by register), register by immediate (register by immediate), a register-to-memory (register to memory) addressed permits.

다음에 도 3f를 참조하면, 일부 대안적인 실시예들에서, 64-비트(또는 128-비트, 또는 256-비트, 또는 512-비트 또는 그 이상) SIMD(single instruction multiple data) 산술 연산들이 CDP(coprocessor data processing) 명령어를 통해 수행될 수 있다. The next reference to Figure 3f, in some alternative embodiments for example, 64-bit (or 128-bit, or 256-bit, or 512 bit or higher) SIMD (single instruction multiple data) arithmetic operations to CDP ( It may be performed through the coprocessor data processing) instruction. 연산 인코딩(오피코드) 포맷(380)은 CDP 오피코드 필드들(382 및 389)을 갖는 하나의 이러한 CDP 명령어를 도시한다. The operation encoding (opcode) format 380 depicts one such CDP instruction having CDP opcode fields of the (382 and 389). 대안적인 실시예들에 있어서, 이러한 타입의 CDP 명령어 연산들은 필드들(383, 384, 387 및 388) 중 하나 이상에 의해 인코딩될 수 있다. In alternative embodiments, CDP instruction operation of this type may be encoded by one or more of the fields (383, 384, 387 and 388). 최대 2개의 소스 피연산자 식별자들(385 및 390) 및 하나의 목적지 피연산자 식별자(386)를 포함하여, 명령어당 최대 3개의 피연산자 위치가 식별될 수 있다. Including up to two source operand identifiers s (385 and 390) and one destination operand identifier 386, there are up to three operand locations per instruction may be identified one. 코프로세서의 일 실시예는 8, 16, 32 및 64 비트 값들에 대해 연산할 수 있다. One embodiment of the coprocessor can operate on 8, 16, 32 and 64 bit values. 일 실시예에 있어서, 명령어가 정수 데이터 요소들에 대해 수행된다. In one embodiment, the instruction is performed on integer data elements. 일부 실시예들에서, 명령어가 조건 필드(381)를 이용하여 조건부로 실행될 수 있다. In some embodiments, the instructions can be executed conditionally, using condition field 381. 일부 실시예들에 있어서, 소스 데이터 크기들은 필드(383)에 의해 인코딩될 수 있다. In some embodiments, the source data sizes may be encoded by field 383. 일부 실시예들에서, SIMD 필드들에 대해 제로(Zero)(Z), 네거티브(negative)(N), 캐리(carry)(C) 및 오버플로우(overflow)(V) 검출이 행해질 수 있다. In some embodiments, a zero (Zero) (Z), negative (negative) (N), carry (V) (carry) (C) and the overflow (overflow) can be made to detect the SIMD fields. 일부 명령어들에 있어서, 포화의 타입은 필드(384)에 의해 인코딩될 수 있다. In some instructions, the type of saturation may be encoded by field 384.

다음에 도 3g를 참조하면, 캘리포니아주 산타 클라라에 있는 인텔 코포레이션으로부터 월드 와이드 웹(www)의 intel.com/products/processor/manuals/ 상에서 입수가능한 "Intel® Advanced Vector Extensions Programming Reference"에 설명되어 있는 오피코드 포맷의 타입과 대응하는, 다른 실시예에 따른 SIMD 벡터 개체군 카운트 기능성을 제공하기 위한 다른 대안적인 연산 인코딩(오피코드) 포맷(397)이 도시되어 있다. Then Referring to FIG. 3g, which are described in the "Intel® Advanced Vector Extensions Programming Reference" intel.com/products/processor/manuals/, available on the World Wide Web (www) from Intel Corporation in Santa Clara, California operational type of code format and corresponding to that, another alternative operation encoding (opcode) format 397, for providing a SIMD vector population count functionality according to another embodiment is shown.

오리지널 x86 명령어 세트는, 제1 "오피코드" 바이트로부터 존재가 알려진 부가적인 바이트들에 포함된 즉시 피연산자(immediate operand) 및 어드레스 음절(address syllable)의 다양한 포맷들을 갖는 1-바이트 오피코드를 제공하였다. Original x86 instruction set, to give a 1-byte opcode has a variety of formats of the first "opcode" immediate operand (immediate operand), and an address syllable (address syllable) contained in the additional byte is present is known from byte . 부가적으로, (명령어 이전에 배치되어야 하였기 때문에 프리픽스들로 지칭되는) 오피코드에 대한 수정자들(modifiers)로서 예약되었던 특정 바이트 값들이 존재하였다. Additionally, to a specific byte value were reserved as a modifier of (modifiers) for opcode (because it must be placed before the instruction that is referred to as prefix) were present. (이러한 특정 프리픽스 값들을 포함하는) 256 오피코드 바이트들의 오리지널 팔레트가 고갈되었을 때, 256개의 오피코드들의 새로운 세트로의 이스케이프(escape)로서 단일의 바이트가 전용되었다. , A single byte has been dedicated as an escape (escape) of a new set of 256 operational code when the original palette of (those containing a certain prefix value) 256. The opcode byte is depleted. 벡터 명령어들(예를 들어, SIMD)이 추가되었으므로, 더 많은 오피코드들에 대한 필요성이 생성되었고, 프리픽스들의 이용을 통해 확장된 경우라도, "2 바이트" 오피코드 맵은 또한 불충분하였다. The vector instruction (e.g., SIMD) has been added, the more the need was created for a number of opcodes, even when extended through the use of the prefix, opcode map is "2 byte" was also insufficient. 이를 위해, 새로운 명령어들이 부가적인 맵들에 추가되었으며, 이들은 2 바이트 및 선택적인 프리픽스를 식별자로서 이용한다. To this end, has been added to the new instructions are additional maps, which uses two bytes and an optional prefix as an identifier.

부가적으로, 64-비트 모드에서 부가적인 레지스터들을 용이하게 하기 위해서, 프리픽스들과 오피코드(및 오피코드를 결정하는데 필요한 임의의 이스케이프 바이트들) 사이에 부가적인 프리픽스("REX"로 지칭됨)가 이용될 수 있다. Additionally, to facilitate additional registers in 64-bit mode, (referred to as "REX") additional prefix among prefixes and opcode (opcode, and any escape of bytes needed for determining an) that can be used. 일 실시예에서, REX는 64-비트 모드에서의 부가적인 레지스터들의 이용을 표시하기 위해 4 "페이로드" 비트를 가질 수 있다. In one embodiment, REX may have 4 "payload" bits to indicate the use of additional registers in 64-bit mode. 다른 실시예들에서, 그것은 4보다 더 적거나 더 많은 비트를 가질 수 있다. In other embodiments, it may have fewer or more than four bits. (일반적으로 포맷(360) 및/또는 포맷(370)과 대응하는) 적어도 하나의 명령어 세트의 일반 포맷은 일반적으로 다음과 같이 예시된다: General Format of the (general format 360, and / or format 370 and corresponding to) at least one instruction set is generally illustrated as follows:

Figure 112016000754007-pct00001

오피코드 포맷(397)은 오피코드 포맷(370)과 대응하고, 다른 가장 일반적으로 이용되는 레거시 명령어 프리픽스 바이트들 및 이스케이프 코드들을 대체하기 위해 선택적인 VEX 프리픽스 바이트들(391)(일 실시예에서는 C4 hex로 시작함)을 포함한다. The opcode format 397 is in correspondence with opcode format 370 and the legacy instruction prefix byte, and optional VEX prefix bytes to replace the escape code that is used by other most commonly 391 (one embodiment of C4 It includes starting with hex). 예를 들어, 이하에서는 명령어를 인코딩하기 위해 2개의 필드를 이용하는 실시예를 예시하는데, 이는 제2 이스케이프 코드가 오리지널 명령어에 존재할 때, 또는 REX 필드에서 추가 비트들(예를 들어, XB 및 W 필드들)이 이용될 필요가 있을 때에 이용될 수 있다. For example, in the following the time to illustrate an embodiment using the two fields in order to encode the instructions, which is a second escape code present in the original instruction, or more bits in the REX field (e.g., XB and W fields s) may be used when there is a need to be used. 이하에 예시된 실시예에서, 레거시 이스케이프는 새로운 이스케이프 값으로 표현되고, 레거시 프리픽스들은 "페이로드" 바이트들의 일부로서 완전히 압축되고, 레거시 프리픽스들은 리클레이밍되어(reclaimed) 장래 확장에 이용가능하고, 제2 이스케이프 코드는 장래 맵 또는 피처 공간이 이용가능한 "맵" 필드에 압축되고, 새로운 피처들이 추가된다(예를 들어, 증가된 벡터 길이 및 부가적인 소스 레지스터 특정자). In the embodiment illustrated below, legacy escape is represented by a new escape value, legacy prefixes are fully compressed as part of the "payload" bytes, legacy prefixes are to be used for the Ming Li Clay (reclaimed) future expansion, a second escape code is compressed in the "map" field in the future map or feature space available, is added to the new feature (e.g., increased vector length and an additional source register specified party).

Figure 112016000754007-pct00002

일 실시예에 따른 명령어는 필드들(391 및 392) 중 하나 이상에 의해 인코딩될 수 있다. Instruction in accordance with an embodiment may be encoded by one or more of the fields (391 and 392). 소스 피연산자 식별자들(374 및 375)과 결합하여 그리고 선택적인 스케일-인덱스-베이스(SIB) 식별자(393), 선택적인 변위 식별자(394) 및 선택적인 즉시 바이트(395)와 결합하여 필드(391)에 의해 명령어당 최대 4개의 피연산자 위치가 식별될 수 있다. In combination with a base (SIB) identifier 393, an optional displacement identifier 394, and an optional immediate byte 395 field 391 to source operand identifiers (374 and 375) and coupled to and optional scale-index there are up to four operand locations per instruction may be identified by. 일 실시예에 있어서, VEX 프리픽스 바이트들(391)은, 32-비트 또는 64-비트 소스 및 목적지 피연산자들 및/또는 128-비트 또는 256-비트 SIMD 레지스터 또는 메모리 피연산자들을 식별하는데 이용될 수 있다. In one embodiment, the VEX prefix bytes 391, can be used to identify the 32-bit or 64-bit source and destination operands, and / or 128-bit or 256-bit SIMD register or a memory operand. 일 실시예에 있어서, 오피코드 포맷(397)에 의해 제공된 기능성은 오피코드 포맷(370)과 중복될 수 있는 한편, 다른 실시예들에서는 그들은 상이하다. In one embodiment, the opcode format, the functionality provided by the 397 is performed opcode format 370 and that can be duplicated, while the other examples, they are different. 오피코드 포맷들(370 및 397)은, 선택적인 (SIB) 식별자(393), 선택적인 변위 식별자(394) 및 선택적인 즉시 바이트(395)에 의해 그리고 MOD 필드(373)에 의해 부분적으로 특정되는 레지스터 대 레지스터, 메모리 대 레지스터, 레지스터 바이 메모리, 레지스터 바이 레지스터, 레지스터 바이 즉시, 레지스터 대 메모리 어드레싱을 허용한다. The opcode format (370 and 397) are optional (SIB) identifier 393, an optional displacement identifier 394 and optional instant by bytes 395 and is partially specified by MOD fields 373 It allows a register for a register, memory to register, register by memory, register by register, register by immediate, register to memory addressing.

다음에 도 3h를 참조하면, 다른 실시예에 따른 SIMD 벡터 개체군 카운트 기능성을 제공하기 위한 다른 대안적인 연산 인코딩(오피코드) 포맷(398)이 도시되어 있다. The next reference to Figure 3h, is another alternative operation encoding (opcode) format 398, for providing a SIMD vector population count functionality in accordance with another embodiment is illustrated. 오피코드 포맷(398)은 오피코드 포맷들(370 및 397)과 대응하고, 다른 가장 일반적으로 이용되는 레거시 명령어 프리픽스 바이트들 및 이스케이프 코드들을 대체하고 부가적인 기능성을 제공하기 위해 선택적인 EVEX 프리픽스 바이트들(396)(일 실시예에서는 62 hex로 시작함)을 포함한다. The opcode format 398 is the opcode format of (370 and 397) and corresponding to the other most commonly legacy instruction is used as a prefix byte, and optional EVEX prefix byte to replace the escape code, and to provide additional functionality 396 includes (in one embodiment started to 62 hex). 일 실시예에 따른 명령어는 필드들(396 및 392) 중 하나 이상에 의해 인코딩될 수 있다. Instruction in accordance with an embodiment may be encoded by one or more of the fields (396 and 392). 소스 피연산자 식별자들(374 및 375)과 결합하여 그리고 선택적인 스케일-인덱스-베이스(SIB) 식별자(393), 선택적인 변위 식별자(394) 및 선택적인 즉시 바이트(395)와 결합하여 필드(396)에 의해 마스크 및 명령어당 최대 4개의 피연산자 위치가 식별될 수 있다. In combination with a base (SIB) identifier 393, an optional displacement identifier 394, and an optional immediate byte 395 field 396 to source operand identifiers (374 and 375) and coupled to and optional scale-index up to 4 there is an operand location can be identified by per mask, and instruction. 일 실시예에 있어서, EVEX 프리픽스 바이트들(396)은, 32-비트 또는 64-비트 소스 및 목적지 피연산자들 및/또는 128-비트, 256-비트 또는 512-비트 SIMD 레지스터 또는 메모리 피연산자들을 식별하는데 이용될 수 있다. In one embodiment, EVEX prefix bytes 396 is used to identify 32-bit or 64-bit source and destination operands, and / or 128-bit, 256-bit or 512-bit SIMD register or a memory operand It can be. 일 실시예에 있어서, 오피코드 포맷(398)에 의해 제공된 기능성은 오피코드 포맷들(370 또는 397)과 중복될 수 있는 한편, 다른 실시예들에서는 그들은 상이하다. In one embodiment, the opcode for the functional is the opcode format provided by the format 398 in the (370 or 397) and that can be duplicated, while the other embodiments they are different. 오피코드 포맷(398)은, 마스크들과 함께, 선택적인 (SIB) 식별자(393), 선택적인 변위 식별자(394) 및 선택적인 즉시 바이트(395)에 의해 그리고 MOD 필드(373)에 의해 부분적으로 특정되는 레지스터 대 레지스터, 메모리 대 레지스터, 레지스터 바이 메모리, 레지스터 바이 레지스터, 레지스터 바이 즉시, 레지스터 대 메모리 어드레싱을 허용한다. The opcode format 398, in part by with the mask, the selective (SIB) identifier 393, an optional displacement identifier 394 and and MOD fields 373 by selective immediate byte 395 which allows for a specific register for register, memory to register, register by memory, register by register, register by immediate, register to memory addressing. (일반적으로 포맷(360) 및/또는 포맷(370)과 대응하는) 적어도 하나의 명령어 세트의 일반 포맷은 일반적으로 다음과 같이 예시된다: General Format of the (general format 360, and / or format 370 and corresponding to) at least one instruction set is generally illustrated as follows:

Figure 112016000754007-pct00003

일 실시예에 있어서, EVEX 포맷(398)에 따라 인코딩된 명령어는, 예를 들어, 사용자 구성가능한 마스크 레지스터, 또는 부가적인 피연산자, 또는 128-비트, 256-비트 또는 512-비트 벡터 레지스터들 또는 선택할 더 큰 레지스터들 중의 선택 등과 같은 부가적인 새로운 피처들을 갖는 SIMD 벡터 개체군 카운트 기능성을 제공하기 위해 이용될 수 있는 부가적인 "페이로드" 비트들을 가질 수 있다. In one embodiment, the encoding instruction according to the format EVEX 398 is, for example, user configurable mask register, or additional operand, or 128-bit, 256-bit or 512-bit vector registers or selected more may be used may have additional "payload" bits in order to provide a SIMD vector population count functionality with additional new features, such as the selection of the large resistor.

예를 들어, VEX 포맷(397)은 마스크를 갖지 않는 SIMD 벡터 개체군 카운트 기능성을 제공하는데 이용될 수 있는 한편, EVEX 포맷(398)은 명시적인 사용자 구성가능한 마스크를 갖는 SIMD 벡터 개체군 카운트 기능성을 제공하는데 이용될 수 있다. For example, VEX format 397 is to be used to provide a SIMD vector population count functionality having no mask Meanwhile, EVEX format 398 is to provide a SIMD vector population count functionality with an explicit user configurable mask It can be used. 부가적으로, VEX 포맷(397)은 128-비트 또는 256-비트 벡터 레지스터들에 대해 SIMD 벡터 개체군 카운트 기능성을 제공하는데 이용될 수 있는 한편, EVEX 포맷(398)은 128-비트, 256-비트, 512-비트 또는 더 큰(또는 더 작은) 벡터 레지스터들에 대해 SIMD 벡터 개체군 카운트 기능성을 제공하는데 이용될 수 있다. Additionally, VEX format 397 is a 128-bit or 256-bit vector for the registers that can be used to provide a SIMD vector population count functionality other hand, EVEX format 398 is a 128-bit, 256-bit, for the 512-bit or more vector registers larger (or smaller) may be used to provide a SIMD vector population count functionality.

게놈 시퀀싱 및 정렬을 위해 SIMD 벡터 개체군 카운트 기능성을 제공하는 예시적인 명령어들이 다음의 예들에 의해 예시된다: Genome sequencing and illustrative instructions providing a SIMD vector population count functionality for the alignment are illustrated by the following examples:

Figure 112016000754007-pct00004

위의 예들에서와 같이, SIMD 개체군 카운트 명령어들은 게놈 시퀀싱 및 정렬 처리를 위해 이용될 수 있다는 것이 인식될 것이다. As illustrated in the above examples, SIMD population count instruction will be appreciated that the same may be used for genome sequencing and sorting process. 일부 다른 데이터베이스들, 데이터 마이닝 애플리케이션들 및 검색 애플리케이션들에서 또한 유사한 압축 스킴들이 이용되어, 위의 예들에 제시된 바와 같이, 이러한 애플리케이션들도 또한 SIMD 개체군 카운트 명령어들을 이용할 수 있게 된다. Some of the other databases, and similar compression scheme in the data-mining applications and search applications have been used, as shown in the above examples, these applications also is possible to also utilize the SIMD population count instruction.

게놈 정렬에 있어서의 일반적인 연산은, 염기-쌍 스트링들을 매칭하거나 부분적으로 매칭하기 위해서 스트링 내의 뉴클레오티드들의 출현들을 카운트하는 것이다. Typical operation of the genome alignment, a base-to count the occurrence of nucleotide in the string to the matching or partial matching of a pair of strings. (packedDna와 같은) 패킹된 데이터 포맷에 있어서, 기술들은, 스트링 내의 상이한 뉴클레오티드 출현들을 카운트하기 위해서 논리 연산들과 함께 비트단위 개체군 카운트들, 그리고/또는 시프트 및 마스크 연산들과 함께 룩업 테이블들의 이용을 수반할 수 있다. In a packed data format (such as packedDna), techniques, counting different nucleotide occurrence in the string, the use of look-up tables with s-bit units population count with logical operations, and / or a shift and mask operations to It may entail. 위의 예들에서와 같이 SIMD 개체군 카운트 명령어들을 이용함으로써, 스트링 내의 상이한 뉴클레오티드 출현들을 카운트하기 위해서 이전에 요구된 많은 연산이 제거될 수 있다. By using SIMD population count command as in the above examples, there are a number of previous operation is required to be removed in order to count different nucleotide occurrence in the string. 따라서, 게놈 시퀀싱 및 정렬 처리와 같은 애플리케이션들의 성능, 및 일반적으로는 데이터 마이닝과 같은 데이터베이스 애플리케이션들 및 검색 애플리케이션들에 대한 성능이 상당히 개선될 수 있다. Therefore, the performance of applications such as genome sequencing and alignment process, and usually has a performance for database applications and search applications such as data mining can be significantly improved.

도 4a는 본 발명의 적어도 하나의 실시예에 따른 순차 파이프라인 및 레지스터 리네이밍 스테이지, 비순차 발행/실행 파이프라인을 도시하는 블록도이다. Figure 4a is a block diagram illustrating at least one embodiment the sequential pipeline according to the examples and the register renaming stage, out-of-order issue / execution pipeline of the present invention. 도 4b는 본 발명의 적어도 하나의 실시예에 따른 프로세서에 포함될 순차 아키텍처 코어 및 레지스터 리네이밍 로직, 비순차 발행/실행 로직을 도시하는 블록도이다. Figure 4b is a block diagram showing the sequential architecture core and register renaming logic, out-of-order issue / execution logic included in the processor according to at least one embodiment of the invention. 도 4a에서의 실선 박스들은 순차 파이프라인을 예시하는 한편, 파선 박스들은 레지스터 리네이밍, 비순차 발행/실행 파이프라인을 예시한다. The solid line box in Figure 4a are illustrating the sequential pipeline On the other hand, a broken line box are illustrative of the register renaming, out-of-order issue / execution pipeline. 유사하게, 도 4b에서의 실선 박스들은 순차 아키텍처 로직을 예시하는 한편, 파선 박스들은 레지스터 리네이밍 로직 및 비순차 발행/실행 로직을 예시한다. Similarly, the solid line box in Figure 4b are for illustrating the sequential logic architecture On the other hand, the broken line boxes illustrates a register renaming logic and out-of-order issue / execution logic.

도 4a에서, 프로세서 파이프라인(400)은 페치 스테이지(402), 길이 디코드 스테이지(404), 디코드 스테이지(406), 할당 스테이지(408), 리네이밍 스테이지(410), 스케줄링(디스패치 또는 발행으로도 알려져 있음) 스테이지(412), 레지스터 판독/메모리 판독 스테이지(414), 실행 스테이지(416), 후기입(write back)/메모리 기입 스테이지(418), 예외 핸들링 스테이지(422) 및 커미트 스테이지(424)를 포함한다. In Figure 4a, the processor pipeline 400 includes a fetch stage 402, a length decoding stage 404, decode stage 406, allocate stage 408, a renaming stage 410, a scheduling (also as dispatch or issued known that the) stage 412, a register read / memory read stage 414, the execution stages 416, write-back (write back) / memory write stage 418, an exception handling stage 422 and a commit stage 424 It includes.

도 4b에서, 화살표들은 2개 이상의 유닛 사이의 연결을 나타내고, 화살표의 방향은 이러한 유닛들 사이의 데이터 흐름의 방향을 나타낸다. In Figure 4b, the arrows show the connection between two or more units, the direction of the arrow indicates the direction of data flow between these units. 도 4b는 실행 엔진 유닛(450)에 연결된 프론트 엔드 유닛(430) - 이들 양자는 메모리 유닛(470)에 연결됨 - 을 포함하는 프로세서 코어(490)를 도시한다. Illustrates a processor core (490) including, connected to the both the memory unit 470. - Figure 4b is a front-end unit 430 coupled to the execution engine unit 450.

코어(490)는 RISC(reduced instruction set computing) 코어, CISC(complex instruction set computing) 코어, VLIW(very long instruction word) 코어, 또는 하이브리드 또는 대안적인 코어 타입일 수 있다. Core 490 may be a RISC (reduced instruction set computing) core, CISC (complex instruction set computing) core, VLIW (very long instruction word) core, or hybrid or alternative core type. 다른 옵션으로서, 코어(490)는, 예를 들어, 네트워크 또는 통신 코어, 압축 엔진, 그래픽스 코어 등과 같은 특수 목적 코어일 수 있다. As another option, the core 490 is, for example, may be a special purpose such as a core network or the communication core, compression engine, graphics core.

프론트 엔드 유닛(430)은 명령어 캐시 유닛(434)에 연결된 분기 예측 유닛(432)을 포함하고, 이 명령어 캐시 유닛은 명령어 변환 색인 버퍼(TLB: translation lookaside buffer)(436)에 연결되고, 이 명령어 변환 색인 버퍼는 명령어 페치 유닛(438)에 연결되고, 이 명령어 페치 유닛은 디코드 유닛(440)에 연결된다. Front-end unit 430 instruction cache unit includes a branch prediction unit 432 is connected to 434, and the instruction cache unit includes instruction translation lookaside buffer: is connected to a (TLB translation lookaside buffer), (436), the command translation lookaside buffer is connected to the instruction fetch unit 438, the instruction fetch unit is connected to the decode unit 440. the 디코드 유닛 또는 디코더는 명령어들을 디코딩하고, 출력으로서 하나 이상의 마이크로연산들, 마이크로코드 엔트리 포인트들, 마이크로명령어들, 다른 명령어들, 또는 다른 제어 신호들을 생성할 수 있는데, 이들은 오리지널 명령어들로부터 디코딩되거나, 또는 다른 방식으로 오리지널 명령어들을 반영하거나 오리지널 명령어들로부터 도출된다. Decoding unit or the decoder may decode the instructions, and generating the one or more micro-operations, as outputs, microcode entry points, the micro instruction, other instructions, or other control signals, all of which are or decoded from the original instructions, or reflecting the original instruction in a different manner, or is derived from the original instruction. 디코더는 다양한 상이한 메커니즘들을 이용하여 구현될 수 있다. The decoder can be implemented using a variety of different mechanisms. 적합한 메커니즘들의 예들은 룩업 테이블들, 하드웨어 구현들, 프로그램가능 로직 어레이들(PLA들), 마이크로코드 판독 전용 메모리들(ROM들) 등을 포함하지만, 이에 제한되지는 않는다. Examples of suitable mechanisms include in the look-up table, a hardware implementation of the programmable logic arrays (PLA s), microcode read only memory (ROM s), etc., but it is not limited to. 명령어 캐시 유닛(434)은 메모리 유닛(470)에서의 레벨 2(L2) 캐시 유닛(476)에 또한 연결된다. Instruction cache unit 434 is also coupled to a level 2 (L2) cache unit 476 in the memory unit 470. 디코드 유닛(440)은 실행 엔진 유닛(450)에서의 리네임/할당자 유닛(452)에 연결된다. Decode unit 440 is coupled to rename / allocator unit 452 in the execution engine unit 450.

실행 엔진 유닛(450)은, 하나 이상의 스케줄러 유닛(들)(456)의 세트 및 리타이어먼트 유닛(454)에 연결된 리네임/할당자 유닛(452)을 포함한다. Execution engine unit 450, includes one or more scheduler unit (s) of the set (456), and retire treatment unit 454, rename / allocator unit 452 connected to the. 스케줄러 유닛(들)(456)은, 예약 스테이션들, 중앙 명령어 윈도우 등을 비롯한 임의의 개수의 상이한 스케줄러들을 나타낸다. The scheduler unit (s) 456, represent the reservation station, different scheduler in any number, including the Central command window. 스케줄러 유닛(들)(456)은 물리적 레지스터 파일(들) 유닛(들)(458)에 연결된다. The scheduler unit (s) 456 is coupled to the physical register file (s) unit (s) 458. 물리적 레지스터 파일(들) 유닛들(458) 각각은 하나 이상의 물리적 레지스터 파일을 나타내고, 이들 중 상이한 물리적 레지스터 파일들은 스칼라 정수, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점 등, 상태(예를 들어, 실행될 다음 명령어의 어드레스인 명령어 포인터) 등과 같은 하나 이상의 상이한 데이터 타입을 저장한다. The physical register file (s) units (458) each represent one or more physical register files, different physical register file of which are the scalar integer, scalar floating point, packed integer and packed floating point, vector integer, vector floating-point and so on, and stores one or more different data types, such as conditions (e.g., the address of the instruction pointer of a next instruction to be executed). 물리적 레지스터 파일(들) 유닛(들)(458)은, (예를 들어, 재정렬 버퍼(들) 및 리타이어먼트 레지스터 파일(들)을 이용하여; 장래 파일(들), 이력 버퍼(들) 및 리타이어먼트 레지스터 파일(들)을 이용하여; 레지스터 맵들 및 레지스터들의 풀을 이용하거나 하여) 레지스터 리네이밍 및 비순차 실행이 구현될 수 있는 다양한 방식들을 예시하기 위해서 리타이어먼트 유닛(454)에 의해 중첩된다. (S) to physical register file unit (s) 458, (e. G., The reordering buffer (s) and retired garment register with the file (s); future file (s) and history buffer (s) and retirement using a treatment register file (s); overlaps a register maps and retire treatment unit 454 by or using a pool of registers), to illustrate the various ways in which the register renaming and out-of-order execution may be implemented. 일반적으로, 아키텍처 레지스터들은 프로세서 외부에서 또는 프로그래머의 관점에서 가시적이다. In general, the architecture registers are visible from the viewpoint of the external processor or a programmer. 레지스터들은 임의의 알려진 특정 타입의 회로에 제한되지는 않는다. Register are not limited to any particular type of known circuitry. 본 명세서에 설명된 바와 같이 데이터를 저장하고 제공할 수 있는 한, 다양한 상이한 타입의 레지스터들이 적합하다. As long as it can store and provide data as described herein, it is suitable to a variety of different types of registers. 적합한 레지스터들의 예들은 전용 물리적 레지스터들, 레지스터 리네이밍을 이용하여 동적으로 할당된 물리적 레지스터들, 전용 물리적 레지스터들과 동적으로 할당된 물리적 레지스터들의 조합 등을 포함하지만, 이에 제한되지는 않는다. Examples of suitable registers include a dedicated physical registers, register resources of the physical register allocated dynamically using the naming, dedicated physical registers, etc. in combination with the dynamic of the physical register allocated to, but are not limited to. 리타이어먼트 유닛(454) 및 물리적 레지스터 파일(들) 유닛(들)(458)은 실행 클러스터(들)(460)에 연결된다. Retired treatment unit 454 and (s) to physical register file unit (s) 458 is coupled to the execution cluster (s) 460. 실행 클러스터(들)(460)는 하나 이상의 실행 유닛들(462)의 세트 및 하나 이상의 메모리 액세스 유닛들(464)의 세트를 포함한다. Execution cluster (s) 460 includes a set of one or more execution units 462, and a set of one or more memory access units 464 of. 실행 유닛들(462)은 다양한 타입의 데이터(예를 들어, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점)에 대해 다양한 연산들(예를 들어, 시프트, 가산, 감산, 승산)을 수행할 수 있다. Execution units 462 is data of various types (e.g., scalar floating point, packed integer and packed floating point, vector integer, vector floating point), the various operations (e. G., A shift, an addition, It may perform subtraction, multiplication). 일부 실시예들은 특정 기능들이나 기능들의 세트들에 전용인 다수의 실행 유닛을 포함할 수 있지만, 다른 실시예들은 단 하나의 실행 유닛, 또는 전부가 모든 기능을 수행하는 다수의 실행 유닛을 포함할 수 있다. Some embodiments are exemplary, but may include a plurality of execution units dedicated to the set of specified functions or features, other embodiments are just one of the execution units, or all may comprise a plurality of execution units that perform all the functions have. 스케줄러 유닛(들)(456), 물리적 레지스터 파일(들) 유닛(들)(458) 및 실행 클러스터(들)(460)는 가능하게는 복수개인 것으로 도시되어 있는데, 그 이유는 특정 실시예들이 특정 타입의 데이터/연산들에 대해 별개의 파이프라인들(예를 들어, 스칼라 정수 파이프라인, 스칼라 부동 소수점/패킹된 정수/패킹된 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 자신의 스케줄러 유닛, 물리적 레지스터 파일(들) 유닛 및/또는 실행 클러스터를 각각 갖는 메모리 액세스 파이프라인 - 별개의 메모리 액세스 파이프라인의 경우에, 이 파이프라인의 실행 클러스터만이 메모리 액세스 유닛(들)(464)을 갖는 특정 실시예들이 구현됨)을 생성하기 때문이다. There scheduler unit (s) 456, a physical register file (s) unit (s) 458 and execution cluster (s) 460 may possibly be seen to multiple individuals, because the specific embodiments have particular the separate pipelines for data / operation of a type (e.g., a scalar integer pipeline, scalar floating point / packed integer / packed floating point / vector integer / vector floating point pipeline, and / or their a scheduler unit, physical register file (s) unit and / or a memory access pipeline, having a running cluster, respectively - in the case of a separate memory access pipeline, only the execution cluster of the pipeline is the memory access unit (s) 464 is due to produce a particular embodiment being implemented for example) having a. 또한, 별개의 파이프라인들이 이용되는 경우, 이들 파이프라인들 중 하나 이상은 비순차 발행/실행일 수 있고, 나머지는 순차적일 수 있다는 것이 이해되어야 한다. In addition, when a separate pipe lines are used, one or more of these pipelines may be an out-of-order issue / execution and the other is to be understood that the same may be sequential.

메모리 액세스 유닛들(464)의 세트는 메모리 유닛(470)에 연결되고, 이 메모리 유닛은 레벨 2(L2) 캐시 유닛(476)에 연결되는 데이터 캐시 유닛(474)에 연결된 데이터 TLB 유닛(472)을 포함한다. Memory access the set of units 464 is connected to a memory unit 470, a memory unit data TLB unit 472 coupled to the data cache unit (474) connected to the level 2 (L2) cache unit 476 It includes. 하나의 예시적인 실시예에서, 메모리 액세스 유닛들(464)은 로드 유닛(load unit), 어드레스 스토어 유닛(store address unit) 및 데이터 스토어 유닛(store data unit)을 포함할 수 있으며, 이들 각각은 메모리 유닛(470)에서의 데이터 TLB 유닛(472)에 연결된다. In one exemplary embodiment, the memory access unit 464 may include a load unit (load unit), an address store unit (store address unit) and data store unit (store data unit), each of which memory It is coupled to the data TLB unit 472 in the unit 470. L2 캐시 유닛(476)은 하나 이상의 다른 레벨의 캐시에 그리고 궁극적으로는 메인 메모리에 연결된다. L2 cache unit 476 is to one or more other levels of cache, and ultimately is connected to a main memory.

예로서, 예시적인 레지스터 리네이밍, 비순차 발행/실행 코어 아키텍처는 다음과 같이 파이프라인(400)을 구현할 수 있다: 1) 명령어 페치(438)는 페치 및 길이 디코딩 스테이지들(402 및 404)을 수행하고; By way of example, an exemplary register renaming, out-of-order issue / execution core architecture may implement the pipeline 400 as follows: 1) the instruction fetch 438 is fetched, and the length of the decoding stages (402 and 404) and perform; 2) 디코드 유닛(440)은 디코드 스테이지(406)를 수행하고; 2) The decode unit 440 is adapted to perform a decode stage 406; 3) 리네임/할당자 유닛(452)은 할당 스테이지(408) 및 리네이밍 스테이지(410)를 수행하고; 3) rename / allocator unit 452 performs the allocation stage 408 and renaming stage 410; 4) 스케줄러 유닛(들)(456)은 스케줄 스테이지(412)를 수행하고; 4) the scheduler unit (s) 456 is adapted to perform a schedule stage 412; 5) 물리적 레지스터 파일(들) 유닛(들)(458) 및 메모리 유닛(470)은 레지스터 판독/메모리 판독 스테이지(414)를 수행하고; 5) a physical register file (s) unit (s) 458 and memory unit 470 is adapted to perform the register read / memory read stage (414); 실행 클러스터(460)는 실행 스테이지(416)를 수행하고; Execution cluster 460, and performs the execute stage 416; 6) 메모리 유닛(470) 및 물리적 레지스터 파일(들) 유닛(들)(458)은 후기입/메모리 기입 스테이지(418)를 수행하고; 6) perform a memory unit 470, and the physical register file (s) unit (s) 458 is a write-back / memory write stage 418, and; 7) 다양한 유닛들이 예외 핸들링 스테이지(422)에 수반될 수 있고; 7) it may be different units are involved in exception handling stage 422; 8) 리타이어먼트 유닛(454) 및 물리적 레지스터 파일(들) 유닛(들)(458)은 커미트 스테이지(424)를 수행한다. 8) retired treatment unit 454 and the physical register file (s) unit (s) 458 performs the commit stage 424.

코어(490)는 하나 이상의 명령어 세트들(예를 들어, (더 새로운 버전이 추가된 소정의 확장을 갖는) x86 명령어 세트; 캘리포니아주 서니베일에 있는 MIPS Technologies의 MIPS 명령어 세트; 캘리포니아주 서니베일에 있는 ARM Holdings의 (NEON과 같은 선택적인 부가 확장을 갖는) ARM 명령어 세트)을 지원할 수 있다. Core 490 has the one or more instruction set (for example, (a newer version of set of the x86 instruction having the added predetermined extension); the main Sunnyvale, California; and stood state California MIPS instruction set of the MIPS Technologies in the veil (with optional additional extensions, such as NEON) of ARM Holdings, which can support the ARM instruction set).

코어는 (스레드들 또는 연산들의 2개 이상의 병렬 세트를 실행하는) 멀티스레딩을 지원할 수 있고, 시간 분할 멀티스레딩(time sliced multithreading), 동시적 멀티스레딩(단일의 물리적 코어는, 물리적 코어가 동시적으로 멀티스레딩하는 스레드들 각각에 대한 논리적 코어를 제공함), 또는 이들의 조합(예를 들어, 인텔® Hyperthreading 기술에서와 같이 시간 분할 페칭과 디코딩 및 그 이후의 동시적 멀티스레딩)을 비롯한 각종 방식들로 그렇게 할 수 있다는 것이 이해되어야 한다. The core is capable of supporting multi-threading (thread or operation of two or more running parallel set of), time division multi-threading (time sliced ​​multithreading), simultaneous multi-threading (single physical core of the physical core coincidentally as to provide a logical core for the thread of each of multi-threading), or a variety of services, including combinations thereof (e. g., simultaneous multithreading in a time division fetching and decoding, and after that, as shown in the Intel ® Hyperthreading technology) as it should be understood that to do so.

레지스터 리네이밍이 비순차 실행의 콘텍스트에서 설명되지만, 레지스터 리네이밍은 순차 아키텍처에서 이용될 수 있다는 것이 이해되어야 한다. The register renaming is described in the context of out-of-order execution, register renaming is to be understood that the same may be used in a sequential architecture. 프로세서의 예시된 실시예가 별개의 명령어 및 데이터 캐시 유닛들(434/474) 및 공유 L2 캐시 유닛(476)을 또한 포함하지만, 대안적인 실시예들은, 예를 들어 레벨 1(L1) 내부 캐시 또는 다중 레벨의 내부 캐시와 같이, 명령어들 및 데이터 양쪽 모두에 대한 단일의 내부 캐시를 가질 수 있다. The illustrated embodiment of the processor examples also include a separate instruction and data cache units (434/474) and a shared L2 cache unit 476, but the alternative embodiments, such as level 1 (L1) internal cache or multiple such as levels of internal cache, it may have a single internal cache for both instructions and data. 일부 실시예들에서, 시스템은, 코어 및/또는 프로세서의 외부에 있는 외부 캐시와 내부 캐시의 조합을 포함할 수 있다. In some embodiments, the system can comprise a core and / or a combination of external and internal caches in the cache external to the processor. 대안적으로, 모든 캐시는 코어 및/또는 프로세서의 외부에 있을 수 있다. Alternatively, all of the cache may be external to the core and / or processor.

도 5는 본 발명의 실시예들에 따른 통합된 메모리 제어기 및 그래픽스를 갖는 단일 코어 프로세서 및 멀티 코어 프로세서(500)의 블록도이다. Figure 5 is a block diagram of a single-core processor and multi-core processor 500 having an integrated memory controller and the graphics in accordance with embodiments of the present invention. 도 5의 실선 박스들은, 단일 코어(502A), 시스템 에이전트(510), 하나 이상의 버스 제어기 유닛들(516)의 세트를 갖는 프로세서(500)를 예시하는 한편, 파선 박스들의 선택적인 추가는, 다수의 코어들(502A 내지 502N), 시스템 에이전트 유닛(510)에서의 하나 이상의 통합된 메모리 제어기 유닛(들)(514)의 세트, 및 통합된 그래픽스 로직(508)을 갖는 대안적인 프로세서(500)를 예시한다. Solid boxes, a single core (502A), the system agent 510, an optional addition of illustrating processor 500 having a set of one or more bus controller units 516. On the other hand, a broken line box in FIG. 5, a number of the cores (502A to 502N), the system agent unit 510 alternate processor 500 with the set, and the integrated graphics logic 508 of one or more integrated memory controller unit (s) 514 in It illustrates.

메모리 계층구조는, 코어들 내의 하나 이상의 레벨의 캐시, 하나 이상의 공유 캐시 유닛들(506)의 세트, 및 통합된 메모리 제어기 유닛들(514)의 세트에 연결된 외부 메모리(도시되지 않음)를 포함한다. A memory hierarchy, for one or more levels in the core cache, a set of one or more shared cache unit 506, and is connected to the set of integrated memory controller units 514, external memory (not shown) . 공유 캐시 유닛들(506)의 세트는, 레벨 2(L2), 레벨 3(L3), 레벨 4(L4) 또는 다른 레벨 캐시와 같은 하나 이상의 중간 레벨 캐시, 최종 레벨 캐시(LLC: last level cache) 및/또는 이들의 조합을 포함할 수 있다. Set, a level 2 (L2), level 3 (L3), level 4 (L4), or one or more mid-level cache, and last level cache, such as different levels of cache, a shared cache units (506) (LLC: last level cache) and / or a combination thereof. 일 실시예에서 링 기반 상호접속 유닛(512)은 통합된 그래픽스 로직(508), 공유 캐시 유닛들(506)의 세트 및 시스템 에이전트 유닛(510)을 상호접속하지만, 대안적인 실시예들은 이러한 유닛들을 상호접속하기 위해 임의의 개수의 잘 알려진 기술을 이용할 수 있다. In one embodiment a ring-based cross-connection unit 512 is mutually connected to the set and the system agent unit 510 of the integrated graphics logic 508, and shared cache unit 506, but the alternative embodiments of these units there any number of well-known technology of access to the interconnection.

일부 실시예들에서, 코어들(502A 내지 502N) 중 하나 이상은 멀티스레딩을 할 수 있다. In some embodiments, one or more of the cores (502A to 502N) can be a multi-threading. 시스템 에이전트(510)는 코어들(502A 내지 502N)을 조정하며 동작시키는 컴포넌트들을 포함한다. The system agent 510 may include components that operate the adjustment of the core (502A to 502N). 시스템 에이전트 유닛(510)은 예를 들어 전력 제어 유닛(PCU) 및 디스플레이 유닛을 포함할 수 있다. System agent unit 510 may include, for example, a power control unit (PCU) and a display unit. PCU는, 코어들(502A 내지 502N) 및 통합된 그래픽스 로직(508)의 전력 상태를 조절하기 위해 필요한 로직 및 컴포넌트들일 수 있거나 이들을 포함할 수 있다. PCU is, the cores (502A to 502N) and the number of acceptable and logic components needed to control the power status of the integrated graphics logic 508, or may comprise these. 디스플레이 유닛은 하나 이상의 외부 접속된 디스플레이를 구동시키기 위한 것이다. The display unit is for driving the one or more external connections of the display.

코어들(502A 내지 502N)은 아키텍처 및/또는 명령어 세트에 관하여 동질적일 수도 있고 이질적일 수도 있다. The core (502A to 502N) can be either jeokil homogeneous and heterogeneous with respect to the architecture and / or instruction set. 예를 들어, 코어들(502A 내지 502N) 중 일부는 순차적일 수 있는 한편, 다른 것들은 비순차적이다. For example, some of the cores (502A to 502N) the others are non-sequential the other hand, which may be a sequential order. 다른 예로서, 코어들(502A 내지 502N) 중 2개 이상은 동일한 명령어 세트를 실행가능할 수 있는 한편, 다른 것들은 단지 그 명령어 세트의 서브세트 또는 상이한 명령어 세트를 실행가능할 수 있다. As another example, two of the cores (502A to 502N) or more may be a subset or a different set of commands, which may be the same set of instructions executing the other hand, others only the instruction set executed.

프로세서는, 캘리포니아주 산타 클라라에 있는 인텔 코포레이션으로부터 입수가능한 Core™ i3, i5, i7, 2 Duo 및 Quad, Xeon™, Itanium™, XScale™ 또는 StrongARM™ 프로세서와 같은 범용 프로세서일 수 있다. The processor may be a general-purpose processor, such as California, available from Intel Corporation in Santa Clara available Core ™ i3, i5, i7, 2 Duo and Quad, Xeon ™, Itanium ™, XScale ™ or StrongARM ™ processor. 대안적으로, 프로세서는 ARM Holdings, Ltd, MIPS 등과 같은 다른 회사로부터의 것일 수 있다. Alternatively, the processor may be from another company, such as ARM Holdings, Ltd, MIPS. 프로세서는, 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽스 프로세서, 코프로세서, 임베디드 프로세서 등과 같은 특수 목적 프로세서일 수 있다. The processor can be, for example, a special purpose processor such as a network or communication processor, compression engine, graphics processors, co-processors, embedded processors. 프로세서는 하나 이상의 칩 상에 구현될 수 있다. The processor may be implemented on one or more chips. 프로세서(500)는, 예를 들어 BiCMOS, CMOS 또는 NMOS와 같은 다수의 프로세스 기술 중 임의의 것을 이용하여 하나 이상의 기판 상에 구현될 수 있고/있거나 그 일부일 수 있다. Processor 500 is, for example, be implemented on one or more substrates using any of a number of process technologies, such as BiCMOS, NMOS or CMOS, and / or that may be a part.

도 6 내지 도 8은 프로세서(500)를 포함하기에 적합한 예시적인 시스템들인 한편, 도 9는 코어들(502) 중 하나 이상을 포함할 수 있는 예시적인 시스템 온 칩(SoC)이다. 6 to 8 is an exemplary system, which are the other hand, Figure 9 is the core of an exemplary system-on-chip (SoC), which may include one or more of the (502) adapted to include a processor 500. 랩톱들, 데스크톱들, 핸드헬드 PC들, PDA들(personal digital assistants), 엔지니어링 워크스테이션들, 서버들, 네트워크 디바이스들, 네트워크 허브들, 스위치들, 임베디드 프로세서들, 디지털 신호 프로세서들(DSP들), 그래픽스 디바이스들, 비디오 게임 디바이스들, 셋톱 박스들, 마이크로컨트롤러들, 셀 폰들, 휴대용 미디어 플레이어들, 핸드헬드 디바이스들 및 다양한 다른 전자 디바이스들에 대하여 관련 기술분야에 알려진 다른 시스템 설계들 및 구성들도 또한 적합하다. The laptop, the desktop, handheld PC, the PDA (personal digital assistants), engineering workstations, servers, network devices, network hubs, switches, embedded processors, (s DSP) digital signal processors , those of the graphics devices, video game devices, set-top boxes, micro controllers of cell phones, portable media players, handheld devices and other system design variety known in the art for other electronic devices and configurations it is also suitable. 일반적으로, 본 명세서에 개시된 바와 같은 프로세서 및/또는 다른 실행 로직을 통합할 수 있는 매우 다양한 시스템들 또는 전자 디바이스들이 일반적으로 적합하다. In general, a wide variety of systems or electronic device that can incorporate the processor and / or other execution logic as disclosed herein are generally suitable.

이하 도 6을 참조하면, 본 발명의 일 실시예에 따른 시스템(600)의 블록도가 도시되어 있다. Turning now to Figure 6, a block diagram of system 600 according to one embodiment of the present invention is shown. 시스템(600)은 그래픽스 메모리 제어기 허브(GMCH)(620)에 연결되는 하나 이상의 프로세서(610, 615)를 포함할 수 있다. System 600 may include one or more processors (610, 615) coupled to graphics memory controller hub (GMCH) (620). 부가적인 프로세서들(615)의 선택적인 속성은 도 6에서 파선들로 표시되어 있다. An optional property of the additional processors 615 is denoted by the broken line in FIG.

각각의 프로세서(610, 615)는 프로세서(500)의 소정의 버전일 수 있다. Each processor (610, 615) may be any version of the processor 500. 그러나, 통합된 그래픽스 로직 및 통합된 메모리 제어 유닛들이 프로세서들(610, 615)에 존재할 가능성이 없다는 점에 유의해야 한다. However, the integrated graphics logic and integration of memory control units should be noted that there is no possibility exist to the processor (610, 615). 도 6은 예를 들어 동적 랜덤 액세스 메모리(DRAM)일 수 있는 메모리(640)에 GMCH(620)가 연결될 수 있는 것을 도시한다. Figure 6 illustrates the example where the GMCH be connected (620) to the dynamic random access memory, a memory 640, which may be (DRAM). DRAM은 적어도 하나의 실시예에 있어서 비휘발성 캐시와 연관될 수 있다. DRAM may be associated with non-volatile cache according to at least one embodiment.

GMCH(620)는 칩셋이거나 또는 칩셋의 일부일 수 있다. GMCH (620) may be part of a chipset or a chipset, or. GMCH(620)는 프로세서(들)(610, 615)와 통신하고, 프로세서(들)(610, 615)와 메모리(640) 사이의 상호작용을 제어할 수 있다. GMCH (620) may control the interaction between the processor (s) (610, 615) in communication with the processor (s) (610, 615) and memory (640). 또한, GMCH(620)는 프로세서(들)(610, 615)와 시스템(600)의 다른 요소들 사이의 가속화 버스 인터페이스의 역할을 할 수 있다. Furthermore, GMCH (620) may act as a speed bus interface between the other elements of the processor (s) (610, 615) and the system 600. 적어도 하나의 실시예에 있어서, GMCH(620)는 FSB(frontside bus)(695)와 같은 다분기 버스(multi-drop bus)를 통해 프로세서(들)(610, 615)와 통신한다. In at least one embodiment, GMCH (620) is through a multi-drop bus (multi-drop bus), such as FSB (frontside bus) (695) communicate with the processor (s) (610, 615).

또한, GMCH(620)는 (평면 패널 디스플레이와 같은) 디스플레이(645)에 연결된다. Furthermore, GMCH (620) is coupled to a display 645 (such as a flat panel display). GMCH(620)는 통합된 그래픽스 가속기를 포함할 수 있다. GMCH (620) may include an integrated graphics accelerator. GMCH(620)는, 다양한 주변 디바이스들을 시스템(600)에 연결하는데 이용될 수 있는 입/출력(I/O) 제어기 허브(ICH)(650)에 또한 연결된다. GMCH (620) is also connected to the input / output (I / O) controller hub (ICH) (650) that may be used to connect various peripheral devices to system 600. 예를 들어, 다른 주변 디바이스(670)와 함께, ICH(650)에 연결된 별개의 그래픽스 디바이스일 수 있는 외부 그래픽스 디바이스(660)가 도 6의 실시예에 도시되어 있다. For example, a combination with other peripheral devices 670, a separate external graphics device 660, which may be a graphics device coupled to ICH (650) is illustrated in the example of FIG.

대안적으로, 부가적인 또는 상이한 프로세서들도 또한 시스템(600)에 존재할 수 있다. S Alternatively, additional or different processor also may be present in the system 600. 예를 들어, 부가적인 프로세서(들)(615)는 프로세서(610)와 동일한 부가적인 프로세서(들), 프로세서(610)에 비대칭이거나 이질적인 부가적인 프로세서(들), (예를 들어 그래픽스 가속기들 또는 디지털 신호 처리(DSP) 유닛들과 같은) 가속기들, 필드 프로그램가능 게이트 어레이들 또는 임의의 다른 프로세서를 포함할 수 있다. For example, additional processor (s) 615 are the asymmetric or heterogeneous additional processor (s) (e.g. graphics accelerator in the same additional processor (s), the processor 610 and the processor 610, or s, such as digital signal processing (DSP) units) accelerator may include a field programmable gate array or any other processor. 아키텍처, 마이크로아키텍처, 열, 전력 소모 특성 등을 포함하는 다양한 성능 메트릭(metrics of merit)에 관하여 물리적 자원들(610, 615) 사이에 각종 차이점들이 존재할 수 있다. On a variety of performance metrics, including architectural, microarchitectural, thermal, power consumption characteristics, such as (metrics of merit), there may be various differences between the physical resources (610, 615). 이러한 차이점들은 프로세서들(610, 615) 사이의 비대칭성 및 이질성으로서 효과적으로 나타날 수 있다. These differences can occur effectively as asymmetry and heterogeneity among the processors (610, 615). 적어도 하나의 실시예에 있어서, 다양한 프로세서들(610, 615)은 동일한 다이 패키지에 존재할 수 있다. For at least one embodiment, the various processors (610, 615) can be in a single-die package.

이하 도 7을 참조하면, 본 발명의 실시예에 따른 제2 시스템(700)의 블록도가 도시되어 있다. Referring now to Figure 7, a block diagram of a second system 700 in accordance with an embodiment of the present invention is also a city. 도 7에 도시된 바와 같이, 멀티프로세서 시스템(700)은 점대점 상호접속 시스템이고, 점대점 상호접속부(750)를 통해 연결되는 제1 프로세서(770) 및 제2 프로세서(780)를 포함한다. 7, the multi-processor system 700 includes a point-to-point interconnect system, and the point-to-point interconnect 750, the first processor 770 and second processor 780 coupled via. 프로세서들(770 및 780) 각각은 프로세서들(610, 615) 중 하나 이상과 같이 프로세서(500)의 소정의 버전일 수 있다. Each of the processors (770 and 780) may be any version of the processor 500 as one or more of the processors (610, 615).

2개의 프로세서(770, 780)만을 갖는 것으로 도시되어 있지만, 본 발명의 범위는 이에 제한되지는 않는다는 것이 이해되어야 한다. 2 are shown as having two processors (770, 780) only, the scope of the invention is to be understood that is not limited to this. 다른 실시예들에서, 하나 이상의 부가적인 프로세서가 주어진 프로세서에 존재할 수 있다. In other embodiments, one or more additional processors may be present in a given processor.

프로세서들(770 및 780)은 각각 통합된 메모리 제어기 유닛들(772 및 782)을 포함하는 것으로 도시되어 있다. The processors (770 and 780) is illustrated as including each of the integrated memory controller unit (772 and 782). 또한, 프로세서(770)는 그것의 버스 제어기 유닛들의 일부로서 점대점(PP) 인터페이스들(776 및 778)을 포함하고; Further, processor 770, and as part of its bus controller unit including the point-to-point (PP) interfaces (776 and 778); 유사하게, 제2 프로세서(780)는 PP 인터페이스들(786 및 788)을 포함한다. Similarly, the second processor 780 comprises the PP interface (786 and 788). 프로세서들(770, 780)은 점대점(PP) 인터페이스 회로들(778, 788)을 이용하여 PP 인터페이스(750)를 통해 정보를 교환할 수 있다. The processor (770, 780) can exchange information over the PP interface 750 using the point-to-point (PP) interface circuitry (778, 788). 도 7에 도시된 바와 같이, IMC들(772 및 782)은 프로세서들을 각각의 메모리들, 즉 각각의 프로세서들에 로컬로 부착된 메인 메모리의 부분들일 수 있는 메모리(732) 및 메모리(734)에 연결한다. A, IMC s (772 and 782) are each of the memory, i.e., each of the processors can accept the portion of the main memory attached to the local memory 732 and the memory 734 in the processor as shown in Fig. 7 connect.

프로세서들(770, 780) 각각은 점대점 인터페이스 회로들(776, 794, 786, 798)을 이용하여 개별적인 PP 인터페이스들(752, 754)을 통해 칩셋(790)과 정보를 교환할 수 있다. Each of the processors (770, 780) is interchangeable with the chipset 790 and the information by using the point-to-point interface circuits (776, 794, 786, 798) through the individual PP interface (752, 754). 또한, 칩셋(790)은 고성능 그래픽스 인터페이스(739)를 통해 고성능 그래픽스 회로(738)와 정보를 교환할 수 있다. Further, the chipset 790 may exchange high-performance graphics circuit 738 with information via a high-performance graphics interface 739.

공유 캐시(도시되지 않음)가 양쪽 프로세서들의 외부에 또는 어느 하나의 프로세서에 포함될 수 있지만, PP 상호접속부를 통해 프로세서들과 접속되어, 프로세서가 저전력 모드에 들어가는 경우에 어느 하나의 프로세서 또는 양쪽 프로세서의 로컬 캐시 정보가 공유 캐시에 저장될 수 있게 된다. A shared cache in the case (not shown) may be included in the outside of both the processor or any of the processor, but is connected with the processor via a PP interconnect, the processor is entering the low power mode, either one processor or both processors local cache information is able to be stored in a shared cache.

칩셋(790)은 인터페이스(796)를 통해 제1 버스(716)에 연결될 수 있다. Chipset 790 may be coupled to a first bus 716 via an interface (796). 일 실시예에서, 제1 버스(716)는 PCI(Peripheral Component Interconnect) 버스이거나, 또는 PCI Express 버스 또는 다른 제3세대 I/O 상호접속 버스와 같은 버스일 수 있지만, 본 발명의 범위는 이에 제한되지는 않는다. In one embodiment, first bus 716 may be a bus, such as or (Peripheral Component Interconnect), PCI bus, or PCI Express bus or another third generation I / O interconnect bus, although the scope of the present invention is limited It is not.

도 7에 도시된 바와 같이, 제1 버스(716)를 제2 버스(720)에 연결하는 버스 브리지(718)와 함께, 다양한 I/O 디바이스들(714)이 제1 버스(716)에 연결될 수 있다. 7, the first bus 716, a second bus with a bus bridge 718 that connects to the 720, various I / O devices 714 are coupled to first bus 716, can. 일 실시예에서, 제2 버스(720)는 LPC(low pin count) 버스일 수 있다. In one embodiment, second bus 720 may be a (low pin count) LPC bus. 일 실시예에서, 예를 들어, 키보드 및/또는 마우스(722), 통신 디바이스들(727), 및 명령어들/코드 및 데이터(730)를 포함할 수 있는 디스크 드라이브나 다른 대용량 스토리지 디바이스와 같은 스토리지 유닛(728)을 포함하는 다양한 디바이스들이 제2 버스(720)에 연결될 수 있다. In one embodiment, for example, a keyboard and / or mouse 722, and storage, such as the communication devices 727, and commands to / code, and disk drive or other mass storage device which may include Data 730 various devices, including the unit 728 may be connected to the second bus (720). 또한, 오디오 I/O(724)가 제2 버스(720)에 연결될 수 있다. Further, an audio I / O (724) can be coupled to the second bus (720). 다른 아키텍처들도 가능하다는 점에 유의한다. It should be noted that it is also available to other architectures. 예를 들어, 도 7의 점대점 아키텍처 대신에, 시스템은 다분기 버스 또는 다른 이러한 아키텍처를 구현할 수 있다. For example, instead of the point-to-point architecture of FIG. 7, the system may implement a multi-drop bus or another such architecture.

이하 도 8을 참조하면, 본 발명의 실시예에 따른 제3 시스템(800)의 블록도가 도시되어 있다. Referring now to Figure 8, a block diagram of a third system 800 according to an embodiment of the invention is also the city. 도 7 및 도 8에서의 유사한 요소들은 유사한 참조 번호들을 지니며, 도 8의 다른 양태들을 모호하게 하는 것을 회피하기 위해서 도 8로부터 도 7의 특정 양태들이 생략되었다. 7 and similar elements in Fig. 8 are said Genie similar reference numerals, and was also from in order to avoid obscuring other aspects of Figure 88 are not a particular embodiment of FIG.

도 8은 프로세서들(870, 880)이 각각 통합된 메모리 및 I/O 제어 로직("CL")(872 및 882)을 포함할 수 있는 것을 도시한다. Figure 8 illustrates that it can include processors (870, 880), each integrated memory and I / O control logic ( "CL") (872 and 882). 적어도 하나의 실시예에 있어서, CL(872, 882)은 도 5 및 도 7과 관련하여 전술한 것과 같은 통합된 메모리 제어기 유닛들을 포함할 수 있다. In at least one embodiment, CL (872, 882) may include an integrated memory controller unit such as that described above with respect to FIG. 5 and FIG. 추가로, CL(872, 882)은 I/O 제어 로직을 또한 포함할 수 있다. Additionally, CL (872, 882) may also include an I / O control logic. 도 8은 메모리들(832, 834)이 CL(872, 882)에 연결되는 것뿐만 아니라 I/O 디바이스들(814)도 제어 로직(872, 882)에 연결되는 것을 도시한다. Figure 8 is the I / O devices, as well as connected to the memories (832, 834) the CL (872, 882) (814) is also shown to be connected to the control logic (872, 882). 레거시 I/O 디바이스들(815)이 칩셋(890)에 연결된다. Legacy I / O device 815 is coupled to chipset 890.

이하 도 9을 참조하면, 본 발명의 실시예에 따른 SoC(900)의 블록도가 도시되어 있다. Referring now to Figure 9, a block diagram of the SoC (900) according to an embodiment of the invention is also the city. 도 5에서의 유사한 요소들은 유사한 참조 번호들을 지닌다. Similar elements in FIG. 5 jininda similar reference number. 또한, 파선 박스들은 더 진보된 SoC들에 대한 선택적인 특징들이다. The broken line boxes are optional features for the more advanced SoC. 도 9에서, 상호접속 유닛(들)(902)은, 하나 이상의 코어들(502A 내지 502N)의 세트 및 공유 캐시 유닛(들)(506)을 포함하는 애플리케이션 프로세서(910); 9, the interconnection unit (s) 902, an application processor 910 that includes one or more sets of cores and a shared cache unit (s) 506 of (502A to 502N); 시스템 에이전트 유닛(510); Agent system unit 510; 버스 제어기 유닛(들)(516); The bus controller unit (s) 516; 통합된 메모리 제어기 유닛(들)(514); The integrated memory controller unit (s) 514; 통합된 그래픽스 로직(508), 스틸(still) 및/또는 비디오 카메라 기능성을 제공하기 위한 이미지 프로세서(924), 하드웨어 오디오 가속화를 제공하기 위한 오디오 프로세서(926), 및 비디오 인코드/디코드 가속화를 제공하기 위한 비디오 프로세서(928)를 포함할 수 있는 하나 이상의 미디어 프로세서들(920)의 세트; Providing an audio processor 926, and the video encode / decode acceleration to provide an image processor 924, hardware audio acceleration to provide an integrated graphics logic 508, the still (still), and / or video camera functionality a set of one or more media processors, which may include a video processor 928 (920) for; 정적 랜덤 액세스 메모리(SRAM) 유닛(930); Static random access memory (SRAM) unit 930; 직접 메모리 액세스(DMA) 유닛(932); A direct memory access (DMA) unit 932; 및 하나 이상의 외부 디스플레이에 연결하기 위한 디스플레이 유닛(940)에 연결된다. And it is connected to a display unit 940 for connecting to one or more external display.

도 10은 일 실시예에 따른 적어도 하나의 명령어를 수행할 수 있는 중앙 처리 유닛(CPU)과 그래픽스 처리 유닛(GPU)을 포함하는 프로세서를 도시한다. Figure 10 shows the processor including at least one instruction to perform a central processing unit (CPU) and a graphics processing unit (GPU), which according to one embodiment. 일 실시예에서, 적어도 하나의 실시예에 따른 연산들을 수행하기 위한 명령어가 CPU에 의해 수행될 수 있다. In one embodiment, the instructions for performing the operations in accordance with at least one embodiment may be performed by the CPU. 다른 실시예에서, 이 명령어는 GPU에 의해 수행될 수 있다. In another embodiment, the instructions may be performed by the GPU. 또 다른 실시예에서, 이 명령어는 GPU 및 CPU에 의해 수행되는 연산들의 조합을 통해 수행될 수 있다. In yet another embodiment, the instructions may be performed through a combination of operations performed by the GPU and CPU. 예를 들어, 일 실시예에서, 일 실시예에 따른 명령어가 GPU 상에서의 실행을 위해 수신되어 디코딩될 수 있다. For example, in one embodiment, an instruction in accordance with one embodiment can be decoded is received for execution on GPU. 그러나, 디코딩된 명령어 내의 하나 이상의 연산은 CPU에 의해 수행되고, 그 결과는 명령어의 최종 리타이어먼트를 위해 GPU에 리턴될 수 있다. However, one or more operations in the instruction are decoded and executed by the CPU, the result may be returned to the GPU for final retirement of the instruction garment. 반대로, 일부 실시예들에서, CPU가 1차 프로세서의 역할을 하고, GPU가 코프로세서의 역할을 할 수 있다. Conversely, in some embodiments, the CPU acts as the primary processor, the GPU can not serve as a co-processor.

일부 실시예들에서, 고도의 병렬 스루풋 프로세서들로부터 이익을 얻는 명령어들은 GPU에 의해 수행될 수 있는 한편, 깊은 파이프라인형 아키텍처들(deeply pipelined architectures)로부터 이익을 얻는 프로세서들의 성능으로부터 이익을 얻는 명령어들은 CPU에 의해 수행될 수 있다. In some embodiments, that command from the highly parallel throughput processor of the benefit may be performed by the GPU On the other hand, instructions to benefit from the performance of the processors to benefit from a deep pipeline architecture (deeply pipelined architectures) It may be performed by the CPU. 예를 들어, 그래픽스, 과학 애플리케이션, 금융 애플리케이션 및 다른 병렬 워크로드(workload)는 GPU의 성능으로부터 이익을 얻고, 그에 따라 실행될 수 있는 한편, 운영 체제 커널 또는 애플리케이션 코드와 같은 더 순차적인 애플리케이션들은 CPU에 대해 더 적합할 수 있다. For example, graphics, scientific applications, financial applications and other parallel workloads (workload) are benefiting from GPU performance, more sequential applications, such as On the other hand, the operating system kernel or application code that can be executed accordingly have a CPU for it may be more appropriate.

도 10에서, 프로세서(1000)는 CPU(1005), GPU(1010), 이미지 프로세서(1015), 비디오 프로세서(1020), USB 제어기(1025), UART 제어기(1030), SPI/SDIO 제어기(1035), 디스플레이 디바이스(1040), 고화질 멀티미디어 인터페이스(HDMI: High-Definition Multimedia Interface) 제어기(1045), MIPI 제어기(1050), 플래시 메모리 제어기(1055), DDR(dual data rate) 제어기(1060), 보안 엔진(1065), 및 I 2 S/I 2 C(Integrated Interchip Sound/Inter-Integrated Circuit) 인터페이스(1070)를 포함한다. 10, the processor 1000 includes a CPU (1005), GPU (1010), the image processor 1015, a video processor (1020), USB controller (1025), UART controller (1030), SPI / SDIO controller 1035 A display device (1040), High Definition multimedia interface (HDMI: High-Definition multimedia interface) controller (1045), MIPI controller 1050, flash memory controller (1055), DDR (dual data rate) controller 1060, security engine (1065), and I 2 S / I 2 C include (Integrated Interchip Sound / Inter-Integrated Circuit) interface 1070. 더 많은 CPU 또는 GPU 및 다른 주변 장치 인터페이스 제어기들을 비롯한 다른 로직 및 회로들이 도 10의 프로세서에 포함될 수 있다. It may be included in more CPU or GPU, and other peripherals, and other logic circuits of the processor 10, including a interface controller.

적어도 하나의 실시예의 하나 이상의 양태는, 머신에 의해 판독될 때에 이 머신으로 하여금 본 명세서에 설명된 기술들을 수행하는 로직을 제조하게 하는, 프로세서 내의 다양한 로직을 표현하는 머신 판독가능 매체 상에 저장된 대표적인 데이터에 의해 구현될 수 있다. Example least one aspect at least one embodiment, when read by a machine cause the machine stored on a machine-readable medium of expressing various logic within the processor to be produced the logic to perform the techniques described herein, a representative It can be implemented by the data. "IP 코어들"로서 알려진 이러한 표현들은 유형의 머신 판독가능 매체("테이프") 상에 저장되고, 다양한 고객들 또는 제조 설비들에 공급되어, 로직 또는 프로세서를 실제로 제조하는 제조 머신들로 로딩될 수 있다. "IP cores" This expression is known as they are stored on a machine readable medium ( "tape") of the type, are supplied to various customers or manufacturing facilities, it may be loaded into manufacturing machines that actually produce a logic or processor have. 예를 들어, 중국 과학원의 계산 기술 연구소(ICT)에 의해 개발된 Loongson IP 코어들 및 ARM Holdings, Ltd.에 의해 개발된 Cortex™ 계열의 프로세서들과 같은 IP 코어들은 Texas Instruments, Qualcomm, Apple 또는 Samsung과 같은 다양한 고객들 또는 실시권자들에게 판매되거나 라이센싱되고, 이러한 고객들 또는 실시권자들에 의해 제조된 프로세서들에 구현될 수 있다. For example, IP cores, such as the Loongson IP cores and ARM Holdings, the Cortex ™ family of processors developed by Ltd. developed by the Institute of Computing Technology, Chinese Academy of Sciences (ICT) are Texas Instruments, Qualcomm, Apple or Samsung It sold to a variety of customers or licensee or license, such as may be implemented in the processor manufactured by such customers or licensee.

도 11은 일 실시예에 따른 IP 코어들의 개발을 나타내는 블록도를 도시한다. Figure 11 shows a block diagram illustrating the development of IP cores according to one embodiment. 스토리지(1130)는 시뮬레이션 소프트웨어(1120) 및/또는 하드웨어 또는 소프트웨어 모델(1110)을 포함한다. The storage 1130 includes simulation software 1120 and / or hardware or software model 1110. 일 실시예에서, IP 코어 설계를 표현하는 데이터가 메모리(1140)(예를 들어, 하드 디스크), 유선 접속(예를 들어, 인터넷)(1150) 또는 무선 접속(1160)을 통해 스토리지(1130)에 제공될 수 있다. In one embodiment, the data representing the IP core design, the memory 1140, storage 1130 via a (e. G., Hard disk), a wired connection (e.g., the Internet) (1150) or a wireless connection (1160) to be provided. 다음에, 시뮬레이션 툴 및 모델에 의해 생성된 IP 코어 정보는, 적어도 하나의 실시예에 따른 적어도 하나의 명령어를 수행하기 위해 제3자에 의해 그것이 제조될 수 있는 제조 설비로 전송될 수 있다. Next, the IP core information generated by the simulation tools and models, and can be sent to the manufacture facility which it can be manufactured by a third party to perform at least one command in accordance with at least one embodiment.

일부 실시예들에서, 하나 이상의 명령어는 제1 타입 또는 아키텍처(예를 들어, x86)에 대응하고, 상이한 타입 또는 아키텍처(예를 들어, ARM)의 프로세서 상에서 번역되거나 에뮬레이트될 수 있다. In some embodiments, one or more instructions may be translated or emulated on a processor of a first type or architecture (e.g., x86) corresponds to, a different type or architecture (e.g., ARM) on. 그러므로, 일 실시예에 따르면, 명령어는, ARM, x86, MIPS, GPU, 또는 다른 프로세서 타입 또는 아키텍처를 비롯한 임의의 프로세서 또는 프로세서 타입 상에서 수행될 수 있다. Therefore, according to one embodiment, the instructions may be performed on any processor, or processor types, including ARM, x86, MIPS, GPU, or other type of processor or architecture.

도 12는 일 실시예에 따라 제1 타입의 명령어가 상이한 타입의 프로세서에 의해 에뮬레이트되는 방법을 도시한다. Figure 12 illustrates the method of the emulated by the first type of instruction different types of processors according to one embodiment. 도 12에서, 프로그램(1205)은, 일 실시예에 따른 명령어와 동일하거나 실질적으로 동일한 기능을 수행할 수 있는 일부 명령어들을 포함한다. In Figure 12, the program 1205, includes some instructions that can perform the same function as the command in the same or substantially in accordance with one embodiment. 그러나, 프로그램(1205)의 명령어들은 프로세서(1215)와 상이하거나 호환되지 않는 타입 및/또는 포맷일 수 있고, 이는 프로그램(1205)에서의 타입의 명령어들이 본래 프로세서(1215)에 의해 실행가능하지 않을 수 있다는 것을 의미한다. However, instructions in program 1205 may not be executed by the processor 1215 and may be different or incompatible type and / or format, which program 1205 to the original processor 1215 type of the instruction in the It can mean that. 그러나, 에뮬레이션 로직(1210)의 도움으로, 프로그램(1205)의 명령어들은 본래 프로세서(1215)에 의해 실행될 수 있는 명령어들로 번역된다. However, with the help of emulation logic 1210, the instructions of the program 1205 are translated into instructions that can be executed by a native processor (1215). 일 실시예에서, 에뮬레이션 로직은 하드웨어로 구현된다. In one embodiment, the emulation logic is implemented in hardware. 다른 실시예에서, 에뮬레이션 로직은, 프로그램(1205)에서의 타입의 명령어들을 본래 프로세서(1215)에 의해 실행가능한 타입으로 번역하는 소프트웨어를 포함하는 유형의 머신 판독가능 매체에 구현된다. In another embodiment, the emulation logic is implemented in the type of machine-readable medium containing software to translate the type of the instruction in program 1205 to the available types of execution by the native processor 1215. 다른 실시예들에서, 에뮬레이션 로직은, 고정 기능 또는 프로그램가능 하드웨어와 유형의 머신 판독가능 매체 상에 저장된 프로그램의 조합이다. In other embodiments, the emulation logic function is a combination of the fixed or programmable hardware and type of machine-readable program stored on a medium. 일 실시예에서, 프로세서는 에뮬레이션 로직을 포함하는 한편, 다른 실시예들에서, 에뮬레이션 로직은 프로세서의 외부에 존재하며 제3자에 의해 제공된다. In one embodiment, the processor in the other hand, another embodiment comprises an emulation logic, the emulation logic is provided by a third party is present on the outside of the processor. 일 실시예에서, 프로세서는, 프로세서에 포함되거나 프로세서와 연관된 펌웨어 또는 마이크로코드를 실행함으로써 소프트웨어를 포함하는 유형의 머신 판독가능 매체에 구현된 에뮬레이션 로직을 로딩할 수 있다. In one embodiment, the processor can load the emulation logic implemented in the type of machine-readable media including software, by including a processor or the firmware or microcode associated with the processor.

도 13은 본 발명의 실시예들에 따른 소스 명령어 세트에서의 2진 명령어들을 타깃 명령어 세트에서의 2진 명령어들로 변환하기 위한 소프트웨어 명령어 변환기의 이용을 대조하는 블록도이다. 13 is a block diagram of the control the use of software instructions converter for converting the binary instructions in the source instruction set, in accordance with embodiments of the invention to the binary instructions from the target instruction set. 도시된 실시예에서, 명령어 변환기는 소프트웨어 명령어 변환기이지만, 대안적으로 명령어 변환기는 소프트웨어, 펌웨어, 하드웨어 또는 이들의 다양한 조합으로 구현될 수 있다. In the illustrated embodiment, the command converter is Although converters software instructions, alternatively, the command converter may be implemented in software, firmware, hardware, or various combinations of these. 도 13은 하이 레벨 언어(1302)로 된 프로그램이 x86 컴파일러(1304)를 이용하여 컴파일링되어, 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(1316)에 의해 본래 실행될 수 있는 x86 2진 코드(1306)를 생성할 수 있는 것을 도시한다. 13 is a x86 2 binary code (1306, which is a high-level language 1302 program is compiled using the x86 compiler 1304, can be performed essentially by the processor 1316 has at least one x86 instruction set core ) shows that it can generate. 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(1316)는, 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 결과를 달성하기 위해서, (1) 인텔 x86 명령어 세트 코어의 명령어 세트의 상당부 또는 (2) 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서 상에서 실행되도록 되어 있는 오브젝트 코드 버전의 애플리케이션들 또는 다른 소프트웨어를 호환가능하게 실행하거나 또는 다른 방식으로 처리함으로써, 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 기능들을 수행할 수 있는 임의의 프로세서를 나타낸다. The processor 1316 has at least one of the x86 instruction set, the core, in order to achieve the same result as an Intel processor substantially having at least one of the x86 instruction set, the core (1) a substantial portion of the instruction set of the Intel x86 instruction set core or (2) at least one by processing the applications or other software object code version to run on an Intel processor with the x86 instruction set core runs interchangeably or different manner, at least one of the x86 instruction set core which refers to any processor capable of performing the same function in substantially the Intel processors. x86 컴파일러(1304)는, 부가적인 링크 처리(linkage processing)를 갖거나 갖지 않고서 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(1316) 상에서 실행될 수 있는 x86 2진 코드(1306)(예를 들어, 오브젝트 코드)를 생성하도록 동작가능한 컴파일러를 나타낸다. x86 compiler 1304, an additional link processing (linkage processing) have or without having at least one x86 x86 2 binary code 1306 that the command can be executed on a processor 1316 having a set of cores (e.g., object to generate code) denotes a compiler operable. 유사하게, 도 13은 하이 레벨 언어(1302)로 된 프로그램이 대안적인 명령어 세트 컴파일러(1308)를 이용하여 컴파일링되어, 적어도 하나의 x86 명령어 세트 코어를 갖지 않는 프로세서(1314)(예를 들어, 캘리포니아주 서니베일에 있는 MIPS Technologies의 MIPS 명령어 세트를 실행하고/하거나 캘리포니아주 서니베일에 있는 ARM Holdings의 ARM 명령어 세트를 실행하는 코어들을 갖는 프로세서)에 의해 본래 실행될 수 있는 대안적인 명령어 세트 2진 코드(1310)를 생성할 수 있는 것을 도시한다. Similarly, Figure 13, for the compiled using a high level language 1302, the program is an alternate instruction set compiler 1308, the processor 1314 does not have at least one of the x86 instruction set, the core (for example, California Sunny execution the MIPS instruction set of the MIPS Technologies in the bale and / or an alternative set of instructions in the original can be executed by a processor having a core that is executing ARM instruction set of ARM Holdings in Sunnyvale, California), binary code It shows that to generate 1310. 명령어 변환기(1312)는, x86 2진 코드(1306)를, x86 명령어 세트 코어를 갖지 않는 프로세서(1314)에 의해 본래 실행될 수 있는 코드로 변환하는데 이용된다. Instruction converter 1312 is used to convert the 2 x86 binary code 1306, the original code can be executed by the processor 1314 does not have the x86 instruction set core. 이러한 변환된 코드는 대안적인 명령어 세트 2진 코드(1310)와 동일할 가능성이 낮은데, 그 이유는 이것을 할 수 있는 명령어 변환기가 제조되기 어렵기 때문이다; The converted code is likely to be identical to the alternate instruction set binary code 1310 is low, because it is difficult to command converter to do this are prepared; 그러나, 변환된 코드는 일반 연산을 달성할 것이며, 대안적인 명령어 세트로부터의 명령어들로 이루어질 것이다. However, the converted code will achieve normal operation, it will be composed of instructions from the alternate instruction set. 따라서, 명령어 변환기(1312)는, 에뮬레이션, 시뮬레이션 또는 임의의 다른 프로세스를 통해, x86 명령어 세트 프로세서 또는 코어를 갖지 않는 프로세서 또는 다른 전자 디바이스가 x86 2진 코드(1306)를 실행하는 것을 허용하는 소프트웨어, 펌웨어, 하드웨어 또는 이들의 조합을 나타낸다. Therefore, the software that a command converter 1312, emulation, simulation, or via any other process, x86 instruction set processor or not having a core processor or other electronic device allows to execute the x86 2 binary code 1306, firmware, hardware, or represents a combination of the two.

도 14는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 이용할 수 있는 게놈 시퀀싱 및 정렬 처리의 예의 일 실시예에 대한 도면을 도시한다. Figure 14 shows a diagram for illustrating one embodiment of an instruction to provide a SIMD vector population count functional genome sequencing and alignment process that can be used. 이중 나선(1401)은, 수소 결합들에 의한 4가지 염기 뉴클레오티드인 티민, 시토신, 아데닌 및 구아닌의 염기 쌍들을 통해 서로 접속되는 당인산 백본(sugar phosphate backbone)의 2개의 역평행 배향 가닥(antiparallel oriented strands)을 포함한다. Double helix 1401, four base nucleotide is thymine, cytosine, two anti-parallel oriented strands of the phosphate backbone (sugar phosphate backbone) each being connected to one another through base pairing of adenine and guanine by the hydrogen bonding (antiparallel oriented It includes strands). 염기 쌍들(예를 들어, 1410 및 1420)은 1402에 도시된 바와 같이 당인산 백본을 따라 시퀀스들로 조직된 1403과 같은 뉴클레오티드들로 구성된다. Base pairs (e.g., 1410 and 1420) is comprised of a nucleotide, such as the tissue 1403 to the sequences according to the sugar phosphate backbone as shown in 1402. 예를 들어, 염기 쌍(1410)은 구아닌 뉴클레오티드(1412) 및 시토신 뉴클레오티드(1414)로 구성되고; For example, base pair 1410 is composed of a guanine nucleotide 1412 and a cytosine nucleotide 1414; 염기 쌍(1420)은 티민 뉴클레오티드(1422) 및 아데닌 뉴클레오티드(1424)로 구성된다. Base pair 1420 is composed of thymine nucleotides 1422 and the adenine nucleotide (1424). 뉴클레오티드들의 시퀀스들은 컴퓨터 애플리케이션 소프트웨어(1404)에 의해 (예를 들어 문자들 T, C, A 및 G의 스트링들(1442 및 1444)로서; 그리고/또는 염기 뉴클레오티드들의 2-비트 또는 때로는 4-비트 압축 인코딩들의 시퀀스들(1452 및 1454)로서) 인코딩되고 저장되고 처리된다. The sequence of nucleotides have a (e. G. The string of letters T, C, A and G (1442 and 1444) by a computer application software (1404); and / or 2-bit or 4-bit compression of the base sometimes nucleotides encoding the sequence of a (1452 and 1454)) are encoded and stored and processed.

인간 게놈은 상당량의 정보를 나타내며, 이러한 다량의 정보를 저장하는 것은 일반적으로 4가지 염기 뉴클레오티드인 티민, 시토신, 아데닌 및 구아닌(T, C, A, G)을 비트 쌍들로서 표현하는 것을 수반한다. The human genome represents a significant amount of information, storing this large amount of information involves generally represented as four kinds of the base nucleotide is thymine, cytosine, adenine and guanine (T, C, A, G) the bit pair. 인간 게놈에는 약 3십억개의 염기 쌍들이 존재하고, 염기당 2 비트로(4가지 선택안), 인간 게놈은 약 6십억 비트 또는 약 750MB를 갖는다(각각의 염색체의 하나의 카피를 저장함). The human genome has there are about 3 billion base pairs, base by 2 bits (not the four selections) per human genome has about 6 billion bits or about 750MB (storing a single copy of each chromosome). 더 일반적인 관행은, 적어도 중간 포맷으로, 염기 쌍의 각각의 염기 뉴클레오티드를 2 비트의 데이터로 표현하는 것일 수 있으며, 이는 약 1.4GB의 정보를 요구한다. The common practice, may be to at least the intermediate format, representing each nucleotide base of a base pair with a two bit data, which requests information about 1.4GB. 시퀀스들을 저장하기 위한 한가지 포맷은 "packedDna"로서 알려져 있다. One kinds of formats for storing a sequence is known as a "packedDna". 염기당 2 비트로 패킹되는 DNA 또는 디옥시리보핵산은 2진의 2-비트 값들로서 표현된다: T = 00, C = 01, A = 10, G = 11. 제1 염기는 바이트의 최상위 2 비트에 있으며; DNA or deoxyribonucleic acid which is 32 bits per base packing is represented as a 2-bit binaries values: T = 00, C = 01, A = 10, G = 11. The first base is in the most significant two bits of a byte; 마지막 염기는 최하위 2 비트에 있다. Last base is in the least significant two bits. 예를 들어, 시퀀스 TCAG는 2진법으로 00011011(16진 0x1B)로서 표현된다. For example, the sequence is expressed as TCAG 00,011,011 (hex 0x1B) to binary. DNA 시퀀싱 기술들은 신속하며 정확한 정렬 프로그램들을 요구하는데, 예를 들어, 이들 중 하나는, 버로우즈-휠러 변환(Burrows-Wheeler Transform)을 이용한 역방향 검색(backward searching)에 기초하여, 종종 온더 플라이(on the fly)로, 다양한 시퀀스 길이들에 대한 염기 뉴클레오티드 출현 카운트들의 거대한 어레이들을 구축한다. DNA sequencing techniques are fast, and to require precise alignment program, e.g., one of which, Burroughs - on the basis of the search backward (backward searching) Using Wheeler transformation (Burrows-Wheeler Transform), often on-the-fly (on the a fly), to build a huge array of base nucleotide occurrence count for various length sequences. 따라서, 뉴클레오티드들의 출현들을 신속하게 카운트하는 것은 성능 및 메모리 스토리지 요건에 상당히 영향을 미칠 수 있다. Thus, quickly count the appearance of nucleotides can have a significant impact on the performance and memory storage requirements.

도 15a는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어의 이용에 대한 준비 중의 벡터 서브-바이트 압축해제의 예의 일 실시예에 대한 흐름도를 도시한다. It shows a flow diagram for illustrating one embodiment of byte decompression - Figure 15a is a vector in the preparation of the use of the instruction to provide a SIMD vector population count functional sub. 본 명세서에 개시된 프로세스(1501) 및 다른 프로세스들은, 범용 머신들에 의해 또는 특수 목적 머신들에 의해 또는 이들의 조합에 의해 실행가능한 전용 하드웨어 또는 소프트웨어 또는 펌웨어 연산 코드들을 포함할 수 있는 처리 블록들에 의해 수행된다. The processing blocks that may comprise the specification process 1501, and other processes, can be executed by, or by a combination thereof to or special purpose machine by a general-purpose machine, dedicated hardware or software or firmware operation codes disclosed in It is carried out by.

예시된 예는 (예를 들어 packedDna와 같은) 요소당 패킹된 2-비트 포맷으로부터 바이트 요소당 8-비트 포맷으로의 벡터 압축해제의 예이다. The illustrated example is an example of a vector decompression of the 8-bit per byte format element from the packed two-bit-per-format (e. G., Such as packedDna) element. 2가 균등하게 8을 나누기 때문에, 요소당 패킹된 2-비트 포맷의 각각의 바이트는, 각각의 가능한 초기 비트 정렬에 대해 하나씩, 4개의 요소를 포함한다. Since divalent evenly divide the 8, each byte of the packed two-bit format each element, including the one, four elements for each bit of the initial alignment as possible.

프로세스(1501)의 셔플(shuffle) 처리 블록(1509)에서, 첫번째 2개의 서브-바이트 요소인 a 및 e를 적어도 포함하는 소스(1512)의 첫번째 바이트인 영(0) 및 두번째 바이트인 일(1)은 벡터(1515)의 제1 벡터 요소(예를 들어, 32-비트 벡터 요소)의 최하위 부분으로 카피되거나 셔플된다. In the shuffle (shuffle) processing block 1509 of process 1501, the first two sub-byte element of a and e for the first byte of zero (0) and the second byte of one (1 of the source (1512) comprising at least ) it is copied or shuffle the least significant portion of the first vector element (for example, a 32-bit vector elements) of the vector (1515). 두번째 2개의 서브-바이트 요소인 i 및 m을 적어도 포함하는 세번째 바이트인 이(2) 및 네번째 바이트인 삼(3)은 벡터(1515)의 제1 벡터 요소의 최상위 부분으로 카피되거나 셔플된다. The second two sub-byte is a third byte of i and m, including at least element (2) and the fourth byte three (3) is copied or shuffle the top portion of the first vector element of the vector (1515). 또한 셔플 처리 블록(1509)에 도시된 바와 같이, 시프팅에 대한 준비로, 세번째 2개의 서브-바이트 요소인 b 및 f를 적어도 포함하는 소스(1512)의 다섯번째 바이트인 영(0) 및 여섯번째 바이트인 일(1)은 벡터(1515)의 제2 벡터 요소의 최하위 부분으로 카피되거나 셔플되고, 네번째 2개의 서브-바이트 요소인 j 및 n을 적어도 포함하는 일곱번째 바이트인 이(2) 및 여덟번째 바이트인 삼(3)은 벡터(1515)의 제2 벡터 요소의 최상위 부분으로 카피되거나 셔플된다. In addition, as, in preparation for the shifting, and the third two sub shown in the shuffling process block (1509) of zero (0) and six fifth byte of the source (1512) comprising the b and f byte element at least byte of one (1) is copied or shuffle the least significant portion of the second vector element of the vector 1515, and the fourth second sub-two of the seventh byte containing the j and n least-byte element (2), and an eighth byte three (3) is copied or shuffle the top portion of the second vector element of the vector (1515). 첫번째 2개의 서브-바이트 요소 및 두번째 2개의 서브-바이트 요소 모두는 동일한 초기 비트 정렬을 가질 수 있으며, 세번째 2개의 서브-바이트 요소 및 네번째 2개의 서브-바이트 요소 모두도 또한 동일한 초기 비트 정렬을 가질 수 있다는 것이 인식될 것이다. The first two sub-byte elements, and a second two sub-all bytes element can have the same initial bit aligned, and the third two sub-byte elements, and a fourth two sub-all bytes element also have the same initial bit alignment it will be appreciated that. 또한 셔플 처리 블록(1509)에 도시된 바와 같이, 다섯번째 2개의 서브-바이트 요소인 c 및 g를 적어도 포함하는 소스(1512)의 아홉번째 바이트인 영(0) 및 열번째 바이트인 일(1)은 벡터(1515)의 제3 벡터 요소의 최하위 부분으로 카피되거나 셔플되고, 여섯번째 2개의 서브-바이트 요소인 k 및 o를 적어도 포함하는 열한번째 바이트인 이(2) 및 열두번째 바이트인 삼(3)은 벡터(1515)의 제3 벡터 요소의 최상위 부분으로 카피되거나 셔플된다. Further, the fifth two sub as shown in shuffle processing blocks 1509 - one byte element c and g to the ninth byte of zero (0), and the tenth byte of the source (1512) comprising at least (1 a three-byte element of k and a in the eleventh byte containing o at least 2 and the twelfth byte (-) is copied or shuffle the least significant portion of the three vector elements of the vector 1515, sixth two sub 3) is copied or shuffle the top portion of the three vector elements of the vector (1515). 시프팅에 대한 준비로, 일곱번째 2개의 서브-바이트 요소인 d 및 h를 적어도 포함하는 소스(1512)의 열세번째 바이트인 영(0) 및 열네번째 바이트인 일(1)은 벡터(1515)의 제4 벡터 요소의 최하위 부분으로 카피되거나 셔플되고, 여덟번째 2개의 서브-바이트 요소인 l 및 p를 적어도 포함하는 열다섯번째 바이트인 이(2) 및 열여섯번째 바이트인 삼(3)은 벡터(1515)의 제4 벡터 요소의 최상위 부분으로 카피되거나 셔플된다. In preparation for shifting the seventh two sub-byte elements heat source (1512) comprising the d and h, at least the third byte of zero (0) and fourteenth bytes of one (1) vector (1515) the first is a copy or shuffle the lowermost portion of the four vector elements, eighth two sub-byte element of l and is a p a fifteenth bytes that contain at least 2 and the sixteenth byte three (3) vector is copied or shuffle the top portion of the fourth element of the vector (1515).

시프트 처리 블록(1517)에서, 첫번째 2개의 서브-바이트 요소 및 두번째 2개의 서브-바이트 요소(즉, a, e, i 및 m)를 유지하는 벡터(1515)의 제1 벡터 요소는 벡터(1522)에서의 제1 시프트 카운트인 영(0)만큼 시프트되고; In the shift processing block 1517, the first two sub-byte elements, and a second two sub-byte element first vector element vectors (1522 vectors (1515) for holding (i. E., A, e, i and m) ) it is shifted by the first shift count of zero in; 세번째 2개의 서브-바이트 요소 및 네번째 2개의 서브-바이트 요소(즉, b, f, j 및 n)를 유지하는 제2 벡터 요소는 제2 시프트 카운트인 이(2)만큼 시프트되고; Two third sub-element, and the fourth byte the two sub-elements byte second vector element for holding (i. E, b, f, j and n) are shifted by two (2) of the second shift count; 다섯번째 2개의 서브-바이트 요소 및 여섯번째 2개의 서브-바이트 요소(즉, c, g, k 및 o)를 유지하는 제3 벡터 요소는 제3 시프트 카운트인 사(4)만큼 시프트되고; Fifth two sub-elements, and the sixth byte two sub-byte elements third vector element to maintain (i.e., c, g, k and o) is shifted by the first four (4) 3 shift count; 일곱번째 2개의 서브-바이트 요소 및 여덟번째 2개의 서브-바이트 요소(즉, d, h, l 및 p)를 유지하는 제4 벡터 요소는 제4 시프트 카운트인 육(6)만큼 시프트되어, 이러한 서브-바이트 요소들을 벡터(1525)에서의 그들의 각각의 바이트의 최하위 비트에 정렬한다. Seventh two sub-byte elements, and eighth two sub-fourth vector element that holds the bytes element (i. E, d, h, l and p) is shifted by six (6) of the fourth shift count, such and aligning the byte element in the vector of least significant bits with their respective byte in a 1525-sub. 일 실시예에서, 이러한 시프트들은 SIMD 시프터들에 의해 벡터(1515)의 32-비트 벡터 요소들에 대해 동시에 수행된다. In one embodiment, this shift are simultaneously performed on the 32-bit vector elements of the vector 1515 by the SIMD shifter. 대안적인 실시예들에서, 대신에 더 작거나 더 큰 시프트들이 이용될 수 있으며, 시프트들 전부는 동시에 수행되지 않을 수 있다. In alternative embodiments, instead they may be smaller or larger shift used in a shift of all may not be performed at the same time.

셔플 처리(1528)에서, 시프트된 제1, 제2, 제3 및 제4 벡터 요소 각각의 최하위 바이트 포지션으로부터의 바이트는 벡터(1530)의 제1 벡터 요소(예를 들어, 32-비트 벡터 요소)로 카피되거나 셔플되고; In the shuffling process (1528), shifting the first, second, third and the fourth byte from the vector elements, each of the least significant byte position of the first vector element of the vector (1530) (e.g., 32-bit vector elements ) is copied or shuffle; 시프트된 제1, 제2, 제3 및 제4 벡터 요소 각각의 두번째 최하위 바이트 포지션으로부터의 바이트는 벡터(1530)의 제2 벡터 요소로 카피되거나 셔플되고; The shifted first, second, third and fourth bytes of the vector elements from each of the second least significant byte position is copied or shuffle the second vector element of the vector (1530); 시프트된 제1, 제2, 제3 및 제4 벡터 요소 각각의 두번째 최상위 바이트 포지션으로부터의 바이트는 벡터(1530)의 제3 벡터 요소로 카피되거나 셔플되고; The shifted first, second, third and fourth bytes of the vector elements from each of the second most significant byte position is copied or shuffle a third vector elements of the vector (1530); 시프트된 제1, 제2, 제3 및 제4 벡터 요소 각각의 최상위 바이트 포지션으로부터의 바이트는 벡터(1530)의 제4 벡터 요소로 카피되거나 셔플되어, 그들의 오리지널 서브-바이트 순서를 복구한다. The shifted first, second, third and fourth bytes of the vector elements from each of the most significant byte position is copied or shuffled to the fourth vector elements of the vector 1530, their original sub-recovery byte order. 일 실시예에서, 셔플 또는 카피는 SIMD 벡터 서브-바이트 압축해제 기능성을 제공하는 하나 이상의 명령어를 디코딩하는 것으로부터 생성된 단일의 마이크로연산 또는 마이크로-op에 따라 SIMD 셔플러들에 의해 동시에 수행될 수 있다. In one embodiment, the shuffle or copy is SIMD vector sub-can be performed by the SIMD shuffler according to the bytes of uncompressed single functional micro-operations or micro -op of the generated from decoding the one or more instructions to provide at the same time have. 대안적인 실시예들에서, 셔플 또는 카피는 하나보다 많은 마이크로연산 또는 마이크로-op에 따라 SIMD 셔플러들 또는 다른 SIMD 실행 유닛들에 의해 또한 수행될 수 있다. In alternative embodiments, the shuffle or copy is in accordance with the number of micro-ops or a micro -op than one may also be performed by the SIMD shuffler or other SIMD execution unit.

AND 처리 블록(1542)에서, (예를 들어, 벡터(1541)를 이용하여) 벡터(1530)의 각각의 바이트의 다수의 최상위 비트가 정정되거나 마스킹된다. From the AND processing block 1542, (e.g., by using a vector 1541), a plurality of most significant bits of each byte of the vector 1530 is corrected or masked. 일 실시예에서, 도시된 바와 같이, 다수의 비트의 정정은 32-비트 벡터 요소의 각각의 바이트에서 6 비트를 영으로 설정한다. In one embodiment, as illustrated, the correction of the number of bits is set to six bits in each byte of the 32-bit vector elements to zero. 일부 실시예들에서, 프로세스(1501)의 SIMD 벡터 서브-바이트 압축해제는 매크로명령어들의 시퀀스로서 또는 마이크로코드 명령어들의 시퀀스로서 또는 이들의 조합으로서 구현될 수 있다. In some embodiments, SIMD vector of the sub-processes 1501-byte decompression may be implemented as a sequence of macro instructions, or micro code as a sequence of instructions, or a combination thereof.

도 15b는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어의 이용에 대한 준비 중의 벡터 서브-바이트 압축해제의 예시적인 프로세스(1502)의 대안적인 실시예에 대한 흐름도를 도시한다. Shows a flow diagram of an alternative embodiment of an exemplary process 1502 of bytes of uncompressed - Figure 15b is a vector in the preparation of the use of the instruction to provide a SIMD vector population count functional sub.

예시된 예는 요소당 패킹된 4-비트 포맷으로부터 바이트 요소당 8-비트 포맷으로의 벡터 압축해제의 예이다. The illustrated example is an example of a vector decompression of the 8-bit per byte format element from the packing 4-bit format each element. 4가 또한 균등하게 8을 나누기 때문에, 요소당 패킹된 4-비트 포맷의 각각의 바이트는, 각각의 가능한 초기 비트 정렬에 대해 하나씩, 2개의 요소를 포함한다. 4 is also uniformly because it breaks. 8, each of the bytes in a packed format, each 4-bit elements, including one, two elements for each bit of the initial alignment as possible.

프로세스(1502)의 셔플 처리 블록(1510)에서, 첫번째 2개의 서브-바이트 요소인 a 및 e를 적어도 포함하는 소스(1514)의 첫번째 바이트인 영(0) 및 두번째 바이트인 이(2)는 벡터(1515)의 제1 벡터 요소(예를 들어, 32-비트 벡터 요소)의 최하위 부분으로 카피되거나 셔플된다. In the shuffling process block 1510 of process 1502, the first two sub-bytes of the elements of the first byte of zero (0) and the second byte of the source (1514) comprising a and e at least 2 vector the first element of the vector 1515 is copied or shuffle the least significant portion of (e.g., 32-bit vector elements). 두번째 2개의 서브-바이트 요소인 i 및 m을 적어도 포함하는 세번째 바이트인 사(4) 및 네번째 바이트인 육(6)은 벡터(1515)의 제1 벡터 요소의 최상위 부분으로 카피되거나 셔플된다. The second two sub-byte element in the third four bytes comprising a i m, and at least 4 and the fourth byte six (6) is copied or shuffle the top portion of the first vector element of the vector (1515). 또한 셔플 처리 블록(1510)에 도시된 바와 같이, 시프팅에 대한 준비로, 세번째 2개의 서브-바이트 요소인 b 및 f를 적어도 포함하는 소스(1514)의 다섯번째 바이트인 영(0) 및 여섯번째 바이트인 이(2)는 벡터(1515)의 제2 벡터 요소의 최하위 부분으로 카피되거나 셔플되고, 네번째 2개의 서브-바이트 요소인 j 및 n을 적어도 포함하는 일곱번째 바이트인 사(4) 및 여덟번째 바이트인 육(6)은 벡터(1515)의 제2 벡터 요소의 최상위 부분으로 카피되거나 셔플된다. In addition, as, in preparation for the shifting, and the third two sub shown in the shuffling process block (1510) of zero (0) and six fifth byte of the source (1514) comprising the b and f byte element at least the second byte of the (2) is copied or shuffle the least significant portion of the second vector element of the vector 1515, and the fourth second sub-byte element of j and n of the four (4) the seventh byte comprises at least, and an eighth byte six (6) is copied or shuffle the top portion of the second vector element of the vector (1515). 첫번째 2개의 서브-바이트 요소 및 두번째 2개의 서브-바이트 요소 모두는 동일한 초기 비트 정렬을 가질 수 있으며, 세번째 2개의 서브-바이트 요소 및 네번째 2개의 서브-바이트 요소 모두도 또한 동일한 초기 비트 정렬을 가질 수 있다는 것이 인식될 것이다. The first two sub-byte elements, and a second two sub-all bytes element can have the same initial bit aligned, and the third two sub-byte elements, and a fourth two sub-all bytes element also have the same initial bit alignment it will be appreciated that. 또한 셔플 처리 블록(1510)에 도시된 바와 같이, 다섯번째 2개의 서브-바이트 요소인 c 및 g를 적어도 포함하는 소스(1514)의 아홉번째 바이트인 일(1) 및 열번째 바이트인 삼(3)은 벡터(1515)의 제3 벡터 요소의 최하위 부분으로 카피되거나 셔플되고, 여섯번째 2개의 서브-바이트 요소인 k 및 o를 적어도 포함하는 열한번째 바이트인 오(5) 및 열두번째 바이트인 칠(7)은 벡터(1515)의 제3 벡터 요소의 최상위 부분으로 카피되거나 셔플된다. Further, the fifth two sub as shown in shuffling process block (1510) of three (3 bytes element c and g to the source 1514, the ninth byte, one (1) and the tenth byte, including at least ) it is copied or shuffle the least significant portion of the three vector elements of the vector 1515, sixth two sub-in seven-byte element in which k and o the eleventh byte of five (5) and the twelfth byte containing at least ( 7) is copied or shuffle the top portion of the three vector elements of the vector (1515). 시프팅에 대한 준비로, 일곱번째 2개의 서브-바이트 요소인 d 및 h를 적어도 포함하는 소스(1514)의 열세번째 바이트인 일(1) 및 열네번째 바이트인 삼(3)은 벡터(1515)의 제4 벡터 요소의 최하위 부분으로 카피되거나 셔플되고, 여덟번째 2개의 서브-바이트 요소인 l 및 p를 적어도 포함하는 열다섯번째 바이트인 오(5) 및 열여섯번째 바이트인 칠(7)은 벡터(1515)의 제4 벡터 요소의 최상위 부분으로 카피되거나 셔플된다. In preparation for the shifting, seventh two sub-byte element in the work 1 and the fourteenth byte thirteenth byte of the source 1514 that includes d and h, at least three (3) Vector 1515 the first is a copy or shuffle the lowermost portion of the four vector elements, eighth two sub-byte element in fifteenth byte of five (5) and sixteenth bytes that contain a l and p at least seven (7) vector is copied or shuffle the top portion of the fourth element of the vector (1515).

시프트 처리 블록(1518)에서, 첫번째 2개의 서브-바이트 요소 및 두번째 2개의 서브-바이트 요소(즉, a, e, i 및 m)를 유지하는 벡터(1515)의 제1 벡터 요소는 벡터(1522)에서의 제1 시프트 카운트인 영(0)만큼 시프트되고; In the shift processing block 1518, the first two sub-byte elements, and a second two sub-byte element first vector element vectors (1522 vectors (1515) for holding (i. E., A, e, i and m) ) it is shifted by the first shift count of zero in; 세번째 2개의 서브-바이트 요소 및 네번째 2개의 서브-바이트 요소(즉, b, f, j 및 n)를 유지하는 제2 벡터 요소는 제2 시프트 카운트인 사(4)만큼 시프트되고; Two third sub-element, and the fourth byte the two sub-second vector element for holding the element in bytes (that is, b, f, j and n) are shifted by the four (4) second shift count; 다섯번째 2개의 서브-바이트 요소 및 여섯번째 2개의 서브-바이트 요소(즉, c, g, k 및 o)를 유지하는 제3 벡터 요소는 제3 시프트 카운트인 영(0)만큼 시프트되고; Fifth two sub-elements, and the sixth byte two sub-byte elements third vector element to maintain (i.e., c, g, k and o) is shifted by the zero (0), the third shift count; 일곱번째 2개의 서브-바이트 요소 및 여덟번째 2개의 서브-바이트 요소(즉, d, h, l 및 p)를 유지하는 제4 벡터 요소는 제4 시프트 카운트인 사(4)만큼 시프트되어, 이러한 서브-바이트 요소들을 벡터(1525)에서의 그들의 각각의 바이트의 최하위 비트에 정렬한다. Seventh two sub-byte elements, and eighth two sub-fourth vector element that holds the bytes element (i. E, d, h, l and p) is shifted by a fourth shift count is four (4), these and aligning the byte element in the vector of least significant bits with their respective byte in a 1525-sub. 일 실시예에서, 이러한 시프트들은 SIMD 시프터들에 의해 벡터(1515)의 32-비트 벡터 요소들에 대해 동시에 수행된다. In one embodiment, this shift are simultaneously performed on the 32-bit vector elements of the vector 1515 by the SIMD shifter. 대안적인 실시예들에서, 대신에 더 작거나 더 큰 시프트들이 이용될 수 있으며, 시프트들 전부는 동시에 수행되지 않을 수 있다. In alternative embodiments, instead they may be smaller or larger shift used in a shift of all may not be performed at the same time.

셔플 처리(1528)에서, 시프트된 제1, 제2, 제3 및 제4 벡터 요소 각각의 최하위 바이트 포지션으로부터의 바이트는 벡터(1530)의 제1 벡터 요소(예를 들어, 32-비트 벡터 요소)로 카피되거나 셔플되고; In the shuffling process (1528), shifting the first, second, third and the fourth byte from the vector elements, each of the least significant byte position of the first vector element of the vector (1530) (e.g., 32-bit vector elements ) is copied or shuffle; 시프트된 제1, 제2, 제3 및 제4 벡터 요소 각각의 두번째 최하위 바이트 포지션으로부터의 바이트는 벡터(1530)의 제2 벡터 요소로 카피되거나 셔플되고; The shifted first, second, third and fourth bytes of the vector elements from each of the second least significant byte position is copied or shuffle the second vector element of the vector (1530); 시프트된 제1, 제2, 제3 및 제4 벡터 요소 각각의 두번째 최상위 바이트 포지션으로부터의 바이트는 벡터(1530)의 제3 벡터 요소로 카피되거나 셔플되고; The shifted first, second, third and fourth bytes of the vector elements from each of the second most significant byte position is copied or shuffle a third vector elements of the vector (1530); 시프트된 제1, 제2, 제3 및 제4 벡터 요소 각각의 최상위 바이트 포지션으로부터의 바이트는 벡터(1530)의 제4 벡터 요소로 카피되거나 셔플되어, 그들의 오리지널 서브-바이트 순서를 복구한다. The shifted first, second, third and fourth bytes of the vector elements from each of the most significant byte position is copied or shuffled to the fourth vector elements of the vector 1530, their original sub-recovery byte order. 일 실시예에서, 셔플 또는 카피는 SIMD 벡터 서브-바이트 압축해제 기능성을 제공하는 하나 이상의 명령어를 디코딩하는 것으로부터 생성된 단일의 마이크로연산 또는 마이크로-op에 따라 SIMD 셔플러들에 의해 동시에 수행될 수 있다. In one embodiment, the shuffle or copy is SIMD vector sub-can be performed by the SIMD shuffler according to the bytes of uncompressed single functional micro-operations or micro -op of the generated from decoding the one or more instructions to provide at the same time have. 대안적인 실시예들에서, 셔플 또는 카피는 하나보다 많은 마이크로연산 또는 마이크로-op에 따라 SIMD 셔플러들 또는 다른 SIMD 실행 유닛들에 의해 또한 수행될 수 있다. In alternative embodiments, the shuffle or copy is in accordance with the number of micro-ops or a micro -op than one may also be performed by the SIMD shuffler or other SIMD execution unit.

AND 처리 블록(1544)에서, (예를 들어, 벡터(1543)를 이용하여) 벡터(1530)의 각각의 바이트의 다수의 최상위 비트가 정정되거나 마스킹된다. From the AND processing block 1544, a plurality of most significant bits of each byte of Vector 1530 (e.g., a vector (using 1543)) is corrected or masked. 일 실시예에서, 도시된 바와 같이, 다수의 비트의 정정은 32-비트 벡터 요소의 각각의 바이트에서 4 비트를 영으로 설정한다. In one embodiment, as illustrated, the correction of multiple bit sets the four bits in each byte of the 32-bit vector elements to zero. 일부 실시예들에서, 프로세스(1502)의 SIMD 벡터 서브-바이트 압축해제는 매크로명령어들의 시퀀스로서 또는 마이크로코드 명령어들의 시퀀스로서 또는 이들의 조합으로서 구현될 수 있다. In some embodiments, SIMD vector of the sub-processes 1502-byte decompression may be implemented as a sequence of macro instructions, or micro code as a sequence of instructions, or a combination thereof.

프로세스들(1501 및 1502)은 패킹된 바이트 데이터에 대해 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 이전에 특히 유용할 수 있다는 것이 인식될 것이다. The processes (1501 and 1502) will be recognized that the same may be particularly useful prior to executing the instruction to provide a SIMD vector population count functionality for a packed byte data. 한편, 패킹된 2-비트 데이터 포맷에 대해 또는 패킹된 4-비트 데이터 포맷에 대해 직접적으로 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어가 지원될 때, 프로세스들(1501 및 1502)의 처리는 불필요하게 될 수 있다. On the other hand, the process of when directly support the instruction to provide a SIMD vector population count functionality for packing or the 4-bit data format for the 2-bit packed data formats, the processes (1501 and 1502) will be unnecessarily can.

도 16a는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 위한 장치의 실시예를 도시한다. Figure 16a illustrates an embodiment of a device for executing the instructions to provide a SIMD vector population count functionality.

장치(1601)의 실시예들은 SIMD 개체군 카운트 기능성을 제공하는 명령어의 실행을 위한 코어(490)의 부분(예를 들어, 실행 유닛(들)(462)) 또는 파이프라인(400)의 부분(예를 들어, 실행 스테이지(416))일 수 있다. Embodiment of the device 1601 are part of the core 490 for execution of the instruction to provide a SIMD population count functionality (e. G., Execution unit (s) 462) part of, or pipeline 400 (e.g. example, may be an execution stage 416). 장치(1601)의 실시예들은, 하나 이상의 가변의 복수의 n개의 가변 크기의 데이터 요소(one or more variable plurality of n variable sized data elements)의 값들을 저장하기 위한 하나 이상의 가변의 복수의 n개의 가변 크기의 데이터 필드(one or more variable plurality of n variable sized data fields)를 각각 포함하는 벡터 레지스터들(예를 들어, 물리적 레지스터 파일들 유닛(들)(458))과 연결될 수 있다. Embodiment of the device 1601 are, at least one data element of the variable n of the variable size of the plurality of (one or more variable plurality of n variable sized data elements), one or more variable plurality of n variable for storing the value of the may be connected to the size of the data field (one or more variable n plurality of variable sized data fields), the vector registers (e.g., physical register files unit (s) 458), including, respectively. 장치(1601)의 실시예들은, (예를 들어, 명령어 니모닉(instruction mnemonic)의 부분으로서 또는 피연산자로서 또는 제어 레지스터에서) 패킹된 데이터 크기 및 벡터 개체군 카운트 연산을 특정하는 명령어를 디코딩하기 위한 디코드 스테이지(예를 들어, 디코드(406)) 또는 디코더(예를 들어, 디코드 유닛(440))와 또한 연결될 수 있다. Embodiment of the device 1601 are, (e. G., Instruction mnemonic (instruction mnemonic), or in a control register as a part or as an operand of a) for decoding the instruction to specify a packed data size and the vector population count operation decode stage (e. g., decoded 406) or the decoder (for example, decode unit 440) can also be coupled with. 하나 이상의 실행 유닛(예를 들어, 실행 장치(1601))은, 디코딩된 명령어에 응답하여, (예를 들어, 메모리에 또는 레지스터에 저장되어 있는) 소스 벡터(1612)의 부분에서의 각각의 패킹된 데이터 필드의 특정되는 패킹된 데이터 크기에 따른 복수의 비트를 판독할 수 있는데, 여기서 소스 벡터의 그 부분에서의 복수의 제1 패킹된 데이터 필드 각각은 특정되는 패킹된 데이터 크기에 따른 복수의 비트를 저장한다. One or more execution units (e.g., execution unit 1601) is in response to the decoded instructions, and each of the packing in the portion of (e.g., stored in the memory or in the register) Source Vector 1612 There a specific plurality of bits in accordance with the packed data size of the data field can be read out, wherein each of the plurality of the first packed data field in that part of the source vectors is a plurality of bits in accordance with the packed data size specified stores. 장치(1601)의 예에 도시된 일 실시예에서, 복수의 제1 패킹된 데이터 필드 각각에 저장된 복수의 비트는 2이다. In the embodiment shown in the example of device 1601, a plurality of the first plurality of bits stored in a packed data field each is 2. 대안적인 실시예에서, 일부 다른 복수의 비트가 복수의 제1 패킹된 데이터 필드 각각에 저장될 수 있다. In an alternative embodiment, some of the other plurality of bits can be stored in the first plurality of packed data fields, respectively.

예를 들어, 장치(1601)에서, 소스 벡터(1612)의 제1의 복수의 n개의 데이터 필드의 하나 이상의 부분 각각에는 패킹된 데이터 필드들이 저장되는데, 소스 벡터(1612)의 부분에서의 각각의 패킹된 데이터 필드는 제2의 복수의 2 비트를 저장한다. For example, the device 1601 from, in the there is a packed data field are stored, each in a portion of the source vector 1612, respectively, at least one portion of the plurality of n data fields of the first source vector 1612 a packed data field stores a plurality of the second bit of the second. 처리 블록(1620)에서, SIMD 2-비트 개체군 카운트 연산을 위한 명령어가 프로세서에서 실행되는 것에 응답하여, 소스 벡터(1612)의 n개의 데이터 필드의 이 부분에서의 패킹된 데이터 필드들이 판독되고, 미리 결정된 값(예를 들어, 2진 00)과 동등한 값들의 출현들은, 먼저 미리 결정된 값과 동등함(equality)에 대하여 이 부분에서의 패킹된 데이터 필드들로부터 판독된 값들을 비교한 다음, POP(1630) 카운터에서 동등함들의 수를 카운트함으로써 카운트된다. In process block (1620), 2- SIMD bits to the instructions for the population count operation in response to being executed by the processor, the packed data field in this portion of the n fields of data from the source vector 1612 that is read out in advance the comparison of the value read from the packed data field in this portion with respect to the predetermined value (e. g., binary 00) and the appearance of the same values ​​are also equal to the first predetermined value (equality) then, POP ( 1630) is counted by counting the number of equality at the counter. SIMD 2-비트 개체군 카운트를 위한 명령어의 일 실시예에서, 미리 결정된 값(예를 들어, 2진 00)은 명령어에 의해 즉시 피연산자로서 특정될 수 있다. SIMD 2- bit In one embodiment of instructions for the population counting example, a predetermined value (e. G., Binary 00) may be specified as an immediate operand by an instruction. 다른 실시예에서, 미리 결정된 값은 미리 결정된 고정 세트의 값들(1642) 중 하나일 수 있다. In another embodiment, it may be one of the predetermined values ​​are values ​​(1642) of a predetermined fixed set. 다른 실시예에서, 미리 결정된 값은 레지스터 피연산자에서의 하나 이상의 요소로서 명령어에 의해 특정된 세트의 값들(1642) 중 하나일 수 있다. In another embodiment, it may be one of the predetermined values ​​are values ​​1642 of the set specified by the commands as one or more elements of the register operands. 미리 결정된 값(예를 들어, 2진 00)과 동등한 카운트된 출현들인 처리 블록(1620)의 결과는, 대응하는 하나 이상의 미리 결정된 값(예를 들어, 1642) 각각에 대한 하나 이상의 카운트로서, 소스 벡터(1612)의 n개의 데이터 필드의 부분에 대응하는 목적지(1652)의 부분에 저장될 수 있다. Predetermined value, a result of processing block 1620, which are counted appearance equivalent to (e. G., Binary 00), corresponding to one or more predetermined values ​​(e.g., 1642) as one count for each of the source corresponding to the n number of the data of the vector field 1612 may be stored in a portion of the destination (1652).

선택적으로, 처리 블록(1621)에서, SIMD 2-비트 개체군 카운트 연산을 위한 명령어가 실행되는 것에 또한 응답하여, 제2의 선택적인 미리 결정된 값(예를 들어, 2진 01)과 동등한 소스 벡터(1612)의 n개의 데이터 필드의 이 부분에서의 패킹된 데이터 필드들에서의 값들의 출현들은, 먼저 제2의 미리 결정된 값과 동등함에 대하여 이 부분에서의 패킹된 데이터 필드들로부터 판독된 값들을 비교한 다음, POP(1631) 카운터에서 동등함들의 수를 카운트함으로써 카운트된다. Alternatively, in process block (1621), 2- bit SIMD instruction by the population count operation for addition in response to being executed, the selective pre-determined value of the second (e.g., 01 binary) equivalent to the source vector ( 1612), the emergence of the values ​​in the packed data fields in this portion of the n data fields in the are, first compares the value read from the packed data fields in the portions that as equal to the predetermined value of the second and then, and it is counted by counting the number of equality in the POP (1631) counters. SIMD 2-비트 개체군 카운트를 위한 명령어의 일 실시예에서, 제2의 선택적인 미리 결정된 값(예를 들어, 2진 01)은 즉시 피연산자의 부분으로서 명령어에 의해 특정될 수 있다. In one embodiment of instructions for a SIMD 2- bit population counter, optional pre-determined value of the second (e. G., Binary 01) it can immediately be specified by the instruction as part of the operand. 다른 실시예에서, 제2의 미리 결정된 값은 또한 미리 결정된 고정 세트의 값들(1642) 중 하나일 수 있다. In another embodiment, the predetermined value of the second can also be one of the values ​​(1642) of a fixed set of pre-determined. 다른 실시예에서, 제2의 미리 결정된 값은 또한 레지스터 피연산자에서의 하나 이상의 요소로서 명령어에 의해 특정된 세트의 값들(1642) 중 하나일 수 있다. In another embodiment, the predetermined value of the second can also be one of the values ​​(1642) of a particular set by the commands as one or more elements of the register operands. 제2의 미리 결정된 값(예를 들어, 2진 01)과 동등한 카운트된 출현들인 처리 블록(1621)의 결과는, 대응하는 하나 이상의 미리 결정된 값(예를 들어, 1642) 각각에 대한 하나 이상의 카운트로서, 소스 벡터(1612)의 n개의 데이터 필드의 부분에 대응하는 목적지(1652)의 부분에 또한 저장될 수 있다. The predetermined value of the second (e. G., Binary 01) and the result is a corresponding one or more predetermined values ​​of the processing block 1621, which are counted appearance equivalent (e. G., 1642) at least one count for each as it can be also stored in a portion of the destination (1652) corresponding to a portion of the n fields of data from the source vector 1612.

선택적으로, 처리 블록(1622)에서, SIMD 2-비트 개체군 카운트 연산을 위한 명령어가 실행되는 것에 또한 응답하여, 제3의 선택적인 미리 결정된 값(예를 들어, 2진 10)과 동등한 소스 벡터(1612)의 n개의 데이터 필드의 이 부분에서의 패킹된 데이터 필드들에서의 값들의 출현들은, 먼저 제3의 미리 결정된 값과 동등함에 대하여 이 부분에서의 패킹된 데이터 필드들로부터 판독된 값들을 비교한 다음, POP(1632) 카운터에서 동등함들의 수를 카운트함으로써 카운트된다. Alternatively, in process block (1622), 2- bit SIMD instruction by the population count operation for addition in response to being executed, the selective pre-determined value of the third (e.g., 10 binary) equivalent to the source vector ( 1612), the emergence of the values ​​in the packed data fields in this portion of the n data fields in the are, first compares the value read from the packed data fields in the portions that as equal to the predetermined value of the third and then, and it is counted by counting the number of equality in the POP (1632) counters. SIMD 2-비트 개체군 카운트를 위한 명령어의 일 실시예에서, 제3의 선택적인 미리 결정된 값(예를 들어, 2진 10)은 즉시 피연산자의 부분으로서 명령어에 의해 특정될 수 있다. In the practice of the instruction for bit SIMD 2- population count one example, the third optional predetermined value (e. G., Binary 10) can immediately be specified by the instruction as part of the operand. 다른 실시예에서, 제3의 미리 결정된 값은 또한 미리 결정된 고정 세트의 값들(1642) 중 하나일 수 있다. In another embodiment, the predetermined value of the third can also be one of the values ​​(1642) of a fixed set of pre-determined. 다른 실시예에서, 제3의 미리 결정된 값은 또한 레지스터 피연산자에서의 하나 이상의 요소로서 명령어에 의해 특정된 세트의 값들(1642) 중 하나일 수 있다. In another embodiment, the predetermined value of the third can also be one of the values ​​(1642) of a particular set by the commands as one or more elements of the register operands. 제3의 미리 결정된 값(예를 들어, 2진 10)과 동등한 카운트된 출현들인 처리 블록(1622)의 결과는, 대응하는 하나 이상의 미리 결정된 값(예를 들어, 1642) 각각에 대한 하나 이상의 카운트로서, 소스 벡터(1612)의 n개의 데이터 필드의 부분에 대응하는 목적지(1652)의 부분에 또한 저장될 수 있다. The predetermined value of 3 (e. G., Binary 10) and the result is a corresponding one or more predetermined values ​​of the processing block 1622, which are counted appearance equivalent (e. G., 1642) at least one count for each as it can be also stored in a portion of the destination (1652) corresponding to a portion of the n fields of data from the source vector 1612.

선택적으로, 처리 블록(1623)에서, SIMD 2-비트 개체군 카운트 연산을 위한 명령어가 실행되는 것에 또한 응답하여, 제4의 선택적인 미리 결정된 값(예를 들어, 2진 11)과 동등한 소스 벡터(1612)의 n개의 데이터 필드의 이 부분에서의 패킹된 데이터 필드들에서의 값들의 출현들은, 먼저 제4의 미리 결정된 값과 동등함에 대하여 이 부분에서의 패킹된 데이터 필드들로부터 판독된 값들을 비교한 다음, POP(1633) 카운터에서 동등함들의 수를 카운트함으로써 카운트된다. Alternatively, in process block (1623), 2- bit SIMD instruction by the population count operation for addition in response to being executed, the selective pre-determined value of a fourth (e.g., 11 binary) equivalent to the source vector ( 1612), the emergence of the values ​​in the packed data fields in this portion of the n data fields in the are, first compares the value read from the packed data fields in the portions that as equal to the predetermined value of the fourth and then, and it is counted by counting the number of equality in the POP (1633) counters. SIMD 2-비트 개체군 카운트를 위한 명령어의 일 실시예에서, 제4의 선택적인 미리 결정된 값(예를 들어, 2진 11)은 즉시 피연산자의 부분으로서 명령어에 의해 특정될 수 있다. In one embodiment of instructions for a SIMD 2- bit population counter, optional pre-determined value of the fourth (e. G., Binary 11) it can immediately be specified by the instruction as part of the operand. 다른 실시예에서, 제4의 미리 결정된 값은 또한 미리 결정된 고정 세트의 값들(1642) 중 하나일 수 있다. In another embodiment, the predetermined value of the fourth can also be one of the values ​​(1642) of a fixed set of pre-determined. 다른 실시예에서, 제4의 미리 결정된 값은 또한 레지스터 피연산자에서의 하나 이상의 요소로서 명령어에 의해 특정된 세트의 값들(1642) 중 하나일 수 있다. In another embodiment, the predetermined value of the fourth can also be one of the values ​​(1642) of a particular set by the commands as one or more elements of the register operands. 제4의 미리 결정된 값(예를 들어, 2진 11)과 동등한 카운트된 출현들인 처리 블록(1623)의 결과는, 대응하는 하나 이상의 미리 결정된 값(예를 들어, 1642) 각각에 대한 하나 이상의 카운트로서, 소스 벡터(1612)의 n개의 데이터 필드의 부분에 대응하는 목적지(1652)의 부분에 또한 저장될 수 있다. The predetermined value of 4 (e. G., Binary 11) and the result is a corresponding one or more predetermined values ​​of the processing block 1623, which are counted appearance equivalent (e. G., 1642) at least one count for each as it can be also stored in a portion of the destination (1652) corresponding to a portion of the n fields of data from the source vector 1612.

SIMD 개체군 카운트 명령어들은 게놈 시퀀싱 및 정렬 처리를 위해 이용될 수 있다는 것이 인식될 것이다. SIMD population count instruction will be appreciated that the same may be used for genome sequencing and sorting process. 보다 일반적으로 다른 데이터베이스들, 데이터 마이닝 애플리케이션들 및 검색 애플리케이션들에서 또한 유사한 압축 스킴들이 이용되어, 이러한 애플리케이션들도 또한 SIMD 개체군 카운트 명령어들을 이용할 수 있게 된다. More generally, is also similar to the compression scheme used in the other databases, data mining applications and search application, also these applications, it is possible to also utilize the SIMD population count instruction.

게놈 정렬에 있어서의 일반적인 연산들은, 염기-쌍 스트링들을 매칭하거나 부분적으로 매칭하기 위해서 스트링 내의 뉴클레오티드들의 출현들을 카운트하는 것이다. Typical operation of the genome are aligned, base-to count the occurrence of nucleotide in the string to the matching or partial matching of a pair of strings. (packedDna와 같은) 패킹된 데이터 포맷에 있어서, 스트링 내의 상이한 뉴클레오티드 출현들을 카운트하기 위해서 시프트 및 마스크 연산들과 함께 룩업 테이블들의 이용을 수반할 수 있는 기술들은 대신에 SIMD 개체군 카운트 명령어들을 이용할 수 있다. In a packed data format (such as packedDna), which may involve the use of look-up table with the shift and mask operations in order to count different nucleotide occurrence in the string techniques may utilize SIMD population count instructions instead. SIMD 개체군 카운트 명령어들을 이용함으로써, 스트링 내의 상이한 뉴클레오티드 출현들을 카운트하기 위해서 이전에 요구된 많은 연산이 제거될 수 있다. By using SIMD population count instruction, the previously calculated number of requirements to be removed in order to count different nucleotide occurrence in the string. 따라서, 게놈 시퀀싱 및 정렬 처리와 같은 애플리케이션들의 성능, 및 보다 일반적으로는 데이터 마이닝과 같은 데이터베이스 애플리케이션들 및 검색 애플리케이션들에 대한 성능이 상당히 개선될 수 있다. Therefore, the performance of applications, and, more generally, such as genome sequencing and alignment process has the performance for database applications and search applications such as data mining can be significantly improved.

도 16b는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 위한 장치(1602)의 대안적인 실시예를 도시한다. Figure 16b shows an alternative embodiment of an apparatus 1602 for executing the instruction to provide a SIMD vector population count functionality. 또한, 장치(1602)의 실시예들은 SIMD 개체군 카운트 기능성을 제공하는 명령어의 실행을 위한 코어(490)의 부분(예를 들어, 실행 유닛(들)(462)) 또는 파이프라인(400)의 부분(예를 들어, 실행 스테이지(416))일 수 있다. In addition, portions of the examples are parts (e.g., execution unit (s) 462) or the pipeline 400 of the core 490 for execution of the instruction to provide a SIMD population count functionality of device 1602 (e. g., execution stage 416) may be. 장치(1602)의 실시예들은, 하나 이상의 가변의 복수의 n개의 가변 크기의 데이터 요소의 값들을 저장하기 위한 하나 이상의 가변의 복수의 n개의 가변 크기의 데이터 필드를 각각 포함하는 벡터 레지스터들(예를 들어, 물리적 레지스터 파일들 유닛(들)(458))과 연결될 수 있다. Embodiment of the device 1602, for example, are, in a vector register comprising at least one variable plurality of n fields of data of variable size for storing one or more variable plurality of n values ​​of the data elements of one variable intensity of each (e.g. example, may be connected to the physical register files unit (s) 458). 장치(1602)의 실시예들은, (예를 들어, 명령어 니모닉의 부분으로서 또는 피연산자로서 또는 제어 레지스터에서) 패킹된 데이터 크기 및 벡터 개체군 카운트 연산을 특정하는 명령어를 디코딩하기 위한 디코드 스테이지(예를 들어, 디코드(406)) 또는 디코더(예를 들어, 디코드 유닛(440))와 또한 연결될 수 있다. Embodiment of the device 1602, for example, are, (e. G., In a portion of the instruction mnemonic or as an operand or control register) for for decoding an instruction to specify a packed data size and the vector population count operation decoding stage (for example, decoding 406) or the decoder (for example, decode unit 440 may also be coupled with). 하나 이상의 실행 유닛(예를 들어, 실행 장치(1602))은, 디코딩된 명령어에 응답하여, (예를 들어, 메모리에 또는 레지스터에 저장되어 있는) 소스 벡터(1612)의 부분에서의 각각의 패킹된 데이터 필드의 특정되는 패킹된 데이터 크기에 따른 복수의 비트를 판독할 수 있는데, 여기서 소스 벡터의 그 부분에서의 복수의 제1 패킹된 데이터 필드 각각은 특정되는 패킹된 데이터 크기에 따른 복수의 비트를 저장한다. One or more execution units (e.g., execution unit 1602) is in response to the decoded instructions, and each of the packing in the portion of (e.g., stored in the memory or in the register) Source Vector 1612 There a specific plurality of bits in accordance with the packed data size of the data field can be read out, wherein each of the plurality of the first packed data field in that part of the source vectors is a plurality of bits in accordance with the packed data size specified stores. 장치(1602)의 예에 도시된 일 실시예에서, 복수의 제1 패킹된 데이터 필드 각각에 저장된 복수의 비트는 4 비트이다. In one embodiment shown in the example of a device 1602, a plurality of the first plurality of bits stored in a packed data field is a 4-bit, respectively. 대안적인 실시예에서, 일부 다른 복수의 비트가 복수의 제1 패킹된 데이터 필드 각각에 저장될 수 있다. In an alternative embodiment, some of the other plurality of bits can be stored in the first plurality of packed data fields, respectively.

예를 들어, 장치(1602)에서, 소스 벡터(1614)의 제1의 복수의 n개의 데이터 필드의 하나 이상의 부분 각각에는 패킹된 데이터 필드들이 저장되는데, 소스 벡터(1614)의 부분에서의 각각의 패킹된 데이터 필드는 제2의 복수의 4 비트를 저장한다. For example, the device 1602 from, in the there is a packed data field are stored, each in a portion of the source vector (1614) each of the one or more portions of the plurality of n data fields of the first source vector 1614 a packed data field stores a plurality of 4-bit of the second. 처리 블록(1640)에서, SIMD 4-비트 개체군 카운트 연산을 위한 명령어가 프로세서에서 실행되는 것에 응답하여, 소스 벡터(1614)의 n개의 데이터 필드의 이 부분에서의 패킹된 데이터 필드들이 판독되고, 미리 결정된 값(예를 들어, T)과 동등한 값들의 출현들은, 먼저 미리 결정된 값과 동등함에 대하여 이 부분에서의 패킹된 데이터 필드들로부터 판독된 값들을 비교한 다음, POP(1630) 카운터에서 동등함들의 수를 카운트함으로써 카운트된다. In process block (1640), 4- bit SIMD to the instructions for the population count operation in response to being executed by the processor, the packed data field in this portion of the n fields of data from the source vector 1614 that is read out in advance determined value equality in the comparison of the value read from the packed data field, and then, POP (1630) counter in the portions that as equivalent to the occurrence are, first predetermined value of a value equal to (e.g., T) It is counted by counting the number of. SIMD 4-비트 개체군 카운트를 위한 명령어의 일 실시예에서, 미리 결정된 값(예를 들어, T)은 명령어에 의해 즉시 피연산자로서 특정될 수 있다. In one embodiment the SIMD instruction for 4- bit population counter, a predetermined value (e.g., T) may be specified as an immediate operand by an instruction. 다른 실시예에서, 미리 결정된 값은 미리 결정된 고정 세트의 값들(1644) 중 하나일 수 있다. In other embodiments, be any of the values ​​(1644) of a fixed set of predetermined values ​​are predetermined. 다른 실시예에서, 미리 결정된 값은 레지스터 피연산자에서의 하나 이상의 요소로서 명령어에 의해 특정된 세트의 값들(1644) 중 하나일 수 있다. In another embodiment, it may be one of the predetermined values ​​are values ​​(1644) of the set specified by the commands as one or more elements of the register operands. 미리 결정된 값(예를 들어, T)과 동등한 카운트된 출현들인 처리 블록(1640)의 결과는, 대응하는 하나 이상의 미리 결정된 값(예를 들어, 1644) 각각에 대한 하나 이상의 카운트로서, 소스 벡터(1614)의 n개의 데이터 필드의 부분에 대응하는 목적지(1654)의 부분에 저장될 수 있다. A predetermined value (e.g., T) and as one or more counts of the result of processing block 1640, which are counted appearance, the corresponding one or more predetermined values ​​(e.g., 1644), respectively equivalent, a source vector ( corresponding to a portion of the n data fields in 1614) may be stored in a portion of the destination (1654).

선택적으로, 처리 블록(1641)에서, SIMD 4-비트 개체군 카운트 연산을 위한 명령어가 실행되는 것에 또한 응답하여, 제2의 선택적인 미리 결정된 값(예를 들어, C)과 동등한 소스 벡터(1614)의 n개의 데이터 필드의 이 부분에서의 패킹된 데이터 필드들에서의 값들의 출현들은, 먼저 제2의 미리 결정된 값과 동등함에 대하여 이 부분에서의 패킹된 데이터 필드들로부터 판독된 값들을 비교한 다음, POP(1631) 카운터에서 동등함들의 수를 카운트함으로써 카운트된다. Alternatively, in process block (1641), 4- bit SIMD instruction by the population count operation for addition in response to being executed, the selective pre-determined value of the second (e.g., C) equivalent to the source vector 1614 the appearance of the values ​​in the packed data fields in this portion of the n data fields, a first comparing the value read from the packed data fields in the portions that as equal to the predetermined value of the second following , and it is counted by counting the number of equality in the POP (1631) counters. SIMD 4-비트 개체군 카운트를 위한 명령어의 일 실시예에서, 제2의 선택적인 미리 결정된 값(예를 들어, C)은 즉시 피연산자의 부분으로서 명령어에 의해 특정될 수 있다. In SIMD 4- bit one embodiment of instructions for the population counting example, the (e.g., C) an optional pre-determined value of 2, can immediately be specified by the instruction as part of the operand. 다른 실시예에서, 제2의 미리 결정된 값은 또한 미리 결정된 고정 세트의 값들(1644) 중 하나일 수 있다. In another embodiment, the predetermined value of the second can also be one of the values ​​(1644) of a fixed set of pre-determined. 다른 실시예에서, 제2의 미리 결정된 값은 또한 레지스터 피연산자에서의 하나 이상의 요소로서 명령어에 의해 특정된 세트의 값들(1644) 중 하나일 수 있다. In another embodiment, the predetermined value of the second can also be one of the values ​​(1644) of a particular set by the commands as one or more elements of the register operands. 제2의 미리 결정된 값(예를 들어, C)과 동등한 카운트된 출현들인 처리 블록(1641)의 결과는, 대응하는 하나 이상의 미리 결정된 값(예를 들어, 1644) 각각에 대한 하나 이상의 카운트로서, 소스 벡터(1614)의 n개의 데이터 필드의 부분에 대응하는 목적지(1654)의 부분에 또한 저장될 수 있다. A predetermined value of the second result of (e.g., C) the appearance, which are the processing block (1641) count equal to, the (e.g., 1644) corresponding to one or more predetermined value as at least one count for each, the portion of the destination (1654) corresponding to part of the n fields of data from the source vector 1614 may also be stored.

선택적으로, 처리 블록(1642)에서, SIMD 4-비트 개체군 카운트 연산을 위한 명령어가 실행되는 것에 또한 응답하여, 제3의 선택적인 미리 결정된 값(예를 들어, A)과 동등한 소스 벡터(1614)의 n개의 데이터 필드의 이 부분에서의 패킹된 데이터 필드들에서의 값들의 출현들은, 먼저 제3의 미리 결정된 값과 동등함에 대하여 이 부분에서의 패킹된 데이터 필드들로부터 판독된 값들을 비교한 다음, POP(1632) 카운터에서 동등함들의 수를 카운트함으로써 카운트된다. Alternatively, in process block (1642), 4- bit SIMD instruction by the population count operation for addition in response to being executed, the selection of a third of a predetermined value (e.g., A) with equal source vector 1614 the appearance of the values ​​in the packed data fields in this portion of the n data fields, a first comparing the value read from the packed data fields in the portions that as equal to the predetermined value of the third and then , and it is counted by counting the number of equality in the POP (1632) counters. SIMD 4-비트 개체군 카운트를 위한 명령어의 일 실시예에서, 제3의 선택적인 미리 결정된 값(예를 들어, A)은 즉시 피연산자의 부분으로서 명령어에 의해 특정될 수 있다. In SIMD 4- bit one embodiment of instructions for the population counting example, the third optional predetermined value (e.g., A) may immediately be specified by the instruction as part of the operand. 다른 실시예에서, 제3의 미리 결정된 값은 또한 미리 결정된 고정 세트의 값들(1644) 중 하나일 수 있다. In another embodiment, the predetermined value of the third can also be one of the values ​​(1644) of a fixed set of pre-determined. 다른 실시예에서, 제3의 미리 결정된 값은 또한 레지스터 피연산자에서의 하나 이상의 요소로서 명령어에 의해 특정된 세트의 값들(1644) 중 하나일 수 있다. In another embodiment, the predetermined value of the third can also be one of the values ​​(1644) of a particular set by the commands as one or more elements of the register operands. 제3의 미리 결정된 값(예를 들어, A)과 동등한 카운트된 출현들인 처리 블록(1642)의 결과는, 대응하는 하나 이상의 미리 결정된 값(예를 들어, 1644) 각각에 대한 하나 이상의 카운트로서, 소스 벡터(1614)의 n개의 데이터 필드의 부분에 대응하는 목적지(1654)의 부분에 또한 저장될 수 있다. Article as one or more counts to a predetermined value of 3 (e.g., A) with equal results of which are counted emergence process block 1642, the corresponding one or more predetermined values ​​(e.g., 1644), respectively, the portion of the destination (1654) corresponding to part of the n fields of data from the source vector 1614 may also be stored.

선택적으로, 처리 블록(1643)에서, SIMD 4-비트 개체군 카운트 연산을 위한 명령어가 실행되는 것에 또한 응답하여, 제4의 선택적인 미리 결정된 값(예를 들어, G)과 동등한 소스 벡터(1614)의 n개의 데이터 필드의 이 부분에서의 패킹된 데이터 필드들에서의 값들의 출현들은, 먼저 제4의 미리 결정된 값과 동등함에 대하여 이 부분에서의 패킹된 데이터 필드들로부터 판독된 값들을 비교한 다음, POP(1633) 카운터에서 동등함들의 수를 카운트함으로써 카운트된다. Alternatively, in process block (1643), 4- bit SIMD instruction by the population count operation for addition in response to being executed, the selective pre-determined value of a fourth (e.g., G) and equivalent source vector 1614 the appearance of the values ​​in the packed data fields in this portion of the n data fields, a first comparing the value read from the packed data fields in the portions that as equal to the predetermined value of the fourth, and then , and it is counted by counting the number of equality in the POP (1633) counters. SIMD 4-비트 개체군 카운트를 위한 명령어의 일 실시예에서, 제4의 선택적인 미리 결정된 값(예를 들어, G)은 즉시 피연산자의 부분으로서 명령어에 의해 특정될 수 있다. In one embodiment of instructions for 4- bit SIMD population count, (e. G., G) an optional pre-determined value of the fourth can immediately be specified by the instruction as part of the operand. 다른 실시예에서, 제4의 미리 결정된 값은 또한 미리 결정된 고정 세트의 값들(1644) 중 하나일 수 있다. In another embodiment, the predetermined value of the fourth can also be one of the values ​​(1644) of a fixed set of pre-determined. 다른 실시예에서, 제4의 미리 결정된 값은 또한 레지스터 피연산자에서의 하나 이상의 요소로서 명령어에 의해 특정된 세트의 값들(1644) 중 하나일 수 있다. In another embodiment, the predetermined value of the fourth can also be one of the values ​​(1644) of a particular set by the commands as one or more elements of the register operands. 제4의 미리 결정된 값(예를 들어, G)과 동등한 카운트된 출현들인 처리 블록(1643)의 결과는, 대응하는 하나 이상의 미리 결정된 값(예를 들어, 1644) 각각에 대한 하나 이상의 카운트로서, 소스 벡터(1614)의 n개의 데이터 필드의 부분에 대응하는 목적지(1654)의 부분에 또한 저장될 수 있다. A predetermined value of the fourth result (for example, G) the appearance, which are the processing block (1643) count equal to, the (e.g., 1644) corresponding to one or more predetermined value as at least one count for each, the portion of the destination (1654) corresponding to part of the n fields of data from the source vector 1614 may also be stored.

도 16c는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 위한 장치(1603)의 다른 대안적인 실시예를 도시한다. Figure 16c shows a further alternative embodiment of an apparatus 1603 for executing the instruction to provide a SIMD vector population count functionality. 또한, 장치(1603)의 실시예들은 SIMD 개체군 카운트 기능성을 제공하는 명령어의 실행을 위한 코어(490)의 부분(예를 들어, 실행 유닛(들)(462)) 또는 파이프라인(400)의 부분(예를 들어, 실행 스테이지(416))일 수 있다. In addition, portions of the examples are parts (e.g., execution unit (s) 462) or the pipeline 400 of the core 490 for execution of the instruction to provide a SIMD population count functionality of device 1603 (e. g., execution stage 416) may be. 장치(1603)의 실시예들은, 하나 이상의 가변의 복수의 n개의 가변 크기의 데이터 요소의 값들을 저장하기 위한 하나 이상의 가변의 복수의 n개의 가변 크기의 데이터 필드를 각각 포함하는 벡터 레지스터들(예를 들어, 물리적 레지스터 파일들 유닛(들)(458))과 연결될 수 있다. Embodiment of the device 1603, for example, are, in a vector register comprising at least one variable plurality of n fields of data of variable size for storing one or more variable plurality of n values ​​of the data elements of one variable intensity of each (e.g. example, may be connected to the physical register files unit (s) 458). 장치(1603)의 실시예들은, (예를 들어, 명령어 니모닉의 부분으로서 또는 피연산자로서 또는 제어 레지스터에서) 패킹된 데이터 크기 및 벡터 개체군 카운트 연산을 특정하는 명령어를 디코딩하기 위한 디코드 스테이지(예를 들어, 디코드(406)) 또는 디코더(예를 들어, 디코드 유닛(440))와 또한 연결될 수 있다. Embodiment of the device 1603, for example, are, (e. G., In a portion of the instruction mnemonic or as an operand or control register) for for decoding an instruction to specify a packed data size and the vector population count operation decoding stage (for example, decoding 406) or the decoder (for example, decode unit 440 may also be coupled with). 하나 이상의 실행 유닛(예를 들어, 실행 장치(1603))은, 디코딩된 명령어에 응답하여, (예를 들어, 메모리에 또는 레지스터에 저장되어 있는) 소스 벡터(1618)의 부분에서의 각각의 패킹된 데이터 필드의 특정되는 패킹된 데이터 크기에 따른 복수의 비트를 판독할 수 있는데, 여기서 소스 벡터의 그 부분에서의 복수의 제1 패킹된 데이터 필드 각각은 특정되는 패킹된 데이터 크기에 따른 복수의 비트를 저장한다. One or more execution units (e.g., execution unit 1603) is in response to the decoded instructions, and each of the packing in the portion of (e.g., stored in the memory or in the register) Source Vector 1618 There a specific plurality of bits in accordance with the packed data size of the data field can be read out, wherein each of the plurality of the first packed data field in that part of the source vectors is a plurality of bits in accordance with the packed data size specified stores. 장치(1603)의 예에 도시된 일 실시예에서, 복수의 제1 패킹된 데이터 필드 각각에 저장된 복수의 비트는 8 비트이다. In one embodiment shown in the example of a device 1603, a plurality of the first plurality of bits stored in a packed data field is 8 bits, respectively. 대안적인 실시예에서, 일부 다른 복수의 비트가 복수의 제1 패킹된 데이터 필드 각각에 저장될 수 있다. In an alternative embodiment, some of the other plurality of bits can be stored in the first plurality of packed data fields, respectively.

예를 들어, 장치(1603)에서, 소스 벡터(1618)의 제1의 복수의 n개의 데이터 필드의 하나 이상의 부분 각각에는 패킹된 데이터 필드들이 저장되는데, 소스 벡터(1618)의 부분에서의 각각의 패킹된 데이터 필드는 제2의 복수의 8 비트를 저장한다. For example, the device 1603 from, in the there is a packed data field are stored, each in a portion of the source vector (1618), each of the one or more portions of the plurality of n data fields of the first source vector 1618 a packed data field stores a plurality of eight bits of the second. 처리 블록(1680)에서, SIMD 8-비트 개체군 카운트 연산을 위한 명령어가 프로세서에서 실행되는 것에 응답하여, 소스 벡터(1618)의 n개의 데이터 필드의 이 부분에서의 패킹된 데이터 필드들이 판독되고, 미리 결정된 값(예를 들어, 0x58)과 동등한 값들의 출현들은, 먼저 미리 결정된 값과 동등함에 대하여 이 부분에서의 패킹된 데이터 필드들로부터 판독된 값들을 비교한 다음, POP(1630) 카운터에서 동등함들의 수를 카운트함으로써 카운트된다. In process block (1680), SIMD 8- bit to the instructions for the population count operation in response to being executed by the processor, the packed data field in this portion of the n fields of data from the source vector 1618 that is read out in advance determined value equality in the comparison of the value read from the packed data field, and then, POP (1630) counter in the portions that as equivalent to the occurrence are, first predetermined value of a value equal to (e.g., 0x58) It is counted by counting the number of. SIMD 8-비트 개체군 카운트를 위한 명령어의 일 실시예에서, 미리 결정된 값(예를 들어, 0x58)은 명령어에 의해 즉시 피연산자로서 특정될 수 있다. In one embodiment of instructions for a SIMD 8- bit population counter, a predetermined value (e.g., 0x58) may be specified as an immediate operand by an instruction. 다른 실시예에서, 미리 결정된 값은 미리 결정된 고정 세트의 값들(1644) 중 하나일 수 있다. In other embodiments, be any of the values ​​(1644) of a fixed set of predetermined values ​​are predetermined. 다른 실시예에서, 미리 결정된 값은 레지스터 피연산자에서의 하나 이상의 요소로서 명령어에 의해 특정된 세트의 값들(1644) 중 하나일 수 있다. In another embodiment, it may be one of the predetermined values ​​are values ​​(1644) of the set specified by the commands as one or more elements of the register operands. 미리 결정된 값(예를 들어, 0x58)과 동등한 카운트된 출현들인 처리 블록(1680)의 결과는, 대응하는 하나 이상의 미리 결정된 값(예를 들어, 1644) 각각에 대한 하나 이상의 카운트로서, 소스 벡터(1618)의 n개의 데이터 필드의 부분에 대응하는 목적지(1654)의 부분에 저장될 수 있다. A predetermined value (e.g., 0x58), and equivalent results of which are counted emergence process block 1680, the corresponding one or more predetermined values ​​(e.g., 1644) as one count for each of the source vector ( corresponding to a portion of the n data fields in 1618) may be stored in a portion of the destination (1654).

선택적으로, 처리 블록(1681)에서, SIMD 8-비트 개체군 카운트 연산을 위한 명령어가 실행되는 것에 또한 응답하여, 제2의 선택적인 미리 결정된 값(예를 들어, 0x43)과 동등한 소스 벡터(1618)의 n개의 데이터 필드의 이 부분에서의 패킹된 데이터 필드들에서의 값들의 출현들은, 먼저 제2의 미리 결정된 값과 동등함에 대하여 이 부분에서의 패킹된 데이터 필드들로부터 판독된 값들을 비교한 다음, POP(1631) 카운터에서 동등함들의 수를 카운트함으로써 카운트된다. Alternatively, in process block (1681), SIMD 8- bit to the instructions for the population count operation also in response to being executed, the selective pre-determined value of the second (e.g., 0x43) and equivalent source vector 1618 the appearance of the values ​​in the packed data fields in this portion of the n data fields, a first comparing the value read from the packed data fields in the portions that as equal to the predetermined value of the second following , and it is counted by counting the number of equality in the POP (1631) counters. SIMD 8-비트 개체군 카운트를 위한 명령어의 일 실시예에서, 제2의 선택적인 미리 결정된 값(예를 들어, 0x43)은 즉시 피연산자의 부분으로서 명령어에 의해 특정될 수 있다. In the practice of the instructions for the 8- bit SIMD population count one example, the first (e.g., 0x43) optional pre-determined value of 2, it can immediately be specified by the instruction as part of the operand. 다른 실시예에서, 제2의 미리 결정된 값은 또한 미리 결정된 고정 세트의 값들(1644) 중 하나일 수 있다. In another embodiment, the predetermined value of the second can also be one of the values ​​(1644) of a fixed set of pre-determined. 다른 실시예에서, 제2의 미리 결정된 값은 또한 레지스터 피연산자에서의 하나 이상의 요소로서 명령어에 의해 특정된 세트의 값들(1644) 중 하나일 수 있다. In another embodiment, the predetermined value of the second can also be one of the values ​​(1644) of a particular set by the commands as one or more elements of the register operands. 제2의 미리 결정된 값(예를 들어, 0x43)과 동등한 카운트된 출현들인 처리 블록(1681)의 결과는, 대응하는 하나 이상의 미리 결정된 값(예를 들어, 1644) 각각에 대한 하나 이상의 카운트로서, 소스 벡터(1618)의 n개의 데이터 필드의 부분에 대응하는 목적지(1654)의 부분에 또한 저장될 수 있다. A predetermined value of the second (e.g., 0x43), and the result is a corresponding one or more predetermined values ​​of the processing block (1681), which are counted appearance equivalent (e. G., 1644) as the at least one count for each, the portion of the destination (1654) corresponding to part of the n fields of data from the source vector 1618 may also be stored.

선택적으로, 처리 블록(1682)에서, SIMD 8-비트 개체군 카운트 연산을 위한 명령어가 실행되는 것에 또한 응답하여, 제3의 선택적인 미리 결정된 값(예를 들어, 0x41)과 동등한 소스 벡터(1618)의 n개의 데이터 필드의 이 부분에서의 패킹된 데이터 필드들에서의 값들의 출현들은, 먼저 제3의 미리 결정된 값과 동등함에 대하여 이 부분에서의 패킹된 데이터 필드들로부터 판독된 값들을 비교한 다음, POP(1632) 카운터에서 동등함들의 수를 카운트함으로써 카운트된다. Alternatively, in process block (1682), 8- bit SIMD population by more responsive to that command is executed for the count operation, the third optional predetermined value (e.g., 0x41) and equivalent source vector 1618 the appearance of the values ​​in the packed data fields in this portion of the n data fields, a first comparing the value read from the packed data fields in the portions that as equal to the predetermined value of the third and then , and it is counted by counting the number of equality in the POP (1632) counters. SIMD 8-비트 개체군 카운트를 위한 명령어의 일 실시예에서, 제3의 선택적인 미리 결정된 값(예를 들어, 0x41)은 즉시 피연산자의 부분으로서 명령어에 의해 특정될 수 있다. In the practice of the instructions for the 8- bit SIMD population count one example, the first (e.g., 0x41) 3 optional pre-determined value of can immediately be specified by the instruction as part of the operand. 다른 실시예에서, 제3의 미리 결정된 값은 또한 미리 결정된 고정 세트의 값들(1644) 중 하나일 수 있다. In another embodiment, the predetermined value of the third can also be one of the values ​​(1644) of a fixed set of pre-determined. 다른 실시예에서, 제3의 미리 결정된 값은 또한 레지스터 피연산자에서의 하나 이상의 요소로서 명령어에 의해 특정된 세트의 값들(1644) 중 하나일 수 있다. In another embodiment, the predetermined value of the third can also be one of the values ​​(1644) of a particular set by the commands as one or more elements of the register operands. 제3의 미리 결정된 값(예를 들어, 0x41)과 동등한 카운트된 출현들인 처리 블록(1682)의 결과는, 대응하는 하나 이상의 미리 결정된 값(예를 들어, 1644) 각각에 대한 하나 이상의 카운트로서, 소스 벡터(1618)의 n개의 데이터 필드의 부분에 대응하는 목적지(1654)의 부분에 또한 저장될 수 있다. Article as one or more counts to a predetermined value of three (e.g., 0x41), and the result is a corresponding one or more predetermined values ​​of the processing block (1682), which are counted appearance equivalent (e. G., 1644), respectively, the portion of the destination (1654) corresponding to part of the n fields of data from the source vector 1618 may also be stored.

선택적으로, 처리 블록(1683)에서, SIMD 8-비트 개체군 카운트 연산을 위한 명령어가 실행되는 것에 또한 응답하여, 제4의 선택적인 미리 결정된 값(예를 들어, 0x47)과 동등한 소스 벡터(1618)의 n개의 데이터 필드의 이 부분에서의 패킹된 데이터 필드들에서의 값들의 출현들은, 먼저 제4의 미리 결정된 값과 동등함에 대하여 이 부분에서의 패킹된 데이터 필드들로부터 판독된 값들을 비교한 다음, POP(1633) 카운터에서 동등함들의 수를 카운트함으로써 카운트된다. Alternatively, in process block (1683), SIMD 8- bit to the instructions for the population count operation also in response to being executed, the selective pre-determined value of a fourth (e.g., 0x47) and equivalent source vector 1618 the appearance of the values ​​in the packed data fields in this portion of the n data fields, a first comparing the value read from the packed data fields in the portions that as equal to the predetermined value of the fourth, and then , and it is counted by counting the number of equality in the POP (1633) counters. SIMD 8-비트 개체군 카운트를 위한 명령어의 일 실시예에서, 제4의 선택적인 미리 결정된 값(예를 들어, 0x47)은 즉시 피연산자의 부분으로서 명령어에 의해 특정될 수 있다. In one embodiment of instructions for a SIMD 8- bit population count (e.g., 0x47) optional pre-determined value of the fourth can immediately be specified by the instruction as part of the operand. 다른 실시예에서, 제4의 미리 결정된 값은 또한 미리 결정된 고정 세트의 값들(1644) 중 하나일 수 있다. In another embodiment, the predetermined value of the fourth can also be one of the values ​​(1644) of a fixed set of pre-determined. 다른 실시예에서, 제4의 미리 결정된 값은 또한 레지스터 피연산자에서의 하나 이상의 요소로서 명령어에 의해 특정된 세트의 값들(1644) 중 하나일 수 있다. In another embodiment, the predetermined value of the fourth can also be one of the values ​​(1644) of a particular set by the commands as one or more elements of the register operands. 제4의 미리 결정된 값(예를 들어, 0x47)과 동등한 카운트된 출현들인 처리 블록(1683)의 결과는, 대응하는 하나 이상의 미리 결정된 값(예를 들어, 1644) 각각에 대한 하나 이상의 카운트로서, 소스 벡터(1618)의 n개의 데이터 필드의 부분에 대응하는 목적지(1654)의 부분에 또한 저장될 수 있다. A predetermined value of a fourth (e.g., 0x47), and the result is a corresponding one or more predetermined values ​​of the processing block (1683), which are counted appearance equivalent (e. G., 1644) as the at least one count for each, the portion of the destination (1654) corresponding to part of the n fields of data from the source vector 1618 may also be stored.

도 16d는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 위한 장치(1604)의 다른 대안적인 실시예를 도시한다. Figure 16d shows a further alternative embodiment of an apparatus 1604 for executing the instruction to provide a SIMD vector population count functionality. 또한, 장치(1604)의 실시예들은 SIMD 개체군 카운트 기능성을 제공하는 명령어의 실행을 위한 코어(490)의 부분(예를 들어, 실행 유닛(들)(462)) 또는 파이프라인(400)의 부분(예를 들어, 실행 스테이지(416))일 수 있다. In addition, portions of the examples are parts (e.g., execution unit (s) 462) or the pipeline 400 of the core 490 for execution of the instruction to provide a SIMD population count functionality of device 1604 (e. g., execution stage 416) may be. 장치(1604)의 실시예들은, 하나 이상의 가변의 복수의 n개의 가변 크기의 데이터 요소의 값들을 저장하기 위한 하나 이상의 가변의 복수의 n개의 가변 크기의 데이터 필드를 각각 포함하는 벡터 레지스터들(예를 들어, 물리적 레지스터 파일들 유닛(들)(458))과 연결될 수 있다. Embodiment of a device 1604 for example, are, in a vector register comprising at least one variable plurality of n fields of data of variable size for storing one or more variable plurality of n values ​​of the data elements of one variable intensity of each (e.g. example, may be connected to the physical register files unit (s) 458). 장치(1604)의 실시예들은, (예를 들어, 명령어 니모닉의 부분으로서 또는 피연산자로서 또는 제어 레지스터에서) 패킹된 데이터 크기 및 벡터 개체군 카운트 연산을 특정하는 명령어를 디코딩하기 위한 디코드 스테이지(예를 들어, 디코드(406)) 또는 디코더(예를 들어, 디코드 유닛(440))와 또한 연결될 수 있다. Embodiment of a device 1604 for example, are, (e. G., In a portion of the instruction mnemonic or as an operand or control register) for for decoding an instruction to specify a packed data size and the vector population count operation decoding stage (for example, decoding 406) or the decoder (for example, decode unit 440 may also be coupled with). 하나 이상의 실행 유닛(예를 들어, 실행 장치(1604))은, 디코딩된 명령어에 응답하여, (예를 들어, 메모리에 또는 레지스터에 저장되어 있는) 소스 벡터(1618)의 부분에서의 각각의 패킹된 데이터 필드의 특정되는 패킹된 데이터 크기에 따른 복수의 비트를 판독할 수 있는데, 여기서 소스 벡터의 그 부분에서의 복수의 제1 패킹된 데이터 필드 각각은 특정되는 패킹된 데이터 크기에 따른 복수의 비트를 저장한다. One or more execution units (e.g., execution unit 1604) is in response to the decoded instructions, and each of the packing in the portion of (e.g., stored in the memory or in the register) Source Vector 1618 There a specific plurality of bits in accordance with the packed data size of the data field can be read out, wherein each of the plurality of the first packed data field in that part of the source vectors is a plurality of bits in accordance with the packed data size specified stores. 장치(1604)의 예에 도시된 일 실시예에서, 복수의 제1 패킹된 데이터 필드 각각에 저장된 복수의 비트는 8 비트이다. In one embodiment shown in the example of a device 1604, a plurality of the first plurality of bits stored in a packed data field is 8 bits, respectively. 대안적인 실시예에서, 일부 다른 복수의 비트가 복수의 제1 패킹된 데이터 필드 각각에 저장될 수 있다. In an alternative embodiment, some of the other plurality of bits can be stored in the first plurality of packed data fields, respectively.

예를 들어, 장치(1604)에서, 소스 벡터(1618)의 복수의 n개의 데이터 필드의 하나 이상의 부분 각각에는 패킹된 데이터 필드들이 저장되는데, 소스 벡터(1618)의 부분에서의 각각의 패킹된 데이터 필드는 복수의 8 비트를 저장한다. For example, the packed data for each of the portions of the device 1604, the source vector (1618) a plurality of n number of each of one or more of the data field, there is a packed data fields are stored, the source vector 1618 of field stores a plurality of 8-bit. 처리 블록(1684)에서, SIMD 8-비트 개체군 카운트 연산을 위한 명령어의 일 실시예가 프로세서에서 실행되는 것에 응답하여, 소스 벡터(1618)의 n개의 데이터 필드의 부분(예를 들어, 최하위 부분)에서의 패킹된 데이터 필드들이 판독되고, 미리 결정된 값(예를 들어, 0x58)과 동등한 값들의 출현들은, 먼저 미리 결정된 값과 동등함에 대하여 이 부분에서의 패킹된 데이터 필드들로부터 판독된 값들을 비교한 다음, POP(1634) 카운터에서 동등함들의 수를 카운트함으로써 카운트된다. In process block (1684), 8- bit SIMD populations in response to being executed in an embodiment of processor instructions for the counting operation, part of the n data fields of the source vector (1618) (e. G., The least significant part) of the packed data fields have been read, the comparison of the predetermined value, the value read from the packed data fields in the portions that as the appearance of the values ​​equal to (e.g., 0x58) are, equal to the first predetermined value, then it is counted by counting the number of equality in the POP (1634) counters. SIMD 8-비트 개체군 카운트를 위한 명령어의 일 실시예에서, 미리 결정된 값(예를 들어, 0x58)은 명령어에 의해 즉시 피연산자로서 특정될 수 있다. In one embodiment of instructions for a SIMD 8- bit population counter, a predetermined value (e.g., 0x58) may be specified as an immediate operand by an instruction. 다른 실시예에서, 미리 결정된 값은 레지스터 피연산자에서의 하나 이상의 요소로서 명령어에 의해 특정된 세트의 값들(1644) 중 하나일 수 있다. In another embodiment, it may be one of the predetermined values ​​are values ​​(1644) of the set specified by the commands as one or more elements of the register operands. 미리 결정된 값(예를 들어, 0x58)과 동등한 (예를 들어, 최하위 부분에서의) 카운트된 출현들인 처리 블록(1684)의 결과는, 대응하는 하나 이상의 미리 결정된 값(예를 들어, 0x58)에 대한 하나 이상의 카운트로서, 소스 벡터(1618)의 n개의 데이터 필드의 부분에 대응하는 목적지(1654)의 부분에 저장될 수 있다. To a predetermined value (e.g., 0x58) and an equivalent (e.g., in the least significant part) the result of which are counted emergence process block (1684), the corresponding one or more predetermined value (e.g., 0x58) as one or more of the count, it may be stored in a portion of the destination (1654) corresponding to a portion of the n fields of data from the source vector 1618.

처리 블록(1685)에서, SIMD 8-비트 개체군 카운트 연산을 위한 명령어가 실행되는 것에 또한 응답하여, 제2의 선택적인 미리 결정된 값(예를 들어, 0x43)과 동등한 소스 벡터(1618)의 n개의 데이터 필드의 부분(예를 들어, 두번째 최하위 부분)에서의 패킹된 데이터 필드들에서의 값들의 출현들은, 먼저 제2의 미리 결정된 값과 동등함에 대하여 이 부분에서의 패킹된 데이터 필드들로부터 판독된 값들을 비교한 다음, POP(1635) 카운터에서 동등함들의 수를 카운트함으로써 카운트된다. In process block (1685), n of the 8- bit SIMD population count to an instruction for operation also in response to being executed, the selective pre-determined value of the second (e.g., 0x43) and equivalent source vector 1618 part of the data field is the emergence of value in the packed data field in the (e. g., the second least significant part) are, first, with respect as equal to the predetermined value of the second reading from the packed data field in this portion comparing the values, and then is counted by counting the number of equality in the POP (1635) counters. SIMD 8-비트 개체군 카운트를 위한 명령어의 일 실시예에서, 제2의 선택적인 미리 결정된 값(예를 들어, 0x43)은 즉시 피연산자의 부분으로서 명령어에 의해 특정될 수 있다. In the practice of the instructions for the 8- bit SIMD population count one example, the first (e.g., 0x43) optional pre-determined value of 2, it can immediately be specified by the instruction as part of the operand. 다른 실시예에서, 제2의 미리 결정된 값은 또한 레지스터 피연산자에서의 하나 이상의 요소로서 명령어에 의해 특정된 세트의 값들(1644) 중 하나일 수 있다. In another embodiment, the predetermined value of the second can also be one of the values ​​(1644) of a particular set by the commands as one or more elements of the register operands. 제2의 미리 결정된 값(예를 들어, 0x43)과 동등한 (예를 들어, 두번째 최하위 부분에서의) 카운트된 출현들인 처리 블록(1685)의 결과는, 대응하는 하나 이상의 미리 결정된 값(예를 들어, 0x43)에 대한 하나 이상의 카운트로서, 소스 벡터(1618)의 n개의 데이터 필드의 부분에 대응하는 목적지(1654)의 부분에 또한 저장될 수 있다. The predetermined value of the two (e.g., 0x43) and an equivalent result of the processing block (1685), which are counted appearance (e. G., The second lowest in the portion) are, for the corresponding one or more predetermined values ​​(e.g. , as one or more counts for 0x43), it may also be stored in a portion of the destination (1654) corresponding to a portion of the n fields of data from the source vector 1618.

처리 블록(1686)에서, SIMD 8-비트 개체군 카운트 연산을 위한 명령어가 실행되는 것에 또한 응답하여, 제3의 선택적인 미리 결정된 값(예를 들어, 0x41)과 동등한 소스 벡터(1618)의 n개의 데이터 필드의 부분(예를 들어, 세번째 최하위 부분)에서의 패킹된 데이터 필드들에서의 값들의 출현들은, 먼저 제3의 미리 결정된 값과 동등함에 대하여 이 부분에서의 패킹된 데이터 필드들로부터 판독된 값들을 비교한 다음, POP(1636) 카운터에서 동등함들의 수를 카운트함으로써 카운트된다. In process block (1686), n of the 8- bit SIMD population count to an instruction for operation also in response to being executed, the selective pre-determined value of the third (e.g., 0x41) and equivalent source vector 1618 part of the data field is the emergence of value in the packed data field in the (e. g., the third least significant part) it is, first, with respect as equal to the predetermined value of the third read from the packed data field in this portion comparing the values, and then is counted by counting the number of equality in the POP (1636) counters. SIMD 8-비트 개체군 카운트를 위한 명령어의 일 실시예에서, 제3의 선택적인 미리 결정된 값(예를 들어, 0x41)은 즉시 피연산자의 부분으로서 명령어에 의해 특정될 수 있다. In the practice of the instructions for the 8- bit SIMD population count one example, the first (e.g., 0x41) 3 optional pre-determined value of can immediately be specified by the instruction as part of the operand. 다른 실시예에서, 제3의 미리 결정된 값은 또한 레지스터 피연산자에서의 하나 이상의 요소로서 명령어에 의해 특정된 세트의 값들(1644) 중 하나일 수 있다. In another embodiment, the predetermined value of the third can also be one of the values ​​(1644) of a particular set by the commands as one or more elements of the register operands. 제3의 미리 결정된 값(예를 들어, 0x41)과 동등한 (예를 들어, 세번째 최하위 부분에서의) 카운트된 출현들인 처리 블록(1686)의 결과는, 대응하는 하나 이상의 미리 결정된 값(예를 들어, 0x41)에 대한 하나 이상의 카운트로서, 소스 벡터(1618)의 n개의 데이터 필드의 부분에 대응하는 목적지(1654)의 부분에 또한 저장될 수 있다. The predetermined value of three (e.g., 0x41) and an equivalent result of the processing block (1686), which are counted appearance (e. G., The third least significant in part), for the corresponding one or more predetermined values ​​(e.g. , as one or more counts for 0x41), it may also be stored in a portion of the destination (1654) corresponding to a portion of the n fields of data from the source vector 1618.

처리 블록(1687)에서, SIMD 8-비트 개체군 카운트 연산을 위한 명령어가 실행되는 것에 또한 응답하여, 제4의 선택적인 미리 결정된 값(예를 들어, 0x47)과 동등한 소스 벡터(1618)의 n개의 데이터 필드의 부분(예를 들어, 네번째 최하위 부분)에서의 패킹된 데이터 필드들에서의 값들의 출현들은, 먼저 제4의 미리 결정된 값과 동등함에 대하여 이 부분에서의 패킹된 데이터 필드들로부터 판독된 값들을 비교한 다음, POP(1637) 카운터에서 동등함들의 수를 카운트함으로써 카운트된다. In process block (1687), n of the 8- bit SIMD population count to an instruction for operation also in response to being executed, the selective pre-determined value of a fourth (e.g., 0x47) and equivalent source vector 1618 part of the data field is the emergence of value in the packed data field in the (e. g., the fourth least significant part) are, first, with respect as equal to the predetermined value of the fourth read from the packed data field in this portion comparing the values, and then is counted by counting the number of equality in the POP (1637) counters. SIMD 8-비트 개체군 카운트를 위한 명령어의 일 실시예에서, 제4의 선택적인 미리 결정된 값(예를 들어, 0x47)은 즉시 피연산자의 부분으로서 명령어에 의해 특정될 수 있다. In one embodiment of instructions for a SIMD 8- bit population count (e.g., 0x47) optional pre-determined value of the fourth can immediately be specified by the instruction as part of the operand. 다른 실시예에서, 제4의 미리 결정된 값은 또한 레지스터 피연산자에서의 하나 이상의 요소로서 명령어에 의해 특정된 세트의 값들(1644) 중 하나일 수 있다. In another embodiment, the predetermined value of the fourth can also be one of the values ​​(1644) of a particular set by the commands as one or more elements of the register operands. 제4의 미리 결정된 값(예를 들어, 0x47)과 동등한 (예를 들어, 네번째 최하위 부분에서의) 카운트된 출현들인 처리 블록(1687)의 결과는, 대응하는 하나 이상의 미리 결정된 값(예를 들어, 0x47)에 대한 하나 이상의 카운트로서, 소스 벡터(1618)의 n개의 데이터 필드의 부분에 대응하는 목적지(1654)의 부분에 또한 저장될 수 있다. The predetermined value of 4 (for example, 0x47), and equivalent results of the processing which are the counted appearance (e. G., In the fourth least significant part) block (1687) is, for the corresponding one or more predetermined values ​​(e.g. , as one or more counts for 0x47), it may also be stored in a portion of the destination (1654) corresponding to a portion of the n fields of data from the source vector 1618.

도 16e는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 위한 장치의 다른 대안적인 실시예를 도시한다. Figure 16e shows a further alternative embodiment of a device for executing the instructions to provide a SIMD vector population count functionality. 또한, 장치(1605)의 실시예들은 SIMD 개체군 카운트 기능성을 제공하는 명령어의 실행을 위한 코어(490)의 부분(예를 들어, 실행 유닛(들)(462)) 또는 파이프라인(400)의 부분(예를 들어, 실행 스테이지(416))일 수 있다. In addition, portions of the examples are parts (e.g., execution unit (s) 462) or the pipeline 400 of the core 490 for execution of the instruction to provide a SIMD population count functionality of device 1605 (e. g., execution stage 416) may be. 장치(1605)의 실시예들은, 하나 이상의 가변의 복수의 n개의 가변 크기의 데이터 요소의 값들을 저장하기 위한 하나 이상의 가변의 복수의 n개의 가변 크기의 데이터 필드를 각각 포함하는 벡터 레지스터들(예를 들어, 물리적 레지스터 파일들 유닛(들)(458))과 연결될 수 있다. Embodiment of the device 1605, for example, are, in a vector register comprising at least one variable plurality of n fields of data of variable size for storing one or more variable plurality of n values ​​of the data elements of one variable intensity of each (e.g. example, may be connected to the physical register files unit (s) 458). 장치(1605)의 실시예들은, (예를 들어, 명령어 니모닉의 부분으로서 또는 피연산자로서 또는 제어 레지스터에서) 패킹된 데이터 크기 및 벡터 개체군 카운트 연산을 특정하는 명령어를 디코딩하기 위한 디코드 스테이지(예를 들어, 디코드(406)) 또는 디코더(예를 들어, 디코드 유닛(440))와 또한 연결될 수 있다. Embodiment of the device 1605, for example, are, (e. G., In a portion of the instruction mnemonic or as an operand or control register) for for decoding an instruction to specify a packed data size and the vector population count operation decoding stage (for example, decoding 406) or the decoder (for example, decode unit 440 may also be coupled with). 하나 이상의 실행 유닛(예를 들어, 실행 장치(1605))은, 디코딩된 명령어에 응답하여, (예를 들어, 메모리에 또는 레지스터에 저장되어 있는) 소스 벡터(1618)의 부분에서의 각각의 패킹된 데이터 필드의 특정되는 패킹된 데이터 크기에 따른 복수의 비트를 판독할 수 있는데, 여기서 소스 벡터의 그 부분에서의 복수의 제1 패킹된 데이터 필드 각각은 특정되는 패킹된 데이터 크기에 따른 복수의 비트를 저장한다. One or more execution units (e.g., execution unit 1605) is in response to the decoded instructions, and each of the packing in the portion of (e.g., stored in the memory or in the register) Source Vector 1618 There a specific plurality of bits in accordance with the packed data size of the data field can be read out, wherein each of the plurality of the first packed data field in that part of the source vectors is a plurality of bits in accordance with the packed data size specified stores. 장치(1605)의 예에 도시된 일 실시예에서, 복수의 제1 패킹된 데이터 필드 각각에 저장된 복수의 비트는 8 비트이다. In one embodiment shown in the example of a device 1605, a plurality of the first plurality of bits stored in a packed data field is 8 bits, respectively. 대안적인 실시예에서, 일부 다른 복수의 비트가 복수의 제1 패킹된 데이터 필드 각각에 저장될 수 있다. In an alternative embodiment, some of the other plurality of bits can be stored in the first plurality of packed data fields, respectively.

예를 들어, 장치(1605)에서, 소스 벡터(1618)의 복수의 n개의 데이터 필드의 하나 이상의 부분 각각에는 패킹된 데이터 필드들이 저장되는데, 소스 벡터(1618)의 부분에서의 각각의 패킹된 데이터 필드는 복수의 8 비트를 저장한다. For example, the packed data for each of the portions of the device 1605, the source vector (1618) a plurality of n number of each of one or more of the data field, there is a packed data fields are stored, the source vector 1618 of field stores a plurality of 8-bit. 처리 블록(1648)에서, SIMD 8-비트 개체군 카운트 연산을 위한 명령어의 일 실시예가 프로세서에서 실행되는 것에 응답하여, 소스 벡터(1618)의 n개의 데이터 필드의 부분(예를 들어, 최하위 부분)에서의 패킹된 데이터 필드들이 판독되고, 하나 이상의 미리 결정된 값(예를 들어, 1644)과 동등한 값들의 출현들은, 먼저 하나 이상의 미리 결정된 값(예를 들어, 1644) 각각과 동등함에 대하여 이 부분에서의 패킹된 데이터 필드들로부터 판독된 값들을 비교한 다음, POP(1643) 카운터들에서 동등함들의 수를 카운트함으로써 카운트된다. In process block (1648), 8- bit SIMD populations in response to being executed in an embodiment of processor instructions for the counting operation, part of the n data fields of the source vector (1618) (e. G., The least significant part) packing the data fields have been read out, the at least one predetermined value (e.g., 1644) and in the portions that as the appearance of equivalent values ​​are equal to the first one or more predetermined value (e.g., 1644), respectively the comparison of the value read from the packed data field, and is counted by counting the number of equality in the POP (1643) counters. SIMD 8-비트 개체군 카운트를 위한 명령어의 일 실시예에서, 하나 이상의 미리 결정된 값(예를 들어, 1644)은 명령어에 의해 즉시 피연산자로서 특정될 수 있다. In one embodiment of instructions for a SIMD 8- bit population counter, (e. G., 1644) at least one pre-determined value may be specified as an immediate operand by an instruction. 다른 실시예에서, 하나 이상의 미리 결정된 값은 레지스터 피연산자에서의 하나 이상의 요소로서 명령어에 의해 특정된 세트의 값들(1644) 중 하나일 수 있다. In another embodiment, one or more pre-determined value can be one of the values ​​(1644) of the set specified by the commands as one or more elements of the register operands. 하나 이상의 미리 결정된 값(예를 들어, 1644) 각각과 동등한 (예를 들어, 최하위 부분에서의) 카운트된 출현들인 처리 블록(1648)의 결과는, 대응하는 하나 이상의 미리 결정된 값(예를 들어, 1644) 각각에 대한 하나 이상의 카운트로서, 소스 벡터(1618)의 n개의 데이터 필드의 부분에 대응하는 목적지(1650)의 부분에 저장될 수 있다. One or more predetermined value (e.g., 1644) (e.g., at least significant part) equal to the respective results of which are counted emergence process block (1648) is, for the corresponding one or more predetermined values ​​(e.g., 1644) as the at least one count for each, it may be stored in a portion of the destination (1650) corresponding to a portion of the n fields of data from the source vector 1618.

처리 블록(1658)에서, SIMD 8-비트 개체군 카운트 연산을 위한 명령어가 실행되는 것에 또한 응답하여, 하나 이상의 미리 결정된 값(예를 들어, 1644) 각각과 동등한 소스 벡터(1618)의 n개의 데이터 필드의 부분(예를 들어, 두번째 최하위 부분)에서의 패킹된 데이터 필드들에서의 값들의 출현들은, 먼저 하나 이상의 미리 결정된 값(예를 들어, 1644)과 동등함에 대하여 이 부분에서의 패킹된 데이터 필드들로부터 판독된 값들을 비교한 다음, POP(1653) 카운터들에서 동등함들의 수를 카운트함으로써 카운트된다. In process block (1658), SIMD 8- bit to the instructions for the population count operation also in response to being executed, one or more predetermined value (e.g., 1644) n of data fields of the source vector 1618 equal to each partial appearance of value in the packed data field in the (e. g., the second least significant part) are, first, one or more predetermined value (e.g., 1644), a packed data in the portions that as equal to the field of the comparison of the value read from the next, and is counted by counting the number of equality in the POP (1653) counters. 하나 이상의 미리 결정된 값(예를 들어, 1644) 각각과 동등한 (예를 들어, 두번째 최하위 부분에서의) 카운트된 출현들인 처리 블록(1658)의 결과는, 대응하는 하나 이상의 미리 결정된 값(예를 들어, 1644) 각각에 대한 하나 이상의 카운트로서, 소스 벡터(1618)의 n개의 데이터 필드의 부분에 대응하는 목적지(1650)의 부분에 또한 저장될 수 있다. One or more predetermined value (e.g., 1644) equal to the respective results of processing, which are counted appearance (e. G., In the second the least significant part) block (1658) is, for the corresponding one or more predetermined values ​​(e.g. , 1644) may be counted as one or more for each, and stored in a portion of the destination (1650) corresponding to a portion of the n fields of data from the source vector 1618.

처리 블록(1668)에서, SIMD 8-비트 개체군 카운트 연산을 위한 명령어가 실행되는 것에 또한 응답하여, 하나 이상의 미리 결정된 값(예를 들어, 1644)과 동등한 소스 벡터(1618)의 n개의 데이터 필드의 부분(예를 들어, 세번째 최하위 부분)에서의 패킹된 데이터 필드들에서의 값들의 출현들은, 먼저 하나 이상의 미리 결정된 값과 동등함에 대하여 이 부분에서의 패킹된 데이터 필드들로부터 판독된 값들을 비교한 다음, POP(1663) 카운터들에서 동등함들의 수를 카운트함으로써 카운트된다. Processing block (1668), for the SIMD 8- bit to the instructions for the population count operation also in response to being executed, one or more predetermined value (e.g., 1644) of the n pieces of data equivalent to the source vector 1618 field partial appearance of value in the packed data field in the (e. g., the third least significant part) are, first, with respect as equal to one or more pre-determined value compared to the values ​​read from the packed data field in this portion then it is counted by counting the number of equality in the POP (1663) counters. 하나 이상의 미리 결정된 값(예를 들어, 1644) 각각과 동등한 (예를 들어, 세번째 최하위 부분에서의) 카운트된 출현들인 처리 블록(1668)의 결과는, 대응하는 하나 이상의 미리 결정된 값(예를 들어, 1644) 각각에 대한 하나 이상의 카운트로서, 소스 벡터(1618)의 n개의 데이터 필드의 부분에 대응하는 목적지(1650)의 부분에 또한 저장될 수 있다. One or more predetermined value (e.g., 1644) equal to the respective results of processing, which are counted appearance (e. G., Of the third least significant part) block (1668) is, for the corresponding one or more predetermined values ​​(e.g. , 1644) may be counted as one or more for each, and stored in a portion of the destination (1650) corresponding to a portion of the n fields of data from the source vector 1618.

처리 블록(1678)에서, SIMD 8-비트 개체군 카운트 연산을 위한 명령어가 실행되는 것에 또한 응답하여, 하나 이상의 미리 결정된 값(예를 들어, 1644)과 동등한 소스 벡터(1618)의 n개의 데이터 필드의 부분(예를 들어, 네번째 최하위 부분)에서의 패킹된 데이터 필드들에서의 값들의 출현들은, 먼저 하나 이상의 미리 결정된 값과 동등함에 대하여 이 부분에서의 패킹된 데이터 필드들로부터 판독된 값들을 비교한 다음, POP(1673) 카운터에서 동등함들의 수를 카운트함으로써 카운트된다. Processing block (1678), for the SIMD 8- bit to the instructions for the population count operation also in response to being executed, one or more predetermined value (e.g., 1644) of the n pieces of data equivalent to the source vector 1618 field partial appearance of value in the packed data field in the (e. g., the fourth least significant part) are, first, with respect as equal to one or more pre-determined value compared to the values ​​read from the packed data field in this portion then it is counted by counting the number of equality in the POP (1673) counters. 하나 이상의 미리 결정된 값(예를 들어, 1644) 각각과 동등한 (예를 들어, 네번째 최하위 부분에서의) 카운트된 출현들인 처리 블록(1678)의 결과는, 대응하는 하나 이상의 미리 결정된 값(예를 들어, 1644) 각각에 대한 하나 이상의 카운트로서, 소스 벡터(1618)의 n개의 데이터 필드의 부분에 대응하는 목적지(1650)의 부분에 또한 저장될 수 있다. One or more predetermined value (e.g., 1644) equal to the respective results of processing, which are counted appearance (e. G., In the fourth least significant part) block (1678) is, for the corresponding one or more predetermined values ​​(e.g. , 1644) may be counted as one or more for each, and stored in a portion of the destination (1650) corresponding to a portion of the n fields of data from the source vector 1618.

본 명세서에 개시된 SIMD 개체군 카운트 명령어들을 실행하기 위한 장치는 게놈 시퀀싱 및 정렬 처리를 위해 이용되어, 계산 효율을 개선하며 전력 소모를 감소시킬 수 있다는 것이 인식될 것이다. Device for executing the SIMD instruction count populations disclosed herein are used for genome sequencing and sorting processing, improve the computational efficiency, and it will be appreciated that reducing the power consumption. 보다 일반적으로 다른 데이터베이스들, 데이터 마이닝 애플리케이션들 및 검색 애플리케이션들에서 또한 유사한 압축 스킴들이 이용되어, 이러한 애플리케이션들도 또한 본 명세서에 개시된 SIMD 개체군 카운트 명령어들을 실행하기 위한 장치를 이용하여 계산 효율을 개선하며 전력 소모를 감소시킬 수 있게 된다. More typically also have a similar compression scheme used in the other databases, data mining applications and search application, also these applications also improves the computation efficiency by using the apparatus for executing SIMD population count instructions disclosed herein it is possible to reduce power consumption.

도 17a는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 위한 예시적인 프로세스(1701)의 일 실시예에 대한 흐름도를 도시한다. Figure 17a shows a flow diagram of one embodiment of an exemplary process 1701 for executing the instruction to provide a SIMD vector population count functionality. 프로세스(1701)의 처리 블록(1710)에서, 소스 벡터의 n개의 데이터 필드의 하나 이상의 부분에는 데이터 필드들이 저장되는데, 소스 벡터의 부분에서의 각각의 데이터 필드는 복수의 비트를 저장한다. At processing block 1710 of process 1701, there is, the data field are stored one or more portions of the n fields of data from the source vector, with each data field in the portion of the source vector and stores a plurality of bits. 처리 블록(1720)에서, SIMD 개체군 카운트 연산을 위한 명령어가 프로세서에서 실행된다. At processing block 1720, the instruction for the SIMD population count operation is executed by the processor. 다음에, 처리 블록(1730)에서, 소스 벡터의 n개의 데이터 필드의 이 부분에서의 데이터 필드들에 대하여, 하나 이상의 미리 결정된 값과 동등한 값들의 출현들이 카운트된다. Next, at process block 1730, for the data fields in this portion of the n fields of data from the source vector, and is counted to the appearance of at least one predetermined value and equal values. 처리 블록(1740)에서, 대응하는 하나 이상의 미리 결정된 값 각각에 대한 하나 이상의 카운트로서, 카운트된 출현들은 소스 벡터의 n개의 데이터 필드의 부분에 대응하는 목적지의 부분에 저장된다. In a process block 1740, as one or more of the count for a corresponding one or more predetermined values, each of, the occurrence count are stored in a portion of the destination corresponding to the portion of the n data fields of the source vector. 처리 블록(1790)에서, 프로세스(1701)가 소스 벡터의 모든 부분을 처리하는 것을 완료하는지 여부가 판정된다. In process block (1790), it is determined that the process 1701 is completed to process all of the source vector. 완료하지 않은 경우에는, 처리는 처리 블록(1730)에서의 시작을 반복한다. If not completed, the process is repeated beginning at process block 1730. 완료한 경우에는, 처리는 처리 블록(1799)에서 종료된다. If you are done, the process ends at process block (1799).

도 17b는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 위한 예시적인 프로세스(1702)의 대안적인 실시예에 대한 흐름도를 도시한다. Figure 17b shows a flow diagram of an alternative embodiment of an exemplary process 1702 for executing the instruction to provide a SIMD vector population count functionality. 프로세스(1702)의 처리 블록(1712)에서, 소스 벡터의 n개의 2-비트 데이터 필드의 하나 이상의 부분에는 데이터 필드들이 저장되는데, 소스 벡터의 부분에서의 각각의 데이터 필드는 비트들의 쌍을 저장한다. At processing block 1712 of process 1702, there is, the data field are stored one or more portions of the n number of 2-bit data field of the source vector, with each data field in the portion of the source vector and stores a pair of bits . 처리 블록(1722)에서, SIMD 2-비트 개체군 카운트 연산을 위한 명령어가 프로세서에서 실행된다. At processing block 1722, the command for the 2- bit SIMD population count operation is executed by the processor. 다음에, 처리 블록(1732)에서, 소스 벡터의 n개의 2-비트 데이터 필드의 이 부분에서의 2-비트 데이터 필드들에 대하여, 하나 이상의 미리 결정된 값과 동등한 값들의 출현들이 카운트된다. Next, at process block 1732, with respect to the 2-bit data field in this portion of the n number of 2-bit data field of the source vector, and is counted to the appearance of at least one predetermined value and equal values. 처리 블록(1742)에서, 대응하는 하나 이상의 미리 결정된 값 각각에 대한 하나 이상의 카운트로서, 카운트된 출현들은 소스 벡터의 n개의 2-비트 데이터 필드의 부분에 대응하는 목적지의 부분에 저장된다. In a process block 1742, as one or more of the count for a corresponding one or more predetermined values, each of, the occurrence count are stored in a portion of the destination corresponding to the portion of the n number of 2-bit data field of the source vector. 처리 블록(1790)에서, 프로세스(1702)가 소스 벡터의 모든 부분을 처리하는 것을 완료하는지 여부가 판정된다. In process block (1790), it is determined that the process 1702 is completed to process all of the source vector. 완료하지 않은 경우에는, 처리는 처리 블록(1732)에서의 시작을 반복한다. If not completed, the process is repeated beginning at process block 1732. 완료한 경우에는, 처리는 처리 블록(1799)에서 종료된다. If you are done, the process ends at process block (1799).

도 17c는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 위한 예시적인 프로세스(1704)의 다른 대안적인 실시예에 대한 흐름도를 도시한다. Figure 17c illustrates a flow diagram for another alternative embodiment of an exemplary process 1704 for executing the instruction to provide a SIMD vector population count functionality. 프로세스(1704)의 처리 블록(1714)에서, 소스 벡터의 n개의 4-비트 데이터 필드의 하나 이상의 부분에는 데이터 필드들이 저장되는데, 소스 벡터의 부분에서의 각각의 데이터 필드는 비트들의 쌍을 저장한다. At processing block 1714 of process 1704, there is, the data field are stored one or more portions of the n 4-bit data field of the source vector, with each data field in the portion of the source vector and stores a pair of bits . 처리 블록(1724)에서, SIMD 4-비트 개체군 카운트 연산을 위한 명령어가 프로세서에서 실행된다. At processing block 1724, the instructions for 4- bit SIMD population count operation is executed by the processor. 다음에, 처리 블록(1734)에서, 소스 벡터의 n개의 4-비트 데이터 필드의 이 부분에서의 4-비트 데이터 필드들에 대하여, 하나 이상의 미리 결정된 값과 동등한 값들의 출현들이 카운트된다. Next, at process block 1734, with respect to 4-bit data field in this portion of the n 4-bit data field of the source vector, and is counted to the appearance of at least one predetermined value and equal values. 처리 블록(1744)에서, 대응하는 하나 이상의 미리 결정된 값 각각에 대한 하나 이상의 카운트로서, 카운트된 출현들은 소스 벡터의 n개의 4-비트 데이터 필드의 부분에 대응하는 목적지의 부분에 저장된다. In process block (1744), as one or more of the count for a corresponding one or more predetermined values, each of, the occurrence count are stored in a portion of the destination corresponding to the portion of the n 4-bit data field of the source vector. 처리 블록(1790)에서, 프로세스(1704)가 소스 벡터의 모든 부분을 처리하는 것을 완료하는지 여부가 판정된다. In process block (1790), it is determined that the process 1704 is completed to process all of the source vector. 완료하지 않은 경우에는, 처리는 처리 블록(1734)에서의 시작을 반복한다. If not completed, the process is repeated beginning at process block (1734). 완료한 경우에는, 처리는 처리 블록(1799)에서 종료된다. If you are done, the process ends at process block (1799).

도 17d는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 위한 예시적인 프로세스(1708)의 다른 대안적인 실시예에 대한 흐름도를 도시한다. Figure 17d shows a flow diagram for another alternative embodiment of an exemplary process 1708 for executing the instruction to provide a SIMD vector population count functionality. 프로세스(1708)의 처리 블록(1718)에서, 소스 벡터의 n개의 8-비트 데이터 필드의 하나 이상의 부분에는 데이터 필드들이 저장되는데, 소스 벡터의 부분에서의 각각의 데이터 필드는 비트들의 쌍을 저장한다. At processing block 1718 of process 1708, there is, the data field are stored one or more portions of the n number of 8-bit data field of the source vector, with each data field in the portion of the source vector and stores a pair of bits . 처리 블록(1728)에서, SIMD 8-비트 개체군 카운트 연산을 위한 명령어가 프로세서에서 실행된다. In process block (1728), the command for the 8- bit SIMD population count operation is executed by the processor. 다음에, 처리 블록(1738)에서, 소스 벡터의 n개의 8-비트 데이터 필드의 이 부분에서의 8-비트 데이터 필드들에 대하여, 하나 이상의 미리 결정된 값과 동등한 값들의 출현들이 카운트된다. Next, in process block (1738), with respect to the 8-bit data field in this portion of the n number of 8-bit data field of the source vector, and is counted to the appearance of at least one predetermined value and equal values. 처리 블록(1748)에서, 대응하는 하나 이상의 미리 결정된 값 각각에 대한 하나 이상의 카운트로서, 카운트된 출현들은 소스 벡터의 n개의 8-비트 데이터 필드의 부분에 대응하는 목적지의 부분에 저장된다. In process block (1748), as one or more of the count for a corresponding one or more predetermined values, each of, the occurrence count are stored in a portion of the destination corresponding to the portion of the n number of 8-bit data field of the source vector. 처리 블록(1790)에서, 프로세스(1708)가 소스 벡터의 모든 부분을 처리하는 것을 완료하는지 여부가 판정된다. In process block (1790), it is determined that the process 1708 is completed to process all of the source vector. 완료하지 않은 경우에는, 처리는 처리 블록(1738)에서의 시작을 반복한다. If not completed, the process is repeated beginning at process block (1738). 완료한 경우에는, 처리는 처리 블록(1799)에서 종료된다. If you are done, the process ends at process block (1799).

도 18a는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 위한 예시적인 프로세스(1801)의 일 실시예에 대한 흐름도를 도시한다. Figure 18a shows a flow diagram of one embodiment of an exemplary process 1801 for executing the instruction to provide a SIMD vector population count functionality. 프로세스(1801)의 처리 블록(1810)에서, 소스 벡터의 하나 이상의 부분 각각에는 패킹된 데이터 필드들이 저장되는데, 소스 벡터의 부분에서의 각각의 패킹된 데이터 필드는 복수의 비트를 저장한다. At processing block 1810 of process 1801, each of the one or more portions of the source vectors, there is a packed data field are stored, each of the packed data field in the portion of the source vector and stores a plurality of bits. 처리 블록(1820)에서, 패킹된 데이터 크기 및 SIMD 개체군 카운트 연산을 특정하는 명령어가 디코딩된다. In a process block 1820, the packed data count population size and the SIMD operation instructions for the specific decoded. 다음에, 처리 블록(1830)에서, 디코딩된 명령어에 응답하여, 소스 벡터의 하나 이상의 부분 중의 소정 부분에서의 패킹된 데이터 필드들 각각의 복수의 비트가 판독된다. Next, at process block 1830, in response to the decoded instructions, the plurality of bits of the packed data field, each at a predetermined portion of one or more portions of the source vector is read. 처리 블록(1840)에서, 소스 벡터의 이 부분에서의 패킹된 데이터 필드들에 대하여, 하나 이상의 미리 결정된 값과 동등한 값들의 출현들이 카운트된다. At processing block 1840, with respect to the packed data fields in this portion of the source vector, and is counted to the appearance of at least one predetermined value and equal values. 처리 블록(1850)에서, 하나 이상의 미리 결정된 값에 대응하는 하나 이상의 카운트로서, 카운트된 출현들은 소스 벡터 부분에 대응하는 목적지의 부분에 저장된다. In process block (1850), as one or more of the count corresponding to one or more predetermined value, the occurrence count are stored in a portion of the destination corresponding to the vector portion of the source. 처리 블록(1890)에서, 프로세스(1801)가 소스 벡터의 모든 부분을 처리하는 것을 완료하는지 여부가 판정된다. In process block (1890), it is determined that the process 1801 is completed to process all of the source vector. 완료하지 않은 경우에는, 처리는 처리 블록(1830)에서의 시작을 반복한다. If not completed, the process is repeated beginning at process block (1830). 완료한 경우에는, 처리는 처리 블록(1899)에서 종료된다. If you are done, the process ends at process block (1899).

도 18b는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 위한 예시적인 프로세스(1802)의 대안적인 실시예에 대한 흐름도를 도시한다. Figure 18b shows a flow diagram of an alternative embodiment of an exemplary process 1802 for executing the instruction to provide a SIMD vector population count functionality. 프로세스(1802)의 처리 블록(1812)에서, 소스 벡터의 하나 이상의 부분 각각에는 패킹된 데이터 필드들이 저장되는데, 소스 벡터의 부분에서의 각각의 패킹된 데이터 필드는 비트들의 쌍을 저장한다. At processing block 1812 of process 1802, the packing there is a data field that stores each of the one or more portions of the source vector, respectively, of the packed data field in the portion of the source vector and stores a pair of bits. 처리 블록(1822)에서, 패킹된 데이터 크기 및 SIMD 개체군 카운트 연산을 특정하는 명령어가 디코딩된다. In a process block 1822, the packed data size and a population count SIMD operation instructions for the specific decoded. 다음에, 처리 블록(1832)에서, 디코딩된 명령어에 응답하여, 소스 벡터의 하나 이상의 부분 중의 소정 부분에서의 패킹된 데이터 필드들 각각의 비트들의 쌍이 판독된다. Next, at process block 1832, in response to the decoded instructions, the pair of the respective bit of the packed data fields in a predetermined portion of one or more portions of the source vector is read. 처리 블록(1842)에서, 소스 벡터의 이 부분에서의 패킹된 데이터 필드들에 대하여, 하나 이상의 미리 결정된 값과 동등한 값들의 출현들이 카운트된다. In process block (1842), with respect to the packed data fields in this portion of the source vector, and it is counted to the appearance of at least one predetermined value and equal values. 처리 블록(1852)에서, 하나 이상의 미리 결정된 값에 대응하는 하나 이상의 카운트로서, 카운트된 출현들은 소스 벡터 부분에 대응하는 목적지의 부분에 저장된다. In process block (1852), as one or more of the count corresponding to one or more predetermined value, the occurrence count are stored in a portion of the destination corresponding to the vector portion of the source. 처리 블록(1890)에서, 프로세스(1802)가 소스 벡터의 모든 부분을 처리하는 것을 완료하는지 여부가 판정된다. In process block (1890), it is determined that the process 1802 is completed to process all of the source vector. 완료하지 않은 경우에는, 처리는 처리 블록(1832)에서의 시작을 반복한다. If not completed, the process is repeated beginning at process block (1832). 완료한 경우에는, 처리는 처리 블록(1899)에서 종료된다. If you are done, the process ends at process block (1899).

도 18c는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 위한 예시적인 프로세스의 다른 대안적인 실시예에 대한 흐름도를 도시한다. Figure 18c illustrates a flow diagram for another alternative embodiment of an exemplary process for executing a command provided by the SIMD vector population count functionality. 프로세스(1804)의 처리 블록(1814)에서, 소스 벡터의 하나 이상의 부분 각각에는 패킹된 데이터 필드들이 저장되는데, 소스 벡터의 부분에서의 각각의 패킹된 데이터 필드는 비트들의 4-비트 니블을 저장한다. At processing block 1814 of process 1804, the packing there is a data field that stores each of the one or more portions of the source vector, respectively, of the packed data field in the portion of the source vector and stores the 4-bit nibbles of bits . 처리 블록(1824)에서, 패킹된 데이터 크기 및 SIMD 개체군 카운트 연산을 특정하는 명령어가 디코딩된다. In a process block 1824, the packed data count population size and the SIMD operation instructions for the specific decoded. 다음에, 처리 블록(1834)에서, 디코딩된 명령어에 응답하여, 소스 벡터의 하나 이상의 부분 중의 소정 부분에서의 패킹된 데이터 필드들 각각의 비트들의 니블이 판독된다. Next, at process block 1834, in response to the decoded instructions, the nibbles of a the packed data, each bit of the field in a predetermined portion of one or more portions of the source vector is read. 처리 블록(1844)에서, 소스 벡터의 이 부분에서의 패킹된 데이터 필드들에 대하여, 하나 이상의 미리 결정된 값과 동등한 값들의 출현들이 카운트된다. In process block (1844), with respect to the packed data fields in this portion of the source vector, and it is counted to the appearance of at least one predetermined value and equal values. 처리 블록(1854)에서, 하나 이상의 미리 결정된 값에 대응하는 하나 이상의 카운트로서, 카운트된 출현들은 소스 벡터 부분에 대응하는 목적지의 부분에 저장된다. In process block (1854), as one or more of the count corresponding to one or more predetermined value, the occurrence count are stored in a portion of the destination corresponding to the vector portion of the source. 처리 블록(1890)에서, 프로세스(1804)가 소스 벡터의 모든 부분을 처리하는 것을 완료하는지 여부가 판정된다. In process block (1890), it is determined that the process 1804 is completed to process all of the source vector. 완료하지 않은 경우에는, 처리는 처리 블록(1834)에서의 시작을 반복한다. If not completed, the process is repeated beginning at process block (1834). 완료한 경우에는, 처리는 처리 블록(1899)에서 종료된다. If you are done, the process ends at process block (1899).

도 18d는 SIMD 벡터 개체군 카운트 기능성을 제공하는 명령어를 실행하기 위한 예시적인 프로세스의 다른 대안적인 실시예에 대한 흐름도를 도시한다. Figure 18d shows a flow diagram for another alternative embodiment of an exemplary process for executing a command provided by the SIMD vector population count functionality. 프로세스(1808)의 처리 블록(1818)에서, 소스 벡터의 하나 이상의 부분 각각에는 패킹된 데이터 필드들이 저장되는데, 소스 벡터의 부분에서의 각각의 패킹된 데이터 필드는 데이터의 바이트를 저장한다. At processing block 1818 of process 1808, each of the one or more portions of the source vectors, there is a packed data field are stored, each of the packed data field in the portion of the source vector and stores a byte of data. 처리 블록(1828)에서, 패킹된 데이터 크기 및 SIMD 개체군 카운트 연산을 특정하는 명령어가 디코딩된다. In a process block 1828, the packed data count population size and the SIMD operation instructions for the specific decoded. 다음에, 처리 블록(1838)에서, 디코딩된 명령어에 응답하여, 소스 벡터의 하나 이상의 부분 중의 소정 부분에서의 패킹된 데이터 필드들 각각의 데이터의 바이트가 판독된다. Next, in process block (1838), in response to the decoded instructions, the byte of the packed data field of each of data in a predetermined portion of one or more portions of the source vector it is read. 처리 블록(1848)에서, 소스 벡터의 이 부분에서의 패킹된 데이터 필드들에 대하여, 하나 이상의 미리 결정된 값과 동등한 값들의 출현들이 카운트된다. In process block (1848), with respect to the packed data fields in this portion of the source vector, and it is counted to the appearance of at least one predetermined value and equal values. 처리 블록(1858)에서, 하나 이상의 미리 결정된 값에 대응하는 하나 이상의 카운트로서, 카운트된 출현들은 소스 벡터 부분에 대응하는 목적지의 부분에 저장된다. In process block (1858), as one or more of the count corresponding to one or more predetermined value, the occurrence count are stored in a portion of the destination corresponding to the vector portion of the source. 처리 블록(1890)에서, 프로세스(1808)가 소스 벡터의 모든 부분을 처리하는 것을 완료하는지 여부가 판정된다. In process block (1890), it is determined that the process 1808 is completed to process all of the source vector. 완료하지 않은 경우에는, 처리는 처리 블록(1838)에서의 시작을 반복한다. If not completed, the process is repeated beginning at process block (1838). 완료한 경우에는, 처리는 처리 블록(1899)에서 종료된다. If you are done, the process ends at process block (1899).

SIMD 개체군 카운트 명령어들은 게놈 시퀀싱 및 정렬 처리 효율을 개선하기 위해 이용될 수 있다는 것이 인식될 것이다. SIMD population count instruction will be appreciated that the same may be utilized to improve the genome sequencing and sorting process efficiency. 보다 일반적으로 다른 데이터베이스들, 데이터 마이닝 애플리케이션들 및 검색 애플리케이션들에서 또한 유사한 압축 스킴들이 이용되어, 이러한 애플리케이션들도 또한 SIMD 개체군 카운트 명령어들을 이용하여 효율을 개선할 수 있게 된다. More generally, is also similar to the compression scheme used in the other databases, data mining applications and search applications, these applications also is possible also to improve the efficiency of using the SIMD instruction population count.

게놈 정렬에 있어서의 일반적인 연산들은, 염기-쌍 스트링들을 매칭하거나 부분적으로 매칭하기 위해서 스트링 내의 뉴클레오티드들의 출현들을 카운트하는 것이다. Typical operation of the genome are aligned, base-to count the occurrence of nucleotide in the string to the matching or partial matching of a pair of strings. (packedDna와 같은) 패킹된 데이터 포맷에 있어서, 스트링 내의 상이한 뉴클레오티드 출현들을 카운트하기 위해서 시프트 및 마스크 연산들과 함께 룩업 테이블들의 이용을 수반할 수 있는 기술들은 대신에 SIMD 개체군 카운트 명령어들을 이용할 수 있다. In a packed data format (such as packedDna), which may involve the use of look-up table with the shift and mask operations in order to count different nucleotide occurrence in the string techniques may utilize SIMD population count instructions instead. SIMD 개체군 카운트 명령어들을 이용함으로써, 스트링 내의 상이한 뉴클레오티드 출현들을 카운트하기 위해서 이전에 요구된 많은 연산이 제거될 수 있다. By using SIMD population count instruction, the previously calculated number of requirements to be removed in order to count different nucleotide occurrence in the string. 따라서, 게놈 시퀀싱 및 정렬 처리와 같은 애플리케이션들의 성능, 및 보다 일반적으로는 데이터 마이닝과 같은 데이터베이스 애플리케이션들 및 검색 애플리케이션들에 대한 성능이 상당히 개선될 수 있다. Therefore, the performance of applications, and, more generally, such as genome sequencing and alignment process has the performance for database applications and search applications such as data mining can be significantly improved.

본 명세서에 개시된 메커니즘들의 실시예들은 하드웨어, 소프트웨어, 펌웨어, 또는 이러한 구현 접근법들의 조합으로 구현될 수 있다. Embodiment of the mechanism described herein may be implemented in hardware, software, firmware, or a combination of such implementation approaches. 본 발명의 실시예들은, 적어도 하나의 프로세서, 스토리지 시스템(휘발성 및 비휘발성 메모리 및/또는 스토리지 요소들을 포함함), 적어도 하나의 입력 디바이스 및 적어도 하나의 출력 디바이스를 포함하는 프로그램가능 시스템들 상에서 실행되는 컴퓨터 프로그램들 또는 프로그램 코드로서 구현될 수 있다. Embodiments of the present invention, running on the at least one processor, the storage system (both volatile and non-volatile memory and / or including the storage elements), at least one input device, and a programmable system including at least one output device, which it may be implemented as computer programs or program code.

프로그램 코드가 입력 명령어들에 적용되어, 본 명세서에 설명된 기능들을 수행하고 출력 정보를 생성할 수 있다. Program code may be applied to input commands, perform the functions described herein and generate output information. 출력 정보는 알려진 방식으로 하나 이상의 출력 디바이스에 적용될 수 있다. The output information may be applied to one or more output devices, in known fashion. 이 애플리케이션을 위해, 처리 시스템은, 예를 들어, 디지털 신호 프로세서(DSP), 마이크로컨트롤러, 주문형 집적 회로(ASIC) 또는 마이크로프로세서와 같은 프로세서를 갖는 임의의 시스템을 포함한다. For this application, the treatment system, for example, includes any system that has a processor, such as a digital signal processor (DSP), a microcontroller, an application specific integrated circuit (ASIC) or a microprocessor.

프로그램 코드는 처리 시스템과 통신하기 위해 하이 레벨 절차형 또는 객체 지향형 프로그래밍 언어로 구현될 수 있다. Program code may be implemented in a programming language oriented high-level procedural or object to communicate with a processing system. 또한, 프로그램 코드는 요구되는 경우에 어셈블리 또는 머신 언어로 구현될 수 있다. In addition, the program code may be implemented in assembly or machine language, if desired. 사실상, 본 명세서에 설명된 메커니즘들은 임의의 특정 프로그래밍 언어로 범위가 제한되지는 않는다. In fact, the mechanisms described herein are not in the range to any particular programming language restriction. 임의의 경우에, 이 언어는 컴파일형 또는 해석형 언어일 수 있다. In any case, the language may be a compiled or interpreted language type.

적어도 하나의 실시예의 하나 이상의 양태는, 머신에 의해 판독될 때에 이 머신으로 하여금 본 명세서에 설명된 기술들을 수행하는 로직을 제조하게 하는, 프로세서 내의 다양한 로직을 표현하는 머신 판독가능 매체 상에 저장된 대표적인 명령어들에 의해 구현될 수 있다. Example least one aspect at least one embodiment, when read by a machine cause the machine stored on a machine-readable medium of expressing various logic within the processor to be produced the logic to perform the techniques described herein, a representative It may be implemented by instructions. "IP 코어들"로서 알려진 이러한 표현들은 유형의 머신 판독가능 매체 상에 저장되고, 다양한 고객들 또는 제조 설비들에 공급되어, 로직 또는 프로세서를 실제로 제조하는 제조 머신들로 로딩될 수 있다. This expression is known as "IP cores" may be loaded into manufacturing machines that are stored on a machine-readable medium of this type, it is supplied to various customers or manufacturing facilities, manufacturing practice the logic or processor.

이러한 머신 판독가능 스토리지 매체는, 하드 디스크들, 플로피 디스크들, 광학 디스크들, CD-ROM들(compact disk read-only memories), CD-RW들(compact disk rewritable's) 및 광자기 디스크들을 포함하는 임의의 다른 타입의 디스크, 판독 전용 메모리들(ROM들), 랜덤 액세스 메모리들(RAM들), 예컨대 동적 랜덤 액세스 메모리들(DRAM들), 정적 랜덤 액세스 메모리들(SRAM들), EPROM들(erasable programmable read-only memories), 플래시 메모리들, EEPROM들(electrically erasable programmable read-only memories)과 같은 반도체 디바이스들, 자기 또는 광학 카드들, 또는 전자 명령어들을 저장하기에 적합한 임의의 다른 타입의 매체와 같은 스토리지 매체를 비롯하여, 머신 또는 디바이스에 의해 제조되거나 형성되는 아티클들의 비일시적인 유형의 배열들을 포함할 수 있지만, 이에 제한되지는 않는다. Such machine-readable storage medium, optionally including hard disks, floppy disks, optical disks, CD-ROM of the (compact disk read-only memories), CD-RW in (compact disk rewritable's), and magneto-optical disk the other type of the disk, a read-only memory (ROM s), random access memory (RAM s), for example (s SRAM), dynamic random access memories (DRAM s), static random access memories, the EPROM (erasable programmable read-only memories), flash memories, EEPROM of (electrically erasable programmable read-only memories) such as semiconductor devices, magnetic or optical cards, or any storage such as other types of media suitable for storing electronic instructions including medium, a machine, or may comprise a non-temporal arrangement of the type of article to be produced by the device may be formed, but, are not limited.

따라서, 본 발명의 실시예들은, 명령어들을 포함하거나, 또는 본 명세서에 설명된 구조들, 회로들, 장치들, 프로세서들 및/또는 시스템 피처들을 정의하는 하드웨어 기술 언어(HDL)와 같은 설계 데이터를 포함하는 비일시적인 유형의 머신 판독가능 매체를 또한 포함한다. Thus, the design data, such as the structures, circuits, apparatuses, processors and / or hardware description language (HDL) that defines the system features described in the embodiments of the invention, containing instructions, or the specification a non-transitory machine-readable medium of the type comprising also included. 이러한 실시예들은 프로그램 제품들로 또한 언급될 수 있다. These embodiments may also be referred to as program products.

일부 경우에, 소스 명령어 세트로부터 타깃 명령어 세트로 명령어를 변환하기 위해 명령어 변환기가 이용될 수 있다. In some cases, the command converter may be used to convert the instruction to a target instruction set from a source instruction set. 예를 들어, 명령어 변환기는 명령어를 코어에 의해 처리될 하나 이상의 다른 명령어로 (예를 들어, 정적 2진 번역, 동적 번역(dynamic compilation)을 포함하는 동적 2진 번역을 이용하여) 번역하거나, 모핑하거나, 에뮬레이트하거나, 또는 다른 방식으로 변환할 수 있다. For example, the command converter is translated, or morphing instructions to the one or more other instructions to be processed by the core (e.g., a static binary translation, dynamic translation (using a dynamic binary translation, including dynamic compilation)) or it may be converted to emulate, or other methods. 명령어 변환기는 소프트웨어, 하드웨어, 펌웨어 또는 이들의 조합으로 구현될 수 있다. Instruction converter may be implemented in software, hardware, firmware or a combination thereof. 명령어 변환기는 온 프로세서(on processor), 오프 프로세서(off processor), 또는 부분 온 및 부분 오프 프로세서(part on and part off processor)일 수 있다. Instruction converter may be on-processor (on processor), off-processor (off processor), or part one and part off processor (part on and part off processor).

따라서, 적어도 하나의 실시예에 따른 하나 이상의 명령어를 수행하기 위한 기술들이 개시되어 있다. Thus, there is disclosed techniques for performing one or more instructions in accordance with at least one embodiment. 특정의 예시적인 실시예들이 설명되며 첨부 도면들에 도시되었지만, 이러한 실시예들은 광범위한 발명에 대해 제한하는 것이 아니라 예시적일 뿐이며, 본 발명은 제시되고 설명된 특정 구성들 및 배열들에 제한되지는 않는데, 그 이유는 본 개시물을 검토하면 관련 기술분야의 통상의 기술자에게 다양한 다른 수정들이 떠오를 수 있기 때문이라는 것이 이해되어야 한다. A specific example of the embodiment will be described have been illustrated in the accompanying drawings, these embodiments are only to be illustrative rather than limiting for a broad invention, and the present invention is shown and described the does is not limited to the specific configuration and arrangement and why it should be understood that various other modifications because they can occur to ordinary skill in the art when reviewing this disclosure. 성장이 빠르며 추가 진보들이 쉽게 예견되지 않는 이것과 같은 기술분야에서, 개시된 실시예들은, 본 개시물의 원리들 또는 첨부 청구항들의 범위로부터 벗어나지 않고 기술적 진보들을 가능하게 함으로써 용이해지는 바와 같이 배열 및 상세에 있어서 손쉽게 수정가능할 수 있다. In the art such as this growth is that additional advances are not easily foreseen, fast, the disclosed embodiments, the disclosure in the arrangement and detail as will be facilitated by enabling the technical progress without departing from the scope of the principles or appended claims water It can be easily modified.

Claims (35)

  1. 벡터 개체군 카운트 기능성을 제공하는 프로세서로서, A processor to provide a vector population count functionality,
    복수의 제1 패킹된 데이터 필드를 포함하는 소스 벡터의 제1 부분을 저장하기 위한 스토리지 - 상기 소스 벡터의 제1 부분에서의 상기 복수의 제1 패킹된 데이터 필드 각각은 4 이상의 비트를 포함하는 제2의 복수의 비트를 저장함 -; Storage for storing a first portion of the source vector comprising a first plurality of packed data field claim that each of said first plurality of packed data fields in the first portion of the source vector is comprises at least four bits storing a plurality of bits of the two;
    상기 소스 벡터의 제1 부분에 대응하며, 대응하는 하나 이상의 미리 결정된 2진 값의, 상기 소스 벡터의 대응하는 부분에서의 출현들의 하나 이상의 카운트를 저장하기 위한 목적지 레지스터의 부분; Corresponding portion of the destination register to store a count of the occurrence of one or more of the portions of the at least one predetermined binary value which corresponds to a first portion of the source vector, corresponding to said source vector;
    패킹된 데이터 필드 크기 및 벡터 개체군 카운트 연산(vector population count operation)을 특정하는 제1 명령어를 디코딩하기 위한 디코드 스테이지; A packed data field sizes and the vector population count operation decode stage for decoding the first instruction to specify a (vector population count operation); And
    하나 이상의 실행 유닛 - 상기 하나 이상의 실행 유닛은, 상기 디코딩된 제1 명령어에 응답하여, And said at least one execution unit, in response to the decoded first instruction, - one or more execution units
    상기 소스 벡터의 제1 부분에서의 상기 패킹된 데이터 필드들 각각의 상기 제2의 복수의 비트를 판독하고, Reading said packed data field, each of the plurality of bits of the second of the first portion of the source vector, and
    상기 소스 벡터의 제1 부분에서의 상기 복수의 제1 데이터 필드에 대하여, 상기 하나 이상의 미리 결정된 2진 값과 동등한 2진 값들의 출현들을 카운트하고, With respect to the plurality of the first data field in the first portion of the source vector, and counting the occurrence of the one or more predetermined binary value equivalent to the binary value,
    상기 하나 이상의 미리 결정된 2진 값에 대응하는 상기 하나 이상의 카운트로서, 상기 카운트된 출현들을 상기 소스 벡터의 제1 부분에 대응하는 상기 목적지 레지스터의 부분에 저장함 - As the at least one predetermined binary one or more of the count corresponding to the value, storing the portion of the destination register corresponding to the first portion of the said counted appearance source vector -
    을 포함하는 프로세서. Processor that includes.
  2. 제1항에 있어서, According to claim 1,
    상기 소스 벡터의 제1 부분은 32-비트인 프로세서. A first portion of the source vector is a 32-bit processor.
  3. 제1항에 있어서, According to claim 1,
    상기 소스 벡터의 제1 부분은 64-비트인 프로세서. A first portion of the source vector is a 64-bit processor.
  4. 제1항에 있어서, According to claim 1,
    상기 소스 벡터의 제1 부분을 저장하기 위한 상기 스토리지는 32-비트 레지스터인 프로세서. The storage is 32-bit register in the processor for storing a first portion of the source vector.
  5. 제1항에 있어서, According to claim 1,
    상기 소스 벡터의 제1 부분을 저장하기 위한 상기 스토리지는 캐시 메모리 위치(cached memory location)인 프로세서. The storage location is a cache memory (cached memory location) of the processor for storing a first portion of the source vector.
  6. 제1항에 있어서, According to claim 1,
    상기 소스 벡터의 제1 부분을 저장하기 위한 상기 스토리지는 벡터 레지스터의 32-비트 요소인 프로세서. The storage element is a 32-bit processor of a vector register for storing a first portion of the source vector.
  7. 제1항에 있어서, According to claim 1,
    상기 목적지 레지스터의 부분은 32-비트 레지스터인 프로세서. Section of the destination register is 32-bit register in the processor.
  8. 제1항에 있어서, According to claim 1,
    상기 목적지 레지스터의 부분은 64-비트 레지스터의 32-비트 부분인 프로세서. Section of the destination register is 32-bit part of the processor of 64-bit register.
  9. 제1항에 있어서, According to claim 1,
    상기 목적지 레지스터의 부분은 128-비트 벡터 레지스터의 32-비트 요소인 프로세서. Section of the destination register is 32-bit elements of the processor of 128-bit vector registers.
  10. 제1항에 있어서, According to claim 1,
    상기 목적지 레지스터의 부분은 64-비트 레지스터인 프로세서. Section of the destination register is 64-bit register in the processor.
  11. 제1항에 있어서, According to claim 1,
    상기 제2의 복수의 비트는 4-비트인 프로세서. A plurality of bits of the second 4-bit processors.
  12. 제1항에 있어서, According to claim 1,
    상기 제2의 복수의 비트는 8-비트인 프로세서. A plurality of bits of the second 8-bit processor.
  13. 제1항에 있어서, According to claim 1,
    상기 패킹된 데이터 필드 크기는 8-비트인 프로세서. The packed data field size is the 8-bit processor.
  14. 제1항에 있어서, According to claim 1,
    상기 하나 이상의 미리 결정된 2진 값은 상기 제1 명령어에 의해 즉시 피연산자(immediate operand)로서 특정되는 프로세서. The binary value is the determined one or more pre-processor that a particular operand immediately (immediate operand) by the first instruction.
  15. 제1항에 있어서, According to claim 1,
    상기 하나 이상의 미리 결정된 2진 값은 상기 제1 명령어에 의해 레지스터 피연산자에서의 하나 이상의 요소로서 특정되는 프로세서. The at least one predetermined binary value is a specific processor which is one or more elements of the register operands by the first instruction.
  16. 제1항에 있어서, According to claim 1,
    상기 디코딩된 제1 명령어에 응답하여, In response to the decoded first instruction,
    상기 소스 벡터의 제2 부분에서의 상기 패킹된 데이터 필드들 각각의 상기 제2의 복수의 비트를 판독하고, Reading said packed data field, each of the plurality of bits of the second of the second portion of the source vector, and
    상기 소스 벡터의 제2 부분에서의 동일한 복수의 제1 데이터 필드에 대하여, 하나 이상의 제2 미리 결정된 2진 값과 동등한 2진 값들의 출현들을 카운트하고, For the same plurality of the first data field in the second portion of the source vector, and counting one or more second predetermined binary value and appearance of the same binary value,
    상기 하나 이상의 제2 미리 결정된 2진 값에 대응하는 하나 이상의 제2 카운트로서, 상기 카운트된 출현들을 상기 소스 벡터의 제2 부분에 대응하는 상기 목적지 레지스터의 부분에 저장하는 As one or more second count corresponding to the one or more second predetermined binary value, storing the portion of the destination register corresponding to the count of the appearance in the second portion of the source vector
    하나 이상의 실행 유닛을 더 포함하는 프로세서. The processor further comprising one or more execution units.
  17. 제16항에 있어서, 17. The method of claim 16,
    상기 소스 벡터의 제1 부분을 저장하기 위한 상기 스토리지는 벡터 레지스터의 32-비트 요소들로서 상기 소스 벡터의 제2 부분을 또한 저장하는 프로세서. The storage processor also stores a second portion of the source as a 32-bit vector elements of a vector register for storing a first portion of the source vector.
  18. 제16항에 있어서, 17. The method of claim 16,
    상기 소스 벡터의 제2 부분에 대응하는 상기 목적지 레지스터의 부분은 벡터 레지스터의 32-비트 요소인 프로세서. Section of the destination register corresponding to the second portion of the source vector is a 32-bit processor element of a vector register.
  19. 제16항에 있어서, 17. The method of claim 16,
    상기 하나 이상의 제2 미리 결정된 2진 값은, 상기 제1 명령어에 의해, 상기 소스 벡터의 제2 부분에 대응하는 레지스터 피연산자의 부분에서의 하나 이상의 요소로서 특정되는 프로세서. The one or more second predetermined binary value, a particular processor as one or more elements in the portion of the operand register corresponding to by the first instruction, the second portion of the source vector.
  20. 제16항에 있어서, 17. The method of claim 16,
    상기 하나 이상의 제2 미리 결정된 2진 값은, 상기 제1 명령어에 의해, 상기 소스 벡터의 제2 부분에 대응하는 벡터 레지스터 피연산자의 32-비트 요소로서 특정되는 프로세서. The one or more second predetermined binary value, the first vector element of a particular processor as a 32-bit register operand corresponding by the first instruction, the second portion of the source vector.
  21. 제16항에 있어서, 17. The method of claim 16,
    상기 하나 이상의 제2 미리 결정된 2진 값은 상기 제1 명령어에 의해 즉시 피연산자로서 특정되는 프로세서. The one or more second predetermined binary value as soon as the processor specified by the operand of the first instruction.
  22. 벡터 개체군 카운트 기능성을 제공하는 방법으로서, A method of providing a vector population count functionality,
    프로세서에 의해, 제1 벡터 레지스터의 복수의 n개의 데이터 필드의 제1 부분 각각에, 4 이상의 비트를 포함하는 제2의 복수의 비트를 저장하는 단계; By a processor, the first vector of a plurality of n, each of the first portion of the data field of the register, further comprising: storing a plurality of bits of the second containing four or more bits;
    상기 프로세서에 의해, 벡터 개체군 카운트를 위한 SIMD 명령어를 실행하는 단계; The method comprising by the processor, running a SIMD instruction for vector population count;
    상기 프로세서에 의해, 상기 제1 벡터 레지스터에서의 복수의 n개의 데이터 필드의 제1 부분에 대하여, 하나 이상의 제1 미리 결정된 2진 값 각각과 동등한 2진 값들의 출현들을 카운트하는 단계; The method comprising by the processor, with respect to the first portion of the plurality of n data fields in the first vector register, the count of one or more first predetermined binary occurrence of binary values ​​equal to the values ​​respectively; And
    상기 프로세서에 의해, 상기 하나 이상의 제1 미리 결정된 2진 값에 대응하는 하나 이상의 제1 카운트로서, 상기 카운트된 출현들을 상기 제1 벡터 레지스터에서의 복수의 n개의 데이터 필드의 제1 부분에 대응하는 목적지 레지스터의 부분에 저장하는 단계 As one or more of the first count, by the processor, corresponding to the one or more first predetermined binary value, corresponding said count appears in the first portion of the plurality of n data fields in the first vector register storing the portion of the destination register
    를 포함하는 방법. It comprises a.
  23. 제22항에 있어서, 23. The method of claim 22,
    상기 하나 이상의 제2 미리 결정된 2진 값은 상기 SIMD 명령어에 의해 즉시 피연산자로서 특정되는 방법. Wherein said one or more second predetermined binary value that is identified as soon as operands by the SIMD instruction.
  24. 제22항에 있어서, 23. The method of claim 22,
    상기 프로세서에 의해, 상기 제1 벡터 레지스터의 복수의 n개의 데이터 필드의 제2 부분 각각에, 상기 제2의 복수의 비트를 저장하는 단계; A second portion of each of a plurality n of data fields of the first vector register by the processor, comprising: storing a plurality of bits of the second;
    상기 프로세서에 의해, 상기 제1 벡터 레지스터에서의 복수의 n개의 데이터 필드의 제2 부분에 대하여, 하나 이상의 제2 미리 결정된 2진 값 각각과 동등한 2진 값들의 출현들을 카운트하는 단계; The method comprising by the processor, with respect to the second portion of the plurality of n data fields in the first vector register, the count of one or more second predetermined binary occurrence of binary values ​​equal to the values ​​respectively; And
    상기 프로세서에 의해, 상기 하나 이상의 제2 미리 결정된 2진 값에 대응하는 하나 이상의 제2 카운트로서, 상기 카운트된 출현들을 상기 제1 벡터 레지스터에서의 복수의 n개의 데이터 필드의 제2 부분에 대응하는 상기 목적지 레지스터의 부분에 저장하는 단계 As one or more second count, by the processor, corresponding to the one or more second predetermined binary value, corresponding said count appears in the second portion of the plurality of n data fields in the first vector register storing the portion of the destination register
    를 더 포함하는 방법. The method further includes.
  25. 제24항에 있어서, 25. The method of claim 24,
    상기 제1 벡터 레지스터의 복수의 n개의 데이터 필드의 제2 부분에 대응하는 상기 목적지 레지스터의 부분은 상기 목적지 레지스터의 32-비트 요소인 방법. Section of the destination register corresponding to the second portion of the plurality of n data fields of the first vector register is how a 32-bit element of the destination register.
  26. 벡터 개체군 카운트 기능성을 제공하는 처리 시스템으로서, A processing system for providing a vector population count functionality,
    메모리; Memory; And
    복수의 프로세서 A plurality of processors
    를 포함하고, And including,
    각각의 프로세서는, Each processor,
    복수의 제1 패킹된 데이터 필드를 포함하는 소스 벡터의 제1 부분을 저장하기 위한 스토리지 - 상기 소스 벡터의 제1 부분에서의 상기 복수의 제1 패킹된 데이터 필드 각각은 4 이상의 비트를 포함하는 제2의 복수의 비트를 저장함 -; Storage for storing a first portion of the source vector comprising a first plurality of packed data field claim that each of said first plurality of packed data fields in the first portion of the source vector is comprises at least four bits storing a plurality of bits of the two;
    상기 소스 벡터의 제1 부분에 대응하며, 대응하는 하나 이상의 미리 결정된 2진 값의, 상기 소스 벡터의 대응하는 부분에서의 출현들의 하나 이상의 카운트를 저장하기 위한 목적지 레지스터의 부분; Corresponding portion of the destination register to store a count of the occurrence of one or more of the portions of the at least one predetermined binary value which corresponds to a first portion of the source vector, corresponding to said source vector;
    패킹된 데이터 필드 크기 및 벡터 개체군 카운트 연산을 특정하는 제1 명령어를 디코딩하기 위한 디코드 스테이지; A decode stage for decoding a first instruction that specifies a data size field, and vector population count operation packing; And
    하나 이상의 실행 유닛 - 상기 하나 이상의 실행 유닛은, 상기 디코딩된 제1 명령어에 응답하여, And said at least one execution unit, in response to the decoded first instruction, - one or more execution units
    상기 소스 벡터의 제1 부분에서의 상기 패킹된 데이터 필드들 각각의 상기 제2의 복수의 비트를 판독하고, Reading said packed data field, each of the plurality of bits of the second of the first portion of the source vector, and
    상기 소스 벡터의 제1 부분에서의 상기 복수의 제1 데이터 필드에 대하여, 상기 하나 이상의 미리 결정된 2진 값과 동등한 2진 값들의 출현들을 카운트하고, With respect to the plurality of the first data field in the first portion of the source vector, and counting the occurrence of the one or more predetermined binary value equivalent to the binary value,
    상기 하나 이상의 미리 결정된 2진 값에 대응하는 상기 하나 이상의 카운트로서, 상기 카운트된 출현들을 상기 소스 벡터의 제1 부분에 대응하는 상기 목적지 레지스터의 부분에 저장함 - As the at least one predetermined binary one or more of the count corresponding to the value, storing the portion of the destination register corresponding to the first portion of the said counted appearance source vector -
    을 포함하는 처리 시스템. Processing system comprising a.
  27. 제26항에 있어서, 27. The method of claim 26,
    상기 제2의 복수의 비트는 4-비트인 처리 시스템. A plurality of bits is 4 bits, the processing system of the second.
  28. 제26항에 있어서, 27. The method of claim 26,
    상기 제2의 복수의 비트는 8-비트인 처리 시스템. A plurality of bits in 8-bit processing system of the second.
  29. 제26항에 있어서, 27. The method of claim 26,
    각각의 프로세서는, Each processor,
    상기 디코딩된 제1 명령어에 응답하여, In response to the decoded first instruction,
    상기 소스 벡터의 제2 부분에서의 상기 패킹된 데이터 필드들 각각의 상기 제2의 복수의 비트를 판독하고, Reading said packed data field, each of the plurality of bits of the second of the second portion of the source vector, and
    상기 소스 벡터의 제2 부분에서의 동일한 복수의 제1 데이터 필드에 대하여, 하나 이상의 제2 미리 결정된 2진 값과 동등한 2진 값들의 출현들을 카운트하고, For the same plurality of the first data field in the second portion of the source vector, and counting one or more second predetermined binary value and appearance of the same binary value,
    상기 하나 이상의 제2 미리 결정된 2진 값에 대응하는 하나 이상의 제2 카운트로서, 상기 카운트된 출현들을 상기 소스 벡터의 제2 부분에 대응하는 상기 목적지 레지스터의 부분에 저장하는 As one or more second count corresponding to the one or more second predetermined binary value, storing the portion of the destination register corresponding to the count of the appearance in the second portion of the source vector
    하나 이상의 실행 유닛을 더 포함하는 처리 시스템. Processing system further includes one or more execution units.
  30. 제29항에 있어서, 30. The method of claim 29,
    상기 소스 벡터의 제1 부분을 저장하기 위한 상기 스토리지는 벡터 레지스터의 32-비트 요소들로서 상기 소스 벡터의 제2 부분을 또한 저장하는 처리 시스템. A storage for storing a first portion of the source vector is also 32-bit element storage processing system of a second portion of the source vector as a vector register.
  31. 제29항에 있어서, 30. The method of claim 29,
    상기 소스 벡터의 제2 부분에 대응하는 상기 목적지 레지스터의 부분은 벡터 레지스터의 32-비트 요소인 처리 시스템. Section of the destination register corresponding to the second portion of the source vector is a 32-bit elements of the processing system of the vector register.
  32. 제29항에 있어서, 30. The method of claim 29,
    상기 하나 이상의 제2 미리 결정된 2진 값은, 상기 제1 명령어에 의해, 상기 소스 벡터의 제2 부분에 대응하는 레지스터 피연산자의 부분에서의 하나 이상의 요소로서 특정되는 처리 시스템. The binary value of one or more second predetermined is, the first by a first instruction, a specific processing system as one or more elements in the portion of the operand register corresponding to the second portion of the source vector.
  33. 제29항에 있어서, 30. The method of claim 29,
    상기 하나 이상의 제2 미리 결정된 2진 값은 상기 제1 명령어에 의해 즉시 피연산자로서 특정되는 처리 시스템. The one or more second predetermined binary value processing system as soon as a certain operand by the first instruction.
  34. 벡터 개체군 카운트 기능성을 제공하는 프로세서로서, A processor to provide a vector population count functionality,
    복수의 제1 패킹된 데이터 필드를 포함하는 소스 벡터의 제1 부분을 저장하기 위한 스토리지 - 상기 소스 벡터의 제1 부분에서의 상기 복수의 제1 패킹된 데이터 필드 각각은 4 이상의 비트를 포함하는 제2의 복수의 비트를 저장함 -; Storage for storing a first portion of the source vector comprising a first plurality of packed data field claim that each of said first plurality of packed data fields in the first portion of the source vector is comprises at least four bits storing a plurality of bits of the two;
    상기 소스 벡터의 제1 부분에 대응하며, 대응하는 하나 이상의 미리 결정된 2진 값의, 상기 소스 벡터의 대응하는 부분에서의 출현들의 하나 이상의 카운트를 저장하기 위한 목적지 레지스터의 부분; Corresponding portion of the destination register to store a count of the occurrence of one or more of the portions of the at least one predetermined binary value which corresponds to a first portion of the source vector, corresponding to said source vector;
    패킹된 데이터 필드 크기를 특정하는 제1 명령어를 디코딩하기 위한 디코드 스테이지; A decode stage for decoding the first instruction to specify a packed data field size; And
    하나 이상의 실행 유닛 - 상기 하나 이상의 실행 유닛은, 상기 디코딩된 제1 명령어에 응답하여, And said at least one execution unit, in response to the decoded first instruction, - one or more execution units
    상기 소스 벡터의 제1 부분에서의 상기 패킹된 데이터 필드들 각각의 상기 제2의 복수의 비트를 판독하고, Reading said packed data field, each of the plurality of bits of the second of the first portion of the source vector, and
    상기 소스 벡터의 제1 부분에서의 상기 복수의 제1 데이터 필드에 대하여, 상기 하나 이상의 미리 결정된 2진 값과 동등한 2진 값들의 출현들을 카운트하고, With respect to the plurality of the first data field in the first portion of the source vector, and counting the occurrence of the one or more predetermined binary value equivalent to the binary value,
    상기 하나 이상의 미리 결정된 2진 값에 대응하는 상기 하나 이상의 카운트로서, 상기 카운트된 출현들을 상기 소스 벡터의 제1 부분에 대응하는 상기 목적지 레지스터의 부분에 저장함 - As the at least one predetermined binary one or more of the count corresponding to the value, storing the portion of the destination register corresponding to the first portion of the said counted appearance source vector -
    을 포함하는 프로세서. Processor that includes.
  35. 제34항에 있어서, 35. The method of claim 34,
    상기 소스 벡터의 제1 부분은 32-비트인 프로세서. A first portion of the source vector is a 32-bit processor.
KR1020167000144A 2013-08-06 2014-08-06 Methods, apparatus, instructions and logic to provide vector population count functionality KR101748535B1 (en)

Priority Applications (3)

Application Number Priority Date Filing Date Title
US13/960,769 2013-08-06
US13/960,769 US9513907B2 (en) 2013-08-06 2013-08-06 Methods, apparatus, instructions and logic to provide vector population count functionality
PCT/US2014/049937 WO2015021151A1 (en) 2013-08-06 2014-08-06 Methods, apparatus, instructions and logic to provide vector population count functionality

Publications (2)

Publication Number Publication Date
KR20160018664A KR20160018664A (en) 2016-02-17
KR101748535B1 true KR101748535B1 (en) 2017-06-16

Family

ID=52449639

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167000144A KR101748535B1 (en) 2013-08-06 2014-08-06 Methods, apparatus, instructions and logic to provide vector population count functionality

Country Status (8)

Country Link
US (1) US9513907B2 (en)
EP (1) EP3030980A4 (en)
JP (1) JP2016527650A (en)
KR (1) KR101748535B1 (en)
CN (1) CN105453071A (en)
BR (1) BR112015032782A2 (en)
TW (1) TWI537823B (en)
WO (1) WO2015021151A1 (en)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9411592B2 (en) 2012-12-29 2016-08-09 Intel Corporation Vector address conflict resolution with vector population count functionality
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
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
US9471308B2 (en) 2013-01-23 2016-10-18 International Business Machines Corporation Vector floating point test data class immediate instruction
US9804840B2 (en) 2013-01-23 2017-10-31 International Business Machines Corporation Vector Galois Field Multiply Sum and Accumulate instruction
US9513907B2 (en) 2013-08-06 2016-12-06 Intel Corporation Methods, apparatus, instructions and logic to provide vector population count functionality
US9495155B2 (en) 2013-08-06 2016-11-15 Intel Corporation Methods, apparatus, instructions and logic to provide population count functionality for genome sequencing and alignment
US10146537B2 (en) * 2015-03-13 2018-12-04 Micron Technology, Inc. Vector population count determination in memory
US10050641B1 (en) 2017-03-23 2018-08-14 Hewlett Packard Enterprise Development Lp List manipulation circuits
US20190042253A1 (en) * 2017-08-01 2019-02-07 Arm Limited Counting elements in data items in a data processing apparatus

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090172348A1 (en) * 2007-12-26 2009-07-02 Robert Cavin Methods, apparatus, and instructions for processing vector data
US20100115014A1 (en) * 2008-10-31 2010-05-06 Asaf Hargil Instruction and logic for performing range detection
US20130024654A1 (en) * 2011-07-20 2013-01-24 Gove Darryl J Vector operations for compressing selected vector elements
US20130159666A1 (en) * 2011-12-14 2013-06-20 International Business Machines Corporation Reducing issue-to-issue latency by reversing processing order in half-pumped simd execution units

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS60250473A (en) * 1984-05-25 1985-12-11 Hitachi Ltd Vector processor
JPS6162974A (en) * 1984-09-05 1986-03-31 Hitachi Ltd Vector processor
JPH06105459B2 (en) * 1988-08-11 1994-12-21 日本電気株式会社 Vector processing unit
US5717616A (en) * 1993-02-19 1998-02-10 Hewlett-Packard Company Computer hardware instruction and method for computing population counts
CN103064653B (en) * 1995-08-31 2016-05-18 英特尔公司 Correcting means controls the shift position of the data packet
US6070237A (en) * 1996-03-04 2000-05-30 Intel Corporation Method for performing population counts on packed data types
DE69841256D1 (en) * 1997-12-17 2009-12-10 Panasonic Corp Masking command to command streams forwarded to a processor
US6230253B1 (en) 1998-03-31 2001-05-08 Intel Corporation Executing partial-width packed data instructions
EP1460561A1 (en) * 2001-12-27 2004-09-22 TOUDAI TLO, Ltd. Method of calculating occurrence frequency of sequence, method of calulating degree of isolation and method of estimating degree of adequacy for primer
US20030135332A1 (en) * 2002-01-14 2003-07-17 Hewlett Packard Company Circuit and method for pipelined code sequence searching
US20040249474A1 (en) * 2003-03-31 2004-12-09 Lee Ruby B. Compare-plus-tally instructions
US7274825B1 (en) * 2003-03-31 2007-09-25 Hewlett-Packard Development Company, L.P. Image matching using pixel-depth reduction before image comparison
US6876315B1 (en) 2004-03-12 2005-04-05 International Business Machines Corporation DC-balanced 6B/8B transmission code with local parity
US7565514B2 (en) 2006-04-28 2009-07-21 Freescale Semiconductor, Inc. Parallel condition code generation for SIMD operations
WO2008047432A1 (en) * 2006-10-19 2008-04-24 Fujitsu Limited Information retrieval program, recording media having the program recorded therein, information retrieving method, and information retrieving device
US7991987B2 (en) * 2007-05-10 2011-08-02 Intel Corporation Comparing text strings
US9513905B2 (en) * 2008-03-28 2016-12-06 Intel Corporation Vector instructions to enable efficient synchronization and parallel reduction operations
US8954484B2 (en) * 2009-06-12 2015-02-10 Cray Inc. Inclusive or bit matrix to compare multiple corresponding subfields
US20110314263A1 (en) * 2010-06-22 2011-12-22 International Business Machines Corporation Instructions for performing an operation on two operands and subsequently storing an original value of operand
TWI463438B (en) 2011-03-07 2014-12-01 Ind Tech Res Inst Device and method for compressing feature descriptor
US8539463B2 (en) 2011-07-28 2013-09-17 Qualcomm Innovation Center, Inc. Apparatus and method for improving the performance of compilers and interpreters of high level programming languages
CN104011657B (en) * 2011-12-22 2016-10-12 英特尔公司 And a vector calculation apparatus and method of the accumulated
US20130326196A1 (en) 2011-12-23 2013-12-05 Elmoustapha Ould-Ahmed-Vall Systems, apparatuses, and methods for performing vector packed unary decoding using masks
CN104025029A (en) * 2011-12-30 2014-09-03 英特尔公司 Unique packed data element identification processors, methods, systems, and instructions
US20140164733A1 (en) * 2011-12-30 2014-06-12 Ashish Jha Transpose instruction
JP6107513B2 (en) * 2013-07-29 2017-04-05 富士通株式会社 The information processing system, an information processing method, and an information processing program
US9513907B2 (en) 2013-08-06 2016-12-06 Intel Corporation Methods, apparatus, instructions and logic to provide vector population count functionality
US9495155B2 (en) 2013-08-06 2016-11-15 Intel Corporation Methods, apparatus, instructions and logic to provide population count functionality for genome sequencing and alignment
WO2015048250A1 (en) * 2013-09-25 2015-04-02 Mallinckrodt Llc Preparation of radioiodinated 3-fluoropropyl-nor-beta-cit

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090172348A1 (en) * 2007-12-26 2009-07-02 Robert Cavin Methods, apparatus, and instructions for processing vector data
US20100115014A1 (en) * 2008-10-31 2010-05-06 Asaf Hargil Instruction and logic for performing range detection
US20130024654A1 (en) * 2011-07-20 2013-01-24 Gove Darryl J Vector operations for compressing selected vector elements
US20130159666A1 (en) * 2011-12-14 2013-06-20 International Business Machines Corporation Reducing issue-to-issue latency by reversing processing order in half-pumped simd execution units

Also Published As

Publication number Publication date
CN105453071A (en) 2016-03-30
BR112015032782A2 (en) 2017-07-25
US9513907B2 (en) 2016-12-06
US20150046671A1 (en) 2015-02-12
KR20160018664A (en) 2016-02-17
JP2016527650A (en) 2016-09-08
EP3030980A4 (en) 2017-03-22
WO2015021151A1 (en) 2015-02-12
EP3030980A1 (en) 2016-06-15
TW201519089A (en) 2015-05-16
TWI537823B (en) 2016-06-11

Similar Documents

Publication Publication Date Title
JP4480997B2 (en) Simd integer multiply high with round and shift
US9665371B2 (en) Providing vector horizontal compare functionality within a vector register
JP5575477B2 (en) Instructions and logic circuits for processing the string
US20130332707A1 (en) Speed up big-number multiplication using single instruction multiple data (simd) architectures
US9886277B2 (en) Methods and apparatus for fusing instructions to provide OR-test and AND-test functionality on multiple test sources
US20170242699A1 (en) Accelerated interlane vector reduction instructions
US10037205B2 (en) Instruction and logic to provide vector blend and permute functionality
CN105320495A (en) Weight-shifting mechanism for convolutional neural network
CN103827813B (en) And logic instructions provide vector gather and scatter operations of the operation function
US9946544B2 (en) Methods, apparatus, instructions and logic to provide permute controls with leading zero count functionality
CN104919416B (en) For providing a vector address conflict detection method, apparatus, and instruction logic
CN104598204B (en) And shifting means for performing an exclusive OR operation in a single instruction for
US9354877B2 (en) Systems, apparatuses, and methods for performing mask bit compression
US9563425B2 (en) Instruction and logic to provide pushing buffer copy and store functionality
US9842046B2 (en) Processing memory access instructions that have duplicate memory indices
KR101628886B1 (en) Instructions and logic to provide advanced paging capabilities for secure enclave page caches
CN103793201B (en) Logic provides instructions and vector compress and rotate functionality
CN103827814B (en) And the logic operation instruction vector load / store operation for providing functionality across using
US9411592B2 (en) Vector address conflict resolution with vector population count functionality
US8924741B2 (en) Instruction and logic to provide SIMD secure hashing round slice functionality
US9513907B2 (en) Methods, apparatus, instructions and logic to provide vector population count functionality
US9928063B2 (en) Instruction and logic to provide vector horizontal majority voting functionality
CN104321741B (en) Double floating point rounding combinations of multiplication and addition
US9696993B2 (en) Instructions and logic to vectorize conditional loops
US20130339649A1 (en) Single instruction multiple data (simd) reconfigurable vector register file and permutation unit

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
GRNT Written decision to grant