ES2907227T3 - Técnicas de acceso a memoria multimodal para realizar operaciones de transferencia de memoria basadas en unidadde procesamiento de gráficos - Google Patents

Técnicas de acceso a memoria multimodal para realizar operaciones de transferencia de memoria basadas en unidadde procesamiento de gráficos Download PDF

Info

Publication number
ES2907227T3
ES2907227T3 ES13803357T ES13803357T ES2907227T3 ES 2907227 T3 ES2907227 T3 ES 2907227T3 ES 13803357 T ES13803357 T ES 13803357T ES 13803357 T ES13803357 T ES 13803357T ES 2907227 T3 ES2907227 T3 ES 2907227T3
Authority
ES
Spain
Prior art keywords
memory transfer
memory
read
gpu
transfer mode
Prior art date
Legal status (The legal status 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 status listed.)
Active
Application number
ES13803357T
Other languages
English (en)
Inventor
Andrew Evan Gruber
Tao Wang
Shambhoo Khandelwal
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
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 Inc filed Critical Qualcomm Inc
Application granted granted Critical
Publication of ES2907227T3 publication Critical patent/ES2907227T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0607Interleaved addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • 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/39Control of the bit-mapped memory
    • G09G5/393Arrangements for updating the contents of the bit-mapped 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/39Control of the bit-mapped memory
    • G09G5/395Arrangements specially adapted for transferring the contents of the bit-mapped memory to the screen
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1021Hit rate improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/455Image or video data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/601Reconfiguration of cache memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Graphics (AREA)
  • Memory System (AREA)
  • Image Generation (AREA)
  • Controls And Circuits For Display Device (AREA)
  • Image Processing (AREA)

Abstract

Un procedimiento implementado por ordenador para realizar operaciones de transferencia de memoria en base a modos de transferencia de memoria seleccionables, comprendiendo el procedimiento: seleccionar (202), con uno o más procesadores, en base a uno o más criterios, un modo de transferencia de memoria para realizar al menos parte de una operación de transferencia de memoria, seleccionándose el modo de transferencia de memoria de un conjunto de al menos dos modos de transferencia de memoria diferentes que incluye un modo de transferencia de memoria intercalada y un modo de transferencia de memoria secuencial, en el que el uno o más criterios son al menos uno de una cantidad de datos que se va a transferir por la operación de transferencia de memoria, una cantidad de superposición con una parte de memoria intermedia fija alineada con la pantalla o una ejecución de un programa de sombreado; y realizar (204), con una unidad de procesamiento de gráficos, GPU, la al menos parte de la operación de transferencia de memoria usando el modo de transferencia de memoria seleccionado, en el que realizar, con la GPU, la al menos parte de la operación de transferencia de memoria usando el modo de transferencia de memoria intercalada comprende un motor de lectura que emite solicitudes de lectura y un motor de escritura que emite solicitudes de escritura usando un paradigma productor-consumidor en base a un esquema de arbitraje y priorización en el que las solicitudes de lectura y las solicitudes de escritura se intercalan entre sí, y en el que realizar, con la GPU, la al menos parte de la operación de transferencia de memoria usando el modo de transferencia de memoria secuencial comprende que el motor de lectura emita solicitudes de lectura y el motor de escritura emita solicitudes de escritura usando un paradigma de exclusión mutua en base a un esquema de arbitraje y priorización en el que el motor de lectura y el motor de escritura emiten de forma alterna grupos de múltiples solicitudes de lectura consecutivas y grupos de múltiples solicitudes de escritura consecutivas durante intervalos de tiempo separados.

Description

