BR112018001208B1 - Operações simd de largura misturada tendo operações de elemento par e elemento ímpar usando par de registros para elementos de dados largos - Google Patents

Operações simd de largura misturada tendo operações de elemento par e elemento ímpar usando par de registros para elementos de dados largos Download PDF

Info

Publication number
BR112018001208B1
BR112018001208B1 BR112018001208-4A BR112018001208A BR112018001208B1 BR 112018001208 B1 BR112018001208 B1 BR 112018001208B1 BR 112018001208 A BR112018001208 A BR 112018001208A BR 112018001208 B1 BR112018001208 B1 BR 112018001208B1
Authority
BR
Brazil
Prior art keywords
data elements
simd
source
bit
instruction
Prior art date
Application number
BR112018001208-4A
Other languages
English (en)
Other versions
BR112018001208A2 (pt
Inventor
Eric Wayne Mahurin
Ajay Anant Ingle
Original Assignee
Qualcomm Incorporated
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qualcomm Incorporated filed Critical Qualcomm Incorporated
Publication of BR112018001208A2 publication Critical patent/BR112018001208A2/pt
Publication of BR112018001208B1 publication Critical patent/BR112018001208B1/pt

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)

Abstract

operações simd de largura misturada tendo operações de elemento par e elemento ímpar usando par de registros para elementos de dados largos. sistemas e métodos se referem à instrução de dados múltiplos de instrução única (simd) de largura misturada que tem pelo menos um operando de vetor de fonte compreendendo elementos de dados de uma largura de primeiro bit e um operando de vetor de destino compreendendo elementos de dados de uma largura de segundo bit, em que a largura de segundo bit é metade de ou duas vezes a largura de primeiro bit. de modo correspondente, um dos operandos de vetor de fonte ou destino é expresso como um par de registros, um primeiro registro e um segundo registro. o outro operando de vetor é expresso como um registro único. elementos de dados do primeiro registro correspondem a elementos de dados de número par do outro operando de vetor expresso como um registro único, e elementos de dados do segundo registro correspondem a elementos de dados do outro operando de vetor expresso como um registro único.

Description

