BR102014006118A2 - sistemas, equipamentos e métodos para determinar um bit de mascaramento menos significativo à direita de um registrador writemask - Google Patents

sistemas, equipamentos e métodos para determinar um bit de mascaramento menos significativo à direita de um registrador writemask Download PDF

Info

Publication number
BR102014006118A2
BR102014006118A2 BR102014006118A BR102014006118A BR102014006118A2 BR 102014006118 A2 BR102014006118 A2 BR 102014006118A2 BR 102014006118 A BR102014006118 A BR 102014006118A BR 102014006118 A BR102014006118 A BR 102014006118A BR 102014006118 A2 BR102014006118 A2 BR 102014006118A2
Authority
BR
Brazil
Prior art keywords
writemask
source
bit position
operand
zero
Prior art date
Application number
BR102014006118A
Other languages
English (en)
Inventor
Bret L Toll
Christopher J Hughes
Elmoustapha Ould-Ahmes-Vall
Jesus Corbal
Mark J Charney
Milind B Girkar
Robert C Valentine
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Publication of BR102014006118A2 publication Critical patent/BR102014006118A2/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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • G06F9/30152Determining start or end of instruction; determining instruction length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations

Abstract

sistemas, equipamentos e métodos para determinar um bit de mascaramento menos significativo à direita de um registrador writemask. a execução de uma kzbtz encontra uma posição de bit zero menos significativo à direita em uma primeira máscara de entrada e ajusta uma máscara de saída para ter os valores da primeira máscara de entrada, mas com todas as posições de bit mais próximas da posição de bit mais significativo do que a posição de bit zero menos significativo à direita em uma primeira máscara de entrada ajustada para zero. em algumas modalidades, uma segunda mascara de entrada é usada como uma writeniask de tal modo que as posições de bit da primeira máscara de entrada não são consideradas no cálculo de posição de bit zero menos significativo à direita dependendo de uma posição de bit correspondente na segunda máscara de entrada

Description