DESCRIPCIÓN
Técnicas de acceso a memoria multimodal para realizar operaciones de transferencia de memoria basadas en unidad de procesamiento de gráficos
CAMPO TÉCNICO
La presente divulgación se refiere a procesamiento de gráficos y, más en particular, a técnicas para realizar operaciones de transferencia de memoria con un procesador de gráficos.
ANTECEDENTES
Una unidad de procesamiento de gráficos (GPU) a menudo se usa en un dispositivo informático para manejar y/o proporcionar aceleración de hardware para una o más de las operaciones que se necesitan para mostrar imágenes gráficas. Una clase de operaciones que se manejan comúnmente por las GPU son las operaciones de transferencia de memoria. Las operaciones de transferencia de memoria pueden incluir operaciones de copia de memoria y operaciones de composición. En algunos ejemplos, las operaciones de transferencia de memoria se pueden denominar operaciones blit u operaciones BLT (es decir, operaciones de transferencia de bloques de bits). La ejecución de estas operaciones de transferencia de memoria puede implicar realizar numerosas operaciones de lectura y escritura con respecto a una memoria fuera del chip que almacena los datos de origen y destino para la operación de transferencia de memoria.
SUMARIO
La presente divulgación describe técnicas para realizar operaciones de transferencia de memoria con una unidad de procesamiento de gráficos (GPU) en base a un modo de transferencia de memoria seleccionable, y técnicas para seleccionar un modo de transferencia de memoria para realizar la totalidad o parte de una operación de transferencia de memoria con una GPU. En algunos ejemplos, las técnicas para realizar operaciones de transferencia de memoria pueden usar una GPU que está configurada para conmutar selectivamente entre usar un modo de transferencia de memoria intercalada y un modo de transferencia de memoria secuencial para realizar la totalidad o parte de una operación de transferencia de memoria. El modo de transferencia de memoria intercalada puede hacer que la GPU realice una operación de transferencia de memoria en base a un paradigma productor-consumidor donde las solicitudes de lectura y las solicitudes de escritura se intercalan entre sí. El modo de transferencia de memoria secuencial puede hacer que la GPU realice una operación de transferencia de memoria de modo que la GPU alterna entre emitir grupos de múltiples solicitudes de lectura consecutivas y grupos de múltiples solicitudes de escritura consecutivas. En ejemplos adicionales, las técnicas para seleccionar un modo de transferencia de memoria pueden usar un procesador central (por ejemplo, una CPU) y/o la GPU para seleccionar un modo de transferencia de memoria para usar para la totalidad o parte de la operación de transferencia de memoria en base a uno o más criterios.
En un ejemplo, la presente divulgación describe un procedimiento que incluye seleccionar, con uno o más procesadores, un modo de transferencia de memoria para realizar al menos parte de una operación de transferencia de memoria. El modo de transferencia de memoria se puede seleccionar de un conjunto de al menos dos modos de transferencia de memoria diferentes que incluye un modo de transferencia de memoria intercalada y un modo de transferencia de memoria secuencial. El procedimiento incluye además realizar, con una GPU, la operación de transferencia de memoria en base al modo de transferencia de memoria seleccionado.
En otro ejemplo, la presente divulgación describe un dispositivo que incluye uno o más procesadores configurados para seleccionar un modo de transferencia de memoria para realizar al menos parte de una operación de transferencia de memoria. El modo de transferencia de memoria se puede seleccionar de un conjunto de al menos dos modos de transferencia de memoria diferentes que incluye un modo de transferencia de memoria intercalada y un modo de transferencia de memoria secuencial. El dispositivo incluye además una GPU configurada para realizar la operación de transferencia de memoria en base al modo de transferencia de memoria seleccionado.
En otro ejemplo, la presente divulgación describe un aparato que incluye medios para seleccionar un modo de transferencia de memoria para realizar al menos parte de una operación de transferencia de memoria. El modo de transferencia de memoria se puede seleccionar de un conjunto de al menos dos modos de transferencia de memoria diferentes que incluye un modo de transferencia de memoria intercalada y un modo de transferencia de memoria secuencial. El aparato incluye además medios para realizar la operación de transferencia de memoria en base al modo de transferencia de memoria seleccionado.
En otro ejemplo, la presente divulgación describe un medio de almacenamiento legible por ordenador que almacena instrucciones que, cuando se ejecutan, hacen que uno o más procesadores seleccionen un modo de transferencia de memoria para realizar al menos parte de una operación de transferencia de memoria. El modo de transferencia de memoria se puede seleccionar de un conjunto de al menos dos modos de transferencia de memoria diferentes que incluye un modo de transferencia de memoria intercalada y un modo de transferencia de memoria secuencial. El medio de almacenamiento legible por ordenador almacena además instrucciones que, cuando se ejecutan, hacen que uno o más procesadores realicen la operación de transferencia de memoria en base al modo de transferencia de memoria seleccionado.
Los detalles de uno o más ejemplos de la divulgación se exponen en los dibujos adjuntos y en la descripción a continuación. Otros rasgos característicos, objetivos y ventajas de la divulgación serán evidentes a partir de la descripción y dibujos, y a partir de las reivindicaciones.
El documento EP 1191445A2 divulga que el controlador de memoria está conectado a una memoria y recibe una dirección para acceder a la memoria. El controlador está programado de modo que selecciona y extrae la parte de la dirección que indica la fila y la columna correspondientes en la memoria. El documento XP055160009 "GPU Computing: Data-Parallel Algorithms" https://cg.ivd.kit.edu/downloads/GPUComputing_assignment_2.pdf divulga dos operaciones de transferencia de memoria, el direccionamiento intercalado y el direccionamiento secuencial.
BREVE DESCRIPCIÓN DE LOS DIBUJOS
La FIG. 1 es un diagrama de bloques que ilustra un dispositivo informático de ejemplo que se puede usar para implementar las técnicas de transferencia de memoria multimodal de la presente divulgación y las técnicas de selección de modo de transferencia de memoria de la presente divulgación.
La FIG. 2 es un diagrama de bloques que ilustra la CPU, la GPU y el subsistema de memoria del dispositivo informático de la FIG. 1 en mayor detalle.
La FIG. 3 es un diagrama de bloques que ilustra un subsistema de memoria de ejemplo que se puede usar en la configuración de ejemplo mostrada en la FIG. 2.
La FIG. 4 es un diagrama de bloques que ilustra otro subsistema de memoria de ejemplo que se puede usar en la configuración de ejemplo mostrada en la FIG. 2.
La FIG. 5 es un diagrama conceptual que ilustra una operación de transferencia de memoria de origen única de ejemplo de acuerdo con la presente divulgación.
La FIG. 6 es un diagrama conceptual que ilustra una operación de transferencia de memoria de origen múltiple de ejemplo de acuerdo con la presente divulgación.
La FIG. 7 es un diagrama conceptual que ilustra una operación de transferencia de memoria de origen única asistida por GPU de ejemplo de acuerdo con la presente divulgación.
La FIG. 8 es un diagrama conceptual que ilustra una operación de transferencia de memoria de origen múltiple asistida por GPU de ejemplo de acuerdo con la presente divulgación.
Las FIGS. 9A y 9B son un diagrama de temporización que ilustra características de temporización de ejemplo para una operación de transferencia de memoria de origen única que se realiza de acuerdo con el modo de transferencia de memoria intercalada de la presente divulgación.
La FIG. 10 es un diagrama de temporización que ilustra características de temporización de ejemplo para una operación de transferencia de memoria de origen única que se realiza de acuerdo con el modo de transferencia de memoria secuencial de la presente divulgación.
Las FIGS. 11A y 11B son un diagrama de temporización que ilustra características de temporización de ejemplo para una operación de transferencia de memoria de origen múltiple que se realiza de acuerdo con el modo de transferencia de memoria intercalada de la presente divulgación.
La FIG. 12 es un diagrama de temporización que ilustra características de temporización de ejemplo para una operación de transferencia de memoria de origen múltiple que se realiza de acuerdo con el modo de transferencia de memoria secuencial de la presente divulgación.
La FIG. 13 es un diagrama de flujo que ilustra una técnica de ejemplo para realizar una operación de transferencia de memoria de acuerdo con las técnicas de transferencia de memoria intercalada de la presente divulgación.
La FIG. 14 es un diagrama de flujo que ilustra una técnica de ejemplo para emitir solicitudes de lectura de acuerdo con el modo de sincronización intercalada de la presente divulgación.
La FIG. 15 es un diagrama de flujo que ilustra una técnica de ejemplo para emitir solicitudes de escritura de acuerdo con el modo de sincronización intercalada de la presente divulgación.
La FIG. 16 es un diagrama de flujo que ilustra una técnica de ejemplo para realizar una operación de transferencia de memoria de acuerdo con las técnicas de transferencia de memoria secuencial de la presente divulgación.
La FIG. 17 es un diagrama de flujo que ilustra una técnica de ejemplo para emitir solicitudes de lectura de acuerdo con el modo de sincronización secuencial de la presente divulgación.
La FIG. 18 es un diagrama de flujo que ilustra una técnica de ejemplo para emitir solicitudes de escritura de acuerdo con el modo de sincronización secuencial de la presente divulgación.
La FIG. 19 es un diagrama de flujo que ilustra una técnica de ejemplo para realizar una operación de transferencia de memoria de acuerdo con el modo de transferencia de memoria secuencial de la presente divulgación.
La FIG. 20 es un diagrama de flujo que ilustra una técnica de ejemplo para realizar una operación de transferencia de memoria de acuerdo con la presente divulgación.
Las FIGS. 21 y 22 son diagramas de flujo que ilustran técnicas de ejemplo para seleccionar un modo de transferencia de memoria para realizar una operación de transferencia de memoria de acuerdo con la presente divulgación. La FIG. 23 es un diagrama conceptual que ilustra una pantalla con una pluralidad de regiones de memoria intermedia alineadas con la pantalla y una superficie de destino de acuerdo con la presente divulgación.
Las FIGS. 24-26 son diagramas de flujo que ilustran técnicas de ejemplo para seleccionar un modo de transferencia de memoria para realizar una operación de transferencia de memoria de acuerdo con la presente divulgación La FIG. 27 es un diagrama de flujo que ilustra una técnica de ejemplo para realizar una operación de transferencia de memoria de acuerdo con la presente divulgación.
DESCRIPCIÓN DETALLADA
La invención se define en las reivindicaciones independientes 1 y 12 y la descripción aborda técnicas para realizar operaciones de transferencia de memoria con una unidad de procesamiento de gráficos (GPU) en base a un modo de transferencia de memoria seleccionable, y técnicas para seleccionar un modo de transferencia de memoria para realizar la totalidad o parte de una operación de transferencia de memoria con una GPU. En algunos ejemplos, las técnicas para realizar operaciones de transferencia de memoria pueden usar una GPU que está configurada para conmutar selectivamente entre usar un modo de transferencia de memoria intercalada y un modo de transferencia de memoria secuencial para realizar la totalidad o parte de una operación de transferencia de memoria. El modo de transferencia de memoria intercalada puede hacer que la GPU realice una operación de transferencia de memoria en base a un paradigma productor-consumidor donde las solicitudes de lectura y las solicitudes de escritura se intercalan entre sí. El modo de transferencia de memoria secuencial puede hacer que una GPU realice una operación de transferencia de memoria de modo que la GPU alterna entre emitir grupos de múltiples solicitudes de lectura consecutivas y grupos de múltiples solicitudes de escritura consecutivas. En ejemplos adicionales, las técnicas para seleccionar un modo de transferencia de memoria pueden usar un procesador central (por ejemplo, una CPU) y/o la GPU para seleccionar un modo de transferencia de memoria para usar para la totalidad o parte de la operación de transferencia de memoria en base a uno o más criterios.
Diferentes modos de transferencia de memoria pueden ser más eficaces que otros para diferentes tipos de operaciones de transferencia de memoria. Por ejemplo, el modo de transferencia de memoria secuencial en general puede ser más eficaz que el modo de transferencia de memoria intercalada para operaciones de transferencia de memoria más grandes, mientras que el modo de transferencia de memoria intercalada puede ser, en algunos casos, más eficaz que el modo de transferencia de memoria secuencial para operaciones de transferencia de memoria más pequeñas, en particular en el caso donde la cantidad mínima de datos a los que se accede por solicitud de lectura durante el modo de transferencia de memoria secuencial es grande. Las técnicas de la presente divulgación se pueden usar para usar selectivamente diferentes modos de transferencia de memoria que son más adecuados para tipos particulares de operaciones de transferencia de memoria, mejorando de este modo el rendimiento de las operaciones de transferencia de memoria por una GPU.
Las operaciones de transferencia de memoria pueden incluir operaciones de copia de memoria y operaciones de composición. En algunos ejemplos, las operaciones de transferencia de memoria se pueden denominar operaciones blit (es decir, transferencia de bloques de bits). Las operaciones de copia de memoria pueden implicar copiar datos desde una región de origen de una superficie de origen a una región de destino de una superficie de destino. Es decir, la GPU puede leer datos de una región de origen de una superficie de origen y escribir una réplica exacta de los datos contenidos en la región de origen de la superficie de origen en una región de destino de una superficie de destino.
Las operaciones de composición pueden implicar combinar al menos dos regiones de origen diferentes de la misma o diferentes superficies de origen de alguna manera, y escribir la combinación de las regiones de origen en una región de destino de una superficie de destino. En algunos casos, una o más de las superficies de origen pueden ser la misma superficie que la superficie de destino para una operación de composición. Por ejemplo, una operación de composición puede implicar la lectura de una única región de origen y una única región de destino, combinar las dos conjuntamente y escribir el resultado combinado de vuelta en la región de destino.
En algunos ejemplos, cuando se realiza una operación de composición, las diferentes regiones de origen se pueden combinar de acuerdo con una operación de tramado (ráster), que puede ser diferente para diferentes casos de la operación de composición. La operación de tramado puede ser una operación que especifica cómo se van a combinar los bits para una operación de composición particular. En algunos ejemplos, las operaciones de tramado pueden incluir operaciones bit a bit, tales como, por ejemplo, operaciones de lógica booleana. Las operaciones de lógica booleana pueden incluir, por ejemplo, operaciones AND, OR, NOT y/o XOR bit a bit.
En ejemplos adicionales, las operaciones de tramado pueden incluir operaciones de combinación (por ejemplo, operaciones de combinación alfa). En algunos ejemplos, una operación de combinación puede especificar un multiplicador de píxeles de origen y un multiplicador de píxeles de destino que se van a usar durante la ejecución de la operación de combinación. En dichos ejemplos, durante la ejecución de la operación de combinación, un valor de píxel de origen (por ejemplo, un valor de color de píxel de origen y/o un valor alfa de píxel de origen) se puede multiplicar por el multiplicador de píxeles de origen para producir un primer producto, un valor de píxel de destino correspondiente (por ejemplo, un valor de color de píxel de destino y/o un valor alfa de píxel de destino) se puede multiplicar por el multiplicador de píxeles de destino para producir un segundo producto, y la suma de los dos productos se puede añadir conjuntamente para producir un valor de destino para la ubicación de píxel. También son posibles otros tipos de operaciones de combinación. En otros ejemplos, las diferentes regiones de origen se pueden combinar de acuerdo con un programa de sombreado que se ejecuta en la GPU.
Las superficies de origen y de destino usadas en una operación de transferencia de memoria pueden ser la misma o diferentes superficies, y cada una puede corresponder a una matriz bidimensional de datos de píxeles. Los datos de píxeles pueden incluir valores de color rojo, verde, azul (RVA) y, en algunos casos, un valor alfa (a) para cada píxel en la superficie. Debido a que las superficies corresponden a una matriz bidimensional de datos de píxeles, los datos de píxeles para una ubicación de píxel individual en la superficie se pueden direccionar por coordenadas de fila y columna. Cada una de las regiones de origen usadas en una operación de transferencia de memoria puede corresponder a la totalidad o a un subconjunto de una superficie de origen respectiva. De forma similar, la región de destino usada en una operación de transferencia de memoria puede corresponder a la totalidad o a un subconjunto de la superficie de destino. Las regiones de origen y de destino pueden tener el mismo tamaño y conformación, y típicamente, pero no necesariamente, son regiones de forma rectangular.
Cuando una GPU realiza una operación de transferencia de memoria, las superficies de origen y las superficies de destino usadas para la operación de transferencia de memoria típicamente se almacenan en una memoria fuera del chip. En otras palabras, la memoria se puede formar, ubicar y/o disponer en un microchip, un circuito integrado y/o una pastilla que es diferente del microchip, circuito integrado y/o pastilla sobre el que se forma, ubica y/o dispone la GPU. La memoria se puede acoplar de forma comunicativa a la GPU por medio de uno o más buses y, en algunos casos, un controlador de memoria.
Cuando se realiza una operación de copia de memoria, la GPU puede leer datos desde cada una de las ubicaciones de píxeles en la región de origen y escribir los datos que se leyeron desde la región de origen en las ubicaciones de píxeles correspondientes en la región de destino. De forma similar, la realización de una operación de composición puede implicar leer los datos desde cada una de las ubicaciones en las múltiples regiones de origen, combinar los datos y escribir los datos combinados en la región de destino. Por lo tanto, una única operación de transferencia de memoria puede implicar la emisión de numerosas solicitudes de lectura y numerosas solicitudes de escritura por la GPU a una memoria fuera del chip por medio de uno o más buses.
Para realizar las operaciones de lectura y escritura de memoria para una operación de transferencia de memoria, una GPU puede usar, en algunos ejemplos, un motor de lectura y un motor de escritura. El motor de lectura puede manejar la emisión de solicitudes de lectura para la operación de transferencia de memoria y el motor de escritura puede manejar la emisión de solicitudes de escritura para la operación de transferencia de memoria. Cuando se realiza una operación de transferencia de memoria usando el modo de transferencia de memoria intercalada, los motores de lectura y escritura pueden utilizar un tipo de sincronización productor-consumidor donde el cliente de lectura emite una cantidad inicial de solicitudes de lectura y tras recibir datos de origen en respuesta a una solicitud de lectura, el cliente de escritura puede consumir los datos y emitir una solicitud de escritura correspondiente a la memoria. T ras el consumo de los datos de origen, el motor de lectura puede proseguir a emitir una solicitud de lectura posterior. Este tipo de sincronización suelta entre los motores de lectura y escritura puede hacer que los flujos de lectura y escritura se entremezclen y/o intercalen entre sí. Por lo tanto, cuando se realizan operaciones de transferencia de memoria en base a un modo de transferencia de memoria intercalada, la memoria y el bus se conmutan con frecuencia entre atender solicitudes de lectura y atender solicitudes de escritura.
Para algunos tipos de memorias, tales como, por ejemplo, una memoria de acceso aleatorio dinámica síncrona de doble velocidad de transferencia de datos (DDR SDRa M), se puede asociar una determinada cantidad de sobrecarga de tiempo de procesamiento cada vez que la memoria y/o el bus necesita conmutar entre atender a una operación de lectura y atender a una operación de escritura. Por ejemplo, cada vez que se produce una conmutación entre atender solicitudes de lectura y escritura, puede ser necesaria una cantidad particular de tiempo de inactividad para dejar que el bus se estabilice antes de que el bus cambie de dirección. Esta sobrecarga de tiempo de procesamiento se puede denominar tiempo de respuesta de lectura-escritura. Como otro ejemplo, si los flujos de lectura y escritura acceden a diferentes páginas de la memoria, la memoria puede necesitar abrir y cerrar diferentes páginas y/o bancos de memoria cada vez que se produce una conmutación entre atender solicitudes de lectura y escritura, añadiendo de este modo sobrecarga de tiempo de procesamiento adicional al conmutador de lectura-escritura.
Las operaciones de transferencia de memoria, tales como las operaciones de composición y de blit, a menudo están limitadas por la memoria. Es decir, las solicitudes de lectura y escritura de memoria necesarias para realizar dichas operaciones a menudo se convierten en un cuello de botella de rendimiento para la GPU. Por lo tanto, un esquema de sincronización de motor de lectura-escritura que da como resultado una gran cantidad de conmutaciones entre atender solicitudes de lectura y escritura puede no solo reducir la eficacia de acceso a la memoria de la GPU, sino que también puede reducir el rendimiento de la operación de transferencia de memoria global.
El modo de transferencia de memoria secuencial descrito en la presente divulgación se puede usar para reducir la sobrecarga de respuesta de lectura-escritura que se produce cuando se realizan operaciones de transferencia de memoria en una g Pu , por ejemplo, emitiendo secuencias de múltiples solicitudes de lectura consecutivas y secuencias de múltiples solicitudes de escritura consecutivas a una memoria durante intervalos de tiempo separados. Debido a que las solicitudes de lectura y escritura se emiten en grupos de múltiples solicitudes consecutivas durante intervalos de tiempo separados, se puede reducir la cantidad de veces que la memoria y/o el bus de sistema puede necesitar conmutar entre atender solicitudes de lectura y escritura, reduciendo de este modo la sobrecarga de respuesta de lectura-escritura para la operación de transferencia de memoria.
Para operaciones de transferencia de memoria relativamente grandes, la sobrecarga de respuesta de lectura-escritura reducida proporcionada por el modo de transferencia de memoria secuencial puede hacer que el modo de transferencia de memoria secuencial sea más eficaz para realizar operaciones de transferencia de memoria que el modo de transferencia de memoria intercalada. Sin embargo, para operaciones de transferencia de memoria más pequeñas, la sobrecarga adicional necesaria para realizar la sincronización en el modo de transferencia de memoria secuencial puede superar, en algunos casos, los beneficios de reducir la sobrecarga de respuesta de lectura-escritura. Además, en los casos donde la cantidad mínima de datos transferidos desde la memoria a la GPU para una solicitud de lectura durante el modo de transferencia de memoria secuencial es relativamente grande en comparación con el tamaño de la operación de transferencia de memoria (por ejemplo, una operación BLT), el modo de transferencia de memoria secuencial puede hacer que se lean datos superfluos de la memoria, reduciendo de este modo el rendimiento de la operación de transferencia de memoria.
Proporcionar la capacidad de conmutar selectivamente entre un modo de transferencia de memoria secuencial y un modo de transferencia de memoria intercalada para operaciones de transferencia de memoria particulares o partes de las mismas de acuerdo con las técnicas de la presente divulgación puede permitir que una GPU use selectivamente el modo de transferencia de memoria secuencial para incrementar la eficacia de la memoria en casos donde los beneficios de un modo de este tipo no se superen y/o disminuyan por otros factores, y que use el modo de transferencia de memoria intercalada en los casos donde los beneficios del modo de transferencia de memoria secuencial se superen y/o disminuyan por otros factores. Permitiendo que una GPU use selectivamente diferentes modos de transferencia de memoria que se adaptan mejor a tipos particulares (por ejemplo, tamaños) de operaciones de transferencia de memoria, las técnicas de la presente divulgación pueden mejorar el rendimiento global de una GPU que realiza una variedad de diferentes tipos de operaciones de transferencia de memoria.
En algunos ejemplos, una GPU y/o un controlador de GPU que se ejecuta en un procesador de aplicaciones puede seleccionar un modo de transferencia de memoria para realizar la totalidad o parte de una operación de transferencia de memoria en base a un tamaño de la operación de transferencia de memoria. El tamaño de la operación de transferencia de memoria se puede referir a la cantidad de datos que se va a transferir por la operación de transferencia de memoria. Por ejemplo, si el tamaño de la operación de transferencia de memoria es mayor que un umbral, a continuación la GPU y/o el controlador de GPU puede seleccionar el modo de transferencia de memoria secuencial como el modo de transferencia de memoria que se va a usar para realizar la totalidad o parte de la operación de transferencia de memoria. Como otro ejemplo, si el tamaño de la operación de transferencia de memoria no es mayor que un umbral, a continuación la GPU y/o el controlador de GPU puede seleccionar el modo de transferencia de memoria intercalada como el modo de transferencia de memoria que se va a usar para realizar la totalidad o parte de la operación de transferencia de memoria.
En ejemplos adicionales, una GPU y/o un controlador de GPU que se ejecuta en un procesador de aplicaciones puede seleccionar un modo de transferencia de memoria para realizar la totalidad o parte de una operación de transferencia de memoria en base a una cantidad de superposición que tiene una región de destino definida para una operación de transferencia de memoria con una región de memoria intermedia fija alineada con la pantalla. En algunos casos, una superficie puede corresponder a los píxeles contenidos en un monitor o pantalla. La pantalla se puede subdividir en una pluralidad de regiones, teniendo cada una un tamaño fijo que corresponde al tamaño de la memoria intermedia que se usa para almacenar los datos leídos. Estas regiones subdivididas se pueden denominar regiones de memoria intermedia fijas alineadas con la pantalla. En dichos ejemplos, cuando funciona en el modo de transferencia de memoria secuencial, la GPU se puede configurar para transferir datos entre la memoria y la GPU en unidades de datos de un tamaño fijo que corresponden al tamaño de las regiones de memoria intermedia fijas alineadas con la pantalla.
Si una región de destino cubre parcialmente, pero no totalmente, una región de memoria intermedia fija alineada con la pantalla particular, a continuación la GPU y/o el controlador de GPU puede seleccionar el modo de transferencia de memoria intercalada como el modo de transferencia de memoria para esa región de la pantalla porque la memoria intermedia en la que se almacenarán los datos leídos no se utilizará totalmente. Si se seleccionara el modo de memoria secuencial en un caso de este tipo, la lectura de memoria de tamaño fijo haría que se leyeran datos superfluos de la memoria, lo que puede superar cualquier ahorro de respuesta de lectura-escritura que se produciría usando el modo de transferencia de memoria secuencial. Por otra parte, si una región de destino cubre totalmente una región de memoria intermedia fija alineada con la pantalla particular, a continuación la GPU y/o el controlador de GPU puede seleccionar el modo de transferencia de memoria secuencial como el modo de transferencia de memoria para esa región de la pantalla porque la memoria intermedia en la que se almacenarán los datos leídos se utilizará totalmente y no se perderá tiempo recuperando datos superfluos.
En otros ejemplos, una GPU y/o un controlador de GPU que se ejecuta en un procesador de aplicaciones puede seleccionar un modo de transferencia de memoria para realizar la totalidad o parte de una operación de transferencia de memoria en base a un tamaño y/o una complejidad de un programa de sombreado que se usa para realizar la operación de transferencia de memoria (por ejemplo, una operación de composición). El tamaño y/o la complejidad del programa de sombreado pueden ser indicativos de si es probable que el rendimiento de las operaciones de sombreado para una operación de transferencia de memoria particular sea un cuello de botella de rendimiento para la operación de transferencia de memoria.
En dichos ejemplos, si el tamaño y/o complejidad del programa de sombreado es inferior a un umbral, entonces la GPU y/o el controlador de GPU puede determinar que el rendimiento de las operaciones de sombreado probablemente no sea un cuello de botella de rendimiento para la operación de transferencia de memoria. En un caso de este tipo, la GPU y/o el controlador de GPU puede seleccionar el modo de transferencia de memoria secuencial para la operación de transferencia de memoria porque es posible que la eficacia de acceso a la memoria pueda ser un cuello de botella de rendimiento para la operación de transferencia de memoria. Por otra parte, si el tamaño y/o complejidad del programa de sombreado es mayor que un umbral, entonces la GPU y/o el controlador de GPU puede determinar que el rendimiento de las operaciones de sombreado probablemente sea un cuello de botella de rendimiento para la operación de transferencia de memoria. En un caso de este tipo, la GPU y/o controlador de GPU puede seleccionar el modo de transferencia de memoria intercalada para la operación de transferencia de memoria porque no se necesita un incremento en la eficacia de memoria y porque el aplazamiento de las operaciones de lectura que se produce en el modo de transferencia de memoria secuencial podría tener el potencial de privar de datos al programa de sombreado, lo que típicamente no es deseable si el programa de sombreado es un cuello de botella de rendimiento.
En ejemplos adicionales, la GPU puede seleccionar y configurar un tamaño de línea de memoria caché para una memoria caché en base al modo de transferencia de memoria seleccionado. La memoria caché puede corresponder a una memoria intermedia en la GPU en la que se almacenan los datos leídos. En dichos ejemplos, si el modo de transferencia de memoria es el modo de transferencia de memoria secuencial, a continuación la GPU puede seleccionar un tamaño de línea de memoria caché que sea igual a la capacidad total de la memoria caché para permitir una agrupación de operaciones de lectura y escritura tan grande como sea posible. Por otra parte, si el modo de transferencia de memoria es el modo de transferencia de memoria intercalada, a continuación la GPU puede seleccionar un tamaño de línea de memoria caché que sea inferior a la capacidad total de la memoria caché para permitir que múltiples regiones de datos se almacenen en caché simultáneamente cuando se atiende a las solicitudes intercaladas.
De acuerdo con algunos aspectos de la presente divulgación, se describen técnicas para señalizar un modo de transferencia de memoria que se va a usar por una GPU para realizar una operación de transferencia de memoria. Las técnicas de señalización pueden permitir que un controlador de GPU y/o una aplicación de usuario que se ejecuta en un procesador de aplicaciones central controle el modo de transferencia de memoria que se usa para realizar una operación de transferencia de memoria.
En algunos ejemplos, se puede añadir un campo de información que especifica un modo de transferencia de memoria a uno o más comandos de GPU existentes que están configurados para ejecutarse por la GPU. El campo de información puede ser, en algunos casos, un bit de modo único que especifica un modo de transferencia de memoria que se va a usar para una operación de transferencia de memoria asociada con la instrucción. Por ejemplo, un controlador de gráficos puede atender a un comando de blit a nivel de usuario especificando las regiones de memoria de origen y de destino a la GPU y emitiendo una instrucción de llamada de extracción 3D (tridimensional) a la GPU. La instrucción de llamada de extracción 3D puede incluir un bit de modo que indica el modo de transferencia de memoria que se va a usar durante la ejecución de la instrucción de llamada de extracción 3D. La GPU se puede configurar para realizar una operación de transferencia de memoria en base al modo de transferencia de memoria especificado en la instrucción.
En ejemplos adicionales, la GPU puede incluir una variable de estado de modo de transferencia de memoria que especifica un modo de transferencia de memoria que se va a usar para realizar una operación de transferencia de memoria. En dichos ejemplos, un comando de GPU (por ejemplo, un comando emitido a la GPU desde un controlador de GPU) se puede usar para programar un estado de la variable de estado del modo de transferencia de memoria a un valor indicativo de un modo de transferencia de memoria que se va a usar para realizar una operación de transferencia de memoria. La GPU se puede configurar para realizar la operación de transferencia de memoria en base al estado de la variable de estado de modo de transferencia de memoria.
En otros ejemplos, el modo de transferencia de memoria puede ser parte del estado de GPU que se modifica como parte de un flujo de comandos de GPU. El flujo de comandos de GPU puede incluir tanto comandos de configuración de registro de estado, así como instrucciones (o punteros de instrucción) para código que se ejecuta por uno o más procesadores de sombreado de GPU.
En ejemplos adicionales, se puede añadir una instrucción a la interfaz de programación de aplicaciones (API) para el controlador de GPU. La instrucción puede incluir un indicador de modo de transferencia de memoria que indica un modo de transferencia de memoria que se va a usar para realizar la operación de transferencia de memoria. El controlador de GPU se puede configurar para hacer que la GPU realice una operación de transferencia de memoria en base al indicador del modo de transferencia de memoria. De esta manera, una aplicación de usuario puede especificar el modo de transferencia de memoria que se va a usar por una GPU cuando realice una operación de transferencia de memoria.
La FIG. 1 es un diagrama de bloques que ilustra un dispositivo informático 2 de ejemplo que se puede usar para implementar las técnicas de transferencia de memoria multimodal de la presente divulgación y las técnicas de selección de modo de transferencia de memoria de la presente divulgación. El dispositivo informático 2 puede comprender un ordenador personal, un ordenador de escritorio, un ordenador portátil, una estación de trabajo informática, una plataforma o consola de videojuegos, un dispositivo de comunicación inalámbrica (tal como, por ejemplo, un teléfono móvil, un teléfono celular, un teléfono satelital y/o un terminal de teléfono móvil), un teléfono fijo, un teléfono de Internet, un dispositivo de mano tal como un dispositivo portátil de videojuegos o un asistente digital personal (PDA), un reproductor de música personal, un reproductor de vídeo, un dispositivo de pantalla, un televisor, un descodificador de televisión, un servidor, un dispositivo de red intermedio, un ordenador central o cualquier otro tipo de dispositivo que procesa y/o muestra datos gráficos.
Como se ilustra en el ejemplo de la FIG. 1, el dispositivo informático 2 incluye una interfaz de usuario 4, una CPU 6, un subsistema de memoria 8, una unidad de procesamiento de gráficos (GPU) 10, una memoria caché de GPU 12, una interfaz de pantalla 14, una pantalla 16 y un bus 18. La interfaz de usuario 4, la CPU 6, el subsistema de memoria 8, la GPU 10 y la interfaz de pantalla 14 se pueden comunicar entre sí usando el bus 18. Cabe destacar que la configuración específica de los buses y las interfaces de comunicación entre los diferentes componentes mostrados en la FIG. 1 es simplemente ejemplar, y se pueden usar otras configuraciones de dispositivos informáticos y/u otros sistemas de procesamiento de gráficos con los mismos o diferentes componentes para implementar las técnicas de la presente divulgación.
La CPU 6 puede comprender un procesador de propósito general o uno de propósito especial que controle el funcionamiento del dispositivo informático 2. Un usuario puede proporcionar datos de entrada al dispositivo informático 2 para hacer que la c Pu 6 ejecute una o más aplicaciones de software. Las aplicaciones de software que se ejecutan en la CPU 6 pueden incluir, por ejemplo, un sistema operativo, una aplicación de procesador de textos, una aplicación de correo electrónico, una aplicación de hoja de cálculo, una aplicación de reproductor multimedia, una aplicación de videojuegos, una aplicación de interfaz gráfica de usuario u otro programa. El usuario puede proporcionar datos de entrada al dispositivo informático 2 por medio de uno o más dispositivos de entrada (no mostrados) tales como un teclado, un ratón, un micrófono, un panel táctil u otro dispositivo de entrada que esté acoplado al dispositivo informático 2 por medio de la interfaz de usuario 4.
Las aplicaciones de software que se ejecutan en la CPU 6 pueden incluir una o más instrucciones de renderizado de gráficos que den instrucciones a la GPU 10 para hacer el renderizado de datos de gráficos en la pantalla 16. En algunos ejemplos, las instrucciones de software se pueden ajustar a una interfaz de programación de aplicaciones (API) de gráficos, tal como, por ejemplo, una API de biblioteca de gráficos abierta (OpenGL®), una API de sistemas integrados de biblioteca de gráficos abierta (OpenGL ES), una API de Direct3D, una API de DirectX, una API de RenderMan, una API de WebGL o cualquier otra API de gráficos estándar pública o patentada. Para procesar las instrucciones de renderizado de gráficos, la CPU 6 puede emitir uno o más comandos de renderizado de gráficos a la GPU 10 para hacer que la GPU 10 realice algo o la totalidad del renderizado de los datos de gráficos. En algunos ejemplos, los datos de gráficos que se van a renderizar pueden incluir una lista de primitivas de gráficos, por ejemplo, puntos, líneas, triángulos, cuadriláteros, tiras de triángulos, parches, etc.
El subsistema de memoria 8 se puede configurar para atender solicitudes de acceso a la memoria recibidas desde otros componentes dentro del dispositivo informático 2. Por ejemplo, el subsistema de memoria 8 puede atender solicitudes de acceso a la memoria desde la CPU 6, la GPU 10 y/o la interfaz de pantalla 14. Las solicitudes de acceso a la memoria pueden incluir solicitudes de acceso de lectura y solicitudes de acceso de escritura. El subsistema de memoria 8 está acoplado de forma comunicativa a la CPU 6, la GPU 10, la interfaz de usuario 4 y la interfaz de pantalla 14 por medio del bus 18.
El subsistema de memoria 8 incluye un controlador de memoria 20 y una memoria 22. El controlador de memoria 20 facilita la transferencia de datos que entran y salen de la memoria 22. Por ejemplo, el controlador de memoria 20 puede recibir solicitudes de lectura de memoria y solicitudes de escritura de memoria desde la CPU 6 y/o GPU 10, y atender dichas solicitudes con respecto a la memoria 22 para proporcionar servicios de memoria para los componentes en el dispositivo informático 2.
Una solicitud de lectura puede especificar una dirección de memoria o un intervalo de direcciones de memoria desde el que se deben devolver los datos al solicitante. Una solicitud de escritura puede especificar una dirección de memoria o un intervalo de direcciones de memoria en el que se deben escribir datos especificados. Los datos que se van a escribir se pueden suministrar al controlador de memoria 20 por el solicitante (por ejemplo, la CPU 6 y/o la GPU 10) por medio de uno o más buses de datos junto con la solicitud de escritura. En algunos ejemplos, los datos que se van a escribir pueden formar parte de la solicitud de escritura. En respuesta a la recepción de solicitudes de acceso a la memoria, el controlador de memoria 20 puede emitir uno o más comandos de lectura a la memoria 22 y/o uno o más comandos de escritura a la memoria 22 para atender las solicitudes de lectura y escritura.
El controlador de memoria 20 está acoplado de forma comunicativa a la memoria 22 por medio de un bus de memoria dedicado y a otros componentes (por ejemplo, la CPU 6 y la GPU 10) por medio del bus 18. Aunque el controlador de memoria 20 se ilustra en el dispositivo informático 2 de ejemplo de la FIG. 1 como un módulo de procesamiento que está separado tanto de la CPU 6 como de la memoria 22, en otros ejemplos, algo o la totalidad de la funcionalidad del controlador de memoria 20 se puede implementar en una o más de la CPU 6, la GPU 10 y la memoria 22.
La memoria 22 puede almacenar módulos de programa y/o instrucciones que son accesibles para su ejecución por la CPU 6 y/o datos para su uso por los programas que se ejecutan en la CPU 6. Por ejemplo, la memoria 22 puede almacenar aplicaciones de usuario y datos de gráficos asociados con las aplicaciones. La memoria 22 también puede almacenar información para su uso por y/o generada por otros componentes del dispositivo informático 2. Por ejemplo, la memoria 22 puede actuar como una memoria de dispositivo para la GPU 10 y puede almacenar datos que se van a hacer funcionar por la GPU 10, así como datos resultantes de operaciones realizadas por la GPU 10. Por ejemplo, la memoria 22 puede almacenar cualquier combinación de superficies, superficies de origen, superficies de destino, memorias intermedias de textura, memorias intermedias de profundidad, memorias intermedias de plantillas, memorias intermedias de vértices, memorias intermedias de tramas o similares. Además, la memoria 22 puede almacenar flujos de comandos para su procesamiento por la GPU 10. La memoria 22 puede incluir una o más memorias o dispositivos de almacenamiento volátiles o no volátiles, tales como, por ejemplo, memoria de acceso aleatorio (RAM), RAM estática (SRAM), RAM dinámica (DRAM), memoria de acceso aleatorio dinámica síncrona (SDRAM), memoria de sólo lectura (ROM), ROM programable borrable (EPROM), ROM programable borrable eléctricamente (Ee PROM), memoria flash, un medio de datos magnético o un medio de almacenamiento óptico. En algunos ejemplos, la memoria 22 puede ser una SDRAM de doble velocidad de transferencia de datos (d Dr ), tal como, por ejemplo, una DDR1 SDRAM, una DDR2 SDRAM, una DDR3 SDRAM, una DDR4 SDRAM, etc.
La GPU 10 se puede configurar para ejecutar comandos que se emiten a la GPU 10 por la CPU 6. Los comandos ejecutados por la GPU 10 pueden incluir comandos de gráficos, comandos de llamada de extracción, comandos de programación de estado de GPU, comandos de transferencia de memoria, comandos informáticos de propósito general, comandos de ejecución de núcleo, etc. Los comandos de transferencia de memoria pueden incluir, por ejemplo, comandos de copia de memoria, comandos de composición de memoria y comandos de blit.
En algunos ejemplos, la GPU 10 se puede configurar para realizar operaciones de gráficos para renderizar una o más primitivas de gráficos a la pantalla 16. En dichos ejemplos, cuando una de las aplicaciones de software que se ejecutan en la CPU 6 requiere procesamiento de gráficos, la CPU 6 puede proporcionar datos de gráficos a la GPU 10 para su renderizado en la pantalla 16 y emitir uno o más comandos de gráficos a la GPU 10. Los comandos de gráficos pueden incluir, por ejemplo, comandos de llamada de extracción, comandos de programación de estado de GPU, comandos de transferencia de memoria, comandos de blit, etc. Los datos de gráficos pueden incluir memorias intermedias de vértice, datos de textura, datos de superficie, etc. En algunos ejemplos, la c Pu 6 puede proporcionar los comandos y los datos de gráficos a la GPU 10 escribiendo los comandos y los datos de gráficos en la memoria 22, a la que se puede acceder por la GPU 10.
En otros ejemplos, la GPU 10 se puede configurar para realizar informática de propósito general para aplicaciones que se ejecutan en la CPU 6. En dichos ejemplos, cuando una de las aplicaciones de software que se ejecutan en la CPU 6 decide descargar una tarea computacional a la GPU 10, la CPU 6 puede proporcionar datos informáticos de propósito general a la GPU 10, y emitir uno o más comandos informáticos de propósito general para la GPU 10. Los comandos informáticos de propósito general pueden incluir, por ejemplo, comandos de ejecución de núcleo, comandos de transferencia de memoria, etc. En algunos ejemplos, la CPU 6 puede proporcionar los comandos y los datos informáticos de propósito general a la GPU 10 escribiendo los comandos y los datos de gráficos en la memoria 22, a la que se puede acceder por la GPU 10.
La GPU 10 se puede construir, en algunos casos, con una estructura altamente paralela que proporciona un procesamiento más eficaz de las operaciones vectoriales que la CPU 6. Por ejemplo, la GPU 10 puede incluir una pluralidad de elementos de procesamiento que están configurados para funcionar en múltiples vértices, puntos de control, píxeles y/u otros datos de manera paralela. La naturaleza altamente paralela de la g Pu 10 puede permitir, en algunos casos, que la GPU 10 renderice imágenes de gráficos (por ejemplo, GUI y escenas de gráficos bidimensionales (2D) y/o tridimensionales (3D)) en la pantalla 16 más rápidamente que el renderizado de las imágenes usando la CPU 6. Además, la naturaleza altamente paralela de la GPU 10 puede permitir que la GPU 10 procese determinados tipos de operaciones vectoriales y matriciales para aplicaciones informáticas de propósito general más rápidamente que la CPU 6.
La GPU 10 se puede integrar, en algunos ejemplos, en una placa base del dispositivo informático 2. En otros casos, la GPU 10 puede estar presente en una tarjeta de gráficos que esté instalada en un puerto en la placa base del dispositivo informático 2 o se puede incorporar de otro modo dentro de un dispositivo periférico configurado para interactuar con el dispositivo informático 2. En otros casos, la GPU 10 puede estar ubicada en el mismo microchip que la CPU 6 que forma un sistema en un chip (SoC). La GPU 10 puede incluir uno o más procesadores, tales como uno o más microprocesadores, circuitos integrados específicos de la aplicación (ASIC), matrices de puertas programables in situ (FPGA), procesadores de señales digitales (DSP) u otros circuitos lógicos integrados o discretos equivalentes.
En algunos ejemplos, la GPU 10 se puede acoplar directamente a la memoria caché de GPU 12. Por tanto, la GPU 10 puede leer datos y escribir datos en la memoria caché de GPU 12 sin usar necesariamente el bus 18. En otras palabras, la GPU 10 puede procesar datos localmente usando un almacenamiento local, en lugar de la memoria fuera del chip. Esto permite que la GPU 10 funcione de una manera más eficaz eliminando la necesidad de que la GPU 10 lea y escriba datos por medio del bus 18, que puede experimentar un tráfico de bus intenso. En algunos casos, sin embargo, la GPU 10 puede no incluir una memoria caché separada, sino que en su lugar utilice la memoria 22 por medio del bus 18. La memoria caché de GPU 12 puede incluir una o más memorias o dispositivos de almacenamiento volátiles o no volátiles, tales como, por ejemplo, memoria de acceso aleatorio (RAM), RAM estática (SRAM), RAM dinámica (DRAM), ROM programable borrable (EPROM), ROM programable borrable eléctricamente (EEPROM), memoria flash, un medio de datos magnético o un medio de almacenamiento óptico.
La CPU 6 y/o la GPU 10 pueden almacenar datos de imágenes renderizadas en una memoria intermedia de tramas que se adjudica dentro de la memoria 22. La interfaz de pantalla 14 puede recuperar los datos de la memoria intermedia de tramas y configurar la pantalla 16 para mostrar la imagen representada por los datos de imágenes renderizadas. En algunos ejemplos, la interfaz de pantalla 14 puede incluir un convertidor de digital a analógico (DAC) que está configurado para convertir los valores digitales recuperados de la memoria intermedia de tramas en una señal analógica consumible por la pantalla 16. En otros ejemplos, la interfaz de pantalla 14 puede pasar los valores digitales directamente a la pantalla 16 para su procesamiento. La pantalla 16 puede incluir un monitor, un televisor, un dispositivo de proyección, una pantalla de cristal líquido (LCD), un panel de pantalla de plasma, una matriz de diodos emisores de luz (LED), una pantalla de tubo de rayos catódicos (CRT), papel electrónico, una pantalla de emisión de electrones de conducción de superficie (SED), una pantalla de televisión láser, una pantalla de nanocristales u otro tipo de unidad de pantalla. La pantalla 16 puede estar integrada dentro del dispositivo informático 2. Por ejemplo, la pantalla 16 puede ser una pantalla de un terminal de teléfono móvil o un ordenador de tableta. De forma alternativa, la pantalla 16 puede ser un dispositivo independiente acoplado al dispositivo informático 2 por medio de un enlace de comunicaciones por cable o inalámbrico. Por ejemplo, la pantalla 16 puede ser un monitor de ordenador o una pantalla plana conectada a un ordenador personal por medio de un cable o un enlace inalámbrico.
El bus 18 se puede implementar usando cualquier combinación de estructuras de bus y protocolos de bus, incluyendo estructuras y protocolos de bus de primera, segunda y tercera generación, estructuras y protocolos de bus compartido, estructuras y protocolos de bus punto a punto, estructuras y protocolos de bus unidireccional y estructuras y protocolos de bus bidireccional. Los ejemplos de diferentes estructuras y protocolos de bus que se pueden usar para implementar el bus 18 incluyen, por ejemplo, un bus HyperT ransport, un bus InfiniBand, un bus de puerto de gráficos avanzado, un bus de interconexión de componentes periféricos (PCI), un bus PCI Express, un bus avanzado de alto rendimiento (AHB) de arquitectura de bus de microcontrolador avanzado (AMBA), un bus periférico avanzado AMBA (APB) y un bus de interfaz extensible avanzada (AXI) AMBA. También se pueden usar otros tipos de estructuras y protocolos de bus.
De acuerdo con la presente divulgación, una o ambas de la CPU 6 y la GPU 10 se pueden configurar para seleccionar un modo de transferencia de memoria para realizar al menos parte de una operación de transferencia de memoria, y la GPU 10 se puede configurar para realizar la operación de transferencia de memoria en base al modo de transferencia de memoria seleccionado. El modo de transferencia de memoria se puede seleccionar de un conjunto de al menos dos modos de transferencia de memoria diferentes. En algunos ejemplos, el conjunto de al menos dos modos de transferencia de memoria diferentes puede incluir un modo de transferencia de memoria intercalada y un modo de transferencia de memoria secuencial.
En algunos ejemplos, el modo de transferencia de memoria puede indicar cómo se van a sincronizar la emisión de solicitudes de lectura y la emisión de solicitudes de escritura durante la realización de una operación de transferencia de memoria. En dichos ejemplos, las técnicas de la presente divulgación pueden permitir que la GPU 10 conmute selectivamente entre al menos dos modos de sincronización diferentes para la emisión de solicitudes de lectura y solicitudes de escritura. Por ejemplo, si se selecciona el modo de transferencia de memoria intercalada como el modo de transferencia de memoria a usar para realizar la totalidad o parte de una operación de transferencia de memoria, entonces la GPU 10 puede hacer que se emitan solicitudes de lectura y solicitudes de escritura en base a un paradigma de sincronización productor-consumidor. Por ejemplo, un motor de escritura puede consumir datos de origen en respuesta a que la GPU 10 recibe los datos de origen (por ejemplo, en respuesta a que se producen datos de origen), y un motor de lectura puede emitir solicitudes de lectura en respuesta a que los datos de origen se consumen por el motor de escritura. Por otra parte, si se selecciona el modo de transferencia de memoria secuencial como el modo de transferencia de memoria a usar para realizar la totalidad o parte de una operación de transferencia de memoria, entonces la GPU 10 puede hacer que se emitan solicitudes de lectura y solicitudes de escritura en base a un paradigma de sincronización de exclusión mutua. Por ejemplo, la GPU 10 puede alternar entre habilitar a un motor de lectura para emitir múltiples solicitudes de lectura consecutivas y habilitar a un motor de escritura para emitir múltiples solicitudes de escritura consecutivas durante intervalos de tiempo separados.
En otros ejemplos, el modo de transferencia de memoria puede indicar un nivel de granularidad en el que las solicitudes de lectura y las solicitudes de escritura se han de intercalar durante la realización de una operación de transferencia de memoria. En dichos ejemplos, las técnicas de la presente divulgación pueden permitir que la GPU 10 conmute selectivamente entre al menos dos granularidades diferentes de intercalación de solicitudes de lectura y solicitudes de escritura para la realización de operaciones de transferencia de memoria. Por ejemplo, si se selecciona el modo de transferencia de memoria intercalada como el modo de transferencia de memoria a usar para realizar la totalidad o parte de una operación de transferencia de memoria, entonces la GPU 10 puede hacer que las solicitudes de lectura y las solicitudes de escritura se intercalen con un nivel de granularidad relativamente fino. Por ejemplo, las solicitudes de lectura únicas y las solicitudes de escritura únicas se pueden intercalar entre sí. Por otra parte, si se selecciona el modo de transferencia de memoria secuencial como el modo de transferencia de memoria a usar para realizar la totalidad o parte de una operación de transferencia de memoria, entonces la GPU 10 puede hacer que las solicitudes de lectura y las solicitudes de escritura se intercalen con un nivel de granularidad relativamente normal. Por ejemplo, la GPU 10 puede alternar entre emitir grupos de múltiples solicitudes de lectura consecutivas y grupos de múltiples solicitudes de escritura consecutivas.
En ejemplos adicionales, el modo de transferencia de memoria puede indicar si se requiere que se emitan solicitudes de lectura y solicitudes de escritura por la GPU 10 en grupos de múltiples solicitudes de lectura consecutivas y grupos de múltiples solicitudes de escritura consecutivas. En dichos ejemplos, las técnicas de la presente divulgación pueden permitir que la GPU 10 conmute selectivamente entre: (1) requerir que las solicitudes de lectura y las solicitudes de escritura se emitan en grupos de múltiples solicitudes de lectura consecutivas y grupos de múltiples solicitudes de escritura consecutivas; y (2) no requerir que las solicitudes de lectura y las solicitudes de escritura se emitan en grupos de múltiples solicitudes de lectura consecutivas y grupos de múltiples solicitudes de escritura consecutivas.
Por ejemplo, si se selecciona el modo de transferencia de memoria intercalada como el modo de transferencia de memoria a usar para realizar la totalidad o parte de una operación de transferencia de memoria, entonces la GPU 10 puede no requerir que se emitan solicitudes de lectura y solicitudes de escritura en grupos de múltiples solicitudes de lectura consecutivas y grupos de múltiples solicitudes de escritura consecutivas. Por ejemplo, la GPU 10 puede permitir que un motor de lectura y un motor de escritura emitan independientemente solicitudes de memoria individuales en base a un paradigma productor-consumidor. Por otra parte, si se selecciona el modo de transferencia de memoria secuencial como el modo de transferencia de memoria a usar para realizar la totalidad o parte de una operación de transferencia de memoria, entonces la GPU 10 puede requerir que se emitan solicitudes de lectura y solicitudes de escritura en grupos de múltiples secuencias de lectura consecutivas y grupos de múltiples solicitudes de escritura consecutivas. Por ejemplo, la GPU 10 puede alternar entre otorgar acceso exclusivo a la memoria a un motor de lectura para emitir múltiples solicitudes de lectura consecutivas a la memoria 22, y otorgar acceso exclusivo a la memoria a un motor de escritura para emitir múltiples solicitudes de escritura consecutivas a la memoria 22.
En algunos ejemplos, la GPU 10 y/o la CPU 6 (por ejemplo, un controlador de GPU que se ejecuta en la CPU 6) puede seleccionar un modo de transferencia de memoria para realizar la totalidad o parte de una operación de transferencia de memoria en base a un tamaño de la operación de transferencia de memoria. El tamaño de la operación de transferencia de memoria se puede referir a la cantidad de datos que se va a transferir por la operación de transferencia de memoria. Por ejemplo, si el tamaño de la operación de transferencia de memoria es mayor que un umbral, a continuación la GPU 10 y/o la CPU 6 puede seleccionar el modo de transferencia de memoria secuencial como el modo de transferencia de memoria que se va a usar para realizar la totalidad o parte de la operación de transferencia de memoria. Por otra parte, si el tamaño de la operación de transferencia de memoria no es mayor que un umbral, a continuación la GPU 10 y/o la CPU 6 puede seleccionar el modo de transferencia de memoria intercalada como el modo de transferencia de memoria que se va a usar para realizar la totalidad o parte de la operación de transferencia de memoria.
En ejemplos adicionales, la GPU 10 y/o la CPU 6 (por ejemplo, un controlador de GPU que se ejecuta en la CPU 6) puede seleccionar un modo de transferencia de memoria para realizar la totalidad o parte de una operación de transferencia de memoria en base a una cantidad de superposición que tiene una región de destino definida para la operación de transferencia de memoria con una región de memoria intermedia fija alineada con la pantalla. En algunos casos, una superficie puede corresponder a los píxeles contenidos en un monitor o pantalla. La pantalla se puede subdividir en una pluralidad de regiones, teniendo cada una un tamaño fijo que corresponde al tamaño de la memoria intermedia que se usa para almacenar los datos leídos. Estas regiones subdivididas se pueden denominar regiones de memoria intermedia fijas alineadas con la pantalla. En dichos ejemplos, cuando funciona en el modo de transferencia de memoria secuencial, la GPU 10 se puede configurar para transferir datos entre la memoria 22 y la GPU 10 en unidades de datos de un tamaño fijo que corresponden al tamaño de las regiones de memoria intermedia fijas alineadas con la pantalla.
Si una región de destino cubre parcialmente, pero no totalmente, una región de memoria intermedia fija alineada con la pantalla particular, a continuación la GPU 10 y/o la CPU 6 puede seleccionar el modo de transferencia de memoria intercalada como el modo de transferencia de memoria para esa región de la pantalla porque la memoria intermedia en la que se almacenarán los datos leídos no se utilizará totalmente. Si se seleccionara el modo de memoria secuencial en un caso de este tipo, la lectura de memoria de tamaño fijo haría que se leyeran datos superfluos de la memoria, lo que puede superar cualquier ahorro de respuesta de lectura-escritura que se produciría usando el modo de transferencia de memoria secuencial. Por otra parte, si una región de destino cubre totalmente una región de memoria intermedia fija alineada con la pantalla particular, a continuación la GPU 10 y/o la CPU 6 puede seleccionar el modo de transferencia de memoria secuencial como el modo de transferencia de memoria para esa región de la pantalla porque la memoria intermedia en la que se almacenarán los datos leídos se utilizará totalmente y no se perderá tiempo recuperando datos superfluos.
En otros ejemplos, la GPU 10 y/o la CPU 6 (por ejemplo, un controlador de GPU que se ejecuta en la CPU 6) puede seleccionar un modo de transferencia de memoria para realizar una operación de transferencia de memoria en base a un tamaño y/o una complejidad de un programa de sombreado que se usa para realizar la operación de transferencia de memoria (por ejemplo, una operación de composición). El tamaño y/o la complejidad del programa de sombreado pueden ser indicativos de si es probable que el rendimiento de las operaciones de sombreado para una operación de transferencia de memoria particular sea un cuello de botella de rendimiento para la operación de transferencia de memoria.
En dichos ejemplos, si el tamaño y/o complejidad del programa de sombreado es inferior a un umbral, a continuación la GPU 10 y/o la CPU 6 puede determinar que el rendimiento de las operaciones de sombreado probablemente no sea un cuello de botella de rendimiento para la operación de transferencia de memoria. En un caso de este tipo, la GPU 10 y/o la CPU 6 puede seleccionar el modo de transferencia de memoria secuencial para la operación de transferencia de memoria porque es posible que la eficacia de acceso a la memoria pueda ser un cuello de botella de rendimiento para la operación de transferencia de memoria. Por otra parte, si el tamaño y/o complejidad del programa de sombreado es mayor que un umbral, a continuación la GPU 10 y/o la CPU 6 puede determinar que el rendimiento de las operaciones de sombreado probablemente sea un cuello de botella de rendimiento para la operación de transferencia de memoria. En un caso de este tipo, la GPU 10 y/o la CPU 6 puede seleccionar el modo de transferencia de memoria intercalada para la operación de transferencia de memoria porque no se necesita un incremento en la eficacia de memoria y porque el aplazamiento de las operaciones de lectura que se produce en el modo de transferencia de memoria secuencial podría tener el potencial de privar de datos al programa de sombreado, lo que típicamente no es deseable si el programa de sombreado es un cuello de botella de rendimiento.
En ejemplos adicionales, la GPU 10 y/o la CPU 6 (por ejemplo, un controlador de GPU que se ejecuta en la CPU 6) puede seleccionar un modo de transferencia de memoria en base a una determinación de si es probable que la ejecución del programa de sombreado sea un cuello de botella de rendimiento para la operación de transferencia de memoria. Por ejemplo, la GPU 10 y/o la CPU 6 puede seleccionar el modo de transferencia de memoria secuencial como el modo de transferencia de memoria en respuesta a la determinación de que la ejecución del programa de sombreado es probable que no sea un cuello de botella de rendimiento para la operación de transferencia de memoria. Por otra parte, la GPU 10 y/o la CPU 6 la selección del modo de transferencia de memoria intercalada como el modo de transferencia de memoria en respuesta a la determinación de que la ejecución del programa de sombreado es probable que sea un cuello de botella de rendimiento para la operación de transferencia de memoria.
En ejemplos adicionales, la GPU 10 puede seleccionar y configurar un tamaño de línea de memoria caché para una memoria caché en base al modo de transferencia de memoria seleccionado. La memoria caché puede corresponder a la memoria intermedia en la GPU en la que se almacenan los datos leídos. En dichos ejemplos, si el modo de transferencia de memoria es el modo de transferencia de memoria secuencial, a continuación la GPU puede seleccionar un tamaño de línea de memoria caché que sea igual a la capacidad total de la memoria caché para permitir una agrupación de operaciones de lectura y escritura tan grande como sea posible. Por otra parte, si el modo de transferencia de memoria es el modo de transferencia de memoria intercalada, a continuación la GPU puede seleccionar un tamaño de línea de memoria caché que sea inferior a la capacidad total de la memoria caché para permitir que múltiples regiones de datos se almacenen en caché simultáneamente cuando se atiende a las solicitudes intercaladas.
En algunos ejemplos, uno o más de otros componentes dentro del dispositivo informático 2 (por ejemplo, la CPU 6) pueden señalar un modo de transferencia de memoria que se va a usar por la GPU 10 para realizar una operación de transferencia de memoria. Las técnicas de señalización pueden permitir que un controlador de GPU y/o una aplicación de usuario que se ejecuta en el procesador de aplicaciones controle el modo de transferencia de memoria que se usa para realizar una operación de transferencia de memoria.
Diferentes modos de transferencia de memoria pueden ser más eficaces que otros para diferentes tipos de operaciones de transferencia de memoria. Por ejemplo, el modo de transferencia de memoria secuencial en general puede ser más eficaz que el modo de transferencia de memoria intercalada para operaciones de transferencia de memoria más grandes, mientras que el modo de transferencia de memoria intercalada puede ser en general más eficaz que el modo de transferencia de memoria secuencial para operaciones de transferencia de memoria más pequeñas, en particular en el caso donde la cantidad mínima de datos a los que se accede por solicitud de lectura durante el modo de transferencia de memoria secuencial es grande. Las técnicas de la presente divulgación se pueden usar para usar selectivamente diferentes modos de transferencia de memoria que son más adecuados para tipos particulares de operaciones de transferencia de memoria, mejorando de este modo el rendimiento de las operaciones de transferencia de memoria por una GPU.
La FIG. 2 es un diagrama de bloques que ilustra la CPU 6, la GPU 10 y el subsistema de memoria 8 del dispositivo informático 2 de la FIG. 1 en mayor detalle. Como se muestra en la FIG. 2, la CPU 6 está acoplada de forma comunicativa a la GPU 10 y al subsistema de memoria 8, y la GPU 10 está acoplada de forma comunicativa a la CPU 6 y al subsistema de memoria 8. La GPU 10, en algunos ejemplos, se puede integrar en una placa base con la CPU 6. En ejemplos adicionales, la GPU 10 se puede implementar en una tarjeta gráfica que se instala en un puerto de una placa base que incluye la CPU 6. En otros ejemplos, la GPU 10 se puede incorporar dentro de un dispositivo periférico que está configurado para interactuar con la CPU 6. En ejemplos adicionales, la GPU 10 puede estar ubicada en el mismo microchip que la CPU 6 formando un sistema en un chip (SoC).
La CPU 6 se puede configurar para ejecutar una aplicación de software 24, una API de gráficos 26, un controlador de GPU 28 y un sistema operativo 30. La aplicación de software 24 puede incluir una o más instrucciones que hacen que se muestren imágenes de gráficos y/o una o más instrucciones que hacen que se realice una tarea distinta de gráficos (por ejemplo, una tarea informática de propósito general) en la GPU 10. La aplicación de software 24 puede emitir instrucciones para la API de gráficos 26. La API de gráficos 26 puede ser un servicio de tiempo de ejecución que traduce las instrucciones recibidas desde la aplicación de software 24 a un formato que es consumible por el controlador de GPU 28.
El controlador de GPU 28 recibe las instrucciones desde la aplicación de software 24 por medio de la API de gráficos 26 y controla el funcionamiento de la GPU 10 para atender a las instrucciones. Por ejemplo, el controlador de GPU 28 puede formular uno o más comandos, colocar los comandos en la memoria 22 y dar instrucciones a la GPU 10 para que ejecute los comandos. En algunos ejemplos, el controlador de GPU 28 puede colocar los comandos en la memoria 22 y comunicarse con la GPU 10 por medio del sistema operativo 30, por ejemplo, por medio de una o más llamadas de sistema.
En algunos ejemplos, el controlador de GPU 28 (u otro componente de software en la CPU 6) se puede configurar para seleccionar un modo de transferencia de memoria que se va a usar para realizar la totalidad o parte de la operación de transferencia de memoria, y hacer que la GPU 10 realice la operación de transferencia de memoria en base al modo de transferencia de memoria seleccionado. En algunos ejemplos, el modo de transferencia de memoria se puede seleccionar de un conjunto de al menos dos modos de transferencia de memoria que incluye un modo de transferencia de memoria intercalada y un modo de transferencia de memoria secuencial.
En ejemplos adicionales, el controlador de GPU 28 se puede configurar para seleccionar el modo de transferencia de memoria que se va a usar para la totalidad o parte de una operación de transferencia de memoria de acuerdo con cualquiera de las técnicas descritas en la presente divulgación. Por ejemplo, el controlador de GPU 28 puede seleccionar el modo de transferencia de memoria en base al tamaño de la operación de transferencia de memoria (por ejemplo, una cantidad de datos que se va a transferir por la operación de transferencia de memoria). Como otro ejemplo, el controlador de GPU 28 puede seleccionar el modo de transferencia de memoria en base a una cantidad de superposición que tiene una región de destino definida para la operación de transferencia de memoria con una región de memoria intermedia fija alineada con la pantalla. Como otro ejemplo, el controlador de GPU 28 puede seleccionar el modo de transferencia de memoria en base a una determinación de si es probable que la ejecución del programa de sombreado sea un cuello de botella de rendimiento para la operación de transferencia de memoria. En un ejemplo adicional, la GPU 10 puede usar uno o más programas de sombreado para realizar la operación de transferencia de memoria, y el controlador de GPU 28 puede seleccionar el modo de transferencia de memoria en base a un tamaño del programa de sombreado que se usa para realizar la operación de transferencia de memoria y/o una complejidad del programa de sombreado que se usa para realizar la operación de transferencia de memoria.
La GPU 10 incluye un motor de comandos 32, una unidad de operaciones de tramado 34, una memoria intermedia 36, un motor de lectura 38 y un motor de escritura 40. En algunos ejemplos, la GPU 10 puede incluir una canalización de renderizado de gráficos 3D (no mostrada). En dichos ejemplos, la unidad de operaciones de tramado 34 puede formar parte de la canalización de renderizado de gráficos 3d .
En algunos ejemplos, la GPU 10 puede incluir una pluralidad de unidades de procesamiento (no mostradas), de las que cada una puede ser una unidad de procesamiento programable o una unidad de procesamiento de función fija. En los casos donde la GPU 10 incluye una canalización de renderizado de gráficos 3D, la pluralidad de unidades de procesamiento puede funcionar conjuntamente para implementar la canalización de renderizado de gráficos 3D. En algunos ejemplos, la canalización de renderizado de gráficos 3D se puede ajustar a una canalización de gráficos 3D que se especifica por una o más API estándar de gráficos 3D públicas y/o patentadas, tales como, por ejemplo, una API de biblioteca de gráficos abierta (OpenGL®), una API de sistemas integrados de biblioteca de gráficos abierta (OpenGL ES), una API de Direct3D, una API de DirectX, etc.
Una unidad de procesamiento programable puede incluir, por ejemplo, una unidad de sombreado programable que está configurada para ejecutar uno o más programas de sombreado que se descargan en la GPU 10 por la CPU 6. Un programa de sombreado, en algunos ejemplos, puede ser una versión compilada de un programa escrito en un lenguaje de sombreado de alto nivel, tal como, por ejemplo, un lenguaje de sombreado OpenGL (GLSL), un lenguaje de sombreado de alto nivel (HLSL), un lenguaje de sombreado C para gráficos (Cg), etc. En algunos ejemplos, una unidad de sombreado programable puede incluir una pluralidad de unidades de procesamiento que están configuradas para funcionar en paralelo, por ejemplo, una canalización de SIMD. Una unidad de sombreado programable puede tener una memoria de programa que almacena instrucciones de programa de sombreado y un registro de estado de ejecución, por ejemplo, un registro de contador de programa que indica la instrucción actual en la memoria de programa que se está ejecutando o la siguiente instrucción que se va a buscar. Las unidades de sombreado programables pueden incluir, por ejemplo, unidades de sombreado de vértices, unidades de sombreado de píxeles, unidades de sombreado de geometría, unidades de sombreado de casco, unidades de sombreado de dominio, unidades de sombreado de cálculo, etc.
Una unidad de procesamiento de función fija puede incluir hardware que está cableado para realizar determinadas funciones. Aunque el hardware de función fija se puede configurar, por medio de una o más señales de control, por ejemplo, para realizar diferentes funciones, el hardware de función fija típicamente no incluye una memoria de programa que pueda recibir programas compilados por el usuario. Las unidades de procesamiento de función fija incluidas en la GPU 10 pueden incluir, por ejemplo, unidades de procesamiento que realizan, por ejemplo, operaciones de tramado, pruebas de profundidad, pruebas de tijera, combinación alfa, etc. En los ejemplos donde se incluye la unidad de operaciones de tramado 34 en una canalización de renderizado 3D, la unidad de operaciones de tramado 34 puede ser, en algunos ejemplos, una unidad de procesamiento configurable de función fija. En algunos ejemplos, la unidad de operaciones de tramado 34 se puede implementar como una unidad de procesamiento de fusión de salida de una canalización de renderizado 3D.
El motor de comandos 32 está configurado para recibir comandos desde la CPU 6 y hacer que la GPU 10 ejecute los comandos. En algunos ejemplos, la CPU 6 puede colocar los comandos en la memoria 22 y el motor de comandos 32 puede recuperar los comandos de la memoria 22. Los comandos pueden incluir, por ejemplo, comandos de estado que cambian el estado (por ejemplo, estado de renderizado) de la GPU 10, comandos de vinculación de programas de sombreado que dan instrucciones a la GPU 10 para cargar programas de sombreado particulares en una o más de las unidades de procesamiento programables en una canalización de renderizado 3D, comandos de extracción que dan instrucciones a la GPU 10 para renderizar datos particulares almacenados en la memoria 22, comandos informáticos de propósito general que dan instrucciones a la GPU 10 para ejecutar uno o más núcleos informáticos de propósito general con respecto a datos particulares almacenados en la memoria 22, y comandos de transferencia de memoria que dan instrucciones a la GPU 10 para realizar una o más operaciones de transferencia de memoria.
En respuesta a la recepción de un comando de estado, el motor de comandos 32 se puede configurar para establecer uno o más registros de estado en la GPU 10 en valores particulares en base al comando de estado, y/o para configurar una o más de las unidades de procesamiento de función fija en una canalización de renderizado 3D (no mostrada) para la GPU 10 en base al comando de estado. En respuesta a la recepción de un comando de llamada de extracción, el motor de comandos 32 se puede configurar para hacer que la canalización de renderizado 3D (no mostrada) en la GPU 10 recupere geometría 3D de la memoria 22 y renderice los datos de geometría 3D en una imagen de gráficos 2D. En respuesta a la recepción de un comando de vinculación de programa de sombreado, el motor de comandos 32 puede cargar uno o más programas de sombreado particulares en una o más de las unidades de procesamiento programables en la canalización de renderizado 3D.
En algunos ejemplos, en respuesta a la recepción de un comando de transferencia de memoria que da instrucciones a la GPU 10 para realizar una operación de transferencia de memoria, el motor de comandos 32 puede seleccionar un modo de transferencia de memoria que se va a usar para realizar la totalidad o parte de la operación de transferencia de memoria, y hacer que la GPU 10 realice la operación de transferencia de memoria en base al modo de transferencia de memoria seleccionado. En algunos ejemplos, el modo de transferencia de memoria se puede seleccionar de un conjunto de al menos dos modos de transferencia de memoria que incluye un modo de transferencia de memoria intercalada y un modo de transferencia de memoria secuencial.
En ejemplos adicionales, el motor de comandos 32 se puede configurar para seleccionar el modo de transferencia de memoria que se va a usar para la totalidad o parte de una operación de transferencia de memoria de acuerdo con cualquiera de las técnicas descritas en la presente divulgación. Por ejemplo, el motor de comandos 32 puede seleccionar el modo de transferencia de memoria en base al tamaño de la operación de transferencia de memoria (por ejemplo, una cantidad de datos que se va a transferir por la operación de transferencia de memoria). Como otro ejemplo, el motor de comandos 32 puede seleccionar el modo de transferencia de memoria en base a una cantidad de superposición que tiene una región de destino definida para la operación de transferencia de memoria con una región de memoria intermedia fija alineada con la pantalla. Como otro ejemplo, el motor de comandos 32 puede seleccionar el modo de transferencia de memoria en base a una determinación de si es probable que la ejecución del programa de sombreado sea un cuello de botella de rendimiento para la operación de transferencia de memoria. En un ejemplo adicional, la GPU 10 puede usar uno o más programas de sombreado para realizar la operación de transferencia de memoria, y el motor de comandos 32 puede seleccionar el modo de transferencia de memoria en base a un tamaño del programa de sombreado que se usa para realizar la operación de transferencia de memoria y/ o una complejidad del programa de sombreado que se usa para realizar la operación de transferencia de memoria.
En otros ejemplos, el motor de comandos 32 puede seleccionar el modo de transferencia de memoria en base a uno o más comandos recibidos desde la CPU 6 que dan instrucciones al motor de comandos 32 para usar un modo de transferencia de memoria particular. En algunos casos, el uno o más comandos pueden incluir comandos de estado que dan instrucciones a la GPU 10 para establecer el estado de una variable de estado de modo de transferencia de memoria en la GPU 10. En dichos casos, el motor de comandos 32 puede seleccionar el modo de transferencia de memoria en base a un estado actual de la variable de estado de modo de transferencia de memoria. La variable de estado de modo de transferencia de memoria se puede almacenar, por ejemplo, en un registro en la GPU 10. En casos adicionales, el uno o más comandos pueden ser comandos que dan instrucciones a la GPU 10 para realizar una operación de transferencia de memoria o alguna otra operación, y el comando puede incluir un indicador u otra información indicativa de una operación de transferencia de memoria para usar cuando se realiza la operación de transferencia de memoria u otra operación.
Para realizar una operación de transferencia de memoria en base a un modo de operación de transferencia de memoria seleccionado, el motor de comandos 32 puede configurar uno o más componentes en la GPU 10 que se usan para realizar la operación de transferencia de memoria en base al modo de transferencia de memoria seleccionado. Por ejemplo, el motor de comandos 32 puede configurar uno o más de la memoria intermedia 36, el motor de lectura 38 y el motor de escritura 40 en base al modo de transferencia de memoria seleccionado, como se describe en mayor detalle a continuación.
La unidad de operaciones de tramado 34 está configurada para realizar una o más operaciones de tramado en base a datos de origen para generar datos de destino. Los datos de origen pueden corresponder a una o más regiones de origen de una operación de transferencia de memoria. En algunos ejemplos, la unidad de operaciones de tramado 34 puede recibir los datos de origen desde la memoria intermedia 36 y/o desde el motor de escritura 40. Los datos de destino se pueden escribir en una región de destino de una operación de transferencia de memoria.
El tipo de operación de tramado realizada por la unidad de operaciones de tramado 34 se puede configurar, por ejemplo, por el motor de comandos 32. Los tipos de operaciones de tramado pueden especificar cómo se van a generar los datos de destino en base a los datos de origen para una operación de transferencia de memoria particular. En los casos donde la unidad de operaciones de tramado 34 combina dos regiones de origen diferentes para generar datos de destino (por ejemplo, una operación de composición), el tipo de operación de tramado puede especificar cómo se van a combinar las dos regiones de origen diferentes para generar los datos de destino. En algunos ejemplos, los tipos de operación de tramado pueden ser operaciones bit a bit que especifican cómo se van a generar los datos de destino para una ubicación de píxel particular en una región de destino en base a las ubicaciones de píxeles correspondientes en las regiones de origen. Las ubicaciones de píxeles correspondientes en las regiones de origen pueden ser ubicaciones de píxeles que están en la misma ubicación relativa de sus regiones de origen respectivas que la ubicación de píxel está en la región de destino. Las operaciones bit a bit pueden incluir, por ejemplo, operaciones booleanas, tales como operaciones AND, OR, NOT y/o XOR bit a bit. Las operaciones bit a bit también pueden incluir operaciones de copia de bits, operaciones de inversión de bits, operaciones de relleno sólido, etc. La operación de tramado puede ser una operación que especifica cómo se van a combinar los bits para una operación de composición particular. En algunos ejemplos, las operaciones de tramado pueden incluir operaciones bit a bit, tales como, por ejemplo, operaciones de lógica booleana. Las operaciones de lógica booleana pueden incluir, por ejemplo, operaciones AND, OR, NOT y/o XOR bit a bit.
En ejemplos adicionales, los tipos de operación de tramado pueden incluir operaciones de combinación (por ejemplo, operaciones de combinación alfa). En algunos ejemplos, una operación de combinación puede especificar un multiplicador de píxeles de origen y un multiplicador de píxeles de destino que se van a usar durante la ejecución de la operación de combinación. En dichos ejemplos, durante la ejecución de la operación de combinación, un valor de píxel de origen (por ejemplo, un color de píxel de origen y/o un valor alfa de origen) se puede multiplicar por el multiplicador de píxeles de origen para producir un primer producto, un valor de píxel de destino correspondiente (por ejemplo, un color de píxel de destino y/o un valor alfa de destino) se puede multiplicar por el multiplicador de píxeles de destino para producir un segundo producto, y la suma de los dos productos se puede añadir conjuntamente para producir un valor de destino para la ubicación de píxel. También son posibles otros tipos de operaciones de combinación.
En algunos ejemplos, el motor de comandos 32 puede configurar la unidad de operaciones de tramado 34 en base a los datos incluidos en un comando de operación de transferencia de memoria recibido por la GPU 10 desde la CPU 6. Por ejemplo, el motor de comandos 32 puede seleccionar un tipo de operación de tramado que se va a realizar por la unidad de operaciones de tramado 34 en base a un tipo de operación de tramado que se especifica en el comando de operación de transferencia de memoria, y configurar la unidad de operaciones de tramado 34 para realizar la operación de transferencia de memoria usando el tipo seleccionado de operación de tramado.
Aunque la unidad de operaciones de tramado 34 se ha descrito en el presente documento como una combinación de diferentes regiones de origen para producir datos de destino para una operación de transferencia de memoria, en otros ejemplos, se pueden usar uno o más de otros componentes en la GPU 10 además de o en lugar de la unidad de operaciones de tramado 34 para realizar la operación de transferencia de memoria. Por ejemplo, un programa de sombreado que se ejecuta en una unidad de sombreado (no mostrada) de la GPU 10 puede combinar las diferentes regiones de origen de acuerdo con una técnica de combinación que se especifica en el programa de sombreado para generar datos de destino para una operación de transferencia de memoria.
La memoria intermedia 36 está configurada para almacenar datos de origen que se recuperan de la memoria 22 durante la ejecución de una operación de transferencia de memoria. En algunos ejemplos, la memoria intermedia 36 se puede implementar como una pluralidad de registros dentro de la GPU 10. La memoria intermedia 36 puede utilizar cualquiera de una variedad de esquemas de almacenamiento temporal que incluyen, por ejemplo, un esquema de almacenamiento temporal primero en entrar, primero en salir (FIFO). De acuerdo con el esquema de almacenamiento temporal FIFO, los datos de origen que se almacenan en la memoria intermedia 36 se consumen por un consumidor (por ejemplo, el motor de escritura 40) en el orden en que los datos de origen se colocaron en la memoria intermedia 36.
En algunos ejemplos, la memoria intermedia 36 puede generar una señal indicativa de si la memoria intermedia 36 está llena y una señal indicativa de si la memoria intermedia 36 está vacía. En dichos ejemplos, estas señales se pueden usar para sincronizar el motor de lectura 38 y/o el motor de escritura 40 durante la realización de una operación de transferencia de memoria. En ejemplos adicionales, la memoria intermedia 36 puede generar señales indicativas de si los datos de origen actualmente almacenados en la memoria intermedia 36 son mayores que o iguales a uno o más umbrales o inferiores o iguales a uno o más umbrales, y estas señales se pueden usar además de o en lugar de señales de llena y vacía para sincronizar el motor de lectura 38 y/o el motor de escritura 40 durante la realización de una operación de transferencia de memoria.
En algunos ejemplos, la memoria intermedia 36 puede ser una memoria caché que funciona de acuerdo con un paradigma de almacenamiento en caché de aciertos/fallos con respecto a la memoria subyacente 22. En dichos ejemplos, la memoria intermedia 36 puede ser, en algunos ejemplos, una memoria caché configurable en el sentido de que el tamaño de línea de memoria caché puede ser configurable. Una línea de memoria caché se puede referir a la unidad de datos que se transfiere entre la memoria subyacente (por ejemplo, la memoria 22) y la memoria caché (por ejemplo, la memoria intermedia 36) en respuesta a un fallo en memoria caché y/o en respuesta a una escritura aplazada de memoria caché. El tamaño de la línea de memoria caché se puede referir al tamaño de la unidad de datos que se transfiere entre la memoria subyacente y la memoria caché. Cuando una línea de memoria caché se transfiere desde la memoria subyacente a la memoria caché, la línea de memoria caché se puede colocar en y corresponder a una entrada de memoria caché. Por lo tanto, el tamaño de la línea de memoria caché también se puede referir al tamaño de una única entrada de caché en la memoria caché.
En los ejemplos donde la memoria intermedia 36 es una memoria caché configurable, el motor de comandos 32 puede seleccionar y configurar el tamaño de línea de memoria caché de la memoria intermedia 36 en base a un modo de transferencia de memoria seleccionado. Por ejemplo, el motor de comandos 32 puede seleccionar un tamaño de línea de memoria caché para la memoria intermedia 36 en base a un modo de transferencia de memoria seleccionado, y configurar la memoria intermedia 36 para funcionar de acuerdo con el tamaño de línea de memoria caché seleccionado.
En algunos ejemplos, el motor de comandos 32 puede seleccionar un tamaño de línea de memoria caché para la memoria intermedia 36 que es igual a una capacidad total de la memoria intermedia 36 en respuesta a que se selecciona el modo de transferencia de memoria secuencial como el modo de transferencia de memoria para realizar la operación de transferencia de memoria. Esto puede permitir, en algunos casos, que las agrupaciones de operaciones de lectura consecutivas y las agrupaciones de operaciones de escritura consecutivas sean tan grandes como sea posible durante el modo de transferencia de memoria secuencial. En dichos ejemplos, la memoria intermedia 36 puede seleccionar un tamaño de línea de memoria caché para la memoria intermedia 36 que es inferior a la capacidad total de la memoria caché en respuesta a que se selecciona el modo de transferencia de memoria intercalada como el modo de transferencia de memoria para realizar la operación de transferencia de memoria. Esto puede permitir que múltiples regiones de datos en la memoria subyacente se almacenen en caché simultáneamente cuando se atienden las solicitudes intercaladas, lo que puede reducir, en algunos casos, la tasa de fallos de caché y mejorar la eficacia para el modo intercalado.
El motor de lectura 38 está configurado para emitir solicitudes de lectura al subsistema de memoria 8 y para colocar los datos de origen recibidos en respuesta a las solicitudes de lectura en la memoria intermedia 36. El motor de lectura 38 se puede configurar para funcionar de acuerdo con uno de una pluralidad de modos de sincronización. Los modos de sincronización usados para controlar el funcionamiento del motor de lectura 38 pueden definir la manera en que la emisión de solicitudes de lectura se sincronizan con la emisión de solicitudes de escritura por el motor de escritura 40 y/o la manera en que la emisión de solicitudes de lectura se sincronizan con la condición de la memoria intermedia 36. Los modos de sincronización usados por el motor de lectura 38 pueden incluir un modo de sincronización intercalada que corresponde a la operación de transferencia de memoria intercalada y un modo de sincronización secuencial que corresponde a la operación de transferencia de memoria secuencial.
En algunos ejemplos, el motor de comandos 32 puede configurar el modo de sincronización que se va a usar por el motor de lectura 38 para la realización de la totalidad o parte de una operación de transferencia de memoria en base a un modo de transferencia de memoria seleccionado. Por ejemplo, el motor de comandos 32 puede seleccionar un modo de sincronización en base a un modo de transferencia de memoria seleccionado y configurar el motor de lectura 38 para funcionar de acuerdo con el modo de sincronización seleccionado. Como otro ejemplo, el motor de comandos 32 puede seleccionar el modo de sincronización intercalada que se va a usar por el motor de lectura 38 en respuesta a que se selecciona el modo de transferencia de memoria intercalada como el modo de transferencia de memoria para realizar una operación de transferencia de memoria, y seleccionar el modo de sincronización secuencial que se va a usar por el motor de lectura 38 en respuesta a que se selecciona el modo de transferencia de memoria secuencial como el modo de transferencia de memoria para realizar una operación de transferencia de memoria.
Cuando funciona de acuerdo con el modo de sincronización intercalada, el motor de lectura 38 puede emitir un número inicial de solicitudes de lectura en respuesta al inicio de una operación de transferencia de memoria. Después de que se ha emitido el número inicial de solicitudes de lectura, el motor de lectura 38 puede emitir una solicitud de lectura adicional en respuesta a que se consumen los datos de origen por la memoria intermedia 36 que son suficientes para emitir una solicitud de escritura para la operación de transferencia de memoria. El motor de lectura 38 puede continuar emitiendo solicitudes de lectura de esta manera hasta que se han emitido todas las solicitudes de lectura para la operación de transferencia de memoria. En respuesta a la recepción de una unidad de datos de origen en respuesta a una solicitud de lectura particular, el motor de lectura 38 puede colocar la unidad de datos de origen en la memoria intermedia 36 y/o pasar la unidad de datos de origen directamente al motor de escritura 40 y/o a la unidad de operaciones de tramado 34 para su procesamiento adicional.
Los datos que son suficientes para emitir una solicitud de escritura para la operación de transferencia de memoria se pueden referir a datos que corresponden a todos los operandos de origen que se requieren para calcular los datos de destino para una única ubicación en la región de destino. Por ejemplo, para una operación de copia de memoria, los datos que son suficientes para emitir una solicitud de escritura para la operación de transferencia de memoria se pueden referir a datos que corresponden a una única ubicación en la región de origen de la operación de copia de memoria. Como otro ejemplo, para una operación de composición, los datos que son suficientes para emitir una solicitud de escritura para la operación de transferencia de memoria se pueden referir a datos que corresponden a una única ubicación en una primera región de origen para la operación de copia de memoria y datos que corresponden a una única ubicación correspondiente en una segunda región de origen para la operación de copia de memoria. Las ubicaciones correspondientes se pueden referir a ubicaciones que tienen la misma posición relativa en diferentes regiones. Por ejemplo, la tercera columna de la segunda fila en dos regiones diferentes tiene la misma ubicación relativa incluso si las regiones están ubicadas en partes diferentes de sus superficies respectivas.
Cuando funciona de acuerdo con el modo de sincronización secuencial, el motor de lectura 38 puede comenzar la emisión de solicitudes de lectura en respuesta al inicio de una operación de transferencia de memoria. El motor de lectura 38 puede continuar emitiendo solicitudes de lectura hasta que el número de solicitudes de lectura emitidas sea mayor que o igual a un primer umbral. Una vez que el número de solicitudes de lectura emitidas es mayor que o igual al primer umbral, el motor de lectura 38 puede dejar de emitir solicitudes de lectura hasta que una cantidad de datos de origen no consumidos almacenados en la memoria intermedia 36 (por ejemplo, datos que no se han consumido por el motor de escritura 40) sea inferior o igual a un segundo umbral. Una vez que una cantidad de datos de origen no consumidos almacenados en la memoria intermedia 36 es inferior o igual al segundo umbral, el motor de lectura 38 puede reanudar la emisión de solicitudes de lectura. El motor de lectura 38 puede continuar el cese y la reanudación de la emisión de solicitudes de lectura de esta manera hasta que se hayan emitido todas las solicitudes de lectura para la operación de transferencia de memoria. El primer umbral puede ser mayor que el segundo umbral.
En algunos ejemplos, el primer umbral se puede basar en el tamaño de la memoria intermedia 36. Por ejemplo, el primer umbral puede ser, en algunos ejemplos, igual al número máximo de unidades de datos de lectura que la memoria intermedia 36 puede almacenar al mismo tiempo, donde una unidad de datos de lectura corresponde a los datos de origen devueltos en respuesta a una única solicitud de lectura. En dichos ejemplos, el motor de lectura 38 puede emitir solicitudes de lectura "sólo suficientes" para llenar la memoria intermedia 36 con datos de origen que se devuelven en respuesta a las solicitudes. En algunos ejemplos, el motor de lectura 38 puede realizar un seguimiento de cuántas solicitudes de lectura se han emitido para una ráfaga dada de solicitudes de lectura para determinar si se ha emitido un número umbral de solicitudes de lectura. En ejemplos adicionales, el motor de lectura 38 puede supervisar la cantidad de datos de origen almacenados actualmente en la memoria intermedia 36 para determinar si se ha emitido un número umbral de solicitudes de lectura. Por ejemplo, el motor de lectura 38 puede utilizar una señal generada por la memoria intermedia 36 que es indicativa de si la memoria intermedia 36 está llena o una señal generada por la memoria intermedia 36 que es indicativa de si la cantidad de datos almacenados en la memoria intermedia 36 es mayor que o igual a un umbral para determinar si se ha emitido un número umbral de solicitudes de lectura.
En otros ejemplos, el segundo umbral puede ser igual a cero. Es decir, el motor de lectura 38 puede dejar de emitir solicitudes de lectura hasta que no haya más datos no consumidos en la memoria intermedia 36. En otras palabras, el motor de lectura 38 puede dejar de emitir solicitudes de lectura hasta que la memoria intermedia 36 esté vacía. Una vez que la memoria intermedia 36 está vacía, a continuación el motor de lectura 38 puede reanudar la emisión de solicitudes de lectura para llenar la memoria intermedia. En algunos ejemplos, el motor de lectura 38 puede utilizar una señal generada por la memoria intermedia 36 que es indicativa de si la memoria intermedia 36 está vacía o una señal generada por la memoria intermedia 36 que es indicativa de si la cantidad de datos de origen no consumidos en la memoria intermedia 36 es inferior o igual a un umbral para determinar si los datos no consumidos son inferiores o iguales al segundo umbral.
Las solicitudes de lectura emitidas por la memoria intermedia 36 pueden especificar una dirección de memoria o un intervalo de direcciones de memoria dentro de la memoria 22 desde la que los datos se deben devolver a la GPU 10. Los datos devueltos por el subsistema de memoria 8 en respuesta a una única solicitud de lectura se pueden denominar unidad de datos de origen. En algunos ejemplos, cada solicitud de lectura emitida por el motor de lectura 38 puede corresponder a una ubicación respectiva de una pluralidad de ubicaciones en una región de origen para la operación de transferencia de memoria, y la unidad de datos de origen devuelta en respuesta a la solicitud de lectura puede corresponder a los datos que están asociados con la ubicación respectiva de la pluralidad de ubicaciones en la región de origen. En dichos ejemplos, para una operación de copia de memoria con una única superficie de origen, el motor de lectura 38 puede emitir una única solicitud de lectura para cada ubicación en la superficie de destino. Para una operación de composición con múltiples superficies de origen, el motor de lectura 38 puede emitir múltiples solicitudes de lectura para cada una de las ubicaciones en la superficie de destino, por ejemplo, una solicitud de lectura para la ubicación correspondiente en cada superficie de origen.
El motor de escritura 40 está configurado para consumir datos de origen de la memoria intermedia 36, generar datos de destino en base a los datos de origen consumidos y emitir solicitudes de escritura al subsistema de memoria 8 para escribir datos de destino en una región de destino en la memoria 22. En algunos ejemplos, el motor de escritura 40 puede generar los datos de destino de modo que los datos de destino sean idénticos a los datos de origen. Dichos ejemplos se pueden usar para realizar, por ejemplo, operaciones de copia de memoria. En otros ejemplos, el motor de escritura 40 puede combinar datos de origen de al menos dos regiones de origen diferentes para generar los datos de destino. Dichos ejemplos se pueden usar para realizar, por ejemplo, operaciones de composición. En dichos ejemplos, el motor de escritura 40 puede usar, en algunos ejemplos, la unidad de operaciones de tramado 34 para realizar una operación de tramado para combinar los datos de origen y generar los datos de destino.
El motor de escritura 40 se puede configurar para funcionar de acuerdo con uno de una pluralidad de modos de sincronización. Los modos de sincronización usados para controlar el funcionamiento del motor de escritura 40 pueden definir la manera en que la emisión de solicitudes de escritura se sincroniza con la emisión de solicitudes de lectura por el motor de lectura 38 y/o la manera en que la emisión de solicitudes de escritura se sincroniza con la condición de la memoria intermedia 36. Los modos de sincronización usados por el motor de escritura 40 pueden incluir un modo de sincronización intercalada que corresponde a la operación de transferencia de memoria intercalada y un modo de sincronización secuencial que corresponde a la operación de transferencia de memoria secuencial.
En algunos ejemplos, el motor de comandos 32 puede configurar el modo de sincronización que se va a usar por el motor de escritura 40 para la realización de la totalidad o parte de una operación de transferencia de memoria en base a un modo de transferencia de memoria seleccionado. Por ejemplo, el motor de comandos 32 puede seleccionar un modo de sincronización en base a un modo de transferencia de memoria seleccionado y configurar el motor de escritura 40 para funcionar de acuerdo con el modo de sincronización seleccionado. Como otro ejemplo, el motor de comandos 32 puede seleccionar el modo de sincronización intercalada que se va a usar por el motor de escritura 40 en respuesta a que se selecciona el modo de transferencia de memoria intercalada como el modo de transferencia de memoria para realizar una operación de transferencia de memoria, y seleccionar el modo de sincronización secuencial que se va a usar por el motor de escritura 40 en respuesta a que se selecciona el modo de transferencia de memoria secuencial como el modo de transferencia de memoria para realizar una operación de transferencia de memoria.
Cuando funciona de acuerdo con el modo de sincronización intercalada, en respuesta al inicio de una operación de transferencia de memoria, el motor de escritura 40 puede esperar inicialmente hasta que los datos de origen que son suficientes para emitir una solicitud de escritura para una operación de transferencia de memoria se hayan recibido por la GPU 10 y/o colocado en la memoria intermedia 36. Una vez que los datos de origen se han recibido por la GPU 10 y/o colocado en la memoria intermedia 36, el motor de escritura 40 puede consumir los datos de origen, generar datos de destino en base a los datos de origen y emitir una solicitud de escritura al subsistema de memoria 8 para escribir los datos de destino en la memoria 22. Después de que se ha emitido la solicitud de escritura, el motor de escritura 40 puede determinar si algún dato de origen adicional se ha recibido por la GPU 10 y/o colocado en la memoria intermedia 36. Si es así, el motor de escritura 40 puede consumir los datos de origen y emitir otra solicitud de escritura para los datos de origen adicionales. De otro modo, el motor de escritura 40 puede esperar datos adicionales que se van a recibir por la GPU 10 y/o se van a colocar en la memoria intermedia 36. El motor de escritura 40 puede continuar consumiendo datos de origen de esta manera hasta que se complete la operación de transferencia de memoria.
En algunos ejemplos, consumir los datos de origen se puede referir a que el motor de escritura 40 recibe los datos de origen directamente desde el motor de lectura 38 y procesa los datos de origen. En otros ejemplos, consumir los datos de origen se puede referir a que el motor de escritura 40 recupera los datos de origen de la memoria intermedia 36 y procesa los datos de origen. El procesamiento de los datos de origen puede incluir generar datos de destino en base a los datos de origen. Después de que se han procesado los datos, el motor de escritura 40 puede emitir una solicitud de escritura para escribir los datos de destino. Los datos de origen no consumidos se pueden referir a los datos de origen que se han colocado en la memoria intermedia 36, pero que aún no se han consumido por el motor de escritura 40. La cantidad de datos de origen no consumidos se puede referir al número de unidades de datos de origen no consumidos que están actualmente almacenadas en la memoria intermedia 36 donde cada unidad de datos de origen corresponde a datos de origen que se devuelven en respuesta a una única solicitud de lectura. Una unidad de datos de origen se puede denominar de forma alternativa palabra de datos leídos.
Cuando funciona de acuerdo con el modo de sincronización secuencial, en respuesta al inicio de una operación de transferencia de memoria, el motor de escritura 40 puede esperar inicialmente hasta que la cantidad de datos no consumidos en la memoria intermedia 36 sea mayor que o igual a un primer umbral. Durante el período de espera, el motor de escritura 40 puede no consumir ningún dato de origen ni emitir solicitudes de escritura para la operación de transferencia de memoria. Una vez que la cantidad de datos no consumidos en la memoria intermedia 36 es mayor que o igual al primer umbral, el motor de escritura 40 puede comenzar el consumo de datos de origen y la emisión de solicitudes de escritura para los datos de origen consumidos. El motor de escritura 40 puede continuar emitiendo solicitudes de escritura hasta que la cantidad de datos no consumidos en la memoria intermedia 36 sea inferior o igual a un segundo umbral. Una vez que la cantidad de datos no consumidos en la memoria intermedia 36 es inferior o igual al segundo umbral, el motor de escritura 40 puede dejar de consumir datos de origen y emitir solicitudes de escritura para los datos de origen consumidos hasta que la cantidad de datos no consumidos en la memoria intermedia 36 sea mayor que o igual al primer umbral. Después de que la cantidad de datos no consumidos en la memoria intermedia 36 es mayor que o igual al primer umbral, el motor de escritura 40 puede comenzar de nuevo el consumo de datos de origen y la emisión de solicitudes de escritura. El motor de escritura 40 puede continuar el cese y la reanudación del consumo de datos de origen y la emisión de solicitudes de escritura de esta manera hasta que se hayan emitido todas las solicitudes de escritura para la operación de transferencia de memoria. El primer umbral puede ser mayor que el segundo umbral.
En algunos ejemplos, el primer umbral se puede basar en el tamaño de la memoria intermedia 36. Por ejemplo, el primer umbral puede ser, en algunos ejemplos, igual al número máximo de unidades de datos de lectura o que la memoria intermedia 36 puede almacenar al mismo tiempo, donde una unidad de datos de lectura corresponde a los datos de origen devueltos en respuesta a una única solicitud de lectura. En algunos ejemplos, el motor de escritura 40 puede supervisar la cantidad de datos de origen no consumidos almacenados actualmente en la memoria intermedia 36 para determinar si la cantidad de datos consumidos almacenados en la memoria intermedia 36 es mayor que o igual al primer umbral. Por ejemplo, el motor de escritura 40 puede utilizar una señal generada por la memoria intermedia 36 que es indicativa de si la memoria intermedia 36 está llena o una señal generada por la memoria intermedia 36 que es indicativa de si la cantidad de datos almacenados en la memoria intermedia 36 es mayor que o igual a un umbral para determinar si la cantidad de datos consumidos almacenados en la memoria intermedia 36 es mayor que o igual al primer umbral.
En otros ejemplos, el segundo umbral puede ser igual a cero. Es decir, el motor de escritura 40 puede dejar de consumir datos de origen y emitir solicitudes de escritura cuando no haya más datos no consumidos en la memoria intermedia 36. En otras palabras, el motor de escritura 40 puede dejar de consumir datos de origen y emitir solicitudes de escritura una vez que la memoria intermedia 36 está vacía. En algunos ejemplos, el motor de escritura 40 puede utilizar una señal generada por la memoria intermedia 36 que es indicativa de si la memoria intermedia 36 está vacía o una señal generada por la memoria intermedia 36 que es indicativa de si la cantidad de datos de origen no consumidos en la memoria intermedia 36 es inferior o igual a un umbral para determinar si los datos no consumidos son inferiores o iguales al segundo umbral.
Las solicitudes de escritura emitidas por el motor de escritura 40 pueden especificar una dirección de memoria o un intervalo de direcciones de memoria dentro de la memoria 22 en la que se van a escribir datos especificados. Los datos que se van a escribir se pueden suministrar al controlador de memoria 20 por el motor de escritura 40 por medio de uno o más buses de datos junto con la solicitud de escritura. En algunos ejemplos, los datos que se van a escribir pueden formar parte de la solicitud de escritura. La dirección de memoria o el intervalo de direcciones de memoria de la solicitud de escritura puede corresponder a una ubicación relativa en una región de destino que es la misma que la(s) ubicación/ubicaciones relativa(s) en una o más regiones de origen de las que se obtuvieron datos de origen que se usaron para generar los datos de destino.
El subsistema de memoria 8 incluye la memoria 22. La memoria 22 puede almacenar una o más superficies de origen 42 y una superficie de destino 44. Cada una de las superficies de origen 42 y la superficie de destino 44 corresponden a una matriz bidimensional de datos de píxeles. Los datos de píxeles pueden incluir valores de color rojo, verde, azul (RVA) y, en algunos casos, un valor alfa (a) para cada ubicación de píxel en la superficie. Debido a que las superficies de origen 42 y la superficie de destino 44 corresponden a una matriz bidimensional de datos de píxeles, los datos de píxeles para una ubicación de píxel individual en la superficie se pueden direccionar por coordenadas de fila y columna. Cada una de las regiones de origen usadas en una operación de transferencia de memoria puede corresponder a la totalidad o a un subconjunto de una superficie de origen respectiva, y la región de destino puede corresponder a la totalidad o a un subconjunto de la superficie de destino. Las regiones de origen y de destino pueden tener el mismo tamaño y conformación, y típicamente, pero no necesariamente, son regiones de forma rectangular. Aunque la FIG. 2 representa superficies de origen 42 y una superficie de destino 44 separadas. En algunos ejemplos, la superficie de destino 44 se puede usar como superficie de origen para una operación de transferencia de memoria y/o una o más de las superficies de origen 42 pueden servir como superficie de destino para una operación de transferencia de memoria. El subsistema de memoria 8 está acoplado de forma comunicativa a la CPU 6, la GPU 10, el motor de lectura 38 y el motor de escritura 40 por medio del bus 18.
En respuesta a la recepción de solicitudes de acceso a la memoria, el subsistema de memoria 8 puede hacer que se realice la operación de memoria solicitada con respecto a la memoria 22. Por ejemplo, en respuesta a la recepción de una solicitud de lectura, el subsistema de memoria 8 puede obtener (es decir, leer) datos almacenados en la memoria 22 desde una o más ubicaciones de memoria en la memoria 22 que corresponden a la una o más direcciones de memoria especificadas en la solicitud de lectura, y proporcionar los datos obtenidos a la GPU 10 (por ejemplo, el motor de lectura 38). Como otro ejemplo, en respuesta a la recepción de una solicitud de escritura y datos de escritura que corresponden a la solicitud de escritura, el subsistema de memoria 8 puede hacer que los datos de escritura se almacenen en la memoria 22 en una o más ubicaciones que corresponden a la una o más direcciones de memoria especificadas en la solicitud de escritura. En algunos ejemplos, el subsistema de memoria 8 puede proporcionar confirmación al motor de escritura 40 de que la solicitud de escritura se completó con éxito.
En algunos ejemplos, las solicitudes de lectura y escritura emitidas por la GPU 10 y recibidas por el subsistema de memoria 8 pueden estar en un formato que es consumible por la memoria 22. En dichos ejemplos, el subsistema de memoria 8 puede pasar las solicitudes recibidas desde la GPU 10 directamente a la memoria 22 para leer datos de y/o escribir datos en la memoria 22. En otros ejemplos, las solicitudes de lectura y escritura emitidas por la GPU 10 y recibidas por el subsistema de memoria 8 pueden no estar en un formato que es consumible por la memoria 22. En dichos ejemplos, el subsistema de memoria 8 puede generar uno o más comandos de memoria que son consumibles por la memoria 22 en base a las solicitudes de lectura y escritura, y emitir dichos comandos a la memoria 22 para leer datos de y/o escribir datos en la memoria 22. En algunos ejemplos, el uno o más comandos pueden adoptar la forma de una secuencia de comandos de lectura para una operación de lectura y una secuencia de comandos de escritura para una operación de escritura.
El bus 18 se puede implementar usando cualquier combinación de estructuras de bus y protocolos de bus, incluyendo estructuras y protocolos de bus compartido, estructuras y protocolos de bus punto a punto, estructuras y protocolos de bus unidireccional y estructuras y protocolos de bus bidireccional. En algunos ejemplos, el bus 18 se puede configurar para incluir un bus bidireccional de datos entre la GPU 10 y el subsistema de memoria 8, y un bus unidireccional de comandos y direcciones desde la GPU 10 al subsistema de memoria 8. En otros ejemplos, el bus 18 se puede configurar para incluir un bus unidireccional de lectura desde el subsistema de memoria 8 a la GPU 10, un bus unidireccional de escritura desde la GPU 10 al subsistema de memoria 8 y un bus unidireccional de comandos y direcciones desde la GPU 10 al subsistema de memoria 8. Estas configuraciones de bus son simplemente ejemplos, y también se pueden usar otras configuraciones de estructuras de bus con más o menos tipos de buses y en la misma configuración o en una diferente.
Como se analiza anteriormente, para realizar una operación de transferencia de memoria en base a un modo de transferencia de memoria seleccionado, el motor de comandos 32 puede configurar uno o más de memoria intermedia 36, motor de lectura 38 y motor de escritura 40 en base al modo de transferencia de memoria seleccionado. En algunos ejemplos, si el modo de transferencia de memoria seleccionado es el modo de transferencia de memoria intercalada, a continuación el motor de comandos 32 puede configurar el motor de lectura 38 y el motor de escritura 40 para funcionar de acuerdo con un modo de sincronización intercalada. En dichos ejemplos, si el modo de transferencia de memoria seleccionado es el modo de transferencia de memoria secuencial, a continuación el motor de comandos 32 puede configurar el motor de lectura 38 y el motor de escritura 40 para funcionar de acuerdo con un modo de sincronización secuencial.
En ejemplos adicionales donde la memoria intermedia 36 es una memoria caché con un tamaño de memoria caché configurable, si el modo de transferencia de memoria seleccionado es el modo de transferencia de memoria intercalada, a continuación el motor de comandos 32 puede configurar el motor de lectura 38 y el motor de escritura 40 para funcionar de acuerdo con un modo de sincronización intercalada y configurar la memoria intermedia 36 de modo que el tamaño de línea de memoria caché de la memoria intermedia 36 sea inferior al tamaño de línea de memoria caché máximo de la memoria intermedia 36. En dichos ejemplos, si el modo de transferencia de memoria seleccionado es el modo de transferencia de memoria secuencial, a continuación el motor de comandos 32 puede configurar el motor de lectura 38 y el motor de escritura 40 para funcionar de acuerdo con un modo de sincronización secuencial y configurar la memoria intermedia 36 de modo que el tamaño de línea de memoria caché de la memoria intermedia 36 sea igual al tamaño de línea de memoria caché máximo de la memoria intermedia 36.
En algunos ejemplos, cuando se selecciona el modo de transferencia de memoria intercalada como el modo de transferencia de memoria para realizar la totalidad o parte de una operación de transferencia de memoria, el motor de comandos 32 puede configurar el motor de lectura 38 y el motor de escritura 40 para funcionar en el modo de sincronización intercalada para hacer que el motor de lectura 38 emita solicitudes de lectura y el motor de escritura 40 emita solicitudes de escritura en base a un paradigma productor-consumidor. Hacer que el motor de lectura 38 emita solicitudes de lectura y el motor de escritura 40 emita solicitudes de escritura en base a un paradigma productor-consumidor puede incluir hacer que el motor de escritura 40 emita una solicitud de escritura en respuesta a que la GPU 10 recibe datos de origen desde el subsistema de memoria 8 y/o la memoria 22 que son suficientes para emitir la solicitud de escritura y hacer que el motor de lectura 38 emita una solicitud de lectura en respuesta a que el motor de escritura 40 consume datos de la memoria intermedia 36 que son suficientes para emitir una solicitud de escritura.
En otros ejemplos, cuando se selecciona el modo de transferencia de memoria secuencial como el modo de transferencia de memoria para realizar la totalidad o parte de una operación de transferencia de memoria, el motor de comandos 32 puede configurar el motor de lectura 38 y el motor de escritura 40 para funcionar en el modo de sincronización secuencial para hacer que el motor de lectura 38 emita solicitudes de lectura y el motor de escritura 40 emita solicitudes de escritura en base a un paradigma de exclusión mutua. Hacer que el motor de lectura 38 emita solicitudes de lectura y el motor de escritura 40 emita solicitudes de escritura en base a un paradigma de exclusión mutua puede incluir hacer que el motor de lectura 38 y el motor de escritura 40 se alternen emitiendo grupos de múltiples solicitudes de lectura consecutivas y grupos de múltiples solicitudes de escritura consecutivas al subsistema de memoria 8 y/o a la memoria 22 durante intervalos de tiempo separados.
En ejemplos adicionales, cuando el motor de comandos 32 configura el motor de lectura 38 y el motor de escritura 40 para funcionar en el modo de sincronización intercalada, cada vez que se reciben datos que son suficientes para emitir una solicitud de escritura para una operación de transferencia de memoria por la GPU 10 (por ejemplo, el motor de lectura 38) desde el subsistema de memoria 8 (por ejemplo, la memoria 22), el motor de escritura 40 puede consumir los datos respectivos sin esperar a que se reciban posteriormente datos adicionales para al menos otra solicitud de escritura. Por otra parte, cuando el motor de comandos 32 configura el motor de lectura 38 y el motor de escritura 40 para funcionar en el modo de sincronización secuencial, durante al menos parte de la operación de transferencia de memoria, en respuesta a que la GPU 10 (por ejemplo, el motor de lectura 38) recibe, desde el subsistema de memoria 8 (por ejemplo, la memoria 22), datos de origen que son suficientes para emitir una solicitud de escritura para la operación de transferencia de memoria, el motor de escritura 40 puede diferir el consumo de los datos de origen hasta que se reciban posteriormente datos adicionales que sean suficientes para emitir al menos otra solicitud de escritura. Por ejemplo, el motor de escritura 40 puede diferir el consumo de los datos de origen hasta que la cantidad de datos no consumidos sea mayor que un primer umbral.
En otros ejemplos, cuando el motor de comandos 32 configura el motor de lectura 38 y el motor de escritura 40 para funcionar en el modo de sincronización intercalada, cada vez que el motor de escritura 40 consume datos que son suficientes para emitir una solicitud de escritura para la operación de transferencia de memoria, el motor de lectura 38 puede emitir una solicitud de lectura sin esperar a que se consuman posteriormente datos adicionales por el motor de escritura 40 para al menos otra solicitud de escritura. Por otra parte, cuando el motor de comandos 32 configura el motor de lectura 38 y el motor de escritura 40 para funcionar en el modo de sincronización secuencial, durante al menos parte de la operación de transferencia de memoria, en respuesta a que el motor de escritura 40 consume datos que son suficientes para emitir una solicitud de escritura para la operación de transferencia de memoria, el motor de lectura 38 puede diferir la emisión de una solicitud de lectura posterior hasta que se consuman posteriormente datos por el motor de escritura 40 que sean suficientes para emitir al menos otra solicitud de escritura. Por ejemplo, el motor de lectura 38 puede diferir la emisión de una solicitud de lectura posterior hasta que la cantidad de datos no consumidos sea inferior o igual a un segundo umbral.
En más ejemplos, cuando se selecciona el modo de transferencia de memoria intercalada como el modo de transferencia de memoria para realizar la totalidad o parte de una operación de transferencia de memoria, el motor de comandos 32 puede configurar el motor de lectura 38 y el motor de escritura 40 para funcionar en el modo de sincronización intercalada, y emitir un comando al motor de lectura 38 y/o el motor de escritura 40 para iniciar la realización de la operación de transferencia de memoria. En respuesta a la recepción del comando para iniciar la realización de la operación de transferencia de memoria, el motor de lectura 38 puede emitir una o más solicitudes de lectura. El motor de lectura 38 puede colocar los datos de origen recibidos desde el subsistema de memoria 8 (por ejemplo, la memoria 22) en respuesta a la pluralidad de solicitudes de lectura en la memoria intermedia 36. Para cada una de la pluralidad de solicitudes de lectura, en respuesta a que los datos de origen se colocan en la memoria intermedia 36 para una solicitud respectiva de la pluralidad de solicitudes de lectura, el motor de escritura 40 puede consumir los datos de origen colocados en la memoria intermedia 36 y emitir una solicitud de escritura en base a los datos de origen consumidos. Por ejemplo, el motor de escritura 40 puede generar datos de destino en base a los datos de origen consumidos y emitir una solicitud de escritura para escribir los datos de destino en una ubicación correspondiente en una región de destino para la operación de transferencia de memoria. Para cada una de una pluralidad de solicitudes de escritura, en respuesta a que los datos de origen se consumen desde la memoria intermedia 36 para una solicitud respectiva de las solicitudes de escritura, el motor de lectura 38 puede emitir una solicitud de lectura posterior.
En algunos casos, el motor de lectura 38 puede supervisar la memoria intermedia 36 para determinar cuándo se han consumido datos de la memoria intermedia 36 por el motor de escritura 40. En casos adicionales, el motor de lectura 38 puede recibir una notificación de la memoria intermedia 36 y/o del motor de escritura 40 para determinar cuándo se han consumido datos de la memoria intermedia 36 por el motor de escritura 40. En algunos casos, el motor de escritura 40 puede supervisar la memoria intermedia 36 para determinar cuándo se han colocado datos en la memoria intermedia 36 por el motor de lectura 38. En casos adicionales, el motor de escritura 40 puede recibir una notificación de la memoria intermedia 36 y/o del motor de lectura 38 para determinar cuándo se han colocado datos en la memoria intermedia 36 por el motor de lectura 38.
En ejemplos adicionales, cuando se selecciona el modo de transferencia de memoria secuencial como el modo de transferencia de memoria para realizar la totalidad o parte de una operación de transferencia de memoria, el motor de comandos 32 puede configurar el motor de lectura 38 y el motor de escritura 40 para funcionar en el modo de sincronización secuencial, y emitir un comando al motor de lectura 38 y/o el motor de escritura 40 para iniciar la realización de la operación de transferencia de memoria. En respuesta a la recepción del comando para iniciar la realización de la operación de transferencia de memoria, el motor de lectura 38 puede emitir una pluralidad de solicitudes de lectura. El motor de lectura 38 puede colocar los datos de origen recibidos desde el subsistema de memoria 8 (por ejemplo, la memoria 22) en respuesta a la pluralidad de solicitudes de lectura en la memoria intermedia 36. El motor de lectura 38 puede dejar de emitir solicitudes de lectura en respuesta a la detección de que la memoria intermedia 36 está llena. El motor de escritura 40 puede consumir datos de origen en la memoria intermedia y emitir una pluralidad de solicitudes de escritura en base a los datos consumidos en respuesta a la detección de que la memoria intermedia 36 está llena. El motor de escritura 40 puede dejar de consumir datos de origen en la memoria intermedia 36 y de emitir solicitudes de escritura en respuesta a la detección de que la memoria intermedia 36 está vacía. El motor de lectura 38 puede reanudar la emisión de solicitudes de lectura en respuesta a la detección de que la memoria intermedia 36 está vacía.
En algunos casos, el motor de lectura 38 y/o el motor de escritura 40 puede supervisar la memoria intermedia 36 para determinar cuándo la memoria intermedia 36 está llena o vacía. En casos adicionales, el motor de lectura 38 y/o el motor de escritura 40 puede recibir notificaciones desde la memoria intermedia 36 y/o el motor de escritura 40 para determinar cuándo la memoria intermedia 36 está llena o vacía.
Aunque el motor de comandos 32 se describe en el presente documento realizando una selección de modo de transferencia de memoria y/o configurando los otros componentes de procesamiento en la GPU 10 en base a la selección de modo de transferencia de memoria, en otros ejemplos, uno o más de otros componentes en la GPU 10 pueden realizar estas funciones además de o en lugar del motor de comandos 32. Por ejemplo, se puede usar una unidad de configuración y selección de modo de transferencia de memoria dedicada para realizar la funcionalidad mencionada anteriormente o se pueden configurar el motor de lectura 38 y el motor de escritura 40 para realizar dicha funcionalidad.
En algunos ejemplos, el controlador de GPU 28 que se ejecuta en la CPU 6 (u otros programas que se ejecutan en la CPU 6) puede realizar cualquiera de las técnicas de selección de modo de transferencia de memoria de la presente divulgación y proporcionar el modo de transferencia de memoria seleccionado a la GPU 10. A continuación, la GPU 10 puede seleccionar el modo de transferencia de memoria para realizar la transferencia de memoria en base al modo de transferencia de memoria seleccionado proporcionado a la GPU 10 por la CPU 6.
En ejemplos adicionales, el controlador de GPU 28 puede recibir un comando de modo de transferencia de memoria desde una aplicación de software 24 (por ejemplo, una aplicación de gráficos) que especifica un modo de transferencia de memoria que se va a usar para realizar la operación de transferencia de memoria. En respuesta a la recepción del comando de modo de transferencia de memoria, el controlador de GPU 28 puede hacer que la GPU 10 realice una operación de transferencia de memoria en base al comando de modo de transferencia de memoria. Por ejemplo, el controlador de GPU 28 puede emitir uno o más comandos a la GPU 10 que especifican un modo de transferencia de memoria a usar cuando se realiza una operación de transferencia de memoria.
La FIG. 3 es un diagrama de bloques que ilustra un subsistema de memoria 8 de ejemplo que se puede usar en la configuración de ejemplo mostrada en la FIG. 2. Como se ilustra en la FIG. 3, el subsistema de memoria 8 incluye un controlador de memoria 20, una memoria 22 y un bus 46. El controlador de memoria 20 se puede configurar para recibir solicitudes de acceso a la memoria desde la GPU 10 y para atender las solicitudes de acceso a la memoria recibidas con respecto a la memoria 22. Las solicitudes de acceso a la memoria pueden incluir solicitudes de lectura y/o solicitudes de escritura. Las solicitudes de acceso a la memoria emitidas por la GPU 10 y recibidas por el controlador de memoria 20 pueden estar en un formato que es consumible por el controlador de memoria 20. Por ejemplo, las solicitudes de acceso a la memoria se pueden ajustar a una especificación AMBA AXI, una especificación AMBA AHB o cualquier otra interfaz de controlador de memoria.
En algunos ejemplos, las solicitudes de acceso a la memoria recibidas por el controlador de memoria 20 pueden no estar en un formato que es consumible por la memoria 22. En dichos ejemplos, el controlador de memoria 20 puede generar uno o más comandos de memoria que son consumibles por la memoria 22 y emitir dichos comandos a la memoria 22 para leer datos de y/o escribir datos en la memoria 22. En algunos ejemplos, si la memoria 22 es una DDR SDRAM, entonces el uno o más comandos de memoria que son consumibles por la memoria 22 pueden ser comandos que son compatibles con una interfaz de DDR SDRAM.
En algunos ejemplos, el uno o más comandos generados por el controlador de memoria 20 pueden adoptar la forma de una secuencia de comandos de lectura para una operación de lectura y una secuencia de comandos de escritura para una operación de escritura. Por ejemplo, si la memoria 22 es una DDR SDRAM, el uno o más comandos de memoria generados por el controlador de memoria 20 pueden adoptar la forma de secuencias de comandos de lectura y/o secuencias de comandos de escritura que se ajustan a la interfaz de DDR SDRAM. Las secuencias de comandos de lectura y escritura pueden adoptar la forma de la confirmación de una o más señales de control que se ajustan a una interfaz de DDR SDRAM. Por ejemplo, en respuesta a la recepción de una solicitud de acceso a la memoria, el controlador de memoria 20 puede generar señales para activar una fila y un banco de memoria 22 particulares, si aún no están activados, que corresponden a la dirección especificada en la solicitud de acceso a la memoria. El controlador de memoria 20 también puede generar una señal para seleccionar una columna particular en la fila y el banco activados que corresponda a la dirección especificada en la solicitud de acceso a la memoria. El controlador de memoria 20 también puede generar una señal para indicar a la memoria 22 si los datos se deben leer de o escribir en la memoria 22. Si la solicitud de acceso a la memoria es una solicitud de escritura, a continuación el controlador de memoria 20 puede suministrar datos de escritura a la memoria 22 por medio de un bus bidireccional de datos dentro del bus 46. Si la solicitud de acceso a la memoria es una solicitud de lectura, a continuación el controlador de memoria 20 puede recibir datos desde la memoria 22 por medio del bus bidireccional de datos dentro del bus 46 y proporcionar los datos de lectura a la CPU 14 por medio del bus 18.
La memoria 22 está configurada para recibir comandos de lectura y comandos de escritura, y atender a los comandos con respecto al espacio de almacenamiento de datos contenido dentro de la memoria 22. En respuesta a la recepción de un comando de lectura, la memoria 22 puede obtener datos desde el espacio de almacenamiento de datos contenido dentro de la memoria 22 en una ubicación especificada por una dirección incluida en el comando de lectura, y proporcionar los datos obtenidos al controlador de memoria 20 por medio de un bus bidireccional dentro del bus 46. En respuesta a la recepción de un comando de escritura, la memoria 22 puede almacenar datos recibidos desde el controlador de memoria 20 por medio del bus bidireccional dentro del bus 46 en el espacio de almacenamiento de datos contenido dentro de la memoria 22 en una ubicación especificada por una dirección incluida en el comando de escritura.
Las superficies de origen 42 y la superficie de destino 44 pueden ser sustancialmente similares a los componentes correspondientes mostrados en la FIG. 2. En consecuencia, en aras de la brevedad y para evitar la redundancia, estos componentes no se describirán en mayor detalle.
El bus 46 se puede implementar como cualquier tipo de estructura de bus y hacer funcionar de acuerdo con cualquier tipo de protocolo de bus. En algunos ejemplos, el bus 46 puede incluir líneas de bits que corresponden a las señales de control que se usan para controlar la memoria 22. Por ejemplo, si la memoria 22 es una DDR SDRAM, el bus 46 puede incluir una o más de una señal de reloj, una señal de selección de chip, una señal de selección de banco, una señal de activación de dirección de fila, una señal de activación de dirección de columna, una señal para habilitar la escritura, un bus bidireccional de datos, etc.
Como se analiza anteriormente, el bus 46 puede incluir un bus bidireccional de datos. En otras palabras, las mismas líneas de bits en el bus 46 pueden transferir datos de lectura desde la memoria 22 al controlador de memoria 20 cuando se ejecuta una solicitud de lectura y pueden transferir datos de escritura desde el controlador de memoria 20 a la memoria 22 cuando se ejecuta una solicitud de escritura. Cada vez que el controlador de memoria 20 cambia de emitir solicitudes de lectura a emitir solicitudes de escritura o de emitir solicitudes de escritura a emitir solicitudes de lectura, puede ser necesario un tiempo de inactividad para permitir que el bus bidireccional de datos en el bus 46 se estabilice antes de cambiar de dirección. Este tiempo de estabilización se puede denominar tiempo de respuesta de lectura-escritura.
El modo de transferencia de memoria secuencial descrito en la presente divulgación se puede usar para reducir el número de transiciones de lectura a escritura que tienen lugar cuando se realiza una operación de transferencia de memoria, reduciendo de este modo el retardo global que se produce durante la operación de transferencia de memoria debido al tiempo de respuesta de lectura-escritura. Aunque el modo de transferencia de memoria secuencial puede reducir el retardo que se produce durante la operación de transferencia de memoria debido al tiempo de respuesta de lectura-escritura, para determinados tipos de operaciones de transferencia de memoria, el modo de transferencia de memoria secuencial puede no ser necesariamente más eficaz que el modo de transferencia de memoria intercalada. Por ejemplo, si siempre se recupera una cantidad de datos fija relativamente grande para una operación de lectura durante el modo de transferencia de memoria secuencial, entonces para operaciones de transferencia de memoria pequeñas, el modo secuencial puede requerir la búsqueda de datos superfluos, lo que puede eclipsar los beneficios logrados reduciendo el tiempo de respuesta de lectura-escritura.
Debido a estas y otras consideraciones, un tipo de modo de transferencia de memoria puede no ser universalmente el modo de transferencia de memoria más eficaz para realizar operaciones de transferencia de memoria. En consecuencia, las técnicas de la presente divulgación se pueden usar para seleccionar modos de transferencia de memoria apropiados que se adaptan mejor a tipos particulares de operaciones de transferencia de memoria, mejorando de este modo el rendimiento de una GPU que puede realizar tipos y tamaños variables de operaciones de transferencia de memoria.
La FIG. 4 es un diagrama de bloques que ilustra otro subsistema de memoria 8 de ejemplo que se puede usar en la configuración de ejemplo mostrada en la FIG. 2. Como se ilustra en la FIG. 4, el subsistema de memoria 8 incluye una memoria 22 que está acoplada directamente al bus 18 sin un controlador de memoria intermedio. En este ejemplo, la memoria 22 se puede configurar para recibir solicitudes de acceso a la memoria desde la GPU 10 y para atender las solicitudes de acceso a la memoria recibidas con respecto al espacio de almacenamiento de datos contenido dentro de la memoria 22. Las solicitudes de acceso a la memoria pueden incluir solicitudes de lectura y/o solicitudes de escritura.
En algunos ejemplos, la memoria 22 puede incluir una funcionalidad de controlador de memoria incorporada. En dichos ejemplos, las solicitudes de acceso a la memoria emitidas por la GPU 10 y recibidas por la memoria 22 pueden estar en un formato que es consumible por un controlador de memoria. Por ejemplo, las solicitudes de acceso a la memoria se pueden ajustar a una especificación AMBA AXI, una especificación AMBA AHB o cualquier otra interfaz de controlador de memoria. La funcionalidad de controlador de memoria incorporada puede convertir las solicitudes de acceso a la memoria recibidas en uno o más comandos que son consumibles por la memoria 22. Por ejemplo, si la memoria 22 es una DDR SDRAM, entonces el uno o más comandos de memoria que son consumibles por la memoria 22 pueden ser comandos que son compatibles con una interfaz de DDR SDRAM.
En otros ejemplos, el motor de lectura 38 y el motor de escritura 40 en la GPU 10 pueden emitir comandos al subsistema de memoria 8 y la memoria 22 que son consumibles por la memoria 22. Por ejemplo, si la memoria 22 es una DDR SDRAM, entonces el uno o más comandos de memoria que son consumibles por la memoria 22 pueden ser comandos que son compatibles con una interfaz de DDR SDRAM.
En ejemplos adicionales, la GPU 10 puede incluir la funcionalidad de controlador de memoria incorporada. En dichos ejemplos, las solicitudes de acceso a la memoria emitidas por el motor de lectura 38 y el motor de escritura 40 pueden no estar necesariamente en un formato que es consumible por la memoria 22. Por ejemplo, las solicitudes de acceso a la memoria se pueden ajustar a una especificación AMBA AXI, una especificación AMBA AHB o cualquier otra interfaz de controlador de memoria. La funcionalidad de controlador de memoria incorporada en la GPU 10 puede convertir las solicitudes de acceso a la memoria recibidas en uno o más comandos que son consumibles por la memoria 22. Por ejemplo, si la memoria 22 es una DDR SDRAM, entonces el uno o más comandos de memoria que son consumibles por la memoria 22 pueden ser comandos que son compatibles con una interfaz de DDR SDRAM.
En algunos ejemplos, el bus 18 puede incluir un bus bidireccional de datos. El modo de transferencia de memoria secuencial descrito en la presente divulgación se puede usar para reducir el número de transiciones de lectura a escritura que tienen lugar cuando se realiza una operación de transferencia de memoria, reduciendo de este modo el retardo global que se produce durante la operación de transferencia de memoria debido al tiempo de respuesta de lectura-escritura. Sin embargo, como ya se analizó anteriormente, el modo de transferencia de memoria secuencial puede no ser el modo de transferencia de memoria más eficaz para todos los tipos y tamaños de operaciones de transferencia de memoria. En consecuencia, las técnicas de la presente divulgación se pueden usar para seleccionar modos de transferencia de memoria apropiados que se adaptan mejor a tipos particulares de operaciones de transferencia de memoria, mejorando de este modo el rendimiento de una GPU que puede realizar tipos y tamaños variables de operaciones de transferencia de memoria.
La FIG. 5 es un diagrama conceptual que ilustra una operación de transferencia de memoria de origen única de ejemplo de acuerdo con la presente divulgación. La FIG. 5 representa una superficie de origen 50 y una superficie de destino 52, de las que cada una corresponde a una matriz bidimensional de datos de píxeles. Los datos de píxeles pueden incluir valores de color rojo, verde, azul (RVA) y, en algunos casos, un valor alfa (a) para cada píxel en la superficie. Debido a que cada una de las superficies 50, 52 corresponde a una matriz bidimensional de datos de píxeles, los datos de píxeles para una ubicación de píxel individual en la superficie se pueden indexar por coordenadas de fila y columna. En algunos ejemplos, la superficie de origen 50 y la superficie de destino 52 pueden ser mapas de bits. En otros ejemplos, la superficie de origen 50 y la superficie de destino 52 pueden ser un recurso de memoria intermedia, tal como, por ejemplo, una memoria intermedia de textura. La superficie de origen 50 y la superficie de destino 52 de ejemplo en la FIG. 5 tienen la misma conformación y tamaño, y tienen forma rectangular. Sin embargo, en otros ejemplos, la superficie de origen 50 y la superficie de destino 52 pueden no tener necesariamente la misma conformación y tamaño y/o pueden tener otras conformaciones.
La superficie de origen 50 incluye una región de origen 54 y la superficie de destino 52 incluye una región de destino 56. La región de origen 54 incluye un subconjunto de los datos de píxeles incluidos en la superficie de origen 50, y la región de destino 56 incluye un subconjunto de los datos de píxeles incluidos en la superficie de destino 52. Un subconjunto de los datos de píxeles incluidos en una superficie se puede referir a la totalidad o a menos de la totalidad de los datos de píxeles incluidos en la superficie. Como se muestra en la FIG. 5, la región de origen 54 y la región de destino 56 tienen el mismo tamaño y conformación, y tienen forma rectangular. Sin embargo, en otros ejemplos, la región de origen 54 y la región de destino 56 pueden no tener forma rectangular.
En la operación de transferencia de memoria de ejemplo mostrada en la FIG. 5, los datos se transfieren desde la región de origen 54 de la superficie de origen 50 a la región de destino 56 de la superficie de destino 52. En general, los datos para cada ubicación de píxel en la región de origen 54 se transfieren a la ubicación de píxel correspondiente en la región de destino 56. Se puede decir que ubicaciones de píxeles diferentes en regiones diferentes son ubicaciones de píxeles correspondientes si la posición relativa de cada una de las ubicaciones de píxeles en su región respectiva es la misma. Por ejemplo, una ubicación de píxel en la región de origen 54 puede corresponder a una ubicación de píxel en la región de destino 56 si la ubicación de píxel en la región de origen 54 tiene la misma ubicación relativa en la región de origen 54 que la ubicación relativa en la región de destino 56 de la ubicación de píxel en la región de destino 56. Por ejemplo, la tercera columna de la segunda fila de la región de origen 54 y la región de destino 56 tienen la misma ubicación relativa.
La operación de transferencia de memoria mostrada en la FIG. 5 es una operación de transferencia de memoria de origen única porque se usa una región de origen única como operando de origen para la operación de transferencia de memoria. La operación de transferencia de memoria de origen única que se muestra en la FIG. 5 puede representar una operación de copia de memoria donde los mismos datos de la región de origen 54 se copian en la región de destino 56. Aunque la operación de transferencia de memoria mostrada en la FIG. 5 muestra una superficie de origen 50 y una superficie de destino 52 separadas, en otros ejemplos, la superficie de origen 50 y la superficie de destino 52 pueden ser la misma superficie. En dichos ejemplos, la región de origen 54 y la región de destino 56 pueden ser, en algunos ejemplos, regiones diferentes dentro de la misma superficie entre las que se transfieren datos por la operación de copia de memoria.
La FIG. 6 es un diagrama conceptual que ilustra una operación de transferencia de memoria de origen múltiple de ejemplo de acuerdo con la presente divulgación. La FIG. 6 representa una primera superficie de origen 58, una segunda superficie de origen 60 y una superficie de destino 62. Cada una de las superficies 58, 60, 62 puede ser sustancialmente similar a las superficies 50, 52 analizadas anteriormente con respecto a la FIG. 5.
La primera superficie de origen 58 incluye una primera región de origen 64, la segunda superficie de origen 60 incluye una segunda región de origen 66 y la superficie de destino 62 incluye una región de destino 68. La primera región de origen 64 incluye un subconjunto de los datos de píxeles incluidos en la primera superficie de origen 58, la segunda región de origen 66 incluye un subconjunto de los datos de píxeles incluidos en la segunda superficie de origen 60 y la región de destino 68 incluye un subconjunto de los datos de píxeles incluidos en la superficie de destino 62. Como se muestra en la FIG. 5, la primera región de origen 64, la segunda región de origen 66 y la región de destino 68 tienen el mismo tamaño y conformación, y tienen forma rectangular. En otros ejemplos, sin embargo, las regiones 64, 66 y 68 pueden no tener forma rectangular.
En la operación de transferencia de memoria de ejemplo de la FIG. 6, los datos de origen de la primera región de origen 64 y los datos de origen de la segunda región de origen 66 se combinan por medio de una operación de tramado 70 para generar datos de destino, y los datos de destino se colocan en la región de destino 68 de la superficie de destino 62. En general, los datos para cada ubicación de píxel en la primera región de origen 64 se combinan con los datos de la ubicación de píxel correspondiente en la segunda región de origen 66 y se escriben en una ubicación de píxel correspondiente en la región de destino 68. Se puede decir que ubicaciones de píxeles diferentes en regiones diferentes son ubicaciones de píxeles correspondientes si la posición relativa de cada una de las ubicaciones de píxeles en su región respectiva es la misma.
La operación de transferencia de memoria mostrada en la FIG. 6 es una operación de transferencia de memoria de origen múltiple porque se usan regiones de origen múltiples como operandos de origen para la operación de transferencia de memoria. La operación de transferencia de memoria de origen múltiple mostrada en la FIG. 6 puede representar una operación de composición donde los datos de dos regiones de origen diferentes se combinan para generar datos de destino que se escriben en una región de destino. Aunque la operación de transferencia de memoria mostrada en la FIG. 6 muestra una primera superficie de origen 58, una segunda superficie de origen 60 y una superficie de destino 62 separadas, en otros ejemplos, una o más de las superficies 58, 60, 62 pueden ser la misma superficie. Por ejemplo, la segunda superficie de origen 60 y la superficie de destino 62 pueden ser la misma superficie, y la segunda región de origen 66 y la región de destino 68 pueden ser las mismas regiones dentro de esa superficie. En un ejemplo de este tipo, la operación de composición puede fusionar datos de píxeles en la primera región de origen 64 con datos de píxeles existentes en la superficie de destino 62 usando un operador de tramado particular.
La FIG. 7 es un diagrama conceptual que ilustra una operación de transferencia de memoria de origen única asistida por GPU de ejemplo de acuerdo con la presente divulgación. La operación de transferencia de memoria asistida por GPU mostrada en la FIG. 7 puede ser la misma operación de transferencia de memoria que la que se representa en la FIG. 5. Como se muestra en la FIG. 7, la superficie de origen 50 y la superficie de destino 52 se almacenan en la memoria 22.
Para realizar la operación de transferencia de memoria, la GPU 10 lee los datos de origen de la región de origen 54, genera datos de destino en base a los datos de origen leídos de la región de origen 54 y escribe los datos de destino en la región de destino 56. Los datos de destino pueden ser los mismos que los datos de origen.
Para cada ubicación de píxel en la región de origen 54, la GPU 10 puede emitir una solicitud de lectura para leer los datos de origen de la región de origen 54 que corresponde a la ubicación de píxel respectiva. En respuesta a la recepción de la solicitud de lectura, la memoria 22 puede proporcionar los datos de origen que corresponden a la ubicación de píxel respectiva a la GPU 10. En algunos ejemplos, la GPU 10 puede almacenar los datos de origen en una memoria intermedia en la GPU 10. La GPU 10 puede generar datos de destino para la ubicación de píxel respectiva en base a los datos de origen para la ubicación de píxel respectiva. Para una operación de copia de memoria, los datos de destino para la ubicación de píxel respectiva pueden ser los mismos que los datos de origen para la ubicación de píxel respectiva. La GPU 10 puede emitir una solicitud de escritura para escribir los datos de destino en una ubicación de píxel en la región de destino 56 que corresponde a la ubicación de píxel respectiva de la región de origen 54. En respuesta a la recepción de la solicitud de escritura, la memoria 22 puede almacenar los datos de destino en la ubicación de píxel en la región de destino 56 que corresponde a la ubicación de píxel respectiva de la región de origen 54. La GPU 10 puede realizar estas operaciones para cada ubicación de píxel en la región de origen 54 y la ubicación de píxel correspondiente en la región de destino 56.
La FIG. 8 es un diagrama conceptual que ilustra una operación de transferencia de memoria de origen múltiple asistida por GPU de ejemplo de acuerdo con la presente divulgación. La operación de transferencia de memoria asistida por GPU de ejemplo mostrada en la FIG. 8 puede ser la misma operación de transferencia de memoria que la que se representa en la FIG. 6. Como se muestra en la FIG. 8, la primera superficie de origen 58, la segunda superficie de origen 60 y la superficie de destino 62 se almacenan en la memoria 22.
Para realizar la operación de transferencia de memoria, la GPU 10 lee los datos de origen de la primera superficie de origen 58 y la segunda superficie de origen 60, genera datos de destino en base a los datos de origen leídos de la primera superficie de origen 58 y la segunda superficie de origen 60, y escribe los datos de destino en la superficie de destino 62. Los datos de destino se pueden basar en una combinación de los datos de origen. Por ejemplo, la GPU 10 puede generar los datos de destino en base a un operador de tramado que especifica la manera en que se van a combinar los datos de origen de la primera superficie de origen 58 y la segunda superficie de origen 60. Se puede usar una unidad de operaciones de tramado de la GPU 10 (por ejemplo, la unidad de operaciones de tramado 34 mostrada en la FIG. 2) para combinar los datos.
Para cada ubicación de píxel en la primera región de origen 64, la GPU 10 puede emitir una solicitud de lectura para leer los primeros datos de origen de la primera región de origen 64 que corresponde a la ubicación de píxel respectiva, y emitir una solicitud de lectura para leer los segundos datos de origen de una ubicación de píxel en la segunda región de origen 66 que corresponde a la ubicación de píxel respectiva en la primera región de origen 64 (es decir, una ubicación de píxel en la segunda región de origen 66 que tiene la misma ubicación relativa que la ubicación de píxel respectiva en la primera región de origen 64). En respuesta a la recepción de solicitudes de lectura, la memoria 22 puede proporcionar los primeros datos de origen que corresponden a la ubicación de píxel respectiva en la primera región de origen 64 a la GPU 10, y los segundos datos de origen que corresponden a una ubicación de píxel correspondiente en la segunda región de origen 66 a la GPU 10. En algunos ejemplos, la GPU 10 puede almacenar los datos de origen en una memoria intermedia en la GPU 10. La GPU 10 puede generar datos de destino para la ubicación de píxel respectiva en base a los primeros datos de origen y los segundos datos de origen para la ubicación de píxel respectiva. Para una operación de composición, los datos de origen se pueden combinar de acuerdo con una operación de tramado para generar los datos de destino. La GPU 10 puede emitir una solicitud de escritura para escribir los datos de destino en una ubicación de píxel en la región de destino 68 que corresponde a la ubicación de píxel respectiva de la primera región de origen 64. La GPU 10 puede realizar estas operaciones para cada conjunto de ubicaciones de píxeles correspondientes en la primera región de origen 64, la segunda región de origen 66 y la región de destino 68.
Las FIGS. 9-12 son diagramas de temporización que ilustran características de temporización de ejemplo para diversas operaciones de transferencia de memoria que se realizan de acuerdo con los diversos modos de transferencia de memoria de la presente divulgación. Los diagramas de temporización en las FIGS. 9-12 se describen con respecto a la configuración del dispositivo informático 2 mostrado en la FIG. 3 para propósitos ejemplares. Sin embargo, se debe entender que se pueden usar otros dispositivos que tengan los mismos o diferentes componentes en la misma o una configuración diferente para realizar las técnicas de la presente divulgación.
Cabe destacar que los diagramas de temporización presentados en las FIGS. 9-12 se proporcionan simplemente para representar conceptos generales de la presente divulgación que se relacionan con la emisión de solicitudes de lectura y solicitudes de escritura en diversos modos de transferencia de memoria y con las variaciones en el retardo de respuesta de lectura-escritura que se pueden producir cuando se usan los diferentes modos de transferencia de memoria. Como tal, se entiende que estos diagramas de temporización no pretenden ser modelos físicamente rigurosos o exhaustivos de todas las consideraciones de temporización que se pueden producir cuando se accede a una memoria. De forma similar, diferentes controladores de memoria y/o memorias pueden responder a solicitudes de lectura y solicitudes de escritura de una manera que es diferente a la que se representa en los diagramas de temporización de las FIGS. 9-12. Como tal, se debe entender que las técnicas de la presente divulgación no se limitan al comportamiento del controlador de memoria y/o al comportamiento de la memoria particular representado en las FIGS. 9-12.
Las FIGS. 9A y 9B son un diagrama de temporización que ilustra características de temporización de ejemplo para una operación de transferencia de memoria de origen única que se realiza de acuerdo con el modo de transferencia de memoria intercalada de la presente divulgación. Como se analiza anteriormente, la operación de transferencia de memoria representada en las FIGS. 9A y 9B se realiza con la configuración del dispositivo informático 2 ilustrado en la FIG. 3. Como se muestra en la FIG. 3, la configuración incluye un controlador de memoria 20 que está acoplado de forma comunicativa a una GPU 10 por medio de un bus 18 y que está acoplado de forma comunicativa a la memoria 22 por medio de un bus 46. Para realizar la operación de transferencia de memoria de acuerdo con el modo de transferencia de memoria intercalada, el motor de comandos 32 puede configurar el motor de lectura 38 y el motor de escritura 40 para funcionar en un modo de sincronización intercalada. La operación de transferencia de memoria representada en las FIGS. 9A y 9B se realiza con respecto a una región de origen y una región de destino, de las que cada una tiene doce píxeles. Por lo tanto, durante la operación de transferencia de memoria, se realizan doce solicitudes de lectura y doce solicitudes de escritura con respecto a la memoria 22.
En las FIGS. 9A y 9B, cada fila representa una ranura temporal o intervalo de tiempo particular durante la realización de la operación de transferencia de memoria, siendo la primera fila la primera ranura temporal y siendo la última fila la última ranura temporal. La columna "Tiempo" representa el número de ranura temporal.
La columna "Motor de lectura" incluye actividades de "Lectura", que representan solicitudes de lectura que se emiten por el motor de lectura 38. La columna "Motor de escritura" incluye actividades de "Escritura", que representan solicitudes de escritura que se emiten por el motor de escritura 40. Las solicitudes de lectura y escritura se pueden enviar desde la GPU 10 al controlador de memoria 20 por medio de uno o más canales de bus de direcciones y/o comandos dentro del bus 18.
Los números que siguen a las solicitudes de lectura enumeran diferentes solicitudes de lectura asociadas con diferentes ubicaciones de píxeles en una región de origen. Los números que siguen a las solicitudes de escritura enumeran diferentes solicitudes de escritura asociadas con diferentes ubicaciones de píxeles en una región de destino. Una solicitud de lectura y una solicitud de escritura que tienen el mismo número indica que la solicitud de lectura y la solicitud de escritura se realizan con respecto a las ubicaciones de píxeles correspondientes (es decir, píxeles que tienen la misma ubicación relativa) en las regiones de origen y destino. En otras palabras, los datos de escritura para la solicitud de escritura con un número particular se generan en base a los datos de origen recibidos en respuesta a una solicitud de lectura que tiene ese mismo número particular.
Las columnas "Bus de lectura" y "Bus de escritura" representan canales de datos independientes para transferir datos entre la GPU 10 y el controlador de memoria 20. El "Bus de lectura" y el "Bus de escritura" pueden corresponder al bus 18 mostrado en la FIG. 3. El "Bus de lectura" puede ser un canal de bus unidireccional dentro del bus 18 que transporta datos de lectura desde el controlador de memoria 20 a la GPU 10. El "Bus de escritura" puede ser un canal de bus unidireccional dentro del bus 18 que transporta datos de escritura desde la GPU 10 al controlador de memoria 20.
La columna "Bus de lectura" incluye actividades de "Datos de lectura" que representan datos de origen que se transfieren desde el controlador de memoria 20 a la GPU 10 en respuesta a una solicitud de lectura particular emitida por el motor de lectura 38. El número que sigue a la actividad de "Datos de lectura" indica la solicitud de lectura que corresponde a los datos de origen representados por la actividad "Datos de lectura". La columna "Bus de escritura" incluye actividades de "Datos de escritura" que representan datos de destino que se transfieren desde la GPU 10 al controlador de memoria 20 junto con una solicitud de escritura emitida por el motor de escritura 40. El número que sigue a la actividad de "Datos de escritura" indica la solicitud de escritura que corresponde a los datos de destino representados por la actividad "Datos de escritura".
La columna "Controlador de memoria" incluye actividades de "Comando de lectura" y actividades de "Comando de escritura" que representan comandos de lectura y comandos de escritura, respectivamente, que se envían desde el controlador de memoria 20 a la memoria 22. Los comandos se pueden enviar sobre uno o más canales de bus de direcciones y/o comandos dentro del bus 46. El número que sigue a la actividad de "Comando de lectura" indica la solicitud de lectura que corresponde al comando de lectura representado por la actividad de "Comando de lectura". De forma similar, el número que sigue a la actividad de "Comando de escritura" indica la solicitud de escritura que corresponde al comando de escritura representado por la actividad de "Comando de escritura".
La columna "Bus de memoria" representa un bus bidireccional de datos entre el controlador de memoria 20 y la memoria 22. El bus bidireccional de datos puede ser parte del bus 46. La columna "Bus de memoria" incluye actividades de "Datos de lectura" que representan datos de origen que se transfieren desde la memoria 22 al controlador de memoria 20 en respuesta a un comando de lectura particular emitido por el controlador de memoria 20, y actividades de "Datos de escritura" que representan datos de destino que se transfieren desde el controlador de memoria 20 a la memoria 22 junto con un comando de escritura particular emitido por el controlador de memoria 20. El número que sigue a la actividad de "Datos de lectura" indica el comando de lectura que corresponde a los datos de origen representados por la actividad de "Datos de lectura". El número que sigue a la actividad de "Datos de escritura" indica el comando de escritura que corresponde a los datos de destino representados por la actividad de "Datos de escritura".
La operación de transferencia de memoria representada en las FIGS. 9A y 9B se realiza con una arquitectura de memoria que admite acceso de lectura canalizado y acceso de escritura canalizado. El acceso de lectura canalizado puede permitir que la GPU 10 y/o el controlador de memoria 20 emitan una solicitud de lectura posterior antes de recibir datos en respuesta a todas las solicitudes de lectura emitidas previamente. En otras palabras, el acceso de lectura canalizado puede permitir que la GPU 10 y/o el controlador de memoria 20 emitan una primera solicitud de lectura, y emitan una segunda solicitud de lectura después de emitir la primera solicitud de lectura y antes de recibir datos de origen en respuesta a la primera solicitud de lectura.
El acceso de escritura canalizado puede permitir que la GPU 10 y/o el controlador de memoria 20 emitan una solicitud de escritura posterior antes de recibir la confirmación de que se ha completado la totalidad de las solicitudes de escritura emitidas previamente. En otras palabras, el acceso de escritura canalizado puede permitir que la GPU 10 y/o el controlador de memoria 20 emitan una primera solicitud de escritura, y emitan una segunda solicitud de escritura después de emitir la primera solicitud de escritura y antes de recibir la confirmación de que la primera solicitud de escritura se ha completado.
La ejecución de la operación de transferencia de memoria empieza en las ranuras temporales 1-4 donde el motor de lectura 38 empieza a emitir solicitudes de lectura. El controlador de memoria 20 convierte cada solicitud de lectura en un comando de lectura. Durante las ranuras temporales 2-5, el controlador de memoria 20 emite los comandos de lectura a la memoria 22 por medio del bus 46 (es decir, el bus de memoria). En este ejemplo, la memoria 22 está configurada para devolver datos de lectura en respuesta a una solicitud de lectura en la segunda ranura temporal después de recibir un comando de lectura. Por ejemplo, en respuesta a la recepción de "Comando de lectura 1" en la ranura temporal 2, la memoria 22 devuelve "Datos de lectura 1", que corresponde a "Comando de lectura 1" en la ranura temporal 4. Durante las ranuras temporales 4-7, la memoria 22 transfiere los datos de lectura para las primeras cuatro solicitudes de lectura al controlador de memoria 20. Durante las ranuras temporales 5-8, el controlador de memoria 20 redirige los datos de lectura a la GPU 10 por medio del "Bus de lectura".
En la ranura temporal 5, el motor de escritura 40 detecta que se han recibido datos de origen que son suficientes para emitir una solicitud de escritura por la GPU 10 en respuesta a una solicitud de lectura. En este ejemplo, los datos de origen que son suficientes para emitir una solicitud de escritura corresponden a una unidad de datos de origen recibida en respuesta a una única solicitud de lectura. Durante la ranura temporal 6, en respuesta a la detección de que se han recibido datos de origen que son suficientes para emitir una solicitud de escritura por la GPU 10, el motor de escritura 40 consume los datos de origen recibidos, genera datos de destino en base a los datos de origen, emite una solicitud de escritura al controlador de memoria 20 y transfiere los datos de destino al controlador de memoria 20 por medio del "Bus de escritura". En algunos ejemplos, los datos de destino pueden ser idénticos a los datos de origen.
En la ranura temporal 6, el controlador de memoria 20 recibe la solicitud de escritura, pero no emite un comando de escritura a la memoria 22 hasta la ranura temporal 11 por al menos dos motivos. En primer lugar, el controlador de memoria 20 todavía está esperando recibir datos de origen desde la memoria 22 en respuesta a solicitudes de lectura emitidas previamente. En segundo lugar, como se analiza anteriormente, cada vez que se produce una conmutación entre atender solicitudes de lectura y escritura, puede ser necesaria una cantidad particular de tiempo de inactividad para dejar que el bus se estabilice antes de que el bus cambie de dirección (por ejemplo, de lectura a escritura). Este tiempo de inactividad se puede denominar retardo de respuesta de lectura-escritura. En el ejemplo de las FIGS. 9A y 9B, el retardo de respuesta de lectura-escritura es de dos ciclos inactivos (es decir, ranuras temporales). Como tal, después de la actividad de "Datos de lectura 4", el controlador de memoria 20 retarda la emisión del "Comando de escritura 1" durante dos ranuras temporales. Junto con la emisión del "Comando de escritura 1", el controlador de memoria 20 transfiere los "Datos de escritura 1" sobre el bus de memoria a la memoria 22.
Volviendo a la ranura temporal 6, el motor de lectura 38 detecta que los datos de origen que son suficientes para emitir una solicitud de escritura se han consumido por el motor de escritura 40. Durante la ranura temporal 7, en respuesta a la detección de que los datos de origen que son suficientes para emitir una solicitud de escritura se han consumido por el motor de escritura 40, el motor de lectura 38 emite una solicitud de lectura posterior. También durante la ranura temporal 7, el motor de escritura 40 emite la solicitud de escritura "Escritura 2" en respuesta a que la GPU 10 recibe los "Datos de lectura 2".
En este punto, el controlador de memoria 20 tiene múltiples tipos diferentes de solicitudes de acceso a la memoria para arbitrar y priorizar. Para la operación de transferencia de memoria de ejemplo representada en las FIGS. 9A y 9B, el controlador de memoria 20 procesa las solicitudes de acceso a la memoria que se recibieron antes que las solicitudes de acceso a la memoria que se recibieron más tarde. Si se reciben una solicitud de lectura y una solicitud de escritura durante la misma ranura temporal, el controlador de memoria 20 procesa la solicitud de lectura antes que la solicitud de escritura. Por lo tanto, aunque se reciben tanto una solicitud de lectura como una solicitud de escritura por el controlador de memoria 20 durante la ranura temporal 7, el controlador de memoria 20 procesa la solicitud de lectura antes de procesar la solicitud de escritura. Esto se muestra en la FIG. 9A donde el controlador de memoria 20 emite el "Comando de lectura 5" durante la ranura temporal 11 y el "Comando de escritura 2" durante la ranura temporal 16. Cabe destacar que las reglas anteriores son simplemente un ejemplo de un esquema de arbitraje y priorización que se podría implementar en un controlador de memoria 20, y también se pueden usar otros tipos de esquemas de arbitraje y priorización en otros ejemplos.
Después de la ranura temporal 11, el motor de lectura 38 y el motor de escritura 40 continúan emitiendo solicitudes de lectura y solicitudes de escritura de acuerdo con un paradigma productor-consumidor. Una vez que se han leído los doce píxeles en la región de origen y se han escrito los doce píxeles en la región de destino, se completa la operación de transferencia de memoria.
Como se muestra en las FIGS. 9A y 9B, el modo de transferencia de memoria intercalada puede hacer que se intercalen solicitudes de lectura y solicitudes de escritura. Por ejemplo, durante las ranuras temporales 7-9, la GPU 10 emite solicitudes de lectura y solicitudes de escritura al controlador de memoria 20 durante las mismas ranuras temporales. Esto hace que el controlador de memoria 20 intercale solicitudes de lectura y solicitudes de escritura como se muestra en la columna "Bus de memoria" en las ranuras temporales 11-28. Como otro ejemplo, durante las ranuras temporales 10-39, la GPU 10 emite solicitudes de lectura y solicitudes de escritura al controlador de memoria 20 de manera intercalada, lo que a su vez hace que el controlador de memoria 20 procese las solicitudes de manera intercalada durante las ranuras temporales 29-55. Debido a la intercalación, un número significativo de ranuras temporales están inactivas en el "Bus de memoria" ya que el bus cambia de dirección con frecuencia.
La FIG. 10 es un diagrama de temporización que ilustra características de temporización de ejemplo para una operación de transferencia de memoria de origen única que se realiza de acuerdo con el modo de transferencia de memoria secuencial de la presente divulgación. Similar a la operación de transferencia de memoria representada en las FIGS. 9A y 9B, la operación de transferencia de memoria en la FIG. 10 se realiza con la configuración del dispositivo informático 2 ilustrado en la FIG. 3. También similar a la operación de transferencia de memoria representada en las FIGS. 9A y 9B, la operación de transferencia de memoria representada en la FIG. 10 admite el acceso de lectura canalizado y el acceso de escritura canalizado. El formato de la tabla representada en la FIG. 10 es sustancialmente similar a la tabla mostrada en las FIGS. 9A y 9B, y por lo tanto no se describirá en mayor detalle.
Para realizar la operación de transferencia de memoria de acuerdo con el modo de transferencia de memoria secuencial, el motor de comandos 32 puede configurar el motor de lectura 38 y el motor de escritura 40 para funcionar en un modo de sincronización secuencial. La operación de transferencia de memoria representada en la FIG. 10 se realiza con respecto a una región de origen y una región de destino, de las que cada una tiene doce píxeles. Por lo tanto, durante la operación de transferencia de memoria, se realizan doce solicitudes de lectura y doce solicitudes de escritura con respecto a la memoria 22.
La ejecución de la operación de transferencia de memoria empieza en las ranuras temporales 1-4 donde el motor de lectura 38 empieza a emitir solicitudes de lectura. En la ranura temporal 5, el motor de lectura 38 deja de emitir solicitudes de lectura en respuesta a que el número de solicitudes de lectura emitidas es mayor que o igual al primer umbral. En este ejemplo, el primer número de umbral es cuatro solicitudes de lectura.
En la ranura temporal 8, el motor de escritura 40 detecta que la cantidad de datos no consumidos almacenados en la memoria intermedia 36 es mayor que o igual al primer umbral. En la ranura temporal 9, en respuesta a la detección de que la cantidad de datos no consumidos almacenados en la memoria intermedia 36 es mayor que o igual al primer umbral, el motor de escritura 40 empieza a consumir datos de origen de la memoria intermedia 36, a generar datos de destino en base a los datos de origen consumidos y a emitir solicitudes de escritura para escribir los datos de destino en la memoria 22. En la ranura temporal 13, el motor de escritura 40 detecta que la cantidad de datos no consumidos en la memoria intermedia 36 es inferior o igual a un segundo umbral. En respuesta a la detección de que la cantidad de datos no consumidos en la memoria intermedia 36 es inferior o igual a un segundo umbral, el motor de escritura 40 deja de consumir datos de origen y de emitir solicitudes de escritura para los datos de origen consumidos. En este ejemplo, el segundo umbral es cero.
En la ranura temporal 12, el motor de lectura 38 detecta que la cantidad de datos no consumidos en la memoria intermedia 36 es inferior o igual a un segundo umbral y reanuda la emisión de solicitudes de lectura en la ranura temporal 13. El motor de lectura 38 y el motor de escritura 40 pueden continuar alternando la emisión de secuencias de solicitudes de lectura consecutivas y secuencias de solicitudes de escritura consecutivas de acuerdo con el modo de transferencia de memoria secuencial. Una vez que se han leído los doce píxeles en la región de origen y se han escrito los doce píxeles en la región de destino, se completa la operación de transferencia de memoria.
Como se muestra en la FIG. 10, el modo de transferencia de memoria secuencial puede hacer que se emitan solicitudes de lectura y solicitudes de escritura en grupos separados de solicitudes de lectura y solicitudes de escritura. Por ejemplo, durante las ranuras temporales 1-4, la g Pu 10 emite un grupo de cuatro solicitudes de lectura consecutivas, y durante las ranuras temporales 9-12, la GPU 10 emite un grupo de cuatro solicitudes de escritura consecutivas. Como se muestra en la FIG. 10, la emisión de grupos separados de solicitudes de lectura y escritura hizo que el número de veces que el "Bus de memoria" cambió de dirección se redujera en relación con el modo de transferencia de memoria intercalada mostrado en las FIGS. 9A y 9B. Como tal, el modo de memoria secuencial puede reducir el retardo de respuesta de lectura-escritura global que se produce cuando se realiza una operación de transferencia de memoria en relación con el modo de transferencia de memoria intercalada. Esto se puede ver observando que la misma operación de transferencia de memoria tardó 61 ranuras temporales para completarse en las FIGS. 9A y 9B cuando se realizó de acuerdo con el modo de transferencia intercalada y 37 ranuras temporales para completarse en la FIG. 10 cuando se realizó de acuerdo con el modo de transferencia de memoria secuencial.
Aunque el modo de transferencia de memoria secuencial puede reducir el retardo que se produce durante la operación de transferencia de memoria debido al tiempo de respuesta de lectura-escritura, para determinados tipos de operaciones de transferencia de memoria, el modo de transferencia de memoria secuencial puede no ser necesariamente más eficaz que el modo de transferencia de memoria intercalada. Por ejemplo, si siempre se recupera una cantidad de datos fija relativamente grande para una operación de lectura durante el modo de transferencia de memoria secuencial, entonces para operaciones de transferencia de memoria pequeñas, el modo secuencial puede requerir la búsqueda de datos superfluos, lo que puede eclipsar los beneficios logrados reduciendo el tiempo de respuesta de lectura-escritura.
Debido a estas y otras consideraciones, un tipo de modo de transferencia de memoria puede no ser universalmente el modo de transferencia de memoria más eficaz para realizar operaciones de transferencia de memoria. En consecuencia, las técnicas de la presente divulgación se pueden usar para seleccionar modos de transferencia de memoria apropiados que se adaptan mejor a tipos particulares de operaciones de transferencia de memoria, mejorando de este modo el rendimiento de una GPU que puede realizar tipos y tamaños variables de operaciones de transferencia de memoria.
Las FIGS. 11A y 11B son un diagrama de temporización que ilustra características de temporización de ejemplo para una operación de transferencia de memoria de origen múltiple que se realiza de acuerdo con el modo de transferencia de memoria intercalada de la presente divulgación. Similar a la operación de transferencia de memoria representada en las FIGS. 9A y 9B, la operación de transferencia de memoria en las FIGS. 11A y 11B se realiza con la configuración del dispositivo informático 2 ilustrado en la FIG. 3. También similar a la operación de transferencia de memoria representada en las FIGS. 9A y 9B, la operación de transferencia de memoria representada en las FIGS. 11A y 11B admiten acceso de lectura canalizado y acceso de escritura canalizado.
Para realizar la operación de transferencia de memoria de acuerdo con el modo de transferencia de memoria intercalada, el motor de comandos 32 puede configurar el motor de lectura 38 y el motor de escritura 40 para funcionar en un modo de sincronización intercalada. La operación de transferencia de memoria representada en las FIGS. 11A y 11B se realiza con respecto a dos regiones de origen diferentes y una región de destino, de las que cada una tiene ocho píxeles. Por lo tanto, durante la operación de transferencia de memoria, se realizan dieciséis solicitudes de lectura y ocho solicitudes de escritura con respecto a la memoria 22.
El formato de la tabla representada en las FIGS. 11A y 11B es similar a la tabla mostrada en las FIGS. 9A y 9B excepto que las solicitudes de lectura, los comandos de lectura y los datos de lectura se designan por números y letras (por ejemplo, "1A", "1B", "2A", "2B", etc.). En este caso, las diferentes letras representan diferentes regiones de origen y los diferentes números representan ubicaciones de píxeles correspondientes (es decir, píxeles que tienen la misma ubicación relativa) en diferentes regiones. Por ejemplo, "Lectura 1A" es una solicitud de lectura para una ubicación de píxel particular en una primera región de origen, y "Lectura 1B" es una solicitud de lectura para una ubicación de píxel correspondiente en una segunda región de origen. En este ejemplo, "Escritura 1" puede ser una solicitud de escritura que escribe datos de destino en una ubicación de píxel en la región de destino que corresponde a las ubicaciones de píxeles para tanto la "Lectura 1A" como la "Lectura 1B". Los datos de destino para una ubicación de píxel se pueden generar en base a los datos de origen asociados con las ubicaciones de píxeles correspondientes en ambas regiones de origen. Por ejemplo, la GPU 10 puede generar los "Datos de escritura 1" en base a los "Datos de lectura 1A" y los "Datos de lectura 1B". Se puede usar una operación de tramado para generar los datos de destino.
El motor de lectura 38 y el motor de escritura 40 funcionan de manera sustancialmente similar a la que se describe con respecto a las FIGS. 9A y 9B, excepto que los datos que son suficientes para emitir una solicitud de escritura para la operación de transferencia de memoria pueden ser dos unidades de datos de origen devueltas en respuesta a dos solicitudes de lectura diferentes en lugar de una única unidad de datos de origen devuelta en respuesta a una única solicitud de lectura. Por ejemplo, en la ranura temporal 6, el motor de escritura 40 detecta que se han recibido datos de origen que son suficientes para emitir una solicitud de escritura (es decir, "Datos de lectura 1A" y "Datos de lectura 1B") para la operación de transferencia de memoria por la GPU 10, y durante la ranura temporal 7, en respuesta a la detección de que se han recibido datos de origen que son suficientes para emitir una solicitud de escritura para la operación de transferencia de memoria por la GPU 10, el motor de escritura 40 consume los datos de origen recibidos, genera datos de destino en base a los datos de origen consumidos, emite un solicitud de escritura al controlador de memoria 20 y transfiere los datos de destino al controlador de memoria 20 por medio del "Bus de escritura".
Como otro ejemplo, en la ranura temporal 7, el motor de lectura 38 detecta que los datos de origen que son suficientes para emitir una solicitud de escritura (es decir, "Datos de lectura 1A" y "Datos de lectura 1B") para la operación de transferencia de memoria se han consumido por el motor de escritura 40. Durante la ranura temporal 8, en respuesta a la detección de que los datos de origen que son suficientes para emitir una solicitud de escritura para la operación de transferencia de memoria se han consumido por el motor de escritura 40, el motor de lectura 38 emite una solicitud de lectura posterior.
La FIG. 12 es un diagrama de temporización que ilustra características de temporización de ejemplo para una operación de transferencia de memoria de origen múltiple que se realiza de acuerdo con el modo de transferencia de memoria secuencial de la presente divulgación. Similar a la operación de transferencia de memoria representada en las FIGS. 11A y 11B, la operación de transferencia de memoria en la FIG. 12 se realiza con la configuración del dispositivo informático 2 ilustrado en la FIG. 3. También similar a la operación de transferencia de memoria representada en las FIGS. 11A y 11B, la operación de transferencia de memoria representada en la FIG. 12 admite el acceso de lectura canalizado y el acceso de escritura canalizado. El formato de la tabla representada en la FIG. 12 es sustancialmente similar a la tabla mostrada en las FIGS. 11A y 11B, y por lo tanto no se describirá en mayor detalle.
Para realizar la operación de transferencia de memoria de acuerdo con el modo de transferencia de memoria secuencial, el motor de comandos 32 puede configurar el motor de lectura 38 y el motor de escritura 40 para funcionar en un modo de sincronización secuencial. La operación de transferencia de memoria representada en las FIGS. 11A y 11B se realiza con respecto a dos regiones de origen diferentes y una región de destino, de las que cada una tiene ocho píxeles. Por lo tanto, durante la operación de transferencia de memoria, se realizan dieciséis solicitudes de lectura y ocho solicitudes de escritura con respecto a la memoria 22.
Como se muestra en la FIG. 12, la emisión de grupos separados de solicitudes de lectura y escritura hizo que el número de veces que el "Bus de memoria" cambió de dirección se redujera en relación con el modo de transferencia de memoria intercalada mostrado en las FIGS. 11A y 11B. Como tal, el modo de memoria secuencial puede reducir el retardo de respuesta de lectura-escritura global que se produce cuando se realiza una operación de transferencia de memoria en relación con el modo de transferencia de memoria intercalada. Esto se puede ver observando que la misma operación de transferencia de memoria tardó 53 ranuras temporales para completarse en las FIGS. 11A y 11B cuando se realizó de acuerdo con el modo de transferencia intercalada y 33 ranuras temporales para completarse en la FIG. 12 cuando se realizó de acuerdo con el modo de transferencia de memoria secuencial.
Nuevamente, un tipo de modo de transferencia de memoria puede no ser universalmente el modo de transferencia de memoria más eficaz para realizar operaciones de transferencia de memoria. En consecuencia, las técnicas de la presente divulgación se pueden usar para seleccionar modos de transferencia de memoria apropiados que se adaptan mejor a tipos particulares de operaciones de transferencia de memoria, mejorando de este modo el rendimiento de una GPU que puede realizar tipos y tamaños variables de operaciones de transferencia de memoria.
Las FIGS. 13-19 ilustran diferentes técnicas para realizar operaciones de transferencia de memoria de acuerdo con los modos de transferencia de memoria intercalada y secuencial de la presente divulgación. Las técnicas mostradas en las Figs. 13-19 se describen realizándose por la GPU 10 mostrada en las FIGS. 1 y 2 para propósitos ejemplares. En otros ejemplos, las técnicas ilustradas en las FIGS. 13-19 se puede implementar en otros sistemas que tengan los mismos o componentes diferentes en la misma o en una configuración diferente.
La FIG. 13 es un diagrama de flujo que ilustra una técnica de ejemplo para realizar una operación de transferencia de memoria de acuerdo con el modo de transferencia de memoria intercalada de la presente divulgación. La GPU 10 inicia una operación de transferencia de memoria (100). La GPU 10 emite una solicitud de lectura al subsistema de memoria 8 (por ejemplo, el controlador de memoria 20 o la memoria 22) para leer los datos de origen asociados con una ubicación de píxel dentro de una región de origen (102).
La GPU 10 espera hasta que se hayan recibido los datos de origen desde el subsistema de memoria 8 (por ejemplo, el controlador de memoria 20 o la memoria 22) en respuesta a la solicitud de lectura. Por ejemplo, la GPU 10 determina si se han recibido datos de origen desde el subsistema de memoria 8 en respuesta a la solicitud de lectura (104). Si no se han recibido los datos de origen desde el subsistema de memoria 8 en respuesta a la solicitud de lectura, la GPU 10 vuelve atrás al rombo de decisión 104. En respuesta a la recepción de los datos de origen desde el subsistema de memoria 8, la GPU 10 consume los datos, genera datos de destino en base a los datos de origen y emite una solicitud de escritura para escribir los datos de destino en una ubicación de píxel correspondiente en una región de destino (106).
En respuesta a que se consumen los datos de origen, la GPU 10 emite una solicitud de lectura posterior siempre que sea necesario leer más datos para la operación de transferencia de memoria. Más específicamente, la GPU 10 determina si hay más datos para leer (108). Si hay más datos para leer, la GPU 10 prosigue al cuadro de proceso 102 y emite una solicitud de lectura posterior. Si no hay más datos para leer, la GPU 10 completa la operación de transferencia de memoria (110).
La FIG. 14 es un diagrama de flujo que ilustra una técnica de ejemplo para emitir solicitudes de lectura de acuerdo con el modo de sincronización intercalada de la presente divulgación. El motor de lectura 38 inicia una operación de transferencia de memoria (112). El motor de lectura 38 envía una solicitud de lectura al subsistema de memoria 8 (por ejemplo, el controlador de memoria 20 o la memoria 22) para leer datos de origen asociados con una ubicación de píxel dentro de una región de origen (114).
El motor de lectura 38 espera hasta que se han consumido los datos de origen de la memoria intermedia 36 por el motor de escritura 40. Por ejemplo, el motor de lectura 38 determina si se han consumido los datos de origen de la memoria intermedia 36 por el motor de escritura 40 (116). Si los datos de origen no se han consumido de la memoria intermedia 36, a continuación la GPU 10 vuelve atrás al rombo de decisión 116.
En respuesta a que se consumen los datos de origen de la memoria intermedia 36 por el motor de escritura 40, el motor de lectura 38 emite una solicitud de lectura posterior siempre que sea necesario leer más datos para la operación de transferencia de memoria. Por ejemplo, el motor de lectura 38 determina si hay más datos para leer (118). Si hay más datos para leer, el motor de lectura 38 prosigue al cuadro de proceso 114 y emite una solicitud de lectura posterior. Si no hay más datos para leer, el motor de lectura 38 completa la operación de transferencia de memoria (120).
La FIG. 15 es un diagrama de flujo que ilustra una técnica de ejemplo para emitir solicitudes de escritura de acuerdo con el modo de sincronización intercalada de la presente divulgación. El motor de escritura 40 inicia una operación de transferencia de memoria (122).
El motor de escritura 40 espera hasta que se hayan recibido los datos de origen desde el subsistema de memoria 8 (por ejemplo, el controlador de memoria 20 o la memoria 22) en respuesta a la solicitud de lectura. Por ejemplo, el motor de escritura 40 determina si se han recibido datos de origen por la GPU 10 desde el subsistema de memoria 8 en respuesta a la solicitud de lectura (124). Por ejemplo, el motor de escritura 40 puede determinar si el motor de lectura 38 colocó los datos de origen en la memoria intermedia 36. Si no se han recibido los datos de origen desde el subsistema de memoria 8 en respuesta a la solicitud de lectura, el motor de escritura 40 vuelve atrás al rombo de decisión 124. En respuesta a la determinación de que se han recibido datos de origen por la GPU 10, la memoria 22 consume los datos, genera datos de destino en base a los datos de origen y emite una solicitud de escritura para escribir los datos de destino en una ubicación de píxel correspondiente en una región de destino (126).
El motor de escritura 40 determina si hay más datos para consumir como parte de la operación de transferencia de memoria (128). Si hay más datos para consumir, el motor de escritura 40 prosigue al rombo de decisión 124 y espera a que se reciban más datos de origen. Si no hay más datos para consumir como parte de la operación de transferencia de memoria, el motor de escritura 40 completa la operación de transferencia de memoria (130).
La FIG. 16 es un diagrama de flujo que ilustra una técnica de ejemplo para realizar una operación de transferencia de memoria de acuerdo con el modo de transferencia de memoria secuencial de la presente divulgación. La GPU 10 inicia una operación de transferencia de memoria (132). La GPU 10 emite una solicitud de lectura al subsistema de memoria 8 (por ejemplo, el controlador de memoria 20 o la memoria 22) para leer los datos de origen asociados con una ubicación de píxel dentro de una región de origen (134).
La GPU 10 determina si el número de solicitudes de lectura que se han emitido es mayor que o igual a un primer umbral (136). En respuesta a la determinación de que el número de solicitudes de lectura que se han emitido no es mayor que o igual al primer umbral, la GPU 10 emite otra solicitud de lectura (134). La GPU 10 continúa emitiendo solicitudes de lectura hasta que el número de solicitudes de lectura que se han emitido es mayor que o igual al primer umbral. En respuesta a la determinación de que el número de solicitudes de lectura que se han emitido es mayor que o igual al primer umbral, la GPU 10 deja de emitir solicitudes de lectura (138).
La GPU 10 determina si la cantidad de datos de origen no consumidos es mayor que o igual al primer umbral (140). En respuesta a la determinación de que la cantidad de datos de origen no consumidos no es mayor que o igual al primer umbral, la GPU 10 continúa dejando de emitir solicitudes de lectura (138). En respuesta a la determinación de que la cantidad de datos de origen no consumidos es mayor que o igual al primer umbral, la GPU 10 empieza a consumir datos de origen, a generar datos de destino en base a los datos de origen y a emitir solicitudes de escritura (142).
La GPU 10 determina si la cantidad de datos de origen no consumidos es inferior o igual a un segundo umbral (144). El segundo umbral puede ser inferior al primer umbral. En respuesta a la determinación de que la cantidad de datos de origen no consumidos no es inferior o igual al segundo umbral, la GPU 10 continúa consumiendo datos de origen, generando datos de destino y emitiendo solicitudes de escritura (142). La GPU 10 continúa consumiendo datos de origen, generando datos de destino y emitiendo solicitudes de escritura hasta que la cantidad de datos de origen no consumidos sea inferior o igual al segundo umbral. En respuesta a la determinación de que la cantidad de datos de origen no consumidos es inferior o igual al segundo umbral, la GPU 10 deja de consumir datos de origen, de generar datos de destino y de emitir solicitudes de escritura (146).
Además, en respuesta a la determinación de que la cantidad de datos de origen no consumidos es inferior o igual al segundo umbral, la GPU 10 puede reanudar la emisión de solicitudes de lectura siempre que haya más datos para leer como parte de la operación de transferencia de memoria. Por ejemplo, la GPU 10 determina si hay más datos para leer (148). Si hay más datos para leer, la GPU 10 prosigue al cuadro de proceso 134 y emite una solicitud de lectura posterior. Si no hay más datos para leer, la GPU 10 completa la operación de transferencia de memoria (150).
La FIG. 17 es un diagrama de flujo que ilustra una técnica de ejemplo para emitir solicitudes de lectura de acuerdo con el modo de sincronización secuencial de la presente divulgación. El motor de lectura 38 inicia una operación de transferencia de memoria (152). El motor de lectura 38 envía una solicitud de lectura al subsistema de memoria 8 (por ejemplo, el controlador de memoria 20 o la memoria 22) para leer datos de origen asociados con una ubicación de píxel dentro de una región de origen (154).
El motor de lectura 38 determina si el número de solicitudes de lectura que se han emitido es mayor que o igual a un primer umbral (156). En respuesta a la determinación de que el número de solicitudes de lectura que se han emitido no es mayor que o igual al primer umbral, el motor de lectura 38 emite otra solicitud de lectura (154). El motor de lectura 38 continúa emitiendo solicitudes de lectura hasta que el número de solicitudes de lectura que se han emitido es mayor que o igual a un primer umbral. En respuesta a la determinación de que el número de solicitudes de lectura que se han emitido es mayor que o igual al primer umbral, el motor de lectura 38 deja de emitir solicitudes de lectura (158).
El motor de lectura 38 determina si la cantidad de datos de origen no consumidos es inferior o igual a un segundo umbral (160). El segundo umbral puede ser inferior al primer umbral. En respuesta a la determinación de que la cantidad de datos de origen no consumidos no es inferior o igual al segundo umbral, el motor de lectura 38 continúa dejando de emitir solicitudes de lectura (158). El motor de lectura 38 continúa dejando de emitir solicitudes de lectura hasta que la cantidad de datos de origen no consumidos sea inferior o igual al segundo umbral.
En respuesta a la determinación de que la cantidad de datos de origen no consumidos es inferior o igual al segundo umbral, la GPU 10 puede reanudar la emisión de solicitudes de lectura siempre que haya más datos para leer como parte de la operación de transferencia de memoria. Por ejemplo, la GPU 10 determina si hay más datos para leer (162). Si hay más datos para leer, la GPU 10 prosigue al cuadro de proceso 154 y emite una solicitud de lectura posterior. Si no hay más datos para leer, la GPU 10 completa la operación de transferencia de memoria (164).
La FIG. 18 es un diagrama de flujo que ilustra una técnica de ejemplo para emitir solicitudes de escritura de acuerdo con el modo de sincronización secuencial de la presente divulgación. El motor de escritura 40 inicia una operación de transferencia de memoria (166).
El motor de escritura 40 espera hasta que la cantidad de datos de origen no consumidos es mayor que o igual al primer umbral. Por ejemplo, el motor de escritura 40 determina si la cantidad de datos de origen no consumidos es mayor que o igual al primer umbral (168). En respuesta a la determinación de que la cantidad de datos de origen no consumidos no es mayor que o igual al primer umbral, el motor de escritura 40 continúa esperando. En respuesta a la determinación de que la cantidad de datos de origen no consumidos es mayor o igual al primer umbral, el motor de escritura 40 empieza a consumir datos de origen, a generar datos de destino en base a los datos de origen y a emitir solicitudes de escritura (170).
El motor de escritura 40 determina si la cantidad de datos de origen no consumidos es inferior o igual a un segundo umbral (172). El segundo umbral puede ser inferior al primer umbral. En respuesta a la determinación de que la cantidad de datos de origen no consumidos no es inferior o igual al segundo umbral, el motor de escritura 40 continúa consumiendo datos de origen, generando datos de destino y emitiendo solicitudes de escritura (170). El motor de escritura 40 continúa consumiendo datos de origen, generando datos de destino y emitiendo solicitudes de escritura hasta que la cantidad de datos de origen no consumidos es inferior o igual al segundo umbral. En respuesta a la determinación de que la cantidad de datos de origen no consumidos es inferior o igual al segundo umbral, el motor de escritura 40 deja de consumir datos de origen, de generar datos de destino y de emitir solicitudes de escritura (174).
El motor de escritura 40 puede dejar de consumir datos de origen, de generar datos de destino y de emitir solicitudes de escritura hasta que la cantidad de datos de origen no consumidos sea mayor que o igual al primer umbral. Siempre que haya más datos para consumir como parte de la operación de transferencia de memoria, el motor de escritura 40 puede reanudar el consumo de datos de origen, la generación de datos de destino y la emisión de solicitudes de escritura en respuesta a la determinación de que la cantidad de datos de origen no consumidos es mayor que o igual al primer umbral. Por ejemplo, el motor de escritura 40 determina si hay más datos para consumir como parte de la operación de transferencia de memoria (176). Si hay más datos para consumir, el motor de escritura 40 prosigue al rombo de decisión 168 y espera a que la cantidad de datos de origen no consumidos sea mayor que o igual al primer umbral. Si no hay más datos para consumir como parte de la operación de transferencia de memoria, el motor de escritura 40 completa la operación de transferencia de memoria (178).
La FIG. 19 es un diagrama de flujo que ilustra una técnica de ejemplo para realizar una operación de transferencia de memoria de acuerdo con el modo de transferencia de memoria secuencial de la presente divulgación. La GPU 10 inicia una operación de transferencia de memoria (180). La GPU 10 activa el motor de lectura 38 (182). Cuando se activa el motor de lectura 38, el motor de lectura 38 emite solicitudes de lectura hasta que se desactiva el motor de lectura 38.
El motor de lectura 38 permanece activado hasta que el número de solicitudes de lectura que se han emitido es mayor que o igual a un primer umbral. Por ejemplo, la GPU 10 determina si el número de solicitudes de lectura que se han emitido es mayor que o igual a un primer umbral (184). En respuesta a la determinación de que el número de solicitudes de lectura que se han emitido no es mayor que o igual al primer umbral, la GPU 10 vuelve atrás al bloque de decisión 184. En respuesta a la determinación de que el número de solicitudes de lectura que se han emitido es mayor que o igual al primer umbral, la GPU 10 desactiva el motor de lectura 38 (186). Cuando el motor de lectura 38 se desactiva, el motor de lectura 38 puede dejar de emitir solicitudes de lectura.
La GPU 10 espera hasta que la cantidad de datos de origen no consumidos es mayor que o igual al primer umbral. Por ejemplo, la GPU 10 determina si la cantidad de datos de origen no consumidos es mayor que o igual al primer umbral (188). En respuesta a la determinación de que la cantidad de datos de origen no consumidos no es mayor que o igual al primer umbral, la GPU 10 vuelve atrás al bloque de decisión 188. En respuesta a la determinación de que la cantidad de datos de origen no consumidos es mayor que o igual al primer umbral, la GPU 10 activa el motor de escritura 40 (190). Cuando se activa el motor de escritura 40, el motor de escritura 40 puede consumir datos de origen, generar datos de destino en base a los datos de origen y emitir solicitudes de escritura para escribir los datos de destino en la memoria 22.
El motor de escritura 40 permanece activado hasta que la cantidad de datos de origen no consumidos es inferior o igual a un segundo umbral. Por ejemplo, la GPU 10 determina si la cantidad de datos de origen no consumidos es inferior o igual a un segundo umbral (192). El segundo umbral puede ser inferior al primer umbral. En respuesta a la determinación de que la cantidad de datos de origen no consumidos no es inferior o igual al segundo umbral, la GPU 10 vuelve atrás al bloque de decisión 192. En respuesta a la determinación de que la cantidad de datos de origen no consumidos es inferior o igual al segundo umbral, la GPU 10 desactiva el motor de escritura 40 (194). Cuando el motor de escritura 40 se desactiva, el motor de escritura 40 puede dejar de consumir datos de origen, de generar datos de destino y de emitir solicitudes de escritura.
Además, en respuesta a la determinación de que la cantidad de datos de origen no consumidos es inferior o igual al segundo umbral, la GPU 10 puede reactivar el motor de lectura 38 siempre que haya más datos para leer como parte de la operación de transferencia de memoria. Por ejemplo, la GPU 10 determina si hay más datos para leer (196). Si hay más datos para leer, la GPU 10 prosigue al cuadro de proceso 182 y activa el motor de lectura 38. Si no hay más datos para leer, la GPU 10 completa la operación de transferencia de memoria (198).
La FIG. 20 es un diagrama de flujo que ilustra una técnica de ejemplo para realizar una operación de transferencia de memoria de acuerdo con la presente divulgación. La técnica en la FIG. 20 se describe realizándose por el dispositivo informático 2 mostrado en las FIGS. 1 y 2 para propósitos ejemplares. En otros ejemplos, la técnica ilustrada en la FIG. 20 se puede implementar en otros sistemas que tengan los mismos o componentes diferentes en la misma o en una configuración diferente.
La CPU 6 y/o la GPU 10 selecciona un modo de transferencia de memoria para realizar la totalidad o parte de la operación de transferencia de memoria (202). En algunos ejemplos, el modo de transferencia de memoria se puede seleccionar de un conjunto de al menos dos modos de transferencia de memoria diferentes que incluye un modo de transferencia de memoria intercalada y un modo de transferencia de memoria secuencial.
La GPU 10 realiza la operación de transferencia de memoria en base al modo de transferencia de memoria seleccionado (204). Por ejemplo, la GPU 10 puede realizar la operación de transferencia de memoria en base a un modo de transferencia de memoria intercalada en respuesta a que se selecciona el modo de transferencia de memoria intercalada como el modo de transferencia de memoria para realizar la operación de transferencia de memoria. Como otro ejemplo, la GPU 10 puede realizar la operación de transferencia de memoria en base a un modo de transferencia de memoria secuencial en respuesta a que se selecciona el modo de transferencia de memoria secuencial como el modo de transferencia de memoria para realizar la operación de transferencia de memoria.
En algunos ejemplos, la GPU 10 puede realizar una primera parte de la operación de transferencia de memoria usando un primer modo de transferencia de memoria seleccionado de un conjunto de al menos dos modos de transferencia de memoria diferentes, y realizar una segunda parte de la operación de transferencia de memoria usando un segundo modo de transferencia de memoria seleccionado del conjunto de al menos dos modos de transferencia de memoria diferentes.
Las FIGS. 21-22 y 24-26 ilustran diferentes técnicas para seleccionar un modo de transferencia de memoria para realizar una operación de transferencia de memoria de acuerdo con la presente divulgación. Las técnicas mostradas en las FIGS. 21-22 y 24-26 se describen realizándose por el dispositivo informático 2 mostrado en las FIGS. 1 y 2 para propósitos ejemplares. En otros ejemplos, las técnicas ilustradas en las FIGS. 21-22 y 24-26 se pueden implementar en otros sistemas que tengan los mismos o componentes diferentes en la misma o en una configuración diferente.
La FIG. 21 es un diagrama de flujo que ilustra una técnica de ejemplo para seleccionar un modo de transferencia de memoria para realizar una operación de transferencia de memoria en base a una cantidad de datos que se va a transferir por la operación de transferencia de memoria de acuerdo con la presente divulgación. En algunos ejemplos, la técnica mostrada en la FIG. 21 se puede usar para implementar el bloque de proceso 202 mostrado en la FIG. 20
La CPU 6 y/o la GPU 10 determina el tamaño de una operación de transferencia de memoria (206). El tamaño de la operación de transferencia de memoria puede corresponder a la cantidad de datos que se va a transferir por la operación de transferencia de memoria. En algunos ejemplos, el tamaño de la operación de transferencia de memoria se puede especificar en un comando de transferencia de memoria. En otros ejemplos, la CPU 6 y/o la GPU 10 puede determinar el tamaño de la operación de transferencia de memoria en base a las dimensiones de una región de origen y una región de destino y en base al número de regiones de origen que se usan en la operación de transferencia de memoria.
La CPU 6 y/o la GPU 10 determina si el tamaño de la operación de transferencia de memoria es mayor que un umbral (208). Si el tamaño de la operación de transferencia de memoria no es mayor que el umbral, a continuación la CPU 6 y/o la GPU 10 selecciona el modo de transferencia de memoria intercalada como el modo de transferencia de memoria que se va a usar para realizar la totalidad o parte de una operación de transferencia de memoria (210). Si el tamaño de la operación de transferencia de memoria es mayor que el umbral, a continuación la CPU 6 y/o la GPU 10 selecciona el modo de transferencia de memoria secuencial como el modo de transferencia de memoria que se va a usar para realizar la totalidad o parte de una operación de transferencia de memoria (212).
La FIG. 22 es un diagrama de flujo que ilustra una técnica de ejemplo para seleccionar un modo de transferencia de memoria para realizar una operación de transferencia de memoria en base a una cantidad de superposición que tiene una región de destino de la operación de transferencia de memoria con una región de memoria intermedia fija alineada con la pantalla de acuerdo con la presente divulgación. En algunos ejemplos, la técnica mostrada en la FIG. 22 se puede usar para implementar el bloque de proceso 202 mostrado en la FIG. 20
La CPU 6 y/o la GPU 10 determina la posición de pantalla de una región de destino que se define para la operación de transferencia de memoria (214). La posición de pantalla se puede referir a la ubicación de la región de destino en el espacio de pantalla. En algunos ejemplos, la CPU 6 y/o la GPU 10 puede determinar la posición de pantalla en base a los datos recibidos en un comando de transferencia de memoria.
La CPU 6 y/o la GPU 10 selecciona una región de memoria intermedia alineada con la pantalla que se superpone al menos parcialmente con la región de destino (216). La FIG. 23 es un diagrama conceptual que ilustra una pantalla con una pluralidad de regiones de memoria intermedia alineadas con la pantalla (es decir, mosaicos 1-20) y una superficie de destino 218. Como se muestra en la FIG. 23, las regiones de memoria intermedia alineadas con la pantalla 1-4, 6-9 y 11-14 se superponen al menos parcialmente con la superficie de destino 218 mientras que las regiones de memoria intermedia alineadas con la pantalla 5, 10, 15 y 16-20 no se superponen en absoluto con la superficie de destino 218.
La CPU 6 y/o la GPU 10 determina si la región de destino se superpone completamente a la región de memoria intermedia alineada con la pantalla seleccionada (220). En otras palabras, la CPU 6 y/o la GPU 10 puede determinar si la región de destino cubre totalmente la región de memoria intermedia fija alineada con la pantalla seleccionada. Si la región de destino no se superpone completamente a la región de memoria intermedia alineada con la pantalla seleccionada (por ejemplo, si la región de destino no cubre totalmente la región de memoria intermedia alineada con la pantalla seleccionada), la CPU 6 y/o la GPU 10 selecciona el modo de transferencia de memoria intercalada como el modo de transferencia de memoria para realizar la operación de transferencia de memoria con respecto a la región de memoria intermedia alineada con la pantalla seleccionada (222). De otro modo, si la región de destino se superpone completamente a la región de memoria intermedia alineada con la pantalla seleccionada (por ejemplo, si la región de destino cubre totalmente la región de memoria intermedia alineada con la pantalla seleccionada), a continuación la CPU 6 y/o la GPU 10 selecciona el modo de transferencia de memoria secuencial como el modo de transferencia de memoria para realizar la operación de transferencia de memoria con respecto a la región de memoria intermedia alineada con la pantalla seleccionada (224).
Por ejemplo, con respecto a la FIG. 23, la región de destino 218 cubre totalmente las regiones de memoria intermedia fijas alineadas con la pantalla 7, 8 y 9. Por lo tanto, la CPU 6 y/o la GPU 10 puede seleccionar el modo de transferencia de memoria secuencial para realizar la operación de transferencia de memoria con respecto a las regiones de memoria intermedia alineadas con la pantalla 7, 8 y 9. De forma similar, la región de destino 218 cubre parcialmente, pero no cubre totalmente, las regiones de memoria intermedia alineadas con la pantalla 1-4, 6 y 11-14. Por lo tanto, la CPU 6 y/o la GPU 10 puede seleccionar el modo de transferencia de memoria intercalada para realizar la operación de transferencia de memoria con respecto a las regiones de memoria intermedia alineadas con la pantalla 1-4, 6 y 11-14.
En algunos casos, una superficie puede corresponder a los píxeles contenidos en un monitor o pantalla. La pantalla se puede subdividir en una pluralidad de regiones, teniendo cada una un tamaño fijo que corresponde al tamaño de la memoria intermedia que se usa para almacenar los datos leídos. Estas regiones subdivididas se pueden denominar regiones de memoria intermedia fijas alineadas con la pantalla. En dichos ejemplos, cuando funciona en el modo de transferencia de memoria secuencial, la GPU 10 se puede configurar para transferir datos entre la memoria 22 y la GPU 10 en unidades de datos de un tamaño fijo que corresponden al tamaño de las regiones de memoria intermedia fijas alineadas con la pantalla.
Si una región de destino cubre parcialmente, pero no totalmente, una región de memoria intermedia fija alineada con la pantalla particular, a continuación la CPU 6 y/o la GPU 10 puede seleccionar el modo de transferencia de memoria intercalada como el modo de transferencia de memoria para esa región de la pantalla porque la memoria intermedia en la que se almacenarán los datos leídos no se utilizará totalmente. Si se seleccionara el modo de memoria secuencial en un caso de este tipo, la lectura de memoria de tamaño fijo haría que se leyeran datos superfluos de la memoria, lo que puede superar cualquier ahorro de respuesta de lectura-escritura que se produciría usando el modo de transferencia de memoria secuencial. Por otra parte, si una región de destino cubre totalmente una región de memoria intermedia fija alineada con la pantalla particular, entonces la CPU 6 y/o la GPU 10 puede seleccionar el modo de transferencia de memoria secuencial como el modo de transferencia de memoria para esa región de la pantalla porque la memoria intermedia en la que se almacenarán los datos leídos se utilizará totalmente y no se perderá tiempo recuperando datos superfluos.
En algunos ejemplos, se puede implementar una operación de transferencia de memoria con la GPU 10 renderizando una o más primitivas que corresponden espacialmente a la región de destino de la operación de transferencia de memoria, aplicando una textura que corresponde a los datos de región de origen a la una o más primitivas renderizadas, y fusionando la una o más primitivas con cualquier dato de destino ya almacenado en una memoria intermedia de trama. En dichos ejemplos, la CPU 6 y/o la GPU 10 puede seleccionar un modo de transferencia de memoria para realizar una operación de transferencia de memoria con respecto a una región de memoria intermedia fija alineada con la pantalla en base a una cantidad de superposición que tiene una primitiva que se va a renderizar con la región de memoria intermedia fija alineada con la pantalla. Por ejemplo, la CPU 6 y/o la GPU 10 puede seleccionar el modo de transferencia de memoria secuencial como el modo de transferencia de memoria si la primitiva que se va a renderizar cubre totalmente la región de memoria intermedia fija alineada con la pantalla, y seleccionar el modo de transferencia de memoria intercalada como el modo de transferencia de memoria si la primitiva que se va a renderizar no cubre totalmente la región de memoria intermedia fija alineada con la pantalla.
La FIG. 24 es un diagrama de flujo que ilustra una técnica de ejemplo para seleccionar un modo de transferencia de memoria para realizar una operación de transferencia de memoria en base a la complejidad de un programa de sombreado que se usa para realizar la operación de transferencia de memoria de acuerdo con la presente divulgación. En algunos ejemplos, la técnica mostrada en la FIG. 24 se puede usar para implementar el bloque de proceso 202 mostrado en la FIG. 20
La CPU 6 y/o la GPU 10 determina la complejidad de un programa de sombreado que se usa para realizar la operación de transferencia de memoria (226). El programa de sombreado puede ser, en algunos ejemplos, un programa de sombreado de píxeles. En algunos ejemplos, la complejidad del programa de sombreado puede corresponder al tamaño del programa de sombreado. En otros ejemplos, la complejidad del programa de sombreado corresponde al número de cálculos que se van a realizar por el programa de sombreado. En otros ejemplos, la complejidad del programa de sombreado puede corresponder al número de bucles o iteraciones que se van a realizar por el programa de sombreado.
La CPU 6 y/o la GPU 10 determina si la complejidad del programa de sombreado es mayor que un umbral (228). Si la complejidad del programa de sombreado no es mayor que el umbral, a continuación la CPU 6 y/o la GPU 10 puede seleccionar el modo de transferencia de memoria secuencial como el modo de transferencia de memoria que se va a usar para realizar la totalidad o parte de una operación de transferencia de memoria (230). Si la complejidad del programa de sombreado es mayor que el umbral, a continuación la CPU 6 y/o la GPU 10 puede seleccionar el modo de transferencia de memoria intercalada como el modo de transferencia de memoria que se va a usar para realizar la totalidad o parte de una operación de transferencia de memoria (232).
La FIG. 25 es un diagrama de flujo que ilustra una técnica de ejemplo para seleccionar un modo de transferencia de memoria para realizar una operación de transferencia de memoria en base a un tamaño de un programa de sombreado que se usa para realizar la operación de transferencia de memoria de acuerdo con la presente divulgación. En algunos ejemplos, la técnica mostrada en la FIG. 25 se puede usar para implementar el bloque de proceso 202 mostrado en la FIG. 20
La CPU 6 y/o la GPU 10 determina un tamaño de un programa de sombreado que se usa para realizar la operación de transferencia de memoria (234). El programa de sombreado puede ser, en algunos ejemplos, un programa de sombreado de píxeles. En algunos ejemplos, el tamaño del programa de sombreado puede corresponder al número de instrucciones en el programa de sombreado. En otros ejemplos, el tamaño del programa de sombreado puede corresponder al número de octetos en el programa de sombreado.
La CPU 6 y/o la GPU 10 determina si el tamaño del programa de sombreado es mayor que un umbral (236). Si el tamaño del programa de sombreado no es mayor que el umbral, a continuación la CPU 6 y/o la GPU 10 puede seleccionar el modo de transferencia de memoria secuencial como el modo de transferencia de memoria que se va a usar para realizar la totalidad o parte de una operación de transferencia de memoria (238). Si el tamaño del programa de sombreado es mayor que el umbral, a continuación la CPU 6 y/o la GPU 10 puede seleccionar el modo de transferencia de memoria intercalada como el modo de transferencia de memoria que se va a usar para realizar la totalidad o parte de una operación de transferencia de memoria (240).
La FIG. 26 es un diagrama de flujo que ilustra una técnica de ejemplo para seleccionar un modo de transferencia de memoria para realizar una operación de transferencia de memoria en base a una determinación de si es probable que la ejecución del programa de sombreado sea un cuello de botella de rendimiento para la operación de transferencia de memoria de acuerdo con la presente divulgación. En algunos ejemplos, la técnica mostrada en la FIG. 26 se puede usar para implementar el bloque de proceso 202 mostrado en la FIG. 20
La CPU 6 y/o la GPU 10 toma una determinación de si es probable que la ejecución del programa de sombreado sea un cuello de botella de rendimiento para la operación de transferencia de memoria (242). El programa de sombreado puede ser, en algunos ejemplos, un programa de sombreado de píxeles. En algunos ejemplos, la CPU 6 y/o la GPU 10 pueden tomar la determinación en base a una complejidad del programa de sombreado y/o un tamaño del programa de sombreado.
Si no es probable que la ejecución del programa de sombreado sea un cuello de botella de rendimiento de la operación de transferencia de memoria (por ejemplo, el tamaño y/o la complejidad del programa de sombreado es inferior a un umbral), a continuación la CPU 6 y/o la GPU 10 puede seleccionar el modo de transferencia de memoria secuencial como el modo de transferencia de memoria que se va a usar para realizar la totalidad o parte de una operación de transferencia de memoria (244). Si es probable que la ejecución del programa de sombreado sea un cuello de botella de rendimiento para la operación de transferencia de memoria (por ejemplo, el tamaño y/o la complejidad del programa de sombreado es mayor que un umbral), a continuación la CPU 6 y/o la GPU 10 puede seleccionar el modo de transferencia de memoria intercalada como el modo de transferencia de memoria que se va a usar para realizar la totalidad o parte de una operación de transferencia de memoria (246).
La FIG. 27 es un diagrama de flujo que ilustra una técnica de ejemplo para realizar una operación de transferencia de memoria de acuerdo con la presente divulgación. En algunos ejemplos, la técnica mostrada en la FIG. 27 se puede usar para implementar el bloque de proceso 204 mostrado en la FIG. 20
La GPU 10 determina si se ha seleccionado el modo de transferencia de memoria secuencial o el modo de transferencia de memoria intercalada (248). Si no se ha seleccionado el modo de transferencia de memoria secuencial (es decir, se ha seleccionado el modo de transferencia de memoria intercalada), a continuación la GPU 10 puede configurar un tamaño de línea de memoria caché para una memoria caché que se usa para realizar la operación de transferencia de memoria para que tenga un primer tamaño (250). Si se ha seleccionado el modo de transferencia de memoria secuencial (es decir, se ha seleccionado el modo de transferencia de memoria intercalada), a continuación la GPU 10 puede configurar el tamaño de línea de memoria caché para una memoria caché que se usa para realizar la operación de transferencia de memoria para que tenga un segundo tamaño (252). El segundo tamaño puede ser más grande que el primer tamaño. En algunos ejemplos, el segundo tamaño puede corresponder a un tamaño de línea de memoria caché que es igual a la capacidad total de la memoria caché, y el primer tamaño puede corresponder a un tamaño de línea de memoria caché que es igual a menos de la capacidad total de la memoria caché.
De acuerdo con algunos aspectos de la presente divulgación, se describen técnicas para señalizar un modo de transferencia de memoria que se va a usar por una GPU para realizar una operación de transferencia de memoria. Las técnicas de señalización pueden permitir que un controlador de GPU y/o una aplicación de usuario que se ejecuta en el procesador de aplicaciones controle el modo de transferencia de memoria que se usa para realizar una operación de transferencia de memoria.
En algunos ejemplos, se puede añadir un campo de información que especifica un modo de transferencia de memoria a uno o más comandos de GPU existentes incluidos en una arquitectura de conjunto de instrucciones (ISA) de GPU. El campo de información puede ser, en algunos casos, un bit de modo único que especifica un modo de transferencia de memoria que se va a usar para una operación de transferencia de memoria asociada con la instrucción. Por ejemplo, un controlador de gráficos puede atender a un comando blit a nivel de usuario especificando las regiones de memoria de origen y de destino a la GPU y emitiendo una instrucción de llamada de extracción 3D (tridimensional) a la GPU. La instrucción de llamada de extracción 3D puede incluir un bit de modo que indica el modo de transferencia de memoria que se va a usar durante la ejecución de la instrucción de llamada de extracción 3D. La GPU se puede configurar para realizar una operación de transferencia de memoria en base al modo de transferencia de memoria especificado en la instrucción.
En ejemplos adicionales, la GPU puede incluir una variable de estado de modo de transferencia de memoria que especifica un modo de transferencia de memoria que se va a usar para realizar una operación de transferencia de memoria. En dichos ejemplos, se puede añadir una instrucción adicional a las instrucciones incluidas en la ISA de GPU. La instrucción adicional se puede usar para programar un estado de la variable de estado de modo de transferencia de memoria a un valor indicativo de un modo de transferencia de memoria que se va a usar para realizar una operación de transferencia de memoria. La GPU se puede configurar para realizar la operación de transferencia de memoria en base al estado de la variable de estado de modo de transferencia de memoria.
En otros ejemplos, se puede añadir una instrucción a la interfaz de programación de aplicaciones (API) para el controlador de GPU. La instrucción puede incluir un indicador de modo de transferencia de memoria que indica un modo de transferencia de memoria que se va a usar para realizar la operación de transferencia de memoria. El controlador de GPU se puede configurar para hacer que la GPU realice una operación de transferencia de memoria en base al indicador del modo de transferencia de memoria. De esta manera, una aplicación de usuario puede especificar el modo de transferencia de memoria que se va a usar por una GPU cuando realice una operación de transferencia de memoria.
Los aspectos de ejemplo de la presente divulgación incluyen usar una memoria intermedia de memoria interna para permitir que los datos se lean en primer lugar y a continuación se escriban en secuencia en lugar de intercalados. Los aspectos de ejemplo de la presente divulgación incluyen además un algoritmo de selección para realizar un tramado automáticamente usando la memoria intermedia interna en base a la intersección de primitiva con el patrón de tramado. Por tanto, un triángulo primitivo no puede usar la memoria intermedia interna para las secciones "estrechas" mientras conmuta al "modo secuencial" para las secciones "anchas". Los aspectos de ejemplo de la presente divulgación incluyen además un bit de modo que indica si se permite el uso del "modo secuencial". El bit de modo se puede establecer en base a si se estima que la operación está limitada por la eficacia de la memoria. Una implementación de ejemplo puede implicar el uso de una memoria caché existente, pero cambiando su operación para usar líneas de memoria caché más grandes durante el "modo secuencial".
En algunos ejemplos, un controlador de GPU y/o una aplicación de usuario pueden habilitar una elección de modos de transferencia de memoria diferentes (en lugar de obligar a la GPU a hacer uno u otro). En dichos ejemplos, la GPU puede tomar, en algunos ejemplos, la decisión final del modo de transferencia de memoria que se va a usar para una operación de transferencia de memoria en base a la información descubierta por la g Pu durante el tiempo de ejecución.
Las técnicas descritas en la presente divulgación se pueden implementar, al menos en parte, en hardware, software, firmware o cualquier combinación de los mismos. Por ejemplo, diversos aspectos de las técnicas descritas se pueden implementar dentro de uno o más procesadores, incluyendo uno o más microprocesadores, procesadores de señales digitales (DSP), circuitos integrados específicos de la aplicación (ASIC), matrices de puertas programables in situ (FPGA) o en otros circuitos lógicos integrados o discretos equivalentes cualesquiera, así como en combinaciones cualesquiera de dichos componentes. El término "procesador" o "circuitos de procesamiento" se puede referir en general a cualquiera de los circuitos lógicos anteriores, solo o en combinación con otros circuitos lógicos, o a cualquier otro circuito equivalente, tal como hardware discreto que realiza un procesamiento.
Dicho hardware, software y firmware se pueden implementar dentro del mismo dispositivo o dentro de dispositivos separados para admitir las diversas operaciones y funciones descritas en la presente divulgación. Además, cualquiera de las unidades, módulos o componentes descritos se pueden implementar conjuntamente o por separado como dispositivos de lógica discreta pero interoperativos. La descripción de diferentes rasgos característicos como módulos o unidades pretende resaltar diferentes aspectos funcionales y no implica necesariamente que dichos módulos o unidades se deban realizar por componentes de software o hardware separados. Más bien, la funcionalidad asociada con uno o más módulos o unidades se puede realizar por componentes de hardware, firmware y/o software separados, o integrar dentro de componentes de software o hardware comunes o separados.
Las técnicas descritas en la presente divulgación también se pueden almacenar, realizar o codificar en un medio legible por ordenador, tal como un medio de almacenamiento legible por ordenador que almacena instrucciones. Las instrucciones integradas o codificadas en un medio legible por ordenador pueden hacer que uno o más procesadores realicen las técnicas descritas en el presente documento, por ejemplo, cuando las instrucciones se ejecutan por el uno o más procesadores. Los medios de almacenamiento legibles por ordenador pueden incluir memoria de acceso aleatorio (RAM), memoria de solo lectura (ROM), memoria de solo lectura programable (PROM), memoria de solo lectura programable y borrable (EPROM), memoria de solo lectura programable y borrable electrónicamente (EEPROM), memoria flash, un disco duro, un CD-ROM, un disco flexible, un casete, medios magnéticos, medios ópticos u otros medios de almacenamiento legibles por ordenador que sean tangibles.
Los medios legibles por ordenador pueden incluir medios de almacenamiento legibles por ordenador, que corresponden a un medio de almacenamiento tangible, tales como los enumerados anteriormente. Los medios legibles por ordenador también pueden comprender medios de comunicación que incluyen cualquier medio que facilita la transferencia de un programa informático de un lugar a otro, por ejemplo, de acuerdo con un protocolo de comunicación. De esta manera, la frase "medios legibles por ordenador" en general puede corresponder a (1) medios de almacenamiento tangibles legibles por ordenador que son no transitorios, y (2) un medio de comunicación no tangible legible por ordenador tal como una señal transitoria o una onda portadora.
Se han descrito diversos aspectos y ejemplos. Sin embargo, se pueden realizar modificaciones a la estructura o las técnicas de la presente divulgación sin apartarse del alcance de las siguientes reivindicaciones.

