BR102014006299A2 - método para inicializar um sistema heterogêneo e apresentar uma vista simétrica do núcleo - Google Patents

método para inicializar um sistema heterogêneo e apresentar uma vista simétrica do núcleo Download PDF

Info

Publication number
BR102014006299A2
BR102014006299A2 BR102014006299A BR102014006299A BR102014006299A2 BR 102014006299 A2 BR102014006299 A2 BR 102014006299A2 BR 102014006299 A BR102014006299 A BR 102014006299A BR 102014006299 A BR102014006299 A BR 102014006299A BR 102014006299 A2 BR102014006299 A2 BR 102014006299A2
Authority
BR
Brazil
Prior art keywords
core
processor
physical
cores
small
Prior art date
Application number
BR102014006299A
Other languages
English (en)
Other versions
BR102014006299A8 (pt
Inventor
Abirami Prabhakaran
Alon Naveh
Andrew D Henroid
Andrew J Herdrich
Ashish V Choubal
Bret L Toll
David A Koufaty
Dheeraj R Subbareddy
Elierzer Weissmann
Eugene Gorbatov
Ganapati M Srinivasa
Gaurav Khanna
Hisham Shafi
Inder M Sodhi
Jason W Brandt
Michael Mishaeli
Mishali Naik
Oron Lenz
Paolo Narvaez
Paul Brett
Rimat Rappoport
Russel J Fenger
Sanjeev S Jahagirdar
Scott D Hahn
Stephen A Ficher
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 BR102014006299A2 publication Critical patent/BR102014006299A2/pt
Publication of BR102014006299A8 publication Critical patent/BR102014006299A8/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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • 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/4401Bootstrapping
    • 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/4401Bootstrapping
    • G06F9/4405Initialisation of multiprocessor systems
    • 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/3293Power saving characterised by the action undertaken by switching to a less power-consuming processor, e.g. sub-CPU
    • 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/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5044Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5094Allocation of resources, e.g. of the central processing unit [CPU] where the allocation takes into account power or heat criteria
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Advance Control (AREA)
  • Power Sources (AREA)
  • Stored Programmes (AREA)
  • Microcomputers (AREA)
  • Multi Processors (AREA)

Abstract

método para inicializar um sistema heterogêneo e apresentar uma vista simétrica do núcleo. a presente invenção descreve uma arquitetura de processador heterogêneo e um método de inicialização de um processador heterogêneo. um processador de acordo com uma modalidade compreende: um conjunto de núcleos grandes de processador físico; um conjunto de núcleos pequenos de processador físico, tendo capacidade de processamento com desempenho relativamente mais baixo e uso de energia relativamente menor em relação aos núcleos grandes de processador físico; e uma unidade de pacote para habilitar um processador bootstrap. o processador bootstrap inicializa os núcleos do processador físico homogêneo, enquanto o processador heterogêneo apresenta a aparência de um processador homogêneo para uma interface de firmware do sistema

Description

"MÉTODO PARA INICIALIZAR UM SISTEMA HETEROGÊNEO E APRESENTAR UMA VISTA SIMÉTRICA DO NÚCLEO" REFERÊNCIA CRUZADA [0001] O presente pedido relaciona-se ao, e reivindica o benefício do, Pedido Provisório de No. de Série 61/801615 depositado em 15/03/2013, que é incorporado neste documento por referência.
CAMPO DA INVENÇÃO [0002] Esta invenção refere-se geralmente ao campo dos processadores de computador. Mais particularmente, a invenção refere-se a um equipamento e método para inicializar e bootar (booting) um processador heterogêneo.
HISTÓRICO [0003] Dispositivos portáteis modernos têm restrições de consumo de energia e dissipação térmica devido ao seu pequeno tamanho; entretanto, os consumidores esperam funcionalidade cada vez mais avançada que requer potência computacional cada vez mais avançada. Para prover tanto a redução do consumo de energia como maiores recursos computacionais, podem ser empregados processadores heterogêneos. Arquiteturas de computação heterogêneas proveem vantagens únicas sobre as arquiteturas homogêneas porque mais de um tipo de elemento de computação estão disponíveis para realizar tarefas de computação, permitindo que tarefas de menor intensidade computacional sejam realizadas por um elemento de computação energeticamente eficiente, enquanto as tarefas de maior intensidade computacional são executadas por elementos de computação mais potentes. [0004] Apesar das conhecidas vantagens das arquiteturas de computação heterogêneas, existem poucos exemplos de computação heterogênea para núcleos de CPU no mundo real. Essas arquiteturas requerem software para saber como escalonar tarefas adequadamente para cada tipo de núcleo de CPU (neste caso os elementos de computação são núcleos de CPU). Como o hardware evolui e os tipos de núcleos mudam, é muito difícil para os softwares (por exemplo, sistemas operacionais) acompanhar os diferentes tipos de núcleos de CPU que estão disponíveis e como aproveitar a heterogeneidade efetivamente.
BREVE DESCRIÇÃO DOS DESENHOS [0005] Um melhor entendimento da presente invenção pode ser obtido a partir da descrição detalhada seguinte em conjunto com os desenhos seguintes, nos quais: [0006] A Figura IA é um diagrama de blocos ilustrando um pipeline em ordem exemplar e um exemplar pipeline de emissão/execução fora de ordem com renomeação de registradores, de acordo com modalidades da invenção; [0007] A Figura 1B é um diagrama de blocos ilustrando uma modalidade exemplar de um núcleo de arquitetura em ordem e de um núcleo de arquitetura exemplar de emissão/execução fora de ordem com renomeação de registradores para serem incluídos em um processador de acordo com modalidades da invenção; [0008] A Figura 2 é um diagrama de blocos de um processador de núcleo único e de um processador multinúcleo com controlador de memória integrado e gráficos de acordo com modalidades da invenção; [0009] A Figura 3 ilustra um diagrama de blocos de um sistema de acordo com uma modalidade da presente invenção; [0010] A Figura 4 ilustra um diagrama de blocos de um segundo sistema de acordo com uma modalidade da presente invenção; [0011] A Figura 5 ilustra um diagrama de blocos de um terceiro sistema de acordo com uma modalidade da presente invenção; [0012] A Figura 6 ilustra um diagrama de blocos de um sistema em um chip (SoC) de acordo com uma modalidade da presente invenção; [0013] A Figura 7 ilustra um diagrama de blocos contrastando o uso de um conversor de instruções de software para converter instruções binárias em um conjunto de instruções de origem para instruções binárias em um conjunto de instruções de destino, de acordo com modalidades da invenção; [0014] A Figura 8 ilustra uma modalidade de arquitetura de computação com núcleo heterogêneo. [0015] As Figuras 9A e 9B são fluxogramas de uma visão geral do fluxo de inicialização do sistema de acordo com uma modalidade. [0016] A Figura 10 é um diagrama de sequência ilustrando dados e mensagem passando entre elementos de firmware e microcódigo de acordo com uma modalidade. [0017] As Figuras 11A-11B ilustram uma modalidade de um sistema com um núcleo grande oculto e múltiplos núcleos pequenos visíveis.
DESCRIÇÃO DETALHADA [0018] Na descrição a seguir, para fins de explicação, inúmeros detalhes específicos são definidos para prover um entendimento detalhado das modalidades da invenção descrita abaixo. Entretanto, será aparente para um versado na técnica que as modalidades da invenção podem ser praticadas sem alguns desses detalhes específicos. Em outros exemplos, estruturas e dispositivos bem conhecidos são mostrados em forma de diagrama de blocos para evitar obscurecer os princípios subjacentes das modalidades da invenção.
Arquiteturas Exemplares de Processadores e Tipos de Dados [0019] A Figura IA · é um diagrama de blocos ilustrando um pipeline em ordem exemplar e um exemplar pipeline de emissão/execução fora de ordem com renomeação de registradores de acordo com modalidades da invenção. A Figura 1B é um diagrama de blocos ilustrando uma modalidade exemplar de um núcleo de arquitetura em ordem e de um núcleo de arquitetura exemplar de emissão/execução fora de ordem com renomeação de registradores para serem incluídos em um processador de acordo com modalidades da invenção. As caixas com linhas contínuas nas Figuras 1A-B ilustram o pipeline em ordem e núcleo em ordem, enquanto a adição opcional de caixas com linhas tracejadas ilustra o pipeline e o núcleo de emissão/execução fora de ordem com renoraeação de registradores. Dado que o aspecto em ordem é um subconjunto do aspecto fora de ordem, será descrito o aspecto fora de ordem. [002 0] Na Figura IA, um pipeline de processador 100 inclui um estágio de busca 102, um estágio de decodificação de comprimento 104, um estágio de decodificação 106, um estágio de alocação 108, um estágio de renomeação 110, um estágio de escalonamento (também conhecido como expedição ou emissão) 112, um estágio de leitura de memória/leitura de registradores 114, um estágio de execução 116, um estágio de write back/escrita na memória 118, um estágio de tratamento de exceções 122 e um estágio de efetivação, 124. [0021] A Figura 1B mostra o núcleo do processador 190, incluindo uma unidade de front-end 130 acoplada a uma unidade de mecanismo de execução 150, e ambas são acopladas a uma unidade de memória 170. O núcleo 190 pode ser um núcleo com um conjunto reduzido de instruções de computação (RISC) , um núcleo com conjunto de instruções complexas de computação (CISC), um núcleo de palavra de instrução muito longa (VLIW) ou um tipo de núcleo híbrido ou alternativo. Como ainda outra opção, o núcleo 190 pode ser um núcleo de propósito especial, tal como, por exemplo, um núcleo de rede ou de comunicação, mecanismo de compressão, núcleo coprocessador, núcleo de unidade de processamento gráfico de propósito geral (GPGPU), núcleo de gráficos ou semelhantes. [0022] A unidade de front-end 130 inclui uma unidade de previsão de desvio 132 acoplada a uma unidade de cache de instrução 13 4, que é acoplada a um translation lookaside buffer (TLB) 136, que é acoplado a uma unidade de busca de instrução 13 8, que é acoplada a uma unidade de decodificação 140. A unidade de decodificação 140 (ou decodificador) pode decodificar instruções e gerar como saída uma ou mais micro-operações, pontos de entrada de microcódigo, microinstruções, outras instruções ou outros sinais de controle, que são decodificados de, ou que de outra forma refletem, ou são derivados das instruções originais. A unidade de decodificação 140 pode ser implementada usando vários diferentes mecanismos. Exemplos de mecanismos adequados incluem, mas não estão limitados a, tabelas de referência (Look-up Tables), implementações de hardware, matrizes de lógica programável (PLAs), memórias somente de leitura (ROMs) de microcódigo, etc. Em uma modalidade, o núcleo 190 inclui uma ROM de microcódigo ou outra mídia que armazena o microcódigo para certas macroinstruções (por exemplo, na unidade de decodificação 140 ou caso contrário dentro da unidade de front-end 130). A unidade de decodificação 140 é acoplada a uma unidade alocadora/renomeadora 152 na unidade do mecanismo de execução 150. [0023] A unidade do mecanismo de execução 150 inclui a unidade alocadora/renomeadora 152 acoplada a uma unidade de retirada (retirement unit) 154 e um conjunto de uma ou mais unidade(s) escalonadora(s) 156. A(s) unidade(s) escalonadora(s) 156 representa(m) qualquer número de diferentes escalonadores, incluindo estações de reserva, janela central de instrução, etc. A(s) unidade(s) escalonadora(s) 156 é(são) acoplada(s) à(s) unidade(s) de banco {s) de regis tradores físicos 158. Cada uma das unidades de banco(s) de registradores físicos 158 representa um ou mais bancos de registradores físicos, os diversos dos quais armazenam um ou mais diferentes tipos de dados, tais como inteiro escalar, escalar de ponto flutuante, inteiro compactado, compactado de ponto flutuante, inteiro vetorial, vetorial de ponto flutuante, status (por exemplo, um ponteiro de instrução que é o endereço da próxima instrução a ser executada), etc. Em uma modalidade, a unidade de banco(s) de registradores físicos 158 compreende uma unidade de registradores vetoriais, uma unidade de registradores de escrita de máscaras e uma unidade de registradores escalares. Essas unidades de registradores podem prover registradores vetoriais arquiteturais, registradores vetoriais de máscaras e registradores de uso geral. A(s) unidade(s) de banco(s) de registradores físicos 158 é(são) sobreposta(s) pela unidade de retirada 154 para ilustrar as várias maneiras em que a renomeação de registradores e a execução fora de ordem podem ser implementadas (por exemplo, usando um buffer de reordenaraento e um banco de registradores de retirada; usando um arquivo futuro, um buffer de histórico e um banco de registradores de retirada; usando um mapa de registradores e um conjunto de registradores; etc.). A unidade de retirada 154 e a(s) unidades de banco(s) de registradores físicos 158 são acopladas ao(s) cluster(s) de execução 160. Os clusters de execução 160 incluem um conjunto de uma ou mais unidades de execução 162 e um conjunto de uma ou mais unidades de acesso à memória 164. As unidades de execução 162 podem realizar várias operações (por exemplo, deslocamentos, adição, subtração, multiplicação) e sobre vários tipos de dados (por exemplo, ponto flutuante escalar, inteiro compactado, ponto flutuante compactado, inteiro vetorial, ponto flutuante vetorial). Enquanto algumas modalidades podem incluir um número de unidades de execução dedicadas a funções específicas ou conjuntos de funções, outras modalidades podem incluir somente uma unidade de execução ou múltiplas unidades de execução, todas executando todas as funções. A(s) unidade(s) escalonadora(s) 156, as unidade(s) de banco(s) de registradores físicos 158 e os clusters de execução 160 são mostrados como sendo possivelmente plurais porque certas modalidades criam pipelines separados para certos tipos de dados/operações (por exemplo, um pipeline de inteiro escalar, um pipeline de ponto flutuante escalar/inteiro compactado/ponto flutuante compactado/inteiro vetorial/ponto flutuante vetorial, e/ou um pipeline de acesso à memória, cada um tendo sua própria unidade escalonadora, unidade de banco(s) de registradores físicos e/ou cluster de execução - e no caso de um pipeline separado de acesso à memória, são implementadas certas modalidades, nas quais somente o cluster de execução deste pipeline tem a(s) unidade(s) de acesso à memória 164). Também deve ser entendido que onde pipelines separados são usados, um ou mais desses pipelines podem ser de emissão/execução fora de ordem e o resto na ordem. [0024] O conjunto de unidades de acesso à memória 164 é acoplado à unidade de memória 170, que inclui uma unidade de TLB de dados 172 acoplada a uma unidade de cache de dados 17 4 acoplada a uma unidade de cache de nível 2 (L2) 176. Em uma modalidade exemplar, as unidades de acesso à memória 164 podem incluir uma unidade de carga, uma unidade de endereço de armazenamento e uma unidade de dados de armazenamento, cada uma das quais é acoplada à unidade de TLB de dados 172 na unidade de memória 170. A unidade do cache de instrução 134 é adicionalmente acoplada a uma unidade de cache de nível 2 (L2) 17 6 na unidade de memória 17 0. A unidade de cache L2 17 6 é acoplada a um ou mais outros níveis de cache e, eventualmente, a uma memória principal. [0025] A título de exemplo, a arquitetura exemplar de núcleo de renomeação de registradores, com emissão/execução fora de ordem pode implementar o pipeline 100 como segue: 1) a busca de instrução 138 realiza os estágios de busca e decodificação de comprimento 102 e 104; 2) a unidade de decodificação 140 realiza o estágio de decodificação 106; 3) a unidade renomeadora/alocadora 152 realiza o estágio de alocação 108 e o estágio de renomeação 110; 4) a(s) unidade (s) escalonadora(s) 156 executa(m) o estágio de escalonamento 112; 5) a(s) unidades de banco(s) de registradores físicos 158 e a unidade de memória 170 realizam o estágio de leitura de registrador/leitura de memória 114; o cluster de execução 160 realiza o estágio de execução 116; 6) a unidade de memória 17 0 e a(s) unidade(s) de banco(s) de registradores físicos 158 realizam o estágio de write back/escrita na memória 118; 7) várias unidades podem ser envolvidas no estágio de tratamento de exceções 122; e 8) a unidade de retirada 154 e a(s) unidade(s) de banco(s) de registradores físicos 158 realizam o estágio de efetivação 124. [0026] O núcleo 190 pode suportar um ou mais conjuntos de instruções (por exemplo, o conjunto de instruções x86 (com algumas extensões que foram adicionadas em versões mais recentes); o conjunto de instruções MIPS da MIPS Technologies de Sunnyvale, CA, EUA; o conjunto de instruções ARM (com extensões adicionais opcionais tais como o NEON) da ARM Holdings de Sunnyvale, CA, EUA) , incluindo as instruções descritas neste documento. Em uma modalidade, o núcleo 190 inclui lógica para suportar uma extensão de conjunto de instruções de dados compactados (por exemplo, AVXl, AVX2, e/ou alguma forma do formato genérico de instrução amigável vetorial (U=0 e/ou U=l), descrito abaixo), desse modo permitindo que as operações usadas por muitos aplicativos de multimídia sejam realizadas usando dados compactados. [0027] Deve ser entendido que o núcleo pode suportar multithreãdinçf (executando dois ou mais conjuntos paralelos de operações ou threads) e pode fazer isso em uma variedade de maneiras, incluindo multithreading em tempo fatiado, multithreading simultânea (onde um único núcleo físico provê um núcleo lógico para cada uma das threads que o núcleo físico está executando simultaneamente em multithreading) , ou uma combinação de tais (por exemplo, busca e decodificação em tempo fatiado e multith.rea.ding simultânea posteriormente, tal como na tecnologia Intel® Hyperthreading). [0028] Embora a renomeação de registradores seja descrita no contexto da execução fora de ordem, deve ser entendido que a renomeação de registradores pode ser usada em uma arquitetura em ordem. Embora a modalidade ilustrada do processador também inclua instruções separadas e unidades de cache de dados 134/174 e uma unidade de cache compartilhado L2 176, modalidades alternativas podem ter um único cache interno tanto para instruções como para os dados, tal como, por exemplo, um cache interno de nível 1 (Ll), ou múltiplos níveis de cache interno. Em algumas modalidades, o sistema pode incluir uma combinação de um cache interno e um cache externo que é externo ao núcleo e/ou ao processador. Alternativamente, todo o cache pode ser externo ao núcleo e/ou ao processador. [0029] A Figura 2 é um diagrama de blocos de um processador 200 que pode ter mais de um núcleo, pode ter um controlador de memória integrado e pode ter gráficos integrados de acordo com modalidades da invenção. As caixas com linhas contínuas na Figura 2 ilustram um processador 200 com um único núcleo 202A, um agente de sistema 210, um conjunto de uma ou mais unidades controladoras de barramentos 216, enquanto a adição opcional de caixas com linhas tracejadas ilustra um processador alternativo 200 com múltiplos núcleos 202A-N, um conjunto de uma ou mais unidade(s) controladora(s) de memória integrada(s) 214 na unidade do agente de sistema 210 e lógica de propósito especial 208. [0030] Assim, diferentes implementações do processador 2 00 podem incluir: 1) uma CPU com lógica de propósito especial 208 sendo integrados gráficos e/ou lógica de produção (throughput) científica (que pode incluir um ou mais núcleos) e os núcleos 202A-N, sendo um ou mais núcleos de propósito geral (por exemplo, núcleos de propósito geral em ordem, núcleos de propósito geral fora de ordem, uma combinação dos dois); 2) um coprocessador com os núcleos 202A-N sendo um grande número de núcleos de propósito especial destinados principalmente para gráficos e/ou produção científica; e 3) um coprocessador com os núcleos 202A-N sendo um número grande de núcleos de propósito geral em ordem. Assim, o processador 2 00 pode ser um processador de propósito geral, um coprocessador ou processador de propósito especial, tal como, por exemplo, um processador de rede ou de comunicação, mecanismo de compressão, processador gráfico, GPGPU (unidade de processamento de gráficos de propósito geral), um coprocessador de alta produtividade com muitos núcleos integrados (MIC) (incluindo 30 ou mais núcleos), processador incorporado ou algo semelhante. O processador pode ser implementado em um ou mais chips. O processador 2 00 pode ser uma parte de e/ou pode ser implementado em um ou mais substratos, usando qualquer uma das diversas tecnologias de processo, tais como, por exemplo, BiCMOS, CMOS ou NMOS. [0031] A hierarquia de memória inclui um ou mais níveis de cache dentro dos núcleos, um conjunto ou uma ou mais unidades de cache compartilhado 206 e memória externa (não mostrada) acoplada ao conjunto de unidades controladoras de memória integradas 214. O conjunto de unidades de cache compartilhado 206 pode incluir um ou mais caches de nível médio, tais como 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. Enquanto em uma modalidade uma unidade de interconexão baseada em anel 212 interliga a lógica de gráficos integrada 2 08, o conjunto de unidades de cache compartilhado 206 e a unidade do agente de sistema 210/unidade(s) controladora(s) de memória integradas 214, modalidades alternativas podem usar qualquer número de técnicas bem conhecidas para a interconexão de tais unidades. Em uma modalidade, é mantida coerência entre uma ou mais unidades de cache 206 e os núcleos 202-A-N. [0032] Em algumas modalidades, um ou mais dos núcleos 202Ά-Ν são capazes de multithreading. O agente de sistema 210 inclui esses componentes de coordenação e operação dos núcleos 202A-N. A unidade do agente de sistema 210 pode incluir, por exemplo, uma unidade de controle de potência (PCU) e uma unidade de exibição. A PCU pode ser ou incluir lógica e componentes necessários para regular o estado de energia dos núcleos 202A-N e da lógica de gráficos integrada 208. A unidade de exibição é para controlar um ou mais monitores conectados externamente. [0033] Os núcleos 202A-N podem ser homogêneos ou heterogêneos em termos de conjunto de instruções da arquitetura; ou seja, dois ou mais dos núcleos 202A-N podem ser capazes de executar o mesmo conjunto de instruções, enquanto outros podem ser capazes de executar somente um subconjunto desse conjunto de instruções ou um conjunto de instruções diferente. Em uma modalidade, os núcleos 202A-N são heterogêneos e incluem tanto os núcleos "pequenos" como os núcleos "grandes" descritos abaixo. [0034] As Figuras 3-6 são diagramas de blocos de arquiteturas exemplares de computador. Outros projetos de sistemas e configurações conhecidos nas técnicas para laptops, desktops, PCs portáteis, assistentes digitais pessoais, estações de trabalho de engenharia, servidores, dispositivos de rede, hubs de rede, comutadores, processadores incorporados, processadores de sinais digitais (DSPs), dispositivos gráficos, dispositivos de vídeo game, decodificadores, microcontroladores, telefones celulares, reprodutores de mídia portáteis, dispositivos portáteis e vários outros dispositivos eletrônicos, também são adequados. Em geral, uma enorme variedade de sistemas ou dispositivos eletrônicos capazes de incorporar um processador e/ou outra lógica de execução, como descrito neste documento, são geralmente adequados. [0035] Fazendo agora referência à Figura 3, é mostrado um diagrama de blocos de um sistema 3 00 de acordo com uma modalidade da presente invenção. O sistema 300 pode incluir um ou mais processadores 310, 315, que são acoplados a um hub controlador 320. Em uma modalidade o hub controlador 320 inclui um hub controlador de memória de gráficos (GMCH) 390 e um hub de entrada/saída (IOH) 350 (que podem ser em chips separados) ; o GMCH 3 90 inclui controladores de memória e de gráficos aos quais são acoplados a memória 340 e um coprocessador 345; o IOH 350 acopla os dispositivos de entrada/saída (I/O) 3 60 ao GMCH 3 90. Alternativamente, um ou ambos os controladores de memória e de gráficos são integrados dentro do processador (como descrito neste documento), a memória 340 e o coprocessador 345 são acoplados diretamente ao processador 310 e o hub controlador 320 em um único chip com o IOH 350. [0036] A natureza opcional dos processadores adicionais 315 é indicada na Figura 3 com linhas tracejadas. Cada processador 310, 315 pode incluir um ou mais dos núcleos de processamento descritos neste documento e podem ser alguma versão do processador 200. [0037] A memória 340 pode ser, por exemplo, memória dinâmica de acesso aleatório (DRAM), memória de mudança de fase (PCM) ou uma combinação das duas. Pelo menos para uma modalidade, o hub controlador 32 0 se comunica com os processadores 310, 315 através de um barramento multidrop, tal como um barramento frontal (FSB) , de uma interface ponto a ponto tal como QuickPath Interconnect (QPI), ou conexão semelhante 395. [0038] Em uma modalidade, o coprocessador 345 é um processador de propósito especial, tal como, por exemplo, um processador MIC de alta produtividade, um processador de rede ou de comunicação, mecanismo de compressão, processador gráfico, GPGPU, processador incorporado ou algo semelhante. Em uma modalidade, o hub controlador 320 pode incluir um acelerador de gráficos integrado. [0039] Pode haver uma variedade de diferenças entre os recursos físicos 310, 315, em termos de um espectro de métricas de mérito incluindo arquiteturais, microarquiteturais, termais, características de consumo de energia e afins. [0040] Em uma modalidade, o processador 310 executa instruções que controlam as operações de processamento de dados de um tipo geral. Incorporadas dentro das instruções podem estar as instruções do coprocessador. O processador 310 reconhece essas instruções do coprocessador como sendo de um tipo que deve ser executado pelo coprocessador associado 345. Por conseguinte, o processador 310 emite essas instruções do coprocessador (ou sinais de controle que representam as instruções do coprocessador) em um barramento do coprocessador ou outra interconexão, ao coprocessador 345. O (s) coprocessador(es) 345 aceita(m) e executa(m) as instruções recebidas do coprocessador. [0041] Fazendo agora referência à Figura 4, é mostrado um diagrama de blocos de um primeiro sistema exemplar mais específico 400 de acordo com uma modalidade da presente invenção. Como mostrado na Figura 4, o sistema multiprocessador 400 é um sistema de interconexão ponto a ponto e inclui um primeiro processador 470 e um segundo processador 480 acoplado através de uma interconexão ponto a ponto 450. Cada um dos processadores 470 e 480 pode ser alguma versão do processador 200. Em uma modalidade da invenção, os processadores 47 0 e 480 são, respectivamente, os processadores 310 e 315, enquanto que o coprocessador 438 é o coprocessador 345. Em outra modalidade, os processadores 470 e 480 são, respectivamente, o processador 310 e o coprocessador 345. [0042] Os processadores 470 e 480 são mostrados incluindo as unidades controladoras de memória integradas (IMC) 472 e 482, respectivamente. O processador 470 também inclui, como parte de suas unidades controladoras de barramentos as interfaces ponto a ponto (P-P) 47 6 e 47 8; de modo semelhante, o segundo processador 480 inclui as interfaces P-P 486 e 488. Os processadores 470, 480 podem trocar informações através de uma interface ponto a ponto (P-P) 450 usando os circuitos de interface P-P 478, 488. Como mostrado na Figura 4, os IMCs 472 e 482 acoplam os processadores às respectivas memórias, ou seja uma memória 432 e uma memória 434, que podem ser porções da memória principal localmente associadas aos respectivos processadores. [0043] Cada um dos processadores 470, 480 pode trocar informações com um chipset 490 através das interfaces individuais P-P 452, 454 usando os circuitos de interface ponto a ponto 47 6, 494, 486, 498. O chipset 490 pode, opcionalmente, trocar informações com o coprocessador 438 através de uma interface de alto desempenho 439. Em uma modalidade, o coprocessador 438 é um processador de propósito especial, tal como, por exemplo, um processador MIC de alta produtividade, um processador de rede ou de comunicação, mecanismo de compressão, processador gráfico, GPGPU, processador incorporado ou afins. [0044] Um cache compartilhado (não mostrado) pode ser incluído em qualquer dos processadores ou fora de ambos os processadores, mas conectado aos processadores através de interconexão P-P, de tal modo que as informações do cache local de um ou de ambos os processadores possam ser armazenadas no cache compartilhado se um processador é colocado em modo de baixa energia. [0045] O chipset 490 pode ser acoplado a um primeiro barramento 416 através de uma interface 496. Em uma modalidade, o primeiro barramento 416 pode ser um barramento de interconexão de componentes periféricos (PCI) , ou um barramento tal como um barramento PCI Express ou outro barramento de interconexão de I/O de terceira geração, embora o escopo da presente invenção não seja limitado desta forma. [0046] Como mostrado na Figura 4, vários dispositivos de I/O 414 podem ser acoplados ao primeiro barramento 416, juntamente com uma ponte de barramento 418, que acopla o primeiro barramento 416 a um segundo barramento 42 0. Em uma modalidade, um ou mais processadores adicionais 415, tais como coprocessadores, processadores MIC de alta produtividade, aceleradores do GPGPU, (tais como, por exemplo, aceleradores gráficos ou unidades de processamento de sinais digitais (DSP) ) , arranjos de portas programável em campo ou qualquer outro processador são acoplados ao primeiro barramento 416. Em uma modalidade, o segundo barramento 420 pode ser um barramento de baixa pinagem (LPC). Vários dispositivos podem ser acoplados a um segundo barramento 420 incluindo, por exemplo, um teclado e/ou mouse 422, dispositivos de comunicação 427 e uma unidade de armazenamento 428 tal como uma unidade de disco ou outro dispositivo de armazenamento em massa, que pode incluir instruções/código e dados 430, em uma modalidade. Adicionalmente, uma 1/0 de áudio 424 pode ser acoplada ao segundo barramento 420. Note-se que outras arquiteturas são possíveis. Por exemplo, em vez da arquitetura ponto a ponto da Figura 4, um sistema pode implementar um barramento multidrop ou outra tal arquitetura. [0047] Fazendo agora referência à Figura 5, é mostrado um diagrama de blocos de um segundo sistema exemplar mais específico 500 de acordo com uma modalidade da presente invenção. Elementos semelhantes nas Figuras 4 e 5 têm referências numéricas semelhantes e certos aspectos da Figura 4 foram omitidos na Figura 5 a fim de evitar obscurecer outros aspectos da Figura 5. [0048] A Figura 5 ilustra que os processadores 470, 480 podem incluir memória integrada e lógicas de controle ("CL") de I/O 472 e 482, respectivamente. Assim, as CLs 472, 482 incluem unidades de controlador de memória integradas e incluem lógica de controle de I/0. A Figura 5 ilustra que não só são as memórias, 432, 434 acopladas às CLs 472, 482, mas também que os dispositivos de I/O 514 também são acoplados às lógicas de controle 472, 482. Dispositivos de I/O legados (legacy) 515 são acoplados ao chipset 490. [0049] A Figura 6 mostra um diagrama de blocos de um SoC 600 de acordo com uma modalidade da presente invenção. Elementos semelhantes na Figura 2 têm referências numéricas semelhantes. Também, caixas com linhas tracejadas são recursos opcionais em SoCs mais avançados. Na Figura 6, a(s) unidade(s) de interconexão 602 é(sao) acoplada(s) a: um processador de aplicativo 610 que inclui um conjunto de um ou mais núcleos 202A-N e unidade(s) de cache compartilhado 206; uma unidade do agente de sistema 210; unidade(s) controladora(s) de barramentos 216; unidade(s) controladora{s) de memória integradas 214; um conjunto ou um ou mais coprocessadores 620 que podem incluir lógica de gráficos integrada, um processador de imagem, um processador de áudio e um processador de vídeo; uma unidade de memória estática de acesso aleatório (SRAM) 630; uma unidade de acesso direto à memória (DMA) 632; e uma unidade de exibição 64 0 para acoplamento de um ou mais monitores externos. Em uma modalidade, o(s) coprocessador(es) 620 inclui(em) um processador de propósito especial, tal como, por exemplo, um processador de rede ou de comunicação, mecanismo de compressão, GPGPU, um processador MIC de alta produtividade, processador incorporado ou afins. [0050] Modalidades dos mecanismos divulgados neste documento podem ser implementadas em hardware, software, firmware ou uma combinação de tais abordagens de implementação. Modalidades da invenção podem ser implementadas como programas de computador ou código de programa executável em sistemas programáveis, compreendendo pelo menos um processador, um sistema de armazenamento (incluindo memória volátil e não volátil e/ou elementos de armazenamento), pelo menos um dispositivo de entrada e pelo menos um dispositivo de saída. [0051] Código de programa, tal como o código 430, ilustrado na Figura 4, pode ser aplicado para dar entrada a instruções para realizar as funções descritas neste documento e gerar informações de saída. As informações de saída podem ser aplicadas a um ou mais dispositivos de saída, da forma conhecida. Para fins desta aplicação, um sistema de processamento inclui qualquer sistema que tenha um processador, tal como, por exemplo; um processador de sinal digital (DSP), um microcontrolador, um circuito integrado de aplicação específica (ASIC) ou um microprocessador. [0052] O código de programa pode ser implementado em um alto nível processual ou linguagem de programação orientada a objetos para se comunicar com um sistema de processamento. O código de programa pode também ser implementado em assembly ou linguagem de máquina, se desejado. De fato, os mecanismos descritos neste documento não são limitados em escopo a qualquer linguagem de programação particular. Em todo caso, a linguagem pode ser -uma linguagem compilada ou interpretada. [0053] Um ou mais aspectos de pelo menos uma modalidade podem ser implementados por instruções representativas armazenadas em mídia legível por máquina, o que representa várias lógicas dentro do processador, as quais, quando lidas por uma máquina fazem com que a máquina fabrique a lógica para realizar as técnicas descritas neste documento. Tais representações, conhecidas como "Núcleos IP" podem ser armazenadas em mídia tangível legível em máquina e fornecidas para vários clientes ou instalações de manufatura para carregar nas máquinas de fabricação que realmente fazem a lógica ou o processador. [0054] Tais mídias de armazenamento legíveis por máquina podem incluir, sem limitação, arranjos tangíveis não transitórios de artigos fabricados ou formados por uma máquina ou dispositivo, incluindo mídias de armazenamento, tais como discos rígidos, qualquer outro tipo de disco, incluindo disquetes, discos óticos, memória somente de leitura em disco compacto (CD-ROMs), discos compactos regraváveis (CD-RWs) e discos magneto-óticos, dispositivos semicondutores, tais como memórias somente de leitura (ROMs), memórias de acesso aleatório (RAMs), tais como memórias de acesso aleatório dinâmicas (DRAMs), memórias de acesso aleatório estáticas (SRAMs), memórias somente de leitura programáveis apagáveis (EPROM), memórias flash, memórias somente de leitura programáveis apagáveis eletricamente (EEPROM), memória de mudança de fase (PCM), cartões magnéticos ou óticos ou qualquer outro tipo de mídia adequado para armazenar instruções eletrônicas. [0055] Portanto, modalidades da invenção também incluem mídias tangíveis não transitórias, legíveis por máquina, contendo instruções ou contendo dados de projeto, tais como linguagem de descrição de hardware (HDL), que define estruturas, circuitos, aparelhos, processadores e/ou características de sistema descritas neste documento. Tais modalidades também podem ser referidas como produtos de programa. [0056] Em alguns casos, um conversor de instruções pode ser usado para converter uma instrução de um conjunto de instruções de origem para um conjunto de instruções de destino. Por exemplo, o conversor de instruções pode traduzir (por exemplo, usando a tradução binária estática, tradução binária dinâmica, incluindo a compilação dinâmica), transformar, emular ou de outra forma converter uma instrução para uma ou mais outras instruções a serem processadas pelo núcleo. O conversor de instruções pode ser implementado em software, hardware, firmware ou uma combinação destes. O conversor de instruções pode estar no processador, fora do processador, ou parte no e parte fora do processador. [0057] A Figura 7 é um diagrama de blocos, contrastando o uso de um conversor de instruções de software para converter instruções binárias em um conjunto de instruções de origem para instruções binárias em um conjunto de instruções de destino, de acordo com modalidades da invenção. Na modalidade ilustrada, o conversor de instruções é um conversor de instruções de software, embora alternativamente, o conversor de instruções pode ser implementado em software, firmware, hardware ou suas várias combinações. A Figura 7 mostra que um programa em uma linguagem de alto nível 702 pode ser compilado usando um compilador x86 7 04 para gerar código binário x86 7 06 que pode ser executado nativamente por um processador com pelo menos um núcleo com conjunto de instruções x86 716. O processador com pelo menos um núcleo com conjunto de instruções x86 716 representa qualquer processador que possa realizar substancialmente as mesmas funções de um processador Intel com pelo menos um núcleo com conjunto de instruções x86, executando em compatibilidade ou de outra forma processando (1) uma parte substancial do conjunto de instruções do núcleo Intel x86 ou (2) versões de código de objeto de aplicativos ou outros softwares direcionados para execução em um processador Intel com pelo menos um núcleo com conjunto de instruções x86, a fim de alcançar substancialmente o mesmo resultado que um processador Intel com pelo menos um núcleo com conjunto de instruções x86. O compilador x86 7 04 representa um compilador que é operável para gerar o código binário x86 7 06 (por exemplo, código de objeto) que pode ser executado, com ou sem processamento adicional de enlace, no processador tendo pelo menos um núcleo com conjunto de instruções x86 716. De modo semelhante, a Figura 7 mostra que o programa em linguagem de alto nível 702 pode ser compilado usando um compilador com um conjunto alternativo de instruções 708 para gerar código binário do conjunto de instruções alternativo 710 que pode ser executado nativamente por um processador que não tenha pelo menos um núcleo com conjunto de instruções x 86 714 (por exemplo, um processador com núcleos que executam o conjunto de instruções MIPS da MIPS Technologies de Sunnyvale, CA, EUA e/ou que executam o conjunto de instruções ARM da ARM Holdings de Cambridge, Reino Unido). O conversor de instruções 712 é usado para converter o código binário χ86 7 06 em código que pode ser executado nativamente pelo processador sem um núcleo com conjunto de instruções x86 714. Este código convertido provavelmente não será o mesmo que o código binário do conjunto de instruções alternativo 710 porque um conversor de instruções com esta capacidade é difícil de fazer; entretanto, o código convertido realizará a operação geral e será constituído de instruções do conjunto de instruções alternativo. Assim, o conversor de instruções 712 representa software, firmware, hardware, ou uma combinação destes que, através de emulação, simulação ou qualquer outro processo, permite a um processador ou outro dispositivo eletrônico que não tenha um processador ou núcleo com conjunto de instruções x86 executar o código binário x86 706.
Computação Heterogênea Transparente ao Sistema [0058] As modalidades da invenção descritas abaixo superam a falta de suporte para heterogeneidade em uma interface de firmware do sistema e no sistema operacional (OS) ocultando-a inteiramente do sistema e integrando toda a lógica e heurística de reconhecimento de heterogeneidade dentro do processador. Enquanto em uma CPU convencional a atribuição de tarefas para os núcleos é feita exclusivamente pelo software (tipicamente pelo sistema operacional), em uma modalidade da invenção esta atribuição é dividida em duas partes. O software continua escalonando os processos de software para os núcleos homogêneos expostos, enquanto o hardware dinamicamente alterna as threads entre os núcleos expostos e os núcleos heterogêneos ocultos. [0059] Expondo somente os elementos homogêneos de computação ao sistema, a natureza heterogênea do hardware é inteiramente ocultada do software, incluindo a interface de firmware do sistema (por exemplo, BIOS, EFI ou UEFI) e o sistema operacional e quase todo o possível software ao nível do aplicativo. Portanto, o sistema se inicializa e opera como se fosse executado em um processador com núcleos homogêneos somente. O hardware do processador desta modalidade inclui lógica para mapear dinamicamente cada um dos elementos de computação expostos ao software para um ou mais dos elementos físicos de computação ocultos disponíveis. Adicionalmente, a lógica mantém uma consistência de operação em cada tipo de processador e a capacidade de migrar o trabalho entre os vários tipos de núcleos. O mecanismo específico pelo qual o hardware escolhe dinamicamente os elementos físicos de computação é transparente para o sistema. [0060] Incluindo uma seleção heterogênea de elementos de computação, o hardware do processador pode sempre operar de modo muito eficiente em condições operacionais muito diferentes, com tipos muito diferentes de tarefas computacionais. Por exemplo, uma CPU que contém tanto um núcleo pequeno, energeticamente eficiente, como um núcleo grande de alto desempenho pode ser usada para executar o software com eficiência, nos momentos em que a energia é limitada (e o desempenho não é crítico) e também em outros momentos, quando o alto desempenho é necessário (mas a energia não é limitada) . A seleção de diferentes combinações de elementos de computação dentro do hardware é baseada nos requisitos de projeto, de quais tipos de tarefas precisam ser executadas no sistema e em que condições. [0061] Sistemas heterogêneos podem conter diferentes tipos de elementos de computação, tais como núcleos de processador, unidades de processador gráfico (GPUs) e aceleradores de função fixa (por exemplo, para acelerar funções comuns, tais como os ordenamentos e loops). Nas modalidades da invenção descritas abaixo, os sistemas heterogêneos têm diferentes tipos de núcleos de processador - isto é, alguns núcleos de alto desempenho e um maior número de núcleos pequenos energeticamente eficientes. Entretanto, os princípios subjacentes da invenção podem ser empregados com outros tipos de elementos de computação. [0062] A Figura 8 ilustra uma modalidade de arquitetura computacional com núcleo heterogêneo 800, referida como "Hetero-UP". Na configuração do Hetero-UP 800 núcleos pequenos energeticamente eficientes 802 são expostos ao software. Quando desempenho adicional é necessário por um aplicativo 806, e onde a energia suficiente estiver disponível, um mapeamento de núcleo virtual para físico pode alternar, de modo transparente, threads do núcleo pequeno energeticamente eficiente 802 para um núcleo físico grande de alto desempenho 804 para execução no lugar do núcleo pequeno. Em uma modalidade, uma unidade de pacote 805 gerencia o grupo de núcleos de processador heterogêneos para determinar quais núcleos de processador estão habilitados e desabilitados com base em um perfil de energia e demandas de taxa de transferência computacional. Para os propósitos da descrição do processo de inicialização da implementação de computação com núcleo heterogêneo abaixo, a modalidade Hetero-UP 800 será ilustrada como um exemplo, mas não limitante. [0063] Para a modalidade Hetero-Up 800, a interface de firmware será apenas capaz de enumerar os processadores da plataforma como núcleos pequenos. O núcleo grande será ocultado do software e não será capaz de ser enumerado com métodos convencionais de enumeração, tal como CPU ID. Deve ser notado, entretanto, que outras modalidades de uma implementação de computação com núcleo heterogêneo são possíveis, tal como uma configuração Hetero-Down, em que um núcleo físico grande de alto desempenho 804 é visível, enquanto os núcleos pequenos energeticamente eficientes 802 estão ocultos. Neste caso, a interface de firmware enumerará o processador de núcleo grande. [0064] Em uma modalidade, ferramentas de software especializadas, tais como ferramentas de depuração de processador, são capazes de identificar o tipo de núcleos físicos disponíveis, mesmo se a interface do firmware e o sistema operacional não reconhecem o sistema de processamento heterogêneo. As ferramentas de software especializadas são capazes de desabilitar ou habilitar a capacidade de alternar entre núcleos e podem realizar ações, tal como forçar a alternação de uma thread de um tipo de núcleo para um tipo de núcleo diferente. [0065] Embora a computação heterogênea transparente cause um aumento de complexidade no projeto e desenvolvimento do hardware do processador, ela oferece muitas vantagens para os desenvolvedores de interfaces de firmware e sistemas operacionais. Primeiro, a interface de firmware, o OS ou software de aplicativo não precisam saber que a CPU tem núcleos heterogêneos (ou outros elementos de computação), significando que o softwares antigos, incluindo sistemas operacionais, continuarão funcionando com o hardware descrito. De modo semelhante, futuros sistemas operacionais e aplicativos de software não precisarão ser constantemente atualizados para refletir o tipo de heterogeneidade em cada versão do hardware. [0066] Em segundo lugar, toda a heurística implementada pela lógica de mapeamento do núcleo virtual para físico é contida dentro do hardware, ou contida dentro do software ou firmware junto com o hardware, ou de outra forma provida pelo fornecedor do processador. Consequentemente, futuros projetos de hardware podem criar escolhas mais agressivas e inovadoras de elementos computacionais, uma vez que toda a extensão das mudanças está oculta do software e não requer atualizações de software.
Fluxo de Inicialização Para a Computação Heterogênea Transparente [0067] Soluções atuais de computação heterogênea podem requerer que tanto a interface de firmware como o sistema operacional (OS) reconheçam os núcleos heterogêneos, com a complexidade associada do software. Entretanto, é possível apresentar uma interface de processador tal que a interface do firmware e o sistema operacional operem como se executassem em um único tipo de núcleo, quando realmente estão executando em um ou mais núcleos heterogêneos. Um método é usar uma camada de microcódigo para "emular" o comportamento dos outros tipos de núcleos. Um método adicional é utilizar microcódigo especial e hardware de nível de pacote auxiliar para migrar a thread em execução para o núcleo de execução apropriado (por exemplo, de baixa potência ou de alto desempenho). [0068] Na inicialização do sistema, o tipo de núcleo exposto ao sistema determina o fluxo de inicialização executado pela interface de firmware. Durante a inicialização da interface de firmware, os núcleos ocultos estão adormecidos e não podem ser usados pelo sistema, exceto usando rotinas de microcódigo especializadas. Uma vez que o sistema operacional é inicializado, os outros tipos de núcleos podem ser usados para executar o fluxo de inicialização necessário. Se o sistema operacional reconhece o sistema de processamento heterogêneo, os núcleos de processador heterogêneos são tornados visíveis para o sistema operacional, que pode escalonar tarefas em cada um dos diferentes tipos de núcleos de processador diretamente. Em uma modalidade, um OS ciente da heterogeneidade abstrai a natureza heterogênea dos processadores para o software em execução no OS através de emulação ou processadores virtuais, que proveem uma camada de abstração homogênea para executar o software. [0069] Se o sistema operacional não reconhece o sistema de processamento heterogêneo, os núcleos ocultos podem ser utilizados usando a funcionalidade de alternância dinâmica de núcleos, que permite ao processador heterogêneo alternar dinamicamente a execução de threads entre os vários núcleos. Usando esse método, o software acredita que está executando no núcleo do tipo que é visível ao software, independentemente de qual núcleo em que o software está realmente executando. Para facilitar ainda mais a transparência do sistema, é provido um novo estado de processador, o "C6 Mascarado", no qual um núcleo do processador é colocado em um estado de baixa energia, em que o núcleo do processador consome quase zero de energia, e em que o núcleo do processador é tornado invisível para o software do sistema. Um núcleo de processador no estado C6 Mascarado não pode ser acessado por gatilhos padrões do sistema e em vez disso é acessível através de rotinas de microcódigo especializadas. [0070] Para simplificar a explicação abaixo, um sistema Hetero-UP 800 é usado para descrever o fluxo de inicialização exemplar, e os núcleos visíveis do sistema são os núcleos pequenos energeticamente eficientes 802, que implementam um subconjunto dos núcleos físicos grandes de alto desempenho 804 e consomem menos energia. Entretanto, deve ser apreciado que as modalidades não são desta forma limitadas, pois a descrição abaixo ignora os tipos de núcleos, quantos deles existem no processador e qual tipo é visível para a interface de firmware e OS. [0071] As Figuras 9A e 9B são fluxogramas de uma visão geral do fluxo de inicialização do sistema em uma configuração Hetero-UP, de acordo com uma modalidade. Começando na figura 9a, em 9 01 um Hub Controlador de Plataforma (PCH) prepara-se para a inicialização do sistema copiando o código da interface de firmware em um espaço de memória acessível ao microcódigo, tal como armazenamento em Flash universal (UFS), ou algum outro espaço de memória executável no processador. Em 902, uma unidade de hardware de pacote (por exemplo, a unidade de pacote 805 da Figura 8) tira todos os núcleos pequenos de reset, torna cada núcleo pequeno visível para a interface de firmware do sistema e seleciona um dos núcleos pequenos energeticamente eficientes para se tornar um processador bootstrap (BSP). Em 904, o processador de núcleo pequeno selecionado para se tornar o BSP atualiza e executa seu microcódigo. O microcódigo do BSP inclui instruções para habilitar os processadores de núcleo pequeno adicionais que serão usados como processadores de aplicativos. [0072] O microcódigo do BSP pode incluir um módulo de inicialização da interface de firmware, que o BSP carrega durante o primeiro estágio da inicialização. O BSP se comunica com os outros processadores através do uso de interrupções entre processadores (Inter-Processor Interrupts - IPI) . Opcionalmente, em 910a, 910b e 910c, o BSP usa as interrupções entre processadores (IPI) para acionar cada processador de aplicativo (AP) de núcleo pequeno para carregar qualquer microcódigo de pré-inicialização disponível. Como mostrado em 912a, 912b e 912c, cada AP de núcleo pequeno executa seu respectivo microcódigo de pré-inicialização de processador de aplicativo, que inclui inicializar o suporte de verificação de máquina. Em uma modalidade, eventos anteriores de verificação de máquina que não são tratados pelos APs de núcleos pequenos são registrados e os novos eventos de verificação de máquina são tratados, uma vez que o suporte de verificação de máquina esteja habilitado. Em 914a, 914b e 914c, cada AP de núcleo pequeno entra em um estado ocioso, para aguardar uma IPI inicial {start-up IPI - SIPI) do BSP. [0073] Simultaneamente à inicialização do processador de aplicativo de núcleo pequeno, um processador de aplicativo de núcleo grande com -um superconjunto dos processadores de aplicativos de núcleos pequenos é habilitado e inicializado pela unidade de pacote, como mostrado em 908. Em uma modalidade, um ou mais núcleos grandes estão disponíveis em hardware, mas são desabilitados através de um fusível interno, caso em que o núcleo grande não é inicializado. [0074] Em 916, o BSP prepara-se para iniciar o AP do núcleo grande de alto desempenho, que inclui um carregamento opcional de um patch de atualização para o microcódigo de pré-inicialização do núcleo grande. Em 918, o núcleo grande executa o microcódigo de pré-inicialização para aprontar o núcleo para a execução da instrução. Em 920, o processador de núcleo grande conclui a sequência de pré-inicialização e salva o contexto do processador aprontado. Em 928, o núcleo grande notifica ao BSP que a sequência de inicialização do núcleo grande está concluída e entra em estado C6 Mascarado. Neste ponto, o BSC finaliza a inicialização da interface de firmware e prepara o início do sistema operacional, como mostrado no bloco 930 e adicionalmente ilustrado na Figura 9b. [0075] Fazendo referência à Figura 9b, uma vez que se completa o módulo da interface de firmware do sistema sendo executado no BSP, o BSP espera por quaisquer APs de núcleos pequenos que não completaram o carregamento da atualização de seu microcódigo, como mostrado em 934. Em 936, o BSP envia um evento de SIPI a cada uma das APs de núcleo pequeno. Em 938, cada AP de núcleo pequeno completa seu ciclo de resetagem e entra em um estado padrão C6. Neste ponto, um processador bootstrap de núcleo pequeno e processadores de aplicativos de núcleos pequenos estão disponíveis, cada um sendo visível para o sistema, enquanto o núcleo grande permanece no estado C6 Mascarado. Em 940, o BSP configura a unidade de pacote para o modo de habilitação de hetero, o que permite ao processador alternar dinamicamente as threads para o núcleo oculto heterogêneo. [007 6] Uma vez que a inicialização da interface do firmware foi concluída, as rotinas de inicialização do sistema operacional podem começar. Se o sistema operacional não suporta sistemas de processador heterogêneo, o OS pode escalonar tarefas em uma AP de núcleo pequeno e o hardware do processador pode automaticamente alternar tarefas dessa AP de núcleo pequeno para uma AP de núcleo grande. Do ponto de vista de software, o sistema é executado em um estado completamente homogêneo. O núcleo grande oculto é mascarado e não expõe estado visível ao software no sistema. Por exemplo, em um sistema operacional que não suporta sistemas de processador heterogêneo, o núcleo grande oculto não tem uma ID do controlador de interrupção programável avançado visível, não aceita interrupções diretas entre processadores iniciadas por software, e não trata eventos de verificação de máquina como núcleo grande. Em uma modalidade, um ou mais núcleos ocultos do sistema de processamento heterogêneo são expostos a um OS que não reconhece o processamento heterogêneo, emulando o conjunto de instruções dos núcleos homogêneos visíveis. Se o sistema operacional suporta sistemas de processador heterogêneo, o OS pode expor cada um dos diversos tipos de núcleo ao software e pode escalonar tarefas de software nos vários tipos de núcleos. Adicionalmente, um OS que reconhece o processamento heterogêneo pode controlar o mecanismo de hardware usado para alternar threads entre núcleos. [0077] A Figura 10 é um diagrama de sequência ilustrando dados e mensagem passando entre firmware e elementos de microcódigo de uma modalidade de sequência de inicialização de um sistema de processamento heterogêneo. Em uma modalidade, como mostrado em 1002, um conjunto de instruções de interface de firmware executado pelo firmware da unidade de pacote 1000 envia uma mensagem de inicializar o processador bootstrap (BSP) ao processador de núcleo pequeno selecionado para se tornar o BSP 1020. A unidade de pacote 1000 dispara um gatilho de atualização de microcódigo e carga 1004 para o BSP 1020, quando então prossegue para habilitar os restantes processadores de aplicativos de núcleo pequeno 1040, que serão visíveis para o sistema. Uma sequência de inicialização síncrona (rendezvous) 1024 incluindo uma atualização de microcódigo é enviada a cada processador de aplicativo de núcleo pequeno 1040 que é visível para o sistema, o que faz com que cada AP de núcleo pequeno entre em um estado síncrono. [0078] No estado síncrono, cada núcleo do processador de um sistema multinúcleo ou multiprocessador deixa o controle com um único núcleo ou processador, que pode gerenciar a inicialização ou realizar o tratamento de erros para todos os processadores no sistema. Em resposta ao receber a sequência de inicialização síncrona 2 024 do BSP 102 0, os processadores de aplicativos de núcleos pequenos 1040 visíveis entram na sequência síncrona de atualização de microcódigo 1046, para carregar a execução do microcódigo para cada processador. Uma vez inicializado, cada AP de núcleo pequeno 1040 envia uma mensagem de confirmação 1035 ao BSP 1020 e então entra em um estado ocioso 1048 visível para o sistema (por exemplo, modo C6 padrão). [0079] O BSP 1020, simultaneamente à inicialização dos processadores de aplicativos de núcleos pequenos, envia uma sequência de inicialização síncrona 102 6 para um ou mais processadores de aplicativos de núcleo grande ocultos 1060. Esses um ou mais processadores de aplicativos de núcleo grande 1060 entram em um estado síncrono de atualização de microcódigo 1068, para carregar o microcódigo para cada núcleo grande 1060. Esses um ou mais processadores de aplicativos de núcleo grande 1060 enviam uma mensagem de confirmação 1055 ao BSP 1020 quando concluídos e entram em um estado ocioso C6 mascarado 1070, no qual o processador de aplicativo de núcleo grande 1060 é invisível para a interface de firmware e para o sistema operacional. Uma vez que todos os núcleos são inicializados, o BSP 1020 notifica à unidade de pacote 1000 que todos os núcleos estão inicializados 1010, e o sistema se prepara para carregar o sistema operacional. Em uma modalidade, o sistema operacional é ciente do sistema de processamento heterogêneo, e após a inicialização do OS, o processador de aplicativo de núcleo grande 1060 torna-se visível para o OS e está disponível para as operações de alternância junto com os processadores de aplicativos de núcleo pequeno 1040. Em -uma modalidade, o sistema operacional não reconhece o sistema de processamento heterogêneo, e o sistema de processamento heterogêneo habilita a utilização do processador de aplicativo de núcleo grande de modo transparente, sem a direção do sistema operacional. [0080] As Figuras 11A-B ilustram como uma modalidade da invenção alterna de modo transparente um núcleo pequeno com um núcleo grande, quando necessário. Em uma modalidade, ocultando a heterogeneidade da interface de firmware do sistema e integrando toda a lógica ciente da heterogeneidade e a heurística dentro do processador, habilita o suporte transparente para heterogeneidade. Em uma CPU convencional, a atribuição de tarefas aos núcleos é feita exclusivamente por software (tipicamente pelo sistema operacional). Entretanto, em uma modalidade, esta atribuição é dividida em duas partes. O software continua escalonando os processos de software para os "núcleos virtuais" homogêneos expostos pelo processador, enquanto o hardware seleciona dinamicamente qual o tipo de núcleo físico implementa um determinado núcleo virtual. Os algoritmos de escalonamento de software destinados a maximizar a produtividade, o desempenho ou outra métrica, continuam funcionando, enquanto o hardware executa outra camada (transparente) de otimização, onde os processos/tfreads em execução em cada núcleo virtual são direcionados para qualquer núcleo físico que seja mais adequado para o tipo de carga de trabalho sendo executada nesse núcleo virtual. [0081] Como ilustrado na figura 11A, o hardware do processador contém um número de núcleos físicos heterogêneos, PC0-PC4 1150, que incluem um conjunto de núcleos pequenos PC0-PC3 e um núcleo grande PC4. Nesta modalidade, os núcleos virtuais homogêneos VC0-VC3 1106 estão expostos para o software. Não obstante os vários tipos de núcleos físicos dentro do sistema, cada um dos núcleos virtuais é apresentado como um único tipo de núcleo; neste caso, o tipo de núcleo pequeno. Por conseguinte, um escalonador baseado em software 1110 (que pode ser parte de um sistema operacional) escalona as threads 1101 para execução em cada um dos núcleos virtuais homogêneos expostos 1106 exatamente como faria em um verdadeiro processador multinúcleos ou sistema multiprocessador homogêneos. A lógica de mapeamento virtual para físico (V-P) 1130 mapeia cada núcleo virtual 1120 para um ou mais núcleos físicos adequados 115 0 de acordo com um conjunto de regras de mapeamento 1140 e com base nas condições correntemente detectadas 1141. Como descrito acima, as decisões do mapeamento podem ser realizadas pela lógica de decisão do mapeamento 1109, que pode ser implementada em software, hardware, firmware ou qualquer combinação destes. [0082] Em uma modalidade, está presente mapeamento padrão 1:1 entre os núcleos virtuais 1106 e os núcleos pequenos PC0-PC3. Por conseguinte, os núcleos pequenos PC0-PC3 são efetivamente tornados visíveis para o escalonador baseado em software. Em uma modalidade, quando o sistema tem uma baixa utilização (abaixo de um limiar especificado) e/ou quando a maioria dos núcleos pequenos está ocupada (por exemplo, com uma alta carga de processamento, acima de um limiar especificado), este mapeamento padrão é mantido. Por exemplo, em uma modalidade, quando o sistema tem uma baixa utilização (por exemplo, nenhum núcleo excede 60% de atividade) ou quando a maioria dos núcleos pequenos está ocupada (por exemplo, mais de 7 5% do total dos núcleos disponíveis têm mais de 60% de atividade) , este mapeamento padrão é mantido. [0083] Entretanto, em uma modalidade, quando o sistema tem um grande número de núcleos ociosos (por exemplo, mais de 5 0% de todos os núcleos disponíveis) e alguns núcleos (um ou mais) pesadamente carregados, muito ativos, então a heurística implementada pela lógica de decisão do mapeamento 1109 automaticamente altera o mapeamento como ilustrado na figura 11B. Aqui, somente duas threads 1101 estão sendo escalonadas pelo escalonador 1110 para os núcleos virtuais VCl e VC2 e pelo menos um dos núcleos virtuais {VC2 no exemplo) tem atividade acima de um limiar especificado. Consequentemente, neste exemplo, a lógica de mapeamento de núcleo virtual-físico 1130 remapeou o núcleo virtual VC2 do núcleo físico pequeno PC2 ao núcleo físico grande PC4 em resposta à decisão de mapeamento processada pela lógica de decisão de mapeamento 1109. [0084] Como descrito neste documento, as instruções podem referir-se a configurações específicas de hardware, tais como circuitos integrados específicos de aplicativos (ASICs) configurados para realizar certas operações ou tendo uma funcionalidade predeterminada ou instruções de software armazenadas em memória incorporada em mídia não transitória legível por computador. Assim, as técnicas mostradas nas figuras podem ser implementadas usando código e dados armazenados e executadas em um ou mais dispositivos eletrônicos (por exemplo, uma estação final, um elemento de rede, etc.). Tais dispositivos eletrônicos armazenam e comunicam (internamente e/ou com outros dispositivos eletrônicos em uma rede) código e dados usando mídias legíveis por computador, tais como mídias não transitórias de armazenamento legíveis por computador (por exemplo, discos magnéticos; discos óticos; memória de acesso aleatório; memória somente de leitura; dispositivos de memória flash; memória de mudança de fase) e mídias transitórias de comunicação legíveis por computador (por exemplo, elétricas, óticas, acústicas ou outra forma de sinais propagados - tais como ondas portadoras, sinais infravermelhos, sinais digitais, etc.) . [0085] Adicionalmente, tais dispositivos eletrônicos tipicamente incluem um conjunto de um ou mais processadores acoplados a um ou mais outros componentes, tais como um ou mais dispositivos de armazenamento (mídias não transitórias de armazenamento legíveis por máquina), dispositivos de entrada/saída do usuário (por exemplo, um teclado, uma tela sensível ao toque e/ou uma tela) e conexões de rede. O acoplamento do conjunto de processadores e outros componentes é tipicamente feito através de um ou mais barramentos e pontes (também denominadas como controladores de barramento). O dispositivo de armazenamento e os sinais que transportam o tráfego de rede representam, respectivamente uma ou mais mídias de armazenamento legíveis por máquina e mídias de comunicação legíveis por máquina. [0086] Assim, o dispositivo de armazenamento de um determinado dispositivo eletrônico tipicamente armazena código e/ou dados para execução no conjunto de um ou mais processadores desse dispositivo eletrônico. É claro que uma ou mais partes de uma modalidade da invenção podem ser implementadas usando diferentes combinações de software, firmware e/ou hardware. Em toda esta descrição detalhada, para os propósitos de explicação, foram citados numerosos detalhes específicos a fim de prover um entendimento completo da presente invenção. Entretanto, será aparente para alguém versado na técnica que a invenção pode ser praticada sem alguns desses detalhes específicos. Em certos exemplos, estruturas e funções bem conhecidas não foram descritas em detalhes elaborados para evitar obscurecer o objeto da presente invenção. Por conseguinte, o escopo e o espírito da invenção devem ser julgados nos termos das reivindicações que se seguem.
REIVINDICAÇÕES 1. Processador, caracterizado por compreender: um primeiro núcleo físico tendo um primeiro conjunto de instruções e um primeiro nível de consumo de energia para executar uma thread em um primeiro nível de desempenho,- um segundo núcleo físico tendo um segundo conjunto de instruções e um segundo nível de consumo de energia para executar uma thread em um segundo nível de desempenho, o primeiro e o segundo núcleos estando em uma unidade dinâmica multinúcleos; e um circuito de mapeamento virtual para físico (V-P) acoplado ao primeiro e ao segundo núcleos físicos, para mapear o primeiro núcleo físico para uma interface de firmware do sistema através de um núcleo virtual e ocultar o segundo núcleo de processador da interface de firmware do sistema. 2. Processador, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente um terceiro núcleo físico tendo o primeiro conjunto de instruções e o primeiro nível de consumo de energia, o circuito de mapeamento V-P sendo para mapear um primeiro núcleo virtual para o primeiro núcleo físico e para mapear um segundo núcleo virtual para o terceiro núcleo físico, para permitir que um conjunto de threads seja executado em paralelo entre o primeiro e o terceiro núcleos de processador físicos. 3. Processador, de acordo com a reivindicação 2, caracterizado pelo fato de que a lógica de mapeamento V-P é para mapear o segundo núcleo virtual para o segundo núcleo físico de modo transparente para a interface de firmware, em resposta às características detectadas associadas ao conjunto de threads sendo executadas. 4. Processador, de acordo com a reivindicação 3, caracterizado pelo fato de que o primeiro nível de consumo de energia é mais baixo do que o segundo nível de consumo de energia. 5. Processador, de acordo com a reivindicação 4, caracterizado pelo fato de que o segundo nível de desempenho é mais alto do que o primeiro nível de desempenho. 6. Processador, de acordo com a reivindicação 5, caracterizado pelo fato de que o segundo núcleo físico é tornado acessível ao software pelo circuito de mapeamento de V-P mapeando um ou mais dos núcleos virtuais para o segundo núcleo físico. 7. Processador, de acordo com a reivindicação 1, caracterizado pelo fato de que um único núcleo físico do processador atua como um processador bootstrap. 8. Processador, de acordo com a reivindicação 7, caracterizado pelo fato de que o primeiro núcleo físico do processador atua como o processador bootstrap. 9. Processador, de acordo com a reivindicação 8, caracterizado pelo fato de que o processador bootstrap inicializa o segundo núcleo físico. 10. Método caracterizado por compreender: prover um conjunto de um ou mais núcleos pequenos de processador físico; prover pelo menos um núcleo grande de processador físico tendo capacidade de processamento com desempenho relativamente mais alto e uso de energia relativamente maior em relação aos núcleos pequenos de processador físico; expor um conjunto de dois ou mais núcleos pequenos de processador físico para uma interface de firmware do sistema; e ocultar o pelo menos um núcleo grande de processador físico da interface de firmware do sistema. 11. Método, de acordo com a reivindicação 10, caracterizado pelo fato de que compreende adicionalmente: alternar dinamicamente uma thread de um primeiro núcleo pequeno de processador físico para um núcleo grande de processador físico, para permitir que as threads sejam executadas no núcleo grande de processador físico, sendo que a alternância é transparente para a thread. 12. Método, de acordo com a reivindicação 10, caracterizado pelo fato de que compreende adicionalmente: designar um núcleo pequeno de processador físico do conjunto de núcleos pequenos de processador físico como um processador bootstrap; inicializar, pelo processador bootstrap, cada processador no conjunto de núcleos pequenos físicos; e inicializar, pelo processador bootstrap, o pelo menos um núcleo grande físico. 13. Método, de acordo com a reivindicação 12, caracterizado pelo fato de que os núcleos pequenos do processador físico são expostos ao software através de um mapeamento padrão entre processadores virtuais e núcleos pequenos de processador físico. 14. Método, de acordo com a reivindicação 13, caracterizado pelo fato de que o pelo menos um núcleo grande de processador físico é ocultado da interface de firmware do sistema e tornado acessível a um sistema operacional mapeando de modo transparente um ou mais núcleos virtuais para os núcleos grandes de processador físico. 15. Processador, de acordo com a reivindicação 14, caracterizado pelo fato de que o processador físico grande é visível para um sistema operacional tendo suporte para núcleos de processador tendo múltiplos conjuntos de instruções. 16. Sistema, caracteri z ado por compreender: um conjunto de núcleos pequenos de processador físico; um ou mais núcleos grandes de processador físico tendo capacidade de processamento com desempenho relativamente mais alto e uso de energia relativamente maior em relação aos núcleos pequenos de processador físico; lógica de mapeamento de virtual para físico (V-P) para expor o conjunto de dois ou mais núcleos pequenos de processador físico para uma interface de firmware do sistema através de um conjunto correspondente de núcleos virtuais e ocultar o pelo menos um núcleo grande de processador físico do firmware do sistema; e uma unidade de pacote, para designar e inicializar um processador bootstrap selecionado a partir do conjunto de múltiplos núcleos pequenos de processador físico. 17. Sistema, de acordo com a reivindicação 16, caracterizado pelo fato de que a lógica de mapeamento de V-P é para mapear cada núcleo virtual para um núcleo físico dentro do conjunto de dois ou mais núcleos pequenos de processador físico para permitir que um primeiro conjunto de threads seja executado em paralelo entre os núcleos pequenos de processador físico. 18. Sistema, de acordo com a reivindicação 17, caracterizado pelo fato de que inclui adicionalmente um processador bootstrap selecionado a partir de um dos núcleos do processador físico, sendo que o processador bootstrap: inicializa cada processador no conjunto de núcleos pequenos físicos; e inicializa o pelo menos um núcleo grande físico. 19. Sistema, de acordo com a reivindicação 18, caracterizado pelo fato de que o pelo menos um núcleo grande físico inclui um estado ocioso mascarado, em que o pelo menos um núcleo grande físico não é mapeado para um núcleo virtual quando o pelo menos um núcleo grande físico está no estado ocioso mascarado. 20. Sistema, de acordo com a reivindicação 19, caracterizado pelo fato de que o processador bootstrap é um núcleo pequeno físico.