Campo da revelação
[001] Aspectos da presente revelação se referem a operações envolvendo dois ou mais vetores onde elementos de dados de pelo menos um vetor são de uma largura de bit diferente do que elementos de dados de pelo menos um outro vetor. Tais operações são mencionadas como operações de largura misturada. Mais especificamente, alguns aspectos se referem a operações de dados múltiplos de instrução única de largura misturada (SIMD) envolvendo pelo menos um primeiro operando de vetor e um segundo operando de vetor onde pelo menos um do primeiro ou segundo operandos de vetor tem elementos de dados que podem ser armazenados em pares de registro par ou ímpar.
Antecedentes
[002] Instruções de dados múltiplos de instrução única (SIMD) podem ser usadas em sistemas de processamento para explorar paralelismo de dados. Paralelismo de dados existe quando uma tarefa igual ou comum necessita ser executada em dois ou mais elementos de dados de um vetor de dados, por exemplo. Ao invés do uso de múltiplas instruções, a tarefa comum pode ser executada em dois ou mais elementos de dados em paralelo usando uma instrução SIMD única que define a mesma instrução a ser executada em múltiplos elementos de dados em múltiplas faixas SIMD correspondentes.
[003] Instruções SIMD podem incluir um ou mais operandos de vetor como operandos de vetor de fonte e destino. Cada operando de vetor incluiria dois ou mais elementos de dados. Para instruções SIMD, todos os elementos de dados que pertencem ao mesmo operando de vetor podem ser em geral da mesma largura de bits. Entretanto, algumas instruções SIMD podem especificar operandos de largura misturada onde elementos de dados de um primeiro operando de vetor podem ser de uma largura de primeiro bit e elementos de dados de um segundo operando de vetor podem ser de uma largura de segundo bit, onde as larguras de primeiro e segundo bit diferem entre si. A execução de instruções SIMD com operandos de largura misturada pode envolver vários desafios.
[004] As figuras 1A-C ilustram exemplos de desafios envolvidos em implementações convencionais para executar instruções SIMD com operandos de largura misturada. Com referência à figura 1A, uma primeira implementação convencional para executar instrução SIMD 100 é ilustrada. É assumido que a instrução SIMD 100 pode ser executada por um processador convencional (não mostrado) que suporta uma arquitetura de conjunto de instruções de 64 bits (ISA). Isso significa que as instruções como instrução SIMD 100 podem especificar operandos com larguras de bit de até 64 bits. Os operandos de 64 bis podem ser especificados em termos de registros de 64 bits ou um par de registros de 32 bits.
[005] O objetivo da instrução SIMD 100 é executar a mesma instrução em cada elemento de dados de operando de fonte 102. O operando de fonte 102 é um vetor de 64 bits compreendendo oito elementos de dados de 8 bits rotulados 0-7. O operando de fonte 102 pode ser armazenado em um registro de 64 bits único ou um par de registros de 32 bits. A mesma instrução ou operação comum a ser executada em cada dos oito elementos de dados 0-7 pode ser, por exemplo, multiplicação, função quadrada, função de deslocamento esquerdo, função de incremento, adição (por exemplo, com um valor constante ou campos imediatos na instrução ou com valores fornecidos por outro operando de vetor), etc., cujo resultado pode consumir mais de 8 bits, e até 16 bits de armazenagem para cada dos oito elementos de dados resultantes. Isso significa que o resultado de instrução SIMD 100 pode consumir duas vezes o espaço de armazenagem que o operando de fonte 102 pode consumir, isto é, dois registros de 64 bits ou dois pares de registros de 32 bits.
[006] Uma vez que o processador convencional configurado para implementar instrução SIMD 100 não inclui instruções que especificam operandos de larguras de bit maiores que 64 bits, a instrução SIMD 100 pode ser dividida em instruções SIMD de dois componentes 100X e 100Y. a instrução SIMD 100X especifica a operação comum a ser executada em elementos de dados rotulados com números pares (ou “elementos de dados de número par”) 0, 2, 4 e 6 de operando de fonte 102. A instrução SIMD 100X especifica operando de destino 104x que tem 64 bits de largura e inclui elementos de dados de 16 bits rotulados A, C, E e G, cada um dos quais é composto de 8 bits altos (H) e 8 bits baixos (L). Os resultados da operação comum em elementos de dados de 8 bits de número par 0, 2, 4 e 6 do operando de fonte 102 são gravados de modo correspondente em elementos de dados de 16 bits A, C, E e G de operando de destino 104x. A instrução SIMD 100Y é similar à instrução SIMD 100X com a diferença de que a instrução SIMD 100Y especifica a operação comum em elementos de dados rotulados com números ímpares (ou “elementos de dados de número ímpar”) 1, 3, 5 e 7 de operando de fonte 102 com os resultados a serem gravados para elementos de dados de 16 bits B, D, F, H de operando de destino 104y que também é um operando de 64 bits similar ao operando de destino 104x da instrução SIMD 100X. Desse modo, cada das instruções SIMD 100X e 100Y pode especificar um operando de destino de 64 bits, e juntas, as instruções SIMD 100X e 100Y podem realizar a execução da operação comum em cada dos elementos de dados 0-7 do operando de fonte 102. Entretanto, devido às duas instruções separadas necessárias para implementar instrução SIMD 100 aumenta o espaço de código.
[007] A figura 1B ilustra uma segunda implementação convencional de instrução SIMD 100 usando um conjunto diferente de instruções SIMD de componente 120X e 120Y. instruções SIMD 120X e 120Y especificam, cada, a operação comum em cada dos elementos de dados de 8 bits 0-7 do operando de fonte 102. A instrução SIMD 120X especifica operando de destino 124x no qual os 8 bits baixos (L) dos resultados devem ser gravados, para elementos de dados de resultado de 8 bits correspondentes A-H do operando de destino 124x (enquanto os 8 bits altos (H) dos resultados são descartados). Similarmente, a instrução 120Y especifica operando de destino 124y no qual os 8 bits altos (H) dos resultados devem ser gravados, para elementos de dados de 8 bits correspondentes A-H do operando de destino 124y (enquanto os 8 bits baixos (L) dos resultados são descartados). Essa segunda implementação convencional de instrução SIMD 100 também sofre de espaço de código aumentado para as instruções SIMD de dois componentes 120X e 120Y. Além disso, como pode ser reconhecido, a segunda implementação convencional também incorre em desperdício de energia ao calcular e descartar os 8 bits altos (H) (por exemplo, na execução da instrução 120X) ou os 8 bits baixos (L) (por exemplo, na execução da instrução 120Y) para cada dos elementos de dados 0-7 do operando de fonte 102.
[008] A figura 1C ilustra uma terceira implementação convencional de instrução SIMD 100 usando ainda outro conjunto de instruções SIMD de componente 140X e 140Y, que são similares em alguns modos a instruções SIMD 100X e 100Y da figura 1A. a diferença se situa em quais dos elementos de dados do operando de fonte 102 são operados por cada instrução SIMD. Em mais detalhe, ao invés de elementos de dados de 8 bits de número par, a instrução SIMD 140X especifica a operação comum a ser executada nos quatro elementos de dados mais baixos 0-3 do operando de fonte 102. Os resultados são gravados para elementos de dados de 16 bits A, B, C, D do operando de destino 144x. entretanto, a execução de instrução SIMD 140X envolve o espalhamento dos resultados da operação nos quatro elementos de dados de 8 bits inferiores (cobrindo 32 bits) através de todos os 64 bits do operando de destino 140X. a instrução SIMD 144y é similar e especifica o espalhamento dos resultados de operação sobre os quatro elementos de dados de 8 bits superiores 4-7 do operando de fonte 102 através de elementos de dados de 16 bits E, F, G, H do operando de destino de 64 bits 144y. Além do tamanho de código aumentado como na primeira e segunda implementações convencionais, esses movimentos de dados de espalhamento como visto na terceira implementação convencional podem necessitar de hardware adicional como uma barra de cruzamento.
[009] Por conseguinte, há necessidade de implementações aperfeiçoadas de instruções SIMD de largura misturada que evitam as desvantagens acima mencionadas das implementações convencionais.
SUMÁRIO
[0010] Aspectos exemplificadores incluem sistemas e métodos relacionados a uma instrução de dados múltiplos de instrução única de largura misturada (SIMD) que tem pelo menos um operando de vetor de fonte compreendendo elementos de dados de uma largura de primeiro bit e um operando de vetor de destino compreendendo elementos de dados de uma largura de segundo bit, em que a largura de segundo bit é metade de ou duas vezes a largura do primeiro bit. Correspondentemente, um dos operandos de vetor de fonte ou destino é expresso como um par de registros, um primeiro registro e um segundo registro. O outro operando de vetor é expresso como um registro único. Elementos de dados do primeiro registro correspondem a elementos de dados de número par do outro operando de vetor expresso como um registro único, e elementos de dados do segundo registro correspondem a elementos de dados do outro operando de vetor expresso como um registro único.
[0011] Por exemplo, um aspecto exemplificador se refere a um método de executar operação de dados múltiplos de instrução única de largura misturada (SIMD), o método compreendendo: receber, por um processador, uma instrução SIMD compreendendo pelo menos um primeiro operando de vetor de fonte compreendendo um primeiro conjunto de elementos de dados de fonte de uma largura de primeiro bit, e pelo menos um operando de vetor de destino compreendendo elementos de dados de destino de uma largura de segundo bit, em que a largura de segundo bit é duas vezes a largura do primeiro bit. O operando de vetor de destino compreende um par de registros incluindo um primeiro registro compreendendo um primeiro subconjunto dos elementos de dados de destino e um segundo registro compreendendo um segundo subconjunto dos elementos de dados de destino. Com base em uma ordem sequencial do primeiro conjunto de elementos de dados de fonte, o método inclui executar a instrução SIMD no processador, compreendendo gerar o primeiro subconjunto de elementos de dados de destino no primeiro registro a partir dos elementos de dados de fonte de número par do primeiro conjunto e gerar o segundo subconjunto de elementos de dados de destino no segundo registro a partir dos elementos de dados de fonte de número ímpar do primeiro conjunto.
[0012] Outro aspecto exemplificador se refere a um método de executar uma operação de dados múltiplos de instrução única de largura misturada (SIMD), o método compreendendo receber, por um processador, uma instrução SIMD compreendendo pelo menos um operando de vetor de fonte compreendendo elementos de dados de fonte de uma largura de primeiro bit, e pelo menos um operando de vetor de destino compreendendo elementos de dados de destino de uma largura de segundo bit, em que a largura do segundo bit é metade da largura de primeiro bit. O operando de vetor de fonte compreende um par de registros incluindo um primeiro registro compreendendo um primeiro subconjunto dos elementos de dados de fonte e um segundo registro compreendendo um segundo subconjunto dos elementos de dados de fonte. Com base em uma ordem sequencial dos elementos de dados de destino, o método inclui executar a instrução SIMD no processador, compreendendo gerar elementos de dados de destino de número par a partir do primeiro subconjunto correspondente de elementos de dados de fonte no primeiro registro, e gerar elementos de dados de destino de número ímpar a partir do segundo subconjunto correspondente de elementos de dados de fonte no segundo registro.
[0013] Outro aspecto exemplificador se refere a uma mídia de armazenagem legível em computador não transitória compreendendo instruções executáveis por um processador, que quando executadas pelo processador fazem com que o processador execute operação de dados múltiplos de instrução única de largura misturada (SIMD). A mídia de armazenagem legível em computador não transitória compreende uma instrução SIMD, que compreende pelo menos um primeiro operando de vetor de fonte compreendendo um primeiro conjunto de elementos de dados de fonte de uma largura de primeiro bit, e pelo menos um operando de vetor de destino compreendendo elementos de dados de destino de uma largura de segundo bit, em que a largura de segundo bit é duas vezes a largura de primeiro bit. O operando de vetor de destino compreende um par de registros incluindo um primeiro registro compreendendo um primeiro subconjunto dos elementos de dados de destino e um segundo registro compreendendo um segundo subconjunto dos elementos de dados de destino. Com base em uma ordem sequencial do primeiro conjunto de elementos de dados de fonte, a mídia de armazenagem legível em computador não transitória inclui código para gerar o primeiro subconjunto de elementos de dados de destino no primeiro registro a partir dos elementos de dados de fonte de número par do primeiro conjunto e código para gerar o segundo subconjunto de elementos de dados de destino no segundo registro a partir dos elementos de dados de fonte de número ímpar do primeiro conjunto.
[0014] Ainda outro aspecto exemplificador se refere a uma mídia de armazenagem legível em computador não transitória compreendendo instruções executáveis por um processador, que quando executadas pelo processador fazem com que o processador execute operação de dados múltiplos de instrução única de largura misturada (SIMD), a mídia de armazenagem legível em computador não transitória compreendendo uma instrução SIMD. A instrução SIMD compreende pelo menos um operando de vetor de fonte compreendendo elementos de dados de fonte de uma largura de primeiro bit, e pelo menos um operando de vetor de destino compreendendo elementos de dados de destino de uma largura de segundo bit, em que a largura do segundo bit é metade da largura do primeiro bit. O operando de vetor de fonte compreende um par de registros incluindo um primeiro registro compreendendo um primeiro subconjunto dos elementos de dados de fonte e um segundo registro compreendendo um segundo subconjunto dos elementos de dados de fonte. Com base em uma ordem sequencial dos elementos de dados de destino, a mídia de armazenagem legível em computador não transitória inclui código para gerar elementos de dados de destino de número par a partir do primeiro subconjunto correspondente de elementos de dados de fonte no primeiro registro e código para gerar elementos de dados de destino de número ímpar a partir do segundo subconjunto correspondente de elementos de dados de fonte no segundo registro.
BREVE DESCRIÇÃO DOS DESENHOS
[0015] Os desenhos em anexo são apresentados para auxiliar na descrição de aspectos da invenção e são fornecidos unicamente para ilustração dos aspectos e não limitação dos mesmos.
[0016] As figuras 1A-C ilustram implementações convencionais de instruções SIMD de largura misturada.
[0017] As figuras 2A-C ilustram implementações exemplificadoras de instruções SIMD de largura misturada de acordo com aspectos da presente revelação.
[0018] As figuras 3A-B ilustram métodos de executar operações de dados múltiplos de instrução única de largura misturada (SIMD).
[0019] A figura 4 ilustra um dispositivo sem fio exemplificador 400 no qual um aspecto da revelação pode ser vantajosamente empregado.
DESCRIÇÃO DETALHADA
[0020] Aspectos da invenção são revelados na seguinte descrição e desenhos relacionados dirigidos a aspectos específicos da invenção. Aspectos alternativos podem ser idealizados sem se afastar do escopo da invenção. Adicionalmente, elementos bem conhecidos da invenção não serão descritos em detalhe ou serão omitidos de modo a não obscurecer os detalhes relevantes da invenção.
[0021] A palavra “exemplificadora” é usada aqui para significar “servir como exemplo, instância ou ilustração.” Qualquer aspecto descrito aqui como “exemplificador” não deve ser necessariamente interpretado como preferido ou vantajoso em relação a outros aspectos. De modo semelhante, o termo “aspectos da invenção” não requer que todos os aspectos da invenção incluam a característica, vantagem ou modo de operação discutido.
[0022] A terminologia usada aqui é para fins de descrever aspectos específicos somente e não pretende ser limitadora de aspectos da invenção. Como usado aqui, as formas singulares “um”, “uma” e “o, a” pretendem incluir as formas no plural também, a menos que o contexto claramente indique de outro modo. Será adicionalmente entendido que os termos “compreende”, “compreendendo”, “inclui” e/ou “incluindo”, quando usados aqui, especificam a presença de características, inteiros, etapas, operações, elementos e/ou componentes mencionadas, porém não excluem a presença ou adição de uma ou mais outras características, inteiros, etapas, operações, elementos, componentes e/ou grupos dos mesmos.
[0023] Além disso, muitos aspectos são descritos em termos de sequencias de ações a serem executadas, por exemplo, por elementos de um dispositivo de computação. Será reconhecido que várias ações descritas aqui podem ser executadas por circuitos específicos (por exemplo, circuitos integrados de aplicação específica (ASICs)), por instruções de programa sendo executadas por um ou mais processadores, ou por uma combinação de ambos. Adicionalmente, essas sequências de ações descritas aqui podem ser consideradas como sendo incorporadas totalmente em qualquer forma de mídia de armazenagem legível em computador tendo armazenado na mesma um conjunto correspondente de instruções de computador que após execução fariam com que um processador associado executasse a funcionalidade descrita aqui. Desse modo, os vários aspectos da invenção podem ser incorporados em diversas formas diferentes, todas as quais foram consideradas como compreendidas no escopo da matéria reivindicada. Além disso, para cada dos aspectos descritos aqui, a forma correspondente de quaisquer desses aspectos pode ser descrita aqui como, por exemplo, “lógica configurada para” executar a ação descrita.
[0024] Aspectos exemplificadores dessa revelação se referem à implementação de operações SIMD de largura misturada que evitam movimento de dados através de faixas SIMD e reduzem o tamanho de código. Por exemplo, ao invés de decompor uma operação SIMD em instruções SIMD de dois ou mais componentes (por exemplo, execução convencional de instrução SIMD 100 nas figuras 1A-1C), aspectos exemplificadores incluem uma instrução SIMD única que especifica um ou mais operandos de vetor como um par de operandos, que podem ser expressos em termos de um par de registros. Por especificar pelo menos um operando de vetor (um operando de fonte ou destino) como um par de registros ou um par de registros, a instrução SIMD exemplificadora única pode ser usada no lugar de instruções SIMD convencionais de dois ou mais componentes. Portanto, o tamanho de código é reduzido para operações SIMD de largura misturada.
[0025] Observa-se que nessa revelação, é feita referência à expressão de operandos em termos de registros, para seguir os formatos de instrução costumeiros onde uma instrução especifica uma operação a ser realizada em um ou mais registros. Desse modo, uma instrução SIMD pode ser de um formato onde uma operação comum é especificada para um ou mais operandos que são expressos em termos de registros. Desse modo, uma instrução SIMD de largura misturada exemplificadora de acordo com essa revelação inclui pelo menos um operando de vetor expresso em termos de um registro único e pelo menos um outro operando de vetor expresso em termos de um par de registros. Essas referências a registros podem se referir a registros lógicos ou arquiteturais usados por um programa compreendendo instruções SIMD exemplificadoras. Podem se referir também a registros físicos de um arquivo de registro físico, sem limitação. Em geral, as referências a registros pretendem passar elementos de armazenagem de certo tamanho.
[0026] Por conseguinte, um método exemplificador de executar uma operação de múltiplos dados de instrução única de largura misturada (SIMD) em um processador acoplado a um arquivo de registro pode envolver especificar uma instrução SIMD com pelo menos um primeiro operando de vetor compreendendo elementos de dados de uma largura de primeiro bit e pelo menos elementos de dados de um segundo operando de vetor de uma largura de segundo bit. O primeiro operando de vetor pode ser um operando de vetor de fonte e o segundo operando de vetor pode ser um operando de vetor de destino. Correspondentemente, os elementos de dados do operando de vetor de fonte podem ser mencionados como elementos de dados de fonte e elementos de dados do operando de vetor de destino podem ser mencionados como elementos de dados de destino.
[0027] Uma correspondência de um para um existe entre os elementos de dados de fonte e os elementos de dados de destino em uma instrução SIMD de largura misturada exemplificadora. Em geral, quando a operação especificada na instrução SIMD de largura misturada é executada em um elemento de dados de fonte, um elemento de dados de destino correspondente específico é gerado. Por exemplo, considere uma operação SIMD de largura misturada para deslocamento para a esquerda do operando de vetor de fonte para formar um operando de vetor de destino. Nesse exemplo, cada elemento de dados de fonte gera um elemento de dados de destino específico quando um deslocamento para a esquerda do elemento de dados de fonte é executado.
[0028] Em um aspecto exemplificador dessa revelação, a largura de segundo bit dos elementos de dados de destino pode ser menor que e especificamente, metade do tamanho da largura de primeiro bit dos elementos de dados de fonte. Nesse aspecto, o operando de vetor de destino pode ser expresso como um par de registros e o operando de vetor de fonte pode ser expresso como um registro único.
[0029] Em outro aspecto exemplificador dessa revelação, a largura de segundo bit dos elementos de dados de destino pode ser maior que, e especificamente, duas vezes o tamanho da largura de primeiro bit dos elementos de dados de fonte. Nesse aspecto, o operando de vetor de fonte pode ser expresso como um registro único e o operando de vetor de destino pode ser expresso como um par de registros.
[0030] Para ilustrar o mapeamento específico entre elementos de dados de vetor e fonte dos operandos de vetor de destino e fonte, respectivamente, uma ordem sequencial é atribuída aos elementos de dados do operando de vetor cujos elementos de dados têm uma largura de bit menor. Por exemplo, uma ordem sequencial é atribuída a elementos de dados do operando de vetor que é expresso como um registro único. Com base na ordem sequencial, elementos de dados de número par (por exemplo, correspondendo a números 0, 2, 4, 6, etc.) e elementos de dados de número ímpar (por exemplo, correspondendo a números 1, 3, 5, 7, etc.) são identificados para o operando de vetor expresso como um registro único. O par de registros do outro operando de vetor é mencionado como um primeiro registro e um segundo registro, que compreendem um primeiro subconjunto e um segundo subconjunto de elementos de dados respectivamente. Por conseguinte, os elementos de dados de número par do operando de vetor expresso como um registro único são então atribuídos uma correspondência com elementos de dados do primeiro subconjunto ou primeiro registro, e os elementos de dados de número impar são atribuídos uma correspondência com elementos de dados do segundo subconjunto ou segundo registro. Desse modo, movimentos de dados grandes através de faixas SIMD são evitados para elementos de dados de fonte durante execução da operação SIMD especificada para gerar elementos de dados de destino correspondentes.
[0031] Aspectos exemplificadores também podem se referir a operações SIMD que especificam mais de dois operandos de vetor, como, incluir um terceiro operando da largura de um terceiro bit e além. Um exemplo é revelado onde dois operandos de vetor de fonte, cada expresso como um registro único são especificados para uma instrução SIMD de largura misturada para gerar um operando de vetor de destino expresso como um par de registros. Inúmeros outros tais formatos de instrução são possíveis no escopo dessa revelação. Para fins de simplicidade, aspectos exemplificadores para implementar operações SIMD de largura misturada serão discutidos com relação a algumas instruções SIMD de exemplo e larguras de bit de operandos, enquanto se tem em mente que esses são simplesmente para fins de explicação. Como tal, as características discutidas aqui podem ser estendidas para qualquer número de operandos e larguras de bit de elementos de dados para operações de vetor de largura misturada.
[0032] Nas figuras 2A-C, aspectos exemplificadores se referindo a instruções SIMD 200, 220 e 240 são mostrados. Cada dessas instruções SIMD 200, 220 e 240 podem ser executadas por um processador (por exemplo, processador 402 mostrado nas figuras 4-5) configurado para executar instruções SIMD. Mais especificamente, cada dessas instruções SIMD 200, 220 e 240 pode especificar um ou mais operandos de vetor de fonte e um ou mais operandos de vetor de destino, onde os operandos de vetor de fonte e destino podem ser expressos em termos de registros (por exemplo, registros de 64 bits). Os operandos de vetor de destino e fonte de instruções SIMD 200, 220 e 240 incluem elementos de dados de fonte e destino correspondentes, cada um dos quais está compreendido em uma ou mais faixas SIMD. O número de faixas SIMD na execução de uma instrução SIMD corresponde ao número de operações paralelas que são executadas na execução da instrução SIMD. Um processador ou lógica de execução configurada para implementar as instruções SIMD de exemplo 200, 220, e 240, pode incluir, por conseguinte, hardware (por exemplo, uma unidade lógica e aritmética (ALU) compreendendo diversos deslocadores esquerda/direita, somadores, multiplicadores, etc.), necessário para implementar as operações paralelas especificadas pelas instruções SIMD 200, 220 e 240.
[0033] Por conseguinte, com referência à figura 2A, um primeiro aspecto exemplificador é ilustrado para execução de instrução SIMD 200. Em um exemplo, o processador é assumido como sendo capaz de suportar uma arquitetura de conjunto de instruções de 64 bits (ISA). A instrução SIMD 200 pode especificar a mesma operação ou instrução comum a ser executada em elementos de dados de fonte de operandos de vetor de fonte expressos em termos de um registro de 64 bits único.
[0034] A mesma operação ou instrução comum especificada na instrução SIMD 200 pode ser, por exemplo, uma função quadrada, uma função de deslocamento para a esquerda, uma função de incremento, uma adição por um valor constante, etc., em oito elementos de dados de fonte de 8 bits (que podem ser implementados com elementos de lógica como oito deslocadores para esquerda de 8 bits, oito somadores de 8 bits, etc.) que produz oito elementos de dados de destino resultantes correspondentes que podem consumir até 16 bits de armazenagem. Como mostrado, a instrução SIMD 200 pode especificar operando de vetor de fonte 202 compreendendo oito elementos de dados de 8 bits. Uma ordem numérica pode ser atribuída a esses oito elementos de dados de 8 bits do operando de vetor de fonte 202, que é mostrado pelos numerais de referência 0-7. O resultado de instrução SIMD 200 pode ser expresso usando oito elementos de dados de destino de 16 bits ou 128 bits no total, que não podem ser armazenados em um único registro de 64 bits. Ao invés de decompor instrução SIMD 200 em duas ou mais instruções para tratar desse problema (por exemplo, como em implementações convencionais de instrução SIMD 100 mostrada nas figuras 1A-C), um operando de vetor de destino é especificado como um par de operandos de vetor de componente. O par de operandos de vetor de destino de componente pode ser expresso como um par correspondente de registros 204x, 204y. observe que o par de registros não necessita ser armazenado em locais físicos consecutivos em um arquivo de registro ou mesmo ter números de registro lógico consecutivos. Como tal, a instrução SIMD 200 especifica operando de vetor de destino expresso em termos de um par de operandos de vetor de componente ou registros 204x, 204y (por exemplo, um par de registros de 64 bits) e operando de vetor de fonte 202, que é expresso como um único registro 202.
[0035] Além disso, o operando de vetor de destino de primeiro componente expresso como primeiro registro 204x do par inclui um primeiro subconjunto dos resultados da instrução SIMD 200 executada em elementos de dados de fonte de número par 0, 2, 4 e 6 do operando de vetor de fonte 202. Esses resultados são ilustrados por elementos de dados de destino A, C, E e G, que têm uma correspondência de um para um para elementos de dados de fonte de número par 0, 2, 4 e 6, que significa que movimentos grandes através de faixas SIMD são evitados para os resultados nessa disposição exemplificadora de elementos de dados de destino A, C, E e G. similarmente, o operando de vetor de destino de segundo componente expresso como um segundo registro 204y do par inclui um segundo subconjunto dos resultados da instrução SIMD 200 executada em elementos de dados de fonte de número ímpar 1, 3, 5 e 7 de operando de vetor de fonte 202. Esses resultados são ilustrados por elementos de dados de destino B, D, F e H, que têm uma correspondência de um para um para elementos de dados de fonte de número ímpar 1, 3, 5 e 7, que significa que novamente, movimentos grandes através de faixas SIMD são evitados para os resultados nessa disposição exemplificadora de elementos de dados de destino B, D, F e H. Por conseguinte, nesse caso, elementos de dados de fonte de número par 0, 2, 4 e 6 do operando de vetor de fonte 202 correspondem a ou geram elementos de dados de destino A, C, E e G do primeiro registro 204x, e elementos de dados de fonte de número ímpar 1, 3, 5 e 7 do operando de vetor de fonte 202 correspondem a ou geram elementos de dados de destino B, D, F e H do segundo registro 204y.
[0036] Considerando oito faixas SIMD de 8 bits, por exemplo, mencionadas como faixas SIMD 0-7, com cada faixa compreendendo um elemento de dados de fonte respectivo 0-7, é visto que a quantidade de movimento envolvido para gerar um elemento de dados de destino correspondente A-H está contida na mesma faixa SIMD ou uma faixa SIMD adjacente. Em outras palavras, um primeiro conjunto de elementos de dados de fonte (por exemplo, elemento de dados de fonte 0-7) está em faixas SIMD respectivas, e de cada um dos elementos de dados de fonte, um elemento de dados de destino (por exemplo, um elemento de dados de destino correspondente A-H) é gerado na afixa SIMD respectiva ou uma faixa SIMD adjacente à faixa SIMD respectiva. Por exemplo, elementos de dados de fonte de número par 0, 2, 4 e 6 em faixas SIMD 0, 2, 4 e 6, respectivamente, gera elementos de dados de destino A, C, E e G, que são respectivamente contidos nas faixas SIMD 0-1, 2-3, 4-5 e 6-7. Similarmente, elementos de dados de fonte de número ímpar 1, 3, 5, e 7 em faixas SIMD 0, 2, 4 e 6, respectivamente, geram elementos de dados de destino B, D, F e H, que são respectivamente também contidos nas faixas SIMD 0-1, 2-3, 4-5 e 6-7.
[0037] Por conseguinte, no primeiro aspecto exemplificador da figura 2A, a instrução SIMD de largura misturada 200 envolve uso eficiente de espaço de instrução ou espaço de código (uma vez que somente uma instrução SIMD é usada, ao invés de instruções SIMD de dois ou mais componentes), cuja implementação ou execução evita movimentos de dados grandes através de faixas SIMD.
[0038] Com referência agora à figura 2B, outro aspecto exemplificador é ilustrado com relação à instrução SIMD de largura misturada 220. A instrução SIMD 220 envolve dois operandos de vetor de fonte: primeiro operando de vetor de fonte expresso como um registro único 222 e segundo operando de vetor de fonte expresso como um registro único 223, que têm um primeiro conjunto e segundo conjunto, respectivamente, de quatro elementos de dados de fonte de 16 bits. A instrução SIMD 220 pode especificar uma mesma operação ou operação comum com uma multiplicação (por exemplo, com arredondamento) nos dois operandos de vetor de fonte, em que quatro elementos de dados de fonte de 16 bits do primeiro conjunto (no registro 222) são multiplicados por quatro elementos de dados de fonte de 16 bits correspondentes do segundo conjunto (no registro 223) para produzir quatro resultados de 32 bits (onde a implementação da instrução SIMD 220 pode envolver elementos de lógica como quatro multiplicadores 16x16). Uma vez que 128 bits são necessários para ser capaz de armazenar esses quatro resultados de 32 bits, um operando de vetor de destino é especificado em termos de um par de operandos de vetor de componente: o operando de vetor de destino de primeiro componente e o operando de vetor de destino de segundo componente (esses podem ser expressos como um primeiro registro de 64 bis 224x e um segundo registro de 64 bits 224y de modo correspondente). Observa-se que a instrução SIMD 220 pode ser também aplicável à adição de elementos de dados de fonte do primeiro conjunto com elementos de dados de fonte correspondentes do segundo conjunto, onde os resultados correspondentes podem consumir mais de 16 bits (mesmo se não todos os 32 bits) para cada elemento de dados de destino.
[0039] Na figura 2B, elementos de dados de fonte do primeiro e do segundo conjuntos são atribuídos uma ordem sequencial, representativamente mostrada como 0, 1, 2, 3 e 0’, 1’, 2’, 3’, respectivamente. O operando de vetor de destino de primeiro componente no primeiro registro 224x contém um primeiro subconjunto dos resultados da instrução SIMD 220 (mostrada como elementos de dados de destino de 32 bits A e C) correspondendo a elementos de dados de fonte de número par dos operandos de fonte 222 e 223; e similarmente, operando de vetor de destino de segundo componente no segundo registro 224y contém um segundo subconjunto dos resultados da instrução SIMD 220 (mostrado como elementos de dados de 32 bits B e D) correspondendo a elementos de dados de fonte de número ímpar dos operandos de fonte 222 e 223. Nesse caso é visto que elementos de dados de fonte de número par (0, 0’) e (2, 2’) do primeiro operando de vetor de fonte 222 e segundo operando de vetor de fonte 223, respectivamente, geram elementos de dados A e C do primeiro operando de vetor de destino 224x; e elementos de dados de número ímpar (1, 1’) e (3, 3’) do primeiro operando de vetor de fonte 222 e segundo operando de vetor de fonte 223, respectivamente, geram elementos de dados B e D do segundo operando de vetor de destino 224y.
[0040] Novamente, é visto no segundo aspecto exemplificador da figura 2B, a instrução SIMD de largura misturada 220 realiza eficiência de espaço de código por utilizar uma instrução SIMD de largura misturada única ao invés de instruções SIMD de dois ou mais componentes. Além disso, também é visto que movimentos através de faixas SIMD são minimizados nesse aspecto também. Em geral, o primeiro conjunto de elementos de dados de fonte e segundo conjunto de elementos de dados de fonte estão em faixas SIMD respectivas, e geram de cada dos elementos de dados de fonte do primeiro conjunto e um correspondente dos elementos de dados de fonte do segundo conjunto, um elemento de dados de destino na faixa SIMD respectiva ou uma faixa SIMD adjacente à faixa SIMD respectiva. Por exemplo, considerando quatro faixas SIMD de 16 bits 0-3 que compreendem o primeiro conjunto de elementos de dados de fonte 0-3 (ou segundo conjunto de elementos de dados de fonte 0’-3’), respectivamente, movimento de dados para um elemento de dados de fonte do primeiro e segundo para gerar um elemento de dados de destino correspondente A-D está contido na mesma faixa SIMD e no máximo uma faixa SIMD adjacente (por exemplo, elementos de dados de fonte de número par (0, 0’) e (2, 2’) nas faixas SIMD 0 e 2 respectivamente, geram elementos de dados de destino A e C nas faixas SIMD 0-1 e 2-4; e similarmente, elementos de dados de fonte de número ímpar (1, 1’0 e (3, 3’) em faixas SIMD 1 e 3, respectivamente, geram elementos de dados de destino B e D em faixas SIMD 0-1 e 2-4).
[0041] A figura 2C representa um terceiro aspecto exemplificador relacionado à instrução SIMD de largura misturada 240. Ao contrário de instruções SIMD de largura misturada 200 e 220, um operando de vetor de fonte de instrução SIMD de largura misturada 240 é especificado como um par de operandos de vetor de componente ou expresso como um par de registros. Observa-se que a instrução SIMD de largura misturada 240 é diferente de instrução SIMD de largura misturada 220 porque a instrução SIMD de largura misturada 220 incluiu dois operandos de vetor de fonte separados, onde elementos de dados de um operando de vetor de fonte foram especificados para interagir (por exemplo, ser multiplicado com) elementos de dados de outro operando de vetor de fonte. Por outro lado, na instrução SIMD de largura misturada 240, um par de operandos de vetor de fonte de componente é especificado porque não fazer isso teria consumido duas instruções separadas. Por exemplo, a instrução SIMD 240 pode envolver uma operação comum de uma função de deslocamento para a direita de 16 bits para 8 bits a ser executada em oito elementos de dados de fonte de 16 bits para obter um resultado de oito elementos de dados de destino de 8 bits (onde implementação de instrução SIMD 240 pode envolver elementos de lógica como oito deslocadores para a direita de 8 bits). Entretanto, uma vez que oito elementos de dados de fonte de 16 bits consomem 128 bits, implementações convencionais teriam dividido essa operação a ser executada usando instruções SIMD de dois componentes. Por outro lado, no aspecto exemplificador da figura 2C, um par de operandos de vetor de fonte compreendendo primeiro operando de vetor de fonte componente no primeiro registro 242x e um segundo operando de vetor de fonte componente no segundo registro 242y são especificados pela instrução SIMD 240. Por conseguinte, o espaço de código é eficientemente usado.
[0042] O operando de vetor de destino é expresso como um único registro de 64 bits 244 nesse caso e compreende oito elementos de dados de destino de 8 bits que são resultados de instrução SIMD 240. Por conseguinte, uma ordem sequencial é atribuída aos elementos de dados de destino do operando de vetor de destino no registro 244, que são mostrados com numerais de referência 0-7. Os elementos de dados de fonte do par de operandos de vetor de fonte componente (expresso como um par de registros 242x, 242y) são dispostos de modo que o primeiro registro 242x compreendendo um primeiro subconjunto de elementos de dados de fonte A, C, E e G, gerará os resultados correspondendo a elementos de dados de destino de número par 0, 2, 4, e 6 do operando de vetor de destino no registro 244, respectivamente; e segundo registro 242y compreendendo um segundo subconjunto de elementos de dados de fonte B, D, F e H, gerará os resultados correspondendo a elementos de dados de destino de número impar 1, 3, 5 e 7, respectivamente do operando de vetor de destino no registro 244.
[0043] Desse modo, o espaço de código pode ser eficazmente utilizado e movimento de dados através de faixas SIMD pode ser minimizado mesmo em casos onde os operandos de vetor de fonte são mais largos que os operandos de vetor de destino, por especificar um par de operandos de vetor de fonte componente ou expressar o operando de vetor de fonte como um par de registros. O movimento através de faixas SIMD na execução de instrução SIMD 240 também é minimizado. Em geral, é visto que os elementos de dados de destino estão em faixas SIMD respectivas, e cada dos elementos de dados de destino é gerado de um elemento de dados de fonte na faixa SIMD respectiva ou uma faixa SIMD adjacente à faixa SIMD respectiva. Por exemplo, considerando oito faixas SIMD de 8 bits correspondendo aos oito elementos de dados de destino 0-7, é visto que os elementos de dados de fonte A, C, E e G moverão das faixas SIMD 0-1, 2-3, 4-5 e 6-7 respectivamente para gerar os resultados correspondendo a elementos de dados de destino de número par em faixas SIMD 0, 2, 4 e 6; e elementos de dados de fonte B, D, F e H, moverão das faixas SIMD 0-1, 2-3, 4-5 e 6-7 respectivamente para gerar os resultados correspondendo a elementos de dados de destino de número par em faixas SIMD 1, 3, 5 e 7. Em qualquer caso, o movimento está contido nas duas faixas SIMD.
[0044] Por conseguinte, será reconhecido que aspectos incluem vários métodos para executar os processos, funções e/ou algoritmos revelados aqui. Por exemplo, como ilustrado na figura 3A, um aspecto pode incluir um método 300 de executar uma operação de dados múltiplos de instrução única (SIMD) de largura misturada, de acordo com as figuras 2A-B, por exemplo.
[0045] No bloco 302, o método 300 inclui receber, por um processador (por exemplo, processador 402 da figura 4, que será explicado abaixo) e com referência, por exemplo, à figura 2A, uma instrução SIMD (por exemplo, instrução SIMD 200) compreendendo pelo menos um primeiro operando de vetor de fonte (por exemplo, no registro 202) compreendendo um primeiro conjunto de elementos de dados de fonte (por exemplo, elementos de dados de fonte 0-7) de uma largura de primeiro bit (por exemplo, 8 bits) e pelo menos um operando de vetor de destino (por exemplo, no par de registros 204x, 204y) compreendendo elementos de dados de destino (por exemplo, elementos de dados de destino A-H) de uma largura de segundo bit (por exemplo, 16 bits) em que a largura de segundo bit é duas vezes a largura do primeiro bit, onde o operando de vetor de destino compreende um par de registros incluindo um primeiro registro (por exemplo,204x) compreendendo um primeiro subconjunto dos elementos de dados de destino (por exemplo elementos de dados de destino A, C, E, G) e um segundo registro compreendendo um segundo subconjunto dos elementos de dados de destino (por exemplo, elementos de dados de destino B, D, F, H).
[0046] No bloco 303 (que é mostrado como incluindo blocos 304 e 306), o método 300 inclui ainda executar a instrução SIMD de largura misturada no processador. Especificamente, considerando uma ordem sequencial (por exemplo, 0-7) atribuída aos elementos de dados de fonte no bloco 304, o bloco 306 inclui executar a instrução SIMD no processador. Em detalhe adicional, o bloco 306 é feito dos blocos componentes 306a e 306b que podem ser executados em paralelo.
[0047] O bloco 306a inclui gerar o primeiro subconjunto de elementos de dados de destino (por exemplo, elementos de dados de destino A, C, E, G) no primeiro registro (por exemplo, primeiro registro 204x) a partir de elementos de dados de fonte de número par (por exemplo, elementos de dados de fonte 0, 2, 4, 6) do primeiro conjunto.
[0048] O bloco 306b inclui gerar o segundo subconjunto de elementos de dados de destino (por exemplo, elementos de dados de destino B, D, F, H) no segundo registro (por exemplo, segundo registro 204y) a partir dos elementos de dados de fonte de número ímpar (por exemplo, elementos de dados de fonte 1, 3, 5, 7) do primeiro conjunto.
[0049] Em geral, a instrução SIMD do método 300 pode ser uma de uma função quadrada, função de deslocamento para a esquerda, incremento ou adição por um valor constante, dos elementos de dados de fonte do primeiro conjunto. A eficiência de espaço de código é obtida por utilizar uma instrução SIMD única no método 300. O movimento através de faixas SIMD também é minimizado no método 300, onde o primeiro conjunto de elementos de dados de fonte está nas faixas SIMD respectivas, e o método 300 inclui gerar de cada dos elementos de dados de fonte (por exemplo, elemento de dados de fonte 0 na faixa SIMD 0), um elemento de dados de destino (por exemplo, elemento de dados de destino A) na faixa SIMD respectiva (por exemplo, faixa SIMD 0) ou uma faixa SIMD adjacente (por exemplo, faixa SIMD 1) para a faixa SIMD respectiva.
[0050] Será também observado que embora não mostrado separadamente, o método 300 pode incluir também um método para implementar a instrução SIMD 220 da figura 2B, que compreende ainda, por exemplo, receber no bloco 302, um segundo operando de vetor de fonte, compreendendo um segundo conjunto de elementos de dados de fonte da largura de primeiro bit (por exemplo, primeiro e segundo operandos de vetor de fonte nos registros 222 e 223), e a ordem sequencial do primeiro conjunto de elementos de dados de fonte corresponde a uma ordem sequencial do segundo conjunto de elementos de dados de fonte. Nesse caso, com base na ordem sequencial atribuída no bloco 304, o bloco 306 inclui executar a instrução SIMD no processador, compreendendo o bloco 306a para gerar o primeiro subconjunto de elementos de dados de destino no primeiro registro a partir de elementos de dados de fonte de número par do primeiro conjunto e elementos de dados de fonte de número ímpar do segundo conjunto; e o bloco 306b para gerar o segundo subconjunto de elementos de dados de destino no segundo registro a partir dos elementos de dados de fonte de número ímpar do primeiro conjunto e elementos de dados de fonte de número par do segundo conjunto. Nesse caso, a instrução SIMD pode ser uma multiplicação ou adição dos elementos de dados de fonte do primeiro conjunto com elementos de dados de fonte correspondentes do segundo conjunto, em que o primeiro conjunto dos elementos de dados de fonte e segundo conjunto de elementos de dados de fonte estão em faixas SIMD respetivas, e gerar de cada dos elementos de dados de fonte do primeiro conjunto e um correspondente dos elementos de dados de fonte do segundo conjunto, um elemento de dados de destino na faixa SIMD respectiva ou uma faixa SIMD adjacente à faixa SIMD respectiva.
[0051] Com referência à figura 3B, outro método para executar os processos, funções e/ou algoritmos revelados aqui é ilustrado. Por exemplo, como ilustrado na figura 3B, o método 300 inclui outro método de executar uma operação de dados múltiplos de instrução única de largura misturada (SIMD), de acordo com a figura 2C, por exemplo.
[0052] No bloco 352, o método 350 inclui receber, por um processador (por exemplo, processador 402), uma instrução SIMD (por exemplo, instrução SIMD 240) compreendendo: pelo menos um operando de vetor de fonte (por exemplo, nos registros 242x, 242y) compreendendo elementos de dados de fonte (por exemplo, elementos de dados de fonte A-H) de uma largura de primeiro bit (por exemplo, 16 bits); e pelo menos um operando de vetor de destino (por exemplo, no registro 244) compreendendo elementos de dados de destino (por exemplo, elementos de dados de destino 0-7) de uma largura de segundo bit (por exemplo, 8 bits), em que a largura do segundo bit é metade da largura do primeiro bit, em que o operando de vetor de fonte compreende um par de registros incluindo um primeiro registro (por exemplo, primeiro registro 242x) compreendendo um primeiro subconjunto dos elementos de dados de fonte (por exemplo, elementos de dados de destino 0, 2, 4, 6) e um segundo registro (por exemplo, segundo registro 242y) compreendendo um segundo subconjunto dos elementos de dados de fonte (por exemplo, elementos de dados de destino 1, 3, 5, 7).
[0053] No bloco 354, uma ordem sequencial é atribuída aos elementos de dados de destino, e no bloco 356, a instrução SIMD é executada. O bloco 356 inclui sub- blocos 356a e 356b, que podem ser também executados em paralelo.
[0054] O bloco 356a inclui gerar elementos de dados de destino de número par (por exemplo, elementos de dados de destino 0, 2, 4, 6) a partir do primeiro subconjunto correspondente de elementos de dados de fonte no primeiro registro (por exemplo, elementos de dados de fonte A, C, E, G).
[0055] O bloco 346b inclui gerar elementos de dados de destino de número ímpar (por exemplo, elementos de dados de destino 1, 3, 5, 7) a partir do segundo subconjunto correspondente de elementos de dados de fonte no segundo registro (por exemplo, elementos de dados de fonte B, D, F, H).
[0056] Nos aspectos exemplares, a instrução SIMD do método 350 pode ser uma função de deslocamento para a direita dos elementos de dados de fonte, em que os elementos de dados de destino estão em faixas SIMD respetivas (por exemplo, faixas SIMD 0-7) e gerar cada um dos elementos de dados de destino (por exemplo, elemento de dados de destino 0) a partir de um elemento de dados de fonte (por exemplo, elemento de dados de fonte A) na faixa SIMD respectiva (por exemplo, faixa SIMD 0) ou uma faixa SIMD adjacente (Por exemplo, faixa SIMD 1) para a faixa SIMD respectiva.
[0057] Com referência à figura 4, um diagrama de blocos de um aspecto ilustrativo específico do dispositivo sem fio 400 de acordo com aspectos exemplificadores. O dispositivo sem fio 400 inclui o processador 402 que pode ser configurado (por exemplo, incluir lógica de execução) para suportar e implementar a execução de instruções SIMD de largura misturada exemplificadoras, por exemplo, de acordo com métodos 300 e 350 da figura 3A e figura 3B, respectivamente. Como mostrado na figura 4, o processador 402 pode estar em comunicação com a memória 432. O processador 402 pode incluir um arquivo de registro (não mostrado) que contém registros físicos correspondendo aos registros (por exemplo, registros lógicos) em termos de quais operandos das instruções SIMD exemplificadoras são expressas. O arquivo de registro pode ser fornecido com dados a partir da memória 432 em alguns aspectos. Embora não mostrado, um ou mais caches ou outras estruturas de memória também podem ser incluídos no dispositivo sem fio 400.
[0058] A figura 4 mostra também o controlador de display 426 que é acoplado ao processador 402 e ao display 428. O codificador/decodificador (CODEC) 434 (por exemplo, um CODEC de áudio e/ou voz) pode ser acoplado ao processador 402. Outros componentes, como controlador sem fio 440 (que pode incluir um modem) são também ilustrados. O alto-falante 436 e microfone 438 podem ser acoplados ao CODEC 434. A figura 4 também indica que o controlador sem fio 440 pode ser acoplado à antena sem fio 442. Em um aspecto específico, o processador 402, controlador de display 426, memória 432, CODEC 434, e controlador sem fio 440 são incluídos em um dispositivo de sistema em chip ou sistema em pacote 422.
[0059] Em um aspecto específico, o dispositivo de entrada 430 e fonte de energia 444 são acoplados ao dispositivo de sistema em chip 422. Além disso, em um aspecto específico, como ilustrado na figura 4, o display 428, dispositivo de entrada 430, alto-falante 436, microfone 438, antena sem fio 442, e fonte de energia 444 são externos ao dispositivo de sistema em chip 422. Entretanto, cada do display 428, dispositivo de entrada 430, alto-falante 436, microfone 438, antena sem fio 442 e fonte de energia 444 pode ser acoplado a um componente do dispositivo do sistema em chip 422, como uma interface ou um controlador.
[0060] Deve ser observado que embora a figura 4 mostre um dispositivo de comunicação sem fio, o processador 402 e memória 432 podem ser também integrados em um conversor de sinais de frequência, um tocador de música, um tocador de vídeo, uma unidade de entretenimento, um dispositivo de navegação, um assistente pessoal digital (PDA), uma unidade de dados de local fixo, um dispositivo de comunicação, ou um computador. Além disso, pelo menos um ou mais aspectos exemplificadores do dispositivo sem fio 400 pode ser integrado pelo menos em uma matriz de semicondutor.
[0061] Aqueles versados na técnica reconhecerão que informações e sinais podem ser representados usando qualquer de uma variedade de tecnologias e técnicas diferentes. Por exemplo, dados, instruções, comandos, informações, sinais bits, símbolos e chips que podem ser referenciados do início ao fim da descrição acima podem ser representados por voltagens, correntes, ondas eletromagnéticas, partículas ou campos magnéticos, partículas ou campos óticos, ou qualquer combinação dos mesmos.
[0062] Além disso, aqueles versados na técnica reconhecerão que os vários blocos lógicos ilustrativos, módulos, circuitos e etapas de algoritmo descritas com relação aos aspectos revelados aqui podem ser implementados como hardware eletrônica, software de computador ou combinações de ambos. Para claramente ilustrar essa troca de hardware e software, vários componentes ilustrativos, blocos, módulos, circuitos e etapas foram descritos acima em geral em termos de sua funcionalidade. O fato de se tal funcionalidade é implementado como hardware ou software depende das limitações de design e aplicação específicas impostas sobre o sistema geral. Técnicos especializados podem implementar a funcionalidade descrita em modos variáveis para cada aplicação específica, porém tais decisões de implementação não devem ser interpretadas como causando afastando do escopo da presente invenção.
[0063] Os métodos, sequencias, e/ou algoritmos descritos com relação aos aspectos revelados aqui podem ser incorporados diretamente em hardware, em um módulo de software executado por um processador ou em uma combinação dos dois. Um módulo de software pode residir em memória RAM, memória Flash, memória ROM, memória EPROM, memória EEPROM, registros, disco rígido, um disco removível, um CD- ROM, ou qualquer outra forma de mídia de armazenada conhecida na técnica. Uma mídia de armazenagem exemplificadora é acoplada ao processador de modo que o processador possa ler informações de, e gravar informações para a mídia de armazenagem. Na alternativa, a mídia de armazenagem pode ser integrada ao processador.
[0064] Por conseguinte, um aspecto da invenção pode incluir mídia legível em computador (por exemplo, uma mídia de armazenagem legível em computador não transitória) incorporando um método para implementar instruções SIMD de largura misturada (por exemplo, de acordo com os métodos 300 e 350 descritos acima, para implementar instruções SIMD das figuras 2A-C). Por conseguinte, a invenção não é limitada a exemplos ilustrados e qualquer meio para executar a funcionalidade descrita aqui são incluídos nos aspetos da invenção.
[0065] Embora a revelação acima mostre aspectos ilustrativos da invenção, deve ser observado que várias alterações e modificações podem ser feitas aqui sem se afastar do escopo da invenção como definido pelas reivindicações apensas. As funções, etapas e/ou ações das reivindicações do método de acordo com os aspectos da invenção descritos aqui não necessitam ser executados em qualquer ordem específica. Além disso, embora elementos da invenção possam ser descritos ou reivindicados no singular, o plural é considerado a menos que limitação ao singular seja explicitamente mencionada.

Claims (4)

1. Método para realizar uma operação de dados múltiplos de instrução única de largura misturada (SIMD), o método caracterizado por compreender: receber (300), por um processador, uma instrução SIMD que especifica: um único operando de vetor de fonte compreendendo um primeiro conjunto de elementos de dados de fonte de uma largura de primeiro bit; e um operando de vetor de destino compreendendo elementos de dados de destino de uma largura de segundo bit, em que a largura do segundo bit é duas vezes a largura do primeiro bit, em que o único operando de vetor de fonte é expresso como um registro único e o operando de vetor de destino é expresso como um par de registros incluindo um primeiro registro que compreende um primeiro subconjunto dos elementos de dados de destino e um segundo registro compreendendo um segundo subconjunto dos elementos de dados de destino; e com base em uma ordem sequencial do primeiro conjunto de elementos de dados de fonte, executar a instrução SIMD no processador, compreendendo: gerar (306a) o primeiro subconjunto de elementos de dados de destino no primeiro registro a partir de elementos de dados de fonte de número par do primeiro conjunto; e gerar (306b) o segundo subconjunto de elementos de dados de destino no segundo registro a partir de elementos de dados de fonte de número ímpar do primeiro conjunto.
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a instrução SIMD é uma dentre uma função quadrada, função de deslocamento esquerdo, incremento ou adição por um valor constante dos elementos de dados de fonte do primeiro conjunto.
3. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o primeiro conjunto de elementos de dados de fonte está em faixas (lanes) SIMD respectivas, e gerando, a partir de cada um dos elementos de dados de fonte, um elemento de dados de destino na faixa SIMD respectiva ou em uma faixa SIMD adjacente à faixa SIMD respectiva.
4. Memória legível por computador caracterizada pelo fato de que possui instruções nela armazenadas que, quando executadas, fazem com que o computador realize o método conforme definido em qualquer uma das reivindicações 1 a 3.
BR112018001208-4A 2015-07-21 2016-06-21 Operações simd de largura misturada tendo operações de elemento par e elemento ímpar usando par de registros para elementos de dados largos BR112018001208B1 (pt)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/805,456 US10489155B2 (en) 2015-07-21 2015-07-21 Mixed-width SIMD operations using even/odd register pairs for wide data elements
US14/805,456 2015-07-21
PCT/US2016/038487 WO2017014892A1 (en) 2015-07-21 2016-06-21 Mixed-width simd operations having even-element and odd-element operations using register pair for wide data elements

Publications (2)

Publication Number Publication Date
BR112018001208A2 BR112018001208A2 (pt) 2018-09-11
BR112018001208B1 true BR112018001208B1 (pt) 2023-12-26

Family

ID=56204087

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112018001208-4A BR112018001208B1 (pt) 2015-07-21 2016-06-21 Operações simd de largura misturada tendo operações de elemento par e elemento ímpar usando par de registros para elementos de dados largos

Country Status (9)

Country Link
US (1) US10489155B2 (pt)
EP (1) EP3326060B1 (pt)
JP (1) JP6920277B2 (pt)
KR (1) KR102121866B1 (pt)
CN (1) CN107851010B (pt)
BR (1) BR112018001208B1 (pt)
ES (1) ES2795832T3 (pt)
HU (1) HUE049260T2 (pt)
WO (1) WO2017014892A1 (pt)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2540943B (en) * 2015-07-31 2018-04-11 Advanced Risc Mach Ltd Vector arithmetic instruction
US10698685B2 (en) * 2017-05-03 2020-06-30 Intel Corporation Instructions for dual destination type conversion, mixed precision accumulation, and mixed precision atomic memory operations
CN109298886A (zh) * 2017-07-25 2019-02-01 合肥君正科技有限公司 Simd指令执行方法、装置及处理器
US20190272175A1 (en) * 2018-03-01 2019-09-05 Qualcomm Incorporated Single pack & unpack network and method for variable bit width data formats for computational machines
US10528346B2 (en) * 2018-03-29 2020-01-07 Intel Corporation Instructions for fused multiply-add operations with variable precision input operands
CN111324354B (zh) * 2019-12-27 2023-04-18 湖南科技大学 一种融合寄存器对需求的寄存器选择方法

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5673321A (en) 1995-06-29 1997-09-30 Hewlett-Packard Company Efficient selection and mixing of multiple sub-word items packed into two or more computer words
US6202141B1 (en) 1998-06-16 2001-03-13 International Business Machines Corporation Method and apparatus for performing vector operation using separate multiplication on odd and even data elements of source vectors
US7127593B2 (en) * 2001-06-11 2006-10-24 Broadcom Corporation Conditional execution with multiple destination stores
US6922716B2 (en) 2001-07-13 2005-07-26 Motorola, Inc. Method and apparatus for vector processing
US7107305B2 (en) 2001-10-05 2006-09-12 Intel Corporation Multiply-accumulate (MAC) unit for single-instruction/multiple-data (SIMD) instructions
KR100553252B1 (ko) * 2002-02-01 2006-02-20 아바고테크놀로지스코리아 주식회사 휴대용 단말기의 전력 증폭 장치
US7376812B1 (en) 2002-05-13 2008-05-20 Tensilica, Inc. Vector co-processor for configurable and extensible processor architecture
US7668897B2 (en) 2003-06-16 2010-02-23 Arm Limited Result partitioning within SIMD data processing systems
US7275148B2 (en) * 2003-09-08 2007-09-25 Freescale Semiconductor, Inc. Data processing system using multiple addressing modes for SIMD operations and method thereof
GB2411975B (en) * 2003-12-09 2006-10-04 Advanced Risc Mach Ltd Data processing apparatus and method for performing arithmetic operations in SIMD data processing
GB2409068A (en) * 2003-12-09 2005-06-15 Advanced Risc Mach Ltd Data element size control within parallel lanes of processing
US7353244B2 (en) * 2004-04-16 2008-04-01 Marvell International Ltd. Dual-multiply-accumulator operation optimized for even and odd multisample calculations
US7400271B2 (en) * 2005-06-21 2008-07-15 International Characters, Inc. Method and apparatus for processing character streams
CN1964490A (zh) * 2005-11-09 2007-05-16 松下电器产业株式会社 一种滤波器及滤波方法
US9235414B2 (en) 2011-12-19 2016-01-12 Intel Corporation SIMD integer multiply-accumulate instruction for multi-precision arithmetic
WO2013095564A1 (en) * 2011-12-22 2013-06-27 Intel Corporation Processors, methods, systems, and instructions to generate sequences of integers in numerical order that differ by a constant stride
US10628156B2 (en) 2013-07-09 2020-04-21 Texas Instruments Incorporated Vector SIMD VLIW data path architecture

Also Published As

Publication number Publication date
EP3326060A1 (en) 2018-05-30
CN107851010B (zh) 2021-11-12
CN107851010A (zh) 2018-03-27
WO2017014892A1 (en) 2017-01-26
HUE049260T2 (hu) 2020-09-28
ES2795832T3 (es) 2020-11-24
KR102121866B1 (ko) 2020-06-11
JP2018525731A (ja) 2018-09-06
BR112018001208A2 (pt) 2018-09-11
US10489155B2 (en) 2019-11-26
KR20180030986A (ko) 2018-03-27
EP3326060B1 (en) 2020-03-25
US20170024209A1 (en) 2017-01-26
JP6920277B2 (ja) 2021-08-18

Similar Documents

Publication Publication Date Title
BR112018001208B1 (pt) Operações simd de largura misturada tendo operações de elemento par e elemento ímpar usando par de registros para elementos de dados largos
US9355061B2 (en) Data processing apparatus and method for performing scan operations
US9575753B2 (en) SIMD compare instruction using permute logic for distributed register files
JP2017076395A (ja) 装置および方法
JP6571752B2 (ja) ベクトルレジスタファイルにおいてデータインデックス方式アキュムレータを使用するベクトルプロセッサによるスカラ演算の並列化、関連する回路、方法およびコンピュータ可読媒体
JP5607832B2 (ja) 汎用論理演算の方法および装置
CN107533460B (zh) 紧缩有限冲激响应(fir)滤波处理器、方法、系统和指令
RU2583744C2 (ru) Устройство и способ связывания операций в памяти
US10691456B2 (en) Vector store instruction having instruction-specified byte count to be stored supporting big and little endian processing
EP3343359A1 (en) Apparatus and method for processing sparse data
US10187208B2 (en) RSA algorithm acceleration processors, methods, systems, and instructions
CN107851016B (zh) 向量算术指令
CN107924306B (zh) 使用simd指令的表查找
TWI587137B (zh) 經改良之單一指令多重資料(simd)的k最近鄰居法之實施技術
CN109416635B (zh) 针对使用多个架构寄存器的指令的架构寄存器替换
US9753776B2 (en) Simultaneous multithreading resource sharing
JP2013246816A (ja) ミニコア基盤の再構成可能プロセッサ及びその再構成可能プロセッサを利用した柔軟な多重データ処理方法
ES2951658T3 (es) Sistemas, aparatos y métodos para generar un índice por orden de clasificación y reordenar elementos basándose en el orden de clasificación
US20210042111A1 (en) Efficient encoding of high fanout communications
US20190087521A1 (en) Stochastic dataflow analysis for processing systems
JP2008217538A (ja) プロセッサおよびそれを用いたマイクロコンピュータシステム

Legal Events

Date Code Title Description
B06U Preliminary requirement: requests with searches performed by other patent offices: procedure suspended [chapter 6.21 patent gazette]
B07A Application suspended after technical examination (opinion) [chapter 7.1 patent gazette]
B09A Decision: intention to grant [chapter 9.1 patent gazette]
B16A Patent or certificate of addition of invention granted [chapter 16.1 patent gazette]

Free format text: PRAZO DE VALIDADE: 20 (VINTE) ANOS CONTADOS A PARTIR DE 21/06/2016, OBSERVADAS AS CONDICOES LEGAIS