Claims (13)

REIVINDICACIONES
1. Un procedimiento implementado por ordenador para realizar operaciones de transferencia de memoria en base a modos de transferencia de memoria seleccionables, comprendiendo el procedimiento:
seleccionar (202), con uno o más procesadores, en base a uno o más criterios, un modo de transferencia de memoria para realizar al menos parte de una operación de transferencia de memoria, seleccionándose el modo de transferencia de memoria de un conjunto de al menos dos modos de transferencia de memoria diferentes que incluye un modo de transferencia de memoria intercalada y un modo de transferencia de memoria secuencial, en el que el uno o más criterios son al menos uno de una cantidad de datos que se va a transferir por la operación de transferencia de memoria, una cantidad de superposición con una parte de memoria intermedia fija alineada con la pantalla o una ejecución de un programa de sombreado; y
realizar (204), con una unidad de procesamiento de gráficos, GPU, la al menos parte de la operación de transferencia de memoria usando el modo de transferencia de memoria seleccionado,
en el que realizar, con la GPU, la al menos parte de la operación de transferencia de memoria usando el modo de transferencia de memoria intercalada comprende un motor de lectura que emite solicitudes de lectura y un motor de escritura que emite solicitudes de escritura usando un paradigma productor-consumidor en base a un esquema de arbitraje y priorización en el que las solicitudes de lectura y las solicitudes de escritura se intercalan entre sí, y en el que realizar, con la GPU, la al menos parte de la operación de transferencia de memoria usando el modo de transferencia de memoria secuencial comprende que el motor de lectura emita solicitudes de lectura y el motor de escritura emita solicitudes de escritura usando un paradigma de exclusión mutua en base a un esquema de arbitraje y priorización en el que el motor de lectura y el motor de escritura emiten de forma alterna grupos de múltiples solicitudes de lectura consecutivas y grupos de múltiples solicitudes de escritura consecutivas durante intervalos de tiempo separados.
2. El procedimiento de la reivindicación 1, en el que seleccionar (202), con el uno o más procesadores, el modo de transferencia de memoria comprende:
seleccionar, con el uno o más procesadores, el modo de transferencia de memoria en base a una cantidad de datos que se va a transferir por la operación de transferencia de memoria.
3. El procedimiento de la reivindicación 2, en el que seleccionar (202), con el uno o más procesadores, el modo de transferencia de memoria en base a la cantidad de datos que se va a transferir por la operación de transferencia de memoria comprende:
seleccionar, con el uno o más procesadores, el modo de transferencia de memoria secuencial como el modo de transferencia de memoria si la cantidad de datos que se va a transferir por la operación de transferencia de memoria es mayor que un umbral; y
seleccionar, con el uno o más procesadores, el modo de transferencia de memoria intercalada como el modo de transferencia de memoria si la cantidad de datos que se va a transferir por la operación de transferencia de memoria no es mayor que el umbral.
4. El procedimiento de la reivindicación 1, en el que seleccionar (202), con el uno o más procesadores, el modo de transferencia de memoria comprende:
seleccionar, con el uno o más procesadores, un modo de transferencia de memoria para realizar (204) una operación de transferencia de memoria con respecto a una región de memoria intermedia fija alineada con la pantalla en base a una cantidad de superposición que tiene una región de destino de la operación de transferencia de memoria con la región de memoria intermedia fija alineada con la pantalla.
5. El procedimiento de la reivindicación 4, en el que seleccionar (202), con el uno o más procesadores, el modo de transferencia de memoria en base a una cantidad de superposición que tiene la región de destino de la operación de transferencia de memoria con la región de memoria intermedia fija alineada con la pantalla comprende:
seleccionar el modo de transferencia de memoria secuencial como el modo de transferencia de memoria si la región de destino cubre totalmente la región de memoria intermedia fija alineada con la pantalla; y
seleccionar el modo de transferencia de memoria intercalada como el modo de transferencia de memoria si la región de destino no cubre totalmente la región de memoria intermedia fija alineada con la pantalla.
6. El procedimiento de la reivindicación 1,
en el que realizar (204) la operación de transferencia de memoria comprende ejecutar un programa de sombreado, y en el que seleccionar (204), con el uno o más procesadores, el modo de transferencia de memoria comprende seleccionar el modo de transferencia de memoria en base a una determinación de si es probable que la ejecución del programa de sombreado sea un cuello de botella de rendimiento para la operación de transferencia de memoria.
7. El procedimiento de la reivindicación 6, en el que seleccionar (202), con el uno o más procesadores, el modo de transferencia de memoria en base a la determinación de si es probable que la ejecución del programa de sombreado sea el cuello de botella de rendimiento para la operación de transferencia de memoria comprende:
seleccionar el modo de transferencia de memoria secuencial como el modo de transferencia de memoria en respuesta a la determinación de que la ejecución del programa de sombreado probablemente no sea el cuello de botella de rendimiento para la operación de transferencia de memoria; y
seleccionar el modo de transferencia de memoria intercalada como el modo de transferencia de memoria en respuesta a la determinación de que la ejecución del programa de sombreado probablemente sea el cuello de botella de rendimiento para la operación de transferencia de memoria.
8. El procedimiento de la reivindicación 1, en el que realizar (204) la operación de transferencia de memoria comprende ejecutar un programa de sombreado, y en el que seleccionar (202), con el uno o más procesadores, el modo de transferencia de memoria comprende seleccionar el modo de transferencia de memoria en base a al menos uno de un tamaño de un programa de sombreado que se usa para realizar la operación de transferencia de memoria y una complejidad del programa de sombreado que se usa para realizar la operación de transferencia de memoria.
9. El procedimiento de la reivindicación 8, en el que seleccionar (202), con el uno o más procesadores, el modo de transferencia de memoria en base a al menos uno del tamaño del programa de sombreado que se usa para realizar la operación de transferencia de memoria y la complejidad del programa de sombreado que se usa para realizar la operación de transferencia de memoria comprende:
seleccionar, con el uno o más procesadores, el modo de transferencia de memoria secuencial como el modo de transferencia de memoria si el al menos uno del tamaño del programa de sombreado y la complejidad del programa de sombreado es inferior a un umbral; y
seleccionar, con el uno o más procesadores, el modo de transferencia de memoria intercalada como el modo de transferencia de memoria si el al menos uno del tamaño del programa de sombreado y la complejidad del programa de sombreado no es inferior al umbral.
10. El procedimiento de la reivindicación 1,
en el que la GPU comprende una memoria intermedia configurada para almacenar datos de origen recibidos en respuesta a solicitudes de lectura emitidas por la GPU a la memoria,
en el que realizar (204), con la GPU, la operación de transferencia de memoria en base al modo de transferencia de memoria intercalada comprende:
emitir una o más solicitudes de lectura;
colocar los datos de origen recibidos desde la memoria en respuesta a la pluralidad de solicitudes de lectura en la memoria intermedia;
para cada una de la pluralidad de solicitudes de lectura, en respuesta a que los datos de origen se colocan en la memoria intermedia para una solicitud respectiva de la pluralidad de solicitudes de lectura, consumir los datos de origen colocados en la memoria intermedia y emitir una solicitud de escritura en base a los datos de origen consumidos; y
para cada una de una pluralidad de solicitudes de escritura, en respuesta a que los datos de origen se consumen desde la memoria intermedia para una solicitud respectiva de las solicitudes de escritura, emitir una solicitud de lectura posterior, y
en el que realizar (204), con la GPU, la operación de transferencia de memoria en base al modo de transferencia de memoria secuencial comprende:
emitir una pluralidad de solicitudes de lectura;
colocar los datos de origen recibidos desde la memoria en respuesta a la pluralidad de solicitudes de lectura en la memoria intermedia;
dejar de emitir solicitudes de lectura en respuesta a la detección de que se han emitido solicitudes de lectura suficientes para llenar la memoria intermedia;
consumir datos de origen en la memoria intermedia y emitir una pluralidad de solicitudes de escritura en base a los datos de origen consumidos en respuesta a la detección de que la memoria intermedia está llena;
dejar de consumir datos de origen en la memoria intermedia y de emitir solicitudes de escritura en respuesta a la detección de que la memoria intermedia está vacía; y
reanudar la emisión de solicitudes de lectura en respuesta a la detección de que la memoria intermedia está vacía.
11. El procedimiento de la reivindicación 1, en el que realizar (204), con la GPU, la operación de transferencia de memoria comprende:
seleccionar un tamaño de línea de memoria caché de una memoria caché que se usa para almacenar temporalmente los datos de origen recuperados de una memoria durante la operación de transferencia de memoria en base al modo de transferencia de memoria seleccionado; y
configurar la memoria caché para la operación de transferencia de memoria en base al tamaño de línea de memoria caché seleccionado,
en el que seleccionar el tamaño de línea de memoria caché comprende:
seleccionar un tamaño de línea de memoria caché que sea igual a una capacidad total de la memoria caché en respuesta a que se selecciona el modo de transferencia de memoria secuencial como el modo de transferencia de memoria para realizar la operación de transferencia de memoria; y
seleccionar un tamaño de línea de memoria caché que sea inferior a la capacidad total de la memoria caché en respuesta a que se selecciona el modo de transferencia de memoria intercalada como el modo de transferencia de memoria para realizar la operación de transferencia de memoria.
12. Un aparato que comprende un dispositivo informático (2) para realizar operaciones de transferencia de memoria en base a modos de transferencia de memoria seleccionables, comprendiendo el aparato (2):
medios (6, 10) adaptados para seleccionar (202), en base a uno o más criterios, un modo de transferencia de memoria para realizar al menos parte de una operación de transferencia de memoria, seleccionándose el modo de transferencia de memoria de un conjunto de al menos dos modos de transferencia de memoria diferentes que incluye un modo de transferencia de memoria intercalada y un modo de transferencia de memoria secuencial, en el que el uno o más criterios son al menos uno de una cantidad de datos que se va a transferir por la operación de transferencia de memoria, una cantidad de superposición con una parte de memoria intermedia fija alineada con la pantalla o una ejecución de un programa de sombreado; y
medios (10) adaptados para realizar (204) la al menos parte de la operación de transferencia de memoria usando el modo de transferencia de memoria seleccionado,
en el que realizar, con la GPU, la al menos parte de la operación de transferencia de memoria usando el modo de transferencia de memoria intercalada comprende un motor de lectura que emite solicitudes de lectura y un motor de escritura que emite solicitudes de escritura usando un paradigma productor-consumidor en base a un esquema de arbitraje y priorización en el que solicitudes de lectura únicas y solicitudes de escritura únicas se intercalan entre sí, en el que realizar, con la GPU, la al menos parte de la operación de transferencia de memoria usando el modo de transferencia de memoria secuencial comprende que el cliente de lectura emita solicitudes de lectura y el cliente de escritura emita solicitudes de escritura usando un paradigma de exclusión mutua en base a un esquema de arbitraje y priorización en el que el cliente de lectura y el cliente de escritura emiten de forma alterna grupos de múltiples solicitudes de lectura consecutivas y grupos de múltiples solicitudes de escritura consecutivas durante intervalos de tiempo separados.
13. Un medio de almacenamiento legible por ordenador que almacena instrucciones que, cuando se ejecutan, hacen que el aparato de la reivindicación 12 realice el procedimiento de acuerdo con una cualquiera de las reivindicaciones 1 a 11.
ES13803357T 2012-12-21 2013-11-21 Técnicas de acceso a memoria multimodal para realizar operaciones de transferencia de memoria basadas en unidadde procesamiento de gráficos Active ES2907227T3 (es)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/725,393 US9245496B2 (en) 2012-12-21 2012-12-21 Multi-mode memory access techniques for performing graphics processing unit-based memory transfer operations
PCT/US2013/071283 WO2014099249A1 (en) 2012-12-21 2013-11-21 Multi-mode memory access techniques for performing graphics processing unit-based memory transfer operations