"SISTEMAS, EQUIPAMENTOS E MÉTODOS PARA DETERMINAR UM BIT DE MASCARAMENTO MENOS SIGNIFICATIVO À DIREITA DE UM REGISTRADOR WRITEMASK" CAMPO DA INVENÇÃO
[0001] O campo da invenção se refere de modo geral è arquitetura de processador de computador e, mais especificamente, às instruções que quando executadas provocam um resultado específico.
HISTÓRICO
[0002] Um conjunto de instruções, ou arquitetura de conjunto de instruções (ISA), é a parte da arquitetura de computador relacionada à programação, e pode incluir os tipos de dados nativos, instruções, arquitetura de registrador, modos de endereçamento, arquitetura de memória, gerenciamento de interrupção e exceção, e entrada e saída (I/O) externa. Deve ser observado que o termo instrução se refere aqui de modo geral a uma macroinstrução - isto é, instruções providas ao processador para execução - em oposição a microinstruções ou micro-ops - que resultam a partir de um decodificador do processador decodificando as macroinstruções.
BREVE DESCRIÇÃO DOS DESENHOS
[0003] A presente invenção é ilustrada por meio de exemplo e não como limitação nas figuras dos desenhos anexos, nos quais referências semelhantes indicam elementos similares e nas quais: [0004] A Figura 1 ilustra uma correlação entre o número de um elemento de writemask vetorial de bit ativo e o tamanho de vetor e o tamanho de elemento de dados de acordo com uma modalidade da invenção.
[0005] A Figura 2 é um diagrama de blocos de uma modalidade exemplar de um processador (núcleo de processador) para executar uma ou mais instruções.
[0006] As Figuras 3(A)-(B) ilustram operações exemplares de KZBTZ.
[0007] A Figura 4 ilustra uma modalidade da execução de uma instrução KZBTZ em um processador.
[0008] A Figura 5 ilustra uma modalidade de um método para processar uma instrução KZBTZ.
[0009] A Figura 6 é um diagrama de blocos de uma arquitetura de registrador 600 de acordo com uma modalidade da invenção.
[0010] A Figura 7A é um diagrama de blocos ilustrando um pipeline em ordem exemplar e um pipeline de execução/problema fora de ordem, de renomeação de registrador exemplar de acordo com modalidades da invenção.
[0011] A Figura 7B é um diagrama de blocos ilustrando uma modalidade exemplar de um núcleo de arquitetura em ordem e um núcleo de arquitetura de execução/problema fora de ordem, de renomeação de registrador exemplar a ser incluído em um processador de acordo com as modalidades da invenção.
[0012] As Figuras 8(A)-(B) ilustram um diagrama de blocos de uma arquitetura de núcleo em ordem exemplar mais específica, cujo núcleo poderia ser um dos vários blocos lógicos (incluindo outros núcleos do mesmo tipo e/ou de tipos diferentes) em um chip.
[0013] A Figura 9 é um diagrama de blocos de um processador 900 que pode ter mais do que um núcleo, pode ter um controlador de memória integrado, e pode ter gráficos integrados de acordo com as modalidades da invenção.
[0014] As Figuras 10-13 são diagramas de bloco de arquiteturas de computador, exemplares.
[0015] A Figura 14 é um diagrama de blocos contrastando o uso de um conversor de instrução de software para converter instruções binárias em um conjunto de instruções de origem em instruções binárias em um conjunto de instruções alvo de acordo com as modalidades da invenção.
DESCRIÇÃO DETALHADA
[0016] Na descrição seguinte, vários detalhes específicos são apresentados. Contudo, entende-se que as modalidades da invenção podem ser praticadas sem esses detalhes específicos. Em outras instâncias, circuitos, estruturas e técnicas, bem conhecidos não foram mostrados em detalhe para não obscurecer o entendimento dessa descrição.
[0017] Referências no relatório descritivo a "uma modalidade", "uma modalidade exemplar", etc., indicam que a modalidade descrita pode incluir uma característica específica, estrutura ou aspecto, mas cada modalidade pode não necessariamente incluir o aspecto, estrutura ou característica específica. Além disso, tais frases não se referem necessariamente à mesma modalidade. Adicionalmente, quando um aspecto, estrutura ou característica, específico é descrito em conexão com uma modalidade, considera-se que o mesmo esteja dentro do conhecimento daqueles versados na técnica para realizar tal aspecto, estrutura ou característica em conexão com outras modalidades que sejam ou não explicitamente descritas.
Visão Geral [0018] A arquitetura de conjunto de instruções é distinguida da microarquitetura, a qual é o modelo interno do processador implementando o ISA. Os processadores com diferentes microarquiteturas podem compartilhar um conjunto comum de instruções. Por exemplo, os processadores Intel Pentium 4, processadores Intel Core, e Advanced Micro Devices, Inc. de Sunnyvale CA implementam versões quase idênticas do conjunto de instruções X86 (com algumas extensões tendo sido adicionadas às versões mais recentes), mas têm diferentes modelos internos. Por exemplo, a mesma arquitetura de registrador da ISA pode ser implementada de formas diferentes em diferentes microarquiteturas utilizando técnicas bem conhecidas, incluindo registradores físicos dedicados, um ou mais registradores físicos dinamicamente alocados utilizando um mecanismo de renomeação de registrador (por exemplo, o uso de uma tabela de alias de registrador (RAT) , um buffer de reordenação (ROB) e um arquivo de registrador de retirada como descrito na Patente U.S. No. 5.446.912; o uso de múltiplos mapas e um grupo de registradores conforme descrito na Patente U.S. No. 5.207.132), etc. A menos que de outro modo especificado, as frases arquitetura de registrador, arquivo de registrador, e registrador se referem ao que é visível para o software/programador e a maneira na qual as instruções especificam os registradores. Onde especificidade for desejada, o adjetivo lógico, arquitetural, ou visível para software será usado para indicar registradores/arquivos na arquitetura de registrador, enquanto que adjetivos diferentes serão usados para designar registradores em uma determinada microarquitetura (por exemplo, registrador físico, buffer de reordenação, registrador de retirada, grupo de registradores).
[0019] Um conjunto de instruções inclui um ou mais formatos de instrução. Um determinado formato de instrução define vários campos (número de bits, localização de bits) para especificar, dentre outras coisas, a operação a ser realizada e o(s) operando(s) no(s) qual(is) aquela operação deve ser realizada. Uma instrução determinada é expressa utilizando um determinado formato de instrução e especifica a operação e os operandos. Um fluxo de instruções é uma sequência específica de instruções, onde cada instrução na sequência é uma ocorrência de uma instrução em um formato de instrução.
[0020] Aplicações de multimídia e visual/RMA (reconhecimento, pesquisa e síntese) de uso comum auto-vetorizadas, financeiras, científicas (por exemplo, gráficos 2D-3D, processamento de imagem, compactação/descompactação de vídeo, algoritmos de reconhecimento de voz e manipulação de áudio) normalmente requerem que a mesma operação seja realizada em um grande número de itens de dados (referidos como "paralelismo de dados"). Dados múltiplos de instrução única (SIMD) se referem a um tipo de instrução que faz com que um processador realize a mesma operação em múltiplos itens de dados. Tecnologia SIMD é especialmente adequada para processadores que podem dividir logicamente os bits em um registrador em diversos elementos de dados de tamanho fixo, cada um dos quais representa um valor separado. Por exemplo, os bits em um registrador de 64 bits podem ser especificados como um operando de origem a ser separado em quatro elementos de dados de 16 bits separados, cada um dos quais representa um valor de 16 bits separado. Como outro exemplo, os bits em um registrador de 256 bits podem ser especificados como um operando de origem a ser operado como quatro elementos de dados empacotados de 64 bits separados (elementos de dados de tamanho de palavra quádrupla (Q)) , oito elementos de dados empacotados de 32 bits separados (elementos de dados de tamanho de palavra dupla (D) ) , dezesseis elementos de dados empacotados de 16 bits separados (elementos de dados de tamanho de palavra (W) ) , ou trinta e dois elementos de dados de 8 bits separados (elementos de dados de tamanho de byte (B) ) . Esse tipo de dados é referido como o tipo de dados empacotados ou tipo de dados vetorial, e os operandos desse tipo de dados são referidos como operandos de dados empacotados ou operandos vetoriais. Em outras palavras, um item ou vetor de dados empacotados se refere a uma sequência de elementos de dados empacotados; e um operando de dados empacotados ou um operando vetorial é um operando de origem ou de destino de uma instrução SIMD (também conhecida como uma instrução de dados empacotados ou instrução vetorial).
[0021] Como exemplo, um tipo de instrução SIMD especifica uma única operação vetorial a ser realizada em dois operandos vetoriais de origem em uma forma vertical para gerar um operando vetorial de destino (também referido como um operando vetorial de resultado) do mesmo tamanho, com o mesmo número de elementos de dados, e na mesma ordem de elemento de dados. Os elementos de dados nos operandos vetoriais de origem são referidos como elementos de dados de origem, enquanto que os elementos de dados no operando vetorial de destino são referidos como elementos de dados de destino ou de resultado. Esses operandos vetoriais de origem são do mesmo tamanho e contêm elementos de dados da mesma largura, e assim eles contêm o mesmo número de elementos de dados. Os elementos de dados de origem nas mesmas posições de bit nos dois operandos de vetor de origem formam pares de elementos de dados (também referidos como elementos de dados correspondentes; isto é, o elemento de dados na posição de elemento de dados 0 de cada operando de origem corresponde ao elemento de dados na posição de elemento de dados 1 de cada operando de origem correspondente, e assim por diante). A operação especificada por aquela instrução' SIMD é realizada separadamente em cada um desses pares de elementos de dados de origem para gerar um número de equiparação dos elementos de dados de resultado, e assim cada par de elementos de dados de origem tem um elemento de dados de resultado correspondente. Como a operação é vertical e como o operando vetorial de resultado é do mesmo tamanho, apresenta o mesmo número de elementos de dados, e os elementos de dados de resultado são armazenados na mesma ordem de elementos de dados que os operandos do vetor de origem, os elementos de dados de resultado estão nas mesmas posições de bit do operando vetorial de resultado como seu par correspondente de elementos de dados de origem nos operandos vetoriais de origem. Além desse tipo exemplar de instrução SIMD, há uma variedade de outros tipos de instruções SIMD (por exemplo, que tem apenas um ou tem mais do que dois operandos vetoriais de origem; que operam em uma forma horizontal; que geram um operando vetorial de resultado que é de um tamanho diferente, que tem um tamanho diferente de elementos de dados, e/ou que tem uma ordem diferente de elemento de dados). Deve ser entendido que o termo operando vetorial de destino (ou operando de destino) é definido como o resultado direto de realizar a operação especificada por uma instrução, incluindo o armazenamento daquele operando de destino em um local (seja ele um registrador ou em um endereço de memória especificado por aquela instrução) de modo que ele possa ser acessado como um operando de origem por outra instrução (mediante especificação daquela mesma localização por outra instrução.
[0022] A tecnologia SIMD, tal como aquela empregada pelos processadores Intel® Core™ tendo um conjunto de instruções incluindo instruções x86, MMX™, Streaming SIMD Extensions (SSE), SSE2, SSE3, SSE4.1 e SSE4.2, possibilitaram um aperfeiçoamento significativo em desempenho de aplicativo (Core™ e MMX™ são marcas comerciais registradas ou marcas comerciais da Intel Corporation de Santa Clara, Califórnia, EUA) . Um conjunto adicional de extensões SIMD, referido como extensões avançadas vetoriais (AVX) (AVXl e AVX2) e utilizando o esquema de codificação VEX, foi liberado e/ou publicado (por exemplo, vide Intel® 64 and IA-32 Architectures Software Developers Manual, de Outubro de 2 011; e vide Intel® Advanced Vector Extensions Programming Reference, de Junho de 2011).
[0023] Na descrição abaixo, há alguns itens que podem precisar de explanação antes de se descrever as operações dessa instrução específica na arquitetura de conjunto de instruções. Tal item é denominado "registrador de writemask" que é geralmente usado para predicar um operando para controlar de forma condicional a operação computacional por elemento (abaixo, o termo registrador de máscara também pode ser usado e se refere a um registrador de writemask tal como os registradores "k" discutidos abaixo. Conforme usado abaixo, um registrador de máscara armazena uma pluralidade de bits (16, 32, 64, etc.) em que cada bit ativo do registrador de writemask controla a operação/atualização de um elemento de dados empacotados de um registrador vetorial durante processamento SIMD. Tipicamente, há mais do que um registrador de writemask disponível para uso por um núcleo de processador.
[0024] A arquitetura de conjunto de instruções inclui pelo menos algumas instruções SIMD que especificam operações vetoriais e que apresentam campos para selecionar registradores de origem e/ou registradores de destino a partir desses registradores vetoriais (uma instrução SIMD exemplar pode especificar uma operação vetorial a ser realizada nos conteúdos de um ou mais dos registradores vetoriais, e o resultado daquela operação vetorial a ser armazenado em um dos registradores vetoriais). Modalidades diferentes da invenção podem ter registradores vetoriais de tamanhos diferentes e suportar mais/menos elementos de dados de tamanho diferentes.
[0025] O tamanho dos elementos de dados de múltiplos bits especificados por uma instrução SIMD (por exemplo, byte, palavra, palavra dupla, palavra quádrupla) determina os locais de bit das "posições de elementos de dados" dentro de um registrador vetorial, e o tamanho do operando vetorial determina o número de elementos de dados. Um elemento de dados de pacote se refere aos dados armazenados em uma posição especifica. Em outras palavras, dependendo do tamanho dos elementos de dados no operando de destino e do tamanho do operando de destino (o número total de bits no operando de destino) (ou dito de outra forma, dependendo do tamanho do operando de destino e do número de elementos de dados dentro do operando de destino) , os locais de bit das posições de elementos de dados de múltiplos bits dentro do operando vetorial resultante mudam (por exemplo, se o destino do operando vetorial resultante for um registrador vetorial (nessa discussão os registradores vetoriais e os registradores de elementos de dados empacotados são usados de forma intercambiável), então as localizações de bits das posições de elementos de dados de múltiplos bits dentro do registrador vetorial de destino mudam) . Por exemplo, as localizações de bits dos elementos de dados de múltiplos bits são diferentes entre uma operação vetorial que opera em elementos de dados de 3 2 bits (posição de elemento de dados 0 ocupa localizações de bit 31:0, posição de elemento de dados 1 ocupa as localizações de bit 63:32, e assim por diante) e uma operação vetorial que opera em elementos de dados de 64 bits (posição de elemento de dados 0 ocupa locais de bits 63:0, a posição de elemento de dados 1 ocupa as localizações de bit .127:64, e assim por diante) .
[0026] Adicionalmente, há uma correlação entre o número de um elemento de writemask vetorial de bit ativo e o tamanho de vetor e o tamanho de elemento de dados de acordo com uma modalidade da invenção conforme mostrado na Figura 1. Os tamanhos de vetor de 128 bits, 256 bits, e 512 bits são mostrados, embora outras larguras também sejam possíveis. Os tamanhos de elementos de dados de bytes de 8 bits (B) , palavras de 16 bits (W) , palavras duplas de 32 bits (D) ou ponto de flutuação de precisão única, e palavras quádruplas de 64 bits (Q) ou ponto de flutuação de precisão dupla são considerados, embora outras larguras também sejam possíveis. Conforme mostrado, quando o tamanho de vetor é de 12 8 bits, 16 bits podem ser usados para mascaragem quando o tamanho do elemento de dados do vetor for de 8 bits, 8 bits podem ser usados para mascaragem quando o tamanho de elemento de dados do vetor for de 16 bits, 4 bits podem ser usados para mascaragem quando o tamanho do elemento de dados do vetor for de 32 bits, e 2 bits podem ser usados para mascaragem quando o tamanho de elemento de dados do vetor for de 64 bits. Quando o tamanho de vetor for de 256 bits, 32 bits podem ser usados para mascaragem quando a largura de elemento de dados empacotados for de 8 bits, 16 bits podem ser usados para mascaragem quando o tamanho de elemento de dados do vetor for de 16 bits, 8 bits podem ser usados para mascaragem quando o tamanho de elemento de dados do vetor for de 32 bits, e 4 bits podem ser usados para mascaragem quando o tamanho do elemento de dados do vetor for de 64 bits. Quando o tamanho do vetor for de 512 bits, 64 bits podem ser usados para mascaragem quando o tamanho do elemento de dados do vetor for de 8 bits, 32 bits podem ser usados para mascaragem quando o tamanho do elemento de dados do vetor for de 16 bits, 16 bits podem ser usados para mascaragem quando o tamanho do elemento de dados do vetor for de 32 bits, e 8 bits podem ser usados para mascaragem quando o tamanho do elemento de dados do vetor for de 64 bits.
[0027] Dependendo da combinação do tamanho de vetor e do tamanho do elemento de dados, todos os 64 bits, ou apenas um subconjunto dos 64 bits, pode ser usado como uma writemask. Geralmente, quando um único bit de controle de mascaragem por elemento for utilizado, o número de bits no registrador de writemask vetorial usado para mascaragem (bits ativos) é igual ao tamanho de vetor em bits divididos pelo tamanho de elementos de dados do vetor em bits.
[0028] Conforme observado acima, os registradores de writemask contêm bits de máscara que correspondem aos elementos em um registrador vetorial (ou localização de memória) e rastreiam os elementos a partir do que as operações devem ser realizadas. Por essa razão, é desejável ter operações comuns que replicam comportamento de forma semelhante nesses bits de máscara em relação aos registradores vetorial e em geral permitem que se ajustem esses bits de máscara dentro dos registradores de writemask.
[0029] A Figura 2 é um diagrama de blocos de uma modalidade exemplar de um processador (núcleo de processador) 2 00 para executar uma ou mais instruções KZBTZ 204. Em algumas modalidades, o processador pode ser um processador de uso comum (por exemplo, do tipo usado em desktops, laptops, servidores e computadores semelhantes). Alternativamente, o processador pode ser um processador de uso especial. Exemplos de processadores de uso especial adequados incluem, mas não são limitados aos processadores de rede, processadores de comunicação, processadores criptográficos, processadores gráficos, coprocessadores, processadores integrados, processadores de sinais digitais (DSPs), e controladores, para citar apenas uns poucos exemplos. O processador pode ser qualquer um de vários processadores de computação de conjunto de instruções complexas (CISC), vários processadores de computação de conjunto de instruções reduzidas (RISC), diversos processadores de palavra de instrução muito longa (VLIW), seus diversos híbridos ou outros tipos de processadores inteiramente.
[0030] 0 processador 200 inclui registradores arquitetonicamente visíveis (por exemplo, um arquivo de registrador arquitetural) 205. Os registradores arquiteturais também podem ser referidos aqui simplesmente como registradores. A menos que de outro modo especificado ou evidente, os termos: registrador arquitetural, arquivo de registrador, e registrador são usados aqui se referindo aos registradores que são visíveis para software e/ou programador; e/ou registradores que são especificados por macroinstruções ou instruções de linguagem assembly para identificar operandos. Esses registradores são contrastados com outros registradores não arquiteturais ou não visíveis de forma arquitetural em uma determinada microarquitetura (por exemplo, registradores temporários usados por instruções, buffers de reordenação, registradores de retirada, etc.). Os registradores de modo geral representam locais de armazenamento de processador em pastilha. Os registradores arquiteturais ilustrados incluem registradores de dados empacotados 206. Cada um dos registradores de dados empacotados pode ser operável para armazenar dados empacotados ou vetoriais. Os registradores arquiteturais ilustrados também incluem registradores de máscara de operação de dados empacotados 207. Cada um dos registradores de máscara de operação de dados empacotados pode ser operável para armazenar uma máscara de operação de dados empacotados. Esses registradores podem ser referidos como registradores de writemask nesta descrição. Operandos de dados empacotados podem ser armazenados nos registradores de dados empacotados 2 07.
[0031] O processador também inclui lógica de execução 208. A lógica de execução é operável para executar ou processar a uma ou mais instruções KZBTZ 204. Em algumas modalidades, a lógica de execução pode incluir lógica específica (por exemplo, conjunto de circuitos específicos ou hardware combinado potencialmente com firmware) para executar essas instruções.
[0032] Um padrão algorítmico importante para eficientemente vetorizar as computações envolvendo leituras e gravações a partir de/para locais de memória, indiretos. Por exemplo, copiar A[B[i]] para A[C[i]]. A vetorização desse tipo de loop envolve operações de agrupar e dispersar em múltiplos vetores de índice (isto é, o B[i] e C[i]). Contudo, essa vetorização supõe que nenhuma dependência de memória seja violada mediante realização de múltiplas leituras e gravações simultaneamente. Se, por exemplo, um grupo de elementos de largura de SIMD a partir de B[i] mantém um valor comum com C[i], então podemos violar a dependência de ler depois de gravar. Mais concretamente, se B[0] = 0, B[l] = 1, C[0] = 1, e C[l] = 2, então a leitura de A[B[1]] deve seguir a gravação para A[C[0]]. Realizando todas as leituras simultaneamente com uma instrução de agrupamento, então todas as gravações com uma instrução de dispersão violam essa dependência, e podem resultar em uma resposta incorreta.
[0033] Para ajudar a resolver esse problema, uma instrução denominada vconflict compara cada elemento de um primeiro vetor com todos os elementos de um segundo vetor, e emite os resultados da comparação como um conjunto de vetores de bit para um registrador vetorial. O conceito é detectar "conflitos", ou equiparar índices através de diferentes agrupamentos/dispersões. Se houver qualquer conflito, então uma computação em um determinado grupo de elementos de largura SIMD realizados iterativamente, realizando o maior número possível de elementos simultaneamente, como ilustrado no pseudocódigo abaixo. for (i=0; i<N; i+=SIMD_WIDTH) { gatherjndices = vload(&B[i]); scatterjndices = vload(&C[i]); comparisons = vconflict(gather_indices, scatterjndices); elements Jeft_mask = all_ones; do { dojhese = Compute„Maskj)f_Non„Conflicting_Elements (comparisons, elementsjeftjnask);
Gather_Compute„Scatter(gatherJndices, scatterjndices, dojhese); elementsjeftjnask Λ= dojhese; } while (elementsjeftjnask != 0); } [0034] A ''Compute_Mask_of_Non_Conf licting_Elements" é uma operação não trivial. Todas as instruções existentes, em conjunto com vconflict, compartilham um problema - elas não podem detectar todas as dependências de dados possíveis dentro de dois conjuntos de índices sem executar múltiplas instâncias de vconflict, e manipulação adicional dos resultados da comparação. Especificamente, no exemplo acima, mostramos como devemos detectar índices duplicados entre os vetores de índice de agrupamento e de dispersão para detectar dependências de ler após gravar (RAW). Contudo, a solução proposta para fazer cumprir essas dependências, retardando o processamento de alguns elementos, pode causar uma violação das dependências de gravar após gravar (WAW) ou dependências de gravar após ler (WAR). Por exemplo, suponha que B[0] = 0, B[l] = 1, B[2] = 2, C [ 0 ] = 1, C[l] = 3 e C[2] = 3. Exatamente como no exemplo acima, a segunda iteração tem uma dependência RAW na primeira iteração de modo que ela deve ser retardada. A terceira iteração não tem dependência RAW e assim pode haver uma escolha para executar a mesma simultaneamente com a primeira iteração. Contudo, se isso for feito, então a gravação para A[C[2]] (=A[3]) acontecerá antes da gravação para A[C[1]] (=A[3]), e violará uma dependência WAW.
[0035] Abaixo estão modalidades de uma instrução de modo geral designada máscara zero antes da instrução de zero à direita (traillng) ("KZBTZ"), do conjunto de instruções e modalidades de sistemas, arquiteturas, formatos de instrução, etc., que podem ser usados para executar tal instrução. A execução de uma KZBTZ encontra uma posição de bit zero menos significativo à direita em uma primeira máscara de entrada e ajusta uma máscara de saída para ter os valores da primeira máscara de entrada, mas com todas as posições de bit mais próximas da posição de bit mais significativo do que a posição de bit zero menos significativo à direita em um primeiro conjunto de máscaras de entrada para zero. Em algumas modalidades, uma segunda máscara de entrada é usada como uma writemask de tal modo que as posições de bit da primeira máscara de entrada não são consideradas no cálculo de posição de bit zero menos significativo à direita dependendo da posição de bit correspondente na segunda máscara de entrada.
[0036] As Figuras 3(A)-(B) ilustram operações exemplares de KZBTZ. Na Figura 3 (A) , há dois registradores de writemask de origem 3 01 e 3 03 e uma writemask de destino 305. O primeiro valor "0" no primeiro registrador de writemask de origem 301 aparece na terceira posição de bit (SRC1[2]).. Em uma posição de bit correspondente do segundo registrador de writemask de origem 303, o valor é "1" significando que essa posição de bit é a primeira posição de bit que foi um zero no primeiro registrador de writemask de origem 301 e habilitada no segundo registrador de writemask de origem 303. O registrador de writemask de destino 305, portanto tem o conteúdo do primeiro registrador de writemask 3 01 até a posição de bit 3 e naquela posição de bit e posições de bit que são mais significativas, o registrador de writemask de destino 305 é ajustado para ser 0 .
[0037] Na Figura 3 (B) , há dois registradores de writemask de origem 307 e 309 e uma writemask de destino 311. O primeiro valor "0" no primeiro registrador de writemask de origem 307 aparece na terceira posição de bit (SRC1[2]) . Em uma posição de bit correspondente do segundo registrador de writemask de origem 309, o valor é um "0" significando que essa posição de bit não deve ser avaliada como sendo a posição de bit zero menos significativo à direita. A primeira posição de bit que atende às duas exigências é a posição de bit 4 (SRC1[3] e SRC2[3]). O registrador de writemask de destino 311, portanto tem os conteúdos do primeiro registrador de writemask 3 07 até a posição de bit 4 e naquela posição de bit e posições de bit que são mais significativas, o registrador de writemask de destino 311 é ajustado para ser 0 .
Formato Exemplar de KZBTZ
[0038] Um formato exemplar dessa instrução é "KZBTZ Kl, K2, K3" onde o operando de destino Kl é o registrador de writemask, K2 e K3 são registradores de writemask de origem e KZBTZ é o opcode da instrução. Em algumas modalidades, Kl, K2 e K3 são registradores de writemask dedicados como detalhado acima. Em outras modalidades, Kl, K2 e K3 são registradores de uso comum.
Métodos Exemplares de Execução de KZBTZ
[0039] A Figura 4 ilustra uma modalidade da execução de uma instrução KZBTZ em um processador. Uma instrução KZBTZ com um primeiro e segundo operando de writemask de origem, um operando de writemask de destino, e um opcode, é buscado em 401.
[0040] A instrução KZBTZ é decodificada pela lógica de decodificação em 403.
[0041] Os valores do operando de origem são recuperados/lidos em 405. Por exemplo, os registradores de writemask de origem são lidos.
[0042] A instrução KZBTZ decodificada (ou operações compreendendo tal instrução como as micro-operações) é executada pelos recursos de execução tal como uma ou mais unidades funcionais 407 para encontrar uma posição de bit zero menos significativo no primeiro operando de writemask de origem que apresenta um valor de um em uma posição de bit correspondente do segundo operando de writemask de origem. Essa posição de bit significa uma posição de bit zero menos significativo à direita. Exemplos disso são encontrados na Figura 3.
[0043] Os valores até, mas não incluindo, a posição de bit zero menos significativo à direita são armazenados no operando de writemask de destino em posições de bit correspondentes em 409. Adicionalmente, as posições de bit restantes do operando de writemask de destino são ajustadas para zero. Embora 4 07 e 409 tenham sido ilustrados separadamente, em algumas modalidades eles são realizados em conjunto como uma parte da execução da instrução.
[0044] A Figura 5 ilustra uma modalidade de um método para processar uma instrução KZBTZ. Nessa modalidade supõe-se que algumas, senão todas, as operações 401-405 foram realizadas mais cedo, contudo, elas não são mostradas para não obscurecer os detalhes apresentados abaixo. Por exemplo, a busca e a decodificação não são mostradas, nem é mostrada a recuperação de operando. Nesse exemplo, cada posição de bit é processada em paralelo, contudo, as posições de bit podem ser avaliadas também de forma serial.
[0045] Em 501, os conteúdos do primeiro registrador de writemask de origem são gravados para o registrador de writemask de destino. Em algumas modalidades, os conteúdos são do primeiro registrador de writemask de origem gravados alternativamente em um registrador temporário ou outra estrutura de dados.
[0046] Uma variável temporária é ajustada para 0 em 502. Essa variável temporária é usada como um contador para determinar se o número de determinações em 5 03 excedeu o número de posições de bits no primeiro registrador de writemask de origem.
[0047] Em 503, é feita uma determinação sobre se: 1) o contador conta menos do que o número de posições de bit no primeiro registrador de origem de writemask,- 2) um valor de bit em uma posição de bit de valor de contador do primeiro registrador de writemask de origem é 1, ou 3) um valor de bit em uma posição de bit de valor de contador do segundo registrador de writemask de origem é 1. Se qualquer uma dessas determinações for falsa, então a próxima etapa é de zerar todas as posições de bit do registrador de writemask de destino a partir da posição de bit de valor de contador para a posição de bit mais significativa em 507. Uma indicação de falso para a determinação de contador significa que a primeira writemask completa foi avaliada e não foi encontrada nenhuma posição de bit zero menos significativo à direita. Uma indicação de falso para o valor armazenado na posição de bit da primeira writemask de origem não sendo 1 é, portanto uma indicação de um valor zero. Quando o valor armazenado na mesma posição de bit do segundo registrador de writemask de origem for um 1, então a posição de bit zero menos significativo à direita foi encontrada.
[0048] Se qualquer uma dessas determinações for verdadeira, então . a próxima etapa é a de aumentar o contador em 505 e realizar outra vez as determinações de 503 .
[0049] Um uso exemplar de KZBTZ é discutido abaixo.
Nesse exemplo, uma solução para cima é o de não permitir a execução de iterações posteriores, antes de iterações anteriores; assim, a execução vetor/SlMD deve parar na primeira dependência RAW. Se a máscara de entrada K2 for uma máscara que tem bits definidos para elementos será preciso computar que não existem dependências RAW remanescentes, e a máscara de entrada K3 uma máscara que indica que todos os elementos ainda precisarão ser computados, encontrará o elemento anterior com um conflito RAW e zerará todos os bits para elementos posteriores. Isso leva ao seguinte algoritmo para loops de vetorização como este: for (i=0; i<N; i+=SIMD_WIDTH) { gatherjndices = vload(&B[i]); scatterjndices = vload(&C[i]); comparisons = vconflict(gather_indices, scatterjndices); elements Jeft_mask = all_ones; do { no_raw_mask = Compute_Mask_of_Elements_w/o_RAW_Dependence(comparisons, elements_left_mask); stop_at_first_conf_mask = kzbtz(no_raw_mask, elementsjeftjnask); Gather_Compute_Scatter(gatherJndices, scatterjndices, stop_at_first_conf_mask); elementsjeftjnask Λ= stop_at_first_conf_mask; } while (eíements_left_mask != 0); } Arquitetura de Registrador Exemplar [0050] A Figura 6 é um diagrama de blocos de uma arquitetura de registrador 600 de acordo com uma modalidade da invenção. Na modalidade ilustrada, há 32 registradores vetoriais 610 que apresentam 512 bits de largura; esses registradores são referenciados como zmmO até zmm31. Os 256 bits de ordem inferior dos 16 registradores zmm inferiores são sobrepostos em registradores ymmO-16. Os 128 bits de ordem inferior dos 16 registradores zmm inferiores (os 128 bits de ordem mais baixa dos registradores ymm) são sobrepostos nos registradores xmmO-15.
[0051] Os registradores de uso comum 62 5 - na modalidade ilustrada, são dezesseis registradores de uso comum de 64 bits que são usados em conjunto com os modos de endereçamento x86 existentes para endereçar os operandos de memória. Esses registradores são referenciados pelos nomes RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP e R8 até R15.
[0052] Arquivo de registrador de pilha de ponto flutuante de escalar (pilha x87) 645, no qual o arquivo de registrador plano de número inteiro empacotado MMX 650 é processador por alias (alíased) - na modalidade ilustrada, a pilha x87 é uma pilha de oito elementos usada para realizar operações de ponto flutuante escalar em dados de ponto flutuante de 32/64/80 bits utilizando a extensão de conjunto de instruções x87; enquanto que os registradores MMX são usados para realizar operações nos dados de número inteiro empacotados de 64 bits, assim como para conter os operandos para algumas operações realizadas entre os registradores MMX e XMM.
[0053] Modalidades alternativas da invenção podem utilizar registradores mais largos ou mais estreitos. Adicionalmente, as modalidades alternativas da invenção podem utilizar mais, menos ou diferentes arquivos de registrador e registradores.
Arquiteturas de Núcleo, Processadores e Arquiteturas de Computador, Exemplares [0054] Núcleos de processador podem ser implementados em maneiras diferentes, para diferentes finalidades, e em diferentes processadores. Por exemplo, as implementações de tais núcleos podem incluir: 1) um núcleo de uso geral em ordem destinado para computação de uso geral, 2) um núcleo de uso geral de alto desempenho fora de ordem destinado para computação de uso geral, 3) um núcleo de uso especial destinado principalmente para computação gráfica e/ou cientifica (rendimento). Implementações de diferentes processadores podem incluir: 1) a CPU, incluindo um ou mais de núcleos de uso geral em ordem destinados à computação de uso geral e/ou um ou mais núcleos fora de ordem de uso geral, destinados para computação de uso geral, e 2) um coprocessador, incluindo um ou mais núcleos de uso específico destinados principalmente para computação gráfica e/ou científica (rendimento). Tais processadores diferentes conduzem a diferentes arquiteturas de sistema de computador, as quais podem incluir: 1) o coprocessador em um chip separado a partir da CPU, 2) o coprocessador em uma pastilha separada na mesma embalagem que uma CPU, 3), o coprocessador na mesma pastilha que uma CPU (em cujo caso, tal coprocessador é muitas vezes referido como lógica de uso especial; tal como lógica científica e/ou gráfica integrada (rendimento) , ou núcleos de uso específico) , e 4) um sistema em um chip que pode incluir na mesma pastilha a CPU descrita (por vezes referida como o(s) núcleo(s) de aplicativo ou processador (es) de aplicativo), o coprocessador acima descrito e uma funcionalidade adicional. Arquiteturas de núcleo exemplares são descritas a seguir, seguidas de descrições de processadores exemplares e arquiteturas de computador.
Arquiteturas de Núcleo Exemplares Diagrama de blocos de núcleo em ordem e fora de ordem [0055] A Figura 7A é um diagrama de blocos que ilustra tanto um pipeline em ordem exemplar como um registrador de renomeação exemplar, pipeline de emissão/execução fora de ordem de acordo com modalidades da invenção. A Figura 7B é um diagrama de blocos que ilustra tanto uma modalidade exemplar de um núcleo de arquitetura fora de ordem como um registrador de renomeação exemplar, núcleo de arquitetura de emissão/execução fora de ordem a ser incluído em um processador de acordo com as modalidades da invenção. As caixas de linhas cheias nas Figuras 7A-B ilustram o pipeline em ordem e núcleo em ordem, enquanto a adição opcional de caixas de linhas tracejadas ilustra a renomeação de registrador, pipeline de emissão/execução fora de ordem e núcleo. Tendo em conta que o aspecto em ordem é um subconjunto do aspecto fora de ordem, o aspecto fora de ordem será descrito.
[0056] Na Figura 7A, um pipeline de processador QAE00 inclui um estágio de busca QAE02, um estágio de decodificação de comprimento QAE 0 4, um estágio de decodificação QAE06, um estágio de alocação QAE 0 8, uma estágio de renomeação QAE10, um estágio de programação (também conhecido como expedição ou emissão) QAE12, um estágio de leitura de registrador/leitura de memória QAE14, um estágio de execução QAE16, um estágio de writeback/gravar memória QAE18, um estágio de gerenciamento de exceção QAE22 e um estágio de efetivação QAE24.
[0057] A Figura 7B mostra um núcleo de processador QAE90 incluindo uma unidade front end QAE30 acoplada a uma unidade de mecanismo de execução QAE50, e ambos são acoplados a uma unidade de memória QAE70. O núcleo QAE90 pode ser um núcleo de computação de conjunto reduzido de instruções (RISC), um núcleo de computação de conjunto complexo de instruções (CISC), núcleo de palavra de instrução muito longa (VLIW) , ou um tipo de núcleo híbrido ou alternativo. Como outra opção, o núcleo QAE90 pode ser um núcleo para propósitos especiais, tais como. por exemplo, um núcleo de rede ou de comunicação, mecanismo de compactação, núcleo de coprocessador, núcleo de unidade de processamento gráfico de computação de uso geral (GPGPU), núcleo gráfico, ou semelhante.
[0058] A unidade front end QAE30 inclui uma unidade de predição de ramo QAE32 acoplada a uma unidade cache de instruções QAE34, que está acoplada a uma instrução de translation lookaside buffer (TLB) QAE3 6, a qual está acoplada a uma unidade de busca de instrução QAE38, que é acoplada a uma unidade de decodificação QAE40. A unidade de decodificação QAE40 (ou decodificador) poderá decodificar instruções, e gerar como saída uma ou mais micro-operações, pontos de entrada de microcódigo, microinstruções, outras instruções, ou outros sinais de controle, que são decodificados a partir de, ou que de outra forma reflitam, ou são obtidas de, as instruções originais. A unidade de decodificação QAE40 pode ser implementada utilizando vários mecanismos diferentes. Exemplos de mecanismos adequados incluem, mas não estão limitados a, tabelas de consulta, implementações de hardware, redes lógicas programáveis (PLAs), memórias apenas de leitura (ROM) de microcódigo, etc. Em uma modalidade, o núcleo QAE90 inclui uma ROM de microcódigo ou outra mídia que armazena microcódigo para determinadas macroinstruções (por exemplo, na unidade de decodificação QAE40 ou de outro modo dentro da unidade de front end QAE30). A unidade de decodificação QAE40 é acoplada a uma unidade renomeadora/alocadora QAE52 na unidade de mecanismo de execução QAE50.
[0059] A unidade de mecanismo de execução QAE50 inclui a unidade renomeadora/alocadora QAE52 acoplada a uma unidade de retirada QAE54 e um conjunto de uma ou mais unidade(s) programadora(s) QAE 5 6. A(s) unidade(s) programadora(s) QAE5 6 representa(m) qualquer número de diferentes programadores, incluindo estações de reserva, janela de instrução central, etc. A(s) unidade(s) programadora(s) QAE56 é(são) acoplada(s) à unidade(s) de arquivo de registrador físico QAE58. Cada unidade arquivo(s) de registrador físico QAE58 representa um ou mais arquivos de registrador físico, dos quais os diferentes armazenam um ou mais tipos de dados diferentes, tal como inteiro escalar, ponto flutuante escalar, inteiro compactado, ponto flutuante compactado, inteiro vetorial, ponto flutuante vetorial, status (por exemplo, um ponteiro de instrução que é o endereço da próxima instrução a ser executada), etc. Em uma modalidade, a unidade de arquivo(s) de registrador físico QAE58 compreende uma unidade de registradores vetoriais e uma unidade de registradores escalares. Estas unidades de registrador podem fornecer registradores arquitetônicos vetoriais, registradores de máscara vetorial e registradores de uso geral. A(s) unidade(s) de registrador físico QAE58 são sobrepostas pela unidade de retirada QAE54 para ilustrar várias maneiras em que a renomeação de registrador e execução fora de ordem podem ser implementadas (por exemplo, usando buffer(s) de reordenamento e arquivo(s) de registrador de retirada, usando arquivo(s) futuro, buffer(s) de histórico e arquivo(s) de registrador da retirada, usando mapas de registrador e um conjunto de registradores; etc.). A unidade de retirada QAE54 e a(s) unidade(s) de arquivo(s) de registrador físico QAE58 são acopladas aos clusters de execução QAE60. Os clusters de execução QAE60 incluem um conjunto de uma ou mais unidades de execução QAE62 e um conjunto de uma ou mais unidades de acesso à memória QAE 64. As unidades de execução QAE62 podem executar várias operações (por exemplo, deslocamentos, adição, subtração, multiplicação) e em vários tipos de dados (por exemplo, ponto flutuante escalar, inteiro compactado, ponto flutuante compactado, inteiro vetorial, ponto flutuante vetorial). Embora algumas modalidades possam incluir diversas unidades de execução dedicadas funções ou conjuntos de funções específicas, outras modalidades podem incluir apenas uma única unidade de execução ou múltiplas unidades de execução em que todos realizam todas as funções. A(s) unidade(s) programadoras QAE56, unidade(s) de arquivo(s) de registrador físico QAE5 8 e clusters de execução QAE60 são mostrados como sendo possivelmente plurais devido ao fato de certas modalidades criarem pipelines separados para certos tipos de dados/operações (por exemplo, um pipeline de inteiro escalar, um pipeline de ponto flutuante escalar/inteiro compactado/ponto flutuante compactado/inteiro vetorial/ponto flutuante vetorial, e/ou um pipeline de acesso à memória, em cada um tem sua própria unidade programadora, unidade de arquivo(s) de registrador físico, e/ou cluster de execução - e, no caso de um pipeline de acesso à memória separado, certas modalidades são implementadas nas quais apenas o cluster de execução deste pipeline tem a(s) unidade(s) de acesso à memória QAE64). Também deve ser entendido que quando são utilizados pipelines separados, um ou mais desses pipelines podem ser emissão/execução fora de ordem e o restante em ordem.
[0060] O conjunto de unidades de acesso à memória QAE64 é acoplado à unidade de memória QAE70, a qual inclui uma unidade de dados TLB QAE72 acoplada a uma unidade de cache de dados QAE74 acoplada a uma unidade de cache de nível 2 (L2) QAE76. Em uma modalidade exemplar, as unidades de acesso à memória QAE64 podem incluir uma unidade de carregamento, uma unidade de armazenamento de endereço, e uma unidade de armazenamento de dados, cada uma das quais está acoplada à unidade de dados de TLB QAE72 na unidade de memória QAE70. A unidade de cache de instruções QAE34 está ainda acoplada a uma unidade de cache de nível 2 (L2) QAE76 na unidade de memória QAE70. A unidade de cache L2 QAE76 é acoplada a um ou mais outros níveis de cache e, eventualmente, a uma memória principal.
[0061] A título de exemplo, a renomeação de registrador exemplar, arquitetura de núcleo de emissão/execução fora de ordem pode implementar o pipeline QAE00 da seguinte forma: 1) a busca de instrução QAE38 executa os estágios de busca e decodificação de comprimento QAE02 e QAE04, 2) a unidade de decodificação QAE40 realiza o estágio de decodificação QAE06/ 3) a unidade renomeadora/alocadora QAE52 realiza o estágio de alocação QAE08 e estágio de renomeação QAE10, 4) unidade(s) de programação QAE56 realiza(m) o estágio de programação QAE12, 5) unidade(s) de arquivo(s) de registrador físico QAE58 e a unidade de memória QAE70 realizam o estágio de leitura de registrador/leitura de memória QAE14; o cluster de execução QAE60 realiza o estágio de execução QAE16; 6) a unidade de memória QAE70 e unidade(s) de arquivo(s) de registrador físico QAE58 executam o estágio de writeback/gravação de memória QAE18; 7) várias unidades podem estar envolvidas no estágio de gerenciamento de exceção QAE22 e 8) a unidade de retirada QAE54 e unidade(s) de ' arquivo(s) de registrador físico QAE58 realizam o estágio de efetivação QAE24.
[0062] 0 núcleo QAE90 pode suportar um ou mais conjuntos de instruções (por exemplo, o conjunto de instruções x86 (com algumas extensões que foram adicionadas com as versões mais recentes), o conjunto de instruções MIPS da MIPS Technologies de Sunnyvale, CA; o conjunto de instruções ARM (com extensões adicionais opcionais, tais como NEON) da ARM Holdings de Sunnyvale, CA), incluindo a(s) instrução(ões) aqui descrita(s). Em uma modalidade, o núcleo QAE90 inclui a lógica para suportar uma extensão de conjunto de instruções de dados compactados (por exemplo, AVXl, AVX2, e/ou alguma forma do formato de instrução conhecido de vetor genérico (U=0 e/ou U=l) previamente descrito), permitindo assim que as operações usadas em muitos aplicativos de multimídia sejam realizadas usando dados empacotados.
[00 63] Deve ser entendido que o núcleo pode suportar múltiplas threads (execução de dois ou mais conjuntos de operações ou threads paralelos), e pode fazê-lo em uma variedade de formas, incluindo múltiplas threads divididas no tempo (time sliced multithreading), múltiplas threads simultâneas (em que um único núcleo físico proporciona um núcleo lógico para cada uma das threads que o núcleo físico está simultaneamente em múltiplas threads), ou uma combinação dos mesmos (por exemplo, busca e decodificação dividida no tempo e múltiplas threads simultâneas posteriormente, tal como na tecnologia Intel® Hyperthreading).
[0064] Embora a renomeação de registrador seja descrita no contexto de execução fora de ordem, deve ser entendido que a renomeação de registrador pode ser utilizada em uma arquitetura em ordem. Embora a modalidade ilustrada do processador também inclua unidades de cache de instrução e de dados QAE34/QAE74 separadas e uma unidade de cache L2 QAE76 compartilhada, modalidades alternativas podem ter um único cache interno para ambos instruções e dados, tal como, por exemplo, um cache interno de Nível 1 (Ll), ou múltiplos níveis de cache interno. Em algumas modalidades, o sistema pode incluir uma combinação de um cache interno e um cache externo que é exterior ao núcleo e/ou ao processador. Alternativamente, todos os caches podem ser externos ao núcleo e/ou processador.
Arquitetura de Núcleo em Ordem Específica Exemplar [0065] As Figuras 8(A)-(B) ilustram um diagrama de blocos de uma arquitetura de núcleo em ordem exemplar mais específica, o que seria um núcleo de vários blocos lógicos (incluindo outros núcleos do mesmo tipo e/ou tipos diferentes) de um chip. Os blocos lógicos se comunicam através de uma rede de interconexão de alta largura de banda (por exemplo, uma rede em anel) com alguma lógica de função fixa, interfaces de 1/0 de memória e outra lógica de 1/0 necessária, dependendo do aplicativo.
[0066] A Figura 8A é um diagrama de blocos de um núcleo com único processador, juntamente com a sua conexão à rede de interconexão na pastilha 802 e com o subconjunto local do cache de Nível 2 (L2) 804, de acordo com modalidades da invenção. Em uma modalidade, um decodificador de instrução 800 suporta o conjunto de instruções x86 com uma extensão de conjunto de instruções de dados compactados. Um cache LI 806 permite acessos de baixa latência ao cache de memória nas unidades escalares e vetoriais. ' Enquanto em uma modalidade (para simplificar o projeto), uma unidade escalar 808 e uma unidade vetorial 810 utilizam conjuntos de registrador separados (respectivamente, registradores escalares 812 e registradores vetoriais 814) e os dados transferidos entre eles estão gravados na memória e, em seguida, lidos novamente a partir do cache de nível 1 (Ll) 806, modalidades alternativas da invenção podem usar uma abordagem diferente (por exemplo, usar um único conjunto de registradores ou incluir um percurso de comunicação que permita que dados sejam transferidos entre os dois arquivos de registrador sem serem gravados e lidos novamente).
[0067] O subconjunto local do cache L2 804 faz parte de um cache L2 global que é dividido em subconjuntos locais separados, um por núcleo de processador. Cada núcleo de processador tem um percurso de acesso direto ao seu próprio subconjunto local do cache L2 804. Os dados lidos por um núcleo de processador é armazenado em seu subconjunto cache L2 804 e podem ser acessados rapidamente, em paralelo com outros núcleos de processador acessando seus próprios subconjuntos de cache L2 locais. Os dados gravados por um núcleo de processador são armazenados em seu próprio subconjunto de cache L2 804 e são liberados (flushed) a partir de outros subgrupos, se necessário. A rede em anel garante a coerência dos dados compartilhados. A rede em anel é bidirecional para permitir que agentes, tais como núcleos de processador, caches L2 e outros blocos lógicos se comuniquem entre si dentro do chip. Cada percurso dos dados em anel é de largura 1012 bits por direção.
[006 8] A Figura 8B é uma vista expandida da parte do núcleo de processador na Figura 8A de acordo com as modalidades da invenção. A Figura 8B inclui uma parte de cache de dados Ll 806A do cache Ll 804, bem como mais detalhes sobre a unidade vetorial 810 e os registradores vetoriais 814. Especificamente, a unidade vetorial 810 é uma unidade de processamento vetorial (VPU) (vide ALU de largura 16 828) com largura 16, que executa uma ou mais das instruções de flutuação de precisão simples ou dupla de inteiro. A VPU suporta mistura (swizzling) das entradas de registrador com a unidade de mistura 820, conversão numérica com unidades de conversão numérica 822Α-Β, e replicação com a unidade replicadora 824 na entrada de memória.
Processador com controlador de memória integrada e de gráficos [0 069] A Figura 9 é um diagrama de blocos de um processador 900 que pode ter mais do que um núcleo, pode ter um controlador de memória integrada e pode ter gráficos integrados de acordo com modalidades da invenção. As caixas de linhas cheias na Figura 9 ilustram um processador 900 com um único núcleo 902A, um agente de sistema 910, um conjunto de uma ou mais unidades de controlador de barramento 916, enquanto que a adição opcional de caixas de linhas tracejadas ilustram um processador alternativo 900 com múltiplos núcleos 902A-N, um conjunto de uma ou mais unidades de controlador de memória integrada 914 na unidade de agente de sistema 910 e lógica de uso específico 908.
[0070] Assim, diferentes implementações do processador 900 podem incluir: 1) uma CPU com a lógica finalidade especial 908 sendo lógica gráfica e/ou científica (rendimento) (que pode incluir um ou mais núcleos), e os núcleos 9 02A-N sendo um ou mais núcleos de uso geral (por exemplo, núcleos em ordem de uso geral, núcleos fora de ordem de uso geral, uma combinação dos dois), 2) um coprocessador com os núcleos 902A-N sendo um número grande de núcleos de uso especial destinados principalmente para gráficos e/ou científico (rendimento), e 3) um coprocessador com os núcleos 902A-N sendo um grande número de núcleos em ordem de uso geral. Assim, o processador 900 pode ser um processador de uso geral, coprocessador ou processador de uso especial, tal como, por exemplo, um processador de rede ou de comunicações, mecanismo de compactação, processador gráfico, GPGPU (unidade de processamento gráfico de uso geral), um coprocessador com muitos núcleos integrados (MIC) de alto rendimento (incluindo 30 ou mais núcleos), processador incorporado, ou semelhante. O processador pode ser implementado em um ou mais chips. O processador 900 pode ser uma parte de, e/ou pode ser implementado em um ou mais substratos usando qualquer de diversas tecnologias de processo, tais como, por exemplo, BiCMOS, CMOS, ou NMOS.
[0071] A hierarquia de memória inclui um ou mais níveis de cache dentro dos núcleos, um conjunto ou uma ou mais unidades de cache compartilhado 906, e memória externa (não mostrada) acoplada ao conjunto de unidades de controlador de memória integrada 914. O conjunto de unidades de cache compartilhado 906 pode incluir um ou mais caches de nível médio, tal como de nível 2 (L2) , nível 3 (L3), o nível 4 (L4), ou outros níveis de cache, um cache de último nível (LLC), e/ou suas combinações. Embora em uma modalidade uma unidade de interconexão baseada em anel 912 interconecte a lógica gráfica integrada 9 08, o conjunto de unidades de cache compartilhado 906, e a unidade de agente de sistema 910/unidade(s) controladora(s) de memória integrada 914, modalidades alternativas podem usar qualquer número de técnicas bem conhecidas para a interconexão de tais unidades. Em uma modalidade, a coerência é mantida entre uma ou mais unidades de cache 906 e núcleos 902A-N.
[0072] Em algumas modalidades, um ou mais dos núcleos 902A-N são capazes de múltiplas threads. O agente de sistema 910 inclui aqueles núcleos de coordenação e operação de componentes 902A-N. A unidade de agente de sistema 910 pode incluir, por exemplo, uma unidade de controle de potência (PCU) e uma unidade de exibição. A PCU pode ser ou incluir lógica e os componentes necessários para regular o estado de energia dos núcleos 902A-N e a lógica gráfica integrada 908. A unidade de exibição serve para acionar as uma ou mais telas conectadas externamente.
[0073] Os núcleos 902A-N podem ser homogêneos ou heterogêneos em termos de arquitetura do conjunto de instruções, ou seja, dois ou mais núcleos de 902A-N podem ser capazes de execução do mesmo conjunto de instruções, enquanto outros podem ser capazes de executar apenas um subconjunto daquele conjunto de instruções ou um conjunto de instruções diferentes.
Arquiteturas de Computador Exemplares [0074] As Figuras 10-13 são diagramas de blocos de arquiteturas de computador exemplares. Outros projetos de sistemas e configurações conhecidos na técnica para laptops, desktops, computadores portáteis, assistentes pessoais digitais, estações de trabalho de engenharia, servidores, dispositivos de rede, hubs de rede, comutadores, processadores embutidos, processadores de sinais digitais (DSPs), dispositivos gráficos, dispositivos de videogame, set-top boxes, microcontroladores, telefones celulares, reprodutores de mídia portáteis, dispositivos portáteis e outros dispositivos eletrônicos, também são adequados. Em geral, uma grande variedade de sistemas ou dispositivos eletrônicos capazes de incorporar um processador e/ou outra lógica de execução, tal como aqui descrita são de modo geral adequados.
[0075] Com referência agora à Figura 10, é mostrado um diagrama de blocos de um sistema 1000 de acordo com uma modalidade da presente invenção. O sistema 1000 pode incluir um ou mais processadores 1010, 1015, os quais são acoplados a um hub controlador 1020. Em uma modalidade, o hub controlador 1020 inclui um hub controlador de memória gráfica (GMCH) 1090 e um hub de entrada/saída (IOH) 1050 (que pode ser em chips separados), o GMCH 1090 inclui controladores de memória e gráficos aos quais estão acoplados a memória 1040 e o coprocessador 1045, o IOH 1050 acopla os dispositivos de entrada/saída (I/O) 1060 ao GMCH 1090. Alternativamente, um ou ambos os controladores de memória e de gráficos são integrados dentro do processador (tal como aqui descrito) , a memória 1040 e o coprocessador 1045 são acoplados diretamente ao processador 1010, e ao hub controlador 1020, em um único chip com o IOH 1050.
[0076] A natureza opcional de processadores adicionais 1015 é indicada na Figura 10, com linhas tracejadas. Cada processador 1010, 1015 pode incluir um ou mais núcleos de processamento aqui descritos e pode ser uma versão do processador 900.
[0077] A memória 1040 pode ser, por exemplo, memória de acesso aleatório dinâmica (DRAM), memória de mudança de fase (PCM), ou uma combinação das duas. Para ao menos uma modalidade, o hub controlador 1020 se comunica com o(s) processador(es) 1010, 1015 através de um barramento de transmissão múltipla (multi-drop) , tal como um barramento frontal (FSB), a interface ponto a ponto, tal como QuickPath Interconnect (QPI), ou conexão semelhante 1095 .
[0078] Em uma modalidade, o coprocessador 1045 é um processador de uso especial, tal como, por exemplo, um processador MIC de alto rendimento, um processador de rede ou de comunicação, mecanismo de compactação, processador gráfico, GPGPU, processador incorporado, ou semelhante. Em uma modalidade, o hub controlador 1020 pode incluir um acelerador gráfico integrado.
[0079] Pode haver uma grande variedade de diferenças entre os recursos físicos 1010, 1015 em termos de um espectro de métricas de mérito incluindo arquitetura, microarguitetura, térmica, características de consumo de energia e outros semelhantes.
[0080] Em uma modalidade, o processador 1010 executa as instruções que controlam as operações de processamento de dados de um tipo geral. Instruções de coprocessador podem ser incorporadas dentro das instruções. O processador 1010 reconhece estas instruções de coprocessador como sendo de um tipo que deve ser executada pelo coprocessador anexado 1045. Assim, o processador 1010 emite as instruções de coprocessador (ou sinais de controle que representam as instruções do coprocessador) em um barramento de coprocessador ou outra interconexão, para o coprocessador 1045. O(s) coprocessador(es) 1045 aceita(m) e executa(m) as instruções de coprocessador recebidas.
[0081] Com referência agora à Figura 11, é mostrado um diagrama de blocos de um primeiro sistema 1100 exemplificativo mais específico de acordo com uma modalidade da presente invenção. Como mostrado na Figura 11, o sistema de multiprocessador 1100 é um sistema de interconexão ponto a ponto, e inclui um primeiro processador 1170 e um segundo processador 1180 acoplado através de uma interconexão ponto a ponto 1150. Cada um dos processadores 117 0 e 1180 pode ser alguma versão do processador 900. Em uma modalidade da invenção, os processadores 1170 e 1180 são, respectivamente, os processadores 1010 e 1015, enquanto o coprocessador 1338 é o coprocessador 1045. Em outra modalidade, os processadores 1170 e 1180 são, respectivamente, o processador 1010 e o coprocessador 1045.
[0082] Os processadores 1170 e 1180 são apresentados incluindo unidades de controlador de memória integrada (IMC) 1172 e 1182, respectivamente. 0 processador 1170 também inclui como parte de suas interfaces ponto a ponto (PP) de unidades de controlador de barramento 1176 e 1178; da mesma forma, o segundo processador 1180 inclui interfaces PP 1186 e 1188. Os processadores 1170, 1180 podem trocar informações através de uma interface ponto a ponto (PP) 1150 usando circuitos de interface PP 1178, 1188. Como mostrado na Figura 11, IMCs 1172 e 1182 acoplam os processadores às respectivas memórias, a saber, uma memória 113 2 e uma memória 113 4, que podem ser porções da memória principal anexadas localmente aos respectivos processadores.
[0083] Os processadores 1170, 1180 podem trocar informações com um chipset 1190 através de interfaces PP individuais 1152, 1154 usando circuitos de interface ponto a ponto 1176, 1194, 1186 e 1198. O chipset 1190 pode, opcionalmente, trocar informações com o coprocessador 1138 através de uma interface de alto desempenho 1139. Em uma modalidade, o coprocessador 1138 é um processador de uso especial, tal como, por exemplo, um processador MIC de alto rendimento, um processador de rede ou de comunicação, mecanismo de compactação, processador de gráficos, GPGPU, processador incorporado, ou semelhante.
[0084] Um cache compartilhado (não mostrado) pode ser incluído em qualquer um processador ou fora dos dois processadores, ainda conectado com os processadores através de interconexão PP, de tal modo que as informações de cache local de qualquèr um ou de ambos os processadores possam ser armazenadas no cache partilhado se um processador for colocado em um modo de baixa energia.
[0085] O chipset 1190 pode ser acoplado a um primeiro barramento 1116 através de uma interface 1196. Em uma modalidade, o primeiro barramento ' 1116 pode ser um barramento Peripheral Component Interconnect (PCI), ou um barramento tal como um barramento PCI Express ou outro barramento de interconexão de I/O de terceira geração, embora o escopo da presente invenção não seja assim limitado.
[0086] Conforme mostrado na Figura 11, vários dispositivos de I/O 1114 podem ser acoplados ao primeiro barramento 1116, juntamente com uma ponte de barramento 1118 que acopla o primeiro barramento 1116 a um segundo barramento 1120. Em uma modalidade, um ou mais processador(es) adicional(is) 1115, tal como coprocessadores, processadores MIC de alto rendimento, GPGPUs, aceleradores (tais como, por exemplo, aceleradores gráficos ou unidades de processamento de sinais digitais (DSP)), campo portas lógicas programáveis, ou qualquer outro processador, são acoplados ao primeiro barramento 1116. Em uma modalidade, o segundo barramento 1120 pode ser um barramento de baixa contagem de pinos (LPC). Vários dispositivos podem ser acoplados a um segundo barramento 112 0, incluindo, por exemplo, um teclado e/ou mouse 1122, dispositivos de comunicação 1127 e uma unidade de armazenamento 1128, tal como uma unidade de disco ou outro dispositivo de armazenamento em massa, que podem incluir as instruções/código e dados 1130, em uma modalidade. Além disso, um 1/0 de áudio 1124 pode ser acoplado ao segundo barramento 1120. Observar que outras arquiteturas são possíveis. Por exemplo, em vez da arquitetura ponto a ponto da Figura 11, um sistema pode implementar um barramento de múltiplas transmissões (multi-drop) ou outra tal arquitetura.
[0087] Com referência agora à Figura 12, é mostrado um diagrama de blocos de um segundo sistema 1200 exemplar mais específico de acordo com uma modalidade da presente invenção. Elementos semelhantes nas Figuras 11 e 12 apresentam números de referência semelhantes, e determinados aspectos da Figura 11 foram omitidos da Figura 12, a fim de evitar obscurecer outros aspectos da Figura 12.
[0088] A Figura 12 ilustra que os processadores 1170, 1180 podem incluir memória integrada e lógica de controle ("CL") de I/O 1172 e 1182, respectivamente. Assim, a CL 1172, 1182 inclui unidades controladoras de memória integrada e inclui lógica de controle de I/O. A Figura 12 ilustra que não apenas as memórias 1132, 1134 são acopladas ao CL 1172, 1182, mas também que os dispositivos de I/O 1214 também são acoplados à lógica de controle 1172, 1182. Dispositivos legados de I/O 1215 são acoplados ao chipset 1190.
[0089] Com referência agora à Figura 13, é mostrado um diagrama de blocos de um SoC 13 00, de acordo com uma modalidade da presente invenção. Os elementos semelhantes na Figura 9 apresentam os mesmos números de referência. Além disso, caixas de linhas tracejadas são características opcionais em SoCs mais avançados. Na Figura 13, unidade(s) de interconexão 1302 é(são) acoplada(s) a: um processador de aplicativo 1310, que inclui um conjunto de um ou mais núcleos 202A-N e unidade(s) de cache compartilhado 906, uma unidade de agente de sistema 910, unidade(s) de controlador de barramento 916, unidade(s) de controlador de memória integrada 914, um conjunto ou um ou mais coprocessadores 1320, que podem incluir lógica gráfica integrada, um processador de imagem, um processador de áudio e um processador de vídeo, uma unidade de memória estática de acesso aleatório (SRAM) 1330, uma unidade de acesso direto à memória (DMA) 1332, e uma unidade de exibição 1340 para o acoplamento de uma ou mais telas externas. Em uma modalidade, o coprocessador(s) 1320 inclui(em) um processador de uso especial, tal como, por exemplo, um processador de rede ou de comunicações, mecanismo de compactação, GPGPU, um processador MIC de alto rendimento, processador incorporado, ou semelhante.
[0090] As modalidades dos mecanismos aqui descritos podem ser implementadas em hardware, software, firmware, ou uma combinação de tais abordagens de implementação. Modalidades da invenção podem ser implementadas como programas de computador ou de um código de programa executando no sistema programável compreendendo pelo menos um processador, um sistema de armazenamento (incluindo a memória volátil e não volátil e/ou elementos de armazenamento), pelo menos um dispositivo de entrada, e pelo menos um dispositivo de saída.
[0091] Código de programa, tal como o código 1130 ilustrado na Figura 11, pode ser aplicado para introduzir instruções para realizar as funções aqui descritas e gerar informação de saída. A informação de saída pode ser aplicada a um ou mais dispositivos de saída, de uma forma conhecida. Para os fins deste aplicativo, um sistema de processamento inclui qualquer sistema que possui um processador, tal como, por exemplo, um processador de sinais digitais (DSP), um microcontrolador, circuitos integrados de aplicação específica (ASIC), ou um microprocessador.
[0092] O código do programa pode ser implementado em linguagem de programação procedural de alto nivel ou orientada a objetos, para se comunicar com um sistema de processamento. O código do programa também pode ser implementado em assembly ou em linguagem de máquina, se desejado. Na verdade, os mecanismos aqui descritos não são limitados em escopo a qualquer linguagem de programação particular. Em qualquer caso, a linguagem pode ser uma linguagem compilada ou interpretada.
[0093] Um ou mais aspectos de uma modalidade, pelo menos, podem ser implementados por instruções representativas armazenadas em uma' mídia legível por máquina, que representa várias lógicas dentro do processador, que, quando lidas por uma máquina fazem com que a máquina fabrique a lógica para realizar as técnicas aqui descritas. Tais representações, conhecidas como "núcleos IP" podem ser armazenadas em uma mídia legível por máquina tangível e fornecida a vários clientes ou instalações de fabricação para carregar em máquinas de fabricação que realmente fazem a lógica ou processador.
[0094] Tais mídias de armazenamento de leitura por máquina podem incluir, sem limitação, arranjos de artigos não transitórios, tangíveis fabricados ou formados por uma máquina ou dispositivo, incluindo a mídia de armazenamento, tal como discos rígidos, qualquer outro tipo de disco, incluindo disquetes, discos ópticos, memórias apenas de leitura de disco compacto (CD-ROM), disco compacto regravável (CD-RWs) e discos magneto-ópticos, dispositivos semicondutores, tais como memórias apenas de leitura (ROM), memórias de acesso aleatório (RAM), tais como memórias dinâmicas de acesso aleatório (DRAM), memórias de acesso aleatório estáticas (SRAM), memórias programáveis apagáveis de leitura (EPROMs), memórias flash, memórias apenas de leitura programáveis eletricamente apagáveis (EEPROM), memória de mudança de fase (PCM), cartões magnéticos ou ópticos, ou qualquer outro tipo de mídia adequada para armazenar instruções eletrônicas.
[0095] Assim, modalidades da invenção também incluem mídias não transitórios, tangíveis legíveis por máquina contendo instruções ou contendo os dados do projeto, tal como a linguagem de descrição de hardware (HDL) , que define estruturas, circuitos, equipamentos, processadores e/ou recursos do sistema aqui descrito. Tais modalidades também podem ser referidas como produtos de programa.
Emulação (incluindo a tradução binária, código de transformação (morph) , etc.) [0096] Em alguns casos, um conversor de instruções pode ser utilizado para converter uma instrução de um conjunto de fonte de instruções para definir um conjunto de instruções alvo. Por exemplo, o conversor de instrução pode traduzir (por exemplo, usando a tradução binária estática, dinâmica de tradução binária incluindo compilação dinâmica) , transformar, emular, ou de qualquer modo converter uma instrução para uma ou mais instruções a serem processadas pelo núcleo. O conversor de instruções pode ser implementado em software, hardware, firmware, ou uma combinação dos mesmos. O conversor de instruções pode estar no processador, fora do processador, ou parte dentro ' e parte fora do processador.
[0 097] A Figura 14 é um diagrama de blocos contrastante da utilização de um conversor de instruções de software para converter instruções binárias em um conjunto de instruções fonte para instruções binárias em um conjunto de instruções alvo de acordo com as modalidades da invenção. Na modalidade ilustrada, o conversor de instrução é um conversor de instrução de software, embora alternativamente, o conversor de instrução possa ser implementado em software, firmware, hardware, ou várias combinações destes. A Figura 14 mostra um programa em uma linguagem· de alto nível 1402 que pode ser compilado usando um compilador x86 1404 para gerar o código binário x86 1406 que pode ser executado de forma nativa por um processador com pelo menos um núcleo de conjunto de instruções x86 1416. O processador com pelo menos um núcleo de conjunto de instruções x86 1416 representa qualquer processador que possa executar substancialmente as mesmas funções que um processador Intel com pelo menos um núcleo de conjunto de instruções x86 por compatibilidade executando ou de outra forma processando (1) uma porção substancial do conjunto de instruções do núcleo de conjunto de instruções x86 Intel ou (2) versões de código de objetos de aplicativos ou outros softwares direcionados para serem executados em um processador Intel com pelo menos um núcleo de conjunto de instruções x8 6, a fim de alcançar substancialmente o mesmo resultado que um processador Intel com pelo menos um núcleo de conjunto de instruções x86. 0 compilador x86 1404 representa um compilador que é operável para gerar código binário x86 1406 {por exemplo, código de objetos) que pode, com ou sem processamento de ligação (linkage) adicional, ser executado no processador com pelo menos um núcleo de conjunto de instruções x86 1416. Da mesma forma, a Figura 14 mostra o programa na linguagem de alto nível 1402 que pode ser compilado usando um compilador de conjunto de instruções alternativo 1408 para gerar o código binário de conjunto de instruções alternativas 1410 que pode ser nativamente executado por um processador sem pelo menos um núcleo de conjunto de instruções x86 1414 (por exemplo, um processador com núcleos que executam o conjunto de. instruções MIPS de MIPS Technologies de Sunnyvale, CA e/ou que executam o conjunto de instruções ARM da ARM Holdings de Sunnyvale, CA). 0 conversor de instruções 1412 é usado para converter o código binário x86 1406 em um código que possa ser nativamente executado pelo processador sem um núcleo de conjunto de instruções. x86 1414. Não é provável que este código convertido seja o mesmo que o código binário do conjunto de instruções alternativas 1410 porque um conversor de instruções capaz disto é difícil de fazer; no entanto, o código convertido realizará a operação geral e será constituído de instruções a partir do conjunto de instruções alternativas. Assim, o conversor de instruções 1412 representa software, firmware, hardware, ou uma combinação destes que, através de emulação, simulação ou qualquer outro processo, permite que um processador ou outro dispositivo eletrônico que não tem um processador ou núcleo de conjunto de instruções x86 para executar o código binário x86 1406.
REIVINDICAÇÕES

