BR112014018434B1 - Gerenciamento de buffer para unidade de processamento paralelo de gráficos - Google Patents

Gerenciamento de buffer para unidade de processamento paralelo de gráficos Download PDF

Info

Publication number
BR112014018434B1
BR112014018434B1 BR112014018434-8A BR112014018434A BR112014018434B1 BR 112014018434 B1 BR112014018434 B1 BR 112014018434B1 BR 112014018434 A BR112014018434 A BR 112014018434A BR 112014018434 B1 BR112014018434 B1 BR 112014018434B1
Authority
BR
Brazil
Prior art keywords
store
data
line
execution
programmable computing
Prior art date
Application number
BR112014018434-8A
Other languages
English (en)
Other versions
BR112014018434A2 (pt
BR112014018434A8 (pt
Inventor
Alexei V. Bourd
Vineet Goel
Original Assignee
Qualcomm Incorporated
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qualcomm Incorporated filed Critical Qualcomm Incorporated
Publication of BR112014018434A2 publication Critical patent/BR112014018434A2/pt
Publication of BR112014018434A8 publication Critical patent/BR112014018434A8/pt
Publication of BR112014018434B1 publication Critical patent/BR112014018434B1/pt

Links

Images

Classifications

    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/001Arbitration of resources in a display system, e.g. control of access to frame buffer by video controller and/or main processor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/167Interprocessor communication using a common memory, e.g. mailbox
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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/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/5038Allocation 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 the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • 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/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06GANALOGUE COMPUTERS
    • G06G5/00Devices in which the computing operation is performed by means of fluid-pressure elements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2360/00Aspects of the architecture of display systems
    • G09G2360/10Display system comprising arrangements, such as a coprocessor, specific for motion video images
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2360/00Aspects of the architecture of display systems
    • G09G2360/12Frame memory handling
    • G09G2360/121Frame memory handling using a cache memory
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • G09G5/363Graphics controllers

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Multimedia (AREA)
  • Computer Graphics (AREA)
  • Mathematical Physics (AREA)
  • Advance Control (AREA)
  • Image Processing (AREA)
  • Image Generation (AREA)
  • Multi Processors (AREA)

Abstract

gerenciamento de buffer para unidade de processamento paralelo de gráficos. as técnicas estão de modo geral relacionadas com um método para executar operações de processamento de dados gráficos em paralelo e também à maneira de canalização. um primeiro fluxo de execução é executado em uma primeira unidade (28a) de, por exemplo, um processador de sombreamento de uma gpu (26) e um segundo fluxo de execução é executado em paralelo em uma segunda unidade (28n). os dados produzidos pela execução do primeiro fluxo de execução são então consumidos pela segunda unidade que executa o segundo fluxo de execução. uma unidade de gerenciamento (18) dentro de um ic (16) que inclui a gpu recebe uma solicitação da primeira unidade para armazenar os dados produzidos por ela em uma armazenador (22a-22n) em uma memória global externa ao ic, o armazenador compreendendo um armazenador fifo, um exemplo dele sendo um armazenador anular, e determina um local onde os dados produzidos pela execução do primeiro fluxo de execução serão armazenados. ao receber uma solicitação da segunda unidade para recuperar os dados produzidos pela execução do primeiro fluxo de execução, a unidade de gerenciamento determina se os dados do primeiro fluxo de execução estão disponíveis para recuperação para consumo pelo segundo fluxo de execução.

Description

[0001] Este pedido reivindica o benefício do pedido provisório norte-americano 61/591 733, depositado a 27 de janeiro de 2012 cujo conteúdo inteiro é por este incorporado em sua totalidade à guisa de referência.
CAMPO TÉCNICO
[0002] Esta revelação refere-se ao gerenciamento de acesso a memórias e, mais especificamente, ao gerenciamento de acesso a memórias em aparelho de processamento de gráficos (GPUs)
ANTECEDENTES
[0003] Unidades de processamento de gráficos (GPUs) estão sendo utilizadas para finalidades além do processamento de gráficos. Por exemplo, aplicativos sem relação com gráficos podem ser executados com maior velocidade pela exploração do paralelismo em massa de uma GPU. Isto tem levado a GPUs que apresentam funcionalidade de processamento sem relação com gráficos e são referidas como GPUs de propósito geral (GPGPUs). Por exemplo, uma GPGPU inclui um ou mais núcleos de sombreamento, e os núcleos de sombreamento são configurados para executar aplicativos tais como aplicativos relacionados com gráficos, assim como aplicativos não relacionados com gráficos.
SUMÁRIO
[0004] Em geral, esta revelação está relacionada com técnicas para gerenciar um armazenador que está em uma memória global e que armazena dados para uma unidade de processamento de gráficos (GPU) com a GPU. Por exemplo, um chip de circuito integrado (IC) que inclui a GPU inclui uma unidade de gerenciamento de canalização. A unidade de gerenciamento de canalização pode ser configurada para manter as informações sobre estado de um ou mais armazenadores na memória global. Quando um aplicativo executado na GPU está para cessar os armazenadores na memória global, as informações sobre estado sobre armazenadores na memória global podem estar disponíveis dentro do chip de IC. Desta maneira não é necessário que a GPU efetue acesso à memória não embutida de modo a determinar as informações sobre estado dos armazenadores na memória global.
[0005] Em um exemplo, a revelação descreve um método para execução de operações de processamento de dados à maneira de canalização. O método inclui executar um primeiro fluxo de execução em uma primeira unidade de computação programável de um processador gráfico de operações específicas de uma unidade de processamento de gráficos (GPU) e executar um segundo fluxo de execução em segunda unidade de computação programável do processador gráfico de operações específicas da GPU. O método inclui também receber, com uma unidade de gerenciamento dentro de um circuito integrado (IC) que inclui a GPU uma solicitação da primeira unidade de computação programável para armazenar dados produzidos pela execução do primeiro fluxo de execução em um armazenador em uma memória global externa ao IC. Neste exemplo, os dados produzidos pela execução do primeiro fluxo de execução serão consumidos pela segunda unidade de computação programável que executa o segundo fluxo de execução. Além disto, neste exemplo, o armazenador compreende um de um armazenador primeiro dentro primeiro fora (FIFO) e um armazenador anular. O método inclui também determinar, com a unidade de gerenciamento, a localização dentro do armazenador onde os dados produzidos pela execução do primeiro fluxo de execução serão armazenados, e armazenar, com o IC, os dados produzidos pela execução do primeiro fluxo de execução na localização determinada dentro do armazenador.
[0006] Em um exemplo, a revelação descreve um equipamento. O equipamento inclui uma memória global que inclui um armazenador. Neste exemplo, o armazenador compreende um de um armazenador primeiro dentro primeiro fora (FIFO) e um armazenador anular. O equipamento inclui também um circuito integrado (IC) que inclui uma unidade de processamento de gráficos (GPU) e uma unidade de gerenciamento. A GPU inclui uma primeira unidade de computação programável configurada para executar um primeiro fluxo de execução e uma segunda unidade de computação programável configurada para executar um segundo fluxo de execução. A unidade de gerenciamento é configurada para receber uma solicitação da primeira unidade de computação programável para armazenar os dados produzidos pela execução do primeiro fluxo de execução no armazenador na memória global. Neste exemplo, os dados produzidos pela execução do primeiro fluxo de execução serão consumidos pela segunda unidade de computação programável que executa o segundo fluxo de execução. A unidade de gerenciamento é também configurada para determinar a localização dentro do armazenador onde os dados produzidos pela execução do primeiro fluxo de execução serão armazenados. Neste exemplo, o IC é configurado para armazenar os dados produzidos pela execução do primeiro fluxo de execução na localização determinada dentro do armazenador.
[0007] Em um exemplo, a revelação descreve um equipamento. O equipamento inclui uma memória global e um circuito integrado (IC). A memória global inclui um armazenador. Neste exemplo, o armazenador compreende um de um primeiro armazenador primeiro dentro primeiro fora (FIFO) e um armazenador anular. O IC inclui uma unidade de processamento de gráficos (GPU) que compreende um dispositivo para executar um primeiro fluxo de execução e um dispositivo para executar um segundo fluxo de execução. O IC inclui também um dispositivo para receber do dispositivo para executar o primeiro fluxo de execução uma solicitação para armazenar os dados produzidos pela execução do primeiro fluxo de execução no armazenador na memória global. Neste exemplo, os dados produzidos pela execução do primeiro fluxo de execução serão consumidos pelo dispositivo para executar o segundo fluxo de execução. O IC inclui também um dispositivo para determinar a localização dentro do armazenador os dados produzidos pelo dispositivo para executar o primeiro fluxo de execução serão armazenados, e um dispositivo para armazenar os dados produzidos pela execução do primeiro fluxo de execução na localização determinada dentro do armazenador.
[0008] Em um exemplo, a revelação descreve um meio de armazenamento passível de leitura por computador que tem instruções armazenadas nele que, quando executadas, fazem com que um ou mais processadores executem um primeiro fluxo de execução em uma primeira unidade de computação programável do processador gráfico de operações específicas de uma unidade de processamento de gráficos (GPU) e executem um segundo fluxo de execução em uma segunda unidade de computação programável do processador gráfico de operações específicas da GPU. As instruções fazem com que o processador ou processadores recebam com uma unidade de gerenciamento dentro de um circuito integrado (IC) que inclui a GPU, uma solicitação da primeira unidade de computação programável para armazenar os dados produzidos pela execução do primeiro fluxo de execução em um armazenador em uma memória global externa ao IC. Neste exemplo, os dados produzidos pela execução do primeiro fluxo de execução serão consumidos pela segunda unidade de computação programável que executa o segundo fluxo de execução. Além disto, neste exemplo, o armazenador compreende um de um armazenador primeiro dentro primeiro fora e um armazenador anular. As instruções fazem também com que o processador ou processadores determinem, com a unidade de gerenciamento, a localização dentro do armazenador onde os dados produzidos pela execução do primeiro fluxo de execução serão armazenados e, armazenem, com o IC, os dados produzidos pela execução do primeiro fluxo de execução na localização determinada dentro do armazenador.
[0009] Os detalhes de um ou mais exemplos são apresentados nos desenhos anexos e na descrição que se segue. Outros recursos, objetos e vantagens se tornarão evidentes com a descrição e os desenhos e com as reivindicações.
DESCRIÇÃO RESUMIDA DOS DESENHOS
[0010] A Figura 1 é um diagrama de blocos que mostra um exemplo de um aparelho de acordo com um ou mais exemplos descritos nesta revelação.
[0011] A Figura 2 é um diagrama de blocos que mostra uma unidade de processamento de gráficos (GPU) e uma memória global mais detalhadamente.
[0012] A Figura 3 é um fluxograma que mostra uma técnica exemplar de acordo com uma ou mais exemplos descritos nesta revelação.
[0013] A Figura 4 é um fluxograma que mostra outra técnica exemplar de acordo com um ou mais exemplos descritos nesta revelação.
[0014] A Figura 5 é um diagrama de blocos que mostra um aparelho da Figura 1 mais detalhadamente.
DESCRIÇÃO DETALHADA
[0015] Uma unidade de processamento de gráficos (GPU) pode incluir um processador gráfico de operações específicas que é configurado para executar um ou mais aplicativos. Exemplos destes aplicativos incluem programas de sombreamento tais como sombreadores de vértice, sombreadores de envoltório, sombreadores de fragmentos, sombreadores de geometria e outros aplicativos que tais relacionados com processamento de gráficos. Além disto, alguns desenvolvedores de aplicativos podem considerar benéfico explorar o paralelismo em massa da GPU e executar aplicativos não relacionados com gráficos na GPU. Por exemplo, o paralelismo de processamento provido por uma GPU pode ser adequado para executar operações de matriz paralelas, mesmo quando as operações de matriz não estão relacionadas com o processamento de gráficos. Outros exemplos de aplicativos não relacionados com gráficos incluem técnicas relacionadas com dinâmica de fluidos ou álgebra linear nas quais a rápida execução de operações paralelas pode ser benéfica. Os aplicativos não relacionados com gráficos podem ser também executados no processador gráfico de operações específicas.
[0016] Uma GPU que seja capaz de executar tais aplicativos não relacionados com gráficos pode ser considerada como uma GPU de processo geral (GPU). Por exemplo, quando uma GPU está executando aplicativos não relacionados com gráficos, a GPU está funcionando como uma GPGPU. A maioria de todas as GPUs pode ser configurada como uma GPGPU.
[0017] Para fins de ilustração, esta revelação descreve técnicas com relação a uma GPU que funciona como uma GPGPU. Entretanto as técnicas não estão limitadas a ocorrências nas quais a GPU está funcionando como uma GPGPU (isto é, que executa aplicativos não relacionados com gráficos), e as técnicas podem aplicar-se também a ocorrências nas quais a GPU está executando aplicativos relacionados com gráficos. Além do mais, as técnicas descritas nesta revelação podem ser implementadas por qualquer tipo de unidade de processamento (CPU), um acelerador ou qualquer outro aparelho personalizado. Embora as técnicas sejam descritas a uma GPU, deve ficar entendido que as técnicas são extensíveis a outros tipos de unidade de processamento.
[0018] O processador gráfico de operações específicas dentro da GPU pode incluir uma série de núcleos de sombreamento (também referidos como unidades de computação programáveis para indicar que estes núcleos podem executar instruções para aplicativos tanto relacionados com gráficos quanto não relacionados com gráficos). Cada uma das unidades de computação programáveis pode incluir uma memória local reservada para instruções a serem executadas por essa unidade de computação programável, assim como dados produzidos pela execução das instruções, tais como resultados intermediários produzidos durante a execução dos fluxos de execução. A memória local da unidade de computação programável pode ser inacessível por outras unidades de computação programáveis. Em alguns casos aplicativos diferentes que serão executados na GPU podem ser executados por unidades de computação programáveis diferentes.
[0019] Nas técnicas descritas nesta revelação, os aplicativos relacionados com gráficos são referidos como sombreadores, e os aplicativos não relacionados com gráficos são referidos como núcleos. Por exemplo, exemplos de sombreadores, (isto é, aplicativos relacionados com gráficos) incluem, mas não se limitam a, um sombreador de vértice, um sombreador de fragmentos e o sombreador de geometria. Exemplos de núcleos (isto é, aplicativos não relacionados com gráficos) incluem aplicativos para executar operações de matriz, dinâmica de fluidos, operações de processamento de imagens, operações de processamento de vídeo e semelhantes.
[0020] Além disso, os núcleos não precisam necessariamente ser limitados apenas a aplicações que são executadas pela GPU e incluem também unidades de função fixa (isto é, unidades não programáveis da GPU). Para fins de exemplificação apenas, as técnicas descritas nesta revelação são descritas com relação aos núcleos que são aplicativos que são executados na GPU. Por exemplo, as técnicas são descritas com relação a aplicativos não relacionados com gráficos executados no processador gráfico de operações específicas de uma GPU de modo que a GPU funcione como uma GPGPU.
[0021] Um núcleo pode incluir uma série de grupos de trabalho, tarefas ou fluxos de execução (todos os quais são utilizados como sinônimos nesta revelação). Por exemplo, um fluxo de execução pode ser um conjunto de instruções do núcleo e podem ser executadas independentemente dos outros fluxos de execução do núcleo. Em alguns exemplos, para executar um núcleo uma ou mais das unidades de computação programáveis podem executar cada uma delas, um ou mais fluxos de execução do núcleo. Por exemplo, uma primeira unidade de computação programável pode executar um primeiro fluxo de execução do núcleo, e uma segunda unidade de computação programável pode executar um segundo fluxo de execução do mesmo núcleo. Em alguns exemplos, um unidade de computação programável pode executar um ou mais fluxos de execução de um núcleo, enquanto outra unidade de computação programável executa um ou mais fluxos de execução de outro núcleo. Em alguns exemplo, uma combinação dos dois pode ser possível (isto é, algumas unidades de computação programáveis executam fluxos de execução diferentes do mesmo núcleo, enquanto algumas outras unidades de computação programáveis executam fluxos de execução de núcleos diferentes).
[0022] Em geral, a GPU pode ser configurada para implementar um único modelo de programação de vários dados de programa (SPMD). No modelo de programação SPMD, a GPU pode executar um núcleo em várias unidades de computação programáveis (como fluxos de execução, por exemplo), onde cada unidade de computação programável desempenha funções em seus próprios dados. Além disto, no modelo de programação SPMD, as unidades de computação programável incluem respectivos contadores de programa que indicam as instruções atuais que são executadas pelas unidades de computação programáveis.
[0023] Embora as GPUs proporcionem paralelismo em massa para processamento, as GPUs podem não ser bem adequadas para executar núcleos à maneira de canalização. Executar núcleos à maneira de canalização significa executar núcleos de modo que os dados produzidos por um núcleo sejam consumidos por outro núcleo. Como outro exemplo, executar núcleos à maneira de canalização significa executar um fluxo de execução do núcleo que produz dados que serão consumidos por outro fluxo de execução do mesmo núcleo. Nesta revelação, um fluxo de execução que produz os dados pode ser referido como um fluxo de execução produtor e o fluxo de execução que recebe os dados pode ser referido como fluxo de execução consumidor.
[0024] Em alguns exemplos, o fluxo de execução produtor e o fluxo de execução consumidor podem ser fluxo de execução do mesmo núcleo. Em alguns exemplos, o fluxo de execução produtor e o fluxo de execução consumidor podem ser fluxos de execução de núcleos diferentes. Nestes exemplos, o núcleo que inclui o fluxo de execução produtor pode ser referido como núcleo produtor e o núcleo que inclui o fluxo de execução consumidor pode ser referido como núcleo consumidor.
[0025] Por exemplo, executar núcleos à maneira de canalização pode ser imaginado como um primeiro fluxo de execução (um fluxo de execução produtor de um núcleo, por exemplo) que produz dados que são consumidos por um segundo fluxo de execução (um fluxo de execução consumidor do mesmo núcleo ou de um núcleo diferente, por exemplo). Este segundo fluxo de execução (que foi um consumidor para o primeiro fluxo de execução) pode ser um fluxo de execução produtor para um terceiro fluxo de execução (o segundo fluxo de execução produz dados que serão consumidos pelo terceiro fluxo de execução, por exemplo). O terceiro fluxo de execução pode ser um fluxo de execução para um núcleo diferente do núcleo que inclui os primeiro e segundo fluxos de execução ou pode ser um fluxo de execução para um dos núcleos que inclui os primeiro e segundo fluxo de execução. Neste exemplo, os primeiro, segundo e terceiro fluxo de execução podem ser imaginados como formando uma canalização de processamento.
[0026] A execução de núcleos à maneira de canalização não deve ser interpretada como exigindo que os núcleos ou fluxos de execução sejam executados serialmente (um depois do outro, por exemplo). No exemplo acima, por exemplo, é possível que a GPU execute dois ou mais dos primeiro, segundo e terceiro fluxos de execução em paralelo (ao mesmo tempo, por exemplo). Entretanto, é também possível que a GPU execute os fluxos de execução serialmente e ser ainda assim considerada como executando os núcleos à maneira de canalização.
[0027] Pode ser necessário que uma unidade de computação programável, que executa um fluxo de execução produtor de um núcleo transmita os dados produzidos para a memória global (isto é, memória de sistema, não embutida, externa ao circuito integrado (IC) que inclui a GPU), onde a memória global pode ser acessível por meio de um barramento de sistema, por exemplo. Outra unidade de computação programável, que executa um fluxo de execução consumidor do mesmo núcleo ou de núcleo diferente, pode precisar receber os dados produzidos da memória global. Conforme descrito mais detalhadamente, para as GPUs existentes, o gerenciamento da memória global pode ser ineficaz em termos de computação, tempo e ou energia do que resulta em um desempenho precário quando se executam núcleos à maneira de canalização.
[0028] Esta revelação descreve técnicas para gerenciamento computacional, de tempo e energia eficaz da memória global. Conforme descrito mais detalhadamente, o circuito integrado (IC) que inclui a GPU pode incluir uma unidade de gerenciamento de canalização (PMU). Alternativamente, a GPU propriamente dita pode incluir a PMU. A PMU pode ser configurada para gerenciar as informações sobre estado da memória global que armazena os dados produzidos que serão consumidos. Por exemplo, um processador ou a GPG propriamente dita pode reservar locais dentro da memória global de onde os dados produzidos pelas unidades de computação programáveis serão armazenados na memória global. Estes locais reservados dentro da memória global podem ser considerados como uma série de armazenadores. Em alguns exemplos, a série de armazenadores pode formar um armazenador anular ou um armazenador primeiro dentro primeiro fora (FIFO). Um armazenador anular pode ser considerado como um exemplo de armazenador FIFO.
[0029] A PMU pode armazenar informações dentro do IC ou dentro da GPU (em uma memória cache embutida, interna, por exemplo) que indicam informações sobre estado dos armazenadores na memória global não embutida. Como exemplo, a PMU pode armazenar informações que indicam o endereço inicial e o endereço terminal dos armazenadores na memória global. Como outro exemplo, a PMU pode armazenar o endereço do armazenador dentro da série de armazenadores onde os dados produzidos serão armazenados, assim como endereços do armazenador dentro da série de armazenadores onde os dados a serem consumidos serão lidos. Como ainda outro exemplo, a PMU pode armazenar informações que indicam se um núcleo produtor completou a produção de dados, de modo que a unidade de computação programável que está executando um fluxo de execução do núcleo consumidor que necessita dos dados possa prosseguir com a execução de outros fluxos de execução do núcleo consumidor que não necessitam dos dados.
[0030] Nas técnicas descritas nesta revelação, a PMU pode receber uma solicitação para armazenar os dados produzidos por um fluxo de execução produtor no armazenador e pode receber uma solicitação para recuperar os dados produzidos pelo fluxo de execução produtor do armazenador para consumo por um fluxo de execução consumidor. A PMU pode determinar a localização dentro do armazenador onde os dados produzidos pela execução do fluxo de execução produtor serão armazenados com base na informações sobre estado armazenadas do armazenadores e determinar o local dentro do armazenador de onde os dados a serem consumidos pelo núcleo consumidor serão recuperados com base nas informações sobre estado armazenadas dos armazenadores.
[0031] Pelo gerenciamento das informações sobre estado da memória global com informações armazenadas dentro do IC que inclui a GPU ou dentro da GPU propriamente dita, as técnicas descritas nesta revelação podem reduzir ao mínimo o número de vezes que a GPU precisa acessar a memória global. Por exemplo, a PMU pode não precisar determinar os endereços de onde os dados serão armazenados ou recuperados pelo acesso a tais informações dentro do IC que inclui a GPU. A redução ao mínimo do número de vezes em que a GPU precisa acessar a memória global pode reduzir o consumo de energia, reduzir a carga de largura de banda do barramento de sistema e a latência de permanência.
[0032] Além do mais, conforme descrito mais detalhadamente a seguir, as GPUs existentes, não é necessário que os núcleos incluam instruções que gerenciam a memória global. A GPU pode dispersar ciclos de relógio executando tais informações de gerenciamento de memória global, que podem ser ineficazes computacionalmente. Com a PMU gerenciando as informações sobre o estado da memória global pode não ser necessário que os núcleos incluam instruções de gerenciamento de memória global, o que resulta em instruções de núcleo menos complexas, assim como menos instruções de núcleo que é necessário executar. Desta maneira, as técnicas descritas nesta revelação podem promover eficácia computacional.
[0033] A Figura 1 é um diagrama de blocos que mostra um exemplo de um aparelho de acordo um ou mais exemplos descritos nesta revelação. Por exemplo, a Figura 1 mostra um aparelho 10. Exemplos de aparelho 10 incluem, mas não se limitam a, aparelhos de vídeos tais como executores de meios, conversores set-top box, aparelhos telefônicos sem fio tais como telefones móveis, assistentes digitais pessoais (PDAs), computadores de mesa, computadores laptop, consoles para jogos, unidades de vídeo conferência, aparelhos de computação tablet e semelhantes. O aparelho 10 pode incluir componentes além dos mostrados na Figura 1.
[0034] Conforme mostrado, o aparelho 10 inclui um circuito integrado (IC) 12 e uma memória global 20. A memória global 20 pode ser considerada como a memória para o aparelho 10. A memória 20 pode compreender um ou mais meios passíveis de leitura por computador. Exemplos de memória global 20 incluem, mas não se limitam a, uma memória de acesso aleatório (RAM), uma memória exclusiva de leitura programável eletricamente apagável (EEPROM), uma memória flash ou qualquer outro meio que possa ser usado para portar ou armazenar um código de programa de desejado sob a forma de instruções e ou estruturas de dados e que possa ser acessado por um computador ou um processador.
[0035] Sob alguns aspectos, a memória global 20 pode incluir instruções que fazem com que o processador 14 e ou a GPU 16 executem as funções atribuídas ao processador 14 e à GPU 16 nesta revelação, por conseguinte, a memória global 20 pode ser um meio de armazenamento passível de leitura por computador que tem instruções armazenadas nele que, quando executadas fazem com que um ou mais processadores (o processador 14 e a GPU 16, por exemplo) executem diversas funções.
[0036] A memória global 20 pode ser considerada, em alguns exemplos, como um meio de armazenamento não transitório. O termo “não transitório” pode indicar que o meio de armazenamento não é corporificado em uma onda portadora ou um sinal propagado. Entretanto, “não transitório” não deve ser interpretado como significando que a memória global 20 é imóvel ou que seus conteúdos são estáticos. Como exemplo, a memória global 20 pode ser removida do aparelho 10 e movida para outro aparelho. Como outro exemplo, uma memória global, substancialmente semelhante à memória global 20, pode ser inserida no aparelho 10. Em determinados exemplos, um meio de armazenamento não transitório pode armazenar dados que podem, ao longo do tempo, se alterar (em uma RAM, por exemplo).
[0037] O IC 12 inclui um processador 14, uma unidade de processamento de gráficos (GPU) 16 e uma unidade de gerenciamento de canalização (PMU) 18. O IC 12 pode ser qualquer tipo de circuito integrado que aloja ou forma o processador 14, a GPU 16 e a PMU 18. Por exemplo, o IC 12 pode ser considerado como um chip de processamento dentro de um pacote de chips. A PMU 18 pode ser uma unidade de hardware que forma parte do IC 12 ou pode ser um hardware dentro GPU 16. É possível que a PMU 18 seja um software executado em hardware dentro do IC 12 ou dentro da GPU 16. Para fins de exemplificação e descrição, as técnicas são descritas com relação à PMU 18 como sendo uma unidade de hardware.
[0038] Embora o processador 14, a GPU 16 e a PMU 18 sejam mostrados como sendo parte de um único IC 12, os aspectos desta revelação não são assim limitado. Em alguns exemplos, o processador 14 e a GPU 16 podem ser alojados em circuitos integrados diferentes (isto é, pacotes de chips diferentes). Nestes exemplos, a PMU 18 pode ser alojada no mesmo circuito integrado da GPU 16. Em alguns exemplos, a PMU 18 pode ser formada como parte da GPU 16. Como um exemplo, o processador 14 e a GPU 16 podem ser alojados no mesmo circuito integrado (isto é, num mesmo pacote de chips) e a PMU 18 pode ser formada dentro da GPU 16. Como outro exemplo, o processador 14 e a GPU 16 podem ser alojados em circuitos integrados diferentes (isto é, em pacote de chips diferentes), a PMU 18 pode ser formada dentro da GPU 16.
[0039] Exemplos de processador 14, GPU 16 e PMU 18 incluem, mas não se limitam a , um processador de sinais digitais (DSP), um micro-processador de propósito geral, um circuito integrado específico de aplicativo (ASIC), um arranjo lógico programável no campo (FPGA) ou outro conjunto de circuitos lógicos integrado ou discreto. Em alguns exemplos, a GPU 16 e a PMU 18 podem ser um hardware especializado que inclui um conjunto de circuitos lógicos integrados e ou discreto que fornece à GPU 16 capacidades de processamento paralelo em massa adequadas para processamento de gráficos que fornece à PMU 18 uma memória global de gerenciamento 20, conforme descrito mais detalhadamente a seguir. Em alguns exemplos, a GPU 16 pode incluir também processamento de propósito geral e pode ser referida como GPU de propósito geral (GPGPU) quando implementa tarefas de processamento de propósito geral (isto é, tarefas não relacionadas com gráficos).
[0040] O processador 14, às vezes referido como hospedeiro, pode ser a unidade central de processamento (CPU) do aparelho 10. O processador 14 pode execução diversos tipos de aplicativo. Exemplos de aplicativo incluem navegadores da Web, leitoras eletrônicas, aplicativos de e-mail, planilhas, jogos de vídeo, repetição de vídeo, repetição de áudio, processamento de texto, ou outros aplicativos que geram objetos passíveis de visualização para exibição ou quaisquer outros tipos de aplicativo. A memória global 20 pode armazenar instruções para execução do aplicativo ou aplicativos.
[0041] Em alguns exemplos, o processador 14 pode fazer offload de tarefas de processamento para a GPU 16, tais como tarefas que exigem operações paralelas em massa. Como exemplo, o processamento de gráficos exige operações paralelas em massa, e o processador 14 pode fazer offload de tais tarefas de processamento de gráficos para a GPU 16. Em alguns exemplos, o processador 14 pode fazer offload de tarefas que não estão relacionadas com o processamento de gráficos para a GPU 16. Por exemplo, operações de matriz exigem operações paralelas, e a GPU 16 pode ser mais bem adequada para implementar tais operações em comparação com o processador 14.
[0042] Para implementar tarefas, a GPU 16 pode ser configurada para executar um ou mais aplicativos. Para processamento relacionado com gráficos, por exemplo, a GPU 16 pode executar aplicativos tais como sombreadores de vértice, sombreadores de fragmentos e sombreadores de geometria. Para processamento relacionado com gráficos, a GPU 16 pode executar aplicativos projetados para tal processamento (como, por exemplo, um aplicativo para implementar operações de matriz ou um aplicativo para dinâmica de fluidos). Para ambos os exemplos (processamento relacionado com gráficos ou processamento não relacionado com gráficos, por exemplo), o processador 14 pode instruir a GPU 16 para executar o aplicativo ou aplicativos.
[0043] O processador 14 pode comunicar-se com a GPU 16 de acordo com uma interface de processamento com aplicativo (API) específica. Por exemplo, o processador 14 pode transmitir instruções para a GPU 16, tais como instruções que instruem a GPU 16 para executar um ou mais aplicativos utilizando a API. Exemplos de tais APIs incluem a API DirectX® da Microsoft®, a OpenGL® do grupo Kronos e a OpenCL® do grupo Kronos; entretanto, os aspectos desta revelação não estão limitados às APIs DirectX, OpenGL ou OpenCL e podem ser estendidos a outros tipos de API que foram desenvolvidos, estão sendo atualmente desenvolvidos ou serão desenvolvidos no futuro. Além do mais, não é necessário que as técnicas descritas nessa revelação funcionem de acordo com uma API, e o processador 14 e a GPU 16 podem utilizar qualquer técnica para comunicação.
[0044] Como exemplo, para aplicativos relacionados com gráficos, o processador 14 pode comunicar-se com a GPU 16 utilizando a API OpenGL. Para aplicativos não relacionados com gráficos, o processador 14 pode comunicar-se com a GPU 16 utilizando-se a API OpenCL. Mais uma vez, as técnicas descritas nessa revelação não exigem necessariamente que o processador 14 se comunique com a GPU 16 utilizando as APIs OpenGl e ou OpenCl.
[0045] Os aplicativos relacionados com gráficos que a GPU 16 está para executar podem ser referidos como sombreadores, e os aplicativos não relacionados com gráficos que a GPU 16 está para executar podem ser referidos como núcleos. Por exemplo, a memória global 20 pode armazenar as instruções dos sombreadores e núcleos, em um compilador executado no processador 14 pode converter as instruções dos sombreadores e núcleos em código de objeto para execução na GPU 16. Como outro exemplo, a memória global 20 pode armazenar o código de objeto de sombreadores e nus que a GPU 16 recupera e executa.
[0046] Exemplos dos sombreadores incluem o sombreador do vértice, o sombreador de fragmentos e o sombreador de geometria para processamento relacionado com gráficos. Exemplos de núcleo incluem aplicativos que não estão relacionados com processamento de gráficos (para álgebra linear ou dinâmica de fluidos, por exemplo). Como exemplos adicionais, os núcleos incluem aplicativos para processamento de imagens e processamento de vídeo.
[0047] A GPU 16 pode incluir um processador gráfico de operações específicas e o processador gráfico de operações específicas pode executar os sombreadores e núcleos. Por exemplo, o processador gráfico de operações específicas da GPU 16 pode incluir um ou mais núcleos de sombreamento (referidos como unidades de computação programáveis), e cada uma da unidade ou unidade de computação programáveis, e cada uma da unidade ou unidades de computação programáveis pode executar um núcleo.
[0048] Embora os núcleos sejam descritos como sendo aplicativos que são executados na GPU 16, os núcleos não devem ser considerados como tão limitadores. Outros exemplos incluem unidades de função fixa da GPU 16. Por exemplo, a GPU 16 inclui unidades de computação programáveis e unidades de função fixa. As unidades de computação programáveis podem prover flexibilidade funcional ao executarem aplicativos. As unidades de função fixa podem ser unidades de hardware que não provêem flexibilidade funcional e podem ser projetadas para fins específicos. Em geral, o termo núcleo refere-se a qualquer aplicativo ou unidade de hardware que recebe dados, processa os dados e transmite os dados para fins não relacionados com gráficos. Para fins de exemplificação, contudo, as técnicas descritas nesta revelação são descritas com exemplos nos quais os núcleos são aplicativos, entendendo-se que estas técnicas são extensíveis a exemplos nos quais os núcleos são unidades de função fixa.
[0049] Nas técnicas descritas nesta revelação em vez de uma unidade de computação programável executar todas as instruções de um núcleo, é possível que várias unidades de computação programáveis executem partes do núcleo. Uma parte de um núcleo pode ser referida como grupo de trabalho, tarefa ou fluxo de execução (todos são sinônimos). Por exemplo, um grupo de trabalho, tarefa ou fluxo de execução de um núcleo é um conjunto de instruções que pode ser executado independentemente de outros grupos de trabalho, tarefas ou fluxos de execução do núcleo.
[0050] Em alguns exemplos, um primeiro conjunto de uma ou mais unidades de computação programáveis pode executar fluxo de execução de um núcleo, e um segundo conjunto de uma ou mais unidades de computação programáveis pode executar fluxo de execução de um núcleo. Em alguns casos, os fluxos de execução que o primeiro conjunto de unidades de computação programáveis e o segundo conjunto de unidades de computação programáveis executam podem ser fluxos de execução do mesmo núcleo. Em alguns casos, os fluxos de execução que o primeiro conjunto de unidades de computação programáveis e o segundo conjunto de unidades de computação programáveis executam podem ser fluxos de execução de núcleos diferentes. Tanto em um quanto em outro destes exemplos, pode ser necessário que um dos fluxos de execução transmita os dados gerados para outro dos núcleos dos fluxos de execução. Em outras palavras, a GPU 16 pode executar os núcleos à maneira de canalização.
[0051] Conforme descrito acima exemplo, executar núcleos à maneira de canalização pode significar executar núcleos de modo que os dados produzidos por um fluxo de execução sejam consumidos por outro fluxo de execução e os dados produzidos por este outro fluxo de execução sejam consumidos por ainda outro fluxo de execução, e assim por diante. Neste exemplos, os fluxos de execução podem ser fluxos de execução de núcleos diferentes, do mesmo núcleo, ou alguns fluxos de execução podem ser para núcleos diferentes, e outros fluxos de execução podem ser para o mesmo núcleo. Nestes exemplos, os núcleos podem ser vistos como formando uma canalização na qual os dados são produzidos e consumidos. Por exemplo, um primeiro, um segundo e terceiro fluxos de execução do mesmo núcleo ou de núcleos diferentes podem formar um tubo, no qual o primeiro fluxo de execução produz dados e transmite os dados a serem consumidos pelo segundo fluxo de execução para processamento. O segundo fluxo de execução processa os dados recebidos de modo a produzir dados e transmite os dados produzidos para o terceiro fluxo de execução para processamento, e assim por diante.
[0052] Neste exemplo, o primeiro fluxo de execução pode ser referido como um fluxo de execução produtor, o segundo fluxo de execução pode ser referido como um fluxo de execução consumidor para primeiro fluxo de execução e um fluxo de execução produtor para o terceiro fluxo de execução, e o terceiro fluxo de execução pode ser referido como um fluxo de execução consumidor. Nos exemplos em que os primeiro, segundo e terceiro fluxos de execução são para núcleos diferentes (como, por exemplo, o primeiro, segundo e terceiro núcleos respectivamente), o primeiro núcleo pode ser referido como núcleo produtor, o segundo núcleo pode ser referido como núcleo consumidor para o primeiro núcleo e núcleo produtor para o terceiro núcleo, e o terceiro núcleo pode ser referido como núcleo consumidor.
[0053] Nas GPUs existentes, a execução de núcleos à maneira de canalização pode ser ineficaz em termos computacionais e de potência. Por exemplo, cada uma das unidades de computação programáveis pode incluir uma memória local para armazenar instruções que serão executadas pela unidade de computação programável, para armazenar dados que serão processados e para armazenar dados que são produzidos, que incluem resultados intermediários que possam ser produzidos. Entretanto, a memória local da unidade de computação programável pode não ser acessível por quaisquer outras unidades de computação programáveis.
[0054] Por conseguinte, em alguns exemplos, para executar núcleo à maneira de canalização, a GPU 16 pode recuperar dados produzidos armazenados na memória local de uma unidade de computação programável e armazenar os dados produzidos na memória global 20. O armazenamento de dados na memória global 20 pode ser referido como armazenar dados de maneira não embutida uma vez que a memória global 20 é externa é externa ao circuito integrado que aloja a GPU 16 (isto é, externa ao IC 12). A GPU 16 pode recuperar então os dados armazenados na memória global 20 e carregar os dados recuperados na memória local de outra unidade de computação programável.
[0055] Como exemplo ilustrativo, suponha-se que uma primeira unidade de computação programável esteja executando fluxo de execução de um núcleo produtor. Neste exemplo, a primeira unidade de computação programável pode armazenar dados produzidos pela execução dos fluxos de execução do núcleo produtor na memória local da primeira unidade de computação programável. A GPU 16 pode recuperar os dados produzis da memória local da primeira unidade de computação programável e armazenar os dados produzidos na memória global 20.
[0056] Neste exemplo, suponha-se que uma segunda unidade de computação programável esteja executando fluxo de execução de um núcleo consumidos. Neste exemplo, a GPU 16 pode recuperar os dados produzidos pelo núcleo produtor da memória global 20 e carregar os dados na memória local da segunda unidade de computação programável. O núcleo consumidor pode então consumir os dados armazenados na memória local da segunda unidade programável.
[0057] No exemplo acima, a GPU 16 pode precisar armazenar os dados produzidos pelo núcleo produtor na memória global 20, uma vez que a segunda unidade de computação programável não tem acesso à memória local da primeira unidade de computação programável. Desta maneira, a memória global 20 funciona como um armazenamento intermediário de dados produzidos que serão consumidos em seguida.
[0058] Em geral, o gerenciamento da maneira pela qual os dados produzidos são armazenados e ou a maneira pela qual os dados serão recuperados da memória global 20 pode ser ineficaz em termos de processamento e computacionais. Como exemplo é possível, embora ineficaz, que os núcleo gerenciem a maneira pela qual os dados são armazenados na memória global 20. Por exemplo, os núcleos pode incluir instruções que fazem com que as unidades de lógica aritmética (ALUs) das unidades de computação programáveis determinem o endereço (indicadores, por exemplo) dentro da memória global 20 para onde os dados serão armazenados ou para onde os dados armazenados serão recuperados.
[0059] Como outro exemplo, a memória global 20 pode armazenar um contador atômico. O valor do contador atômico pode indicar se os dados estão disponíveis para consumo. Por exemplo, o núcleo produtor pode incluir instruções para ler o valor atual do contador atômico armazenado na memória global 20. O núcleo produtor pode incluir também instruções que modificam o valor do contador atômico com base na quantidade de dados que o núcleo produtor armazenou e instruções que gravam o valor modificado do contador atômico de volta na memória global 20.
[0060] O núcleo consumidor pode incluir instruções para verificar periodicamente o valor do contador atômico armazenado na memória global 20. Quando o valor do contador atômico é suficientemente grande, o núcleo consumidor pode determinar que os dados a serem consumidos estão disponíveis. Suponha-se, por exemplo, que o valor do contador atômico seja X e que o núcleo produtor produziu N quantidade de dados. Neste exemplo, o núcleo consumidor pode incluir instruções que fazem com que a unidade de computação programável, que está executando os fluxos de execução do núcleo consumidor, verifiquem periodicamente o valor do contador atômico. Quando a unidade de computação programável determina que o valor do contador atômico é X + N a unidade de computação programável pode solicitar à GPU que recupere os dados armados na memória global 20 para consumo.
[0061] Desta maneira, é possível, com o uso de um software (isto é, as instruções de núcleo), executar os núcleos à maneira de canalização. Entretanto, pode haver diversas razões pelas quais a execução dos núcleos à maneira de canalização com a utilização de instruções dentro do núcleo é ineficaz. Por exemplo, a inclusão de instruções nos núcleos para determinar os endereços onde armazenar dados ou onde os dados são armazenados na memória global 20 pode exigir que as ALUs das unidades de computação programáveis consumam energia desnecessariamente, assim como desperdicem ciclos de relógio processando instruções para determinar os endereços dentro da memória global 20.
[0062] Além disso, a verificação periódica do valor do contador atômico exige que a GPU 16 acesse informações não embutidas (isto é, na memória global 20). A leitura do valor do contador atômico da memória global 20 e a gravação do valor modificado do contador atômico na memória global 20 podem consumir uma quantidade indesejável de energia. Além disto, conforme mostrado, o IC 12 é acoplado à memória global 20 por meio do barramento de memória 24. Pode haver limitações de largura de bandas sobre a quantidade de dados que o barramento de memória 24 pode processar. Por conseguinte, pode haver retardo de quando a GPU 16 pode ler e gravar o valor do contador atômico.
[0063] Além do mais, uma vez que o tempo em que os dados estão disponíveis para consumo pelo núcleo consumidor é desconhecido, a unidade de computação programável, que executa o núcleo consumidor, pode fazer periodicamente com que a GPU 16 verifique o valor do contador atômico de modo a determinar se os dados estão disponíveis para consumo. A verificação periódica do valor do contador atômico pode fazer com que os fluxos de execução do núcleo consumidor permaneçam “girando”. Por exemplo, se o valor lido do contador atômico indicar que os dados ainda não estão completamente disponíveis para consumo, a unidade de computação programável pode provocar a execução dos fluxos de execução do núcleo consumidor, até que a unidade de computação programável verifique mais uma vez o valor do contador atômico. Se os dados ainda não estiverem disponíveis, a unidade de computação programável aguarda novamente e faz com que a GPU 16 verifique novamente se os dados estão disponíveis. Neste exemplo, os fluxo de execução do núcleo consumidor podem permanecer no estado ocupado / de espera durante o tempo em que os dados a serem consumidos não estão disponíveis na memória global 20. Em outras palavras, durante a rotação, a unidade de computação programável pode não estar desempenhando qualquer função, o que pode retardar o consumo dos dados.
[0064] Se a frequência à qual a unidade de computação programável determina se os dados estão disponíveis (pela leitura do valor do contador atômico, por exemplo) for elevada, então a GPU 16 pode desperdiçar energia com a leitura freqüente do valor do contador atômico armazenado na memória global 20. Se a frequência à qual a unidade de computação programável determina se os dados estão disponíveis for baixa, então pode haver tempo desperdiçado entre o momento em que os dados estão disponíveis e o momento em que a GPU 16 recupera os dados, o que retarda também o consumo dos dados.
[0065] Além disso, em algumas das técnicas acima nas quais a memória global 20 armazena o contador atômico, quando um núcleo está lendo, modificando e gravando o valor do contador atômico, nenhum outro núcleo é autorizado a ler, modificar ou gravar o valor do contador atômico. Em tais casos, quando dois fluxos de execução produtores precisam transmitir dados para armazenamento na memória global 20 ao mesmo tempo, um dos fluxos de execução será capaz de transmitir dados, mas o outro fluxo de execução pode não ser capaz de transmitir dados uma vez que este outro fluxo de execução pode não ser capaz de acessar o contador atômico. Em tais casos, o fluxo de execução, ao qual foi negado acesso de armazenamento, pode girar até que o acesso ao contador atômico esteja disponível e, quando o contador atômico estiver disponível para acesso, o fluxo de execução, ao qual foi negado acesso de armazenamento, pode transmitir os dados para a memória global 20. O mesmo pode ocorre quando dois fluxos de execução consumidores tentam acessar dados ao mesmo tempo.
[0066] As técnicas descritas nesta revelação, podem permitir a GPU 16 execute de maneira mais eficaz núcleos à maneira de canalização, em comparação com a técnicas descritas acima. Conforme descrito mais detalhadamente, a unidade de gerenciamento de canalização (PMU) 18 pode ser configurada para armazenar informações sobre estado dos dados que são produzidos por diversos fluxos de execução e dos dados que serão consumidos pelos diversos fluxos de execução. Desta maneira, a GPU 16 pode não precisar acessar continuamente informações, não embutidas, que indicam onde os dados estão armazenados e quando os dados estão disponíveis para consumo. Em vez disso, a PMU 18 pode armazenar tais informações internamente (isto é, dentro do IC 12).
[0067] Conforme mostrado, a memória global 20 pode incluir armazenadores 22A-22N (coletivamente referidos como armazenadores 22). Os armazenadores 22 podem ser locais de armazenamento dentro da memória global 20. Exemplos de armazenadores 22 incluem um armazenador primeiro fora primeiro dentro (FIFO) ou um armazenador anular.
[0068] O processador 14 pode ser configurado para definir o número de armazenadores que residem dentro da memória global 20 e reservar locais de armazenamento dentro da memória global 20. Por exemplo, o processador 14 pode definir locais iniciais e terminais dos armazenadores 22 (isto é, endereços iniciais e finais). O processador 14 pode definir o número de armazenadores que residem dentro da memória global 20 com base no número de unidades de computação programáveis que residem dentro do processador gráfico de operações específicas da GPU 16. Como exemplo, o processador 14 pode definir o número de armazenadores que residem dentro da memória global 20 de modo que haja um ou mais armazenadores de entrada 22 para cada unidade de computação programável (isto é, um ou mais armazenadores que armazenam dados a serem consumidos por núcleos executados nas unidades de computação programáveis) e zero ou mais armazenadores de saída 22 para cada unidade de computação programável (isto é, zero ou mais armazenadores que armazenam dados produzidos por núcleos executados nas unidades de computação programáveis da GPU 16).
[0069] Além disso, o processador 14 pode ser configurado para definir o tamanho dos armazenadores. Por exemplo, o processador 14 pode ser configurado para definir o número e locais de armazenamento dentro de cada um dos armazenadores 22 (o comprimento dos armazenadores 22, por exemplo). O processador 14 pode definir também a quantidade de dados em cada um dos locais de armazenamento (a largura dos armazenadores 22, por exemplo). Em alguns exemplos, o processador 14 pode pré-encher os armazenadores 22 com dados.
[0070] Em alguns exemplos, o processador 14 pode ser configurado para definir um número mínimo de armazenadores 22. Como exemplo, o processador 14 pode ser configurado para definir o mínimo de 128 armazenadores 22. O número mínimo de armazenadores 22, que é de 128, é apresentado para fins de exemplificação e não deve ser considerado limitador. O número mínimo de armazenadores 22 pode ser maior ou menor que 128. Em alguns exemplos, pode não haver um requisito de um número mínimo de armazenadores 22. O processador 14 pode ser também configurado para executar diversas instruções para determinar a condição dos armazenadores 22. Por exemplo, o processador 14 pode executar instruções para copiar dados armazenados nos armazenadores em armazenadores dentro do IC 12 ou da GPU 16 em instruções para copiar dados armazenados dentro de armazenadores dentro do IC ou da GPU 16 em armazenadores 22. O processador 14 pode também executar instruções que definem a quantidade de dados armazenados nos armazenadores 22, assim como instruções que confirmam o comprimento e largura dos armazenadores 22 (de modo a assegurar que os armazenadores 22 não tenham sido corrompidos, por exemplo). Tal execução de instruções que permitem que o processador 14 determine a condição dos armazenadores 22 não é necessária em cada exemplo, mas pode ajudar potencialmente o desenvolvedor dos núcleos a determinar a condição dos armazenadores 22 pela execução de instruções no processador 14, e não na GPU 16.
[0072] Em alguns exemplos, o processador 14 pode ser configurado para definir um fator de amplificação para os armazenadores 22. O fator de amplificação pode indicar o número máximo de elementos que podem ser produzidos por um fluxo de execução de um núcleo para armazenamento em um dos armazenadores 22. O fator de amplificação pode ser necessário para situações em que um dos armazenadores 22 que armazenarão dados não puder armazenar todos os dados produzidos. Isto pode resultar na paralisação da execução de um núcleo devido ao espaço de armazenamento insuficiente nos armazenadores 22 e pode levar a impasse (no caso de o núcleo jamais voltar ao estado de execução, por exemplo).
[0073] Para reduzir ao mínimo as possibilidades de tal impasse, o processador 14 pode reservar partes grandes da memória global 20, (como por exemplo, definir armazenadores 22 compridos e largos que sejam grandes o bastante para armazenar em sua maior parte qualquer tipo de dados). Isto pode funcionar bem em alguns casos, mas não tão bem em outros, nos quais a reserva de partes grandes da memória global 20 pode não ser possível. Em alguns casos, os desenvolvedores podem desenvolver núcleos de modo que os núcleos não produzam dados em demasia, reduzindo assim ao mínimo as possibilidades de impasse.
[0074] Embora o processador 14 seja descrito como definindo armazenadores 22, as técnicas descritas nesta revelação não são tão limitadas. Em alguns exemplos, uma unidade de processamento que não o processador 14 pode ser configurada para definir os armazenadores 22. Em alguns exemplos, é possível que a GPU 16 defina os armazenadores 22. Entretanto, para facilitar a descrição, as técnicas são descritas com relação à definição dos armazenadores 22 pelo processador 14.
[0075] O processador 14 pode transmitir as informações dos armazenadores 22 para a unidade de processamento de canalização (PMU) 18, por exemplo, a PMU 18 pode receber informações que indicam o número de armazenadores 22, os endereços iniciais e finais dos armazenadores 22, o comprimento e a largura dos armazenadores 22 e quaisquer outras informações que o processador 14 determinou para os armazenadores 22. A PMU 18 pode armazenar tais informações sobre estado dos armazenadores 22 dentro de registradores localizados dentro do IC 12. Com as informações dos armazenadores 22 do processador 14, a PMU 18 pode ser configurada para gerenciar as informações sobre estado dos armazenadores 22 como fluxo de execução de núcleos executados em unidades de computação programáveis que produzem e consomem dados.
[0076] Por exemplo, depois que uma unidade de computação programável, que executa fluxos de execução de um núcleo, produz dados e transmite os dados produzidos, a PMU 18 pode receber os dados e determinar o endereço onde os dados serão armazenados. Por exemplo, a PMU 18 pode determinar em qual dos armazenadores 22 armazenar os dados. Em exemplos nos quais os armazenadores 22 são armazenadores anulares ou armazenadores FIFO, a PMU 18 pode armazenar as informações para os indicadores que identificam o início e o fim dos armazenadores 22. Para armazenadores anulares, a PMU 18 pode armazenar também as informações para indicadores que identificam o início de dados válidos e o fim de dados válidos.
[0077] Por conseguinte, em vez de o núcleos incluírem instruções que fazem com que as unidades de computação programáveis determinem os endereços onde os dados produzidos serão armazenados e onde os dados serão recuperados para consumo, a PMU 18 pode ser configurada para determinar os endereços onde os dados produzidos e de onde os dados serão recuperados para consumo. Desta maneira, a GPU 16 pode não desperdiçar ciclos de relógio e as ALUs das unidades de computação programáveis podem não desperdiçar a potência de processamento que determina endereços onde os dados serão armazenados ou de onde os dados serão recuperados.
[0078] Além do mais, a PMU 18 pode ser configurada para determinar quando os dados que serão consumidos estão prontos para consumo. Por exemplo, em vez de a memória global 20 armazenar um contador atômico, a PMU 18 pode armazenar o contador atômico localmente dentro do IC 12 (dentro de registradores em uma memória cache local dentro do IC 12, por exemplo). Como exemplo, quando uma unidade de computação programável, que executa um fluxo de execução produtor, transmite dados, a PMU 18 pode ler o valor do contador atômico armazenado internamente, modificar o valor do contador atômico com base na quantidade de dados produzidos e gravar o valor modificado do contador atômico dentro do IC 12. Neste exemplo, quando a unidade de computação programável, que executa o fluxo de execução consumidor, lê o valor do contador atômico, a GPU 16 pode não precisar determinar o valor do contador atômico acessando a memória global 20 não embutida. Em vez disso, a PMU 18 pode fornecer o valor do contador atômico.
[0079] Em alguns exemplos, a PMU 18 que armazena o valor do contador atômico localmente pode reduzir o giro. Por exemplo, uma unidade de computação programável, que executa um fluxo de execução consumidor, pode transmitir uma solicitação de dados que serão consumidos pelo fluxo de execução consumidor. Neste exemplo, a PMU 18 pode determinar se os dados que serão consumidos estão disponíveis (com base no valor do contador atômico armazenado localmente, por exemplo).
[0080] Se a PMU 18 determinar que os dados ainda não estão disponíveis para consumo, a PMU 18 pode indicar à unidade de computação programável que a unidade de computação programável deve comutar para um fluxo de execução diferente (do mesmo núcleo ou possivelmente de um núcleo diferente, por exemplo) que não conte com os dados ainda não disponíveis. Em outras palavras, a PMU 18 pode indicar que o fluxo de execução consumidor que necessita dos dados ainda não disponíveis deve ser colocada em espera de modo que a unidade de computação programável possa continuar executando outros fluxos de execução, em seguida, quando os dados estiverem disponíveis conforme determinado pela PMU 18 com base no valor armazenado localmente do contador atômico, a PMU 18 pode instruir a unidade de computação programável a comutar de volta para o fluxo de execução em espera (isto é, despertar o fluxo de execução) de modo que a unidade de computação programável possa executar o fluxo de execução consumidor utilizando os dados agora disponíveis. Desta maneira, quando os dados ainda não estiverem disponíveis para consumo, a unidade de computação programável, que executa os fluxos de execução consumidores é capaz de executar outros fluxos de execução do núcleo em vez de permanecer no estado ocupado / de espera.
[0081] Como outro exemplo, quando dois fluxos de execução produtores de uma mesmo núcleo executado em unidades de computação programáveis diferentes tentam gravar dados ao mesmo tempo no mesmo armazenador 22, a PMU 18 pode permitir acesso a um dos fluxos de execução produtores e negar acesso ao outro fluxo de execução produtor. Neste exemplo, a PMU 18 pode instruir a unidade de computação programável, que executa o fluxo de execução ao qual foi negado acesso, a executar outros fluxos de execução do núcleo. Quando o acesso de gravação aos armazenadores 22 se torna disponível, conforme determinado pela PMU 18, a PMU 18 pode indicar à unidade de computação programável que estava executando o fluxo ao qual foi negado acesso que o acesso de gravação aos armazenadores 22 está agora disponível. Desta maneira, a unidade de computação programável que executa o fluxo de execução ao qual foi negado acesso é capaz de executar fluxos de execução adicionais.
[0082] Da mesma maneira, quando dois fluxos de execução consumidores tentam ler dados ao mesmo tempo do mesmo armazenador 22, a PMU 18 pode permitir acesso a um dos fluxos de execução consumidores e negar acesso ao outro fluxo de execução consumidor. Semelhante ao exemplo no qual dois fluxos de execução gravam ao mesmo tempo, neste exemplo onde dois fluxos de execução lêem ao mesmo tempo, a PMU 18 pode instruir a unidade de computação programável que executa o fluxo de execução ao qual foi negado acesso, a executar outro fluxos de execução. Quando o acesso de leitura aos armazenadores 22 se torna disponível, conforme determinado pela PMU 18, a PMU 18 pode indicar à unidade de computação programável que estava executando o fluxo de transmissão ao qual foi negado acesso que o acesso de leitura aos armazenadores 22 está agora disponível. Desta maneira, a unidade de computação programável, que executa o fluxo de execução ao qual foi negado acesso, é capaz de executar fluxos de execução adicionais.
[0083] Desta maneira, o processador 14 que define os armazenadores 22 na memória global 20 e a PMU 18 que gerencia o estado dos armazenadores 22 na memória global 20 podem permitir a execução eficaz de núcleos à maneira de canalização pela GPU 16. Como exemplo, a PMU 18 pode reduzir ao mínimo o número de acessos não embutido necessários para executar núcleos à maneira de canalização. Como outro exemplo, uma vez que a PMU 18 pode determinar endereços de onde os dados devem ser armazenados ou de onde os dados devem ser recuperados, a GPU 16 pode não desperdiçar energia e ciclos de relógio determinando tais endereços pela execução de instruções dentro dos núcleos para determinar tais endereços. Em outras palavras, a PMU 18 pode determinar os endereços onde os dados serão armazenados ou de onde serão recuperados sem que os fluxos de execução incluam instruções para determinar onde os dados serão armazenados e de onde serão recuperados. Além disso, a PMU 18 pode permitir que unidades de computação programáveis executem fluxos de execução de núcleos sem girar, por exemplo, quando os dados de um núcleo produtor ainda não estão disponíveis a PMU 18 pode permitir que outros fluxos de execução de um núcleo consumidor (fluxos de execução que não exigem dados do núcleo produtor, por exemplo) sejam executados.
[0084] A Figura 2 é um diagrama de blocos que mostra uma unidade de processamento de gráficos (GPU) e uma memória global mais detalhadamente. Por exemplo, a Figura 2 mostra a GPU 16 e a memória global 20 da Figura 1 mais detalhadamente. Conforme mostrado a GOPU 16 inclui um processador gráfico de operações específicas 26, uma unidade de função fixa 30, uma unidade de gerenciamento de canalização (PMU 18, um cache 34, um programador 40, registradores 44. Em alguns exemplos, os registradores 44 podem ser parte do cache 34. No exemplo mostrado na Figura 2 a PMU 18 é mostrada como sendo formada dentro da GPU 16. Conforme descrito acima, contudo, a PMU 18 pode ser formada fora da GPU 16 e no mesmo circuito integrado da GPU 16.
[0085] O processador gráfico de operações específicas 26 pode incluir unidades de computação programáveis 28A-28N (comumente referidas como unidades de computação programáveis 28), que podem ser consideradas como núcleos de sombreamento. As unidades de função fixa 30 inclui unidades de computação de função fixa 32A-32N (comumente referidas como unidades de computação de função fixa 32). O processador gráfico de operações específicas 26 e a unidades de função fixa 30 podem incluir uma ou mais das unidades de computação programáveis 28 e das unidades de função fixa 32 (em um número maior ou menor que as mostradas, por exemplo).
[0086] As unidades de computação programáveis 28 podem funcionar conforme o descrito acima. Por exemplo, as unidades de computação programáveis 28 podem executar aplicativos tanto de gráficos quanto não relacionados com gráficos (sombreadores e núcleos, processador). Por exemplo, as unidades de computação programáveis 28 podem executar núcleos que são gravados em linguagem do aparelho (como por exemplo, linguagem Opencl). Conforme descrito acima, uma das unidades de computação programáveis 28 pode incluir memória local par armazenar resultados intermediário e para compartilhas entre fluxos de execução de um núcleo executado nessa unidade de computação programável 28. A memória local de cada uma das unidades de computação programáveis 28 pode não ser acessível por outras unidades de computação programáveis 28. Em alguns exemplos é possível que uma das unidades de computação programáveis programe o tempo em que outra das unidades de computação programáveis 28 executará fluxos de execução de um núcleo.
[0087] Em algumas ocorrências, uma das unidades de computação programáveis pode transmitir dados para uma ou mais outras unidades de computação programáveis 28. Por exemplo, para executar núcleos à maneira de canalização, uma primeira das unidades de computação programáveis 28, que executa um fluxo de execução produtor, pode transmitir dados (dados não relacionados com gráficos, por exemplo) para uma segunda das unidades de computação programáveis 28. Conforme descrito acima, a transmissão de uma das unidades de computação programáveis 28 (a unidade de computação programável que executa o fluxo de execução produtor, por exemplo) pode armazenar dados em um armazenador, tal como um dos armazenadores 22 da memória global 20, e a recepção de uma das unidades de computação programáveis 28 (a unidade de computação programável que executa o fluxo de execução consumidor, por exemplo) pode recuperar os dados de um dos armazenadores 20 da memória global 20.
[0088] Conforme mostrado na Figura 2, em alguns exemplos a GPU 16 pode incluir um cache interno 34. Entretanto o cache 34 pode ser interno ao IC em vez de estar limitado de ser interno à GPU 16. Em alguns exemplos, em vez de armazenar dados produzidos de maneira não embutida (na memória global 20, por exemplo), é possível que a GPU 16 armazene dados internos à GPU 16 ou ao IC 12 também. Por exemplo, a transmissão de uma das unidades de computação programáveis 28 pode armazenar os dados em um ou mais dos armazenadores 36A-36N (coletivamente referidos como armazenadores 36) no cache 34, que fica dentro da GPU 16 no exemplo da Figura 2, mas pode ficar dentro do IC 12 e fora da GPU 16. A recepção de uma das unidades de computação programáveis 28 pode recuperar os dados dos armazenadores 36 no cache 34. Os armazenadores dentro do cache 34 podem ser armazenadores com reserva de cache dos armazenadores 22 na memória global 20. Em outras palavras, os armazenadores 22 da memória global 20 podem armazenar os dados completos produzidos por um fluxo de execução produtor que serão consumidos por um fluxo de execução consumidor, e aos armazenadores 36 podem funcionar como um cache que armazena alguns dos dados produzidos para rápido acesso em comparação com ao acesso a dados da memória global 20.
[0089] Os armazenadores 36 dentro do cache 34 podem ser semelhantes aos armazenadores 22. Por exemplo, os armazenadores 36 podem ser armazenadores FIFO ou armazenadores anulares. É desejável que o cache 34 inclua armazenadores 33 para evitar latência de memória e consumo de energia associados ao aceso à memória não embutida (os armazenadores 22 da memória global 20, por exemplo). Entretanto, a utilização apenas de armazenadores 36 pode não ser prática devido ao espaço disponível limitado para o armazenamento. Neste exemplo, é possível armazenar alguns dos dados dentro dos armazenadores 36 e permitir o derramamento nos armazenadores 22.
[0090] Os armazenadores 36 e os armazenadores 22 podem permitir que a GPU 16 execute núcleos à maneira de canalização. Por exemplo, os armazenadores 36 e os armazenadores 22 podem ser considerados como estruturas de dados que proporcionam comunicação entre as unidades de computação programáveis 28. Os armazenadores 36 e os armazenadores 22 podem ser configurados para armazenar mais dados que a quantidade mínima de dados que os núcleos executados nas unidades de computação programáveis podem transmitir (mais de uma unidade de dados, por exemplo). Desta maneira, os fluxos de execução de um núcleo, executado em uma das unidades de computação programáveis 28 são capazes de produzir uma quantidade variável de dados que são armazenados nos armazenadores 36 e nos armazenadores 22 e que podem ser passados para fluxos de execução de outro núcleo, executado em outra das unidades de computação programáveis 28, para consumo.
[0091] As unidades de computação de função fixa 32 podem prover funcionalidade fixa e podem ser formadas como unidades de hardware (como um exemplo não limitador). As unidades de computação de função fixa 32 podem ser consideradas como executoras de núcleos embutidos específicos que são gravados utilizando-se linguagem de aparelho. Por exemplo, ao passo que as unidades de computação programáveis podem prover flexibilidade funcional, as unidades de computação de função fixa 32 podem ser limitadas em sua respectiva flexibilidade funcional. Por exemplo, as unidades de computação de função fixa 32 podem incluir unidades de rastreamento, unidades de montagem primitiva, unidades de transformação de porta de visão e outras unidades que tais que provêem funcionalidade de gráficos específica.
[0092] Em algumas ocorrências, as unidades de computação de função fixa 32 podem ser cabeadas para desempenhar suas respectivas funções específicas. Além disto, é possível que as unidades de computação de função fixa programem quando outra das unidades de computação de função fixa 32 será executada. Além do mais, em alguns casos, se a GPU 16 não incluir uma unidade específica das unidades de computação de função fixa 32, é possível desenvolver um núcleo que execute a função da unidade de computação de função fixa indisponível. Em outras palavras, o núcleo pode emular o comportamento de função fixa da unidade de computação de função fixa indisponível. Por exemplo, se um marchetador de função fixa não estiver disponível, o desenvolvedor pode desenvolver um núcleo de marchetaria que emule o comportamento de função fixa do marchetador e execute o núcleo em uma ou mais das unidades de computação programáveis 28.
[0093] Em alguns exemplos, a GPU 16 pode incluir um programador 40. O programador 40 pode incluir fluxos de execução e operação às diversas unidades de computação programáveis 28 e unidades de função fixa 32. Por exemplo, o programador 40 pode equilibrar a carga das tarefas executadas pelas unidades de computação programáveis 28 de modo que nenhuma das unidades de computação programáveis 28 seja utilizada em excesso enquanto outras são subutilizadas. O programador 40 pode ser implementado como um hardware ou um software executado no hardware.
[0094] Na Figura 2 a memória global 20 pode incluir um armazenador 42A-42N (coletivamente referidos como armazenadores 42) e o cache 34 pode incluir armazenadores 38A-38N (coletivamente referidos como armazenadores 38). Os armazenadores 38 podem não estar necessariamente em cada exemplo, e podem formar um cache embutido opcional para prover armazenamento com reserva de cache para os comandos armazenados nos armazenadores 42. Os armazenadores 42 e os armazenadores 38 podem ser considerados como filas de comandos. Pode haver uma fila de comandos (um dos armazenadores 42 e dos armazenadores 38, por exemplo) para todas as unidades de computação programáveis 28 e uma fila para cada tipo de unidade de computação de função fixa 32. Os armazenadores 42 e os armazenadores 38 podem armazenar zero ou mais entradas.
[0095] Os armazenadores 42 e os armazenadores embutidos 38 opcionais podem ajudar com a organização da programação de carga operacional para as unidades de computação programáveis 28 e para as unidades de computação de função fixa 32. Por exemplo, os armazenadores 42 podem armazenar os comandos que instruem as unidades de computação programáveis 28 e as unidades de computação de função fixa 32 a executar diversas tarefas. Por exemplo, cada entrada nos armazenadores 42 pode armazenar informações para fazer com que uma ou mais unidades de computação programáveis 28 disponíveis executem os fluxos de execução dos núcleos, assim como armazenar informações para valores de argumento de núcleo e informações de dependência. Em alguns exemplos, pode ser necessário satisfazer as dependências entre os fluxos de execução de um núcleo antes que uma ou mais unidades de computação programáveis 28 executem o núcleo.
[0096] Os armazenadores 22 podem ser acessíveis tanto pelo processador 14 (Figura 1) quanto pela GPU 16. Como exemplo, o processador 14 pode acessar os armazenadores 22 utilizando chamadas de acordo com as diversas APIs descritas acima. A GPU 16 pode acessar os armazenadores 22 com base nos núcleos executados nas unidades de computação programáveis 28. Por exemplo, os núcleos podem ser desenvolvidos como funções para armazenar os dados produzidos na memória global 20.
[0097] Conforme mostrado, a GPU 16 pode incluir também uma unidade de gerenciamento de canalização (PMU) 18. Conforme descrito acima, a PMU 18 pode gerenciar o estado dos armazenadores 22 dentro da memória global 20. Além disto, a PMU 18 pode gerenciar o estado dos armazenadores 36 dentro do cache 34.
[0098] Por exemplo, a PMU 18 pode gerenciar o estado dos armazenadores 22 e dos armazenadores 36 armazenando o comprimento e a largura dos armazenadores 22 e dos armazenadores 36, inclusive o número de armazenadores 22 e de armazenadores 36 que estão disponíveis para armazenar dados produzidos. Como exemplo, a PMU 18 pode alocar os armazenadores 22 à frente dos núcleos executados nas unidades de computação programáveis 28 e pode desalocar os armazenadores 22 ao fim da execução dos núcleos.
[0099] Como outro exemplo, a PMU 18 pode armazenar informações para o indicador de cabeçalho, deslocamento atual, profundidade máxima e semelhantes nos registradores embutidos 44. Em alguns exemplos, a PMU 18 pode armazenar informações sobre estado dos armazenadores 22 e armazenadores 36 de maneira semelhante à maneira pela qual os parâmetros de textura são armazenados no processamento de gráficos.
[0100] Os armazenadores 22 podem exigir gerenciamento no sentido de determinar os armazenadores 22 para armazenar dados em, ou recuperar dados de determinar locais de armazenamento de onde armazenar os dados nos armazenadores ou de onde recuperar os dados (determinar endereços, por exemplo) e assegurar que unidades de computação programáveis 28 diferentes não tentem acessar informações dos armazenadores que provoquem corrupção de dados. A PMU 18 pode ser encarregada de tal gerenciamento. Por exemplo, com a GPU 16 incluindo a PMU 18 ou o IC que inclui a GPU 16 incluindo a PMU 18, o gerenciamento dos armazenadores 22 pode ser localizado dentro do IC que inclui a GPU 16 e não fora do IC. Isto pode resultar em consumo de energia reduzida assim como na execução eficaz de núcleos executados nas unidades de computação programáveis 28.
[0101] Como exemplo, a PMU 18 pode armazenar um contador atômico dentro dos registradores 44. Os registradores 44 podem ser parte do cache 34 ou parte de alguma outra memória dentro da GPU 16 ou do IC 12. O contador atômico pode indicar ser o acesso a uma das unidades de computação programáveis 28 está disponível (como, por exemplo, se há disponibilidade de dados para leitura ou se dois ou mais núcleos estão tentado gravar ou ler ao mesmo tempo dos mesmos armazenadores 22). Com base no contador atômico, a PMU 18 é capaz de permitir apropriadamente acesso a uma das unidade de computação programável 28 ao mesmo tempo negando acesso a outras das unidades de computação programáveis 28 de modo a evitar a corrupção de dados dos armazenadores 22, que pode ocorrer se dois fluxos de execução tentarem gravar dados ao mesmo tempo. Em algumas ocorrências, quando a PMU 18 nega acesso a uma das unidades de computação programáveis 28, a PMU 18 pode permitir que a tarefa que solicita o acesso (um fluxo de execução, por exemplo) vá para o estado de espera e permitir que a unidade negada das unidades de computação programáveis 28 continue executando outras tarefas (fluxos de execução, por exemplo). Quando o acesso a unidade de computação programável 28 negada se torna disponível, a PMU 18 pode despertar essa tarefa e fornecer os dados a essa tarefa para execução adicional. Desta maneira, as unidades de computação programáveis 28 podem não ficar completamente ociosas, e outras tarefas das unidades de computação programáveis 28 podem ser executadas.
[0102] Em alguns exemplos, quando é necessário recuperar dados de um armazenador 22 da memória global 20, a PMU 18 é capaz de recuperar dados adicionais além dos dados necessários. Por exemplo, a PMU 18 pode determinar a localização inicial e final dos dados solicitados. Entretanto, a PMU 18 pode recuperar dados adicionais que estão armazenados nos armazenadores 22 depois que a localização depois de se determinar a localização final dos dados solicitados. A PMU 18 pode recuperar tais dados adicionais quando a PMU 18 determinar que o espaço de armazenamento está disponível nos armazenadores 36. Conforme descrito acima, a PMU 18 pode gerenciar tanto armazenadores 22 na memória global 20 quanto os armazenadores 36 dentro do cache 34. A PMU 18 pode armazenar então os dados recuperados no cache 34. Desta maneira, os dados adicionais já estão disponíveis dentro da GPU 16 quando tais dados forem necessários. O armazenamento de dados adicionais (como, por exemplo, dados além dos dados solicitados) nos armazenadores 36 pode reduzir também o número de vezes em que a GPU 16 tem que acessar dados não embutidos (da memória global 20, por exemplo).
[0103] Para acessar dados as unidades de computação programáveis 28 podem utilizar indicadores para acessar os armazenadores (os núcleos podem ser desenvolvidos para acessar dados utilizando indicadores, por exemplo). Em alguns exemplos, a PMU 18 pode manter informações de indicação de modo que as unidades de computação programáveis 28 sejam capazes de acessar apropriadamente os dados. Por exemplo, as unidades de computação programáveis 28 podem transmitir instruções especializadas que solicitam informações sobre os armazenadores 22 à PMU 18. tais instruções podem incluir informações para o número de elementos dentro dos armazenadores, quantos dados são armazenados dentro do armazenador (largura do armazenador, por exemplo), onde as informações são armazenadas e outras informações que tais. Desta maneira, o ato de assegurar que as unidades de computação programáveis 28 acessem apropriadamente os armazenadores 22 pode ser executado internamente ao IC que aloja a GPU 16, o que reduz possivelmente o acesso externo ao IC que aloja a GPU 16.
[0104] Como exemplo, de modo a assegurar que os dados não se tornem corrompidos ou perdidos, um núcleo produtor pode ser desenvolvido de modo a incluir instruções para consultar a faixa de armazenadores 22 (pontos iniciais e finais, por exemplo). Neste exemplo, a unidade de computação programável das unidades de computação programáveis 28 que está executando o núcleo produtor pode transmitir a consulta da faixa de armazenadores 22 para a PMU 18. A PMU 18 pode ter armazenado as informações da faixa de armazenadores 22 no registradores 44 (pelo recebimento de tais informações do processador 14 quando o processador 14 definiu os armazenadores 22, por exemplo). A PMU 18 pode devolver o resultado da faixa de armazenadores 22 ao núcleo produtor.
[0105] Como outro exemplo, para executar núcleos à maneira de canalização, em alguns exemplos pode ser necessário manter a ordem dos dados na canalização. Suponha-se, por exemplo, que o primeiro núcleo vai produzir dados que serão consumidos por um segundo núcleo. Neste caso, contudo, é possível que o terceiro núcleo esteja também sendo executado durante o mesmo tempo que os primeiro e segundo núcleos estão sendo executados. Neste caso, é possível que os dados produzidos pelo primeiro núcleo e os dados produzidos pelo terceiro núcleo sejam reordenados, o que resulta possivelmente no consumo dos dados incorretos pelo segundo núcleo.
[0106] Para assegurar ordenamento apropriado em alguns exemplos, além do contador atômico que indica se os armazenadores 22 estão disponíveis para acesso, a PMU 18 pode armazenar contadores atômicos adicionais nos registradores 44. Estes contadores atômicos adicionais podem ser referidos como contadores atômicos de aparelho. Por exemplo, pode haver um contador atômico de aparelho associado a cada um dos armazenadores 22. Além disto, a PMU 18 ou programador 40 pode ser configurado para atribuir um token a cada fluxo de execução de cada núcleo que define a posição relativa de onde os dados produzidos por esse fluxo de execução serão armazenados nos armazenadores 22. Este token para um fluxo de execução pode ser um valor atual do contador atômico de dispositivo.
[0107] Por exemplo, a PMU 18 pode atribuir um primeiro fluxo de execução consumidor que vai consumir os dados primeiro com um valor de token de 0, atribuir um segundo fluxo de execução consumidor que vai consumir os dados em segundo lugar com o valor de token de 1, e assim por diante. Cada um destes fluxos de execução consumidores pode solicitar o valor do contador atômico de aparelho da PMU 18. Se o valor atual do contador atômico de aparelho for igual ao valor de token do fluxo de execução consumidor, então o fluxo de execução consumidor pode consumir os dados. Caso contrário, o fluxo de execução consumidor não pode consumir os dados.
[0108] Depois que o fluxo de execução consumidor, cujo valor de token é igual ao valor do contador atômico de aparelho, consome os dados a PMU 18 pode atualizar o valor do contador atômico de aparelho. Em alguns exemplos, a quantidade de dados que o fluxo de execução consumidor vais consumir pode ser fixa, e a PMU 18 pode atualizar o valor do contador atômico de aparelho depois que a quantidade fixa de dados é recuperada dos armazenadores 22. Em alguns exemplos, contudo, a quantidade de dados que o fluxo de execução consumidor vai consumir pode não ser fixa. Nestes exemplos, depois que o fluxo de execução consumidor acaba de receber os dados, o fluxo de execução consumidor pode indicar à PMU 18 que a PMU 18 deve aumentar o valor do contador atômico de aparelho de modo que o fluxo de execução consumidor seguinte possa consumir os dados. Desta maneira, o contador atômico de aparelho, cujo valor a PMU 18 pode armazenar no registradores 44 e atualizar pode assegurar que a ordem na qual os dados serão consumidos seja preservada, e que fluxos de execução consumidores que não devem receber os dados fora da ordem não recebam dados fora da vez.
[0109] Como outro exemplo, a PMU 18 pode armazenar informações nos registradores 44 de modo a reduzir o número de possibilidades de impasse. Por exemplo, conforme descrito acima, o processador 14 pode ser configurado para definir um fator de amplificação para os armazenadores 22 que indica o número máximo de elementos que podem ser produzidos por um fluxo de execução de um núcleo para armazenamento em um dos armazenadores 22. Se o núcleo produz mais dados que o definido pelo fator de amplificação então, o núcleo pode ficar em impasse (parar de executar, por exemplo). O processador 14 pode fornecer o valor do fator de amplificação à PMU 18, e a PMU 18 pode armazenar o valor do fator de amplificação dentro dos registradores 44.
[0110] Em alguns exemplos, de modo a reduzir ao mínimo as possibilidades de impasse, o desenvolvedor pode incluir instruções no núcleo que solicitam o valor do fator de amplificação. A unidade de computação programável 28 que executa o núcleo pode transmitir a solicitação do valor do fator de amplificação para a PMU 18. Por sua vez, a PMU 18 pode indicar o valor do fator de amplificação à unidade de computação programável 28 que executa o núcleo. Se a unidade de computação programável 28 determinar que a quantidade de dados produzidos pelos fluxos de execução do núcleo será maior que o fator de amplificação, a unidade de computação programável 28 pode interromper a execução do núcleo uma vez que a quantidade de dados produzidos iguale o fator de amplificação e pode programar a execução dos fluxos de execução restantes do núcleo uma vez que os dados já produzidos sejam consumidos.
[0111] Além ou em vez das técnicas acima para reduzir ao mínimo o impasse, a PMU 18 pode implementar uma programação adiantada na qual a PMU 18 pode armazenar dados nos armazenadores 22 até que os dados produzidos igualem o fator de amplificação. A PMU 18 pode armazenar então os dados restantes nos armazenadores 36. Em outras palavras, a PMU 18 pode assegurar que as solicitações para armazenar dados no armazenador 22 estejam dentro da faixa “segura” e que qualquer solicitação para armazenar dados no armazenador 22 seja em vez disso armazenada no armazenador 36.
[0112] A Figura 3 é um fluxograma que mostra uma técnica exemplar de acordo com um ou mais exemplos descritos nesta revelação. Conforme mostrado na Figura 3, uma das unidades de computação programáveis pode executar um ou mais fluxos de execução de um núcleo no processador gráfico de operações específicas 26 da GPU 16 (46). A PMU 18, que está dentro do IC 12 ou dentro da GPU 16 pode receber da unidade de computação programável 28 uma solicitação para armazenar dados na ou recuperar dados da memória global 20, que é externa ao IC 12 para o fluxo ou fluxos de execução do núcleo (48).
[0113] A PMU 18 pode determinar se o acesso é permissível para a unidade de computação programável 28 que solicitou o armazenamento ou recuperação dos dados (50). Se o acesso não for permissível (NÃO de 50), a unidade de computação programável 28 pode executar fluxos de execução adicionais do núcleo (52). Neste exemplo, a PMU 18 pode indicar à unidade de computação programável quando o acesso está disponível.
[0114] Se o acesso estiver disponível (SIM de 50), a unidade de computação programável 28 pode determinar um local dentro de um armazenador (um doa armazenadores 22, por exemplo) na memória global 20, onde os dados serão armazenados ou de onde serão recuperados (52). Por exemplo, a PMU 18 pode determinar o local (isto é, endereço) dentro da memória global 20 onde os dados serão armazenados ou de onde os dados serão recuperados (54). Com base no local determinado, a GPU 16 pode então armazenar os dados no ou recuperar os dados do local determinado dentro de um dos armazenadores 22 dentro da memória global 20 (56).
[0115] Em alguns exemplos, de modo a determinar o local dentro do armazenador 22, a PMU 18 pode determinar o local sem que o fluxo ou fluxos de execução do núcleo indiquem o local onde os dados serão armazenados ou de onde serão recuperados na memória global 20. Desta maneira, não é necessário que os núcleos incluam instruções para determinar o local dentro da memória global 20 onde armazenar os dados ou de onde os dados serão recuperados.
[0116] Em alguns exemplos, a PMU 18 pode recuperar dados além dos dados solicitados. Neste exemplo, a PMU 18 pode armazenar dados adicionais no cache 34. Em alguns exemplos, a PMU 18 pode receber informações sobre estado dos armazenadores 22 do processador 14. Nestes exemplos, a PMU 18 pode determinar o local dentro do armazenador 22 onde os dados serão armazenados ou de onde serão recuperados com base nas informações sobre estado recebidas.
[0117] A Figura 4 é um fluxograma que mostra outra técnica exemplar de acordo com um ou mais exemplos descritos nesta revelação. Conforme mostrado, uma primeira unidade de computação programável (uma das unidades de computação programáveis 28, por exemplo) do processador gráfico de operações específicas 26 da GPU 16 pode executar o primeiro fluxo de execução (58). Uma segunda unidade de computação programável (outra das unidades de computação programáveis 28, por exemplo) do processador gráfico de operações específicas 26 da GPU 16 pode executar um segundo fluxo de execução diferente (60).
[0118] A PMU 18, que está dentro do IC 12 que inclui a GPU 16 pode receber da primeira unidade de computação programável uma solicitação para armazenar os dados produzidos pela execução do primeiro fluxo de execução em um armazenador (um dos armazenadores 22, por exemplo) na memória global 20, que é externa ao IC 12 (62). Neste exemplo, os dados produzidos pela execução do primeiro fluxo de execução (um fluxo de execução produtor, por exemplo) serão consumidos pela segunda unidade de computação programável que executa o segundo fluxo de execução (um fluxo de execução consumidor, por exemplo). Além disto, o armazenador pode ser um de um armazenador primeiro dentro primeiro fora (FIFO) e um armazenador anular onde um armazenador anular é um exemplo de um armazenador FIFO.
[0119] A PMU 18 pode determinar um local dentro do armazenador onde os dados produzidos pela execução do primeiro fluxo de execução serão armazenados (64). O IC 12 pode armazenar dados produzidos pela execução do primeiro fluxo de execução no local determinado dentro do armazenador (66). Deve ficar entendido que o IC 12 que armazena os dados produzidos pela execução do primeiro fluxo de execução no local determinado dentro armazenador inclui o IC 12 que armazena os dados, a GPU 16 que armazena os dados e ou a PMU 18 que armazena os dados. Em outras palavras, o IC 12 que armazena os dados significa o IC 12 ou qualquer componente do IC 12 que armazena os dados.
[0120] Em alguns exemplos, a PMU 18 pode armazenar informações sobre estado sobre armazenadores 22 dentro do IC 12 (dentro dos registradores 44, por exemplo). A PMU 18 pode receber tais informações sobre estado dos armazenadores 22 do processador 14. As informações sobre estado dos armazenadores 22 podem incluir um ou mais de um endereço inicial dos armazenadores 22, um endereço final dos armazenadores 22, um endereço dentro dos armazenadores 22 onde os dados produzidos serão armazenados e um endereço dentro dos armazenadores onde os dados serão recuperados. Nestes exemplos, a PMU 18 pode determinar o local dentro do armazenador onde os dados produzidos pela execução do primeiro fluxo de execução serão armazenados com base nas informações sobre estado armazenadas dos armazenadores 22. Além do mais, em alguns exemplos a PMU 18 pode determinar o local dentro do armazenador onde os dados produzidos pela execução do primeiro fluxo de execução serão armazenados sem que o primeiro fluxo de execução indique o local onde os dados serão armazenados no armazenador.
[0121] A PMU 18 pode receber também da segunda unidade de computação programável que executa o segundo fluxo de execução uma solicitação para recuperar pelo menos alguns dos dados produzidos pela execução do primeiro fluxo de execução. A PMU 18 pode determinar se os dados que são produzidos pela execução pelo primeiro fluxo de execução estão disponíveis para recuperação para consumo pela segunda unidade de computação programável que executa o segundo fluxo de execução. Em alguns exemplos, a PMU 18 pode receber a solicitação da segunda unidade de computação programável ao mesmo tempo, antes ou depois de receber a solicitação da primeira unidade de computação programável para armazenar os dados produzidos pela execução do primeiro fluxo de execução.
[0122] Quando os dados solicitados pelo segundo fluxo de execução não estiverem disponíveis para recuperação para consumo pela segunda unidade de computação programável que executa o segundo fluxo de execução, a PMU 18 pode indicar à segunda unidade de computação programável que execute um terceiro fluxo de execução. A PMU 18 pode indicar também à segunda unidade de computação programável quando os dados solicitados pelo segundo fluxo de execução estão disponíveis para recuperação para consumo pela segunda unidade de computação programável que executa o segundo fluxo de execução. A PMU 18 pode indicar à segunda unidade de computação programável que execute o segundo fluxo de execução de modo a consumir os dados solicitados pelo segundo fluxo de execução quando os dados solicitados pelo segundo fluxo de execução estiverem disponíveis para recuperação para consumo pela segunda unidade de computação programável que executa o segundo fluxo de execução.
[0123] Em alguns casos, o primeiro fluxo de execução pode ser um fluxo de execução produtor de um núcleo e o segundo fluxo de execução pode ser um fluxo de execução consumidor do mesmo núcleo. Em alguns casos, o primeiro fluxo de execução pode ser um fluxo de execução de um núcleo produtor, e o segundo fluxo de execução pode ser um fluxo de execução de um núcleo consumidor.
[0124] A Figura 5 é um diagrama de blocos que mostra um aparelho da Figura 1 mais detalhadamente. Por exemplo, a Figura 5 mostra também um aparelho 10. Exemplos de aparelho 10 incluem mais não se limitam a aparelhos sem fio, telefones móveis, assistentes digitais pessoais (PDAs), consoles para jogos de vídeo que incluem monitores de vídeo, unidades de vídeo conferência móveis, computadores laptop, computadores de mesa, conversores set-top box de televisão, aparelho de computação tablet, leitoras de e books e semelhantes. O aparelho 10 pode incluir o processador 14, a GPU 16, a memória global 20, o monitor 68, a interface com usuário 70 e o módulo de transceptor 72. No exemplo mostrado, a PMU 18 é formada dentro da GPU 16. Em alguns exemplos, a PMU 18 pode ser formada dentro do mesmo IC que aloja a GPU 16 (isto é, o IC 12). Também conforme mostrado, a GPU 16 reside dentro do IC 12. Entretanto o processador 14 pode residir também dentro do IC 12.
[0125] O aparelho 10 pode incluir módulos ou unidades adicionais não mostradas na Figura 4 para maior clareza. Por exemplo, o aparelho 10 pode incluir um alto-falante e um microfone, nenhum dos quais é mostrado na Figura 4, para efetuar comunicações telefônicas em exemplo nos quais o aparelho 10 é um telefone sem fio móvel. Além disto, os diversos módulos e unidades mostrados no aparelho 10 podem não ser necessários em cada exemplo do aparelho 10. Por exemplo, a interface com o usuário 70 e o monitor 68 podem ser externo ao aparelho 10 nos exemplos em que o aplicativos 10 é um computador de mesa. Como outro exemplo, a interface com o usuário 70 pode ser parte do monitor 68 nos exemplos em que o monitor 68 é um monitor sensível ao toque ou sensível à presença de um aparelho móvel.
[0126] O processador 14, a GPU 16, a PMU 18 e a memória global da Figura 4 podem ser semelhantes ao processador 14, à GPU 16, à PMU 18 e à memória global 20 da Figura 1. Exemplos de interface com o usuário 70 incluem, mas não se limitam a, um trackball, um mouse, um teclado e outros tipos de aparelho de entrada. A interface com o usuário 70 pode ser uma tela sensível ao toque e pode ser incorporada como uma parte do monitor 68. O módulo de transceptor 72 pode incluir um conjunto de circuitos para permitir comunicação sem fio ou cabeada entre o aparelho 10 e outro aparelho ou uma rede. O módulo de transceptor 72 pode incluir moduladores, demoduladores, amplificadores e outros circuitos que tais para comunicação cabeada ou sem fio. O monitor 68 pode compreender uma tela de cristal líquido (LCD), uma tela de tubo de raios catódicos (CRT), uma tela de plasma, um monitor sensível ao toque, um monitor sensível à presença ou outro tipo de aparelho de exibição.
[0127] Em um ou mais exemplos, as funções descritas podem ser implementadas em hardware, software, firmware ou qualquer combinação deles. Se implementadas em software, as funções podem ser armazenadas ou transmitidas, como uma ou mais instruções ou códigos, através de um meio passível e leitura por computador e executadas por uma unidade de processamento baseada em hardware. Os meios passíveis de leitura por computador podem incluir meios de armazenamento passíveis de leitura por computador, que correspondem a um meio tangível, tal como um meio de armazenamento de dados ou um meio de comunicação que inclui qualquer meio que facilite a transferência de um programa de computador de um lugar para outro, de acordo com um protocolo de comunicação, por exemplo. Desta maneira, os meios passiveis de leitura por computador podem corresponder geralmente a (1) meios de armazenamento passíveis de leitura por computador tangíveis que são não transitórios ou (2) um meio de comunicação tal como um sinal ou onda portadora. Os meios de armazenamento de dados podem ser quaisquer meios disponíveis que possam ser acessados por um ou mais computadores ou um ou mais processadores para recuperar instruções, código e ou estruturas de dados para implementação das técnicas descritas nesta revelação. Um produto de programa de computador pode incluir um meio passível de leitura por computador.
[0128] A titulo de exemplo, e não de limitação, tais meios de armazenamento passíveis de leitura por computador podem compreender RAM, ROM, EEPROM, CD-ROM, ou outro armazenamento em disco óptico, armazenamento em disco magnético ou outros aparelhos de armazenamento magnético, memória flash ou qualquer outro meio que possa ser usado para armazenar o código de programa desejado sob a forma de instruções ou estrutura de dados e que possa ser acessado por um computador. Além disto, qualquer conexão é apropriadamente denominada de meio passível e leitura por computador. Por exemplo, se as instruções forem transmitidas de um site da Web, servidor, outra fonte remota utilizando-se um cabo coaxial, um cabo de fibra óptica, um par trançado, uma linha de assinante digital (DSL) ou tecnologias sem fio tais como infravermelho, rádio e microonda, então o cabo axial, o cabo de fibra óptica, o par trançado, a DSL ou as tecnologias sem fio tais como infravermelho, rádio e microonda são incluídos na definição de meio. Deve ficar entendido, contudo, que os meios de armazenamento passiveis de leitura por computador e os meios de armazenamento de dados não incluem conexões, ondas portadoras, sinais ou outros meios transitórios, mas estão em vez disso direcionados para meios de armazenamento tangíveis não transitórios. O termo disco (DISK e DISC) conforme aqui utilizado, inclui disco compacto (CD), disco de laser, disco óptico, disco versátil digital (DVD), disco flexível e disco Blu-ray, onde discos (DISKS) usualmente reproduzem dados magneticamente, enquanto discos (DISCS) reproduzem dados opticamente com lasers. Combinações dos elementos acima dever ser também incluídas dentro do alcance dos meios passíveis de leitura por computador.
[0129] As instruções podem ser executadas por uma ou mais processadores, tais como um ou mais processadores de sinais digitais (DSPs), microprocessadores de propósito geral, circuitos integrados específicos de aplicativo (ASICs), arranjos lógicos programáveis no campo (FPGAs) ou outros circuitos lógicos integrados ou lógicos discretos equivalentes. Por conseguinte, o termo “processador”, conforme aqui utilizado, pode referir-se a qualquer uma das estruturas precedentes, ou a qualquer outra estrutura adequada para implementação das técnicas aqui descritas. Além disto, sob alguns aspectos, a funcionalidade aqui descrita pode ser apresentada dentro de um hardware dedicado e ou em módulos de software configurados para codificação e decodificação, ou incorporada a um CODEC combinado. Além disto, as técnicas podem ser completamente implementadas em um ou mais circuitos ou elementos lógicos.
[0130] As técnicas desta revelação podem ser implementadas em uma ampla variedade de aparelhos ou equipamentos, inclusive um aparelho telefônico sem fio, um circuito integrado (IC) ou um conjunto de ICs (um conjunto de chips, por exemplo). Diversos componentes, módulos ou unidades são descritos nesta revelação para enfatizar os aspectos funcionais dos aparelhos configurados para a execução das técnicas reveladas, mas não exigem necessariamente a execução por unidades de hardware diferentes. Em vez disso, conforme descrito acima, diversas unidades podem ser combinadas em uma unidade de hardware de CODEC ou providas por uma coleção de unidades de hardware inter-operantes, inclusive um ou mais processadores descritos acima, em conjunto com software e ou firmware.
[0131] Foram descritos diversos exemplos. Estes e outros exemplos estão dentro do alcance das reivindicações que se seguem.

Claims (11)

1. Método para executar operações de processamento de dados em uma sessão de encadeamento, o método compreendendo: executar uma primeira linha em uma primeira unidade (28A) de computação programável de um processador gráfico de operações específicas de uma unidade de processamento de gráficos, GPU, (26) em que o processador gráfico de operações específicas inclui uma pluralidade de unidades de computação programáveis incluindo a primeira unidade (28A) de computação programável; executar uma segunda linha em uma segunda unidade (28N) de computação programável da pluralidade de unidades de computação programáveis do processador gráfico de operações específicas da GPU (26); receber, diretamente com uma unidade de gerenciamento (18) dentro de um circuito integrado, IC (16) que inclui a GPU, uma solicitação da primeira unidade (28A) de computação programável para armazenar dados produzidos pela execução da primeira linha em um armazenador (22A-22N) em uma memória global externa ao IC (16) compartilhado pela pluralidade de unidades de computação programáveis, no qual os dados produzidos pela execução da primeira linha serão consumidos pela segunda unidade (28N) de computação programável que executa a segunda linha, e em que o armazenador (22A-22N) compreende um armazenador (22A-22N) do tipo primeiro a entrar-primeiro a sair, FIFO; determinar, diretamente com a unidade de gerenciamento (18), um local dentro do armazenador (22A- 22N) onde os dados produzidos pela execução da primeira linha serão armazenados; armazenar, com o IC (16), os dados produzidos pela execução da primeira linha no local determinado dentro do armazenador (22A-22N); o método caracterizado por compreender também: armazenar, com a unidade de gerenciamento (18), informações de estado do armazenador (22A-22N) dentro do IC (16), em que as informações de estado do armazenador (22A- 22N) incluem um ou mais de um endereço inicial do armazenador (22A-22N), um endereço final do armazenador (22A-22N), um endereço dentro do armazenador (22A-22N) onde os dados produzidos serão armazenados, e um endereço dentro do armazenador (22A-22N) de onde os dados serão recuperados; em que determinar o local dentro do armazenador (22A-22N) compreende determinar o local dentro do armazenador (22A-22N) para onde os dados produzidos pela execução da primeira linha serão armazenados com base nas informações de estado armazenadas do armazenador (22A-22N); e em que o método compreende ainda: receber, com a unidade de gerenciamento (18), uma solicitação da segunda unidade (28N) de computação programável que executa a segunda linha para recuperar pelo menos alguns dos dados produzidos pela execução da primeira linha; e determinar, com a unidade de gerenciamento (18), se os dados que são produzidos pela execução da primeira linha estão disponíveis para recuperação para consumo pela segunda unidade (28N) de computação programável que executa a segunda linha.
2. Método, de acordo com a reivindicação 1, caracterizado por receber a solicitação da segunda unidade (28N) de computação programável compreender receber a solicitação da segunda unidade (28N) de computação programável ao mesmo tempo, antes ou após receber a solicitação da primeira unidade (28A) de computação programável para armazenar os dados produzidos pela execução da primeira linha.
3. Método, de acordo com a reivindicação 1, caracterizado por compreender também: quando os dados solicitados pela segunda linha não estiverem disponíveis para recuperação para consumo pela segunda unidade (28N) de computação programável que executa a segunda linha, indicar, com a unidade de gerenciamento (18), à segunda unidade (28N) de computação programável para executar uma terceira linha; indicar, com a unidade de gerenciamento (18), para a segunda unidade (28N) de computação programável quando os dados solicitados pela segunda linha estão disponíveis para recuperação para consumo pela segunda unidade (28N) de computação programável que executa a segunda linha; e indicar, com a unidade de gerenciamento (18), à segunda unidade (28N) de computação programável para executar a segunda linha para consumir os dados solicitados pela segunda linha quando os dados solicitados pela segunda linha estão disponíveis para recuperação para consumo pela segunda unidade (28N) de computação programável que executa a segunda linha.
4. Método, de acordo com a reivindicação 1, caracterizado por compreender também: recuperar, com a unidade de gerenciamento (18), dados da memória global além dos dados solicitados pela segunda linha; e armazenar, com a unidade de gerenciamento (18), os dados além dos dados solicitados pela segunda linha em uma cache dentro do IC (16).
5. Método, de acordo com a reivindicação 1, caracterizado por executar a primeira linha compreender executar uma linha de produtor de um núcleo, e em que executar a segunda linha compreende executar uma linha de consumidor do núcleo.
6. Método, de acordo com a reivindicação 1, caracterizado por executar a primeira linha compreender executar a primeira linha de um núcleo de produtor, e em que executar a segunda linha compreende executar uma linha de um núcleo de consumidor.
7. Método, de acordo com a reivindicação 1, caracterizado pela GPU incluir a unidade de gerenciamento (18) e em que o armazenador FIFO compreende um armazenador circular.
8. Método, de acordo com a reivindicação 1, caracterizado por determinar o local dentro do armazenador (22A-22N) compreender determinar o local dentro do armazenador (22A-22N) para onde os dados produzidos pela execução da primeira linha serão armazenados sem que a primeira linha indique o local onde os dados serão armazenados no armazenador (22A-22N).
9. Equipamento, compreendendo: uma memória global compartilhada por uma pluralidade de unidades de computação programáveis que inclui um armazenador (22A-22N), no qual o armazenador (22A-22N) compreende um armazenador do tipo primeiro a entrar-primeiro a sair, FIFO; e um circuito integrado, IC (16), compreendendo: uma unidade de processamento de gráficos, GPU, compreendendo: mecanismos para executar uma primeira linha; mecanismos para executar uma segunda linha; e mecanismos para receber diretamente uma solicitação dos mecanismos para executar a primeira linha para armazenar os dados produzidos pela execução da primeira linha no armazenador (22A-22N) na memória global, no qual os dados produzidos pela execução da primeira linha serão consumidos por meio dos mecanismos para executar a segunda linha; e mecanismos para determinar diretamente um local dentro do armazenador (22A-22N) onde os dados produzidos por meio dos mecanismos para executar a primeira linha serão armazenados; e mecanismos para armazenar os dados produzidos pela execução da primeira linha no local determinado dentro do armazenador (22A-22N); o equipamento caracterizado por compreender também: a unidade de gerenciamento (18) ser configurada para armazenar informação de estado do armazenador (22A-22N) dentro do IC (16); a informação de estado do armazenador (22A- 22N) incluir um ou mais de um endereço inicial do armazenador (22A-22N), um endereço final do armazenador (22A-22N), um endereço dentro do armazenador (22A-22N) onde os dados produzidos serão armazenados, e um endereço dentro do armazenador (22A-22N) onde os dados serão recuperados; a unidade de gerenciamento (18) ser configurada para determinar o local dentro do armazenador (22A-22N) para onde os dados produzidos pela execução da primeira linha serão armazenados com base na informação de estado armazenada do armazenador (22A-22N); e em que o equipamento compreende ainda a unidade de gerenciamento (18) ser configurada para: receber uma solicitação da segunda unidade (28N) de computação programável que executa a segunda linha para recuperar ao menos alguns dos dados produzidos pela execução da primeira linha; e determinar se os dados que são produzidos pela execução da primeira linha estão disponíveis para recuperação para consumo pela segunda unidade (28N) de computação programável que executa a segunda linha.
10. Equipamento, de acordo com a reivindicação 9, caracterizado por: os mecanismos para executar a primeira linha compreenderem uma primeira unidade (28A) de computação programável e os mecanismos para executar a segunda linha compreenderem uma segunda unidade (28N) de computação programável; e os mecanismos para executar a segunda linha compreenderem receber a solicitação da primeira unidade (28A) de computação programável para armazenar dados produzidos pela execução da primeira linha em um armazenador (22A-22N) na memória global e para determinar o local dentro do armazenador (22A-22N) onde os dados produzidos pela execução da primeira linha serão armazenados compreenderem uma unidade de gerenciamento (18).
11. Memória caracterizada por compreender instruções que, quando executadas, fazem com que um ou mais processadores executem o método conforme definido em qualquer uma das reivindicações 1 a 8.
BR112014018434-8A 2012-01-27 2013-01-24 Gerenciamento de buffer para unidade de processamento paralelo de gráficos BR112014018434B1 (pt)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201261591733P 2012-01-27 2012-01-27
US61/591,733 2012-01-27
US13/747,947 2013-01-23
US13/747,947 US9256915B2 (en) 2012-01-27 2013-01-23 Graphics processing unit buffer management
PCT/US2013/022900 WO2013112692A1 (en) 2012-01-27 2013-01-24 Buffer management for graphics parallel processing unit

Publications (3)

Publication Number Publication Date
BR112014018434A2 BR112014018434A2 (pt) 2017-06-20
BR112014018434A8 BR112014018434A8 (pt) 2017-07-11
BR112014018434B1 true BR112014018434B1 (pt) 2021-07-27

Family

ID=48869818

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112014018434-8A BR112014018434B1 (pt) 2012-01-27 2013-01-24 Gerenciamento de buffer para unidade de processamento paralelo de gráficos

Country Status (7)

Country Link
US (1) US9256915B2 (pt)
EP (1) EP2807646A1 (pt)
JP (1) JP6081492B2 (pt)
KR (1) KR101707289B1 (pt)
CN (1) CN104081449B (pt)
BR (1) BR112014018434B1 (pt)
WO (1) WO2013112692A1 (pt)

Families Citing this family (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10817043B2 (en) * 2011-07-26 2020-10-27 Nvidia Corporation System and method for entering and exiting sleep mode in a graphics subsystem
US9304730B2 (en) 2012-08-23 2016-04-05 Microsoft Technology Licensing, Llc Direct communication between GPU and FPGA components
CN103810124A (zh) * 2012-11-09 2014-05-21 辉达公司 用于数据传输的系统及方法
US9977683B2 (en) * 2012-12-14 2018-05-22 Facebook, Inc. De-coupling user interface software object input from output
US10134102B2 (en) * 2013-06-10 2018-11-20 Sony Interactive Entertainment Inc. Graphics processing hardware for using compute shaders as front end for vertex shaders
US10102603B2 (en) 2013-06-10 2018-10-16 Sony Interactive Entertainment Inc. Scheme for compressing vertex shader output parameters
US10096079B2 (en) 2013-06-10 2018-10-09 Sony Interactive Entertainment Inc. Fragment shaders perform vertex shader computations
US10176621B2 (en) * 2013-06-10 2019-01-08 Sony Interactive Entertainment Inc. Using compute shaders as front end for vertex shaders
US9659399B2 (en) * 2013-08-23 2017-05-23 Nvidia Corporation System, method, and computer program product for passing attribute structures between shader stages in a graphics pipeline
EP3072048A4 (en) * 2013-11-22 2017-08-16 Intel Corporation Method and apparatus to improve performance of chained tasks on a graphics processing unit
US9589311B2 (en) * 2013-12-18 2017-03-07 Intel Corporation Independent thread saturation of graphics processing units
US9679347B2 (en) * 2014-02-18 2017-06-13 Qualcomm Incorporated Shader pipeline with shared data channels
US10055342B2 (en) * 2014-03-19 2018-08-21 Qualcomm Incorporated Hardware-based atomic operations for supporting inter-task communication
US9710245B2 (en) * 2014-04-04 2017-07-18 Qualcomm Incorporated Memory reference metadata for compiler optimization
KR102263326B1 (ko) 2014-09-18 2021-06-09 삼성전자주식회사 그래픽 프로세싱 유닛 및 이를 이용한 그래픽 데이터 처리 방법
GB2524346B (en) * 2014-09-19 2016-12-21 Imagination Tech Ltd Separating Cores
US9412147B2 (en) 2014-09-23 2016-08-09 Apple Inc. Display pipe line buffer sharing
US9659407B2 (en) * 2015-01-26 2017-05-23 MediaTek Singapore, Pte. Lte. Preemptive flushing of spatial selective bins for deferred graphics processing
US9652817B2 (en) 2015-03-12 2017-05-16 Samsung Electronics Co., Ltd. Automated compute kernel fusion, resizing, and interleave
CN104899039B (zh) 2015-06-12 2018-12-25 百度在线网络技术(北京)有限公司 用于在终端设备上提供截屏服务的方法和装置
US10515430B2 (en) 2015-11-03 2019-12-24 International Business Machines Corporation Allocating device buffer on GPGPU for an object with metadata using access boundary alignment
CN108986015B (zh) * 2015-11-17 2022-12-06 格兰菲智能科技有限公司 数据单元的关联性检查方法以及使用该方法的装置
CN105446939B (zh) * 2015-12-04 2019-02-26 上海兆芯集成电路有限公司 由装置端推核心入队列的装置
US10025741B2 (en) * 2016-01-13 2018-07-17 Samsung Electronics Co., Ltd. System-on-chip, mobile terminal, and method for operating the system-on-chip
US9799089B1 (en) * 2016-05-23 2017-10-24 Qualcomm Incorporated Per-shader preamble for graphics processing
WO2017209876A1 (en) * 2016-05-31 2017-12-07 Brocade Communications Systems, Inc. Buffer manager
US10572399B2 (en) * 2016-07-13 2020-02-25 Qualcomm Incorporated Memory request arbitration
US20180122037A1 (en) * 2016-10-31 2018-05-03 Intel Corporation Offloading fused kernel execution to a graphics processor
JP6817827B2 (ja) * 2017-01-23 2021-01-20 Necプラットフォームズ株式会社 アクセラレータ処理管理装置、ホスト装置、アクセラレータ処理実行システム、方法およびプログラム
US10430919B2 (en) * 2017-05-12 2019-10-01 Google Llc Determination of per line buffer unit memory allocation
US11163546B2 (en) * 2017-11-07 2021-11-02 Intel Corporation Method and apparatus for supporting programmatic control of a compiler for generating high-performance spatial hardware
US11068308B2 (en) * 2018-03-14 2021-07-20 Texas Instruments Incorporated Thread scheduling for multithreaded data processing environments
US10810064B2 (en) 2018-04-27 2020-10-20 Nasdaq Technology Ab Publish-subscribe framework for application execution
US11163490B2 (en) 2019-09-17 2021-11-02 Micron Technology, Inc. Programmable engine for data movement
US11397694B2 (en) 2019-09-17 2022-07-26 Micron Technology, Inc. Memory chip connecting a system on a chip and an accelerator chip
US11416422B2 (en) 2019-09-17 2022-08-16 Micron Technology, Inc. Memory chip having an integrated data mover
CN111078395B (zh) * 2019-11-12 2023-06-20 华中科技大学 一种基于张量的深度学习gpu内存管理优化方法及系统
US11263064B2 (en) * 2019-12-30 2022-03-01 Qualcomm Incorporated Methods and apparatus to facilitate improving processing of machine learning primitives
US11250538B2 (en) 2020-03-09 2022-02-15 Apple Inc. Completion signaling techniques in distributed processor
US11416961B2 (en) 2020-05-29 2022-08-16 Samsung Electronics Co., Ltd. Variable entry transitional ring storage for efficiently accessing graphics states
US20230294442A1 (en) 2020-07-31 2023-09-21 Morphotonics Holding B.V. Assembly for replicating flexible stamps from a master
CN112104731B (zh) * 2020-09-11 2022-05-20 北京奇艺世纪科技有限公司 请求处理方法、装置、电子设备和存储介质
US11989554B2 (en) * 2020-12-23 2024-05-21 Intel Corporation Processing pipeline with zero loop overhead
CN113457160B (zh) * 2021-07-15 2024-02-09 腾讯科技(深圳)有限公司 数据处理方法、装置、电子设备及计算机可读存储介质
US20240193844A1 (en) * 2022-12-08 2024-06-13 Advanced Micro Devices, Inc. Configurable multiple-die graphics processing unit
CN115599574B (zh) * 2022-12-12 2023-03-24 北京象帝先计算技术有限公司 图形处理系统、电子组件、电子设备及信息处理方法
CN116048816B (zh) * 2023-03-23 2023-08-22 摩尔线程智能科技(北京)有限责任公司 数据请求处理方法、装置、电子设备和存储介质

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2500101B2 (ja) 1992-12-18 1996-05-29 インターナショナル・ビジネス・マシーンズ・コーポレイション 共用変数の値を更新する方法
US7117481B1 (en) 2002-11-06 2006-10-03 Vmware, Inc. Composite lock for computer systems with multiple domains
US7673304B2 (en) * 2003-02-18 2010-03-02 Microsoft Corporation Multithreaded kernel for graphics processing unit
TWI322354B (en) * 2005-10-18 2010-03-21 Via Tech Inc Method and system for deferred command issuing in a computer system
JP3853829B1 (ja) 2005-10-31 2006-12-06 株式会社ソニー・コンピュータエンタテインメント 描画処理装置、並列処理装置および排他制御方法
US7928990B2 (en) 2006-09-27 2011-04-19 Qualcomm Incorporated Graphics processing unit with unified vertex cache and shader register file
US8087029B1 (en) 2006-10-23 2011-12-27 Nvidia Corporation Thread-type-based load balancing in a multithreaded processor
US8135926B1 (en) 2008-10-21 2012-03-13 Nvidia Corporation Cache-based control of atomic operations in conjunction with an external ALU block
US8392925B2 (en) 2009-03-26 2013-03-05 Apple Inc. Synchronization mechanisms based on counters
JP2010287110A (ja) * 2009-06-12 2010-12-24 Nec Personal Products Co Ltd 情報処理装置、情報処理方法、プログラム及び記録媒体
BR112012001629B1 (pt) 2009-07-28 2019-10-22 Ericsson Telefon Ab L M método de sincronizar o processamento de eventos associados com sessões de aplicação em uma plataforma de processamento de telecomunicações, adaptador de recursos, e, agrupamento de java enterprise edition
US9324175B2 (en) 2009-09-11 2016-04-26 Nvidia Corporation Memory coherency in graphics command streams and shaders
US8817031B2 (en) * 2009-10-02 2014-08-26 Nvidia Corporation Distributed stream output in a parallel processing unit
US8810592B2 (en) * 2009-10-09 2014-08-19 Nvidia Corporation Vertex attribute buffer for inline immediate attributes and constants
JP2013541748A (ja) * 2010-07-19 2013-11-14 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド 多重処理ユニット内のオンチップメモリを用いるデータ処理
US20120092351A1 (en) 2010-10-19 2012-04-19 Apple Inc. Facilitating atomic switching of graphics-processing units
US9092267B2 (en) 2011-06-20 2015-07-28 Qualcomm Incorporated Memory sharing in graphics processing unit

Also Published As

Publication number Publication date
JP6081492B2 (ja) 2017-02-15
BR112014018434A2 (pt) 2017-06-20
KR20140125821A (ko) 2014-10-29
EP2807646A1 (en) 2014-12-03
KR101707289B1 (ko) 2017-02-27
US9256915B2 (en) 2016-02-09
BR112014018434A8 (pt) 2017-07-11
CN104081449B (zh) 2016-11-09
WO2013112692A1 (en) 2013-08-01
CN104081449A (zh) 2014-10-01
JP2015513715A (ja) 2015-05-14
US20130194286A1 (en) 2013-08-01

Similar Documents

Publication Publication Date Title
BR112014018434B1 (pt) Gerenciamento de buffer para unidade de processamento paralelo de gráficos
JP6949857B2 (ja) タイミングを中断させるモードにおけるソフトウェアの後方互換性テスト
KR101392109B1 (ko) 시스템 관리 모드의 프로세서에 상태 스토리지를 제공하기 위한 장치, 방법 및 시스템
JP6430970B2 (ja) 異なる命令セットアーキテクチャを有するプロセッサ上におけるオペレーティングシステムの実行
US9779469B2 (en) Register spill management for general purpose registers (GPRs)
US9430807B2 (en) Execution model for heterogeneous computing
US20160019168A1 (en) On-Demand Shareability Conversion In A Heterogeneous Shared Virtual Memory
US20170109214A1 (en) Accelerating Task Subgraphs By Remapping Synchronization
US10489297B2 (en) Prefetching time allocation
US11468001B1 (en) Processing-in-memory concurrent processing system and method
US20210224213A1 (en) Techniques for near data acceleration for a multi-core architecture
TW201346831A (zh) 察覺生產者—消費者指令的記憶體階層之設備及方法
WO2024119988A1 (zh) 多cpu环境下的进程调度方法、装置、电子设备和介质
US8949777B2 (en) Methods and systems for mapping a function pointer to the device code
US8862786B2 (en) Program execution with improved power efficiency
KR20230053608A (ko) 텍스처/로드 명령어 블록에 대한 연기된 gpr 할당
JP7092783B2 (ja) ペンディング中のロード及びストアの個別トラッキング
TWI760756B (zh) 共用代碼之系統與代碼共用方法
US9437172B2 (en) High-speed low-power access to register files

Legal Events

Date Code Title Description
B06F Objections, documents and/or translations needed after an examination request according [chapter 6.6 patent gazette]
B06U Preliminary requirement: requests with searches performed by other patent offices: procedure suspended [chapter 6.21 patent gazette]
B07A Application suspended after technical examination (opinion) [chapter 7.1 patent gazette]
B06A Patent application procedure suspended [chapter 6.1 patent gazette]
B09A Decision: intention to grant [chapter 9.1 patent gazette]
B16A Patent or certificate of addition of invention granted [chapter 16.1 patent gazette]

Free format text: PRAZO DE VALIDADE: 20 (VINTE) ANOS CONTADOS A PARTIR DE 24/01/2013, OBSERVADAS AS CONDICOES LEGAIS.