Publications (1)

Publication Number Publication Date
ES2907227T3 true ES2907227T3 (es) 2022-04-22

Family

ID=49759568

Family Applications (1)

Application Number Title Priority Date Filing Date
ES13803357T Active ES2907227T3 (es) 2012-12-21 2013-11-21 Técnicas de acceso a memoria multimodal para realizar operaciones de transferencia de memoria basadas en unidadde procesamiento de gráficos

Country Status (7)

Country Link
US (1) US9245496B2 (es)
EP (1) EP2936492B1 (es)
JP (1) JP6009692B2 (es)
KR (1) KR101667508B1 (es)
CN (1) CN104871246B (es)
ES (1) ES2907227T3 (es)
WO (1) WO2014099249A1 (es)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11243816B2 (en) * 2014-03-30 2022-02-08 UniversiteitGent Program execution on heterogeneous platform
JP6412708B2 (ja) * 2014-04-01 2018-10-24 株式会社ソニー・インタラクティブエンタテインメント プロセッシングシステムおよびマルチプロセッシングシステム
US10417990B2 (en) * 2014-10-16 2019-09-17 Nvidia Corporation Efficient binding of resource groups in a graphics application programming interface
US9818170B2 (en) * 2014-12-10 2017-11-14 Qualcomm Incorporated Processing unaligned block transfer operations
WO2016167807A1 (en) 2015-04-17 2016-10-20 Hewlett-Packard Development Company, L.P. Memory mode categorizations
US10163180B2 (en) 2015-04-29 2018-12-25 Qualcomm Incorporated Adaptive memory address scanning based on surface format for graphics processing
US9947277B2 (en) * 2015-05-20 2018-04-17 Apple Inc. Devices and methods for operating a timing controller of a display
WO2017049583A1 (en) * 2015-09-25 2017-03-30 Intel Corporation Gpu-cpu two-path memory copy
US9864705B2 (en) 2015-11-01 2018-01-09 International Business Machines Corporation Dynamic access method switching for open data sets
US10390114B2 (en) * 2016-07-22 2019-08-20 Intel Corporation Memory sharing for physical accelerator resources in a data center
US10310860B2 (en) * 2016-07-29 2019-06-04 International Business Machines Corporation Starting and stopping instruction dispatch to execution unit queues in a multi-pipeline processor
US10175905B2 (en) * 2016-09-13 2019-01-08 Apple Inc. Systems and methods for dynamically switching memory performance states
KR102022481B1 (ko) * 2017-12-06 2019-09-18 연세대학교 산학협력단 Gpu 사용량을 이용한 고성능 컴퓨팅 시스템의 체크포인트 생성 방법
US10430915B2 (en) * 2017-12-28 2019-10-01 Nvidia Corporation Multi-GPU frame rendering
US11252429B2 (en) * 2018-04-27 2022-02-15 Ati Technologies Ulc Low-latency consumption of an encoded video bitstream
KR102520412B1 (ko) * 2018-09-19 2023-04-12 에스케이하이닉스 주식회사 메모리 시스템 및 그것의 동작방법
US10642764B1 (en) * 2019-03-01 2020-05-05 Western Digital Technologies, Inc. Data transfer command latency of a host device
US20220129198A1 (en) * 2019-07-12 2022-04-28 Hewlett-Packard Development Company, L.P. Data updates for controllers
US11843772B2 (en) 2019-12-06 2023-12-12 Ati Technologies Ulc Video encode pre-analysis bit budgeting based on context and features
WO2021120132A1 (zh) * 2019-12-19 2021-06-24 华为技术有限公司 一种存储系统及数据交叉方法
WO2021158483A1 (en) * 2020-02-03 2021-08-12 Song Interactive Entertainment Inc. System and method for efficient multi-gpu rendering of geometry by pretesting against interleaved screen regions before rendering
US11960404B2 (en) * 2020-09-23 2024-04-16 Advanced Micro Devices, Inc. Method and apparatus for reducing the latency of long latency memory requests
KR102641532B1 (ko) * 2022-10-20 2024-02-28 (주)한국플랫폼서비스기술 사생활 보호 딥러닝 프레임워크 응용 컴퓨팅 장치 및 그 방법

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5396597A (en) 1992-04-03 1995-03-07 International Business Machines Corporation System for transferring data between processors via dual buffers within system memory with first and second processors accessing system memory directly and indirectly
US5948081A (en) 1997-12-22 1999-09-07 Compaq Computer Corporation System for flushing queued memory write request corresponding to a queued read request and all prior write requests with counter indicating requests to be flushed
US6756986B1 (en) 1999-10-18 2004-06-29 S3 Graphics Co., Ltd. Non-flushing atomic operation in a burst mode transfer data storage access environment
US6564304B1 (en) 2000-09-01 2003-05-13 Ati Technologies Inc. Memory processing system and method for accessing memory including reordering memory requests to reduce mode switching
US6625685B1 (en) 2000-09-20 2003-09-23 Broadcom Corporation Memory controller with programmable configuration
US6819327B2 (en) 2001-05-18 2004-11-16 Sun Microsystems, Inc. Signature analysis registers for testing a computer graphics system
JP2003323339A (ja) * 2002-03-01 2003-11-14 Sony Computer Entertainment Inc メモリアクセス装置、半導体デバイス、メモリアクセス制御方法、コンピュータプログラム及び記録媒体
KR100648293B1 (ko) * 2005-08-09 2006-11-23 삼성전자주식회사 그래픽 시스템 및 그것의 그래픽 처리 방법
US8035647B1 (en) 2006-08-24 2011-10-11 Nvidia Corporation Raster operations unit with interleaving of read and write requests using PCI express
US8327092B2 (en) 2009-09-21 2012-12-04 Freescale Semiconductor, Inc. Memory device configurable as interleaved or non-interleaved memory
KR101639574B1 (ko) * 2009-12-30 2016-07-14 삼성전자주식회사 적응적 뱅크 어드레스를 제공하는 디스플레이 시스템 및 그것의 어드레스 맵핑 방법
JP5678273B2 (ja) * 2010-03-01 2015-02-25 パナソニックIpマネジメント株式会社 メモリコントローラ
KR101620460B1 (ko) * 2010-05-04 2016-05-13 삼성전자주식회사 인터커넥트, 그것을 포함하는 버스 시스템 그리고 버스 시스템의 동작 방법
US9465728B2 (en) * 2010-11-03 2016-10-11 Nvidia Corporation Memory controller adaptable to multiple memory devices
US9208002B2 (en) * 2012-01-06 2015-12-08 International Business Machines Corporation Equalizing bandwidth for multiple requesters using a shared memory system

