BR102014005801A2 - rastreamento de fluxo de controle de instruções - Google Patents

rastreamento de fluxo de controle de instruções Download PDF

Info

Publication number
BR102014005801A2
BR102014005801A2 BR102014005801A BR102014005801A BR102014005801A2 BR 102014005801 A2 BR102014005801 A2 BR 102014005801A2 BR 102014005801 A BR102014005801 A BR 102014005801A BR 102014005801 A BR102014005801 A BR 102014005801A BR 102014005801 A2 BR102014005801 A2 BR 102014005801A2
Authority
BR
Brazil
Prior art keywords
instruction
processor
execution
control flow
annotation
Prior art date
Application number
BR102014005801A
Other languages
English (en)
Inventor
Abhinav Das
Arvind Krishnaswamy
David J Sager
Jason M Agron
Jayaram Borba
Jeffrey J Cook
Ruchira Sasanka
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of BR102014005801A2 publication Critical patent/BR102014005801A2/pt

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/3287Power saving characterised by the action undertaken by switching off individual functional units in the computer system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0715Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a system implementing multitasking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0721Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment within a central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • G06F11/0754Error or fault detection not based on redundancy by exceeding limits
    • G06F11/076Error or fault detection not based on redundancy by exceeding limits by exceeding a count or rate limit, e.g. word- or bit count limit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

rastreamento de fluxo de controle de instruções - um mecanismo para rastrear o fluxo de controle de instruções em uma aplicação e realizar uma ou mais otimizações de um dispositivo de processamento, com base no fluxo de controle de instruções na aplicação, é revelado. os dados de fluxo de controle são gerados para indicar o fluxo de controle de blocos de instruções na aplicação. os dados de fluxo de controle podem incluir anotações que indicam se otimizações pode ser realizadas para diferentes blocos de instruções. os dados de fluxo de controle podem também ser usados para rastrear a execução das instruções para determinar se uma instrução em um bloco de instruções está atribuída a um thread, um processo, e/ou um núcleo de execução de um processador, e para determinar se os erros ocorreram durante a execução das instruções.

Description