Claims (20)

1. Equipamento caracterizado por compreender: lógica de decodificação para decodificar uma instrução de máscara zero antes de zero à direita (KZBTZ), a instrução KZBTZ incluindo um primeiro operando de writemask de origem e um operando de writemask de destino; lógica de execução para executar a instrução KZBTZ decodificada para encontrar uma posição de bit zero menos significativo à direita na primeira writemask de origem e definir a writemask de destino para ter os valores da primeira writemask de origem, mas com todas as posições de bit mais próximas da posição de bit mais significativo do que a posição de bit zero menos significativo à direita em uma primeira writemask de origem ajustada para zero.
2. Equipamento, de acordo com a reivindicação 1, caracterizado pelo fato de que a instrução KZBTZ inclui adicionalmente um segundo operando de writemask de origem e a posição de bit zero menos significativo à direita em uma primeira posição de bit no operando de writemask de origem ajustado para zero onde uma posição de bit correspondente do segundo operando de writemask de origem é ajustada para um.
3. Equipamento, de acordo com a reivindicação 1, caracterizado pelo fato de que os operandos de writemask são registradores de writemask dedicados.
4. Equipamento, de acordo com a reivindicação 3, caracterizado pelo fato de que os registradores de writemask dedicados apresentam um tamanho de 8 ou 16 bits.
5. Equipamento, de acordo com a reivindicação 1, caracterizado pelo fato de que os operandos de writemask são registradores de uso comum.
6. Equipamento, de acordo com a reivindicação 1, caracterizado pelo fato de que a lógica de execução avalia cada posição de bit do primeiro operando de origem serialmente a partir do menos significativo para o mais significativo.
7. Equipamento, de acordo com a reivindicação 6, caracterizado pelo fato de que um contador é usado pela lógica de execução para determinar quando todas as posições de bits tiverem sido avaliadas.
8. Método para realizar em um processador de computador uma instrução de máscara zero antes de zero à direita (KZBTZ), a instrução KZBTZ incluindo um primeiro operando de writemask de origem e um operando de writemask de destino, o método caracterizado por compreender: encontrar uma posição de bit zero menos significativo à direita na primeira writemask de origem; ajustar a writemask de destino para ter os valores da primeira writemask de origem, mas com todas as posições de bit mais próximas da posição de bit mais significativo do que a posição de bit zero menos significativo à direita em uma primeira writemask de origem ajustada para zero.
9. Método, de acordo com a reivindicação 8, caracterizado pelo fato de que a instrução KZBTZ inclui adicionalmente um segundo operando de writemask de origem e a posição de bit zero menos significativo à direita é uma primeira posição de bit no operando de writemask de origem ajustado para zero onde uma posição de bit correspondente do segundo operando de writemask de origem é ajustada para um.
10. Método, de acordo com a reivindicação 8, caracterizado pelo fato de que os operandos de writemask são registradores de writemask dedicados.
11. Método, de acordo com a reivindicação 10, caracterizado pelo fato de que os registradores de writemask dedicados são de tamanho de 8 ou 16 bits.
12. Método, de acordo com a reivindicação 8, caracterizado pelo fato de que os operandos de writemask são registradores de uso geral.
13. Método, de acordo com a reivindicação 8, caracterizado pelo fato de que cada posição de bit do primeiro operando de writemask de origem é avaliada serialmente a partir do menos significativo para o mais significativo.
14. Método, de acordo com a reivindicação 13, caracterizado pelo fato de determinar quando todas as posições de bit tiverem sido avaliadas com base em um contador.
15. Método em mídia tangível legível por máquina incluindo código que quando executado por um processador faz com que o processador execute o método para realizar uma instrução de máscara zero antes de zero à direita (KZBTZ), a instrução KZBTZ incluindo um primeiro operando de writemask de origem e um operando de writemask de destino, o método caracterizado por compreender: encontrar uma posição e bit zero menos significativo à direita na primeira writemask de origem; ajustar a writemask de destino para ter os valores da primeira writemask de origem, mas com todas as posições de bit mais próximas da posição de bit mais significativo do que a posição de bit zero menos significativo à direita em uma primeira writemask de origem ajustada para zero.
16. Método, de acordo com a reivindicação 15, caracterizado pelo fato de que a instrução KZBTZ inclui adicionalmente um segundo operando de writemask de origem e a posição de bit zero menos significativo à direita é uma primeira posição de bit no operando de writemask de origem ajustado para zero onde a posição de bit correspondente do segundo operando de writemask de origem é ajustada para um.
17. Método, de acordo.com a reivindicação 15, caracterizado pelo fato de que os operandos de writemask são registradores de writemask dedicados.
18. Método, de acordo com a reivindicação 17, caracterizado pelo fato de que os registradores de writemask dedicados apresentam tamanho de 8 ou 16 bits.
19. Método, de acordo.com a reivindicação 15, caracterizado pelo fato de que os operandos de writemask são registradores de uso comum.
20. Método, de acordo com a reivindicação 15, caracterizado pelo fato de que cada posição de bit do primeiro operando de writemask de origem é avaliada serialmente a partir do menos significativo para o mais significativo.
BR102014006118A 2013-03-15 2014-03-14 sistemas, equipamentos e métodos para determinar um bit de mascaramento menos significativo à direita de um registrador writemask BR102014006118A2 (pt)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US13/840,809 US9323531B2 (en) 2013-03-15 2013-03-15 Systems, apparatuses, and methods for determining a trailing least significant masking bit of a writemask register

