BRPI0306094B1 - Apparatus, method, and system for performing a signal operation that multiplies the execution of a multi-signaling operation - Google Patents
Apparatus, method, and system for performing a signal operation that multiplies the execution of a multi-signaling operation Download PDFInfo
- Publication number
- BRPI0306094B1 BRPI0306094B1 BRPI0306094-2A BRPI0306094A BRPI0306094B1 BR PI0306094 B1 BRPI0306094 B1 BR PI0306094B1 BR PI0306094 A BRPI0306094 A BR PI0306094A BR PI0306094 B1 BRPI0306094 B1 BR PI0306094B1
- Authority
- BR
- Brazil
- Prior art keywords
- operand
- signal
- data
- instruction
- packet
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/52—Multiplying; Dividing
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8007—Architectures 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
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/52—Multiplying; Dividing
- G06F7/523—Multiplying only
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent 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]
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/38—Indexing scheme relating to groups G06F7/38 - G06F7/575
- G06F2207/3804—Details
- G06F2207/3808—Details concerning the type of numbers or the way they are handled
- G06F2207/3812—Devices capable of handling different types of numbers
- G06F2207/382—Reconfigurable for different fixed word lengths
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/38—Indexing scheme relating to groups G06F7/38 - G06F7/575
- G06F2207/3804—Details
- G06F2207/3808—Details concerning the type of numbers or the way they are handled
- G06F2207/3828—Multigauge devices, i.e. capable of handling packed numbers without unpacking them
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Computer Hardware Design (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
- Complex Calculations (AREA)
Abstract
"método, aparelho e instrução para a realização de uma operação de sinal que multiplica". a presente invenção refere-se ao método, aparelho e meios de programa para realizar uma operação de sinal e multiplicação. em uma modalidade, um aparelho inclui recursos de execução para executar uma primeira instrução. em resposta à primeira instrução, os ditos recursos de execução armazenam em uma localização de armazenamento um valor resultante igual a um primeiro operando fonte multiplicado por um valor de sinal de um segundo operando fonte. em algumas modalidades, o primeiro operando fonte pode ser substituído pelo resultado.
Description
Relatório Descritivo da Patente de Invenção para "APARELHO, PROCESSADOR, MÉTODO, E SISTEMA PARA A REALIZAÇÃO DE UMA OPERAÇÃO DE SINAL QUE MULTIPLICA PARA A REALIZAÇÃO DE UMA OPERAÇÃO DE SINAL QUE MULTIPLICA".
Campo da Invenção [001] A presente descrição pertence ao campo dos aparelhos de processamento e software associado e sequências de software que realizam operações matemáticas.
Descrição da Técnica Relacionada [002] Sistemas de computador têm se tornado cada vez mais disseminados em nossa sociedade. As capacidades de processamento dos computadores têm aumentado a eficiência e a produtividade dos trabalhadores em um amplo espectro de profissões. À medida que os custos de compra e propriedade de um computador continuam a cair, mais e mais consumidores têm sido capazes de levar vantagem com as máquinas mais novas e mais rápidas. Adicional mente, muitas pessoas desfrutam do uso de computadores portáteis devido à liberdade que proporcionam. Os computadores móveis permitem que os usuários transportem com facilidade seus dados e trabalhem com os mesmos quando deixam o escritório ou viajam. Essa situação é bem familiar para uma equipe de publicidade, executivos e até mesmo estudantes.
[003] À medida que a tecnologia de processador avança, um código de software mais novo também está sendo gerado para rodar em máquinas com esses processadores. Os usuários geral mente esperam e demandam por maior desempenho de seus computadores independentemente do tipo de software sendo utilizado. Um problema como esse pode surgir dos tipos de instruções e operações que estão sendo desempenhadas dentro do processador. Determinados tipos de operação exigem mais tempo para que sejam completadas com base na complexidade das operações e/ou do tipo de circuitos necessários. Isso fornece uma oportunidade para a otimização da forma na qual determinadas operações complexas são executadas dentro do processador.
[004] Aplicativos de mídia têm incentivado o desenvolvimento de microprocessador por mais de uma década. De fato, a maior parte das atualizações de computação realizadas recentemente foram acionadas pelos aplicativos de mídia. Essas atualizações têm ocorrido predominantemente dentro de segmentos de consumidor, apesar de avanços significativos também terem sido observados nos segmentos de empresas para fins de educação e comunicação aperfeiçoadas com entretenimento. Não obstante, futuros aplicativos de mídia exigirão uma capacidade computacional ainda maior. Como resultado disso, a experiência de computação pessoal do futuro será ainda mais rica em efeitos audiovisuais, além de ser mais fácil de se utilizar, e mais importante, a computação se fundirá às comunicações.
[005] De acordo, a exibição de imagens, além da reprodução de dados de áudio e vídeo, que é coletivamente referido como um conteúdo, tem se tornado aplicativos cada vez mais populares para os dispositivos de computação atuais. As operações de filtragem e convoluta são algumas das operações mais comuns realizadas nos dados de conteúdo, tal como dados de áudio e vídeo de imagem. Tais operações são intensas em termos de computação, mas oferecem um alto nível de paralelismo de dados que pode ser explorado através de uma implementação eficiente utilizando vários dispositivos de armazenamento de dados, tal como, por exemplo, registros de dados múltiplos de instrução única (SIMD). Um número de arquiteturas atuais também exigem mudanças de tipo de dados desnecessárias que minimizam o rendimento da instrução e aumenta significativamente o número de ciclos de relógio necessários para ordenar os dados para a realização de operações aritméticas.
[006] Várias instruções relacionadas com sinal da técnica anterior, tal como uma instrução de signo determina o sinal de um número binário. No entanto, as capacidades dessas instruções de sígno da técnica anterior são limitadas à utilidade, especialmente em aplicativos onde o processamento adicional dos resultados de signo é necessário visto que esses resultados são resultados intermediários dos algoritmos maiores. Pelas exigências de instruções adicionais para se alcançar os resultados desejados, custos adicionais foram incorridos em termos de recursos de processamento e intervalos de sequência.
Breve Descrição das Figuras [007] A presente invenção é ilustrada por meio de exemplo e não de limitação nas figuras dos desenhos em anexo: [008] A figura 1a é um diagrama em bloco de um sistema de computador formado com um processador que inclui unidades de execução para executar uma instrução para uma operação de sinal que multiplica de acordo com uma modalidade da presente invenção;
[009] A figura 1b é um diagrama em bloco de outro sistema de computador ilustrativo de acordo com uma modalidade alternativa da presente invenção;
[0010] A figura 1c é uma diagrama em bloco de outro sistema de computador ilustrativo de acordo com outra modalidade alternativa da presente invenção;
[0011] A figura 2 é um diagrama em bloco da microarquitetura para um processador de uma modalidade que inclui circuitos lógicos para realizar uma operação de sinal que multiplica de acordo com a presente invenção;
[0012] A figura 3a ilustra várias representações do tipo de dados em pacote em registros de multimídia de acordo com uma modalidade da presente invenção;
[0013] A figura 3b ilustra tipos de dados em pacote de acordo com uma modalidade alternativa;
[0014] A figura 3c ilustra várias representações do tipo de dados em pacote com sinal e sem sinal nos registros de multimídia de acordo com uma modalidade da presente invenção;
[0015] A figura 3d ilustra uma modalidade de um formato de código de operação (opcode);
[0016] A figura 3e ilustra um formato de codificação de operação alternativa (opcode);
[0017] A figura 3f ilustra outro formato de codificação de operação alternativa;
[0018] A figura 4 é um diagrama em bloco de uma modalidade de lógica para realizar uma operação de sinal em operandos de dados em pacote de acordo com a presente invenção;
[0019] A figura 5 ilustra a operação de uma operação de sinal que multiplica os elementos de dados de acordo com uma modalidade da presente invenção;
[0020] A figura 6a é um diagrama em bloco de uma modalidade de um circuito para a realização de uma operação de sinal de acordo com a presente invenção;
[0021] A figura 6b é um diagrama em bloco de outra modalidade de um circuito para a realização de uma operação de sinal de acordo com a presente invenção;
[0022] A figura 7 ilustra a operação de uma instrução de sinal em pacote em uma pluralidade de elementos de dados de acordo com uma modalidade da presente invenção;
[0023] A figura 8a é um fluxograma ilustrando uma modalidade de um método para a realização de uma operação de sinal;
[0024] A figura 8b é um fluxograma ilustrando outra modalidade de um método para realizar uma operação de sinal;
[0025] A figura 9 é um diagrama em bloco de uma modalidade da lógica para a realização de um valor absoluto em uma operação de dados em pacote;
[0026] A figura 10 ilustra a operação de um algoritmo de redução de efeito de bloco utilizando instruções SI MD de acordo com a presente invenção; e [0027] A figura 11 é um fluxograma ilustrando uma modalidade de um método para a realização de um algoritmo de redução de efeito de bloco utilizando instruções SIMD.
Descrição Detalhada [0028] A descrição a seguir descreve as modalidades de um método, aparelho e instrução para a realização de uma operação de sinal e multiplicação. Na descrição a seguir, inúmeros detalhes específicos tais como tipos de processador, condições da mícroarquitetura, eventos, mecanismos de ativação e similares são apresentados a fim de fornecer uma compreensão mais completa da presente invenção. Será apreciado, no entanto, pelos versados na técnica, que a invenção pode ser praticada sem tais detalhes específicos. Adicionalmente, algumas das estruturas bem conhecidas, circuitos, e similares não foram ilustrados em detalhes para evitar prejudicar desnecessariamente a presente invenção.
[0029] Apesar das modalidades a seguir serem descritas com referência a um processador, outras modalidades são aplicáveis a outros tipos de circuitos integrados e dispositivos lógicos. As mesmas técnicas e ensinamentos da presente invenção podem ser facilmente aplicados a outros tipos de circuitos ou dispositivos semicondutores que podem se beneficiar do rendimento superior da sequência e do desempenho aperfeiçoado. Os ensinamentos da presente invenção são aplicáveis a qualquer processador ou máquina que realiza as manipulações de dados. No entanto, a presente invenção não está limitada a processadores ou máquinas que realizam operações de dados de 256 bits, 128 bits, 64 bits, 32 bits ou 16 bits e podem ser aplicados a qualquer processador ou máquina no qual a manipulação dos dados em pacote é necessária.
[0030] Na descrição a seguir, para fins de explicação, vários detalhes específicos são apresentados a fim de fornecer uma compreensão profunda da presente invenção. Os versados na técnica, no entanto, apreciarão que esses detalhes específicos não são necessários a fim de praticar a presente invenção. Em outros casos, estruturas elétricas e circuitos bem conhecidos não foram apresentados em detalhes particulares a fim de não prejudicar necessariamente a presente invenção. Adicionalmente, a descrição a seguir fornece exemplos, e os desenhos em anexo ilustram vários exemplos para fins de ilustração. No entanto, esses exemplos não devem ser considerados no sentido limitador visto que são meramente destinados a fornecer exemplos da presente invenção ao invés de fornecerem uma lista exaustiva de todas as implementações possíveis da presente invenção.
[0031] Apesar dos exemplos abaixo descreverem o manuseio e distribuição de instrução no contexto das unidades de execução e circuitos lógicos, outras modalidades da presente invenção podem ser realizadas por meio de software. Em uma modalidade, os métodos da presente invenção são consubstanciados em instruções executáveis por máquina. As instruções podem ser utilizadas para causar um processador de finalidade geral ou finalidade especial que é programado com instruções para realizar as etapas da presente invenção. A presente invenção pode ser fornecida como um produto ou software de programa de computador que pode incluir um meio que pode ser lido por máquina ou computador possuindo armazenado no mesmo instruções que podem ser utilizadas para programar um computador (ou outros dispositivos eletrônicos) para realizar um processo de acordo com a presente invenção. Alternativamente, as etapas da presente invenção devem ser realizadas pelos componentes específicos de hardware que contêm lógica conectada para a realização das etapas, ou por qualquer combinação de componentes de computador programados e componentes de hardware personalizados. Tal software pode ser armazenado dentro de uma memória no sistema. De forma similar, o código pode ser distribuído através de uma rede ou por meio de outro meio que pode ser lido por computador.
[0032] Dessa forma um meio que pode ser lido por máquina pode incluir qualquer mecanismo para o armazenamento ou transmissão de informação em uma forma que pode ser lida por uma máquina (por exemplo, um computador), mas não está limitado a, disquetes, discos óticos, CD, Memória de Leitura Apenas (CD-ROM), e discos magneto-óticos, Memória de Leitura Apenas (ROM), Memória de Acesso Ran-dômico (RAM), Memória de Leitura Apenas Programável e Eliminável (EPROM), Memória de Leitura Apenas Programável e Eletricamente Eliminável (EEPROM), cartões magnéticos ou óticos, memória flash, uma transmissão através da Internet, sinais elétricos, óticos, acústicos ou outras formas de sinais propagados (por exemplo, ondas transportadoras, sinais de infravermelho, sinais digitais, etc.) ou similares. De acordo, o meio que pode ser lido por computador inclui qualquer tipo de mídia/meio que pode ser lido por máquina adequado para armazenar ou transmitir instruções eletrônicas ou informação em uma forma que pode ser lida por uma máquina (por exemplo, um computador). Ademais, a presente invenção pode ser descarregada também como um produto de programa de computador. Como tal, o programa pode ser transferido de um computador remoto (por exemplo, um servidor) para um computador solicitante (por exemplo, um cliente). A transferência do programa pode ser por meio de sinais elétricos, óticos, acústicos ou outras formas de sinais de dados consubstanciados em uma onda transportadora ou outro meio de propagação através de uma conexão de comunicação (por exemplo, um modem, conexão de rede ou similar).
[0033] Um projeto pode passar por vários estágios, da criação à simulação à fabricação. Os dados que representam um desenho podem representar o desenho de várias formas. Primeiro, como é útil em simulações, o hardware pode ser representado utilizando uma linguagem de descrição de hardware ou outra linguagem de descrição funcional. Adicionalmente, um modelo de nível de circuito com portas de lógica e/ou transistor pode ser produzido em alguns estágios do processo do desenho. Adicionalmente, a maior parte dos desenhos, em algum estágio, atinge um nível de dados que representam a colocação física de vários dispositivos no modelo de hardware. No caso onde as técnicas de fabricação de semicondutor convencionais são utilizadas, os dados representando o modelo de hardware podem ser os dados que especificam a presença ou ausência de várias características em diferentes camadas de máscara para máscaras utilizadas para produzir o circuito integrado. Em qualquer representação do desenho, os dados podem ser armazenados em qualquer forma de um meio que pode ser lido por máquina. Uma onda ótica ou elétrica modulada ou de outra forma gerada para transmitir tal informação, uma memória, ou um armazenamento magnético ou ótico tal como um disco podem ser o meio que pode ser lido por máquina. Qualquer um desses meios podem "transportar" ou "indicar" o desenho ou informação de software. Quando uma onda transportadora elétrica indicando ou transportando o código ou desenho é transmitida, quando a cópia, armazenamento ou retransmissão do sinal elétrico é realizado, uma nova cópia é feita. Dessa forma, um provedor de comunicação ou um provedor de rede pode fazer cópias de um artigo (uma onda transportadora) consubstanciando as técnicas da presente invenção.
[0034] Nos processadores modernos, um número de unidades de execução diferentes são utilizadas para processar e executar uma variedade de código e instruções. Nem todas as instruções são criadas iguais visto que algumas são mais rápidas de completar, enquanto outras podem levar um número enorme de ciclos de relógio. Quanto mais rápido o resultado das instruções, melhor o desempenho geral do processador. Dessa forma, seria vantajoso se ter o maior número de instruções executadas o mais rápido possível. No entanto, existem determinadas instruções que apresentam maior complexidade e exigem mais em termos de tempo de execução e recursos de processador. Por exemplo, existem instruções flutuantes, operações de car-ga/armazenamento, movimentação de dados, etc.
[0035] Visto que mais e mais sistemas de computador são utilizados na Internet e aplicativos de multimídia, um suporte de processador adicional foi introduzido com o tempo. Por exemplo, Instrução Única, instruções flutuantes/Dados Múltiplos (SIMD) e Extensões de Sequência SIMD (SSE) são instruções que reduzem o número geral de instruções necessárias para executar uma tarefa de programa particular, que por sua vez pode reduzir o consumo de energia. Essas instruções podem acelerar o desempenho do software operando múltiplos elementos de dados em paralelo. Como resultado disso, os ganhos de desempenho podem ser alcançados em uma ampla faixa de aplicativos incluindo processamento de vídeo, fala, e imagem/fotografia. A implementação das instruções SIMD nos microprocessadores e tipos similares de circuito lógico normalmente envolve um número de tarefas. Adicionalmente, a complexidade das operações SIMD frequentemente leva a uma necessidade de se ter circuitos adicionais a fim de processar corretamente e manipular os dados.
[0036] Atualmente, uma instrução de sinal SIMD que multiplica não está disponível. Nem existe uma instrução SIMD para operações de valor absoluto. Sem a presença de uma operação de sinal que multiplica, um grande número de instruções e registros de dados é necessário para realizar os mesmos resultados nos aplicativos tal como compressão, processamento e manipulação de áudio/vídeo. Dessa forma, instruções de sinal de acordo com a presente invenção podem reduzir o overhead de código e as exigências de recurso. As modalidades da presente invenção fornecem uma forma de implementar uma operação de sinal como um algoritmo que faz uso do hardware relacionado com SIMD. Algumas modalidades também fornecem formas de se implementar uma operação de valor absoluto. Atualmente, é difícil e entediante operar em dados em um registro SIMD. Alguns algoritmos exigem mais instruções para executar essas operações. Pela implementação das modalidades de uma operação de sinal que multiplica de acordo com a presente invenção, o número de instruções necessário para se alcançar o processamento de sinal pode ser drasticamente reduzido.
[0037] As modalidades da presente invenção envolvem uma instrução para a implementação de uma variação de uma operação de signo. Uma operação de signo determina se um determinado número é positivo, negativo ou igual a zero. Durante uma operação de signo, a função avalia um número como: para x > 0, signum(x) = 1; para x = 0, signum(x) = 0; e para x< 0, signum(x) = 1. No entanto, em aplicativos de multimídia, a multiplicação de um valor de dados pelo sinal de outro valor é frequentemente necessária durante vários algoritmos. Uma operação de sinal que multiplica pode evitar ter que se realizar muitas operações separadas. As modalidades da presente operação de sinal fornecem maior funcionalidade do que o signo e também incluem a multiplicação.
[0038] Uma instrução de sinal de acordo com a presente invenção computa a operação: DEST=SRC1XSIGNUM(SRC2). Se SRC2 for positivo, o signo de SRC2 fornecerá um valor de "+Γ. Se SRC2 for igual a zero, o resultado do signo de SRC2 é igual a zero. Se SRC2 for negativo, então o signo de SRC2 é "-Γ. A operação de sinal que multiplica como na modalidade da presente invenção pega o signo de um segundo elemento de dados e multiplica o resultado do signo pelo valor de um primeiro elemento de dados para obter um produto resultante. A operação de sinal de uma modalidade como aplicada a um elemento de dados individual pode ser representada como: [0039] se SOURCE2<0, então DEST=SOURCE1x"-1";
[0040] ou se SOURCE2=0, então DEST=0;
[0041] ou se SOURCE2>0, então DEST=SOURCE1x"+".
[0042] Para um operado de dados em pacote, esse fluxo pode ser aplicado a cada posição de elemento de dados.
[0043] Adicionalmente, uma modalidade de uma operação de sinal que multiplica também pode repetir a operação de signo pela utilização do valor "1" como o primeiro elemento fonte e o valor de interesse como o segundo elemento fonte em uma operação de sinal. Visto que a operação de sinal dessa modalidade causa uma multiplicação do primeiro elemento fonte com um dentre "+Γ, "0" ou "-1" com base no valor de sinal do segundo elemento, o signo pode ser duplicado aqui. De forma similar, as modalidades da operação de sinal dessa invenção também podem realizar operações de valor absoluto pela configuração do primeiro elemento fonte na operação de sinal igual ao segundo elemento fonte. Isso é obtenível visto que o valor fonte será essencialmente multiplicada por seu próprio sinal, tornando, assim, o valor resultante um "0" ou positivo.
[0044] A figura 1a é um diagrama em bloco de um sistema de computador ilustrativo formado com um processador que inclui unidades de execução para executar uma instrução para uma operação de sinal que multiplica de acordo com uma modalidade da presente in- venção. O sistema 100 inclui um componente, tal como um processador 102 para empregar unidades de execução incluindo lógica para realizar algoritmos para processar dados, de acordo com a presente invenção, tal como na modalidade descrita aqui. O sistema 100 representa os sistemas de processamento com base nos microprocessadores PENTIUM®III, PENTIUM®4, Xeon®, Itanium®, XScale®, e/ou Stron-gARM® disponíveis em Intel Corporation de Santa Clara, Califórnia, apesar de outros sistemas (incluindo os PCs possuindo outros microprocessadores, estações de trabalho de engenharia, set-top boxes e similares) também possam ser utilizados. Em uma modalidade, o sistema amostrado 100 pode executar uma versão do sistema operacional WINDOWS® disponível na Microsoft Corporation de Redmond, Washington, apesar de outros sistemas de operação (UNIX e Linux, por exemplo), software embutido, e/ou interfaces de usuário gráficas, também possam ser utilizados. Dessa forma, a presente invenção não está limitada a qualquer combinação específica de circuito de hardware e software.
[0045] A presente melhoria não está limitada a sistemas de computador. As modalidades alternativas da presente invenção podem ser utilizadas em outros dispositivos, tais como dispositivos portáteis e aplicativos embutidos. Alguns exemplos de dispositivos portáteis incluem telefones celulares, dispositivos de Protocolo de Internet, câmeras digitais, assistentes digitais pessoais (PDAs), e PCs portáteis. Os aplicativos embutidos podem incluir um microcontrolador, um processador de sinal digital (DSP), sistema em um chip, computadores em rede (NetPC), caixas de set top, cubos de rede, comutadores de rede de área ampla (WAN), ou qualquer outro sistema que realize operações de sinal e/ou valor absoluto nos operandos. Adicionalmente, algumas arquiteturas foram implementadas para permitir que as instruções operem em vários dados simultaneamente para aperfeiçoar a eficiência de aplicativos de multimídia. À medida que o tipo e o volume de dados aumentam, os computadores e seus processadores precisam ser melhorados para manipular os dados em métodos mais eficientes.
[0046] A figura 1a é um diagrama em bloco de um sistema de computador 100 formado com um processador 102 que inclui uma ou mais unidades de execução 108 para realizar um algoritmo para extrair o sinal de um elemento de dados de um operando e multiplicar esse sinal por outro elemento de dados de acordo com a presente invenção. A presente modalidade é descrita no contexto de uma área de trabalho ("desktop") de processador único ou sistema servidor, mas modalidades alternativas podem ser incluídas em um sistema multiprocessador. O sistema 100 é um exemplo de uma arquitetura de cubo. O sistema de computador 100 inclui um processador 102 para processar sinais de dados. O processador 102 pode ser um microprocessador de computador de configuração de instrução complexa (CISC), um microprocessador de computação de configuração de instrução reduzida (RISC), um microprocessador de palavra de instrução muito longa (VLIW), um processador implementando uma combinação de conjuntos de instrução, ou qualquer outro dispositivo de processador, tal como um processador de sinal digital, por exemplo. O processador 102 é acoplado a um barramento de processador 110 que pode transmitir sinais de dados entre o processador 102 e outros componentes no sistema 100. Os elementos do sistema 100 realizam suas funções convencionais que são bem-conhecidas aos versados na técnica.
[0047] Em uma modalidade, o processador 102 inclui uma memória de armazenamento temporário interno de Nível 1 (L1) 104. Dependendo da arquitetura, o processador 102 pode ter um armazenador temporário interno único ou múltiplos níveis de armazenador temporário interno. Alternativamente, em outra modalidade, a memória de armazenamento temporário pode residir fora do processador 102. Outras modalidades também podem incluir uma combinação de ambos os armazenadores temporários interno e externo dependendo da implementação e das necessidades em particular. O arquivo de registro 106 pode armazenar diferentes tipos de dados em vários registros incluindo registros inteiros, registros flutuantes, registros de situação e registro de apontador de instrução.
[0048] A unidade de execução 108, incluindo a lógica para realizar as operações de inteiro e ponto flutuante, também reside no processador 102. O processador 102 também inclui uma ROM de microcódigo (pcode) que armazena o microcódigo para determinadas macroinstru-ções. Para essa modalidade, a unidade de execução 108 inclui a lógica para manipular um conjunto de instruções em pacote 109. Em uma modalidade, o conjunto de instruções em pacote 109 inclui uma instrução de sinal em pacote para modificar o valor de sinal dos dados. Pela inclusão do conjunto de instrução em pacote 109 no conjunto de instrução de um processador de finalidade geral 102, juntamente com os circuitos associados para executar as instruções, as operações utilizadas por muitos aplicativos de multimídia podem ser realizadas utilizando-se dados em pacote em um processador de finalidade geral 102. Dessa forma, muitos aplicativos de multimídia podem ser acelerados e executados de forma mais eficiente pela utilização de toda a largura de um barramento de dados do processador para a realização das operações em dados em pacote. Isso pode eliminar a necessidade de se transferir unidades menores de dados através do barramento de dados do processador para realizar uma ou mais operações no elemento de dados de uma vez.
[0049] Modalidades alternativas de uma unidade de execução 108 também podem ser utilizadas em microcontroladores, processadores embutidos, dispositivos gráficos, DSPs, e outros tipos de circuitos lógicos. O sistema 100 inclui uma memória 120. A memória 120 pode ser um dispositivo de memória de acesso randômico dinâmico {DRAM), um dispositivo de memória de acesso randômico estático (SRAM), um dispositivo de memória flash, ou outro dispositivo de memória. A memória 120 pode armazenar instruções e/ou dados representados por sinais de dados que podem ser executados pelo processador 102.
[0050] Um chip de lógica de sistema 116 é acoplado ao barramen-to do processador 110 e à memória 120, O chip de lógica de sistema 116 na modalidade ilustrada é um cubo controlador de memória (MCH), O processador 102 pode se comunicar com o MCH 116 através de um barra mento de processador 110. O MCH 116 fornece um percurso de memória de largura de banda alta 118 para a memória 120 para o armazenamento de instrução e dados e para o armazenamento de comandos gráficos, dados e texturas. O MCH 116 direciona os sinais de dados entre o processador 102, memória 120, e outros componentes no sistema 100 e para criar uma ponte para os sinais de dados entre o barramento do processador 110, a memória 120, e o sistema de E/S 122, Em algumas modalidades, o chip de lógica de sistema 116 pode fornecer uma porta gráfica para acoplar a um controlador gráfico 112. O MCH 116 é acoplado à memória 120 através de uma interface de memória 118, O cartão gráfico 112 é acoplado ao MCH 116 através de uma ínterconexão de Porta Gráfica Acelerada (AGP) 114.
[0051] O sistema 100 utiliza um barramento de interface de cubo proprietário 122 para acoplar o MCH 116 ao cubo do controlador de E/S (ICH) 130. O ICH 130 fornece conexões diretas com alguns dispositivos de E/S através de um barramento de E/S local, O barramento de E/S local é um barramento de E/S de alta velocidade para conectar periféricos à memória 120, conjunto de chip e processador 102. Alguns exemplos são o controlador de áudio, o cubo de firmware {flash BIOS) 128, o transceptor sem fio 126, o armazenamento de dados 124, o controlador de E/S ligado contendo interfaces de registro de usuário e teclado, uma porta de expansão serial, tal como o Barramento Serial Universal (USB), e um controlador de rede 134. O dispositivo de armazenamento de dados 124 pode compreender um drive de disco rígido, um drive de disco flexível, um dispositivo de CD-ROM, um dispositivo de memória flash, ou outro dispositivo de armazenamento em massa.
[0052] Para outra modalidade de um sistema, uma unidade de execução para executar um algoritmo com uma instrução de sinal pode ser utilizada com um sistema em um chip. Uma modalidade de um sistema em um chip compreende um processador e uma memória. A memória para um sistema como esse é uma memória flash. A memória flash pode ser localizada na mesma matriz que o processador e outros componentes do sistema. Adicionalmente, outros blocos lógicos, tais como um controlador de memória ou controlador de gráfico também podem ser localizados em um sistema em um chip.
[0053] A figura 1b ilustra uma modalidade alternativa de um sistema de processamento de dados 140 que implementa os princípios da presente invenção. Uma modalidade do sistema de processamento de dados 140 é um processador de aplicativo lntel®Personallnternet Client Architecture (lntel®PCA) com tecnologia InteIXScale® (como descrito na www em developer.intel.com). Será prontamente apreciado pelos versados na técnica que as modalidades descritas aqui podem ser utilizadas com sistemas de processamento alternativos sem se distanciar do escopo da invenção.
[0054] O sistema de computador 140 compreende um núcleo de processamento 159 capaz de realizar operações SIMD incluindo um sinal e valor absoluto. Para uma modalidade, o núcleo de processamento 159 representa uma unidade de processamento de qualquer tipo de arquitetura, incluindo mas não limitado a, uma arquitetura tipo CISC, RISC ou VLIW. O núcleo de processamento 159 também pode ser adequado para a fabricação em uma ou mais tecnologias de processo e por ser representado em uma mídia que pode ser lida por máquina em detalhes suficientes, pode ser adequado para facilitar a dita fabricação.
[0055] O núcleo de processamento 159 compreende uma unidade de execução 142, um conjunto de arquivos de registro 145, e um de-codificador 144. O núcleo de processamento 159 também inclui circuitos adicionais (não ilustrados) que não são necessários para a compreensão da presente invenção. A unidade de execução 142 é utilizada para a execução de instruções recebidas pelo núcleo de processamento 159. Em adição ao reconhecimento das instruções de processador típicas, a unidade de execução 142 pode reconhecer as instruções no conjunto de instruções em pacote 143 para realizar as operações nos formatos de dados em pacote. O conjunto de instrução em pacote 143 inclui instruções para o suporte de operações de sinal e de valor absoluto, e pode incluir também outras instruções em pacote. A unidade de execução 142 é acoplada ao arquivo de registro 145 por um barramento interno. O arquivo de registro 145 representa uma área de armazenamento no núcleo de processamento 159 para o armazenamento de informação, incluindo dados. Como mencionado anteriormente, é compreendido que a área de armazenamento utilizada para o armazenamento de dados em pacote não é crítica. A unidade de execução 142 é acoplada ao decodificador 144. O decodificador 144 é utilizado para decodificar instruções recebidas pelo núcleo de processamento 159 em sinais de controle e/ou pontos de entrada de microcódi-go. Em resposta a esses sinais de controle e/ou pontos de entrada de microcódigo, a unidade de execução 142 realiza as operações adequadas.
[0056] O núcleo de processamento 159 é acoplado ao barramento 141 para comunicar com vários outros dispositivos de sistema, que podem incluir, mas não estão limitados a, por exemplo, o controle de memória de acesso randômico dinâmico sincronizado (SDRAM) 146, o controle de memória de acesso randômico estático (SRAM) 147, interface de memória flash de rajada 148, controle da associação internacional de cartão de memória de computador pessoal (PCMCIA)/cartão flash compacto (CF) 149, controle de monitor de cristal líquido (LCD) 150, controlador de acesso de memória direta (DMA) 151, e interface principal de barramento alternativo 152. Em uma modalidade, o sistema de processamento de dados 140 também pode compreender uma ponte de E/S 154 para comunicar com vários dispositivos de E/S através de um barramento de E/S 153. Tais dispositivos de E/S podem incluir mas não estão limitados a, por exemplo, receptor assíncrono universal/transmissor (UART) 155, barramento serial universal (USB) 156, UART Bluetooth sem fio 157 e interface de expansão de E/S 158.
[0057] Uma modalidade do sistema de processamento de dados 140 fornece as comunicações móvel, em rede e/ou sem fio e um núcleo de processamento 159 capaz de realizar operações SIMD incluindo uma operação de sinal ou valor absoluto. O núcleo de processamento 159 pode ser programado com vários algoritmos de áudio, vídeo, criação de imagem e comunicação incluindo transformações discretas, tais como uma transformação Walsh-Hadamard, uma transformação Fourier rápida (FFT), uma transformada co-seno discreta (DCT), e suas respectivas transformações inversas; técnicas de com-pressão/descompressão, tais como transformação de espaço de cor, estimativa de movimento de codificação de vídeo ou compensação do movimento de decodificação de vídeo; e funções de modula-ção/demodulação (MODEM) tais como modulação codificada por pulso (PCM).
[0058] A figura 1c ilustra outras modalidades alternativas de um sistema de processamento de dados capaz de realizar operações de sinal ou valor absoluto SIMD. De acordo com uma modalidade alternativa, o sistema de processamento de dados 160 pode incluir um processador principal 166, um coprocessador SIMD 161, uma memória temporária 167, e um sistema de entrada/saída 168. O sistema de en-trada/saída 168 pode opcionalmente ser acoplado a uma interface sem fio 169. O coprocessador SIMD 161 é capaz de realizar as operações SIMD incluindo de sinal ou valor absoluto. O núcleo de processamento 170 pode ser adequado para a fabricação em uma ou mais tecnologias de processo e por ser representado em uma mídia que pode ser lida por máquina em detalhes suficientes, pode ser adequado para facilitar a fabricação em todo ou parte do sistema de processamento de dados 160 incluindo o núcleo de processamento 170.
[0059] Para uma modalidade, o coprocessador SIMD 161 compreende uma unidade de execução 162 e um conjunto de arquivos de registro 164. Uma modalidade do processador principal 165 compreende um decodificador 165 para reconhecer as instruções do conjunto de instrução 163 incluindo as instruções de sinal e valor absoluto SIMD para execução pela unidade de execução 162. Para as modalidades alternativas, o coprocessador SIMD 161 também compreende pelo menos parte do decodificador 165b para decodificar as instruções do conjunto de instrução 163. O núcleo de processamento 170 também inclui circuitos adicionais (não ilustrados) que não são necessários para a compreensão da presente invenção.
[0060] Em operação, o processador principal 166 executa uma corrente de instruções de processamento de dados que controla as operações de processamento de dados de um tipo geral incluindo as interações com a memória temporária 167, e o sistema de entrada/saída 168. Embutidas dentro da corrente de instruções de processamento de dados encontram-se as instruções de coprocessador SIMD. O decodificador 165 do processador principal 166 reconhece essas instruções de coprocessador SIMD como sendo de um tipo que deve ser executado por um coprocessador SIMD anexo 161. Consequentemente, o processador principal 166 emite essas instruções de coprocessador SIMD (ou controla os sinais representando as instruções do coprocessador SIMD) no barramento do coprocessador 166 de onde são recebidas por qualquer um dos coprocessadores SIMD anexos. Nesse caso, o coprocessador SIMD 161 aceitará e executará qualquer instrução de coprocessador SIMD recebida endereçada ao mesmo.
[0061] Os dados podem ser recebidos através da interface sem fio 169 para processamento pelas instruções do coprocessador SIMD. Como um exemplo, a comunicação de voz pode ser recebida na forma de um sinal digital, que pode ser processado pelas instruções do coprocessador SIMD para regenerar as amostras de áudio digital que representam as comunicações de voz. Como outro exemplo, o áudio e/ou vídeo comprimido pode ser recebido na forma de uma corrente de bits digitais, que pode ser processada pelas instruções de coprocessador SIMD para regenerar as amostras de áudio digital e/ou quadros de vídeo em movimento. Para uma modalidade do núcleo de processamento 170, o processador principal 166, e um coprocessador SIMD 161 são integrados em um único núcleo de processamento 170 compreendendo uma unidade de execução 162, um conjunto de arquivos de registro 164, e um decodificador 165 para reconhecer as instruções do conjunto de instrução 163 incluindo as instruções de sinal e valor absoluto SIMD.
[0062] A figura 2 é um diagrama em bloco da microarquitetura para um processador 200 de uma modalidade que inclui circuitos lógicos para realizar uma operação de sinal que multiplica de acordo com a presente invenção. A operação de sinal também pode ser referida como uma operação de sinal em pacote e instrução de sinal em pacote como na discussão acima. Para uma modalidade da instrução de sinal, a instrução pode multiplicar um primeiro elemento de dados com o valor de sinal de um segundo elemento de dados. Essa instrução também pode ser referida como um sinal em pacote PSIGN. Nessa modalidade, a instrução de sinal também pode ser implementada para operar em elementos de dados possuindo tamanhos de byte, palavra, palavra dupla, palavra quadruplicada, etc. A extremidade dianteira em ordem 201 é a parte do processador 200 que recolhe as macroinstru-ções a serem executadas e prepara as mesmas para serem utilizadas posteriormente na sequência do processador. A extremidade dianteira 201 dessa modalidade inclui várias unidades. O pré-recolhedor de instrução 226 recolhe as macroinstruções da memória e alimenta as mesmas para um decodificador de instrução 228 que por sua vez decodifica as mesmas nas chamadas microinstruções primitivas ou mi-crooperações (também chamadas micro-op ou pops) que a máquina sabe como executar. A memória temporária residual 230 recolhe os uops decodificados e monta as mesmas em sequências ou traços ordenados por programa na fila uop 234 para execução. Quando a memória temporária residual 230 encontra uma macroinstrução complexa, a ROM de microcódigo 232 fornece uops necessários para completar a operação.
[0063] Muitas macroinstruções são convertidas em uma micro-op única, e outras várias micro-ops necessárias para completar a operação total. Nessa modalidade, se mais de quatro micro-ops forem necessárias para se completar uma macroinstrução, o decodificador 228 acessa a ROM de microcódigo 232 para realizar a macroinstrução. Para uma modalidade, uma instrução de sinal em pacote pode ser decodificada em um pequeno número de micro-ops para processar no decodificador de instrução 228. Em outra modalidade, uma instrução para um algoritmo de sinal em pacote pode ser armazenado dentro da ROM de microcódigo 232 no caso de um número de micro-ops ser necessário para realizar a operação. A memória temporária residual 230 se refere a uma porta lógica programável de ponto de entrada (PLA) para determinar um apontador de microinstrução para ler as sequências de micro-código para os algoritmos de sinal ou valor absoluto na ROM de microcódigo 232. Depois que a ROM de microcódigo 232 termina o sequenciamento das micro-ops para a macroinstrução atual, a extremidade dianteira 201 da máquina volta a recolher as micro-ops da memória temporária residual 230.
[0064] Alguns SIMD e outros tipos de multimídia de instruções são considerados instruções complexas. A maior parte das instruções relacionadas com o ponto flutuante também são instruções complexas. Como tal, quando o decodificador de instrução 228 encontra uma macroinstrução complexa, a ROM de microcódigo 232 é acessada na localização adequada para recuperar a sequência de microcódigo para essa macroinstrução. As várias micro-ops necessárias para a realização dessa macroinstrução são comunicadas para o motor de execução fora de ordem 203 para execução nas unidades de execução de inteiro e ponto flutuante adequadas.
[0065] O motor de execução fora de ordem 203 é onde as micro-instruções são preparadas para execução. A lógica de execução fora de ordem tem um número de armazenadores temporários para suavizar e reordenar o fluxo de microinstruções para otimizar o desempenho à medida que descem pela sequência e são programadas para execução. A lógica do alocador aloca os armazenadores temporários de máquina e recursos que cada uop necessita a fim de realizar a execução. Essa lógica de renomeação de registro renomeia os registros lógicos em registros em um arquivo de registro. O alocador também aloca um registro para cada uop em uma das duas filas uop, uma para operações de memória e uma para operações de não memória, em frente dos programadores de instrução: programador de memória, programador rápido 202, programador de flutuante lento/geral 204, e programador de ponto flutuante simples 206. Os programadores uop 202, 204, 206, determinam quando um uop está pronto para executar com base na prontidão de suas fontes de operando de registro de entrada dependente e na disponibilidade de recursos de execução que os uops precisam para completar sua operação. O programador rápido 202 dessa modalidade pode programar em cada metade do ciclo de relógio principal enquanto os outros programadores só podem programar uma vez por ciclo de relógio de processador principal. Os programadores arbitram para as portas de despacho para programar uops para execução.
[0066] Os arquivos de registro 208, 210, se encontram entre os programadores 202, 204, 206 e as unidades de execução 212, 214, 216, 218, 220, 222, 224 no bloco de execução 211. Existe um arquivo de registro separado 208, 210 para as operações de ponto flutuante e inteiro, respectivamente. Cada arquivo de registro 208, 210 dessa modalidade também inclui uma rede de desvio que pode desviar ou enviar apenas os resultados completados que ainda não foram escritos no arquivo de registro para novos pops dependentes. O arquivo de registro inteiro 208 e o arquivo de registro de ponto flutuante 210 são capazes também de comunicar dados com o outro. Para uma modalidade, o arquivo de registro inteiro 208 é dividido em dois arquivos de registro separados, um arquivo de registro para as bits de ordem baixa 32 de dados e um segundo arquivo de registro para os bits de alta ordem 32 de dados. O arquivo de registro de ponto flutuante 210 de uma modalidade possui entradas de 128 bits de largura visto que as instruções de ponto flutuante possuem tipicamente operandos de 64 a 128 bits de largura.
[0067] O bloco de execução 211 contém as unidades de execução 212, 214, 216, 218, 220, 222 e 224 onde as instruções são na verdade executadas. Essa seção inclui os arquivos de registro 208, 210 que armazenam os valores de operando de dados de ponto flutuante e inteiro que as microinstruções precisam para execução. O processador 200 dessa modalidade é constituído de um número de unidades de execução: unidade de geração de endereço (AGU) 212, AGU 214, ALU rápida 216, ALU rápida 218, ALU lenta 220, ALU de ponto flutuante 222, unidade de movimentação de ponto flutuante 224. Para essa modalidade, os blocos de execução de ponto flutuante 222, 224 executam as operações de ponto flutuante, MMX, SIMD, e SSE. A ALU de ponto flutuante 222 dessa modalidade inclui um divisor de ponto flutuante de 64 bits por 64 bits para executar a divisão, raiz quadrada, e micro-ops restantes. Para modalidades da presente invenção, qualquer ato envolvendo um valor de ponto flutuante ocorre com o hardware de ponto flutuante. Por exemplo, conversões entre o formato inteiro e o formato de ponto flutuante envolvem um arquivo de registro de ponto flutuante. De forma similar, uma operação de divisão de ponto flutuante acontece em um divisor de ponto flutuante. Por outro lado, tipos de números de ponto não-flutuante e inteiros são manuseados com os recursos de hardware de inteiros. As operações ALU simples e muito frequentes passam para as unidades de execução ALU de alta velocidade 216, 218. As ALUs rápidas 216, 218, dessa modalidade podem executar as operações rápidas com uma latência eficaz de meio ciclo de relógio. Para uma modalidade, as operações de inteiros mais complexas passam para a ALU lenta 220 visto que a ALU lenta 220 inclui hardware de execução de inteiros para o tipo de operações de latência longa, tal como um multiplicação, mudanças, lógica de indicação e processamento de ramificação. As operações de car-ga/armazenamento de memória são executadas pelas AGUs 212, 214. Para essa modalidade, as ALUs de inteiros 216, 218, 220 são descri- tas no contexto da realização das operações de inteiros em operandos de dados de 64 bits. Nas modalidades alternativas, as ALUs 216, 218, 220 podem ser implementadas para suportar uma variedade de bits de dados incluindo 16, 32, 128, 256, etc. De forma similar, as unidades de ponto flutuante 222, 224 podem ser implementadas para suportar uma faixa de operandos possuindo bits de várias larguras. Para uma modalidade, as unidades de ponto flutuante 222, 224 podem operar em operandos de dados em pacote de 128 bits de largura em conjunto com SIMD e instruções de multimídia.
[0068] Nessa modalidade, os programadores pops 202, 204, 206 despacham as operações dependentes antes da carga parente ter acabado de executar. À medida que as uops são programadas de forma especulativa e executadas no processador 200, o processador 200 também inclui a lógica para lidar com as perdas de memória. Se uma carga de dados é perdida na memória temporária de dados, podem haver operações dependentes em andamento na sequência que deixaram o programador com dados temporariamente incorretos. Um mecanismo de reprodução rastreia e executa novamente as instruções que utilizam os dados incorretos. Apenas as operações dependentes precisam ser reproduzidas e as independentes podem ser completadas. Os programadores e o mecanismo de reprodução de uma modalidade de um processador também são projetados para capturar as sequências de instrução para operações de sinal e valor absoluto.
[0069] O termo "registros" é utilizado aqui para se referir às localizações de armazenamento de processador embutido que são utilizadas como parte das macroinstruções para identificar os operandos. Em outras palavras, os registros referidos aqui são os que são visíveis a partir de fora do processador (da perspectiva de um programador). No entanto, os registros de uma modalidade não devem ser limitados em termos de significado a um tipo particular de circuito. Ao invés dis- so, um registro de uma modalidade só precisa ser capaz de armazenar e fornecer dados, e realizar as funções descritas aqui. Os registros descritos aqui podem ser implementados pelos circuitos dentro de um processador utilizando qualquer número de técnicas diferentes, tal como os registros físicos dedicados, os registros físicos dinamicamente alocados utilizando renomeação de registro, combinações dos registros físicos alocados dinamicamente e dedicados, etc. Em uma modalidade os registro de inteiros armazenam dados inteiros de trinta e dois bits. Um arquivo de registro de uma modalidade também contém oito registros SIMD de multimídia para os dados em pacote. Para a discussão abaixo, os registros são compreendidos como sendo registros de dados projetados para manter os dados em pacote, tal como os registros MMX® de 64 bits de largura (também referido como registros ‘mm’ em alguns casos) nos microprocessadores ativados com tecnologia MMX da Intel Corporation de Santa Clara, Califórnia. Esses registros MMX, disponíveis em ambas as formas de inteiros e ponto flutuante, podem operar com elementos de dados em pacote que acompanham as instruções SIMD e SSE. De forma similar, os registros XMM de 128 bits de largura referentes à tecnologia SSE2 também podem ser utilizados para manter tais operandos de dados em pacote. Nessa modalidade, no armazenamento de dados em pacote e dados inteiros, os registros não precisam diferenciar entre os dois tipos de dados.
[0070] Nos exemplos das figuras a seguir, um número de operandos de dados é descrito. A figura 3A ilustra várias representações de tipo de dados em pacote em registros de multimídia de acordo com uma modalidade da presente invenção. A figura 3A ilustra os tipos de dados para um byte em pacote 310, uma palavra em pacote 320, e uma palavra dupla em pacote (dword) 330 para operandos de 128 bits de largura. O formato de byte em pacote 310 desse exemplo tem 128 bits de comprimento e contém dezesseis elementos de dados de byte em pacote. Um byte é definido aqui como 8 bits de dados. A informação para cada elemento de dados de byte é armazenada do bit 7 até o bit 0 para o byte 0, do bit 15 até o bit 8 para o byte 1, do bit 23 até o bit 16 para o byte 2, e finalmente do bit 120 até o bit 127 para o byte 15. Dessa forma, todos os bits disponíveis são utilizados no registro. Essa disposição de armazenamento aumenta a eficiência de armazenamento do processador. Além disso, com dezesseis elementos de dados acessados, uma operação pode agora ser realizada em dezesseis elementos de dados em paralelo.
[0071] Geralmente, um elemento de dados é uma peça individual de dados que é armazenada em um único registro ou localização de memória com outros elementos de dados do mesmo comprimento. Nas sequências de dados em pacote referentes à tecnologia SSE2, o número de elementos de dados armazenados em um registro XMM é de 128 bits divididos pelo comprimento em bits de um elemento de dados individual. De forma similar, em sequências de dados em pacote referentes à tecnologia MMX e SSE, o número de elementos de dados armazenados em um registro MMX é de 64 bits divididos pelo comprimento em bits de um elemento de dados individual. Apesar dos tipos de dados ilustrados na figura 3A terem 128 bits de comprimento, as modalidades da presente invenção também podem operar com ope-randos de 64 bits de largura ou outro tamanho. O formato da palavra em pacote 320 desse exemplo tem 128 bits de comprimento e contém oito elementos de dados de palavra em pacote. Cada palavra em pacote contém dezesseis bits de informação. O formato de palavra dupla em pacote 330 da figura 3A tem 128 bits de comprimento e contém quatro elementos de dados de palavra dupla em pacote. Cada elemento de dados de palavra dupla em pacote contém trinta e dois bits de informação. Uma palavra quádrupla em pacote tem 128 bits de comprimento e contém dois elementos de dados de palavras quadruplica- das em pacote.
[0072] A figura 3B ilustra os formatos alternativos de armazenamento de dados em registro. Cada dado em pacote pode incluir mais de um elemento de dados independente. Três formatos de dados em pacote são ilustrados; meio pacote 341, pacote único 342, e pacote duplo 343. Uma modalidade do meio pacote 341, pacote único 342 e pacote duplo 343 contém elementos de dados de ponto fixo. Para uma modalidade alternativa um ou mais dos meio pacote 341, pacote único 342 e pacote duplo 343 podem conter elementos de dados de ponto flutuante. Uma modalidade alternativa do meio pacote 341 tem 128 bits de comprimento contendo oito elementos de dados de 16 bits. Uma modalidade do pacote único 341 tem 128 bits de comprimento e contém quatro elementos de dados de 32 bits. Uma modalidade do pacote duplo 343 tem 128 bits de comprimento e contém dois elementos de dados de 64 bits. Será apreciado que tais formatos de dados em pacote podem ser adicionalmente estendidos a outros comprimentos de registro, por exemplo para 96 bits, 160 bits, 192 bits, 224 bits, 256 bits ou mais.
[0073] A figura 3C ilustra várias representações do tipo de dados em pacote com sinal e sem sinal nos registros de multimídia de acordo com uma modalidade da presente invenção. A representação de byte em pacote sem sinal 344 ilustra o armazenamento de um byte em pacote sem sinal em um registro SIMD. A informação para cada elemento de dados de byte é armazenada no bit sete até o bit zero para o byte zero, do bit quinze até o bit oito para o byte um, do bit vinte e três até o bit dezesseis para o byte dois, e finalmente do bit cento e vinte até o bit centro e vinte e sete para o byte quinze. Dessa forma, todos os bits disponíveis são utilizados no registro. Essa disposição de armazenamento pode aumentar a eficiência de armazenamento do processador. Além disso, com dezesseis elementos de dados acessados, uma operação pode agora ser realizada em dezesseis elementos de dados de forma paralela, a representação de byte em pacote com sinal 345 ilustra o armazenamento de um byte em pacote com sinal. Note-se que o oitavo bit de cada elemento de dados de byte é o indicador de sinal. A representação de palavra em pacote sem sinal 346 ilustra como a palavra sete até a palavra zero são armazenadas em um registro SI MD. A representação de palavra em pacote com sinal 347 é similar à representação em registro da palavra em pacote sem sinal 346. Note-se que o décimo sexto bit de cada elemento de dados de palavra é o indicador de sinal. A representação de palavra dupla em pacote sem sinal 348 ilustra como elementos de dados de palavras duplas são armazenados. A representação de palavra dupla em pacote com sinal 349 é similar à representação em registro da palavra dupla em pacote sem sinal 348. Note-se que o bit de sinal necessário é o trigésimo segundo bit de cada elemento de dados de palavra dupla. [0074] A figura 3D é uma representação de uma modalidade de um formato de código de operação (opcode) 360, possuindo trinta e dois ou mais bits, e modos de endereça mento de o pe rand os de regis-tro/memória correspondendo a um tipo de formato de opcode descrito em ΊΑ-32 Intel Architecture Software Developeris Manual Volume 2: Instruction Set Reference", que está disponível na Intel Corporation, Santa Clara, Califórnia na www.intel.com/design/litcentr. O tipo de operação de sinal que multiplica pode ser codificado por um ou mais campos 361 e 362. Até duas localizações de operando por instrução podem ser identificadas, incluindo até dois identificadores de operando fonte 364 e 365. Para uma modalidade da instrução de sinal, o identificador de operando de destino 366 é igual ao identificador de operando fonte 364. Para uma modalidade alternativa o identificador de operando de destino 366 é igual ao identificador de operando fonte 365. Portanto, para as modalidades de uma operação de sinal que multiplica, um dos operandos fonte identificados pelos identificadores de operando fonte 364 e 365 é substituído pelos resultados das operações de sinal. Para uma modalidade da instrução de sinal, os identificadores de operando 364 e 365 podem ser utilizados para identificar os operandos fonte e destino de 64 bits.
[0075] A figura 3E é uma representação de outro formato de codificação de operação alternativo (opcode) 370, possuindo quarenta ou mais bits. O formato de opcode 370 corresponde ao formato opcode 360 e compreende um byte de prefixo opcional 378. O tipo de operação de sinal que multiplica, pode ser codificado por um ou mais campos 378, 371 e 372. Até duas localizações de operando por instrução podem ser identificadas pelos identificadores de operando fonte 374 e 375 e pelo byte de prefixo 378. Para uma modalidade da instrução de sinal, o byte de prefixo 378 pode ser utilizado para identificar os operandos fonte e de destino de 128 bits. Para uma modalidade da instrução de sinal, o identificador do operando de destino 376 é igual ao identificador do operando fonte 374. Para uma modalidade alternativa, o identificador do operando de destino 376 é igual ao identificador de operando fonte 375. Portanto, para as modalidades de operações de sinal que multiplicam, um dos operandos fonte identificados pelos identificadores de operando fonte 374 e 375 é substituído pelos resultados das operações de sinal. Os formatos de opcode 360 e 370 permitem o endereçamento de registro para registro, de memória para registro, de registro por memória, de registro por registro, de registro por imediato, e registro para memória especificados em parte pelos campos MOD 363 e 373 e pelos bytes de base de indexação de escala opcional e de deslocamento.
[0076] Voltando-se a seguir para a figura 3F, em algumas modalidades alternativas, as operações aritméticas de dados múltiplos e instrução única de 64 bits (SIMD) podem ser realizadas através da instru- ção de processamento de dados de coprocessador (CDP). O formato da codificação de operação (opcode) 380 representa um instrução CDP possuindo campos opcode CDP 382 e 389. O tipo de instrução CDP, para modalidades alternativas das operações de sinal ou valor absoluto, pode ser codificado por um ou mais campos 383, 384, 387 e 388. Até três localizações de operando por instrução podem ser definidas, incluindo até dois identificadores de operando fonte 385 e 390 e um identificador de operando de destino 386. Uma modalidade do coprocessador pode operar em valores de 8, 16, 32, e 64 bits. Para uma modalidade, a operação de sinal ou valor absoluto é realizada nos elementos de dados inteiros. Em algumas modalidades, uma instrução de sinal ou valor absoluto pode ser executada de forma condicional, utilizando o campo de condição 381. Para algumas instruções de sinal e valor absoluto os tamanhos de dados fonte podem ser codificados pelo campo 383. Em algumas modalidades de uma instrução de sinal ou valor absoluto, a detecção de zero (Z), negativo (N), transporte (C) e fluxo excessivo (V) pode ser realizada nos campos SIMD. Para algumas instruções, o tipo de saturação pode ser codificado pelo campo 384.
[0077] A figura 4 é um diagrama em bloco de uma modalidade da lógica para realizar uma operação de sinal em operandos de dados em pacote de acordo com a presente invenção. As modalidades da presente invenção podem ser implementadas para funcionar com vários tipos de operandos tais como os descritos acima. Para uma implementação, as operações de sinal de acordo com a presente invenção são implementadas como um conjunto de instruções para operar em tipos específicos de dados. Por exemplo, uma instrução de bytes de sinal em pacote (PSIGNB) causa o sinal para tipos de dados de bytes. Uma instrução de bytes duplas de sinal em pacote (PSIGNW) deve realizar as operações de sinal nos tipos de dados de palavra. Uma instrução de palavras duplas de sinal em pacote (PSIGND) realiza operações de sinal que multiplicam os tipos de dados de palavra dupla. Apesar dessas instruções possuírem nomes diferentes, a operação geral de sinal que multiplica funciona de forma similar. Para fins de simplicidade, as discussões e os exemplos abaixo estão no contexto de uma instrução de sinal em pacote (PSIGN) para processar elementos de dados.
[0078] A instrução PSIGN para uma operação de sinal que multiplica dessa modalidade começa com duas partes da informação: um primeiro operando de dados DATA A 410 e um segundo operando de dados DATA B 420. Para as discussões abaixo, DATA A, DATA B e RESULTANT são geralmente referidos como os operandos ou blocos de dados, mas não restritos como tais, e também incluem registros, arquivos de registro, e localizações de memória. Em uma modalidade, cada instrução de sinal (PSIGNB, PSIGNW, PSIGND) é decodificada em uma microoperação. Em uma modalidade alternativa, cada instrução pode ser decodificada em vários números de micro-ops para realizar a operação de sinal nos operados de dados. Para esse exemplo, os operandos 410, 420 têm partes de informação de 128 bits de largura armazenadas em um registro/memória fonte possuindo elementos de dados de largura de palavra. Em uma modalidade, os operandos 410, 420 são mantidos em registros SIMD de 128 bits de comprimento, tal como os registros XMM SSE2 de 128 bits. Para uma modalidade, o RESULTANT 440 também é um registro de dados XMM. Adicionalmente, RESULTANT 440 também pode ser o mesmo registro ou localização de memória que o dos operandos fonte. Dependendo da implementação particular, os operandos e registros podem ter outros comprimentos tais como 32, 64 e 256 bits, e possuem elementos de dados dimensionados como byte, palavra dupla ou palavra quádrupla. Apesar dos elementos de dados desse exemplo serão do tamanho da palavra, o mesmo conceito pode ser estendido aos elementos dimen- sionados como byte e palavra dupla. Onde os operandos de dados possuem 64 bits de largura, os registros MMX são úteis no lugar dos registros XMM.
[0079] O primeiro operando 410 nesse exemplo é constituído de um conjunto de oito elementos de dados: A7, A6, A5, A4, A3, A2, A1 e AO. Cada elemento de dados individual corresponde a uma posição de elemento de dados no resultante 440. O segundo operando 420 é constituído de outro conjunto de oito segmentos de dados: B7, B6, B5, B4, B3, B2, B1 e B0. Os segmentos de dados aqui possuem o comprimento igual e compreendem, cada um, uma única palavra (16 bits) de dados. No entanto, os elementos de dados e as posições dos elementos de dados podem possuir outras granulações além de palavras. Se cada elemento de dados fosse um byte (8 bits), uma palavra dupla (32 bits) ou uma palavra quádrupla (64 bits), os operandos de 128 bits teriam elementos de dados de dezesseis bytes de largura, quatro a largura de palavras duplas de largura, ou duas de largura de palavras quádruplas de largura, respectivamente. As modalidades da presente invenção não estão restritas aos operandos ou segmentos de dados de comprimento particular, e podem ser dimensionadas de forma adequada para cada implementação.
[0080] Os operandos 410, 420 podem residir em um registro ou localização de memória ou um arquivo de registro ou uma mistura. Os operandos de dados 410, 420 são enviados para a lógica de computação de sinal 430 de uma unidade de execução no processador juntamente com uma instrução de sinal. Na hora que a instrução de sinal alcançar a unidade de execução, a instrução já deve ter sido decodificada na sequência de processador. Dessa forma, a instrução de sinal pode estar na forma de uma microoperação (uop) ou algum outro formato decodificado. Para essa modalidade, os dois operandos de dados 410, 420 são recebidos na lógica de computação de sinal 430. A lógica de computação de sinal 430 seleciona o valor de sinal ou signo para cada elemento de dados do primeiro operando 410, multiplica esse valor de sinal pelo valor do elemento de dados na posição correspondente do elemento de dados do segundo operando 420, e coloca o produto dessa multiplicação na posição adequada no resultante 440. Apesar do conceito geral de uma operação de multiplicação ser discutido aqui, outros métodos e meios de se alcançar os mesmos resultados desejados como uma multiplicação com uma multiplicação são possíveis. Por exemplo, em uma modalidade, a multiplicação pode ser realizada com uma unidade de multiplicação. Em outra modalidade, os mesmos resultados podem ser obtidos pela lógica para processar um algoritmo para deixar um valor inalterado, configurado para zero, ou alterar um sinal de "+" para ou vice-versa.
[0081] Esse processamento de extração e multiplicação de sinal é repetido para todo o conjunto de posições de elemento de dados no primeiro operando 410. Apesar do processamento de dados dessa modalidade ser constituído da extração e multiplicação de sinal, os termos ‘operação de sinal’ ou ‘operação de sinal que multiplica’ também podem ser utilizados geralmente aqui para se referir a esse processamento de dados. Para uma modalidade, os elementos de dados para todas as posições de dados são processados em paralelo. Em outra modalidade, uma determinada parte das posições do elemento de dados pode ser processada junto de uma vez. Aqui, o resultante 440 é constituído de oito produtos: B7xSIGNA7, B6xSIGNA6, B5xSINGA5, B4xSIGNA4, B3xSIGNA3, B2xSIGNA2, B1xSIGNa1 e B0xSIGNA0. Para essa modalidade, o valor de signo ou sinal (SIGNX) para um elemento de dados é um "+1" para um número positivo diferente de zero, um "-1" para um número negativo diferente de zero, e um "0" para um zero. Em uma modalidade alternativa onde a arquitetura segue de um "+0" e um "-0", ambos os tipos de zero são tratados como um zero, onde o valor do signo ou sinal do elemento de dados é um "0".
[0082] A figura 5 ilustra a operação de uma operação de sinal que multiplica nos elementos de dados de acordo com uma modalidade da presente invenção. A operação de sinal desse exemplo pode ocorrer dentro da lógica de computação de sinal 430 da figura 4. Nesse exemplo, a operação de sinal 530 é descrita com os elementos de dados para uma única posição de elemento de dados. Um primeiro elemento de dados DATA ELEMENT A 510, de um primeiro operando de dados e um segundo elemento de dados, DATA ELEMENT B 520, de um segundo operando de dados são colocados juntos. Cada elemento de dados é constituído de um valor possuindo uma parte de sinal e uma parte base de valor numérico. Por exemplo, DATA ELEMENT A 510 é interpretado como um número 512 constituído de SIGNA e BASEa. De forma similar, DATA ELEMENT B 520, é interpretado como um número 522 constituído de SIGNB e BASEb.
[0083] Durante a operação de sinal 530, a lógica de computação de sinal recolhe o valor de sinal do primeiro operando, SIGNA para o DATA ELEMENT A 510, e multiplica esse valor de sinal pelo número no DATA ELEMENT B 520. Em um caso, a lógica realiza a operação de multiplicação adequada em resposta ao valor de SIGNA. A parte de sinal para um número pode ser negativa ou positiva “+’. A parte de valor de um número pode ser zero Ό’ ou um valor diferente de zero. Para a operação de sinal de uma modalidade, a lógica armazena o primeiro elemento de dados em uma das três categorias: positiva “+’, zero ‘0’, ou negativa Se o primeiro elemento de dados 510 for positivo, significando que seu sinal é positivo, então o resultado 540 para essa posição de dados é essencialmente o segundo elemento de dados 520 propriamente dito, visto que um sinal positivo é tratado como uma multiplicação do segundo elemento de dados 520 por um SIGNA igual a "+Γ. Se o primeiro elemento de dados 510 for igual a zero, o valor de sinal do primeiro elemento de dados 510 é desconsiderado visto que o zero está essencialmente solicitando uma multiplicação do segundo elemento de dados 520 por SIGNA igual a zero, o que resulta em um resultado 540 igual a zero. Se o primeiro elemento de dados 510 for negativo, significando que seu sinal é negativo, então o resultado 540 para essa posição de dados será o produto da multiplicação do segundo elemento de dados 520 por um SIGNA igual a ‘-1’. O resultado 540 da operação de sinal que multiplica para uma determinada posição de elemento de dados envolvendo DATA ELEMENT A 510 e DATA ELEMENT B 520 é ‘SIGNA x DATA ELEMENTB’. Em outra modalidade, a lógica pode ser capaz de multiplicar os valores de sinal, SIGNa e SIGNb juntos e aplicar o valor de sinal resultante à BASEb para formar o resultado final para essa posição de elemento de dados.
[0084] A figura 6A é um diagrama em bloco de uma modalidade de um circuito 600 para a realização de uma operação de sinal que multiplica de acordo com a presente invenção. O circuito 600 dessa modalidade compreende uma estrutura de multiplexação e uma lógica para avaliar o valor de sinal de um elemento a partir do primeiro operando fonte e para calcular efetivamente o produto desse valor de sinal com um elemento correspondente a partir do segundo operando fonte. O circuito 600 na figura 6A é ilustrado para uma posição de elemento de dados ou fatia do bloco de dados em pacote resultante para simplificar a discussão. Adicionalmente, a lógica 600 como ilustrada para essa posição de elemento de dados pode existir em múltiplos casos na mesma unidade de execução. Dependendo da implementação particular, um número de elementos de circuito são extrapolados como necessário para o número desejado de elementos de dados. Por exemplo, com oito elementos de dados, multiplexadores e somadores suficientes para manusear todos os bits de oito elementos de dados po- dem estar fisicamente presentes. De forma similar, podem haver dezesseis casos de circuitos para manusear dois operandos possuindo dezesseis elementos de dados cada. Em outra modalidade, parte da lógica como o somador 614, por exemplo, pode ser compartilhada entre todas as posições de elemento de dados. Em outra implementação, os circuitos são capazes de processar dados em pacote e dados para múltiplas posições de elemento de dados podem ser processados através da lógica juntos.
[0085] Para essa modalidade, uma parte da lógica para a operação de sinal também é compartilhada com outras operações em pacote a fim de reduzir a contagem e redundância do dispositivo. O circuito 600 dessa modalidade recebe os elementos de dados de entrada dos operandos fonte e envia um elemento de dados resultante para uma posição de elemento de dados particular em um operando de dados em pacote resultante. Apesar dos elementos fonte, SRC X 602 e SRC Y 604 serem referidos como elementos de dado único aqui, deve-se compreender que esses elementos são parte dos operandos de dados em pacote maiores que acompanham uma instrução de sinal em pacote. Nessa modalidade, o primeiro elemento de dados fonte, SRC X 602, é acoplado a dois multiplexadores (mux) de entrada (2:1) 606. Um sinal SIGN 622 controla a operação desse mux 2:1. Para essa modalidade, se uma operação de sinal estiver sendo servida, SIGN 622 faz com que o mux 606 envie ο Ό’ que está acoplado como segunda entrada para o mux 606. Se outro tipo de operação estiver sendo realizada, SIGN 622 faz com que mux 606 envie SRC X 602.
[0086] O segundo elemento de dados fonte, SRC Y 604 dessa modalidade é acoplado a outro mux 2:1 608 como versões invertida 605 e não-invertida 604. Se uma operação de sinal estiver sendo realizada, SIGN 622 faz com que mux 608 envie a entrada invertida 605. Nesse exemplo, a versão invertida 605 de SRC Y 604 pode ser utiliza- da para alcançar uma subtração. Os dois multiplexadores 606, 608 são acoplados a um somador 614. As saídas mux 610, 612 são as primeira e segunda entradas, respectivamente, no somador 614. O somador 614 serve para somar suas entradas para gerar uma soma em sua saída 616. Durante uma operação de sinal, o somador recebe Ό’ como sua primeira entrada 610 e o SRC Y invertido 605 como seu segunda entrada 612. O somador 614 aparece para somar o SRC Y invertido 605 a Ό’ 603. Mas a inversão de SRC Y 604 dessa modalidade causa basicamente a mudança de sinal do SRC Y 604 de positivo para negativo ou de negativo para positivo. Dessa forma, o SRC Y 605 invertido essencialmente faz com que o somador 614 subtraia matematicamente SRC Y 604 do Ό’ 603. A saída 616 do somador 614 pode ser representada como a soma de Ό-SRC Y’.
[0087] Os bits de dados de SRC Y 602 também são acoplados a um circuito detetor zero 624, que serve para detectar se SRC X 602 é igual a um valor de zero. A saída do detetor de zero 626 que indica se um valor geral igual a zero é detectado e acoplado como um sinal de controle a um mux (3:1) de três entradas 618 e como uma entrada em uma porta lógica NOR 628. A detecção zero de uma modalidade é realizada em paralelo com a adição e não cria qualquer percurso de tem-porização crítico novo. Os N bits de sinal 620 do SRC X 602, N sendo um número de um ou mais, também são acoplados à porta NOR lógica 628 e como um controle ao mux 3:1 618. Essa porta NOR 628 é a saída de um sinal alto ativo se ambas as suas entradas forem baixas ativas. Nesse exemplo, a saída da porta NOR 632 será alta se ambas as entradas dos bits de sinal 620 forem baixas, indicando que SRC X 602 é positivo, e a entrada do resultado dos detetores zero é baixa, indicando que SRC X 602 é um valor diferente de zero.
[0088] O grupo de sinais de controle 634 acoplado ao mux 3:1 618 opera para selecionar o valor de dados adequado para enviar como resultante 630. Os valores de dados do SRC X 602, SRC Y 604 e a soma de Ό-SRC Y’ 616 são acoplados como entradas no mux 3:1 618. Para essa modalidade, os sinais 634 servem para fazer com que uma das entradas seja selecionada de acordo com uma das três situações. O primeiro caso surge se o primeiro elemento fonte SRC X 602 for igual a zero. Em outras palavras, o segundo elemento de dados 604 deve ser multiplicado por zero. Essa condição é indicada com saída de detetor zero 626. Nessa situação, a entrada do SRC X 602, que é um valor igual a zero aqui, é selecionada e enviada como resultante 630. Nessa modalidade, esse zero condiciona os outros sinais de controle 620, 632 a serem superados e zero é enviado independentemente do valor de sinal de SRC X 602 e do conteúdo de SRC Y 604.
[0089] O segundo caso surge se o primeiro elemento fonte SRC X 602 for positivo e um valor diferente de zero. Essa condição é indicada com a saída de porta NOR 632. Essencialmente, o segundo elemento de dados 604 deve ser multiplicado por "+Γ, que resultará no SRC Y 604 propriamente dito. Nesse caso, a entrada do SRC Y 604 é selecionada e enviada como resultante 630. O terceiro caso surge se o primeiro elemento fonte SRC X 602 for negativo e um valor diferente de zero. Essa situação é indicada com os N bits de sinal 620 do SRC X 602, que fornecem um valor ativo alto se SRC X 602 for negativo e um valor ativo baixo de SRC X 602 for positivo. Nesse caso, a entrada da soma para Ό-SRC Y’ 616 é selecionada e enviada como resultante 630. Essencialmente, o sinal negativo de SRC X 602 é tratado como um "-1" e o cálculo de "0-SRC Y" é matematicamente equivalente a uma multiplicação do segundo elemento de dados SRC Y 604 por um fator de "-Γ. Para essa modalidade, os resultantes para isso e as outras posições de elemento de dados são empacotados juntos em um bloco de dados resultante possuindo o mesmo tamanho que os ope-randos de dados fonte. Por exemplo se os operados de dados em pa- cote fonte tiverem 64 ou 128 bits de largura, o bloco de dados em pacote resultante também terá 64 ou 128 bits de largura, respectivamente. Adicionalmente, os operandos de dados fonte para uma operação de sinal podem vir de um registro ou um local de memória. Para essa modalidade, o bloco de dados em pacote resultante substitui os dados no registro SIMD por um dos operandos de dados fonte.
[0090] A figura 6B é um diagrama em bloco de outra modalidade de um circuito 650 para a realização de uma operação de sinal de acordo com a presente invenção. Enquanto a disposição e as conexões de circuito são diferentes, os esquema e funcionalidade gerais dessa modalidade são similares aos do circuito 600 na figura 6A. O circuito 650 dessa modalidade também inclui uma estrutura de multi-plexação e lógica para avaliar o sinal de um primeiro elemento de dados e para multiplicar esse sinal por um segundo elemento de dados. Esse circuito 650 é ilustrado e descrito no contexto de uma única posição ou fatia de elemento de dados do operando em pacote resultante, mas o aparelho e a metodologia podem ser estendidos como necessário e aplicados a operandos de comprimentos variáveis com base na implementação particular. Dessa forma, determinados elementos de circuito da figura 6b podem ser duplicados a fim de servirem a um maior número de elementos de dados. Por exemplo, se os operandos forem capazes de incluir dezesseis posições de elemento de dados, o circuito da figura 6b pode ser expandido para suportar as dezesseis posições de elemento de dados.
[0091] O circuito 650 dessa modalidade recebe dados de entrada como um primeiro elemento de dados SRC X 602 de um primeiro operando em pacote e um segundo elemento de dados SRC Y 604 de um segundo operando em pacote. SRC X 602 é acoplado como uma entrada a um mux 3:1 618 e à lógica de detetor de zero 624. O detetor de zero 624 serve para determinar se SRC X 604 é igual a zero. SRC Y
604 é acoplado ao mux 3:1 618 e uma versão invertida 613 (-SRC Y) é acoplada a um somador 614. O somador 614 deve somar o SRC Y 613 invertido a outra entrada do somador, Ό’ 603 nesse caso, para obter uma soma em sua saída 616. Pela soma de uma versão invertida de SRC Y 604, o somador está somando zero com SRC Y negativo, ou subtraindo, matematicamente, SRC Y de Ό’. A saída 616 do somador 614 é Ό-SRC Y’eé acoplado como uma entrada ao mux 3:1 618. O valor Ό-SRC Y’ também é equivalente à multiplicação de SRC Y 604 por "-1".
[0092] O sinal de saída 626 do circuito de detetor de zero 624 é acoplado como um sinal de controle ao mux 3:1 618 e também como uma entrada em uma porta NOR lógica de duas entradas 628. De forma similar, os N bits de sinal 620 do SRC X 602 são acoplados ao mux 3:1 618 como um controle e como a outra entrada para a porta NOR 628. A saída 632 da porta NOR 628 para essa modalidade é ativa alta se os bits de sinal 628 e a saída do detetor de zero 626 forem ambos ativos baixos. A saída da porta NOR 632 também é acoplada ao mux 3:1 618 como um sinal de controle. Esse conjunto de sinais de controle 634 serve para selecionar uma das três entradas de mux 602, 604, 616 para enviar como resultante 630 dependendo de quais condições existirem. As três situações, como descrito acima para a figura 6A são: (1) SRC X 602 igual a zero; (2) SRC X 602 é positivo e um valor diferente de zero; e (3) SRC X 602 é negativo e um valor diferente de zero. Para o primeiro caso, SRC X 602, que será igual a zero, é selecionado. No segundo caso, SRC Y 604, que é igual a "SRC Y x +1", é selecionado. Para o terceiro caso, Ό-SRC Y’ 616, que é igual a ‘SRC Y x -1’ é selecionado. O resultante para cada posição de elemento de dados é empacotado juntamente com outros em um operando de dados de resultante.
[0093] A figura 7 ilustra a operação de uma instrução de sinal em pacote em uma pluralidade de elementos de dados de acordo com uma modalidade da presente invenção. Esse é um exemplo da instrução "PSIGNW DATA B, DATA A". A instrução PSIGNW serve para causar uma operação de sinal que multiplica para operar nos elementos de dados de tamanho de palavra no primeiro operando em pacote fonte DATA B 711 e no segundo operando em pacote fonte DATA A 701. A descrição aqui também é aplicável a outras instruções de sinal em pacote como PSIGNB e PSIGND. Nesse exemplo, os sinais de um dado fonte 701 são aplicados aos valores dos outros dados fonte 711 através da multiplicação para obter um produto que seja organizado em um dispositivo de armazenamento de dados de destino 721. Os dois operandos fonte, DATA A 701 e DATA B 711, são cada um constituídos de oito elementos de dados em pacote nesse exemplo, como o resultante 721. Nessa modalidade, cada um dos elementos de dados envolvidos tem oito bits ou um byte de largura. Dessa forma, os blocos de dados DATA A 701, DATA B 711, e RESULTANT 721 possuem, cada um, 128 bits de comprimento. Adicionalmente, esses blocos de dados podem residir na memória e/ou registros.
[0094] Como ilustrado na figura 7, DATA A 702 inclui elementos de dados com valores numéricos na base 10 de: -4270’ 702, ‘240’ 703, ‘3573’ 704, ‘7033’ 705, ‘-2427’ 706, ‘-9703’ 707, ‘0’ 708, ‘2605’ 709. De forma similar, DATA B 711 inclui elementos de dados fonte com valores básicos 10 de: ‘-1120’ 712, ‘6401’ 713, ‘36’ 714, ‘0’ 715, ‘691’ 716, ‘-6780’ 717, ‘-855’ 718, ‘5177’ 719. Os 10 números da base são adicionalmente notados abaixo com um sufixo subscrito 10. De acordo, o sinal para cada elemento de dados no segundo operando de dados 701 é extraído e multiplicado pelo número de cada elemento de dados na posição correspondente do elemento de dados no primeiro operando de dados 711. Se um número for ‘0’ para um elemento de dados no segundo operando 701, um ‘0’ também será registrado na posição cor- respondente do elemento de dados resultante. Para uma modalidade, o processamento de uma operação de sinal que multiplica para uma ou mais posições de elemento de dados nos dados fonte 701, 711 pode ser realizado em paralelo.
[0095] À medida que o valor de sinal para cada um dos elementos de dados no segundo operando 701 são avaliados, o número na posição correspondente do elemento de dados no primeiro operando 711 é multiplicado pelo fator adequado. Para essa modalidade, o multiplicando é '-1 ’, Ό’, ou ‘+1’, dependendo do valor do sinal do segundo elemento de dados operando. Apesar da operação de sinal ser descrita aqui com multiplicação, uma operação verdadeira de multiplicação pode não ser fisicamente necessária para se alcançar o mesmo resultado matemático. Por exemplo, é desnecessário se realizar uma multiplicação por ‘0’ para se chegar a um produto igual a ‘0’. Nem é fisicamente necessário se multiplicar um número por ‘+1’ visto que o produto é o próprio número. De forma similar, o resultado de uma multiplicação de um número por -1’ também pode ser alcançado pela subtração do número de ‘0’.
[0096] Por exemplo, o elemento de dados mais à esquerda 702 do segundo operando 701 tem um valor de ‘-4270i0’, que é um número negativo. Enquanto isso, o elemento de dados mais à esquerda 712 do primeiro operando 711 contém um valor de ‘-112010’. Visto que o valor do sinal do elemento de dados do segundo operando 702 é negativo, o valor ‘-1120io’ do elemento de dados do primeiro operando correspondente 712 é conceitualmente multiplicado por ‘-1’ para resultar em um produto igual a Ί120-ι0’ durante a operação de sinal em pacote. O produto é armazenado na posição de elemento de dados adequada 722 do resultante 721.
[0097] De forma similar, o elemento de dados mais à direita 709 do segundo operando 701 possui um valor igual a ‘2605i0’, que é um número positivo. Enquanto isso, o elemento de dados mais à direita 719 do primeiro operando 711 contém um valor de ‘517710’. Visto que o valor do sinal do elemento de dados do segundo operando 709 é positivo, o valor ‘517710’ do elemento de dados do primeiro operando correspondente 719 é conceitualmente multiplicado por ‘+1 ’ para resultar em um produto de ‘517710’ durante a operação de sinal em pacote. O produto é armazenado na posição do elemento de dados mais à direita 729 do resultante 721. Desde que o valor de sinal do elemento de dados do segundo operando 709 seja positivo aqui, uma multiplicação real não será necessária visto que o produto 729 é simplesmente o valor do elemento de dados do primeiro operando 719.
[0098] No segundo elemento de dados 708 da direita no segundo operando 701, o valor é Όι0’. Enquanto isso, o segundo elemento de dados 718 da direita no primeiro operando 711 contém um valor igual a ‘-855io’. Visto que o número do elemento de dados do segundo operando 708 é igual a zero, o valor ‘-855i0’ do elemento de dados correspondente 718 está sendo basicamente multiplicado por Ό’ para resultar em um produto igual a Ό’ durante a operação de sinal em pacote. Dessa forma, um Ό’ é armazenado na segunda posição de elemento de dados 728 da direita no resultante 721. Visto que o elemento de dados do segundo operando 708 possui um valor igual a zero, uma multiplicação é desnecessária para se saber que o produto é igual a Ό’. De forma similar, um valor igual a zero em um elemento de dados do segundo operando é definido nessa modalidade para determinar Ό’ na posição resultante independentemente de qualquer valor de sinal que possa existir para o elemento de dados do segundo operando.
[0099] A figura 8A é um fluxograma 800 ilustrando uma modalidade de um método para realizar uma operação de sinal. O valor de comprimento de L é utilizado aqui para representar a largura dos ope-randos e dos blocos de dados. Dependendo da modalidade em parti- cular, L pode ser utilizado para designar a largura em termos de número de bits, bytes, palavras, etc. De forma similar, o termo M é utilizado para designar o número de elementos de dados ou pacote de segmentos dentro de um operando. No bloco 810, um operando de dados B de primeiro comprimento L possuindo M elementos é recebido. Um operando de dados A de segundo comprimento L também possuindo M elementos é recebido no bloco 820. Para essa modalidade, os ope-randos fonte e o resultante são de mesmo comprimento e possuem o mesmo número de elementos de dados. No bloco 830, uma instrução para a realização de uma operação de sinal que multiplica é processada.
[00100] Os detalhes da operação de sinal no bloco 830 dessa modalidade são adicionalmente descritos em termos do que ocorre para cada posição do elemento de dados. Para uma modalidade, a operação de sinal para todas as posições do elemento de dados resultantes em pacote são processadas em paralelo. Em outra modalidade, uma determinada parte dos elementos de dados podem ser processados de uma só vez. No bloco 831, uma verificação é feita no sentido de se determinar se o valor para o elemento do operando de dados A é negativo (inferior a zero). Se o valor for determinado como sendo negativo, o valor resultante para essa posição de elemento de dados em particular é calculado no bloco 832 como o produto do valor para o elemento do operando de dados B multiplicado por ‘-1’. Se o valor para o elemento do operando A não for negativo no bloco 831, uma determinação é feita no bloco 833 quanto ao fato de o valor para o elemento do operando A ser igual a zero. Se o valor for determinado como zero, o valor resultante para essa posição do elemento de dados é determinado como sendo ‘0’ no bloco 834. Mas se o valor para o elemento operando A não for considerado igual a zero no bloco 833, outra determinação é feita no bloco 835 quanto ao fato de o valor para esse elemento operando A ser positivo (superior a zero). Se o valor para esse elemento operando A for positivo, o valor resultante para essa posição do elemento de dados em particular é calculado no bloco 836 como o produto do valor para o elemento de dados do operando B multiplicado por ‘+1’. Se o valor do elemento operando A não for positivo no bloco 835 para essa modalidade, o valor é tratado como indefinido no bloco 837 visto que nenhuma das três situações (positiva, ‘0’, negativa) se aplica. Esses valores resultantes para esses elementos de dados diferentes são dispostos nas posições adequadas do elemento de dados correspondentes aos pares de elemento fonte no operando em pacote resultante.
[00101] A figura 8B é um fluxograma 850 ilustrando outra modalidade de um método para realizar uma operação de sinal. O fluxo do método no bloco 810 e 820 para essa modalidade são similares ao da figura 8A. Nesse exemplo, a metodologia para o bloco 830 na realização de uma operação de sinal que multiplica é um pouco diferente. Os detalhes da operação de sinal no bloco 830 para essa modalidade também serão descritos adicionalmente em termos do que ocorre para cada posição de elemento de dados. No bloco 840, uma determinação é feita quanto ao fato do valor no elemento do operando de dados A ser igual a zero. Se a determinação for verdadeira e o valor for igual a zero, um Ό’ é registrado como valor resultante para essa posição do elemento de dados no bloco 841. Mas se a determinação for de que o elemento de dados do operando A para essa posição é um valor diferente de zero, o valor resultante para essa posição do elemento de dados é calculado no bloco 842 como o produto do valor para o elemento de dados do operando B multiplicado pelo sinal do elemento de dados do operando A. Como na figura 8a, o valor resultante para cada uma das posições do elemento de dados é disposto no local adequado no bloco de dados em pacote resultante.
[00102] A figura 9 é um diagrama em bloco de uma modalidade da lógica para realizar uma operação de valor absoluto em um operando de dados em pacote. Para uma modalidade, as operações de valor absoluto de acordo com a presente invenção são implementadas como uma instrução absoluta em pacote (PABS) para operar em tipos de dados de vários tamanhos. Para fins de simplicidade, essa instrução PABS é descrita aqui em termos gerais com um operando em pacote possuindo oito elementos de dados. Esses elementos de dados podem ser bytes, palavras, palavras duplas, etc. dependendo da implementação particular. Nesse exemplo, a operação absoluta em pacote é invocada com uma linha de código como "PABS SRC1" onde SRC1 aponta para um registro SIMD ou localização de memória. Nesse caso, SRC1 é a fonte de dados e o destino resultante. Para uma modalidade, o formato da instrução exige dois operandos e a linha seria "PABS SRC1, SRC2". Nesse caso, a instrução PABS faz com que o valor absoluto nos elementos de dados de SRC2 sejam colocados em SRC1. Adicionalmente, em uma modalidade, uma instrução de bytes absolutos em pacote (PABSB) é fornecida para gerar valores absolutos dos tipos de dados de byte; uma instrução de palavras absolutas em pacote (PABSW) é fornecida para gerar valores absolutos dos tipos de dados de palavra; e uma instrução de palavras duplas absolutas em pacote (PABSD) é fornecida para gerar valores absolutos dos tipos de dados de palavras duplas.
[00103] A instrução PABS para uma operação de valor absoluto dessa modalidade começa com um primeiro operando de dados SOURCE DATA 910 possuindo oito elementos de dados; A7, A6, A5, A4, A3, A2, A1 e A0. Cada elemento de dados individual corresponde a uma posição de elemento de dados no resultante 930. O operando de dados 910 é enviado para a lógica de computação de valor absoluto 920 juntamente com a instrução de valor absoluto. A lógica de com- putação de valor absoluto 920 modifica o valor em cada elemento de dados fonte de forma que o valor numérico na posição correspondente ao elemento no resultante 930 tenha o valor absoluto sem sinal desse número de elemento de dados fonte. Por exemplo, a posição do elemento resultante mais à esquerda possui o valor absoluto sem sinal do número do elemento fonte A7. Esse processamento do valor absoluto é repetido para todo o conjunto de posições do elemento de dados no operando fonte 910. Para essa modalidade, a localização resultante pode ser igual à localização do operando fonte. Em uma modalidade alternativa onde dois operandos são especificados com instrução PABS, um operando pode especificar a fonte e o outro pode especificar o destino.
[00104] A compressão é frequentemente implementada no processamento de imagem. Os quadros de vídeo são geralmente comprimidos em blocos de pixels. Vídeo altamente comprimido pode exibir efeitos de bloco devido à operação de quantização. Em muitos algoritmos de codificação, um tipo de deterioração de imagem que ocorre nas taxas de bit mais baixas é chamado de efeito de bloqueio. Esse efeito é causado pela forma não natural de divisão de imagens em blocos retangulares com uma grade fixa durante o processamento de imagem. Visto que a codificação de cada bloco é independente, nada garante a continuidade dos valores das imagens codificadas no limite entre os blocos. A quantização do coeficiente DC da transformada cosseno discreto pode somar ou subtrair um desvio em um bloco fazendo com que o mesmo se torne mais claro ou mais escuro do que os blocos adjacentes e criando a aparência de linhas ao longo dos limites do bloco. Isso pode algumas vezes dar lugar a bordas artificiais proeminentes e efeitos de bloco na imagem codificada. Em sequências de imagem, uma grade de fundo de bordas sem movimento observada contra uma cena em movimento pode resultar em um tipo muito pouco natural e muito desagradável de degradação. A fim de evitar que esses efeitos de bloqueio ocorram, um esquema de desbloqueio pode utilizar filtros para suavizar as bordas artificiais. Esses artefatos podem ser tornados quase imperceptíveis com um algoritmo de redução de efeito de bloco que suaviza o limite entre os blocos. No entanto, o algoritmo não deve suavizar um degrau entre os blocos se houver uma verdadeira borda ao longo do limite do bloco. Geralmente o degrau entre os blocos adjacentes é considerado uma borda verdadeira se o tamanho do degrau de borda for superior ao tamanho de degrau que poderia ser criado pela quantização. De forma similar, outros algoritmos podem ser utilizados para encaixar superfícies sobre um bloco.
[00105] Alguns dos algoritmos de redução de efeito de bloco para métodos de compressão de vídeo H.263 e MEPG4 utilizam uma operação de sinal ou signo e uma operação de valor absoluto. Nesses algoritmos de desbloqueio de vídeo, a função de sinal computa o sinal do fator de correção. A operação de valor absoluto é utilizada para determinar a magnitude do fator de correção e comparar as variações no vídeo com limites predeterminados. As modalidades das instruções SIMD como PSIGN e PABS como descritas anteriormente podem ser utilizadas juntas nos algoritmos de desbloqueio para H.263 e MPEG4. A operação de signo envolve a avaliação de um valor de sinal a partir de um dado e fornecer uma indicação de qual é o valor de sinal. Por exemplo, uma operação de signo em elemento de dados resultará em um ‘0’ se o elemento de dados for igual a zero, em um ‘-1’ se o elemento de dados for negativo eem um '+1’seo elemento de dados for positivo. Para uma modalidade, a instrução PSIGN de acordo com a presente invenção pode ser utilizada para fornecer a funcionalidade do signo.
[00106] Uma abordagem do desbloqueio de filtro não-linear emprega uma abordagem de filtragem não linear de três etapas. Primeiro, a caracterização do limite do bloco. Em segundo lugar, a utilização dos resultados da primeira etapa para computar fatores para corrigir valores de pixels ao longo do limite de bloco. E, em terceiro lugar, valores de pixel corretos de pixels ao longo do limite pela soma ou subtração de fatores computados na segunda etapa. O exemplo a seguir descreve o algoritmo de redução de efeito de blocoH.263 de uma implementação. A e B são pixels em um lado de um limite de bloco. A 1012 é um conjunto de pixels que está a um pixel de distância de um limite de bloco. B 1014 é um conjunto de pixels ao longo do limite de bloco. C e D são pixels no outro lado do limite. C 1022 é um conjunto ao longo do limite do bloco no outro lado do limite do conjunto B. D 1024 é um conjunto de pixels a um pixel de distância do limite do bloco no mesmo bloco 1020 que o conjunto C 1022. A fim de reduzir um artefato de continuidade devido à quantização entre o bloco X 1010 e o bloco Y 1020, mas preservando uma borda real, o desbloqueio é realizado. Os resultados do desbloqueio são rotulados como A’, B’, C’ e D’.
[00107] A figura 10 ilustra a operação de um algoritmo de redução de efeito de bloco utilizando instruções SIMD de acordo com a presente invenção. Dois blocos de dados 1010, 1020, são ilustrados na figura 10. Nesse exemplo, os blocos contém dados para uma corrente de imagem ou vídeo. Cada bloco é constituído de uma pluralidade de fileiras e colunas de elementos de dados. Por exemplo, um bloco em alguns algoritmos de processamento de imagem é um bloco de dados oito por oito. Aqui, a ilustração é focalizada no limite do bloco entre BLOCK X 1010 e BLOCK Y 1020. O fundo das duas fileiras de dados 1012, 1014 são ilustrados para BLOCK X 1010. BLOCK Y 1020 é ilustrado com o topo das duas fileiras de dados 1022, 1024. Cada fileira de dados é constituída de elementos de dados numerados de 7 a 0.
[00108] Os registros SIMD são carregados com os dados de pixel para os conjuntos A 1012, B 1014, C 1022, e D 1024. Em primeiro lu- gar, o limite de bloco é caracterizado. O tamanho e direção da etapa através do limite de bloco é determinado. Isso pode ser representado pela equação: d=(A-4B+4C-D)/8.
[00109] Então, o fator de correção para os conjuntos B 1014 e C 1022 são calculados com uma rampa updown: d-i=SIGN(d)x(MAX(0,ABS(d)-MAX(0,2x(ABS(d)-strength)))).
[00110] O fator de correção para os conjuntos A 1012 e B 1024 são calculados: d2 = clipd1((A-D)/4,d-|/2).
[00111] Aqui, o valor absoluto e as operações máxima e de fixação são utilizadas para computar a magnitude dos fatores de correção de pixel di e d2. A operação de sinal também utiliza o fator d da primeira etapa para computar o sinal do fator de correção d-ι. Os fatores de correção di e d2 são somados ou subtraídos dos valores de pixel. Os pixels limítrofes para os conjuntos B 1014 e C 1022 são corrigidos: B’ = clip(B+di); e C-clip(C-d-i).
[00112] Os pixels para os conjuntos A 1012 e D 1024 são então corrigidos: A’=A-d2; D’=D+d2.
[00113] O cálculo di é uma função chamada de rampa updown. O valor de pico é quando d é igual à ‘strength’ e os valores passam para zero quando d é igual a ‘2 x strength’. O valor de ‘strength’ é determinado pelo tamanho da etapa de quantização. Geralmente, ‘strength’ é cerca de metade do tamanho de etapa. A função ‘clipdl()’ anexa o resultado de ‘(A-D)/4’ a + ou - o valor absoluto de ‘d1/2’. A função de ‘clipO’ anexa o resultado avaliado a um valor iguala ‘0’ ou ‘255’. As modalidades desse algoritmo podem ser implementadas com instruções SIMD. Para essa modalidade, a operação de sinal pode ser implementada com uma instrução PSIGNB ou PSIGNW. De forma simi- lar, a operação de valor absoluto pode ser implementada com PABSB ou PABSW. Nessa modalidade, múltiplos valores de pixel para os conjuntos A, B, C e D são carregados em registros SIMD separados. Para uma modalidade, as operações de desbloqueio são aplicadas a mais de uma coluna de pixel de uma vez ou em paralelo. Múltiplos valores de valores intermediários di e d2 são computados em registros SIMD separados utilizando instruções de sinal, valor absoluto e máximo. Os resultados A’, B’, C’ e D’ são computados em registros SIMD separados. As operações de anexação podem ser computadas com instruções SIMD máxima e mínima.
[00114] A funcionalidade de uma instrução de sinal como descrita acima é utilizada no algoritmo de redução de efeito de bloco de filtragem não linear dessa modalidade. As modalidades desse algoritmo de redução de efeito de bloco podem ser implementadas com técnicas de codificação como H.263 ou MPEG4 para remover os efeitos de bloco causados pela operação de quantização desses dois métodos de compressão de vídeo comum. Pela utilização de uma instrução de sinal que multiplica em um algoritmo de desbloqueio, as modalidades do presente esquema podem acelerar os cálculos para esses algoritmos de codificação e reduzir o tamanho do código. Por exemplo, uma instrução PSIGN única pode substituir as múltiplas instruções aritméticas que foram necessárias para se realizar instruções ou manipulação de dados similar que não operam em dados em pacote. Dessa forma, o rendimento geral pode ser aperfeiçoado e os recursos de processamento liberados.
[00115] Para uma modalidade de um algoritmo de redução de efeito de bloco, a instrução de sinal e a instrução de valor absoluto não possuem comportamento de saturação. Isso significa que para uma instrução de valor absoluto em pacote, um dado de N bits com um valor igual a -2n1 será avaliados para 2n1. No caso de uma instrução de si- nal em pacote, um dado de N bits com um primeiro elemento fonte igual a -2n1 e um segundo elemento fonte negativo serão avaliados para 2n1. Em alguns casos, os resultados com sinal são necessários, logo nenhum valor positivo superior a 2n1-1 é permitido. Uma solução é forçar os valores máximos negativo e positivo para ter a mesma magnitude antes das instruções PABS ou PSIGN serem executadas.
[00116] As operações de valor absoluto e sinal de uma modalidade também podem ser aplicadas a um algoritmo de redução de efeito de bloco MPEG4 como descrito abaixo. Dez pixels, cinco em cada lado de um limite de bloco, são representados como: VO V1 V2 V3 V4|V5 V6 V7 V8 V9. O ‘|’ representa o limite de bloco. Primeiro o limite de bloco é caracterizado: contador = cp(V0 - V1)+9(V1-V2)+9(V2-V3)+9(V3-V4)+cp(V4-V5)+ cp(V5-V6)+cp(V6-V7)+cp(V7-V8)+cp(V8-V9), onde φ(γ)=1 SE ABS(y)c= THRESHOLD1, ou φ(γ)=0.
[00117] Se a contagem for maior ou igual a THRESHOLD2, utiliza um modo DC, ou utiliza o modo padrão.
[00118] O limite de bloco também é caracterizado por DC: [00119] valor máximo = MAX(V1, V2, V3, V4, V5, V6, V7, V8);
[00120] valor mínimo = MIN(V1, V2, V3, V4, V5, V6, V7, V8).
[00121] Se (ABS(max value-min value)<2 x um fator de quantiza-ção) então as etapas 2 e 3 de correção relacionadas com DC são realizadas, do contrário nenhuma correção é feita. Para o modo padrão, o fator de correção é calculado como: a3,0 = (2xV3-5xV4 + 5xV5-2x V6)/8; a3,1 = (2 x V1 - 5 x V2 + 5 x V3 - 2 x V4)/8; a3,2 = (2xV5-5xV6 + 5xV7-2x V8)/8; a3,0’=SIGN(a3,0)xMIN(ABS(a3,0), ABS (a3,1), ABS (a3,2)); d = CLIP(5 x (a3,0’-a3,0)/8,0,((V4 - V5)x δ (ABS(a3,0)< um fator de quantização)), [00122] onde δ () avalia para 1 se verdadeiro e 0 se falso.
[00123] Os pixels limítrofes são então corrigidos. A função CLIP (r, p, q) anexa r entre p e q. Para o modo DC, o fator de correção é calculado como: [00124] se m < 1, então se ABS(V1-V0)< QP, então pm=V0; ou Pm=V1; se 1 <= m <= 8, então pm = Vm; se m > 8, então se ABS(V8-V9)< um fator de quantização, então pm = V9, ou pm=V8.
[00125] A figura 11 é um fluxograma 1100 ilustrando uma modalidade de um método para realizar um algoritmo de redução de efeito de bloco utilizando instruções SIMD. Por exemplo, tal algoritmo de redução de efeito de bloco pode ser implementado com código para métodos de compressão H.263 e MPEG4. No bloco 1102, os dados do pixel para um primeiro bloco e um segundo bloco são recebidos. O limite de bloco entre os dois blocos é caracterizado no bloco 1140. Um ou mais fatores de correção são computados nos dados de pixel em pacote no bloco 1106 através do uso de instruções para operações de sinal em pacote que multiplicam e operações de valor absoluto em pacote. O uso de uma instrução PSIGN e/ou PABS quando da computação de fatores de correção para um algoritmo de redução de efeito de bloco pode reduzir o número de instruções não SIMD necessárias e aumentar a eficiência dos recursos de processamento. Por exemplo, uma modalidade de uma sequência de desbloqueio para algoritmos de processamento de imagem de acordo com a presente invenção emprega uma operação PSIGN para determinar o sinal do fator de correção e PABS é utilizado para calcular a magnitude do fator de correção. No bloco 1108, os pixels limítrofes para o primeiro bloco e segundo bloco são corrigidos com um ou mais fatores de correção que foram calculados com uma operação de sinal que multiplica ou uma opera- ção de valor absoluto.
[00126] Dessa forma, as técnicas para um método, aparelho e instrução para a realização de uma operação de sinal e multiplicação são descritas. Enquanto determinadas modalidades ilustrativas foram descritas e ilustradas nos desenhos em anexo, deve-se compreender que tais modalidades são meramente ilustrativas e não restritivas na invenção ampla, ilustrada e descrita, visto que várias outras modificações podem ocorrer aos versados na técnica depois do estudo dessa descrição. Em uma área de tecnologia tal como essa, onde o crescimento é rápido e avanços adicionais não são facilmente vislumbrados, as modalidades descritas podem ser modificadas de forma rápida na disposição e nos detalhes como facilitado pelos avanços tecnológicos sem se distanciar dos princípios da presente descrição ou escopo das reivindicações em anexo.
REIVINDICAÇÕES
Claims (27)
1. Aparelho (100) compreendendo: um processador; um local de armazenamento (106); e recursos de execução (108) para executar um conjunto de uma ou mais instruções contidas dentro de um programa rodando no processador, caracterizado pelo fato de que o conjunto de instruções inclui uma primeira instrução para realizar uma variação de uma operação de signo que determina um sinal de operando de um segundo operando de entrada (420) em paralelo com a multiplicação de um primeiro operando de entrada (410) pelo dito sinal de operando do dito segundo operando de entrada (420), e, em resposta à dita primeira instrução, armazenar no local de armazenamento (106) um resultado tendo um valor: do dito primeiro operando se o dito segundo operando for um valor positivo; zero se o segundo operando for um valor igual a zero; e de uma versão negativa do dito primeiro operando se o segundo operando for um valor negativo.
2. Aparelho, de acordo com a reivindicação 1, caracterizado pelo fato de que o dito primeiro operando é um primeiro operando em pacote compreendendo uma primeira pluralidade de elementos de dados em pacote (A0 - A7) e onde o dito segundo operando é um segundo operando de dados em pacote compreendendo uma segunda pluralidade de elementos de dados em pacote (B0 - B7), e adicionalmente onde o dito resultado compreende uma terceira pluralidade de elementos de dados em pacote, cada um dentre a dita terceira pluralidade do conjunto de elementos de dados em pacote determina um produto de um valor numérico com sinal de um primeiro elemento de dados da dita primeira pluralidade de elementos de dados em pacote (A0 - A7) multiplicados por um sinal de um elemento de dados correspondentes da dita segunda pluralidade dos elementos de dados em pacote.
3. Aparelho, de acordo com a reivindicação 1, caracterizado pelo fato de que o dito primeiro operando é um operando fonte/destino, onde o dito operando de destino e fonte é tirado da dita localização de armazenamento para computar o dito resultado e é substituído pelo dito resultado.
4. Aparelho, de acordo com a reivindicação 2, caracterizado pelo fato de que a dita localização de armazenamento compreende um registro e onde o dito segundo operando é um registro ou um operando de memória.
5. Aparelho, de acordo com a reivindicação 4, caracterizado pelo fato de que o dito primeiro operando é um operando de registro.
6. Aparelho, de acordo com a reivindicação 1, caracterizado pelo fato de que a dita primeira instrução é uma instrução de sinal em pacote e onde o dito aparelho compreende adicionalmente: um circuito somador (614); um primeiro multiplexador de entrada (608) para fornecer uma primeira entrada ao dito circuito somador, o dito primeiro multiplexador para selecionar entre o primeiro operando e um primeiro operando complementado; um detetor de zero (624) para enviar um sinal de seleção em resposta ao dito segundo operando; e um segundo multiplexador de entrada (606) acoplado para fornecer uma segunda entrada do dito circuito somador; o dito segundo multiplexador (606) para selecionar entre o dito segundo operando fonte (604) e um valor igual a zero em resposta a um sinal de controle para a dita instruções.
7. Aparelho, de acordo com a reivindicação 6, caracterizado pelo fato de que compreende ainda: um terceiro multiplexador (618) acoplado para receber o dito primeiro operando fonte (604), o dito segundo operando fonte (604), e uma saída do somador compreendendo um valor complementado do dito primeiro operando; lógica de seleção para selecionar um dentre um primeiro operando fonte (604), um segundo operando fonte (604) e a dita saída de somador, com base em uma magnitude e um valor de sinal do dito segundo operando, onde: se a dita magnitude do dito segundo operando for igual à zero, a dita lógica de seleção faz com que o dito segundo operando seja selecionado; se a dita magnitude do dito segundo operando for um valor diferente de zero e o dito valor de sinal do dito segundo operando for positivo, a dita lógica de seleção faz com que o dito primeiro operando seja selecionado; se a dita magnitude do dito segundo operando for um valor diferente de zero e o dito valor de sinal do dito segundo operando for negativo, a dita lógica de seleção faz com que a dita saída do somador seja selecionada.
8. Aparelho, de acordo com a reivindicação 2, caracterizado pelo fato de que os ditos recursos de execução (108) compreendem: um decodificador para decodificar a dita primeira instrução; um primeiro arquivo de registro físico para operações de inteiros; um segundo arquivo de registro físico, onde o dito operando fonte/destino especifica um registro no segundo arquivo de registro físico, onde o dito valor de resultado é um valor inteiro.
9. Aparelho, de acordo com a reivindicação 8, caracterizado pelo fato de que a dita primeira instrução é uma instrução de sinal e onde o dito decodificador decodifica a dita instrução de sinal em uma microoperação de sinal para a execução por uma primeira unidade de execução, que é uma unidade separada de uma unidade de execução de inteiros que realiza uma pluralidade de operações de inteiros escalonadas que armazenam os resultados no arquivo de registro de primeira camada física.
10. Aparelho, de acordo com a reivindicação 1, caracterizado pelo fato de que a primeira instrução é uma primeira instrução de dados de pacote e onde o dito resultado compreende uma primeira pluralidade de elementos de dados em pacote (AO - A7) resultantes, cada um dos ditos primeiros elementos de dados em pacote resultantes tendo um valor igual a um elemento correspondente de uma pluralidade de primeiros elementos de dados de operandos fonte multiplicado por um valor de sinal correspondente para um elemento correspondente dentre uma pluralidade de segundos elementos de dados de operando fonte.
11. Aparelho, de acordo com a reivindicação 10, caracterizado pelo fato de que os ditos recursos de execução (108), em resposta a uma segunda instrução, servem para armazenar no dito local de armazenamento um segundo resultado compreendendo uma segunda pluralidade de elementos de dados em pacote (B0 - B7) resultantes, cada um dentre a segunda pluralidade de elementos de dados em pacote (B0 - B7) resultantes sendo um valor absoluto de um elemento correspondente dentre a pluralidade de elementos de dados em pacote fonte.
12. Processador caracterizado pelo fato de que compreende: um arquivo de registro capaz de armazenar elementos de dados em pacote; e uma unidade de execução acoplada ao dito arquivo de registro e que responde a uma pluralidade de instruções de dados em pacote para armazenar os valores no dito arquivo de registro, a dita unidade de execução respondendo a uma primeira instrução da pluralidade de instruções de dados em pacote armazenando no dito arquivo de registro um resultado que compreende uma pluralidade de elementos de dados resultantes, em que a dita primeira instrução é para realizar uma variação de uma operação de signo que determina um sinal de operando de um segundo elemento da pluralidade de elementos de dados em paralelo com a multiplicação do sinal de operando da dita segunda pluralidade de elementos de dados de fonte com um correspondente elemento de uma primeira pluralidade de elementos de dados de fonte, em que cada um da pluralidade de elementos de dados resultantes é igual a um elemento de dados correspondente da dita primeira pluralidade de elementos de dados de fonte multiplicados pelo dito sinal de operando para um correspondente elemento de dados da dita segunda pluralidade de elementos de dados de fonte para valores não zero de cada elemento da segunda pluralidade de elementos de dados de fonte; em que a unidade de execução é responsiva a uma segunda da dita pluralidade de instruções de dados de pacote armazenado no dito arquivo de registro um segundo resultado compreendendo uma segunda pluralidade de elementos de dados de resultado, em que cada um da dita segunda pluralidade de elementos de dados de resultado é igual a um valor absoluto de um correspondente de uma terceira pluralidade elementos de dados de fonte; em que da dita primeira da dita pluralidade de instruções de dados em pacotes é uma instrução de sinal e o segundo da dita pluralidade de instruções de dados de pacote é uma instrução de valor absoluto, e em que o dito processador ainda compreende: um decodificador para decodificar a dita instrução de sinal em uma primeira micro-operação micro e para decodificar a dita ins- trução de valor absoluto em uma segunda micro-operação; um multiplexador para receber entradas compreendendo um primeiro valor para um primeiro elemento de dados da dita primeira pluralidade de elementos de dados fonte, um segundo valor para um segundo elemento de dados da dita segunda pluralidade de elementos de dados fonte correspondendo ao dito primeiro elemento de dados, e um terceiro valor para uma versão negada do dito primeiro valor para o dito primeiro elemento de dados da dita primeira pluralidade dos elementos de dados fonte; e uma lógica de seleção de saída capaz de selecionar uma das ditas entradas de multiplexador para enviar como saída uma operação de sinal resultante para uma posição de elemento de dados correspondendo aos ditos primeiro e segundo elementos de dados.
13. Método caracterizado pelo fato de que compreende: executar um conjunto de uma ou mais instruções contidas dentro de um programa rodando em um processador de computador incluindo: produzir uma instrução que, quando executada por um recurso de execução, realiza uma variação de uma operação de sinal que determina um sinal de operando de um segundo operando de entrada (420) em paralelo cm multiplicando um primeiro operando de entrada (410) tendo uma primeira magnitude de operando e um primeiro sinal de operando pelo dito sinal de operando do dito segundo operando de entrada (420), o segundo operando de entrada (420) tendo uma segunda magnitude de operando e o dito segundo sinal de operando, em que a variação da dita operação de sinal incluindo binning o dito segundo operador de entrada em uma de três categorias incluindo uma categoria positiva, uma categoria de zero e uma categoria negativa, e realizar: determinar se o dito segundo operando de entrada (420) é positivo, então armazenar o dito primeiro operando como o resultado da dita instrução; determinar se o dito segundo operando é negativo, então armazenar um valor igual ao negativo multiplicado pelo primeiro operando como o resultado da dita instrução; e determinar se o dito segundo operando é zero, então armazenar um valor igual à zero como o resultado da dita instrução.
14. Método, de acordo com a reivindicação 13, caracterizado pelo fato de que a dita instrução é uma instrução de sinal em pacote.
15. Método, de acordo com a reivindicação 14, caracterizado pelo fato de que o dito primeiro operando e o dito segundo operando serem cada um operandos de dados em pacote compreendendo uma primeira e uma segunda pluralidades de elementos de dados, respectivamente.
16. Método, de acordo com a reivindicação 15, caracterizado pelo fato de que compreende adicionalmente decodificar a dita instrução de sinal em pacote em uma primeira microinstrução.
17. Método, de acordo com a reivindicação 16, caracterizado pelo fato de que a dita etapa de determinar o dito segundo operando compreende a avaliação de cada elemento de dados individual do dito segundo operando.
18. Sistema caracterizado pelo fato de que compreende: uma memória (120) para armazenar um conjunto de uma ou mais instruções contidas dentro de um programa incluindo uma primeira instrução de dados de pacotes que quando executada é para realizar uma variação de uma operação de sinal que determina um sinal de operando de um segundo operando de entrada (420) de dados de pacote em paralelo com a multiplicação de um primeiro operando de entrada (410) de dados de pacote compreendendo uma primeira pluralidade de elementos de dados fonte pelo sinal de operando do segundo operando de entrada (420) de dados de pacote compreendendo uma segunda pluralidade de elementos de dados fonte; e um processador para processar o programa incluindo executar a dita primeira instrução de dados em pacote e responsivamente armazenar em um local de armazenamento de processador um dado em pacote resultante compreendendo uma pluralidade de elementos de dados em pacote resultantes, cada um dentre a dita pluralidade de elementos de dados em pacote resultantes correspondendo a elementos diferentes de zero da dita segunda pluralidade dos elementos de dados fonte, tendo um sinal determinado por ambos os sinais dos elementos correspondentes da dita primeira pluralidade de elementos de dados fonte e a dita segunda pluralidade de elementos dados fonte, e tendo uma magnitude de apenas o dito elemento correspondente da dita primeira pluralidade de elementos de dados em pacote (AO - A7) para todos os valores diferentes de zero dos ditos elementos correspondentes da segunda pluralidade de elementos de dados de fonte.
19. Sistema, de acordo com a reivindicação 18, caracterizado pelo fato de que a dita primeira instrução de dados em pacote é uma instrução de sinal em pacote para fazer com que as operações de sinal para as posições de elemento de dados correspondentes à dita primeira pluralidade de elementos de dados fonte.
20. Sistema, de acordo com a reivindicação 19, caracterizado pelo fato de que a dita pluralidade de elementos de dados em pacote resultantes substitui uma localização de armazenamento de processador armazenando os ditos primeiros dados em pacote.
21. Aparelho caracterizado pelo fato de que compreende: um processador incluindo: uma localização de armazenamento; e recursos de execução (108) para executar um conjunto de um ou mais instruções contidas dentro de um programa rodando dentro do processador, o conjunto de instruções incluindo uma primeira instrução para realizar uma operação de variação de operação de sinal que determina um sinal de operando de um segundo operando de entrada (420) em paralelo com a multiplicação de um primeiro operando de entrada (410) pelo dito sinal de operando do dito segundo operando de entrada (420), o dito primeiro operando tendo uma primeira magnitude e um primeiro sinal de operando, o dito segundo operando de entrada (420) tendo uma segunda magnitude e o dito segundo sinal de operando, os recursos de execução (108), em resposta à dita primeira instrução, para armazenar na dita localização de armazenamento um resultado que possui a dita primeira magnitude e o dito primeiro sinal inicial de operando se o dito segundo operando for um operando positivo, que é igual a zero se o segundo operando for um operando igual a zero, e que possui a dita primeira magnitude e um sinal resultante que é um produto do dito primeiro sinal inicial de operando multiplicado pelo dito segundo sinal de operando se o dito segundo operando for um operando negativo.
22. Aparelho, de acordo com a reivindicação 21, caracterizado pelo fato de que a dita localização de armazenamento compreende um registro e onde o dito segundo operando é um registro ou um operando de memória.
23. Aparelho caracterizado pelo fato de que compreende: um processador incluindo: uma localização de armazenamento; e recursos de execução (108) para executar um conjunto de uma ou mais instruções contidas dentro de um programa executado pelo processador, o conjunto de instruções incluindo uma primeira instrução de pacotes para realizar uma variação de uma operação de sinal que determina um sinal de operando de um segundo operando de entrada (420) de pacotes em paralelo com a multiplicação de um primeiro operando de entrada (410) de pacotes que tem uma primeira pluralidade de elementos de dados pelo referido segundo operando de entrada (420) de pacotes tendo uma segunda pluralidade de elementos de dados, cada elemento de dados da dita primeira pluralidade de elementos de dados têm uma correspondente primeira magnitude e correspondente primeiro sinal, cada elemento de dados da dita segunda pluralidade de elementos de dados tendo uma correspondente segunda magnitude e um correspondente segundo sinal, em que a dita variação da operação de sinal inclui binning cada elemento de dados do segundo operando de entrada (420) de pacotes em uma de três (3) categorias, incluindo uma categoria positiva, uma categoria de zero, e uma categoria negativa e executando o seguinte: se o dito sinal de operando de um elemento de dados do dito segundo operando de entrada (420) de pacotes é positivo, em seguida, os ditos elementos de dados do dito segundo operando de entrada (420) de pacotes é binned para dentro da dita categoria positiva e os recursos de execução (108) geram como saída um resultado igual a um elemento de dados correspondente do dito primeiro operando de entrada (410) de pacotes, se o dito elemento de dados do dito segundo operando de entrada (420) de pacotes for zero, então o dito elemento de dados do dito segundo operando de entrada (420) é binned para dentro da dita categoria de zero em que o dito sinal de operando do dito elemento de dados do dito segundo operando de entrada (420) de dados é desconsiderado e os recursos de execução (108) geram como saída um resultado igual a zero, e se o dito sinal de operando do dito elemento de dados do dito segundo operando de entrada (420) de pacotes é negativo, então o elemento de dados do dito segundo operando de entrada (420) de pacotes é binned para dentro da dita categoria negativa e os recursos de execução (108) geram como saída um resultado igual ao produto de uma multiplicação do dito elemento de dados do dito primeiro operando de entrada (410) com um valor de sinal de igual a -1, os ditos recursos de execução (108), em resposta à dita primeira instrução, armazenam a dita localização de armazenamento para cada posição de elemento de dados correspondente de um operando de resultado, um resultado que tem uma magnitude resultante igual à primeira magnitude correspondente e um sinal resultante determinado por uma função de ambos o dito primeiro sinal correspondente e o dito segundo sinal correspondente sempre que o valor do elemento de dados correspondente do segundo operando for diferente de zero, e um resultado que é zero se o valor do elemento de dados correspondente do dito segundo operando é zero.
24. Aparelho, de acordo com a reivindicação 23, caracterizado pelo fato de que o dito operando resultante é constituído de uma terceira pluralidade de elementos de dados, cada um dentre a dita terceira pluralidade de elementos de dados em pacote determinado para um produto de um valor numérico com sinal de um primeiro elemento de dados da dita primeira pluralidade de elementos de dados em pacote (AO - A7) multiplicados por um sinal de um elemento de dados correspondente da dita segunda pluralidade de elementos de dados em pacote (B0 - B7).
25. Aparelho, de acordo com a reivindicação 24, caracterizado pelo fato de que a dita localização de armazenamento compreende um registro e onde o dito segundo operando de entrada (420) é um registro ou um operando de memória.
26. Aparelho, de acordo com a reivindicação 25, caracterizado pelo fato de que o dito primeiro operando é um registro.
27. Aparelho, de acordo com a reivindicação 25, caracterizado pelo fato de que o dito registro para o dito primeiro operando também é a dita localização de armazenamento.
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US10/610,929 | 2003-06-30 | ||
| US10/610,929 US7539714B2 (en) | 2003-06-30 | 2003-06-30 | Method, apparatus, and instruction for performing a sign operation that multiplies |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| BRPI0306094B1 true BRPI0306094B1 (pt) | 2017-06-27 |
Family
ID=33452633
Family Applications (2)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| BRPI0306094-2A BRPI0306094B1 (pt) | 2003-06-30 | 2003-12-29 | Apparatus, method, and system for performing a signal operation that multiplies the execution of a multi-signaling operation |
| BR0306094-2A BR0306094A (pt) | 2003-06-30 | 2003-12-29 | Método, aparelho e instrução para a realização de uma operação de sinal que multiplica |
Family Applications After (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| BR0306094-2A BR0306094A (pt) | 2003-06-30 | 2003-12-29 | Método, aparelho e instrução para a realização de uma operação de sinal que multiplica |
Country Status (10)
| Country | Link |
|---|---|
| US (1) | US7539714B2 (pt) |
| EP (2) | EP2284694B1 (pt) |
| JP (1) | JP4869552B2 (pt) |
| KR (1) | KR100841131B1 (pt) |
| CN (1) | CN1577249B (pt) |
| BR (2) | BRPI0306094B1 (pt) |
| MX (1) | MXPA03011899A (pt) |
| RU (1) | RU2275677C2 (pt) |
| SG (1) | SG144700A1 (pt) |
| TW (1) | TWI305882B (pt) |
Families Citing this family (33)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7424501B2 (en) * | 2003-06-30 | 2008-09-09 | Intel Corporation | Nonlinear filtering and deblocking applications utilizing SIMD sign and absolute value operations |
| BRPI0506163B1 (pt) * | 2004-09-20 | 2018-11-13 | Divx Inc | método de desbloqueio de um quadro de vídeo reconstruído |
| US7475103B2 (en) * | 2005-03-17 | 2009-01-06 | Qualcomm Incorporated | Efficient check node message transform approximation for LDPC decoder |
| US20070073925A1 (en) * | 2005-09-28 | 2007-03-29 | Arc International (Uk) Limited | Systems and methods for synchronizing multiple processing engines of a microprocessor |
| US20080071851A1 (en) * | 2006-09-20 | 2008-03-20 | Ronen Zohar | Instruction and logic for performing a dot-product operation |
| US9069547B2 (en) * | 2006-09-22 | 2015-06-30 | Intel Corporation | Instruction and logic for processing text strings |
| US20090113174A1 (en) * | 2007-10-31 | 2009-04-30 | Texas Instruments Incorporated | Sign Operation Instructions and Circuitry |
| US8515052B2 (en) | 2007-12-17 | 2013-08-20 | Wai Wu | Parallel signal processing system and method |
| US8041927B2 (en) * | 2008-04-16 | 2011-10-18 | Nec Corporation | Processor apparatus and method of processing multiple data by single instructions |
| RU2470382C1 (ru) * | 2008-10-24 | 2012-12-20 | Шарп Кабусики Кайся | Устройство отображения и способ возбуждения устройства отображения |
| US9747105B2 (en) | 2009-12-17 | 2017-08-29 | Intel Corporation | Method and apparatus for performing a shift and exclusive or operation in a single instruction |
| US9003170B2 (en) * | 2009-12-22 | 2015-04-07 | Intel Corporation | Bit range isolation instructions, methods, and apparatus |
| AU2011279139B2 (en) * | 2010-07-14 | 2016-02-04 | Ntt Docomo, Inc. | Low-complexity intra prediction for video coding |
| RU2467377C1 (ru) * | 2011-04-19 | 2012-11-20 | ОАО "Концерн "Моринформсистема-Агат" | Способ и устройство умножения чисел в коде "1 из 4" |
| RU2461867C1 (ru) * | 2011-06-23 | 2012-09-20 | Российская Федерация, от имени которой выступает Государственная корпорация по атомной энергии "Росатом" - Госкорпорация "Росатом" | Реконфигурируемый вычислительный конвейер |
| US9507593B2 (en) * | 2011-12-23 | 2016-11-29 | Intel Corporation | Instruction for element offset calculation in a multi-dimensional array |
| US9710266B2 (en) | 2012-03-15 | 2017-07-18 | International Business Machines Corporation | Instruction to compute the distance to a specified memory boundary |
| US9459868B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a dynamically determined memory boundary |
| US9459867B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a specified memory boundary indicated by the instruction |
| US9715383B2 (en) | 2012-03-15 | 2017-07-25 | International Business Machines Corporation | Vector find element equal instruction |
| US9501276B2 (en) * | 2012-12-31 | 2016-11-22 | Intel Corporation | Instructions and logic to vectorize conditional loops |
| US9207941B2 (en) * | 2013-03-15 | 2015-12-08 | Intel Corporation | Systems, apparatuses, and methods for reducing the number of short integer multiplications |
| CN103995475B (zh) * | 2014-05-16 | 2016-05-18 | 北京航空航天大学 | 一种柔性嵌入式被测设备模拟器 |
| US20160125263A1 (en) | 2014-11-03 | 2016-05-05 | Texas Instruments Incorporated | Method to compute sliding window block sum using instruction based selective horizontal addition in vector processor |
| US20160188341A1 (en) * | 2014-12-24 | 2016-06-30 | Elmoustapha Ould-Ahmed-Vall | Apparatus and method for fused add-add instructions |
| US10346944B2 (en) * | 2017-04-09 | 2019-07-09 | Intel Corporation | Machine learning sparse computation mechanism |
| CN108733347B (zh) * | 2017-04-20 | 2021-01-29 | 杭州海康威视数字技术股份有限公司 | 一种数据处理方法及装置 |
| RU2653310C1 (ru) * | 2017-05-24 | 2018-05-07 | федеральное государственное бюджетное образовательное учреждение высшего образования "Воронежский государственный университет" (ФГБОУ ВО "ВГУ") | Устройство для умножения числа по модулю на константу |
| CN107729989B (zh) * | 2017-07-20 | 2020-12-29 | 安徽寒武纪信息科技有限公司 | 一种用于执行人工神经网络正向运算的装置及方法 |
| RU2666285C1 (ru) * | 2017-10-06 | 2018-09-06 | Федеральное государственное бюджетное образовательное учреждение высшего образования "Вятский государственный университет" (ВятГУ) | Способ организации выполнения операции умножения двух чисел в модулярно-логарифмическом формате представления с плавающей точкой на гибридных многоядерных процессорах |
| KR102704647B1 (ko) * | 2017-10-12 | 2024-09-10 | 삼성전자주식회사 | 전자 장치 및 그 제어 방법 |
| KR102894225B1 (ko) * | 2020-04-07 | 2025-12-03 | 삼성전자 주식회사 | 뉴럴 네트워크 연산 수행을 위한 뉴럴 네트워크 장치, 뉴럴 네트워크 장치의 동작 방법 및 뉴럴 네트워크 장치를 포함하는 애플리케이션 프로세서 |
| US11614920B2 (en) * | 2020-05-07 | 2023-03-28 | Meta Platforms, Inc. | Bypassing zero-value multiplications in a hardware multiplier |
Family Cites Families (17)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| FR1398092A (fr) * | 1964-03-26 | 1965-05-07 | Saint Gobain | Nouveau circuit électronique de commutation |
| FR1509926A (fr) * | 1966-03-21 | 1968-01-19 | Saint Gobain Techn Nouvelles | Circuit multiplicateur scalaire |
| JPS6297060A (ja) * | 1985-10-23 | 1987-05-06 | Mitsubishi Electric Corp | デイジタルシグナルプロセツサ |
| SU1309020A1 (ru) * | 1985-12-23 | 1987-05-07 | Горьковский Исследовательский Физико-Технический Институт При Горьковском Государственном Университете Им.Н.И.Лобачевского | Устройство дл умножени |
| JPS63310023A (ja) * | 1987-06-11 | 1988-12-19 | Matsushita Electric Ind Co Ltd | 符号付固定小数点乗算装置 |
| NL9001608A (nl) * | 1990-07-16 | 1992-02-17 | Philips Nv | Ontvanger voor meerwaardige digitale signalen. |
| JPH04155503A (ja) * | 1990-10-19 | 1992-05-28 | Matsushita Electric Ind Co Ltd | ニューロ制御装置 |
| US5128890A (en) * | 1991-05-06 | 1992-07-07 | Motorola, Inc. | Apparatus for performing multiplications with reduced power and a method therefor |
| US5349545A (en) * | 1992-11-24 | 1994-09-20 | Intel Corporation | Arithmetic logic unit dequantization |
| US6023489A (en) * | 1995-05-24 | 2000-02-08 | Leica Geosystems Inc. | Method and apparatus for code synchronization in a global positioning system receiver |
| MX9801571A (es) * | 1995-08-31 | 1998-05-31 | Intel Corp | Aparato para realizar operaciones de multiplica-suma en datos empacados. |
| US6038583A (en) * | 1997-10-23 | 2000-03-14 | Advanced Micro Devices, Inc. | Method and apparatus for simultaneously multiplying two or more independent pairs of operands and calculating a rounded products |
| US6490607B1 (en) * | 1998-01-28 | 2002-12-03 | Advanced Micro Devices, Inc. | Shared FP and SIMD 3D multiplier |
| US6243803B1 (en) * | 1998-03-31 | 2001-06-05 | Intel Corporation | Method and apparatus for computing a packed absolute differences with plurality of sign bits using SIMD add circuitry |
| US6351293B1 (en) * | 1998-05-18 | 2002-02-26 | Sarnoff Corporation | Decision directed phase detector |
| US6292814B1 (en) * | 1998-06-26 | 2001-09-18 | Hitachi America, Ltd. | Methods and apparatus for implementing a sign function |
| US6397240B1 (en) * | 1999-02-18 | 2002-05-28 | Agere Systems Guardian Corp. | Programmable accelerator for a programmable processor system |
-
2003
- 2003-06-30 US US10/610,929 patent/US7539714B2/en not_active Expired - Lifetime
- 2003-10-13 TW TW092128278A patent/TWI305882B/zh not_active IP Right Cessation
- 2003-12-17 SG SG200307424-2A patent/SG144700A1/en unknown
- 2003-12-18 MX MXPA03011899A patent/MXPA03011899A/es not_active Application Discontinuation
- 2003-12-22 JP JP2003425712A patent/JP4869552B2/ja not_active Expired - Fee Related
- 2003-12-25 RU RU2003137709/09A patent/RU2275677C2/ru not_active IP Right Cessation
- 2003-12-25 CN CN2003101130822A patent/CN1577249B/zh not_active Expired - Fee Related
- 2003-12-29 BR BRPI0306094-2A patent/BRPI0306094B1/pt unknown
- 2003-12-29 EP EP10184624.4A patent/EP2284694B1/en not_active Expired - Lifetime
- 2003-12-29 BR BR0306094-2A patent/BR0306094A/pt not_active IP Right Cessation
- 2003-12-29 EP EP03258226A patent/EP1496432A3/en not_active Ceased
- 2003-12-30 KR KR1020030099839A patent/KR100841131B1/ko not_active Expired - Fee Related
Also Published As
| Publication number | Publication date |
|---|---|
| RU2275677C2 (ru) | 2006-04-27 |
| CN1577249A (zh) | 2005-02-09 |
| TWI305882B (en) | 2009-02-01 |
| RU2003137709A (ru) | 2005-06-10 |
| EP1496432A2 (en) | 2005-01-12 |
| KR100841131B1 (ko) | 2008-06-24 |
| EP2284694A1 (en) | 2011-02-16 |
| EP1496432A3 (en) | 2007-12-12 |
| KR20050005729A (ko) | 2005-01-14 |
| SG144700A1 (en) | 2008-08-28 |
| BR0306094A (pt) | 2005-05-17 |
| JP4869552B2 (ja) | 2012-02-08 |
| EP2284694B1 (en) | 2013-05-15 |
| TW200500878A (en) | 2005-01-01 |
| CN1577249B (zh) | 2010-04-14 |
| JP2005025719A (ja) | 2005-01-27 |
| MXPA03011899A (es) | 2005-01-13 |
| US7539714B2 (en) | 2009-05-26 |
| US20040267858A1 (en) | 2004-12-30 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| BRPI0306094B1 (pt) | Apparatus, method, and system for performing a signal operation that multiplies the execution of a multi-signaling operation | |
| US10474466B2 (en) | SIMD sign operation | |
| JP4480997B2 (ja) | Simd整数乗算上位丸めシフト | |
| CN101187861B (zh) | 用于执行点积运算的指令和逻辑 | |
| TWI270007B (en) | Method and apparatus for shuffling data | |
| US7340495B2 (en) | Superior misaligned memory load and copy using merge hardware | |
| CN102103487B (zh) | 用于在单个指令中执行移位和异或运算的方法和装置 | |
| US20050108312A1 (en) | Bitstream buffer manipulation with a SIMD merge instruction | |
| TW201218070A (en) | Performing a multiply-multiply-accumulate instruction | |
| JP2009527035A (ja) | マイクロプロセッサにおけるパックされた加減演算 | |
| CN104115115A (zh) | 用于多精度算术的simd整数乘法累加指令 |