Claims (25)

1. Processador, caracterizado por compreender: um primeiro núcleo físico tendo um primeiro conjunto de instruções e um primeiro nível de consumo de energia para executar uma thread em um primeiro nível de desempenho; um segundo núcleo físico tendo um segundo conjunto de instruções e um segundo nível de consumo de energia para executar uma thread em um segundo nível de desempenho, o primeiro e o segundo núcleos estando em uma unidade dinâmica multinúcleos; e um circuito de mapeamento virtual para físico (V-P) acoplado ao primeiro e ao segundo núcleos físicos, para mapear o primeiro núcleo físico para uma interface de firmware do sistema através de um núcleo virtual e ocultar o segundo núcleo físico da interface de firmware do sistema.
2. Processador, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente um terceiro núcleo físico tendo o primeiro conjunto de instruções e o primeiro nível de consumo de energia, o circuito de mapeamento V-P sendo para mapear um primeiro núcleo virtual para o primeiro núcleo físico e para mapear um segundo núcleo virtual para o terceiro núcleo físico, para permitir que um conjunto de threads seja executado em paralelo entre o primeiro e o terceiro núcleos físicos.
3. Processador, de acordo com a reivindicação 2, caracterizado pelo fato de que o circuito de mapeamento V-P é para mapear o segundo núcleo virtual para o segundo núcleo físico de modo transparente para a interface de firmware, em resposta às características detectadas associadas ao conjunto de threads sendo executadas.
4. Processador, de acordo com a reivindicação 3, caracterizado pelo fato de que o primeiro nível de consumo de energia é mais baixo do que o segundo nível de consumo de energia.
5. Processador, de acordo com a reivindicação 4, caracterizado pelo fato de que o segundo nível de desempenho é mais alto do que o primeiro nível de desempenho.
6. Processador, de acordo com a reivindicação 5, caracterizado pelo fato de que o segundo núcleo físico é tornado acessível ao software pelo circuito de mapeamento de V-P mapeando um ou mais dos núcleos virtuais para o segundo núcleo físico.
7. Processador, de acordo com a reivindicação 1, caracterizado pelo fato de que um único núcleo físico deve atuar como um processador bootstrap.
8. Processador, de acordo com a reivindicação 7, caracterizado pelo fato de que o primeiro núcleo físico deve atuar como o processador bootstrap.
9. Processador, de acordo com a reivindicação 8, caracterizado pelo fato de que o processador bootstrap inicializa o segundo núcleo físico.
10. Método caracterizado por compreender: prover um conjunto de um ou mais núcleos pequenos de processador físico; prover pelo menos um núcleo grande de processador físico tendo capacidade de processamento com desempenho relativamente mais alto e uso de energia relativamente maior em relação aos núcleos pequenos de processador físico; expor um conjunto de dois ou mais núcleos pequenos de processador físico para uma interface de firmware do sistema; e ocultar o pelo menos um núcleo grande de processador físico da interface de firmware do sistema.
11. Método, de acordo com a reivindicação 10' caracterizado pelo fato de que compreende adicionalmente: alternar dinamicamente uma thread de um primeiro núcleo pequeno de processador físico para um núcleo grande de processador físico, para permitir que as threads sejam executadas no núcleo grande de processador físico, sendo que a alternância é transparente para a thread.
12. Método, de acordo com a reivindicação 10, caracterizado pelo fato de que compreende adicionalmente: designar um núcleo pequeno de processador físico do conjunto de núcleos pequenos de processador físico como um processador bootstrap; inicializar, pelo processador bootstrap, cada processador no conjunto de núcleos pequenos físicos; e inicializar, pelo processador bootstrap, o pelo menos um núcleo grande físico.
13. Método, de acordo com a reivindicação 12, caracterizado pelo fato de que os núcleos pequenos do processador físico são expostos ao software através de um mapeamento padrão entre processadores virtuais e núcleos pequenos de processador físico.
14. Método, de acordo com a reivindicação 13, caracterizado pelo fato de que o pelo menos um núcleo grande de processador físico é ocultado da interface de firmware do sistema e tornado acessível a um sistema operacional mapeando de modo transparente um ou mais núcleos virtuais para os núcleos grandes de processador físico.
15. Processador, de acordo com a reivindicação 14, caracterizado pelo fato de que o processador físico grande é visível para um sistema operacional tendo suporte para núcleos de processador tendo múltiplos conjuntos de instruções.
16. Sistema, caracterizado por compreender: um conjunto de núcleos pequenos de processador físico; um ou mais núcleos grandes de processador físico tendo capacidade de processamento com desempenho relativamente mais alto e uso de energia relativamente maior em relação aos núcleos pequenos de processador físico; lógica de mapeamento de virtual para físico (v-P) para expor o conjunto de núcleos pequenos de processador físico para uma interface de firmware do sistema através de um conjunto correspondente de núcleos virtuais e ocultar o pelo menos um núcleo grande de processador físico do firmware do sistema; e uma unidade de pacote, para designar e inicializar um processador bootstrap selecionado a partir do conjunto de núcleos pequenos de processador físico.
17. Sistema, de acordo com a reivindicação 16, caracterizado pelo fato de que o circuito de mapeamento de V-P é para mapear cada núcleo virtual para um núcleo físico dentro do conjunto de núcleos pequenos de processador físico para permitir que um primeiro conjunto de threads seja executado em paralelo entre os núcleos pequenos de processador físico.
18. Sistema, de acordo com a reivindicação 17, caracterizado pelo fato de que inclui adicionalmente um processador bootstrap selecionado a partir de um dos núcleos do processador físico, sendo que o processador bootstrapz inicializa cada processador no conjunto de núcleos pequenos físicos; e inicializa o pelo menos um núcleo grande físico.
19. Sistema, de acordo com a reivindicação 18, caracterizado pelo fato de que o pelo menos um núcleo grande físico inclui um estado ocioso mascarado, em que o pelo menos um núcleo grande físico não é mapeado para um núcleo virtual quando o pelo menos um núcleo grande fisico está no estado ocioso mascarado.
20. Sistema, de acordo com a reivindicação 19, caracterizado pelo fato de que o processador bootstrap é um núcleo pequeno físico.
21. Equipamento, caracterizado por compreender: dispositivo para prover um conjunto de um ou mais núcleos pequenos de processador físico; dispositivo para prover pelo menos um núcleo grande de processador físico tendo capacidade de processamento com desempenho relativamente mais alto e uso de energia relativamente maior em relação aos núcleos pequenos de processador físico; dispositivo para expor um conjunto de dois ou mais núcleos pequenos de processador físico para uma interface de firmware do sistema; e dispositivo para ocultar o pelo menos um núcleo grande de processador físico da interface de firmware do sistema.
22. Processador, caracterizado por compreender: um primeiro núcleo físico tendo um primeiro conjunto de instruções e um primeiro nível de consumo de energia, para executar uma thread em um primeiro nível de desempenho; um segundo núcleo físico tendo um segundo conjunto de instruções e um segundo nível de consumo de energia, para executar uma thread em um segundo nível de des emp enho; um terceiro núcleo físico tendo o primeiro conjunto de instruções e o primeiro nível de consumo de energia, para executar uma thread no primeiro nível de desempenho, o primeiro, o segundo e o terceiro núcleos físicos estando em uma unidade dinâmica multinúcleos; e um circuito de mapeamento de virtual para físico (V-P) acoplado aos primeiro, segundo e terceiro núcleos físicos, o circuito para: mapear o primeiro núcleo físico para uma interface de firmware do sistema através de um primeiro núcleo virtual; ocultar o segundo núcleo físico da interface de firmware do sistema; mapear o terceiro núcleo físico para a interface de firmware do sistema através de um segundo núcleo virtual, para permitir que um conjunto de threads seja executado em paralelo, entre o primeiro e o terceiro núcleos físicos; e mapear o segundo núcleo virtual para o segundo núcleo físico de modo transparente para a interface de firmware em resposta às características detectadas associadas ao conjunto de threads sendo executadas.
23. Processador, de acordo com a reivindicação 22, caracterizado pelo fato de que o primeiro nível de consumo de energia é mais baixo do que o segundo nível de consumo de energia, e o segundo nível de desempenho é mais alto do que o primeiro nível de desempenho.
24. Processador, de acordo com a reivindicação 22, caracterizado pelo fato de que o segundo núcleo físico é tornado acessível ao software pelo circuito de mapeamento de V-P mapeando um ou mais dos núcleos virtuais para o segundo núcleo físico.
25. Processador, de acordo com a reivindicação 22, caracterizado pelo fato de que um único núcleo físico do processador deve atuar como um processador bootstrap.
BR102014006299A 2013-03-15 2014-03-17 método para inicializar um sistema heterogêneo e apresentar uma vista simétrica do núcleo BR102014006299A8 (pt)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US201361801615P 2013-03-15 2013-03-15
US13/854,001 US9727345B2 (en) 2013-03-15 2013-03-29 Method for booting a heterogeneous system and presenting a symmetric core view