Publications (1)

Publication Number Publication Date
BR102014006118A2 true BR102014006118A2 (pt) 2015-10-20

Family

ID=50554642

Family Applications (1)

Application Number Title Priority Date Filing Date
BR102014006118A BR102014006118A2 (pt) 2013-03-15 2014-03-14 sistemas, equipamentos e métodos para determinar um bit de mascaramento menos significativo à direita de um registrador writemask

Country Status (7)

Country Link
US (1) US9323531B2 (pt)
JP (1) JP5806748B2 (pt)
KR (1) KR101624786B1 (pt)
CN (1) CN104049946A (pt)
BR (1) BR102014006118A2 (pt)
DE (1) DE102014003659A1 (pt)
GB (1) GB2513467B (pt)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9354877B2 (en) * 2011-12-23 2016-05-31 Intel Corporation Systems, apparatuses, and methods for performing mask bit compression
US10387150B2 (en) 2015-06-24 2019-08-20 International Business Machines Corporation Instructions to count contiguous register elements having a specific value in a selected location
US10162603B2 (en) * 2016-09-10 2018-12-25 Sap Se Loading data for iterative evaluation through SIMD registers
WO2019005165A1 (en) 2017-06-30 2019-01-03 Intel Corporation METHOD AND APPARATUS FOR VECTORIZING INDIRECT UPDATING BUCKLES
KR101999006B1 (ko) 2017-09-11 2019-07-11 중앙대학교 산학협력단 세균성 벼흰잎마름병균의 OprXBo 단백질 및 이의 용도
GB2585202B (en) * 2019-07-01 2021-11-24 Advanced Risc Mach Ltd An apparatus and method for speculatively vectorising program code
US11853757B2 (en) * 2020-03-06 2023-12-26 Intel Corporation Vectorization of loops based on vector masks and vector count distances

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2636075B2 (ja) * 1990-11-16 1997-07-30 甲府日本電気株式会社 ベクトル処理装置
US5207132A (en) 1991-10-16 1993-05-04 Textron Inc. Elliptical lobed drive system
US5651121A (en) * 1992-12-18 1997-07-22 Xerox Corporation Using mask operand obtained from composite operand to perform logic operation in parallel with composite operand
US5446912A (en) 1993-09-30 1995-08-29 Intel Corporation Partial width stalls within register alias table
US7129864B2 (en) * 2004-12-31 2006-10-31 Intel Corporation Fast compact decoder for huffman codes
US8209525B2 (en) 2008-08-15 2012-06-26 Apple Inc. Method and apparatus for executing program code
US8793472B2 (en) 2008-08-15 2014-07-29 Apple Inc. Vector index instruction for generating a result vector with incremental values based on a start value and an increment value
US7966523B2 (en) * 2008-08-21 2011-06-21 Rockwell Automation Technologies, Inc. Industrial automation and information solutions having industry specific modalities
US8667042B2 (en) * 2010-09-24 2014-03-04 Intel Corporation Functional unit for vector integer multiply add instruction
US9092213B2 (en) * 2010-09-24 2015-07-28 Intel Corporation Functional unit for vector leading zeroes, vector trailing zeroes, vector operand 1s count and vector parity calculation
US8972701B2 (en) * 2011-12-06 2015-03-03 Arm Limited Setting zero bits in architectural register for storing destination operand of smaller size based on corresponding zero flag attached to renamed physical register
US9703558B2 (en) * 2011-12-23 2017-07-11 Intel Corporation Systems, apparatuses, and methods for setting an output mask in a destination writemask register from a source write mask register using an input writemask and immediate
WO2013101223A1 (en) 2011-12-30 2013-07-04 Intel Corporation Efficient zero-based decompression
US9116686B2 (en) * 2012-04-02 2015-08-25 Apple Inc. Selective suppression of branch prediction in vector partitioning loops until dependency vector is available for predicate generating instruction