Also Published As

Publication number Publication date
KR20150099781A (ko) 2015-09-01
WO2014099249A1 (en) 2014-06-26
CN104871246B (zh) 2017-09-29
US9245496B2 (en) 2016-01-26
CN104871246A (zh) 2015-08-26
JP6009692B2 (ja) 2016-10-19
US20140176586A1 (en) 2014-06-26
EP2936492A1 (en) 2015-10-28
JP2016509280A (ja) 2016-03-24
KR101667508B1 (ko) 2016-10-18
EP2936492B1 (en) 2022-01-26

Similar Documents

Publication Publication Date Title
ES2907227T3 (es) Técnicas de acceso a memoria multimodal para realizar operaciones de transferencia de memoria basadas en unidadde procesamiento de gráficos
US9134954B2 (en) GPU memory buffer pre-fetch and pre-back signaling to avoid page-fault
US10535114B2 (en) Controlling multi-pass rendering sequences in a cache tiling architecture
US10269090B2 (en) Rendering to multi-resolution hierarchies
US9293109B2 (en) Technique for storing shared vertices
ES2840228T3 (es) Técnicas de ejecución del programa sombreador para uso en procesamiento de gráficos
US9495721B2 (en) Efficient super-sampling with per-pixel shader threads
JP6352546B2 (ja) 非整列ブロック転送動作の処理
US9286647B2 (en) Pixel shader bypass for low power graphics rendering
US9418616B2 (en) Technique for storing shared vertices
US9449410B2 (en) Intra-frame timestamps for tile-based rendering
US9720842B2 (en) Adaptive multilevel binning to improve hierarchical caching
US10078883B2 (en) Writing graphics data from local memory to system memory
US20160292812A1 (en) Hybrid 2d/3d graphics rendering
US9082212B2 (en) Programmable blending via multiple pixel shader dispatches
US20140104267A1 (en) Low-power processing in depth read-only operating regimes
US8698814B1 (en) Programmable compute engine screen mapping
US20140136793A1 (en) System and method for reduced cache mode