Publications (2)

Publication Number Publication Date
BR102014006299A2 true BR102014006299A2 (pt) 2015-11-03
BR102014006299A8 BR102014006299A8 (pt) 2018-05-29

Family

ID=51534015

Family Applications (1)

Application Number Title Priority Date Filing Date
BR102014006299A BR102014006299A8 (pt) 2013-03-15 2014-03-17 método para inicializar um sistema heterogêneo e apresentar uma vista simétrica do núcleo

Country Status (7)

Country Link
US (2) US9727345B2 (pt)
JP (1) JP5945292B2 (pt)
KR (1) KR101773229B1 (pt)
CN (1) CN104503830B (pt)
BR (1) BR102014006299A8 (pt)
DE (1) DE102014003798B4 (pt)
GB (2) GB2547769B (pt)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9792112B2 (en) 2013-08-28 2017-10-17 Via Technologies, Inc. Propagation of microcode patches to multiple cores in multicore microprocessor
US9465432B2 (en) 2013-08-28 2016-10-11 Via Technologies, Inc. Multi-core synchronization mechanism
US10198269B2 (en) 2013-08-28 2019-02-05 Via Technologies, Inc. Dynamic reconfiguration of multi-core processor
US9600551B2 (en) * 2013-10-24 2017-03-21 Sap Se Coexistence of message-passing-like algorithms and procedural coding
US9507649B2 (en) * 2014-05-29 2016-11-29 Apple Inc. Web browser for spoofing supported features
CN107250985B (zh) * 2015-02-27 2020-10-16 华为技术有限公司 用于异构计算应用编程接口(api)的系统和方法
US20170052799A1 (en) * 2015-08-21 2017-02-23 Microchip Technology Incorporated Integrated Circuit Device With Selectable Processor Core
US20170160782A1 (en) * 2015-12-07 2017-06-08 Mediatek Inc. Share power source mechanism in a multicore processor system
US10354033B2 (en) * 2016-10-18 2019-07-16 Intel Corporation Mapping application functional blocks to multi-core processors
CN108460282A (zh) * 2017-02-22 2018-08-28 北京大学 一种基于异构多核芯片的计算机安全启动方法
US10599442B2 (en) * 2017-03-02 2020-03-24 Qualcomm Incorporated Selectable boot CPU
US10510133B2 (en) * 2017-06-20 2019-12-17 Think Silicon Sa Asymmetric multi-core heterogeneous parallel processing system
US20190004816A1 (en) * 2017-06-29 2019-01-03 Dell Products L.P. Systems and methods for heterogeneous system on a chip servers
US11288010B2 (en) * 2017-09-25 2022-03-29 Intel Corporation Efficiently storing computer processor data structures in computer memory
US11354135B2 (en) * 2017-12-25 2022-06-07 Intel Corporation Pre-memory initialization multithread parallel computing platform
CN108228189B (zh) * 2018-01-15 2020-07-28 西安交通大学 一种隐藏异构编程多线程的关联结构及基于其的映射方法
CN109947569B (zh) * 2019-03-15 2021-04-06 Oppo广东移动通信有限公司 绑定核心的方法、装置、终端及存储介质
US11842202B2 (en) * 2019-10-25 2023-12-12 Intel Corporation Apparatus and method for dynamic selection of an optimal processor core for power-up and/or sleep modes
US20220058029A1 (en) * 2020-08-24 2022-02-24 Intel Corporation Energy-efficient core voltage selection apparatus and method