Also Published As

Publication number Publication date
DE102014003659A1 (de) 2014-09-18
KR101624786B1 (ko) 2016-05-26
KR20140113555A (ko) 2014-09-24
JP2014182796A (ja) 2014-09-29
CN104049946A (zh) 2014-09-17
US20140281401A1 (en) 2014-09-18
GB2513467A (en) 2014-10-29
JP5806748B2 (ja) 2015-11-10
GB201403993D0 (en) 2014-04-23
GB2513467B (en) 2015-11-04
US9323531B2 (en) 2016-04-26

Similar Documents

Publication Publication Date Title
CN107729048B (zh) 提供向量压缩和旋转功能的指令和逻辑
BR102013032654A2 (pt) instruções e lógica para vetorizar laços condicionais
KR101851439B1 (ko) 충돌 검출을 수행하고, 레지스터의 콘텐츠를 다른 레지스터의 데이터 구성요소 위치들로 브로드캐스트하기 위한 시스템들, 장치들 및 방법들
US20170177352A1 (en) Instructions and Logic for Lane-Based Strided Store Operations
US20170177364A1 (en) Instruction and Logic for Reoccurring Adjacent Gathers
BR102014006806A2 (pt) Instruções e lógica para oferecer recursos avançados de paginação para caches de página de enclave seguro
BR102014005801A2 (pt) rastreamento de fluxo de controle de instruções
BR102014005800A2 (pt) Instruções de fusíveis e lógica para fornecer o teste-or e/ou o teste-and de funcionalidade usando várias fontes de teste
BR102014006118A2 (pt) sistemas, equipamentos e métodos para determinar um bit de mascaramento menos significativo à direita de um registrador writemask
BR102014006231A2 (pt) equipamento de processamento de instruções, método dentro de um processador, sistema para processar instruções e artigo de manufatura
TW201508767A (zh) 多暫存器記憶體存取指令、處理器、方法及系統
BR102014006021A2 (pt) processadores, métodos e sistemas para relaxamento de sincronização de acesso á memória compartilhada
BR112015030098B1 (pt) Métodos, sistemas e instruções de processadores de predicação de elemento de dados compactados
US10002081B2 (en) Apparatus for hardware implementation of heterogeneous decompression processing
EP3391236A1 (en) Instructions and logic for get-multiple-vector-elements operations
US9715388B2 (en) Instruction and logic to monitor loop trip count and remove loop optimizations
US20170177350A1 (en) Instructions and Logic for Set-Multiple-Vector-Elements Operations
EP3391235A1 (en) Instructions and logic for even and odd vector get operations
US10467006B2 (en) Permutating vector data scattered in a temporary destination into elements of a destination register based on a permutation factor
US20170177345A1 (en) Instruction and Logic for Permute with Out of Order Loading
US20150186183A1 (en) Instruction and Logic for Cache-Based Speculative Vectorization
TW201732555A (zh) 用於向量位元欄壓縮及擴展的指令及邏輯
BR102016012096A2 (pt) Hardware apparatus to improve performance of state dependent computers
US9614544B2 (en) Systems, methods, and apparatuses for decompression using hardware and software
US20170177355A1 (en) Instruction and Logic for Permute Sequence

Legal Events

Date Code Title Description
B03A Publication of an application: publication of a patent application or of a certificate of addition of invention
B06U Preliminary requirement: requests with searches performed by other patent offices: suspension of the patent application procedure
B11B Dismissal acc. art. 36, par 1 of ipl - no reply within 90 days to fullfil the necessary requirements