"RASTREAMENTO DE FLUXO DE CONTROLE DE INSTRUÇÕES" CAMPO DA INVENÇÃO [0001] As modalidades aqui descritas geralmente referem-se a dispositivos de processamento e, mais especificamente, ao monitoramento do fluxo de instruções de controle.
HISTÓRICO [0002] Muitas aplicações (por exemplo, programas) apresentam um comportamento de fase quando as instruções da aplicação são executados através de um dispositivo de processamento (por exemplo, um processador). À medida que a execução da aplicação se move entre diferentes regiões e/ou blocos de instruções, o dispositivo de processamento pode ter diferentes características de comportamento. Por exemplo, um determinado bloco de instruções pode conter instruções independentes e pode permitir que várias instruções sejam executadas simultaneamente. Em outro exemplo, um determinado bloco de instruções pode usar determinados componentes de um dispositivo de processamento mais frequentemente (por exemplo, podem utilizar unidades de lógica aritmética e/ou memória de registos mais frequentemente).
BREVE DESCRIÇÃO DOS DESENHOS [0003] A descrição será entendida mais completamente a partir da descrição pormenorizada dada a seguir e dos desenhos anexos de várias modalidades da divulgação. Os desenhos, no entanto, não devem ser adotados para limitar a descrição de modalidades específicas, são apenas para esclarecimento e compreensão. [0004] A Figura 1 é um diagrama de blocos de uma arquitetura de sistema que inclui um módulo de fluxo de controle e um módulo de seguimento para seguir o fluxo de controle da execução de instruções em uma aplicação, de acordo com uma modalidade da descrição. [0005] A Figura 2 é uma tabela que exemplifica os dados de fluxo de controle para rastrear o fluxo de controle da execução de instruções em uma aplicação, de acordo com uma modalidade da descrição. [0006] A Figura 3 é uma tabela que exemplifica os dados de fluxo de controle para rastrear o fluxo de controle da execução de instruções em uma aplicação, de acordo com outra modalidade da descrição. [0007] A Figura 4 é um diagrama de blocos que ilustra um exemplo de alocação de instruções em um bloco de instruções para uma ou mais unidades de execução, de acordo com uma modalidade. [0008] A Figura 5 é uma tabela que exemplifica os dados de fluxo de controle para rastrear o fluxo da execução de instruções em uma aplicação, de acordo com uma outra modalidade da descrição. [0009] A Figura 6 é um diagrama de blocos que ilustra um módulo de fluxo de controle para gerar dados de controle de fluxo, de acordo com uma modalidade da descrição. [0010] A Figura 7 é um diagrama de blocos que ilustra um módulo de rastreio para rastrear as instruções de execução e/ou modificar os recursos utilizados por um módulo de processamento, de acordo com uma modalidade da descrição. [0011] A Figura 8 é um diagrama de fluxo que ilustra um método para rastrear o fluxo de controle de instruções, de acordo com uma modalidade da descrição. [0012] A Figura 9 é um diagrama de fluxo que ilustra um método para rastrear o fluxo de controle de instruções, de acordo com outra modalidade da descrição. [0013] A Figura 10 é um diagrama de blocos de um sistema em chip (SoC) de acordo com uma modalidade da presente descrição. [0014] A Figura 11 é um diagrama de blocos de uma modalidade de sistema em chip (SoC) 'desenhada de acordo com a presente descrição. [0015] A Figura 12 mostra um diagrama de uma máquina, no caso um sistema de computador, na qual um conjunto de instruções para fazer a máquina realizar qualquer uma ou mais das metodologias aqui descritas pode ser executado. [0016] A Figura 13 é um diagrama de bloco de um sistema de computador de acordo com uma implementação. [0017] A Figura 14 é um diagrama de bloco que ilustra um pipeline em ordem e uma fase de renomeação do registro, a emissão/execução de uma pipeline fora de ordem pelo dispositivo processador 1400 da FIG 14. [0018] A Figura 15 é um diagrama de bloco que ilustra um núcleo de arquitetura em ordem e uma lógica de renomeação do registro, lógica de emissão/execução fora de ordem para ser incluída em um processador de acordo com, pelo menos, uma modalidade da descrição. [0019] A Figura 16 é um diagrama de blocos da micro-arquitetura para um processador 2.00, que inclui os circuitos lógicos para executar instruções de acordo com uma modalidade da presente invenção.
DESCRIÇÃO DETALHADA [0020] Conforme discutido acima, muitas aplicações (por exemplo, programas) apresentam um comportamento de fase quando as instruções da aplicação são executados através de um dispositivo de processamento. Analisar regiões ou blocos de instruções pode permitir que um dispositivo de processamento aumente e/ou otimize o desempenho e/ou o uso de energia para cada região ou bloco de instruções. Uma solução de hardware possível identificar regiões ou blocos de instruções consiste em proporcionar uma memória de conteúdo endereçável (CAM) de endereços de instrução correspondentes a transição de fase. Como o dispositivo de processamento executa cada instrução, o dispositivo de processamento pode acessar o CAM para determinar se uma nova região de código está sendo inserida / encerrada e se uma otimização precisa ser ativada. No entanto, uma vez que o tamanho da CAM ultrapassa algumas entradas, a CAM pode ser ineficaz em termos de consumo de energia. Além disso, um programador e/ou um compilador pode inserir instruções adicionais para a própria aplicação (por exemplo, durante o tempo de compilação) para informar sobre quais instruções do pedido estão atualmente em execução. No entanto, isso pode retardar a execução do aplicativo e pode adicionar uma quantidade considerável de sobrecarga. [0021] Modalidades de descrição fornecem o rastreamento do fluxo de controle de instruções em uma aplicação e realizar uma ou mais otimizações de um dispositivo de processamento, com base no fluxo de controle de instruções na aplicação, é revelado. Em um modelo, os dados de fluxo de controle são gerados para indicar o fluxo de controle de blocos de instruções na aplicação. Os dados de fluxo de controle podem incluir anotações que indicam se otimizações pode ser realizadas para diferentes blocos de instruções. Os dados de fluxo de controle podem também ser usados para rastrear a execução das instruções para determinar se uma instrução em um bloco de instruções está atribuída a um thread, um processo, e/ou um núcleo de execução de um processador, e para determinar se os erros ocorreram durante a execução das instruções. Um dispositivo de processamento e/ou um módulo de rastreio acoplado ao dispositivo de processamento pode controlar a execução de instruções e/ou optimizar a operação do dispositivo de processamento com base nos dados de controle de fluxo. Em um modelo, os dados de fluxo de controle podem ser representados utilizando uma tabela , que pode permitir que o dispositivo de processamento e/ou o módulo de rastreio indexem de forma eficiente em um único local ou entrada na tabela. [0022] Embora as seguintes modalidades podem ser descritas com referência a circuitos integrados específicos, como por exemplo em plataformas de computação ou microprocessadores, outras modalidades são aplicáveis a outros tipos de circuitos integrados e dispositivos lógicos. Técnicas semelhantes e lições das modalidades aqui descritas podem ser aplicadas a outros tipos de circuitos ou de dispositivos semicondutores. Por exemplo, as configurações descritas não são limitadas a sistemas de computadores desktop ou a Ultrabooks™. Elas também podem ser usadas em outros dispositivos, tais como os portáteis, tablets, outros notebooks finos, sistemas em chips (SOC) e aplicações integradas. Alguns exemplos de dispositivos portáteis incluem os telefones celulares, dispositivos de protocolos de internet, câmeras ' digitais, agendas digitais (PDAs) e PCs portáteis. As aplicações integradas incluem, normalmente, microcontroladores, processadores de sinais digitais (DSP), chips, computadores em rede (NetPC), caixas set-top, hubs de rede, switches de redes de área ampliada (WAN) ou quaisquer outros sistemas capazes de'executar as funções e operações descritas abaixo. [0023] Embora as formas de realização abaixo sejam descritas com referência a um processador, outras formas de realização são aplicáveis a outros tipos de circuitos integrados e dispositivos lógicos. Técnicas e ensinamentos semelhantes das formas de realização da presente invenção podem ser aplicadas a outros tipos de circuitos ou de dispositivos semicondutores que podem se beneficiar de um maior rendimento do pipeline e do desempenho aprimorado. Os ensinamentos das formas de realização da presente invenção são aplicáveis a qualquer processador ou aparelho que executa manipulações de dados. No entanto, o presente invento não está limitado aos processadores ou máquinas que executam 512 bits, 256 bits, 128 bits, 64 bits, 32 bits ou 16 bits de operações de dados e pode ser aplicado a qualquer processador e máquina, em que a manipulação ou a gerenciamento de dados é realizada. Além disso, a descrição abaixo oferece exemplos, e os desenhos que acompanham mostram vários exemplos para fins de ilustração. No entanto, estes exemplos não devem ser interpretados num sentido limitador, eles servem simplesmente para fornecer exemplos de formas de realização da presente invenção, em vez de fornecer uma lista exaustiva de todas as implementações possíveis de formas de realização da presente invenção. [0024] A Figura 1 é um diagrama de bloco de uma arquitetura de sistema 100 que inclui um módulo de fluxo 140 de controle e um módulo de seguimento 150 para seguir o fluxo de controle da execução de instruções em uma aplicação, de acordo com uma modalidade da descrição. A arquitetura do sistema também inclui uma aplicação 110, um compilador 120, um analisador binário 13 0, um perfil de tempo de execução 135, dados de controle de fluxo 145 e um módulo de processamento 160. [0025] A aplicação 110 pode ser um programa, um módulo de software, um componente de software e/ou outro elemento de software que pode ser executado pelo módulo de processamento 160. A aplicação 110 pode incluir uma pluralidade de instruções. As instruções podem incluir código de programa para fazer com que o módulo de processamento 160 realize atividades como, mas não limitadas a, a leitura de dados, gravação de dados, processamento de dados, formulação de dados, conversão de dados, transformação de dados, etc. Por exemplo, a aplicação 110 pode ser um arquivo binário e/ou um arquivo executável que inclui instruções para fazer com que o módulo de processamento 160 execute um media player para reproduzir itens de mídia (como vídeos digitais ou música digital) ou para fazer com que o módulo de processamento 160 execute um navegador web. As instruções da aplicação 110 podem ser divididas em blocos de instruções (por exemplo, uma série ou grupo de instruções), tais como blocos de instrução 115A através de 115X. [0026] Os blocos de instrução 115A através de 115X podem incluir uma variedade de diferentes instruções (por exemplo, as instruções de programa). Por exemplo, os blocos de instrução 115A através de 115X podem incluir uma instrução ADD (para adicionar dois ou mais valores) , uma de instrução MULT (para múltiplos de dois ou mais valores) , uma de instrução OR exclusiva (XOR) , (para or-exclusivo ou dois ou mais valores) , uma instrução AND (para realizar um bit wise em dois ou mais valores), uma instrução de armazenamento (para armazenar um valor em um local de memória, como um registo) , uma instrução JUMP (para direcionar o fluxo de execução das instruções para uma instrução particular), uma instrução BRANCH (para direcionar o fluxo de execução das instruções para uma instrução específica com base em uma ou mais condições, etc.) Em um modelo, os blocos de instrução 115A através de 115X podem ser blocos básicos. Um bloco básico pode ser um grupo (por exemplo, um bloco) de instruções que tem um ponto de entrada {por exemplo, uma instrução no bloco básico é o destino de uma instrução JUMP e/ou BRANCH) e um ponto de saída (por exemplo, a última instrução pode ser JUMP ou BRANCH para um bloco básico diferente). [0027] O módulo de processamento 160 pode executar as instruções da aplicação 110. As instruções podem incluir código de programa para fazer com que o módulo de processamento 160 realize atividades como, mas não limitadas a, a leitura de dados, gravação de dados, processamento de dados, formulação de dados, conversão de dados, transformação de dados, etc. O módulo processador 160, por exemplo, pode incluir um microprocessador de conjunto de instruções complexo (CISC), um microprocessador de conjunto de instruções reduzidas (RISC), um microprocessador de palavra de instrução muito longa (VLIW), um processador de múltiplos núcleos, um processador muitithreaded, um processador de voltagem ultra baixa, um processador embutido, um processador implementando uma combinação de conjuntos de instrução e/ou qualquer outro dispositivo processador, tal como um processador de sinal digital, por exemplo. O módulo de processamento 160 pode ser um processador de uso geral, como um Core i3 ™, i5, i7, 2 Duo e Quad, Xeon™, Itanium™, XScale™ ou processador StrongAKM™, que estão disponíveis pela Intel Corporation, de Santa Clara, na Califórnia Alternativamente, o o módulo de processamento 160 pode ser de outras empresas, tais como ARM Holdings, Ltd, MIPS, etc O módulo de processamento 160 pode ser um processador de uso especial, tal como, por exemplo, um processador de rede ou de comunicação, motor de compressão, processador de gráficos, co-processador, processador incorporado, um circuito integrado de aplicação específica (ASIC), um gate array de campo programável (FPGA), um processador de sinal digital (DSP) ou outros semelhantes. O módulo de processamento 160 pode ser implementado em um ou mais chips. O módulo de processamento 160 pode ser uma parte de e/ou pode ser implementado em um ou mais substratos usando qualquer um de uma série de tecnologias de processamento, tais como, por exemplo, BiCMOS, CMOS, ou NMOS. [0028] Em uma modalidade, o módulo de processamento 160 pode apresentar um comportamento diferente, pode utilizar certos componentes do módulo de processamento 160 com mais frequência (por exemplo, certos circuitos dentro do módulo de processamento 160) e/ou pode funcionar de uma -determinada forma, quando um ou mais dos blocos de instrução 115A através de 115X é executado pelo módulo de processamento 160. Por exemplo, o bloco de instrução 115A pode incluir uma variedade de instruções (por exemplo, as instruções do programa) que executam funções aritmética e/ou lógicas (tais como XOR, ADD, MULT, etc.) O módulo de processamento 160 pode usar mais a aritmética e as unidades lógicas (ALUs) ao executar as instruções no bloco de instrução 115A, quando comparado a outros blocos de instrução. Em outro exemplo, o bloco de instrução 115B pode incluir instruções não relacionadas (por exemplo, instruções que não dependem de outras instruções no bloco de instrução 115Β) . Instruções independentes podem permitir que múltiplas instruções sejam executadas pelo módulo de processamento 160 simultaneamente. Em uma modalidade, o paralelismo de nível de instrução (PLI) pode ser uma medida da quantidade de instruções que o módulo de processamento 160 pode executar simultaneamente Devido ao fato de as instruções no bloco de instrução 115 serem independentes (por exemplo, as instruções não dependem dos resultados de outras instruções), o bloco de instrução 115B pode permitir uma maior quantidade de (ILP) do que outros blocos de instrução. [0029] Em um modelo, o compilador 120 pode gerar o pedido 110 com base em um código fonte. O código-fonte pode ser um ou mais instruções de computador escritas usando uma linguagem legível (por exemplo, uma linguagem de programação, como Java, C + + , C, C#, etc.) 0 compilador 120 pode ser qualquer lógica de processamento, que pode incluir hardware (por exemplo, circuitos, lógica dedicada, lógica prograraável, microcódigo, etc.), de software (por exemplo, instruções para rodar em um dispositivo de processamento), firmware ou uma combinação dos mesmos, que pode gerar instruções (por exemplo, código binário, código objeto, as instruções do programa, etc.) que pode, com ou sem processamento de ligação adicional, ser executado pelo módulo de processamento 160. Em outra modalidade, o compilador 120 pode ser um compilador just-in-time (JIT). Um compilador JIT pode ser um compilador que gera código de bytes a partir do código fonte. O bytecode pode ser uma representação intermediária que é traduzido e/ou interpretado por uma máquina virtual como instruções (por exemplo, código binário, código do objeto, as instruções do programa, etc.) que pode ser executado pelo módulo de processamento 160. O código de bytes gerado por um compilador JIT pode ser portável entre diferentes arquiteturas de computadores. Uma máquina virtual associada a cada uma das diferentes arquiteturas de computadores podem traduzir e/ou interpretar o bytecode em instruções utilizadas pela arquitetura de computadores. [0030] Em um modelo, o analisador binário 130 pode ser uma lógica de processamento que pode incluir hardware (por exemplo, circuitos, lógica dedicada, lógica programável, microcódigo, etc.), de software (por exemplo, instruções para rodar em um dispositivo de processamento), firmware ou uma combinação dos mesmos, que pode analisar o pedido 110 enquanto a aplicação 110 é executada (por exemplo, enquanto as instruções e/ou blocos de instrução 115A através de 115X são executados) pelo módulo de processamento 160. O analisador binário 130 pode identificar instruções BRANCH e/ou JUMP na aplicação 110, pode identificar destinos para instruções JUMP e/ou BRANCH, pode identificar tipos de instruções (por exemplo, instruções para acessar uma memória ou um registo, instruções de operação aritmética ou lógica, etc.) no bloco de instrução 115A através de 115X, pode identificar os locais de memória (por exemplo, registros) utilizados pelas instruções na aplicação 110, etc. O analisador binário 130 pode também identificar os blocos de instrução 115A através de 115X (por exemplo. os blocos básicos) na aplicação 110. Por exemplo, o analisador binário 130 pode agrupar múltiplas instruções da aplicação 110 no bloco de instrução 115C. Em uma modalidade, o analisador binário 130 pode receber os dados sobre a execução das instruções da aplicação 110 do módulo de processamento. O analisador binário 130 pode gravar e/ou armazenar dados sobre a execução das instruções de aplicação 110 no perfil de tempo de execução 135. O perfil de tempo de execução 135 pode incluir dados como os locais de instruções BRANCH e/ou JUMP, o número de vezes que cada caminho de uma instrução de BRANCH é tomado, os locais de memória usados e/ou acessadas por instruções, tipos de instruções, etc Em uma modalidade, o perfil de tempo de execução 13 5 pode ser dados que indicam como as instruções da aplicação 110 foram executadas e/ou os recursos (por exemplo, registos de memória, circuitos e/ou componentes do módulo de processamento 160) que são utilizados pelas instruções do aplicação 110. O perfil de tempo de execução também pode incluir dados que indicam quanto tempo uma instrução, operação, função e/ou outra ação levou para executar. Por exemplo, o perfil de tempo de execução 135 pode incluir dados que indicam quanto tempo levou o módulo de processamento 160 para executar uma instrução particular e/ou bloco de instrução. O perfil de tempo de execução 135 também pode ser referido como um traço ou um vestígio de instrução. [0031] Em uma modalidade, o módulo de fluxo de controle 140 pode gerar dados de controle de fluxo 145 para a aplicação 110. O módulo de controle de fluxo 140 pode ser uma lógica de processamento que pode incluir hardware {por exemplo, circuitos, lógica dedicada, lógica programável, microcódigo, etc.), software (como por exemplo instruções de executar em um dispositivo de processamento), firmware ou uma combinação dos mesmos. Os dados de controle de fluxo 145 podem incluir dados e/ou informações como identificadores para os blocos de instrução 115A através de 115X, identificadores de destino (por exemplo, identificadores de um ou mais blocos de instruções que um primeiro bloco de instruções pode ramificar e/ou ir para) e/ou anotações para um ou mais dos blocos de instrução 115A através de 115X. Os dados de controle de fluxo 145 serão discutidos em mais detalhes abaixo em conjunção com as Figuras 2, 3, e 5. O módulo de controle de fluxo 140 pode analisar a aplicação 110 gerada pelo compilador 120 para gerar os dados de controle de fluxo 145. O módulo de controle de fluxo 140 pode identificar blocos de instrução (por exemplo, blocos de instrução 115A através de 115X) a partir das instruções na aplicação 110. Por exemplo, o compilador 120 pode agrupar múltiplas instruções da aplicação 110 no bloco de instrução 115D. O módulo de controle de fluxo 140 pode também identificar blocos de instrução de destino para instruções BRUNCH e/ou JUMP. Por exemplo, o bloco de instrução 115A pode incluir uma instrução BRANCH que movimenta o bloco de instrução 115B ou o bloco de instrução 115D, dependendo se uma condição associada com a instrução BRANCH está satisfeita. [0032] Em uma modalidade, o módulo de fluxo de controle 140 pode converter instruções BRANCH indiretas em uma série de instruções COMPARE e instruções JUMP. Uma instrução BRANCH indireta pode ser uma instrução que especifica onde um endereço está localizado, em vez de especificar o endereço da próxima instrução a ser executada. O módulo de fluxo de controle 140 pode gerar duas instruções COMPARE e JUMP para cada alvo do branch indireto. Por exemplo, se uma instrução de branch indireta tem um primeiro alvo e um segundo alvo, o módulo de controle de fluxo pode gerar uma primeira instrução COMPARE que determina se o endereço da seguinte instrução é igual ao primeiro alvo e uma primeira instrução JUMP que é executada se o primeiro alvo é igual ao seguinte endereço de instrução, e podem gerar uma segunda instrução COMPARAR que determina se o endereço da instrução seguinte é igual ao segundo alvo e uma segunda instrução JUMP que é executada se o segundo alvo é igual ao seguinte endereço de instrução. Uma otimização pode ser usado para retornos, que são uma forma de branch indireta. Para retornos, o compilador 120 pode saber que um retorno transfere o controle para a instrução seguindo sua chamada correspondente. A instrução alvo de uma instrução de retorno pode ser encontrada através da manutenção de uma pilha de blocos de chamada/retorno, além da tabela de fluxo de controle. [0033] Em uma modalidade, o módulo de fluxo de controle 140 pode gerar anotações para um ou mais dos blocos de instrução 115A através de 115X. As anotações poderão ser incluídas nos dados de fluxo de controle 145. As anotações podem incluir dados que podem ser usados para controlar a execução das instruções na aplicação 110, podem ser utilizadas para modificar os recursos utilizados pelo módulo de processamento 160, podem ser usadas para permitir que o módulo de processamento 160 opere de maneira mais eficiente e/ou podem ser usadas para otimizar o funcionamento do módulo de processamento 160. Por exemplo, ' as anotações podem incluir informações tais como a quantidade de ILP que pode ser possível em um bloco de instruções. Em outro exemplo, as anotações podem incluir informações tais como a quantidade de instruções em um bloco de instruções. Esta informação pode ser usada para identificar erros de hardware (por exemplo, um erro físico ou de hardware em uma memória, como um registo) e/ou erros de software (por exemplo, um erro em um sinal ou dado que pode mudar uma instrução e/ou um valor de dados). [0034] Em uma modalidade, o módulo de instrução 140 poderá se comunicar (por exemplo, transmitir dados para e/ou receber dados a partir de) com o compilador 12 0 ao gerar os dados de fluxo de controle 145. Por exemplo, enquanto o compilador 120 compila o código-fonte para gerar as instruções para a aplicação 110, o compilador 120 pode fornecer as instruções para o módulo de controle de fluxo 140 e o módulo de controle de fluxo 140 pode analisar as instruções para gerar os dados de fluxo de controle 145. Em outra modalidade, o módulo de instrução 140 poderá ser incluído como um componente e/ou parte do compilador 120 Por exemplo, o módulo de controle de fluxo 14 0 pode ser um módulo de software e/ou componente utilizado pelo compilador 120 quando o compilador 120 gera as instruções para a aplicação 110. O compilador 120 pode gerar os dados de controle de fluxo 145 ao mesmo tempo ou em torno do mesmo tempo que o compilador 120 gera as instruções para a aplicação 110 (por exemplo, gera a aplicação 110). [0035] Em uma modalidade, o módulo de fluxo de controlel40 poderá se comunicar (por exemplo, transmitir dados para e/ou receber dados a partir de) com o analisador binário 130 ao gerar os dados de fluxo de controle 145. Por exemplo, o analisador binário pode gerar o perfil de tempo de execução 135 e pode fornecer o perfil de tempo de execução 13 5 para o módulo de controle de fluxo 140. O módulo de controle de fluxo 140 pode analisar o perfil de tempo de execução 13 5 para gerar os dados de controle de fluxo 145. Em outra modalidade, o módulo de instrução 140 poderá ser incluído como um componente e/ou parte do analisador binário. Por exemplo, o analisador binário 130 pode gerar os dados de controle de fluxo 145, ao mesmo tempo ou em torno do mesmo tempo em que o analisador binário 130 gera o perfil de tempo de execução 135. [0036] Em uma modalidade o módulo de seguimento 150 pode controlar a execução de uma ou mais instruções na aplicação 110, pode permitir que o módulo de processamento 160 opere de maneira mais eficiente e/ou pode otimizar a operação do módulo de processamento ods dados de controle de fluxo 145. O módulo de controle de fluxo 150 pode ser uma lógica de processamento que pode incluir hardware (por exemplo, circuitos, lógica dedicada, lógica programável, microcódigo, etc.), software (como por exemplo instruções de executar em um dispositivo de processamento), firmware ou uma combinação dos mesmos. Por exemplo, o módulo de rastreamento 150 pode ser uma máquina de estado finito que é implementada em hardware. A máquina de estado finito inclui um dispositivo lógico programável, um controlador lógico programável, portas lógicas, flip flops e/ou relés. A máquina de estado finito também podem incluir uma ou mais memórias e/ou registos para armazenar variáveis de estado. A máquina de estado finito podem ainda incluir um ou mais blocos de lógica combinacional que determinam se um estado de transição deve ocorrer, e um ou mais blocos de lógica combinacional que determinam a saída da máquina de estado finito. Em uma modalidade o módulo de rastreamento 150 pode ser parte do módulo de processamento 160. Por exemplo, o módulo de rastreamento 15 0 pode ser um circuito dentro do módulo de processamento 160. [0037] Em uma modalidade, o módulo de rastreamento 150 pode modificar os recursos utilizados pelo módulo de processamento 160 e/ou pode otimizar a operação do módulo de processamento 160 com base nos dados de fluxo de controle 145. Por exemplo, o módulo de rastreamento 150 pode determinar que o bloco de instrução 115A tem baixa ILP, O módulo de processamento 160 pode incluir vários núcleos de execução (por exemplo, quatro núcleos de execução, oito núcleos de execução, etc.) e o módulo rastreamento 150 pode instruir o módulo de processamento 160 para desativar, desligar, e / ou se abster de utilizar alguns dos núcleos de execução para reduzir a quantidade de energia usada pelo módulo de processamento 160. Em outro exemplo, o módulo de rastreamento 150 pode determinar que um bloco de instrução (por exemplo, a instrução bloco 115C) inclua principalmente instruções de operação aritméticas e lógicas (por exemplo, ADD, XOR, etc.) O módulo de rastreamento 150 pode instruir o módulo de processamento 160 para preparar os circuitos, componentes e/ou módulos que executara operações aritméticas e lógicas para as instruções do próximo bloco de instrução. [0038] Em uma modalidade, o módulo de rastreamento 150 pode determinar se a modificação dos recursos utilizados pelo módulo de processamento está tendo efeito na operação do módulo de processamento 160. Por exemplo, o módulo de rastreamento 150 pode determinar se desligar ou desativar um ou mais componentes do módulo de processamento 160 é permitir que um dispositivo informático economize energia (por exemplo, usar menos energia ou a energia da bateria). Em outro exemplo, o módulo de seguimento 150 pode determinar se circuitos de preparação, componentes e/ou módulos do módulo de processamento 160 que são utilizados por um bloco de instruções futuro estão aumentando a velocidade de execução das instruções na aplicação 110. Em uma modalidade, se o módulo de rastreamento 150 determina que a alteração dos recursos utilizados pelo módulo de processamento 160 não está tendo um efeito na operação do módulo de processamento 160, o módulo de rastreamento 150 pode atualizar os dados de fluxo de controle 145 para indicar que a modificação de recursos não deve ser realizada (por exemplo, para indicar que uma otimização não deve ser realizada). Por exemplo, o módulo de rastreamento 150 pode remover uma anotação (que pode incluir dados indicativos de uma otimização) ou pode adicionar dados para uma anotação indicando que a modificação de recursos não deverá ser executada. [0039] Em outra modalidade, o módulo de seguimento 150 pode controlar a execução das instruções na aplicação 110 utilizando os dados de controle de fluxo 145. Por exemplo, o módulo de processamento 160 pode determinar que o módulo de processamento 160 está executar o bloco de instrução 115A e que o bloco de instruções 115A inclui doze instruções. Se o módulo de processamento 160 pula para a execução de instruções em outro bloco de instruções (por exemplo, bloco de instrução 115D) após executar menos de doze instruções, o módulo de rastreamento pode determinar que um erro (por exemplo, um erro de hardware e/ou um erro de software) ocorreu, porque menos de doze instruções foram executadas antes que as instruções do outro bloco de instrução fossem executadas. O módulo de rastreamento 150 pode enviar ou levantar uma bandeira de erro e o módulo de processamento 160 pode realizar operações adicionais com base na bandeira de erro (por exemplo, pode terminar a execução das instruções para a aplicação 110) . Em outro exemplo, o módulo de processamento 160 pode executar as instruções de um bloco de instruções usando diferentes processos, threads e/ou núcleos de execução. Enquanto o módulo de processamento 160 executa uma instrução de um bloco de instruções, o módulo de processamento 160 pode atribuir a instrução a um processo, thread e/ou núcleo de execução. O módulo de rastreamento 150 pode adicionar e/ou atualizar as anotações dos dados de fluxo de controle 145 para indicar a qual processo, thread e/ou núcleo de execução uma instrução no bloco de instrução está atribuída. [0040] Em uma modalidade, um ou mais do compilador 120, o analisador de binário 130, o módulo de controle de fluxo 140 e o módulo de seguimento 150 podem estar no mesmo dispositivo de computação onde está o módulo de processamento 160. Por exemplo, o. compilador 120, o módulo de seguimento 150 e o módulo de processamento 160 podem estar no mesmo dispositivo de computação. Em outro exemplo, o analisador binário 130, o módulo de controle de fluxo 140 e o módulo de seguimento 150 podem estar no mesmo dispositivo de computação onde está o módulo de processamento 160. Exemplos de um dispositivo de computação podem incluir, mas não estão limitados a, um dispositivo de comunicações móvel como um telefone portátil (por exemplo, um telefone celular) ou smartphone, um dispositivo de computação portátil tal como um tablet, um laptop, um notebook, um computador portátil, um computador de mesa, um servidor e assim por diante. [0041] A Figura 2 é uma tabela 290 que exemplifica os dados de fluxo de controle para rastrear o fluxo de controle da execução de instruções em uma aplicação, de acordo com uma modalidade da descrição. Como discutido acima, um módulo de rastreio pode utilizar a tabela 290 (por exemplo, dados de controlo de fluxo) para modificar os recursos utilizados por um módulo de processamento (por exemplo, um processador) para permitir que o módulo de processamento opere de maneira mais eficiente e/ou para otimizar a operação do módulo de processamento. Embora os dados de controle de fluxo sejam ilustrado na forma de uma tabela (por exemplo, a tabela 2 90) , deve ser entendido que os dados de controle de fluxo podem ser representados utilizando várias outras estruturas de dados e/ou representações. Por exemplo, os dados de controle de fluxo podem ser representados através de um gráfico, uma árvore, uma lista, etc. [0042] A tabela 290 inclui quatro colunas. A primeira coluna é chamada de "Current Block "e inclui identificadores (por exemplo, identificadores de blocos) para seis blocos de instrução diferentes (por exemplo, blocos básicos). Voltando à Figura 1, o bloco de instrução 115A pode ser marcado usando o identificador "1", o bloco de instruções 115B pode ser marcado usando o identificador "2", o bloco de instruções 115C pode ser marcado usando o identificador "3", etc. Deve entender-se que em outras modalidades os identificadores podem ser de qualquer valor alfanumérico, string, número e/ou outro valor que pode ser usado para identificar um bloco de instruções (por exemplo, um bloco básico). A segunda coluna é chamada de "Not Taken" e inclui identificadores para um bloco de instrução de destino quando uma instrução BRANCH não é tomada. Por exemplo, a última instrução no bloco de instrução "1" pode ser uma instrução BRANCH e durante a execução a condição para a instrução BRANCH pode não ser satisfeita. O módulo de processamento pode saltar e/ou continuar para as instruções do bloco de instrução "6"" quando a condição para a instrução BRANCH não for satisfeita. Numa forma de realização, a tabela 290 pode indicar que um bloco de instruções não inclui uma instrução de branch com uma condição. Por exemplo, o bloco de instrução "3" tem o valor "N/A" para a coluna Not-Taken. Isso pode indicar que a última instrução no bloco instrução "3" é uma instrução incondicional BRANCH ou JUMP. A terceira coluna é chamada de "Not Taken" e inclui identificadores para um bloco de instrução de destino quando uma instrução BRANCH é tomada. Por exemplo, a última instrução no bloco de instrução "1" pode ser uma instrução BRANCH e durante a execução a condição para a instrução BRANCH pode ser satisfeita. O módulo de processamento pode saltar e/ou continuar para as instruções do bloco de instrução "2" quando a condição para a instrução BRANCH for satisfeita. A quarta coluna é chamada de "Annotation" e inclui uma ou mais anotações para o bloco de instrução identificado na coluna "Current Block". [0043] Cada linha da tabela 290 inclui um identificador para um bloco de instruções atual (por exemplo, um identificador para o bloco de instruções que contém a instrução atualmente em execução) , um primeiro identificador para um bloco de instruções de destino se uma instrução de branch não é recebida, e um segundo identificador para um bloco de instrução de destino se uma instrução de branch é recebida, e anotações para o bloco atual {por exemplo, o bloco de instrução atual ou bloco básico atual) . Por exemplo, a primeira linha da tabela 290 indica que o bloco de instruções "1", vai saltar para o bloco de instrução "6" se uma instrução BRANCH no final do bloco de instrução "1" não é feita ou vai saltar para o bloco de instrução "2" se um instrução BRANCH no final do bloco de instruções de "2" é feita. A primeira linha da tabela também inclui a anotação "TAKEN: 2-WIDE". Esta anotação pode indicar a quantidade ou o nível de ILP que pode ser possível quando um módulo de processamento executa as instruções do bloco de instrução "2".Por exemplo, a anotação "TAKEN: 2-WIDE" pode indicar que o módulo de processamento pode ser capaz de executar até duas instruções simultaneamente durante a execução de instruções do bloco de instrução "2". 0 módulo de rastreamento poderá instruir o módulo de processamento para usar dois núcleos de execução, com base na anotação para o bloco de instrução "1". Em outro exemplo, a anotação "Not-Taken: 4-WIDE" para a quinta linha da tabela 290 pode indicar que o módulo de processamento pode ser capaz de executar até quatro instruções simultaneamente durante a execução de instruções do bloco de instrução "6". O módulo de rastreamento poderá instruir o módulo de processamento para usar quatro núcleos de execução, com base na anotação para o bloco de instrução 5. Em outras modalidades, as anotações para os blocos de instruções podem incluir qualquer valor alfanumérico, valor de texto e/ou valor de número. [0044] Numa forma de realização, a tabela 290 permite que o módulo de rastreio rastreie a execução de blocos de instruções indexando em uma única entrada e/ou localização na tabela 290. Isto permite que o módulo de rastreamento funcione mais eficientemente do que usando um CAM (o que exigiria uma pesquisa de toda a CAM) para rastrear a execução dos blocos de instruções. [0045] A Figura 3 é uma tabela 3 00 que exemplifica os dados de fluxo de controle para rastrear o fluxo de controle da execução de instruções em uma aplicação, de acordo com uma modalidade da descrição. Como discutido acima, um módulo de rastreio pode utilizar a tabela 300 (por exemplo, dados de controle de fluxo) para rastrear instruções executadas por um módulo de processamento. Embora os dados de controle de fluxo sejam ilustrado na forma de uma tabela (por exemplo, a tabela 3 00) , deve ser entendido que os dados de controle de fluxo podem ser representados utilizando várias outras estruturas de dados e/ou representações. Por exemplo, os dados de controle de fluxo pode ser representado através de um gráfico, uma árvore, uma lista, etc. [0046] A tabela 300 inclui quatro colunas. A primeira coluna é chamada de "Current Block" e inclui identificadores (por exemplo, identificadores de blocos) para seis blocos de instrução diferentes (por exemplo, blocos básicos). A segunda coluna é chamada de "Not Taken" e inclui identificadores para um bloco de instrução de destino quando uma instrução BRANCH não é tomada. Numa forma de realização, a tabela 300 pode indicar que um bloco de instruções não inclui uma instrução de branch com uma condição. Por exemplo, o bloco de instrução "4" tem o valor "N/A" para a coluna Not-Taken, o que pode indicar que a última instrução no bloco de instrução "4" é uma instrução incondicional BRANCH ou JUMP. A terceira coluna é chamada de "Not Taken" e inclui identificadores para um bloco de instrução de destino quando uma instrução BRANCH é tomada. Em outras modalidades, os identificadores podem ser de qualquer valor alfanumérico, string, número e/ou outro valor que pode ser usado para identificar um bloco de instruções (por exemplo, um bloco básico). A quarta coluna é chamada de "Annotation" e inclui uma ou mais anotações para o bloco de instrução identificado na coluna "Current Block". [0047] Cada linha da tabela 300 inclui um identificador para um bloco de instruções atual (por exemplo, um identificador para o bloco de instruções que contém a instrução atualmente em execução), um primeiro identificador para um bloco de instruções de destino se uma instrução de branch não é recebida, e um segundo identificador para um bloco de instrução de destino se uma instrução de branch é recebida, e anotações para o bloco atual (por exemplo, o bloco de instrução atual ou bloco básico atual). Por exemplo, a segunda linha da tabela 300 indica que o bloco de instruções "2" vai saltar para o bloco de instrução "3" se uma instrução BRANCH no final do bloco de instrução "4" não é feita ou vai saltar para o bloco de instrução "2" se um instrução BRANCH no final do bloco de instruções de "3" é feita. A segunda linha da tabela também inclui a anotação "Contagem de Instrução: 3", A anotação pode indicar que o bloco de instruções "2" inclui três instruções. A partir da anotação, o módulo de rastreio pode acompanhar a execução de instruções em blocos de instruções para determinar se um erro de software e/ou um erro de hardware ocorreu. Por exemplo, o módulo de rastreio pode determinar que um erro de software ocorreu porque o módulo de processamento executa menos de três instruções ao executar o bloco de instruções "2". Em outras modalidades as anotações para os blocos de instruções podem incluir qualquer valor alfanumérico, valor de texto e/ou valor de número para representar o número de instruções de um bloco de instruções. [0048] Numa forma de realização, a tabela 300 permite que o módulo de rastreio rastreie a execução de blocos de instruções indexando em uma única entrada e/ou localização na tabela 300. Isto permite que o módulo de rastreamento funcione mais eficientemente do que usando um CAM (o que exigiría uma pesquisa de toda a CAM) para rastrear a execução dos blocos de instruções. [0049] A Figura 4 é um diagrama de blocos que ilustra um exemplo de alocação 400 de instruções em um bloco de instruções para uma ou mais unidades de execução, de acordo com uma modalidade. A alocação 400 inclui o bloco de instrução 405, o thread atribuído 410 e o thread atribuído 415. O bloco de instrução 405 inclui uma instrução XOR, seguido por uma instrução AND, seguido por uma instrução SHIFT, seguido por uma instrução OR, seguido por uma instrução MULT, seguido por uma instrução AND, seguido por uma instrução SHIFT, seguido por instruções BRANCH. Como discutido acima, as instruções individuais em um bloco de instruções (por exemplo, bloco de instruções 405) podem ser atribuídas a diferentes unidades de execução (por exemplo, diferentes threads e/ou processos diferentes) ou diferentes núcleos de execução de um processador. Por exemplo, as instruções individuais no bloco de instruções 405 pode ser atribuídas a um ou mais threads. Em outro exemplo, as instruções individuais no bloco de instruções 405 podem ser atribuídas a um ou mais processos. Em mais um exemplo, as instruções individuais no bloco de instruções 405 podem ser atribuídas a diferentes núcleos de execução (por exemplo, núcleos 1002A ilustrados na Figura 10 e núcleos 1106 e 1107 ilustrados na Figura 11 . ) . [0050] Tal como ilustrado na Figura 4, as instruções do bloco de instrução 4 05 podem ser atribuídas a um ou mais threads (por exemplo, unidades de execução). O thread atribuído 410 indica se uma instrução será executada por um primeiro thread e o thread atribuído 415 pode indicar se uma instrução será executada por um segundo thread. Um valor "1" indica que um thread irá executar uma instrução e um valor "0" indica que um thread não irá executar uma instrução. Por exemplo, a instrução XOR é atribuída ao primeiro thread, a instrução MULT é atribuída ao segundo thread e a instrução OR é atribuída tanto ao primeiro como ao segundo thread. [0051] A Figura 5 é uma tabela 500 que exemplifica os dados de fluxo de controle para rastrear o fluxo da execução de instruções em uma aplicação, de acordo com uma outra modalidade da descrição. Como discutido acima, um módulo de rastreio pode utilizar a tabela 500 (por exemplo, dados de controle de fluxo) para rastrear instruções executadas por um módulo de processamento. Embora os dados de controle de fluxo sejam ilustrado na forma de uma tabela (por exemplo, a tabela 5 00) , deve ser entendido que os dados de controle de fluxo podem ser representados utilizando várias outras estruturas de dados e/ou representações. Por exemplo, os dados de controle de fluxo pode ser representado através de um gráfico, uma árvore, uma lista, etc. [0052] A tabela 500 inclui quatro colunas. A primeira coluna é chamada de "Current Block" e inclui identificadores (por exemplo, identificadores de blocos) para seis blocos de instrução diferentes (por exemplo, blocos básicos). A segunda coluna é chamada de "Not Taken" e inclui identificadores para um bloco de instrução de destino quando uma instrução BRANCH não é tomada. Numa forma de realização, a tabela 500 pode indicar que um bloco de instruções não inclui uma instrução de branch com uma condição. Por exemplo, o bloco de instrução "4" tem o valor "N/A" para a coluna Not-Taken, o que pode indicar que a última instrução no bloco de instrução "4" é uma instrução incondicional BRANCH ou JUMP. A terceira coluna é chamada de "Not Taken" e inclui identificadores para um bloco de instrução de destino quando uma instrução BRANCH é tomada. Em outras modalidades, os identificadores podem ser de qualquer valor alfanumérico, string, número e/ou outro valor que pode ser usado para identificar ura bloco de instruções (por exemplo, um bloco básico). A quarta coluna é chamada de "Annotation" e inclui uma ou mais anotações para o bloco de instrução identificado na coluna "Current Block". [0053] Cada linha da tabela 500 inclui um identificador para um bloco de instruções atual (por exemplo, um identificador para o bloco de instruções que contém a instrução atualmente em execução), um primeiro identificador para um-bloco de instruções de destino se uma instrução de branch não é recebida, e um segundo identificador para um bloco de instrução de destino se uma instrução de branch é recebida, e anotações para o bloco atual (por exemplo, o bloco de instrução atual ou bloco básico atual). Por exemplo, a primeira linha da tabela 500 indica que o bloco de instruções "1" vai saltar para o bloco de instrução "6" se uma instrução BRANCH no final do bloco de instrução "1" não é feita ou vai saltar para o bloco de instrução "2" se a instrução BRANCH no final do bloco de instruções "1" é feita. A primeira linha da tabela 500 também inclui a anotação "T0: 11010101 / Tl: 01111010. "A anotação para o bloco de instruções "1" pode indicar se uma instrução do bloco de instruções de "1" é atribuída a um primeiro thread T0, um segundo thread Tl ou a ambos. Voltando à Figura 4, o bloco de instrução "1" pode incluir as oito instruções ilustradas no bloco de instrução 405. A anotação "T0: 11010101 / Tl: "01111010 "indica que a primeira, segunda, quarta, sexta e oitava instruções no bloco de instrução "1" (por exemplo, bloco de instrução 405) são atribuídas ao thread TO, e a segunda, terceira, quarta, quinta e sétima instruções no bloco de instrução "1" são atribuídas ao thread Tl. [0054] Numa forma de realização, a tabela 500 permite que o módulo de rastreio rastreie a execução de blocos de instruções indexando em uma única entrada e/ou localização na tabela 500. Isto permite que o módulo de rastreamento funcione mais eficientemente do que usando um CAM (o que exigiría uma pesquisa de toda a CAM) para rastrear a execução dos blocos de instruções. [0055] A Figura 6 é um diagrama de blocos que ilustra um módulo de fluxo de controle 140 para gerar dados de controle de fluxo, de acordo com uma modalidade da descrição. O módulo de fluxo de controle 140 inclui um módulo de instruções 605, um módulo de anotação 610 e um módulo de perfil 615. O módulo de controle de fluxo 140 pode ser uma lógica de processamento que pode incluir hardware (por exemplo, circuitos, lógica dedicada, lógica programável, microcódigo, etc), software (como por exemplo instruções de executar em um dispositivo de processamento), firmware ou uma combinação dos mesmos. Mais ou menos componentes poderão ser incluídos no módulo de controle de fluxo 140, sem perda de generalidade. Por exemplo, dois dos módulos podem ser combinados num único módulo, ou um dos módulos pode ser dividido em dois ou mais módulos. Em uma modalidade, o módulo de fluxo de controle 140 pode gerar dados de controle de fluxo (tal como discutido acima em conjunto com as Figuras 1, 2, 3, e 5). [0056] Em uma modalidade, o módulo de instruções 605 pode analisar um pedido (gerado por um compilador). O módulo de instrução 605 pode identificar blocos de instrução (por exemplo, blocos básicos) a partir das instruções na aplicação. O módulo de instrução 605 pode também identificar blocos de instrução de destino para instruções BRANCH e/ou JUMP nos blocos de instruções da aplicação. O módulo de instrução 605 poderá se comunicar (por exemplo, transmitir dados para e/ou receber dados a partir de) com o compilador ao gerar os dados de fluxo de controle 145. Por exemplo, enquanto o compilador compila o código-fonte para gerar as instruções para a aplicação, o compilador pode fornecer as instruções para o módulo de instrução 605 e o módulo de instrução 605 pode analisar as instruções para gerar os dados de controle de fluxo. [0057] Em uma modalidade, o módulo de perfil 615 poderá se comunicar (por exemplo, transmitir dados para e/ou receber dados a partir de) com um analisador binário Por exemplo, o analisador binário pode gerar um perfil de tempo de execução e pode fornecer o perfil de tempo de execução para o módulo de perfil 615. O módulo de perfil 615 pode identificar blocos de instrução (por exemplo, blocos básicos) nas instruções da aplicação com base no perfil de tempo de execução. O módulo de perfil 615 pode também identificar blocos de instrução de destino para instruções BRANCH e/ou JUMP nas instruções da aplicação com base no perfil de tempo de execução. O módulo de perfil 615 pode analisar o perfil de tempo de execução para gerar os dados de fluxo de controle. [0058] Em uma modalidade, o módulo de anotação 610 pode gerar anotações para uma ou mais das instruções. As anotações podem ser incluídas nos dados de fluxo de controle. As anotações podem incluir dados que podem ser usados para rastrear a execução das instruções na aplicação, tal como ilustrado acima e discutido junto com as Figuras 3-5. As anotações podem também incluir dados que podem ser utilizados para modificar os recursos utilizados pelo módulo de processamento, para permitir que o módulo de processamento opere de maneira mais eficiente e/ou podem ser usadas para otimizar o funcionamento do módulo de processamento. Por exemplo, as anotações podem incluir informações tais como a quantidade de ILP que pode ser possível em um bloco de instruções. Em outro exemplo, as anotações podem incluir informações sobre quais tipos de componentes e/ou unidades de um dispositivo de processamento um bloco de instruções pode usar. Isto pode permitir que o módulo de processamento prepare os componentes e/ou unidades que são usadas pelas instruções. [0059] A Figura 7 é um diagrama de bloco que mostra um módulo de rastreio 150 rastreando as instruções de execução e/ou modificando os recursos utilizados por um módulo de processamento, de acordo com uma modalidade da descrição. O módulo de controle de fluxo 150 pode ser uma lógica de processamento que pode incluir hardware (por exemplo, circuitos, lógica dedicada, lógica programável, microcódigo, etc.), software (como por exemplo instruções de executar em um dispositivo de processamento), firmware ou uma combinação dos mesmos.
Em uma modalidade o módulo de seguimento 150 pode controlar a execução de uma ou mais instruções de uma aplicação, pode permitir que um módulo de processamento opere de maneira mais eficiente e/ou pode otimizar a operação do módulo de processamento. O módulo de controle de fluxo 150 pode ser uma lógica de processamento que pode incluir hardware {por exemplo, circuitos, lógica dedicada, lógica programável, microcódigo, etc.), software (como por exemplo instruções de executar em um dispositivo de processamento), firmware ou uma combinação dos mesmos. Mais ou menos componentes poderão ser incluídos no módulo de rastreamento 150, sem perda de generalidade. Por exemplo, dois dos módulos podem ser combinados num único módulo, ou um dos módulos pode ser dividido em dois ou mais módulos. [0060] Em uma modalidade, o módulo.de destino 705 pode determinar um bloco de instruções de destino para o bloco de instrução atual que está era execução em um módulo de processamento. Por exemplo, o módulo de destino 7 05 pode se comunicar com o módulo de processamento para determinar o resultado de uma instrução BRANCH. Em outro exemplo, o módulo de destinação 705 pode determinar a destinação de uma instrução JUMP. [0061] Em uma modalidade, a ferramenta de dispositivo de processamento 715 pode modificar os recursos utilizados pelo módulo de processamento 160 e/ou pode otimizar a operação do módulo de processamento 160 com base nos dados de controle de fluxo 145. Por exemplo, o dispositivo de processamento 715 pode dar instruções ao módulo de processamento para desativar, desligar, e/ou se abster de utilizar alguns dos núcleos de execução para reduzir a quantidade de energia usada pelo módulo de processamento. Em outro exemplo, o dispositivo de processamento 715 pode dar instruções ao módulo de processamento 160 para preparar os circuitos, componentes e/ou módulos que são utilizados por instruções no próximo bloco de instrução. Em uma modalidade, o dispositivo de processamento 715 pode determinar se a modificação dos recursos utilizados pelo módulo de processamento está tendo efeito na operação do módulo de processamento. Se o dispositivo de processamento 715 determina que a alteração dos recursos u.c±±-Lzauub peiu iiiocxu.±o u.e piüceb&aiueiiLO rio.o e&La ueiicio o efeito na operação do módulo de processamento, o dispositivo de processamento 715 pode atualizar os dados de fluxo de controle para indicar que a modificação de recursos ixcto ueve S0ir reaiizaQa, [0062] Em outra modalidade, o módulo de processamento 715 pode rastrear a execução das instruções na aplicação utilizando os dados de controle de fluxo. Por exemplo, o dispositivo de processamento 715 pode determinar que o módulo de processamento execute um bloco de instruções que inclui dez instruções. Se o módulo de processamento pula para outra instrução após executar menos de doze instruções, o módulo de rastreamento pode determinar que um erro (por exemplo, um erro de hardware e/ou um erro de software) ocorreu Em outro exemplo, o módulo de processamento pode executar as instruções de um bloco de instruções usando diferentes processos, threads e/ou núcleos de execução. Enquanto o módulo de processamento executa uma instrução de um bloco de instruções, o módulo de processamento pode atribuir a instrução a um processo, thread e/ou núcleo de execução. O dispositivo de processamento 715 pode adicionar e/ou atualizar as anotações dos dados de fluxo de controle para indicar a qual processo, thread e/ou núcleo de execução uma instrução no bloco de instrução está atribuída. [0063] A Figura 8 é um diagrama de fluxo que mostra um método 800 para rastrear o fluxo de controle de instruções, de acordo com uma modalidade. O método 800 pode ser realizado por uma lógica de processamento que pode incluir hardware (por exemplo, circuitos, lógica dedicada, lógica programável, microcódigo, etc.), software (como por exemplo instruções de executar em um dispositivo de processamento), firmware ou uma combinação dos mesmos. Numa forma de realização o método 800 pode ser realizado por um ou mais de um módulo de controle de fluxo 14 0 e módulo de seguimento 15 0, como ilustrado nas Figuras 1, 6 e 7. [0064] Referindo-se à Figura 8, o método 800 começa no bloco 805, onde o método 800 gera dados de controle de fluxo (por exemplo, gera um quadro, tal como ilustrado nas Figuras 2, 4, e 5) . Em outra modalidade, o método 800 pode gerar os dados de fluxo de controle enquanto compila código fonte para uma aplicação. Em outra modalidade, o método 800 pode gerar os dados de fluxo de controle durante a execução das aplicações. Por exemplo, o método 800 pode analisar instruções para a aplicação enquanto as instruções são executadas por um módulo de processamento. Em uma outra modalidade, o método 800 pode gerar dados de fluxo de controle com base num perfil de tempo de execução. No bloco 810, o método 800 determina um identificador de destino para um bloco de instrução atualmente em execução. Por exemplo, referindo-se a Figura 2, o bloco de instrução atualmente em execução pode ser o bloco de instrução "1" e o método 800 pode determinar que o bloco de instrução "1" vai ramificar ou saltar para o bloco de instrução "2 . "O método 800 identifica uma anotação associado ao bloco de instrução atualmente em execução (no bloco 815) . No bloco 820, o método 800 modifica os recursos utilizados pelo módulo de processamento e/ou acompanha a execução de instruções, com base nos dados de controle de fluxo. Por exemplo, o método 800 pode desativar componentes e/ou circuitos no módulo de processamento. Em outro exemplo, o método 800 pode controlar o thread, o processo, e/ou núcleo de execução em que uma instrução é designada. Em um outro exemplo, o método 800 pode controlar o número de instruções em um bloco de instrução (por exemplo, um bloco básico). Depois do bloco 820, o método 800 termina. [0065] A Figura 9 é um diagrama de fluxo que mostra um método 900 para rastrear a execução de instruções de acordo com outra modalidade. O método 900 pode ser realizado por uma lógica de processamento que pode incluir hardware (por exemplo, circuitos, lógica dedicada, lógica programável, microcódigo, etc.), software (como por exemplo instruções de executar em um dispositivo de processamento), firmware ou uma combinação dos mesmos. Numa forma de realização o método 900 pode ser realizado por um ou mais de um módulo de controle de fluxo 140 e módulo de seguimento 150, como ilustrado nas Figuras 1, 6 e 7. [0066] Referindo-se à Figura 9 o método 900 começa no bloco 905, onde o método 900 determina um identificador de destino para um bloco de instrução atualmente em execução. Por exemplo, referindo-se a Figura 2, o bloco de instrução atualmente em execução pode ser o bloco de instrução "5 "e o método 800 pode determinar que o bloco de instrução "5 "vai ramificar ou saltar para o bloco de instrução "6. "O método 900 identifica uma anotação associado ao bloco de instrução atualmente em execução (no bloco 910) . No bloco 915, o método 900 modifica os recursos utilizados pelo módulo de processamento e/ou acompanha a execução de instruções, com base nos dados de controle de fluxo. Por exemplo, o método 900 pode desativar componentes e/ou circuitos no módulo de processamento. Em outro exemplo, o método 900 pode controlar o thread, o processo, e/ou núcleo de execução em que uma instrução é designada. Em um outro exemplo, o método 900 pode controlar o número de instruções em um bloco de instrução (por exemplo, um bloco básico). [0067] No bloco 920, o método 900 pode determinar se a modificação dos recursos utilizados pelo módulo de processamento é útil (por exemplo, se modificando os recursos utilizados pelo módulo de processamento afeta a forma como o módulo de processamento opera) . Por exemplo, o método 900 pode determinar se desativar componentes e/ou circuitos no módulo de processamento economiza energia. Em outro exemplo, o método 900 poderá determinar se a preparação de certos componentes e/ou circuitos do módulo de processamento para preparar instruções em um próximo bloco de instrução acelera as execuções das instruções. Se a modificação dos recursos é útil, o método 900 termina. Se modificar os recursos não é útil, o método 900 prossegue para o bloco 925, onde o método 900 atualiza a anotação para indicar que os recursos não devem ser modificados. Por exemplo, o método 900 pode remover uma anotação ou pode adicionar dados para a anotação, indicando que os recursos não devem ser modificados. Depois do bloco 925, o método 900 termina. [0068] A Figura 10 é um diagrama de blocos de um SoC 1000 de acordo com uma modalidade da presente descrição. As caixas com linhas tracejadas são características opcionais em SoCs mais avançados. Na Figura 10, uma unidade (s) de interconexão 1012 é acoplada a: um módulo de processamento 1020, que inclui um conjunto de um ou mais núcleos 1002A-N e unidade (s) de cache compartilhada 1006, uma unidade de sistema de agente de 1010, uma unidade (s) de controlador de barramento 1016, uma unidade (s) de controlador de memória integrado 1014, um conjunto ou um ou mais processadores de mídia 1018, que podem incluir gráficos integrados lógica 1008, um processador de imagem 1024 para proporcionar funcionalidade de câmera de foto e/ou vídeo, um processador de áudio 1026 para fornecer hardware de aceleração de áudio e um processador de video 1028 para fornecer aceleração de codificação/decodificação de vídeo, uma unidade 1030 de memória de acesso aleatório estática (SRAM), uma unidade 1032 de acesso direto à memória (DMA) e uma unidade de exibição 1040 para acoplamento a um ou mais monitores externos. [0069] A hierarquia de memória inclui um ou mais níveis de cache dentro dos núcleos, um conjunto ou uma ou mais unidades de cache compartilhadas 1006 e memória externa (não mostrada) acoplada ao conjunto de unidades integradas de controlador de memória 1014. O conjunto de unidades de cache compartilhado 1006 podem incluir um ou mais caches de nível médio, como de nível 2 (L2), nível 3 (L3), nível 4 (L4) ou outros níveis de cache, um cache de último nível (LLC) e/ou suas combinações. [0070] Em algumas modalidades, um ou mais dos núcleos 1002Ά-Ν são capazes de multithreading. [0071] O agente de sistema 1010 inclui os componentes de coordenação e operação de núcleos 1002A-N. A unidade de agente de sistema 1010 podem incluir, por exemplo, uma unidade de controle de energia (PCU) e uma unidade de display. O PCU pode ser ou incluir a lógica e os componentes necessários para regular o estado de energia dos núcleos 1002A-N e a lógica gráfica integrada 10010. A unidade de visualização é para dirigir um ou mais monitores conectados externamente. [0072] Os núcleos 1002A-N podem ser homogêneos ou heterogêneos em termos de arquitetura e/ou conjunto de instruções. Por exemplo, alguns dos núcleos 1002A-N podem estar em ordem enquanto os outros estão fora de ordem. Como outro exemplo, dois ou mais dos núcleos 1002Α-Ν podem ser capazes de executar o mesmo conjunto de instruções, enquanto outros podem ser capazes de executar apenas um subconjunto do referido conjunto de instruções ou de um conjunto de instruções diferentes. [0073] O módulo de processamento 1020 pode ser um processador de uso geral, como um Core i3™, i5, i7, 2 Duo e Quad, Xeon™, Itanium™, XScale™ ou processador StrongARM™, que estão disponíveis pela Intel Corporation, de Santa Clara, na Califórnia Alternativamente, o módulo de processamento 1020 pode ser de outras empresas, tais como ARM Holdings, Ltd, MIPS, etc. O módulo de processamento 102 0 pode ser um processador de uso especial, tais como, por exemplo, uma rede ou um processador de comunicação, motor de compressão, processador de gráficos, co-processador, processador incorporado ou semelhantes. O módulo de processamento 102 0 pode ser implementado em um ou mais chips. O módulo de processamento 1020 pode ser uma parte de e/ou pode ser implementado em um ou mais substratos usando qualquer um de uma série de tecnologias de processamento, tais como, por exemplo, BiCMOS, CMOS, ou NMOS . [0074] A Figura 11 é um diagrama de blocos de uma modalidade de sistema em chip (SoC) desenhada de acordo com a presente descrição. Como um exemplo ilustrativo específico, SOC 1100 está incluído· no equipamento de usuário (UE). Em uma configuração, UE refere-se a qualquer dispositivo destinado ao uso para comunicação de um usuário final, como um telefone portátil, um smartphone, um tablet, um notebook ultra fino, um notebook com adaptador de banda larga ou qualquer outro dispositivo similar de comunicação. Com frequência, um UE conecta-se a uma estação-base ou nó, cuja natureza corresponde, em potencial, a uma estação móvel (MS) em uma rede GSM. [0075] Aqui, o SOC 1100 inclui dois núcleos-1106 e 1107. Os Núcleos 1106 e 1107 podem estar de acordo com um conjunto de instruções de uma Arquitetura, como um processador Intel® com arquitetura Core™, um processador da Advanced Micro Devices, Inc. (AMD), um processador baseado em MIPS, um projeto de processador baseado em ARM, ou um cliente da mesma, bem como os seus licenciados ou adotantes. Os núcleos 1106 e 1107 são acoplados ao controle de cache 1107 que está associado com a unidade de interface de barramento 1109 e o cache L2 1110 para se comunicar com outras partes do sistema 1100. A interconexão 1110 inclui uma interligação em chip, como um IOSF, AMBA ou outra interconexão acima discutida, o que potencialmente implementa um ou mais aspectos da descrição descrito. [0076] A interface 1110 fornece canais de comunicação com os outros componentes, como um Módulo de Identificação do Assinante (SIM) 1130 para fazer a interface com um cartão SIM, um rom de inicialização 1135 para manter o código de inicialização para execução por núcleos de 1106 e 1107 para inicializar e arrancar SOC 1100, um controlador de SDRAM 1140 para fazer a interface com a memória externa (por exemplo DRAM 1160), um controlador flash 1145 para fazer a interface com a memória não-volátil (por exemplo, o Flash 1165), um controle periférico 1150 (por exemplo, interface periférica de série) para interface com periféricos, codecs de vídeo 1120 e interface de vídeo 1125 para exibir e receber dados (por exemplo, entrada de dados tátil), GPU 1115 para executar cálculos relacionados com gráficos, etc. Qualquer uma dessas interfaces podem incorporar aspectos da descrição aqui descrita. [0077] Além disso, o sistema 1100 mostra periféricos para comunicação, como um módulo de Bluetooth 117 0, modem 3G 1175, GPS 1180 e Wi-Fi 1185. Observe, como dito acima, que o UE inclui um rádio para comunicação. Em consequência, esses módulos periféricos de comunicação não são todos necessários. No entanto, em um UE, alguma forma de rádio 'para comunicação externa deve ser incluída. [0078] A Figura 12 mostra um diagrama de uma máquina, no caso um sistema de computador 1200, na qual um conjunto de instruções para fazer a máquina realizar qualquer uma ou mais das metodologias aqui descritas pode ser executado. Em outras modalidades a máquina pode ser conectada (por exemplo, em rede) com outras máquinas em uma LAN, uma intranet, extranet ou na Internet. A máquina pode operar na qualidade de um servidor ou de um dispositivo cliente em um ambiente de rede cliente-servidor, ou como uma máquina de pares em um ambiente de rede peer-to-peer (ou distribuído). A máquina pode ser um computador pessoal (PC), um tablet PC, um set-top box (STB), um Assistente Digital Pessoal (PDA), um telefone celular, um dispositivo web, um servidor, um roteador de rede, switch ou ponte ou qualquer máquina capaz de executar um conjunto de instruções (sequenciais ou não) que especificam ações a serem tomadas por essa máquina. Além disso, ainda que apenas uma única máquina é mostrada, também deverá ser entendido o termo "máquina "como qualquer coleção de máquinas que executam individualmente ou em conjunto, um conjunto (ou vários conjuntos) de instruções para executar qualquer uma ou mais das metodologias discutidas aqui . [0079] O sistema de computador 1200 inclui um dispositivo de processamento 1202, uma memória principal 1204 (por exemplo, memória só de leitura (ROM), memória flash, memória de acesso aleatório dinâmico (DRAM) (como DRAM síncrona (SDRAM) ou DRAM (RDRAM), etc.), uma memória estática 1206 (por exemplo, memória flash, memória estática de acesso aleatório (SRAM), etc.), e um dispositivo de armazenamento de dados de 1218, que se comunica através de um barramento 1230. [0080] O dispositivo de processamento 1202 representa um ou mais dispositivos de processamento de uso geral, tais como um microprocessador, uma unidade central de processamento ou semelhantes. Mais precisamente, o dispositivo de processamento deve ser um microprocessador de conjunto de instruções complexo (CISC), um microprocessador de conjunto de instruções reduzidas (RISC), um microprocessador de palavra de instrução muito longa (VLIWj, um processador para execução dos demais conjuntos de instruções ou processadores de aplicação de uma combinação de conjuntos de instruções. O dispositivo de processamento 12 02 também pode ser um ou mais dispositivos de processamento com fins especiais, tais como um circuito integrado de aplicação especifica (ASIC), uma matriz de portas programável de campo (FPGA), um processador de sinal digital (DSP) , um· processador de rede ou algo semelhante. Em uma modalidade, o dispositivo de processamento 1202 podem incluir um núcleo de processamento. O dispositivo de processamento 1202 é configurado para executar as instruções 1226 para desempenhar as operações aqui descritas. [0081] O sistema de computador 1200 pode ainda incluir um dispositivo de interface da rede 1208 comunicante acoplado a uma rede 1220. O sistema de computador 12 00 pode também incluir uma unidade de exibição de vídeo 1210 (por exemplo, um monitor de cristal líquido (LCD) ou um tubo de raios catódicos (CRT) ) , um dispositivo de entrada alfanumérico 1212 (por exemplo, um teclado) , um dispositivo de controle do cursor 1214 (por exemplo, um mouse), um dispositivo de geração de sinal de 1216 (por exemplo, um alto falante) ou outros dispositivos periféricos. Além disso, o sistema de computador 1200 pode incluir uma unidade.de processamento gráfico 1222, uma unidade de processamento de vídeo 1228 e uma unidade de processamento de áudio 1232. Em uma outra modalidade, o sistema de computador 1200 pode incluir um conjunto de circuitos (não ilustrado), que se refere a um grupo de circuitos integrados, ou chips, que são concebidos para funcionar com o dispositivo de processamento de 1202 e controla as comunicações entre o dispositivo de processamento 1202 e os dispositivos externos. Por exemplo, o chips et pode ser um conjunto de chips em uma placa-mãe que liga o dispositivo de processamento 1202 a dispositivos de alta velocidade, tais como memória principal 1204 e controladores gráficos, bem como ligando o dispositivo de processamento 1202 ao barramento de periféricos de baixa velocidade, tais como barramentos USB, PCI ou ISA. [0082] O dispositivo de armazenamento de dados 1218 pode incluir um meio de armazenamento legível por computador 1224 no qual está armazenado instruções 1226 incorporando qualquer uma ou mais das metodologias de funções aqui descritas. As instruções 1226 podem também residir, completamente ou, pelo menos parcialmente, no interior da memória principal 1204 e/ou no interior do dispositivo de processamento 1202, durante a execução do mesmo pelo sistema de computador 1200. A memória principal 1204 e o dispositivo de processamento 1202 também constituem mídia de armazenamento legível por computador. [0083] O meio de armazenamento legível por computador 1224 também pode ser utilizado para armazenar instruções 1226, utilizando o módulo de fluxo de controle 140 e/ou o módulo de seguimento 150, como descrito com referência às Figuras 1, 6, e 7 e/ou uma biblioteca de software contendo métodos que requerem as aplicações acima. Enquanto o meio de armazenamento legível por computador 1224 é mostrado em um exemplo de modalidade como um único meio, o termo "meio de armazenamento legível por computador "deve incluir um único meio ou meios múltiplos (por exemplo, um banco de dados centralizado ou distribuído e /ou caches e servidores associados) que armazenara um ou mais conjuntos de instruções. O termo "meio de armazenamento legível por computador "deve também incluir qualquer meio que seja capaz de armazenar, codificar ou transportar um conjunto de instruções para serem executadas pela máquina, e que fazem a máquina realizar qualquer uma ou mais das metodologias das presentes modalidades. O termo "meio de armazenamento legível por computador "deve, portanto, incluir, mas não se limitando a, memórias de estado sólido e mídias ópticas e magnéticas. [0084] A Figura 13 é um diagrama de bloco de um sistema muitiprocessador 1300 de acordo com uma implementação. Como mostrado na FiguralS, o sistema de muitiprocessador 1300 é um sistema de interligação ponto a ponto, e inclui um primeiro processador 1370 e um segundo processador 1380 acoplado através de uma interconexão de ponto a ponto 1350. Cada um dos processadores 1370 e 1380 pode ser uma versão do dispositivo processador 602 da Figura6. Como mostrado na Figura 13, cada um dos processadores 137 0 e 1380 poderá ser processadores com vários núcleos, incluindo núcleos de primeiro e segundo processador (isto é, núcleos de processador 1374a e 1374b e núcleos de processador 1384a e 1384b), apesar de potencialmente muitos mais núcleos podem estar presentes nos processadores. Um núcleo processador pode também ser conhecido como um núcleo de execução. Os processadores podem incluir cada um lógica de modo de gravação híbrido de acordo com uma modalidade do presente. Em uma modalidade, um ou mais dos processadores 137 0 e 13 80 pode executar um módulo de fluxo de controle (por exemplo, o módulo de fluxo de controle 140 ilustrado na Figura 1) . Em outra modalidade, um módulo de rastreio (por exemplo, o módulo 150 representado na Figura 1) pode ser incluído em ou pode ser parte de um ou mais dos processadores 137 0 e 1380. [0085] Embora mostrado com dois processadores 1370 el380, deve ser entendido que o âmbito da presente descrição não é tão limitado. Em outras implementações, um ou mais processadores adicionais podem estar presentes em um determinado processador. [0086] Os processadores 1370 e 1380 são apresentados, incluindo as unidades do controlador de memória integrado 1372 e 1382, respectivamente. O processador 1370 também inclui, como parte de suas unidades de controlador de barramento ponto-a-ponto (PP) Interfaces 1376 e 1378, da mesma forma, o segundo processador 1380 inclui interfaces PP 1386 e 1388. Os processadores 1370 e 1380 podem trocar -informações através de uma Interface 1350 ponto-a-ponto (PP) usando os circuitos de interface P-P 1378 el388. Como mostrado na Figura 13, os IMCs 1372 e 1382 casam os processadores com as respectivas memórias, isto é, uma memória 1332 e uma memória 13 34, que podem ser partes da memória principal localmente ligadas aos respectivos processadores. Em uma modalidade, os dados do fluxo de controle (por exemplo, tabelas 200, 300 e 500 ilustradas nas Figura 2, 3, e 5) podem ser armazenados em um ou mais das memórias 13 3 2 e 1334 . [0087] Os processadores 1370 e 1380 podem cada um trocar informações com um chipset 1390 através de interfaces individuais P-P 1352, 1354, utilizando os circuitos de interface ponto a ponto 1376, 1394, 1386, e 1398. O chipset 1390 também pode trocar informações com um circuito de alta performance gráfica 1338 através de uma interface de alto desempenho gráfico 1339. [0088] Um cache compartilhado (não mostrado) pode ser incluído em qualquer processador ou do lado de fora dos dois processadores, ainda conectados com os processadores através da interconexão PP, de modo que um ou ambas informações cache local dos processadores possam ser armazenados na memória cache compartilhada se um processador estiver em um modo de baixa energia. [0089] Chipset 1390 pode ser acoplado a um primeiro barramento 1316 através de uma interface 1396. Em uma modalidade, o primeiro barramento 1316 pode ser um barramento PCI, um- barramento PCI Express ou outro barramento de interconexão I/O de terceira geração, embora o âmbito da presente descrição não seja tão limitado. [0090] Como mostrado na Figura 13, vários dispositivos de I/O 1314 podem ser acoplados ao primeiro barramento 1316, juntamente com uma ponte de barramento 1318 que acopla o primeiro barramento 1316 ao segundo barramento 1320. Em uma modalidade, o segundo barramento 1320 pode ser um barramento LPC. Vários dispositivos podem ser acoplados ao segundo barramento 1320 incluindo, por exemplo, um teclado e/ou mouse 1322, dispositivos de comunicação 1327 e uma unidade de armazenamento 1328, tal como uma unidade de disco ou outro dispositivo de armazenamento massivo, que pode incluir instruções/código e dados 1330, em uma modalidade. Além disso, um áudio 1/0 1324 pode ser acoplado ao segundo barramento 1320. Observe que outras arquiteturas são possíveis. Por exemplo, em vez da arquitetura ponto a ponto da Figura 13, um sistema pode implementar um barramento multi-drop ou outra arquitetura do tipo. [0091] A Figura 14 é um diagrama de blocos que ilustra um pipeline em ordem e uma fase de renomeação do registro, a emissão/execução de uma pipeline fora de ordem implementada pelo dispositivo processador 1400 da Figura 14. A Figura 14 é um diagrama de blocos que ilustra um núcleo de arquitetura em ordem e uma lógica de renomeação do registro, lógica de emissão/execução fora de ordem para ser incluída em um processador de acordo com, pelo menos, uma modalidade da invenção. As caixas com linhas contínuas na figura 4 ilustram o pipeline em ordem, enquanto as caixas com linhas tracejadas ilustram a mudança de nome de registro, emissão/execução de pipeline fora de ordem. Da mesma forma, as caixas com linhas contínuas na Figura 14 ilustram a lógica de arquitetura em ordem, enquanto as caixas com linhas tracejadas ilustram a renomeação lógica de registro e emissão/execução de lógica fora de ordem. Na figura 14, um pipeline do processador 1400 inclui uma etapa de captação 1402, uma etapa de decodificação de comprimento 1404, uma etapa de decodificação 1406, uma etapa de alocação 1408, uma etapa de renomeação 1410, uma etapa programadora (também conhecida como um envio ou emissão) 1412, uma etapa de leitura do registro/memória 1414, uma etapa de execução 1416, uma etapa reescrita/ gravação de memória 1418, uma etapa de tratamento de exceções 1422 e uma etapa de envio 1424. [0092] A Figura 15 é um diagrama de blocos que ilustra um núcleo de arquitetura em ordem e uma lógica de renomeação do registro, lógica de emissão/execução fora de ordem para ser incluída em um processador de acordo com, pelo menos, uma modalidade da descrição. Na Figura 15, as setas indicam uma ligação entre duas ou mais unidades e a direção da seta indica a direção do fluxo de dados entre as unidades. A Figura 15 mostra o processador núcleo 1590, incluindo uma unidade Front End 1530 acoplado a uma unidade de mecanismo de execução 1550, e ambos estão acoplados a uma unidade de memória 1570. Em uma modalidade, os dados do fluxo de controle (por exemplo, tabelas 200, 3 00 e 500 ilustradas nas Figura 2, 3, e 5) podem ser armazenados em uma unidade de memória 1570. [0093] 0 núcleo 1590 pode ser um microprocessador de conjunto de instruções reduzidas (RISC), um microprocessador de conjunto de instruções complexo (CISC) , um microprocessador de palavra de instrução muito longa (VLIW) ou um tipo de núcleo híbrido ou alternativo. Ainda como outra opção,, o núcleo 1590 pode ser um núcleo para fins especiais, tais como, por exemplo, uma rede ou um núcleo de comunicação, motor de compressão, núcleo de gráficos ou semelhantes. Em uma modalidade, o núcleo 1590 pode executar um módulo de fluxo de controle (por exemplo, o módulo de fluxo de controle 140 ilustrado na figura 1). Em outra modalidade o um módulo de rastreio (por exemplo, o módulo 150 representado na Figura 1} pode ser incluído em ou pode ser parte do núcleo 1590. Por exemplo, o módulo de rastreio pode ser parte da unidade front end 153 0 e/ou da unidade de mecanismo de execução 1550. [0094] A unidade front end 1530 inclui uma unidade de predição de branch 1532 acoplada a uma unidade cache de instruções 1534, que é acoplada a um buffer lookaside de tradução de instrução (TLB) 1536, o qual é acoplado a uma unidade de instruções 1538, que é acoplado a uma unidade de descodificação 1540. A unidade de decodificação ou decodificador pode decodificar instruções, e gerar como resultado uma ou mais micro-operações, pontos de entrada de micro-código, micro-instruções, outras instruções ou outros sinais de controle que são decodificados a partir de, ou, que de outra forma refletem, ou são derivadas das instruções originais. O decodificador pode ser implementado através de mecanismos diferentes. Exemplos de mecanismos adequados incluem, mas não estão limitados a, tabelas de consulta, implementações de hardware, matrizes lógicas programáveis (PLAs), memória somente leitura (ROM) de microcódigo, etc. A unidade cache de instruções 1534 é ainda acoplado a uma unidade cache de nível 2 (L2) 157 6 na unidade de memória 1570. A unidade de descodificação 154 0 é acoplada a uma unidade 1552 de mudança de nome/ alocação na unidade de mecanismo de execução 1550. [0095] A unidade de mecanismo de execução 1550 inclui a unidade 1552 de renomeação/alocação acoplada a uma unidade de reforma 1554 e um conjunto de um ou mais unidade (s) de agendamento 1556. A unidade (s) de agendamento 1556 representa qualquer número de diferentes agendadores, incluindo estações de reservas, janela de instruções central, etc. A unidade (s) de programação 1556 é acoplada a unidade (s) de arquivo de registo físico 1558. Cada uma das unidades de arquivo(s) de registro (s) físico (s) 1558 representa (m) um ou mais arquivos de registro físicos, diferentes dos que armazenam um ou mais tipos de dados diferentes, tais como escala inteira, escala de ponto flutuante, compactado inteiro, ponto flutuante compactado, vetor inteiro, ponto flutuante vetorial, etc., de estado (por exemplo, um ponteiro de instrução que é o endereço da próxima instrução a ser executada), etc. A(s) unidade(s) de arquivo(s) de registro(s) físico(s) 1558 é sobreposta pela unidade de reforma para ilustrar várias maneiras em que se pode implementar a renomeação do registro e a execução fora de ordem (por exemplo, usando um(ns) buffer(s) e uma reordenação do(s) arquivo(s) de registro de reforma, usando um(ns) arquivo(s) futuro(s), um histórico de buffer(s), e um(ns) arquivo(s) de registro de reforma; usando uns mapas de registro e um conjunto de registros; etc.). Geralmente, os registros arquitetônicos são visíveis do exterior do processador ou do ponto de vista de um programador. Os registros não estão limitados a qualquer tipo particular de circuito conhecido. Vários tipos diferentes de registos são adequados, desde que sejam capazes de armazenar e fornecer dados, tal como aqui descrito. Exemplos de registros adequados incluem, mas não estão limitados a, registros físicos dedicados, registros físicos alocados dinamicamente utilizando renomeação de registro, combinações de registros físicos dedicados e alocados dinamicamente, etc. A unidade de reforma 1554 e a unidade (s) de arquivo de registo físico 1558 são acoplados ao cluster (s) de execução 1560. 0(s) cluster(s) de execução 1560 inclui um conjunto de uma ou mais unidades de execução 1562 e um conjunto de uma ou mais unidades de acesso de memória de 1564. As unidades de execução 1562 podem executar várias operações (por exemplo, mudanças, adição, subtração, multiplicação) e em vários tipos de dados (por exemplo, escala de ponto flutuante, compactado por inteiro, ponto flutuante compactado, vetor integral, ponto flutuante vetorial). Embora algumas modalidades podem incluir um número de unidades de execução de funções dedicadas ou conjuntos de funções específicas, outras modalidades podem incluir uma única unidade de execução ou várias unidades de execução que realizam todas as funções. A(s) unidade(s) programadora(s) 1556, a(s) unidade(s) de arquivo(s) de registro(s) físico(s) 1558,os cluster (s) de execução 1560 são mostrados como possivelemte plurais, porque certas formas de realização criam pipelines separados para certos tipos de dados/operações (por exemplo, uma escala integral de pipeline, um escala de ponto flutuante/compactado por inteiro/ponto flutuante compactado/ vetor integral/ponto flutuante vetorial, e/ou de um pipeline de acesso de memória que apresenta sua própria unidade programadora, unidade(s) de arquivo(s) de registro(s) físico (s) e/ou cluster de execução, e, no caso de um pipeline de acesso de memória separada, certas formas de realização são implementadas nas quais apenas o conjunto de execução cluster dessa pipeline apresenta a(s) unidade(s) de acesso de memória 1564). Também deve ser entendido que quando são utilizados pipelines separados, um ou mais desses pipelines pode emitir/executar fora da ordem e o resto, na ordem. [0096] O conjunto de unidades de acesso de memória 1564 é acoplado à unidade de memória 1570 que inclui uma unidade de dados TLB 1572 acoplado a uma unidade cache de dados 1574 acoplada a uma unidade de cache de nível 2 (L2) 1576. Em uma modalidade de exemplo, as unidades de acesso de memória 1564 podem incluir uma unidade de carga, uma unidade de armazenamento de endereço e uma unidade de armazenamento de dados, cada uma das quais está acoplada à unidade de dados TLB 157 2 na unidade de memória 1570. A unidade 1576 de memória cache L2 é acoplada a um ou mais outros níveis de cache e, eventualmente, a uma memória principal. [0097] A título de exemplo, o exemplar renomeação de registradores, emissão/execução fora de ordem do núcleo de arquitetura pode implementar o pipeline 1400 como segue: 1) a instrução de captação 1538 executa a captação e da etapa de decodificação de comprimento 1402 e 1404, 2) a unidade de decodificação 1540 realiza a etapa de decodif icação 1406, 3) a unidade de renomear/alocar 1552 realiza a etapa de alocação 1408 e a etapa de renomeação 1410, 4) a(s) unidade(s) programadoras 1556 realiza(m) a etapa de programação 1412; 5) a(s) unidade (s) de arquivo (s) de registro (s) físico (s) 1558 e a unidade de memória 1570 executam a etapa de registro de leitura/leitura da memória 1414, o cluster de execução 1560 executam a etapa de execução 1416, 6) a unidade de memória 1570 e a(s) unidade (s) de arquivo(s) de registro(s) físico (s) 1558 executam a etapa de reescrita/gravação de memória 1418; 7) várias unidades podem estar envolvidas na etapa de tratamento de exceção 1422 e 8) a unidade de RRF 15 54 e a(s) unidade(s) de arquivo(s) de registro(s) físico(s) 1558 executam a etapa de envio 1424. [0098] O núcleo 1590 pode suportar um ou mais conjuntos de instruções (por exemplo, o conjunto de instruções x86, com algumas extensões que foram adicionados nas versões mais recentes), o conjunto de instruções MIPS de MIPS Technologies de Sunnyvale, CA, o conjunto de instruções ARM (com extensões adicionais opcionais como NEON) da ARM Holdings de Sunnyvale, CA). [0099] É preciso entender que o núcleo pode suportar muitithreading (executar dois ou mais conjuntos de operações paralelas ou linhas), e pode fazê-lo em uma variedade de formas, incluindo muitithreading de tempo parcial, muitithreading simultâneo (em que um único núcleo física proporciona um núcleo lógico para cada um dos tópicos em que o núcleo físico está executando o multithreading simultaneamente), ou uma combinação (por exemplo, decodificação e multithreading simultâneo posteriormente, como na tecnologia Hyperthreading da Intel ®). [00100] Apesar da renomeação de registro ser descrita no contexto da execução fora-dè-ordem, deve ser entendido que a renomeação de registro pode ser utilizada numa arquitetura em-ordem. Embora a modalidade ilustrada do processador também inclua uma instrução separada e unidades de cache de dados 1534/1574 e uma unidade 1576 de memória cache L2 compartilhada, modalidades alternativas podem ter um único cache interno para ambas as instruções e os dados, tais como, por exemplo, um cache interno de Nível 1 (LI) ou vários níveis de cache interno. Em algumas configurações, o sistema pode incluir uma combinação de um cache interno e um cache externo, que é exterior ao núcleo e/ou ao processador. Alternativamente, todo' o cache pode ser externo ao núcleo e/ou ao processador. [00101] A figura 16 é um diagrama de blocos da micro-arquitetura para um processador 200, que inclui os circuitos lógicos para executar instruções de acordo com uma modalidade da presente invenção. Em algumas formas de realização, uma instrução de acordo com uma forma de realização pode ser implementada para operar sobre os elementos de dados que têm tamanhos de bytes, palavra, duas palavras, quatro palavras, etc., bem como tipos de dados, tais como tipos de dados de ponto flutuante e inteiros de dupla precisão. Em uma modalidade, o processador 200 pode executar um módulo de fluxo de controle (por exemplo, o módulo de fluxo de controle 140 ilustrado na Figura 1). Em uma modalidade, o processador 200 pode incluir um módulo de rastreio (por exemplo, o módulo de rastreio 150 ilustrado na figura 1.) . Por exemplo, o módulo de rastreio pode ser parte da unidade front end 201 e/ou do motor fora de ordem 203. Numa forma de realização, a o front-end em ordem 201 é a parte do processador 200, que vai buscar instruções a serem executadas e as prepara para serem usadas mais tarde no pipeline do processador. O front-end 2 01 pode incluir várias unidades. Numa forma de realização, o pré-buscador de instruções 226 busca instruções na memória e as insere em um decodificador de instruções 228, que por sua vez as decodifica ou as interpreta. Por exemplo, numa forma de realização, o decodificador decodifica a instrução recebida em uma ou mais operações de chamadas "micro-instruções "ou" micro-operações "(também chamados micro-ops ou UOPs) que a máquina é capaz de executar. Em outras formas de realização, o decodificador interpreta a instrução em um código de operação, dados correspondentes e campos de controle que são utilizados pelo micra-arquitetura para realizar operações de acordo com um modo de realização. Em uma forma de realização, o cache de traço 230 leva as UOPs decodificadas e as monta em sequências de programas encomendados ou traços na fila de uop 234 para a execução. Quando o cache de traço 230 encontra uma instrução complexa, a ROM microcódigo 232 fornece as UOPs necessários para concluir a operação. [00102] Algumas instruções são convertidas em uma única micro-op, enquanto outras precisam de vários micro-ops para concluir a operação completa. Numa forma de realização, se mais de quatro micro-instruções são necessários para completar uma instrução, o decodificador 228 acessa à ROM microcódigo 232 para realizar a instrução. Numa forma de realização, uma instrução pode ser decodificada em um pequeno número de micro-ops para o processamento do decodificador de instruções 228. Numa outra forma de realização, uma instrução pode ser armazenada dentro da ROM microcódigo 232 se um número de micro-operações for necessário para realizar a operação. O cache de traço 230 refere-se a uma matriz lógica programável por ponto de entrada (PLA) para determinar um ponteiro micro-instrução correto para a leitura das sequências de micro-código para completar uma ou mais instruções de acordo com uma modalidade da ROM microcódigo 232. Após a ROM microcódigo 232 concluir o sequenciamento das micro-operações de uma instrução, o front-end 201 da máquina retoma a busca de micro-operações do cache de traço 230. [00103] O mecanismo de execução fora-da-ordem 203 é onde são preparadas as instruções para a execução. A lógica de execução fora-da-ordem tem um número de buffers para simplificar e reordenar o fluxo de instruções para otimizar o desempenho à medida que avança para o pipeline e é programado para execução. O alocador lógico aloca os buffers de máquina e recursos que cada uop necessita para executar. A lógica de renomeação de registradores renomeia registros lógicos como entradas em um arquivo de registro. O alocador também aloca uma entrada para cada uop em uma das duas filas de uop, uma para operações de memória e uma para as operações de não memória, na frente dos agendadores de instrução: o agendador de memória, agendador rápido 202, agendador de ponto' flutuante lento/geral 204 e agendador de ponto flutuante simples 206. Os programadores uop 202, 204 e 206 determinam quando um uop está pronto para executar com base na disponibilidade das suas fontes de registro de entrada dependentes e na disponibilidade dos recursos de execução que as UOPs precisam para completar a sua operação. O agendador 202 de uma modalidade pode agendar em cada metade do ciclo do clock principal, enquanto os outros agendador só podem agendar uma vez por ciclo de clock do processador principal. Os agendadores comandam as portas de expedição no agendamento das UOPs para execução. [00104] Os arquivos de registro 208 e 210 se situam entre os programadores 2 02, 2 04, 2 06 e as unidades de execução 212, 214, 216, 218, 220, 222, 224 no bloco em execução 211. Há um arquivo de registro separado 208, 210, para operações integrais e de ponto flutuante, respectivamente. Cada arquivo de registro 2 08 e 210, de uma realização também inclui uma rede de desvio que pode desviar ou encaminhar os resultados recém concluídos que ainda não foram gravados no arquivo de registro para as novas UOPs dependentes. O arquivo de registro inteiro 208 e o arquivo de registro de ponto flutuante 210 também são capazes de comunicar dados entre si. Numa forma de realização, o arquivo de registro inteiro 208 é dividido em dois arquivos de registro separados, um arquivo de registro para a baixa ordem de 32 bits de dados e um segundo arquivo de registro para a alta ordem de 32 bits de dados. O arquivo de registro de ponto flutuante 210 de uma realização tem entradas de largura de 128 bits, pois instruções de ponto flutuante normalmente têm operandos de 64-128 bits de largura. [00105] 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 efetivamente executadas. Esta seção inclui os arquivos de registro 208 e 210, que armazenam os valores de operandos de dados inteiros e de pontos flutuantes que as micro-instruções necessitam para executar. O processador 200 de uma realização é composta de uma série de unidades de execução: a unidade de geração de endereço (AGU) 212 e a AGU 214, ULA rápida 216, ULA rápida 218, ULA rápida .220, ponto ULA de flutuante 222, unidade de movimento de ponto flutuante 224. Para uma forma de realização, os blocos de execução de ponto flutuante 222 e 224 executam o ponto flutuante, MMX, SIMD e SSE, ou outras operações. A ULA de ponto flutuante 222 de uma forma de realização inclui um divisor de ponto flutuante de 64 por 64 bits para executar a divisão, raiz quadrada e as demais micro-operações. Para formas de realização da presente invenção, as instruções que envolvem um valor de ponto flutuante podem ser manuseados com o hardware de ponto flutuante. Em uma forma de realização, as operações da ULA seguem para as unidades de execução de ULA 216 e 218 de alta velocidade. As ULAs 216 e 218 velozes, de uma forma de realização pode executar operações rápidas com uma latência efetiva de meio ciclo de relógio. Numa forma de realização, a maioria das operações complexas de inteiros seguem para a ULA lenta 22 0 enquanto a ULA lenta 220 inclui hardware de execução de inteiros para as operações de tipo de latência longa, como um multiplicador, deslocamentos, sinalizador lógico e processamento de ramificação. Operações de carga/armazenamento de memória são executadas pelas AGUs 212 e 214. Em uma modalidade, os integrais ALU 216, 218, 220, são descritos no contexto da realização de operações com números inteiros em operações de 64 bits de dados. Em modalidades alternativas, as ALUs 216, 218, 220 podem ser implementadas para suportar uma variedade de bits de dados, incluindo 16, 32, 128, 256, etc. Do mesmo modo, as unidades de ponto flutuante 222, 224, pode ser implementadas para suportar a faixa de operação tendo bits de diversas larguras. Em uma modalidade, as unidades de ponto flutuante 222, 224, podem operar em pacotes de dados de 128 bits de largura em conjunto com instruções SIMD e multimédia. [00106] Em uma modalidade, os agendadores UOPs 202, 204 e 206 expedem operações dependentes antes da carga relacionada terminar a execução. Como as UOPs são especulativamente agendadas e executadas no processador 200, o processador 200 também inclui a lógica para lidar com erros de memória. Se uma carga de dados se perde no cache de dados, pode haver operações dependentes ocorrendo no pipeline, que deixaram o agendador com dados temporariamente incorretos. Um mecanismo de reprodução rastreia e executa novamente as instruções que usam dados incorretos. Apenas as operações dependentes precisam ser repetidas e as independentes podem ser concluídas. Os agendadores e o mecanismo de reprodução de uma realização de um processador também são projetados para capturar sequências de instruções para operações de comparação de cadeia de texto. [00107] O termo "registros "pode referir-se aos locais de armazenamento do processador na placa que são usados como parte das instruções para identificar os operandos. Em outras palavras, os registos podem ser aqueles que são utilizáveis a partir do exterior do processador (da perspectiva de um programador). No entanto, os registros de uma forma de realização não devem ser limitados em sentido a um determinado tipo de circuito. Em vez disso, um registro de uma realização é capaz de armazenar e fornecer dados e desempenhar as funções aqui descritas. Os registros aqui descritos podem ser implementados por um circuito dentro de um processador usando qualquer número de diferentes técnicas, como os registros dedicados físicos, registros físicos alocados dinamicamente utilizando renomeação de registros, combinações de registros físicos dedicados e alocação dinâmica, etc. Numa forma de realização, os registos de armazenamento de inteiro de trinta e dois bits de dados inteiros. Um arquivo de registro de uma realização também contém oito registros SIMD multimídia para dados compactados. Para as discussões abaixo, os registros devem ser entendidos como registros de dados projetados para armazenar os dados compactados, tais como os registros 64 bits de largura MMXtm (também conhecidos como registradores 'mm', em alguns casos) em microprocessadores habilitados com a tecnologia MMX da Intel Corporation de Santa Clara, Califórnia. Esses registros MMX, disponíveis nas formas de inteiros e de ponto flutuante, podem operar com elementos de dados compactados que acompanham instruções SIMD e SSE. De forma semelhante, os registros XMM de 128 bits de largura relacionados com tecnologia SSE2, SSE3, SSE4, ou superior (referidos genericamente como "SSEx") também podem ser usados para armazenar esses operandos de dados compactados. Numa forma de realização, no armazenamento de dados compactados e dados inteiros, os registos não precisam de distinguir entre os dois tipos de dados. Numa forma de realização, o inteiro e ponto flutuante ou estão contidos no mesmo arquivo de registro ou diferentes arquivos de registro. Além disso, numa forma de realização, os dados de ponto flutuante e inteiros podem ser armazenados em registos diferentes ou nos mesmos registos. [00108] Os exemplos seguintes referem-se a outras modalidades. [00109] O exemplo 1 é um aparelho que tem um módulo de memória para armazenar dados de fluxo de controle que compreendem uma pluralidade de identificadores de bloco para blocos de instruções, identificadores de destino para um ou mais dos blocos de instruções e anotações para os blocos de instruções, e um processador acoplado de forma comunicativa ao módulo de memória. O processador é configurado para receber os dados de fluxo de controle, determinar um identificador de destino para um bloco de instruções atual com base nos dados fluxo de controle, identificar uma anotação associada com o bloco de instrução atual com base nos dados de fluxo de controle e realizar pelo menos uma modificação de recursos utilizados pelo processador ou a execução de rastreamento dos blocos de instruções de acordo com uma ou mais das anotações ou o identificador de destino. [00110] O exemplo .2 pode, opcionalmente, estender o objeto do exemplo 1. No Exemplo 2, o processador é ainda configurado para gerar os dados de fluxo de controle durante um ou mais de tempo de compilação ou tempo de execução de uma aplicação que compreende os blocos de instruções. [00111] O exemplo 3 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 1 e 2. No exemplo 3 o processador é configurado para obter um perfil de tempo de execução de uma aplicação que inclui os blocos de instruções, e gerar os dados de fluxo de controle com base no perfil de tempo de execução. [00112] O exemplo 4 pode, opcionalmente, estender o objeto de qualquer um. dos exemplos 1-3. No exemplo 4 o fluxo de dados de controle abrange uma ou mais de uma tabela, uma lista, um gráfico ou uma árvore. [00113] O exemplo 5 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 1-4. No exemplo 5, o processador rastreia a execução dos blocos de instruções através da detecção de um ou mais de um erro de hardware na memória ou de um erro de software na execução dos blocos de instruções de acordo com a anotação, em que a anotação indica um número de instruções no bloco de instrução atual. [00114] O exemplo 6 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 1-5. No exemplo 6, o processador modifica os recursos utilizados pelo processador através da redução de um número de componentes utilizados pelo processador com base na anotação. [00115] O exemplo 7 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 1-6. No exemplo 7, o processador segue a execução dos blocos de instruções identificando um ou mais de um thread, processo ou um núcleo de execução onde uma instrução a partir da instrução corrente é atribuída e atualiza a anotação com dados de identificação de uma ou mais linhas, o processo ou o núcleo de execução em que a instrução está designada. [00116] O exemplo 8 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 1-7. No exemplo 8, gerar o controle de fluxo de dados inclui a conversão de instruções de branch indiretas em uma ou mais das instruções de comparação ou instruções de salto. [00117] O exemplo 9 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 1-8. No exemplo 8, o processador é configurado para determinar se a modificação dos recursos utilizados pelo processador está afetando a operação do processador e atualizar a anotação para indicar que os recursos utilizados pelo processador não devem ser otimizados ao modificar os recursos não afeta a operação do processador. [00118] O exemplo 10 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 1-9. No exemplo 10 o processador é configurado para determinar um segundo identificador de destino para um segundo bloco de instrução atual com base nos dados de fluxo de controle, identificar uma segunda anotação associada com o segundo bloco de instrução atual com base nos dados de fluxo de controle e realizar pelo menos uma modificação de recursos utilizados pelo processador ou a execução de rastreamento dos blocos de instruções de acordo com uma ou mais das anotações ou o segundo identificador de destino. [00119] O exemplo 11 é um método que abrange a recepção de dados de controle de fluxo que compreende uma pluralidade de identificadores de bloco para blocos de instruções, identificadores de destino para um ou mais dos blocos de instruções e anotações para os blocos de instruções, determinar um identificador de destino para um bloco de instruções atual com base nos dados de fluxo de controle, identificar uma anotação associada com o bloco de instrução atual com base nos dados de fluxo de controle e realizar pelo menos uma modificação de recursos utilizados pelo processador ou a execução de rastreamento dos blocos de instruções de acordo com uma ou mais das anotações ou o identificador de destino. [00120] O exemplo 12 pode, opcionalmente, estender o objeto do exemplo 12. No Exemplo 12, o método também compreende gerar os dados de fluxo de controle durante um ou mais de tempo de compilação ou tempo de execução de uma aplicação que compreende os blocos de instruções. [00121] O exemplo 13 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 11-12. No exemplo 13 o método inclui obter um perfil de tempo de execução de uma aplicação que inclui os blocos de instruções e gerar os dados de fluxo de controle com base no perfil de tempo de execução. [00122] O exemplo 14 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 11-13. No exemplo 14 o fluxo de dados de controle abrange uma ou mais de uma tabela, uma lista, um gráfico ou uma árvore. [00123] O exemplo 15 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 11-14. No exemplo 15, seguir a execução dos blocos de instruções compreende a detecção de um ou mais de um erro de hardware na memória ou de um erro de software na execução dos blocos de instruções de acordo com a anotação, em que a anotação indica um número de instruções no bloco de instrução atual. [00124] O exemplo 16 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 11-15. No exemplo 16, modificar os recursos utilizados pelo processador inclui a redução de um número de componentes utilizados pelo processador com base na anotação. [00125] O exemplo 17 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 11-16. No exemplo 17, seguir a execução dos blocos de instruções compreende identificar uma ou mais de uma linha, processo ou um núcleo de execução onde uma instrução a partir da instrução corrente é atribuída e atualizar a anotação com dados de identificação de uma ou mais de uma linha, processo ou núcleo de execução em que a instrução está designada. [00126] O exemplo 18 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 11-17. No exemplo 18, gerar o controle de fluxo de dados inclui a conversão de instruções de branch indiretas em uma ou mais das instruções de comparação ou instruções de salto. [00127] O exemplo 19 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 11-18. No exemplo 19, o método inclui determinar se a modificação dos recursos utilizados pelo processador está afetando a operação do processador e atualizar a anotação para indicar que os recursos utilizados pelo processador não devem ser otimizados quando modificar os recursos não afeta a operação do processador. [00128] O exemplo 20 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 11-19. No exemplo 20 o método inclui determinar um segundo identificador de destino para um segundo bloco de instrução atual com base nos dados de fluxo de controle, identificar uma segunda anotação associada com o segundo bloco de instrução atual com base nos dados de fluxo de controle e realizar pelo menos uma modificação de recursos utilizados pelo processador ou a execução de rastreamento dos blocos de instruções de acordo com uma ou mais das anotações ou o segundo identificador de destino. [00129] O exemplo 21 é um meio de armazenamento legível por máquina não transitório, incluindo dados que, quando acessados por um processador, fazem com que o processador execute operações que compreendem a recepção de dados de fluxo de controle que compreendem um pluralidade de identificadores de bloco de blocos de instruções, identificadores de destino para um ou mais dos blocos das instruções e anotações para os blocos de instruções, que determinam um identificador de destino para um bloco de instrução atual com base nos dados de fluxo de controle, identificando uma anotação associado ao bloco de instrução atual com base nos dados de fluxo de controle e realizando em pelo menos um dos modificadores de recursos utilizados'pelo processador ou rastreando a execução dos blocos de instruções de acordo com uma ou mais das anotações ou o identificador de destino. [00130] O exemplo 22 pode, opcionalmente, estender o objeto do exemplo 21. No Exemplo 22, a operação também compreende gerar os dados de fluxo 'de controle durante um ou mais de tempo de compilação ou tempo de execução de uma aplicação que compreende os blocos de instruções. [00131] O exemplo 23 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 20-22. No exemplo 23 as operações incluem obter um perfil de tempo de execução de uma aplicação que inclui os blocos de instruções e gerar os dados de fluxo de controle com base no perfil de tempo de execução. [00132] O exemplo 24 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 20-23. No exemplo 24 o fluxo de dados de controle abrange uma ou mais de uma tabela, uma lista, um gráfico ou uma árvore. [00133] O exemplo 25 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 20-24. No exemplo 25, seguir a execução dos blocos de instruções compreende a detecção de um ou mais de um erro de hardware na memória ou de um erro de software na execução dos blocos de instruções de acordo com a anotação, em que a anotação indica um número de instruções no bloco de instrução atual. [00134] O exemplo 26 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 20-25. No exemplo 26, modificar os recursos utilizados pelo processador inclui a redução de um número de componentes utilizados pelo processador com base na anotação. [00135] O exemplo 27 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 20-26. No exemplo 27, seguir a execução dos blocos de instruções compreende identificar um ou mais de um thread, processo ou um núcleo de execução onde uma instrução a partir da instrução corrente é atribuída e atualizar a anotação com dados de identificação de um ou mais do thread, o processo ou o núcleo de execução em que a instrução está designada. [00136] O exemplo 28 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 20-27. No exemplo 28, gerar o controle de fluxo de dados inclui a conversão de instruções de branch indiretas em uma ou mais das instruções de comparação ou instruções de salto. [00137] O exemplo 29 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 20-28. No exemplo 29, as operações incluem determinar se a modificação dos recursos utilizados pelo processador está afetando a operação do processador e atualizar a anotação para indicar que os recursos utilizados pelo processador não devem ser otimizados quando modificar os recursos não afeta a operação do processador. [00138] O exemplo 30 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 20-29. No exemplo 30 as operações incluem determinar um segundo identificador de destino para um segundo bloco de instrução atual com base nos dados de fluxo de controle, identificar uma segunda anotação associada com o segundo bloco de instrução atual com base nos dados de fluxo de controle e realizar pelo menos uma modificação de recursos utilizados pelo processador ou a execução de rastreamento dos blocos de instruções de acordo com uma ou mais das anotações ou o segundo identificador de destino. [00139] O exemplo 31 é um dispositivo que compreende meios para armazenar dados de fluxo de controle que abrange uma pluralidade de identificadores de bloco para blocos de instruções, identificadores de destino para um ou mais dos blocos das instruções e anotações para os blocos de instruções, meios para receber os dados de fluxo de controle, meios para determinar um identificador de destino para um bloco de instrução atual com base nos dados do fluxo de controle, meios para a identificação de uma anotação associada com o bloco de instrução atual com base nos dados do fluxo de controle e meios para a realização de pelo menos um dos modificadores de recursos utilizados por um processador ou o rastreio de execução dos blocos de instruções de acordo com uma ou mais das anotações ou o identificador de destino. [00140] O exemplo 32 pode, opcionalmente, estender o objeto do exemplo 31. No Exemplo 32, aparelho da reivindicação 31 também compreende gerar os dados de fluxo de controle durante um ou mais de tempo de compilação ou tempo de execução de uma aplicação que compreende os blocos de instruções. [00141] O exemplo 33 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 31-32. No exemplo 33 o dispositivo inclui meios para obter um perfil de tempo de execução de uma aplicação que inclui os blocos de instruções e meios para gerar os dados de fluxo de controle com base no perfil de tempo de execução. [00142] O exemplo 34 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 31-33. No exemplo 34 o fluxo de dados de controle abrange uma ou mais de uma tabela, uma lista, um gráfico ou uma árvore. [00143] O exemplo 35 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 31-34. No exemplo 35, seguir a execução dos blocos de instruções compreende a detecção de um ou mais de um erro de hardware na memória ou de um erro de software na execução dos blocos de instruções de acordo com a anotação, em que a anotação indica um número de instruções no bloco de instrução atual. [00144] O exemplo 36 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 31-35. No exemplo 36, modificar os recursos utilizados pelo processador inclui a redução de um número de componentes utilizados pelo processador com base na anotação. [00145] O exemplo 37 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 31-36. No exemplo 37, seguir a execução dos blocos de instruções compreende identificar um ou mais de um thread, processo ou um núcleo de execução onde uma instrução a partir da instrução corrente é atribuída e atualizar a anotação com dados de identificação de um ou mais do thread, o processo ou o núcleo de execução em que a instrução está designada. [00146] O exemplo 38 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 31-37. No exemplo 38, gerar o controle de fluxo de dados inclui a conversão de instruções de branch indiretas em uma ou mais das instruções de comparação ou instruções de salto. [00147] O exemplo 39 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 31-38. No exemplo 39, o dispositivo inclui meios para determinar se a modificação dos recursos utilizados pelo processador está afetando uma operação do processador e meios para atualizar a anotação para indicar que os recursos utilizados pelo processador não devem ser otimizados quando modificar os recursos não afeta a operação do processador. [00148] O exemplo 40 pode, opcionalmente, estender o objeto de qualquer um dos exemplos 31-39. No exemplo 40 o dispositivo inclui meios para determinar um segundo identificador de destino para um segundo bloco de instrução atual com base nos dados de fluxo de controle, meios para identificar uma segunda anotação associada com o segundo bloco de instrução atual com base nos dados de fluxo de controle e meios para realizar uma ou mais modificações de recursos utilizados pelo processador ou a execução de rastreamento dos blocos de instruções de acordo com uma ou mais das anotações ou o segundo identificador de destino. [00149] Na descrição acima, numerosos detalhes são apresentados. Será evidente, contudo, para uma pessoa com habilidades básicas na arte tendo o beneficio desta descrição, que as modalidades podem, ser praticadas sem estes detalhes específicos. Em alguns casos, estruturas e dispositivos bem conhecidos são mostrados em forma de diagrama de bloco, em vez de em detalhe, de modo a f Ρ1ΪΓ Prío X**" V J* X— ΧΉ- «1— X—* v**, V-**. -Λ— "w- X»# X-*- Χ-λ- viv-- X»*· JL. —J— Vy- XM. · [00150] Algumas partes da descrição detalhada são apresentadas em termos de algoritmos e representações simbólicas de operações de bits de dados dentro de uma memória de computador. Estas descrições e representações algorítmicas são os meios usados pelos peritos no processamento de dados com a finalidade de transmitir mais eficazmente a substância de seu trabalho para outros especializados na técnica. Um algoritmo é, aqui e em geral, concebido para ser uma sequência de auto-consistente das operações que conduzem a um resultado desejado. As operações são as que exigem manipulações físicas de grandezas físicas. Normalmente, embora não necessariamente, estas quantidades tomam a forma de sinais elétricos· ou magnéticos capazes de serem armazenados, transferidos, combinados, comparados ou manipulados. Revelou-se conveniente, por vezes, principalmente por razões de uso comum, referir-se a esses sinais como bits, valores, elementos, símbolos, caracteres, termos, números ou similares. Os blocos aqui descritos podem ser de hardware, software, firmware ou uma combinação dos mesmos. [00151] Deve-se ter em mente, porém, que todos esses termos similares têm por objetivo a associação com as quantidades físicas apropriadas e são meramente rótulos convenientes aplicados a estas quantidades. A menos que especificamente indicado de outra forma, como fica evidente a partir da discussão acima, se reconhece que ao longo da descrição, as discussões utilizando termos tais como "receber", "identificar", "determinar", " pypmh^r A/ " Trl cjf-rp^r^ " ΤΠ O c\ 1 f 1 C* Pt T~ n " oVlt” n " CTf^Y'^ Τ' " Xí- X- U X / X Oi. X. X Ο-ΟιΑ. f X X v-» d X / W X/ Ο- V— X ( V-Λ v_- X d X. / " H p* f* fs p px K' tf " 1 7Í rff 1 Ί ΡΓ" ΟΙ 1 Ί CTO
viO X- V— X* O- oi.-1— / X OCiti c~ι X X / X*. X. LiÇi X X Xi XÍ.X V-« V-/ J. J. V X X v V—, X / V-/ XL ΧΛ. X XJ W semelhante, referem-se às ações e processos de um sistema de computação, ou dispositivo de computação eletrônica semelhante, que manipula e transforma os dados representados como grandezas físicas (por exemplo, eletrônicos) dentro dos registros e memórias do sistema de computação em outros dados da mesma forma representado como quantidades físicas dentro das memórias do sistema de computação ou registos ou outros dispositivos, de armazenamento de informação, transmissão ou exibição. [00152] As palavras "exemplo "ou" exemplar "são usadas aqui para significar "servir como um exemplo, instância ou ilustração". Qualquer aspecto ou desenho aqui descrito como "exemplo" ou "exemplar" não deve necessariamente ser interpretado como preferido ou vantajoso em relação a outros aspectos ou desenhos. Em vez disso, o uso das palavras "exemplo" ou "exemplar" tem como objetivo apresentar conceitos de uma forma concreta. Como utilizado nesta solicitação, o termo "ou" pretende significar um "ou" inclusivo mais do que um "ou" exclusivo. Isto é, a menos que especificado de outra forma ou que fique claro a partir do contexto, "X inclui A ou B" tem a intenção de significar qualquer das permutações inclusivas naturais. Ou seja, se X inclui A, X inclui B, ou X inclui ambos A e B; então "X inclui A ou B" é satisfatório sob qualquer uma das instâncias anteriores. Além disso, os artigos "um" e "uma", como utilizado nesta solicitação de. patente e nas reivindicações anexas deverão ser geralmente entendidos como significando "um ou mais", a menos que de outro modo especificado ou evidente a partir do contexto como se tratando da forma singular. Além disso, o uso do termo "uma configuração "ou" uma implementação "em todo não se destina a significar a mesma configuração ou implementação, a menos que descrito como tal. Os termos "primeiro", "segundo", "terceiro", "quarto", etc., tal como aqui utilizados, devem ser entendidos como rótulos para distinguir entre os diferentes elementos e podem não ter necessariamente um significado ordinal de acordo com a sua designação numérica. [00153] As configurações aqui descritas podem igualmente dizer respeito a um aparelho para realizar as operações descritas. Esse aparelho pode ser montado especialmente para os fins necessários ou pode compreender um computador para fins gerais ativado seletivamente ou reconfigurado por um programa de computador armazenado no computador. Tal programa de computador pode ser armazenado em um meio de armazenamento não transitório legível por computador, tal como, mas não limitado a, qualquer tipo de disco, incluindo discos flexíveis, discos óticos, CD-ROMs e discos magnéticos, óticos, memórias ROM (ROMs), memórias de acesso aleatório (RAM), EPROM, EEPROM, cartões magnéticos ou óticos, memória flash ou qualquer tipo de mídia adequado para armazenar instruções eletrônicas. O termo "meio de armazenamento legível por computador "deve incluir um único meio ou vários meios de comunicação (por exemplo, uma base de dados centralizada ou distribuída e/ou caches e servidores associados), que armazena um ou mais conjuntos de instruções. 0 termo "meio legível por computador "deve também ser entendido como incluindo qualquer meio que seja capaz de armazenar, codificar ou transportar um conjunto de instruções para a execução pela máquina e que faz com que a máquina seja capaz de realizar qualquer uma ou mais das metodologias das presentes formas de realização. 0 termo "meio de armazenamento legível por computador "deve, portanto, ser considerado como incluindo, mas não se limitando a, memórias de estado sólido, mídias óticas, mídias magnéticas, qualquer meio que seja capaz de armazenar um conjunto de instruções para execução pela máquina e que faça com que a máquina realize qualquer uma ou mais das metodologias das presentes formas de realização. [00154] Os algoritmos e imagens aqui apresentados não estão inerentemente relacionados a qualquer computador ou outro aparelho especifico. Vários sistemas de uso geral podem ser usados com os programas de acordo com os ensinamentos aqui contidos, ou pode ser conveniente construir um dispositivo mais especializado para executar as operações. A estrutura necessária para uma variedade destes sistemas aparecerá na descrição abaixo. Além disso, as presentes formas de realização não são descritas com referência a qualquer linguagem de programação especifica. Será apreciado que uma variedade de linguagens de programação possa ser utilizada para implementar os ensinamentos das configurações, tal como aqui descritos. [00155] A descrição anterior apresenta numerosos detalhes específicos, tais como exemplos de sistemas específicos, componentes, métodos e assim por diante, a fim de proporcionar uma boa compreensão das várias formas de realização. Será evidente para um perito na arte, no entanto, que pelo menos algumas formas de realização podem ser praticadas sem estes detalhes específicos. Em outros casos, os componentes ou os métodos bem conhecidos não estão descritos em detalhes ou são apresentados em formato de diagrama de blocos simples, a fim de evitar obscurecer desnecessariamente as presentes formas de realização. Assim, os detalhes específicos estabelecidos acima são meramente exemplificativos. Implementações específicas podem variar a partir destes dados exemplificativos e ainda podem ser contemplados como estando dentro do âmbito das presentes configurações. [00156] É para ser entendido que a descrição acima destina-se a ser ilustrativa e não restritiva. Muitas outras formas de realização ficarão evidentes para os peritos na arte após a leitura e compreensão da descrição acima. O âmbito das presentes configurações deve, portanto, ser determinado com referência às reivindicações anexas, juntamente com o escopo completo de equivalentes aos quais tais reivindicações têm direito.

Claims (25)

1. Aparelho caracterizado por compreender: um módulo de memória para armazenar dados de fluxo de controle que compreendem uma pluralidade de identificadores de bloco para blocos de instruções, identificadores de destino para um ou mais dos blocos de instruções e anotações para os blocos de instruções; e um processador acoplado de forma comunicativa ao módulo de memória, um processador para: receber os dados de fluxo de controle; determinar um identificador de destino para um segundo bloco de instruções atual com base nos dados de fluxo de controle; identificar uma anotação associada com o bloco de instruções atual com base nos dados de fluxo de controle; e realizar, pelo menos, um dos: modificar os recursos utilizados pelo processador, ou execução de acompanhamento dos blocos de instruções baseado em uma anotação ou mais ou o identificador de destino.
2. Aparelho, de acordo com reivindicação 1, caracterizado pelo fato de que o processador está ainda a: gerar os dados de fluxo de controle durante um ou mais de tempo de compilação ou tempo de execução de uma aplicação que compreende os blocos de instruções.
3. Aparelho, de acordo com reivindicação 1, caracterizado pelo fato de que o processador está ainda a: obter um perfil de tempo de execução de uma aplicação que compreende os blocos de instruções, e gerar os dados de fluxo de controle com base no perfil de tempo de execução.
4. Aparelho, de acordo com reivindicação 1, caracterizado pelo fato de que. o fluxo de dados controle abrange uma ou mais de uma tabela, uma lista, um gráfico ou uma árvore.
5. Aparelho, de acordo com reivindicação 1, caracterizado pelo fato de que o processador controla a execução dos blocos de instruções por: detecção de um ou mais de um erro de hardware na memória ou de um erro de software na execução dos blocos de instruções de acordo com a anotação, em que a anotação indica um número de instruções no bloco de instrução atual.
6. Aparelho, de acordo com reivindicação 1, caracterizado pelo fato de que o processador modifica os recursos utilizados pelo processador através da: redução de um número de componentes utilizados pelo processador com base na anotação.
7. Aparelho, de acordo com reivindicação 1, caracterizado pelo fato de que o processador controla a execução dos blocos de instruções por: identificando um ou mais de um thread, um processo ou um núcleo de execução no qual uma instrução da instrução atual é atribuída; e atualizar a anotação com dados de identificação de um ou mais dos thread, o processo, ou o núcleo de execução em que a instrução está atribuída.
8. Aparelho, de acordo com reivindicação 2, caracterizado pelo fato de que gerar o fluxo de dados de controle compreende: converter instruções de branch indiretos em uma ou mais das instruções compare ou instruções jump.
9. Aparelho, de acordo com reivindicação 1, caracterizado pelo fato de que .o processador está ainda a: determinar se a modificação dos recursos utilizados pelo processador está afetando a operação do processador, e atualizar a anotação para indicar que os recursos utilizados pelo processador não devem ser otimizados quando modificar os recursos não afeta o funcionamento do processador.
10. Aparelho, de acordo com reivindicação 1, caracterizado pelo fato de que o processador está ainda a: determinar um segundo identificador de destino para um segundo bloco de instruções atual com base nos dados de fluxo de controle; identificar uma segunda anotação associada com o segundo bloco de instruções atual com base nos dados de fluxo de controle; e executar um ou mais modif icadores de recursos utilizados pelo processador ou rastrear a execução dos blocos de instruções de acordo com uma ou mais da segunda anotação ou o segundo identificador de destino.
11. Método caracterizado por compreender: receber dados de fluxo de controle que compreendem uma pluralidade de identificadores de bloco para blocos de instruções, identificadores de destino para um ou mais dos blocos de instruções e anotações para os blocos de instruções; determinar um identificador de destino para um bloco de instruções atual com base nos dados de fluxo de controle; identificar uma anotação associada com o bloco de instruções atual com base nos dados de fluxo de controle; e realizar, pelo menos, um dos: modificar os recursos utilizados por um processador, ou execução de acompanhamento dos blocos de instruções baseado em uma anotação ou mais ou o identificador de destino.
12. Método, de acordo com reivindicação 11, caracterizado pelo fato de que compreende: gerar os dados de fluxo de controle durante um ou mais de tempo de compilação ou tempo de execução de uma aplicação que compreende os blocos de instruções.
13. Método, de acordo com reivindicação 11, caracterizado pelo fato de que compreende: obter um perfil de tempo de execução de uma aplicação que compreende os blocos de instruções, e gerar os dados de fluxo de controle com base no perfil de tempo de execução.
14. Método, de acordo com reivindicação 11, caracterizado pelo fato de que o fluxo de dados de controle abrange uma ou mais de uma tabela, uma lista, um gráfico ou uma árvore.
15. Método, de acordo com reivindicação 11, caracterizado pelo fato de que rastrear a execução dos blocos de instruções compreende: detecção de um ou mais de um erro de hardware na memória ou de um erro de software na execução dos blocos de instruções de acordo com a anotação, em que a anotação indica um número de instruções no bloco de instrução atual.
16. Método, de acordo com reivindicação 11, caracterizado pelo fato de que modificar os recursos utilizados pelo processador compreende: redução de um número de componentes utilizados pelo processador com base na anotação.
17. Método, de acordo com reivindicação 11, caracterizado pelo fato de que rastrear a execução dos blocos de instruções compreende: identificando um ou mais de um thread, um processo ou um núcleo de execução no qual uma instrução da instrução atual é atribuída; e atualizar a anotação com dados de identificação de um ou mais dos thread, o processo, ou o núcleo de execução em que a instrução está atribuída.
18. Método, de acordo com reivindicação 12, caracterizado pelo fato de que gerar o fluxo de dados de controle compreende: converter instruções de branch indiretos em uma ou mais das instruções compare ou instruções jump.
19. Método, de acordo com reivindicação 11, caracterizado pelo fato de que compreende: determinar se a modificação dos recursos utilizados pelo processador está afetando a operação do processador, e atualizar a anotação para indicar que os recursos utilizados pelo processador não devem ser otimizados quando modificar os recursos não afeta o funcionamento do processador.
20. Método, de acordo com reivindicação 11, caracterizado pelo fato de que compreende: determinar um segundo identificador de destino para um segundo bloco de instruções atual com base nos dados de fluxo de controle; identificar uma segunda anotação associada com o segundo bloco de instruções atual com base nos dados de fluxo de controle; e executar um ou mais modificadores de recursos utilizados pelo processador ou rastrear a execução dos blocos de instruções de acordo com uma ou mais da segunda anotação ou o segundo identificador de destino.
21. Mídia de armazenamento legível por máquina não transitório, caracterizado por incluir dados que, quando acessados por um processador, fazem com que o processador execute o método de qualquer das reivindicações 11-20.
22. Aparelho caracterizado por compreender: dispositivo para receber dados de fluxo de controle que compreendem uma pluralidade de identificadores de bloco para blocos de instruções, identificadores de destino para um ou mais dos blocos de instruções e anotações para os blocos de instruções; dispositivo para receber os dados de fluxo de controle; dispositivo para determinar um identificador de destino para um bloco de instruções atual com base nos dados de fluxo de controle; dispositivo para determinar uma anotação associada com o bloco de instruções atual com base nos dados de fluxo de controle; e dispositivo para a realização de, pelo menos, um dos: modificar os recursos utilizados por um processador, ou execução de acompanhamento dos blocos de instruções baseado em uma anotação ou mais ou o identificador de destino. dispositivo para gerar os dados de fluxo de controle com base no perfil de tempo de execução.
23. Aparelho, de acordo com a reivindicação 22, caracterizado pelo fato de que rastreia a execução dos blocos de instruções compreende: detecção de um ou mais de um erro de hardware na memória ou de um erro de software na execução dos blocos de instruções de acordo com a anotação, em que a anotação indica um número de instruções no bloco de instrução atual.
24. Aparelho, de acordo com a reivindicação 22, caracterizado pelo fato de que modificar os recursos utilizados pelo processador compreende: redução de um número de componentes utilizados pelo processador com base na anotação.
25. Aparelho, de acordo com a reivindicação 22, caracterizado pelo fato de que rastrear a execução dos blocos de instruções compreende: identificando um ou mais de um thread, um processo ou um núcleo de execução no qual uma instrução da instrução atual é atribuída; e atualizar a anotação com dados de identificação de um ou mais dos thread, o processo, ou o núcleo de execução em que a instrução está atribuída.
BR102014005801A 2013-03-15 2014-03-13 rastreamento de fluxo de controle de instruções BR102014005801A2 (pt)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US13/834,049 US9880842B2 (en) 2013-03-15 2013-03-15 Using control flow data structures to direct and track instruction execution

Publications (1)

Publication Number Publication Date
BR102014005801A2 true BR102014005801A2 (pt) 2016-03-15

Family

ID=50440410

Family Applications (1)

Application Number Title Priority Date Filing Date
BR102014005801A BR102014005801A2 (pt) 2013-03-15 2014-03-13 rastreamento de fluxo de controle de instruções

Country Status (7)

Country Link
US (1) US9880842B2 (pt)
JP (1) JP5865405B2 (pt)
KR (1) KR101607549B1 (pt)
CN (2) CN106843810B (pt)
BR (1) BR102014005801A2 (pt)
DE (1) DE102014003689A1 (pt)
GB (1) GB2512727B (pt)

Families Citing this family (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9378560B2 (en) 2011-06-17 2016-06-28 Advanced Micro Devices, Inc. Real time on-chip texture decompression using shader processors
US9563431B2 (en) * 2014-12-26 2017-02-07 Intel Corporation Techniques for cooperative execution between asymmetric processor cores
US10452370B2 (en) * 2015-01-09 2019-10-22 University Of Virginia Patent Foundation System, method and computer readable medium for space-efficient binary rewriting
US10229273B2 (en) * 2015-02-25 2019-03-12 Veracode, Inc. Identifying components for static analysis of software applications
US10191747B2 (en) 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
US10169044B2 (en) 2015-06-26 2019-01-01 Microsoft Technology Licensing, Llc Processing an encoding format field to interpret header information regarding a group of instructions
US9946548B2 (en) 2015-06-26 2018-04-17 Microsoft Technology Licensing, Llc Age-based management of instruction blocks in a processor instruction window
US9952867B2 (en) 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
US10409606B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Verifying branch targets
US10175988B2 (en) 2015-06-26 2019-01-08 Microsoft Technology Licensing, Llc Explicit instruction scheduler state information for a processor
US11755484B2 (en) 2015-06-26 2023-09-12 Microsoft Technology Licensing, Llc Instruction block allocation
US10409599B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Decoding information about a group of instructions including a size of the group of instructions
US9940136B2 (en) 2015-06-26 2018-04-10 Microsoft Technology Licensing, Llc Reuse of decoded instructions
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US10095519B2 (en) 2015-09-19 2018-10-09 Microsoft Technology Licensing, Llc Instruction block address register
US11016770B2 (en) 2015-09-19 2021-05-25 Microsoft Technology Licensing, Llc Distinct system registers for logical processors
US11126433B2 (en) 2015-09-19 2021-09-21 Microsoft Technology Licensing, Llc Block-based processor core composition register
US10768936B2 (en) 2015-09-19 2020-09-08 Microsoft Technology Licensing, Llc Block-based processor including topology and control registers to indicate resource sharing and size of logical processor
KR101715759B1 (ko) * 2015-09-22 2017-03-15 한국전자통신연구원 멀티코어 환경에서의 악성코드 분석 장치 및 방법
US10013335B2 (en) * 2015-12-21 2018-07-03 Intel Corporation Data flow analysis in processor trace logs using compiler-type information method and apparatus
EP3244300B1 (fr) * 2016-02-24 2022-02-09 STMicroelectronics (Rousset) SAS Procédé et outil de génération d'un code programme configuré pour effectuer une vérification du flot de contrôle d'un autre code programme contenant des instructions de branchements indirects
US10108530B2 (en) * 2016-02-24 2018-10-23 Stmicroelectronics (Rousset) Sas Method and tool for generating a program code configured to perform control flow checking on another program code containing instructions for indirect branching
US11106467B2 (en) * 2016-04-28 2021-08-31 Microsoft Technology Licensing, Llc Incremental scheduler for out-of-order block ISA processors
DE102016208864A1 (de) * 2016-05-23 2017-11-23 Robert Bosch Gmbh Recheneinheit
US10209764B2 (en) * 2016-12-20 2019-02-19 Intel Corporation Apparatus and method for improving power-performance using a software analysis routine
US10885676B2 (en) * 2016-12-27 2021-01-05 Samsung Electronics Co., Ltd. Method and apparatus for modifying display settings in virtual/augmented reality
US11531552B2 (en) 2017-02-06 2022-12-20 Microsoft Technology Licensing, Llc Executing multiple programs simultaneously on a processor core
US11250123B2 (en) 2018-02-28 2022-02-15 Red Hat, Inc. Labeled security for control flow inside executable program code
GB2572578B (en) * 2018-04-04 2020-09-16 Advanced Risc Mach Ltd Cache annotations to indicate specultative side-channel condition
US10740220B2 (en) * 2018-06-27 2020-08-11 Microsoft Technology Licensing, Llc Cache-based trace replay breakpoints using reserved tag field bits
CN109101276B (zh) 2018-08-14 2020-05-05 阿里巴巴集团控股有限公司 在cpu中执行指令的方法
US10922203B1 (en) * 2018-09-21 2021-02-16 Nvidia Corporation Fault injection architecture for resilient GPU computing
US11327798B1 (en) * 2019-05-08 2022-05-10 Meta Platforms, Inc. Accelerating an application code portion based on a received configuration
US11822468B2 (en) 2019-05-24 2023-11-21 Microsoft Technology Licensing, Llc Executable code branch annotations for objective branch verification
US10983794B2 (en) * 2019-06-17 2021-04-20 Intel Corporation Register sharing mechanism
US11087429B2 (en) * 2019-07-19 2021-08-10 Red Hat, Inc. Run-time optimization of media pipelines
WO2021071854A1 (en) * 2019-10-06 2021-04-15 Pdf Solutions, Inc. Anomalous equipment trace detection and classification

Family Cites Families (98)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3601341B2 (ja) 1999-02-09 2004-12-15 株式会社日立製作所 並列プログラム生成方法
AU4804493A (en) 1992-08-07 1994-03-03 Thinking Machines Corporation Massively parallel computer including auxiliary vector processor
JP3597247B2 (ja) 1995-03-15 2004-12-02 富士通株式会社 可換媒体型記憶装置及び光ディスク装置及びデータ転送制御方法
US6077315A (en) 1995-04-17 2000-06-20 Ricoh Company Ltd. Compiling system and method for partially reconfigurable computing
US5944816A (en) * 1996-05-17 1999-08-31 Advanced Micro Devices, Inc. Microprocessor configured to execute multiple threads including interrupt service routines
US6711667B1 (en) 1996-06-28 2004-03-23 Legerity, Inc. Microprocessor configured to translate instructions from one instruction set to another, and to store the translated instructions
US5933627A (en) 1996-07-01 1999-08-03 Sun Microsystems Thread switch on blocked load or store using instruction thread field
US5835775A (en) 1996-12-12 1998-11-10 Ncr Corporation Method and apparatus for executing a family generic processor specific application
US5857097A (en) 1997-03-10 1999-01-05 Digital Equipment Corporation Method for identifying reasons for dynamic stall cycles during the execution of a program
US5890008A (en) 1997-06-25 1999-03-30 Sun Microsystems, Inc. Method for dynamically reconfiguring a processor
US5999734A (en) 1997-10-21 1999-12-07 Ftl Systems, Inc. Compiler-oriented apparatus for parallel compilation, simulation and execution of computer programs and hardware models
US6253370B1 (en) 1997-12-01 2001-06-26 Compaq Computer Corporation Method and apparatus for annotating a computer program to facilitate subsequent processing of the program
DE69737750T2 (de) 1997-12-17 2008-03-06 Hewlett-Packard Development Co., L.P., Houston Erst- und Zweitprozessoren verwendetes Verfahren
US6247107B1 (en) 1998-04-06 2001-06-12 Advanced Micro Devices, Inc. Chipset configured to perform data-directed prefetching
JP2000057122A (ja) * 1998-08-06 2000-02-25 Yamaha Corp デジタル信号処理装置
US6332215B1 (en) * 1998-12-08 2001-12-18 Nazomi Communications, Inc. Java virtual machine hardware for RISC and CISC processors
US6662354B1 (en) 1999-01-29 2003-12-09 Unisys Corporation Determining destinations of a dynamic branch
US7089404B1 (en) 1999-06-14 2006-08-08 Transmeta Corporation Method and apparatus for enhancing scheduling in an advanced microprocessor
DE60044300D1 (de) * 1999-08-30 2010-06-10 Ip Flex Inc Daten-prozessor
JP2001117890A (ja) 1999-10-22 2001-04-27 Nec Corp 並列化コンパイル装置、並列化コンパイル方法及び並列化コンパイル用プログラムを記録した記録媒体
US6446195B1 (en) * 2000-01-31 2002-09-03 Intel Corporation Dyadic operations instruction processor with configurable functional blocks
JP3641997B2 (ja) 2000-03-30 2005-04-27 日本電気株式会社 プログラム変換装置及び方法並びに記録媒体
US7702499B1 (en) * 2000-05-02 2010-04-20 Cadence Design Systems, Inc. Systems and methods for performing software performance estimations
GB0028079D0 (en) 2000-11-17 2001-01-03 Imperial College System and method
US7178137B1 (en) 2001-04-05 2007-02-13 Network Appliance, Inc. Automatic verification of scheduling domain consistency
KR20030018720A (ko) 2001-08-31 2003-03-06 (주) 소프트4소프트 소프트웨어 유지보수를 위한 소스 코드 브라우저 자동생성 방법 및 시스템
US6934865B2 (en) * 2002-07-09 2005-08-23 University Of Massachusetts Controlling a processor resource based on a compile-time prediction of number of instructions-per-cycle that will be executed across plural cycles by the processor
US7765532B2 (en) 2002-10-22 2010-07-27 Oracle America, Inc. Inducing concurrency in software code
US7103757B1 (en) 2002-10-22 2006-09-05 Lsi Logic Corporation System, circuit, and method for adjusting the prefetch instruction rate of a prefetch unit
US7603664B2 (en) 2002-10-22 2009-10-13 Sun Microsystems, Inc. System and method for marking software code
US7346902B2 (en) 2002-10-22 2008-03-18 Sun Microsystems, Inc. System and method for block-based concurrentization of software code
DE10394047D2 (de) 2003-01-15 2005-11-10 Continental Teves Ag & Co Ohg Verfahren zur Erkennung und/oder Korrektur von Speicherzugriffsfehlern und elektronische Schaltungsanordnung zur Durchführung des Verfahrens
US7260685B2 (en) 2003-06-20 2007-08-21 Micron Technology, Inc. Memory hub and access method having internal prefetch buffers
US7373640B1 (en) 2003-07-31 2008-05-13 Network Appliance, Inc. Technique for dynamically restricting thread concurrency without rewriting thread code
US7216196B2 (en) 2003-12-29 2007-05-08 Micron Technology, Inc. Memory hub and method for memory system performance monitoring
GB0400659D0 (en) 2004-01-13 2004-02-11 Koninkl Philips Electronics Nv Microprocessor, related method of operating the same and related instruction word
US7162567B2 (en) 2004-05-14 2007-01-09 Micron Technology, Inc. Memory hub and method for memory sequencing
JP3901181B2 (ja) 2004-06-30 2007-04-04 日本電気株式会社 プログラム並列化装置及びその方法並びにプログラム
JP3901180B2 (ja) 2004-06-30 2007-04-04 日本電気株式会社 プログラム並列化装置及びその方法並びにプログラム
US7480902B2 (en) 2004-07-08 2009-01-20 Intel Corporation Unwind information for optimized programs
US7446773B1 (en) 2004-12-14 2008-11-04 Nvidia Corporation Apparatus, system, and method for integrated heterogeneous processors with integrated scheduler
US7466316B1 (en) 2004-12-14 2008-12-16 Nvidia Corporation Apparatus, system, and method for distributing work to integrated heterogeneous processors
US20060136878A1 (en) 2004-12-17 2006-06-22 Arun Raghunath Method and apparatus for enabling compiler and run-time optimizations for data flow applications in multi-core architectures
US7734895B1 (en) 2005-04-28 2010-06-08 Massachusetts Institute Of Technology Configuring sets of processor cores for processing instructions
US20090106744A1 (en) 2005-08-05 2009-04-23 Jianhui Li Compiling and translating method and apparatus
JP3938387B2 (ja) 2005-08-10 2007-06-27 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ、制御方法、およびコンパイラ・プログラム
US7757222B2 (en) 2005-09-30 2010-07-13 Intel Corporation Generating efficient parallel code using partitioning, coalescing, and degenerative loop and guard removal
EP1783604A3 (en) 2005-11-07 2007-10-03 Slawomir Adam Janczewski Object-oriented, parallel language, method of programming and multi-processor computer
US8387034B2 (en) 2005-12-21 2013-02-26 Management Services Group, Inc. System and method for the distribution of a program among cooperating processing elements
US7765536B2 (en) 2005-12-21 2010-07-27 Management Services Group, Inc. System and method for the distribution of a program among cooperating processors
US7506217B2 (en) * 2005-12-30 2009-03-17 Intel Corporation Apparatus and method for software-based control flow checking for soft error detection to improve microprocessor reliability
US9038040B2 (en) 2006-01-25 2015-05-19 International Business Machines Corporation Method for partitioning programs between a general purpose core and one or more accelerators
US8595703B2 (en) * 2006-01-30 2013-11-26 Microsoft Corporation Context based code analysis
US20070226696A1 (en) 2006-02-03 2007-09-27 Dell Products L.P. System and method for the execution of multithreaded software applications
US20070234315A1 (en) 2006-02-09 2007-10-04 International Business Machines Corporation Compiling an application by cluster members
WO2007119329A1 (ja) * 2006-03-14 2007-10-25 Nec Corporation 階層化システム及びその管理方法と、プログラム
JP4849606B2 (ja) 2006-04-28 2012-01-11 株式会社日立製作所 制御フロー誤り検出方法、データ処理装置、及びコンパイラ
JP4784827B2 (ja) 2006-06-06 2011-10-05 学校法人早稲田大学 ヘテロジニアスマルチプロセッサ向けグローバルコンパイラ
US8136102B2 (en) 2006-06-20 2012-03-13 Google Inc. Systems and methods for compiling an application for a parallel-processing computer system
US7814486B2 (en) 2006-06-20 2010-10-12 Google Inc. Multi-thread runtime system
US8156480B2 (en) 2006-09-29 2012-04-10 Intel Corporation Methods and apparatus to form a resilient objective instruction construct
US20080141268A1 (en) 2006-12-12 2008-06-12 Tirumalai Partha P Utility function execution using scout threads
US20080163183A1 (en) 2006-12-29 2008-07-03 Zhiyuan Li Methods and apparatus to provide parameterized offloading on multiprocessor architectures
US8250556B1 (en) 2007-02-07 2012-08-21 Tilera Corporation Distributing parallelism for parallel processing architectures
US8010954B2 (en) 2007-02-14 2011-08-30 The Mathworks, Inc. Parallel programming interface to dynamically allocate program portions
JP2007188523A (ja) 2007-03-15 2007-07-26 Toshiba Corp タスク実行方法およびマルチプロセッサシステム
US8214808B2 (en) 2007-05-07 2012-07-03 International Business Machines Corporation System and method for speculative thread assist in a heterogeneous processing environment
US7831800B2 (en) 2007-05-17 2010-11-09 Globalfoundries Inc. Technique for prefetching data based on a stride pattern
US20090006813A1 (en) 2007-06-28 2009-01-01 Abhishek Singhal Data forwarding from system memory-side prefetcher
US8127283B2 (en) 2007-09-05 2012-02-28 Intel Corporation Enabling graphical notation for parallel programming
US8789031B2 (en) 2007-09-18 2014-07-22 Intel Corporation Software constructed strands for execution on a multi-core architecture
CN101855617A (zh) 2007-09-19 2010-10-06 Kpit库敏思信息系统有限公司 使即插即用硬件用于半自动软件迁移的机制
JP5067425B2 (ja) 2007-09-21 2012-11-07 富士通株式会社 翻訳装置と翻訳方法および翻訳プログラムとプロセッサコアの制御方法およびプロセッサ
US7962724B1 (en) 2007-09-28 2011-06-14 Oracle America, Inc. Branch loop performance enhancement
US20090172353A1 (en) 2007-12-28 2009-07-02 Optillel Solutions System and method for architecture-adaptable automatic parallelization of computing code
US20110067015A1 (en) 2008-02-15 2011-03-17 Masamichi Takagi Program parallelization apparatus, program parallelization method, and program parallelization program
US8473935B2 (en) 2008-04-21 2013-06-25 Microsoft Corporation Just-ahead-of-time compilation
JP2010039536A (ja) 2008-07-31 2010-02-18 Panasonic Corp プログラム変換装置、プログラム変換方法およびプログラム変換プログラム
EP2329389A4 (en) 2008-08-13 2013-02-27 ENHANCING THE PERFORMANCE OF A SOFTWARE APPLICATION
US20100274972A1 (en) 2008-11-24 2010-10-28 Boris Babayan Systems, methods, and apparatuses for parallel computing
BRPI0920541A2 (pt) 2008-11-24 2018-11-06 Intel Corp sistemas, métodos e aparelho para decompor um programa sequencial em multicadeias, executar as ditas cadeias, e reconstruir a execução sequencial
US9672019B2 (en) 2008-11-24 2017-06-06 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
US8161246B2 (en) 2009-03-30 2012-04-17 Via Technologies, Inc. Prefetching of next physically sequential cache line after cache line that includes loaded page table entry
US9104435B2 (en) 2009-04-14 2015-08-11 Empire Technology Development Llc Program and data annotation for hardware customization and energy optimization
US8166251B2 (en) 2009-04-20 2012-04-24 Oracle America, Inc. Data prefetcher that adjusts prefetch stream length based on confidence
JP5581606B2 (ja) 2009-04-21 2014-09-03 株式会社カネカ 成形性の優れた樹脂組成物、及びその成形体
CA2672337C (en) 2009-07-15 2017-01-03 Ibm Canada Limited - Ibm Canada Limitee Compiler instrumentation infrastructure to facilitate multiple pass and multiple purpose dynamic analysis
GB2474521B (en) * 2009-10-19 2014-10-15 Ublox Ag Program flow control
US8707282B2 (en) 2009-12-14 2014-04-22 Advanced Micro Devices, Inc. Meta-data based data prefetching
CN101763291B (zh) 2009-12-30 2012-01-18 中国人民解放军国防科学技术大学 一种程序控制流错误检测方法
CN101814054B (zh) * 2010-03-23 2012-05-02 苏州国芯科技有限公司 一种用于调试微控制器的指令追踪控制器
GB2481385B (en) * 2010-06-21 2018-08-15 Advanced Risc Mach Ltd Tracing speculatively executed instructions
JP2012194947A (ja) 2011-03-18 2012-10-11 Ricoh Co Ltd 画像処理装置及び画像処理方法
CN102163143B (zh) 2011-04-28 2013-05-01 北京北大众志微系统科技有限责任公司 一种实现值关联间接跳转预测的方法
CN102156655B (zh) 2011-05-05 2014-04-02 北京大学深圳研究生院 高级语言代码的生成方法及其产生器
CN102789377B (zh) 2011-05-18 2015-09-30 国际商业机器公司 处理指令分组信息的方法和装置
US20130024674A1 (en) * 2011-07-20 2013-01-24 International Business Machines Corporation Return address optimisation for a dynamic code translator
US10191742B2 (en) * 2012-03-30 2019-01-29 Intel Corporation Mechanism for saving and retrieving micro-architecture context

Also Published As

Publication number Publication date
US20140281424A1 (en) 2014-09-18
CN106843810B (zh) 2019-03-15
CN106843810A (zh) 2017-06-13
DE102014003689A1 (de) 2014-09-18
JP2014182797A (ja) 2014-09-29
CN104049941B (zh) 2017-04-12
GB2512727B (en) 2015-10-21
GB2512727A (en) 2014-10-08
JP5865405B2 (ja) 2016-02-17
US9880842B2 (en) 2018-01-30
CN104049941A (zh) 2014-09-17
KR101607549B1 (ko) 2016-03-30
GB201402938D0 (en) 2014-04-02
KR20140113462A (ko) 2014-09-24

Similar Documents

Publication Publication Date Title
BR102014005801A2 (pt) rastreamento de fluxo de controle de instruções
US9250901B2 (en) Execution context swap between heterogeneous functional hardware units
US9690640B2 (en) Recovery from multiple data errors
RU2614583C2 (ru) Определение профиля пути, используя комбинацию аппаратных и программных средств
US9563564B2 (en) Cache allocation with code and data prioritization
US10055256B2 (en) Instruction and logic for scheduling instructions
US9342284B2 (en) Optimization of instructions to reduce memory access violations
BR102014005800A2 (pt) Instruções de fusíveis e lógica para fornecer o teste-or e/ou o teste-and de funcionalidade usando várias fontes de teste
BR112015022683B1 (pt) Sistema de processamento e método de realização de uma operação de manipulação de dados
US9715388B2 (en) Instruction and logic to monitor loop trip count and remove loop optimizations
US20180004526A1 (en) System and Method for Tracing Data Addresses
US9378127B2 (en) Dynamic memory page policy
US20170177543A1 (en) Aggregate scatter instructions
BR102014006118A2 (pt) sistemas, equipamentos e métodos para determinar um bit de mascaramento menos significativo à direita de um registrador writemask
US10235177B2 (en) Register reclamation
US10467006B2 (en) Permutating vector data scattered in a temporary destination into elements of a destination register based on a permutation factor
US9690582B2 (en) Instruction and logic for cache-based speculative vectorization
US10877765B2 (en) Apparatuses and methods to assign a logical thread to a physical thread
BR102016012096A2 (pt) Hardware apparatus to improve performance of state dependent computers
US9524170B2 (en) Instruction and logic for memory disambiguation in an out-of-order processor
US20170185413A1 (en) Processing devices to perform a conjugate permute instruction
US9043773B2 (en) Identification and management of unsafe optimizations

Legal Events

Date Code Title Description
B03A Publication of a patent application or of a certificate of addition of invention [chapter 3.1 patent gazette]
B06U Preliminary requirement: requests with searches performed by other patent offices: procedure suspended [chapter 6.21 patent gazette]
B09A Decision: intention to grant [chapter 9.1 patent gazette]
B11D Dismissal acc. art. 38, par 2 of ipl - failure to pay fee after grant in time