Family Cites Families (61)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4377000A (en) * 1980-05-05 1983-03-15 Westinghouse Electric Corp. Automatic fault detection and recovery system which provides stability and continuity of operation in an industrial multiprocessor control
US5440752A (en) 1991-07-08 1995-08-08 Seiko Epson Corporation Microprocessor architecture with a switch network for data transfer between cache, memory port, and IOU
US5642506A (en) 1994-12-14 1997-06-24 International Business Machines Corporation Method and apparatus for initializing a multiprocessor system
AU5722296A (en) 1995-05-01 1996-11-21 Apple Computer, Inc. A modular system utilizing interchangeable printed circuit b oard processor cards
JP3005499B2 (ja) 1997-06-26 2000-01-31 日本電気アイシーマイコンシステム株式会社 図形処理装置及び図形処理方法
JP3497988B2 (ja) 1998-04-15 2004-02-16 株式会社ルネサステクノロジ 図形処理装置及び図形処理方法
US6341347B1 (en) 1999-05-11 2002-01-22 Sun Microsystems, Inc. Thread switch logic in a multiple-thread processor
US6970992B2 (en) 1999-10-04 2005-11-29 Intel Corporation Apparatus to map virtual pages to disparate-sized, non-contiguous real pages and methods relating thereto
US7233998B2 (en) 2001-03-22 2007-06-19 Sony Computer Entertainment Inc. Computer architecture and software cells for broadband networks
US7996839B2 (en) 2003-07-16 2011-08-09 Hewlett-Packard Development Company, L.P. Heterogeneous processor core systems for improved throughput
US7873776B2 (en) 2004-06-30 2011-01-18 Oracle America, Inc. Multiple-core processor with support for multiple virtual processors
US9264384B1 (en) 2004-07-22 2016-02-16 Oracle International Corporation Resource virtualization mechanism including virtual host bus adapters
US7437581B2 (en) 2004-09-28 2008-10-14 Intel Corporation Method and apparatus for varying energy per instruction according to the amount of available parallelism
US9058292B2 (en) 2004-12-29 2015-06-16 Intel Corporation System and method for one step address translation of graphics addresses in virtualization
US7353410B2 (en) 2005-01-11 2008-04-01 International Business Machines Corporation Method, system and calibration technique for power measurement and management over multiple time frames
US7600135B2 (en) 2005-04-14 2009-10-06 Mips Technologies, Inc. Apparatus and method for software specified power management performance using low power virtual threads
US7490254B2 (en) 2005-08-02 2009-02-10 Advanced Micro Devices, Inc. Increasing workload performance of one or more cores on multiple core processors
US7461275B2 (en) 2005-09-30 2008-12-02 Intel Corporation Dynamic core swapping
US7516301B1 (en) 2005-12-16 2009-04-07 Nvidia Corporation Multiprocessor computing systems with heterogeneous processors
US7802073B1 (en) 2006-03-29 2010-09-21 Oracle America, Inc. Virtual core management
US7272517B1 (en) 2006-04-25 2007-09-18 International Business Machines Corporation Method and system for providing performance estimations for a specified power budget
US7822941B2 (en) 2006-06-05 2010-10-26 Oracle America, Inc. Function-based virtual-to-physical address translation
US7904676B2 (en) * 2007-04-30 2011-03-08 Hewlett-Packard Development Company, L.P. Method and system for achieving varying manners of memory access
US8225315B1 (en) * 2007-07-23 2012-07-17 Oracle America, Inc. Virtual core management
US7818500B2 (en) * 2007-11-01 2010-10-19 Pubali Ray Apparatus and method for using one core for RAID control in multi-core CPU
US8010822B2 (en) * 2008-03-28 2011-08-30 Microsoft Corporation Power-aware thread scheduling and dynamic use of processors
US20090309243A1 (en) 2008-06-11 2009-12-17 Nvidia Corporation Multi-core integrated circuits having asymmetric performance between cores
US8214675B2 (en) * 2008-12-08 2012-07-03 Lenovo (Singapore) Pte. Ltd. Apparatus, system, and method for power management utilizing multiple processor types
US9507640B2 (en) 2008-12-16 2016-11-29 International Business Machines Corporation Multicore processor and method of use that configures core functions based on executing instructions
US8122269B2 (en) * 2009-01-07 2012-02-21 International Business Machines Corporation Regulating power consumption in a multi-core processor by dynamically distributing power and processing requests by a managing core to a configuration of processing cores
US8930953B2 (en) 2009-01-16 2015-01-06 International Business Machines Corporation Dynamic checking of hardware resources for virtual environments
US8386747B2 (en) 2009-06-11 2013-02-26 Freescale Semiconductor, Inc. Processor and method for dynamic and selective alteration of address translation
US8400458B2 (en) 2009-09-09 2013-03-19 Hewlett-Packard Development Company, L.P. Method and system for blocking data on a GPU
US8650426B2 (en) * 2009-12-16 2014-02-11 Qualcomm Incorporated System and method for controlling central processing unit power in a virtualized system
US8386749B2 (en) 2010-03-16 2013-02-26 Advanced Micro Devices, Inc. Address mapping in virtualized processing system
US8898664B2 (en) * 2010-06-01 2014-11-25 Microsoft Corporation Exposure of virtual cache topology to a guest operating system
US8869164B2 (en) 2010-09-02 2014-10-21 International Business Machines Corporation Scheduling a parallel job in a system of virtual containers
US8943334B2 (en) 2010-09-23 2015-01-27 Intel Corporation Providing per core voltage and frequency control
US9268611B2 (en) 2010-09-25 2016-02-23 Intel Corporation Application scheduling in heterogeneous multiprocessor computing platform based on a ratio of predicted performance of processor cores
US8418177B2 (en) 2010-10-01 2013-04-09 Microsoft Corporation Virtual machine and/or multi-level scheduling support on systems with asymmetric processor cores
US9092219B2 (en) 2010-11-02 2015-07-28 Advanced Micro Devices, Inc. Method and system of sampling to automatically scale digital power estimates with frequency
US8861434B2 (en) 2010-11-29 2014-10-14 Alcatel Lucent Method and system for improved multi-cell support on a single modem board
US9286257B2 (en) 2011-01-28 2016-03-15 Qualcomm Incorporated Bus clock frequency scaling for a bus interconnect and related devices, systems, and methods
WO2012134431A1 (en) 2011-03-25 2012-10-04 Research In Motion Limited Dynamic power management of cache memory in a multi-core processing system
US8793686B2 (en) 2011-06-08 2014-07-29 Microsoft Corporation Operating system decoupled heterogeneous computing
KR101624061B1 (ko) 2011-09-06 2016-05-24 인텔 코포레이션 전력 효율적 프로세서 아키텍처
TW201319827A (zh) * 2011-11-04 2013-05-16 Inventec Corp 執行多重作業系統的方法及電子裝置
US9442773B2 (en) 2011-11-21 2016-09-13 Qualcomm Incorporated Thermally driven workload scheduling in a heterogeneous multi-processor system on a chip
US20130155081A1 (en) 2011-12-15 2013-06-20 Ati Technologies Ulc Power management in multiple processor system
US9372524B2 (en) 2011-12-15 2016-06-21 Intel Corporation Dynamically modifying a power/performance tradeoff based on processor utilization
US9304570B2 (en) 2011-12-15 2016-04-05 Intel Corporation Method, apparatus, and system for energy efficiency and energy conservation including power and performance workload-based balancing between multiple processing elements
US20130160003A1 (en) 2011-12-19 2013-06-20 Vmware, Inc. Managing resource utilization within a cluster of computing devices
US9720730B2 (en) 2011-12-30 2017-08-01 Intel Corporation Providing an asymmetric multicore processor system transparently to an operating system
WO2013162589A1 (en) 2012-04-27 2013-10-31 Intel Corporation Migrating tasks between asymmetric computing elements of a multi-core processor
US9009508B2 (en) * 2012-08-28 2015-04-14 Advanced Micro Devices, Inc. Mechanism for reducing interrupt latency and power consumption using heterogeneous cores
US9524012B2 (en) 2012-10-05 2016-12-20 Dell Products L.P. Power system utilizing processor core performance state control
US9672046B2 (en) * 2012-12-28 2017-06-06 Intel Corporation Apparatus and method for intelligently powering heterogeneous processor components
US9329900B2 (en) 2012-12-28 2016-05-03 Intel Corporation Hetergeneous processor apparatus and method
US9448829B2 (en) * 2012-12-28 2016-09-20 Intel Corporation Hetergeneous processor apparatus and method
US9639372B2 (en) * 2012-12-28 2017-05-02 Intel Corporation Apparatus and method for heterogeneous processors mapping to virtual cores
KR102055622B1 (ko) 2013-01-10 2020-01-23 삼성디스플레이 주식회사 평판 표시 장치 및 평판 표시 장치의 구동 방법

Also Published As

Publication number Publication date
KR101773229B1 (ko) 2017-08-31
GB2547769B (en) 2018-04-25
GB2514236A (en) 2014-11-19
JP5945292B2 (ja) 2016-07-05
JP2014225242A (ja) 2014-12-04
US20140281457A1 (en) 2014-09-18
BR102014006299A8 (pt) 2018-05-29
CN104503830B (zh) 2018-05-22
US10503517B2 (en) 2019-12-10
GB201700245D0 (en) 2017-02-22
US9727345B2 (en) 2017-08-08
GB2547769A (en) 2017-08-30
CN104503830A (zh) 2015-04-08
GB201404549D0 (en) 2014-04-30
DE102014003798B4 (de) 2023-07-13
US20180060078A1 (en) 2018-03-01
KR20140113600A (ko) 2014-09-24
DE102014003798A1 (de) 2014-09-18
GB2514236B (en) 2017-02-15

Similar Documents

Publication Publication Date Title
US10503517B2 (en) Method for booting a heterogeneous system and presenting a symmetric core view
KR101673435B1 (ko) 공동 설계 프로세서에서 격리된 실행 환경의 생성
JP6507435B2 (ja) 命令エミュレーションプロセッサ、方法、およびシステム
KR101738212B1 (ko) 명령어 에뮬레이션 프로세서, 방법, 및 시스템
US20150006834A1 (en) Method and apparatus for store durability and ordering in a persistent memory architecture
EP4020168A1 (en) Apparatus and method for secure instruction set execution, emulation, monitoring, and prevention
KR102187912B1 (ko) 인터럽트들의 세트들을 구성하는 장치 및 방법
US8589939B2 (en) Composite contention aware task scheduling
KR101804677B1 (ko) 트랜잭션적인 전력 관리를 수행하기 위한 하드웨어 장치들 및 방법들
EP4020190A1 (en) Software visible and controllable lock-stepping with configurable logical processor granularities
BR112016022282B1 (pt) Equipamento, método e suporte físico para execução de segmentos múltiplos em computador
TWI733743B (zh) 用以基於指令類型來調整最大時脈頻率的處理器、方法和系統
US10223149B2 (en) Implementing device models for virtual machines with reconfigurable hardware
US11941409B2 (en) Methods, systems, and apparatuses for a multiprocessor boot flow for a faster boot process
WO2012145154A2 (en) Methods and systems for mapping a function pointer to the device code
US9684541B2 (en) Method and apparatus for determining thread execution parallelism
US20160266905A1 (en) Apparatuses and methods to assign a logical thread to a physical thread
EP3901768A1 (en) Methods, systems, and apparatuses for a multiprocessor boot flow for a faster boot process
US20180349137A1 (en) Reconfiguring a processor without a system reset

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]
B03H Publication of an application: rectification [chapter 3.8 patent gazette]

Free format text: REFERENTE A RPI 2339DE 03/11/2015, QUANTO AO ITEM (72).

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