Loading

Alison's New App is now available on iOS and Android! Download Now

Study Reminders
Support
Text Version

Set your study reminders

We will email you at these times to remind you to study.
  • Monday

    -

    7am

    +

    Tuesday

    -

    7am

    +

    Wednesday

    -

    7am

    +

    Thursday

    -

    7am

    +

    Friday

    -

    7am

    +

    Saturday

    -

    7am

    +

    Sunday

    -

    7am

    +

En la conferencia anterior hemos aprendido acerca del hardware de gráficos básicos. También, hemos aprendido sobre los dispositivos de entrada y salida de gráficos y también la arquitectura general de un sistema gráfico. Ahora, continuaremos nuestra discusión sobre este hardware gráfico y hoy cubriremos conceptos básicos de la programación de GPU y GPU, que son parte del hardware gráfico.
Así que, comencemos con la GPU. Qué es y cómo se utiliza para implementar la interconexión.
Una cosa que debemos tener en cuenta en los gráficos es que las operaciones de gráficos son de naturaleza muy paralela. Esa es una característica muy crucial de las operaciones gráficas. Por consiguiente, es necesario realizar un proceso paralelo de estas operaciones.
Por ejemplo, considere la etapa de transformación de modelado. Recuerda que en esta etapa, ¿qué hacemos? Convertimos o transformamos objetos definidos en su propio sistema de coordenadas local o local a una escena de coordenadas mundial. Ahora, cómo hacemos eso, aplicamos transformaciones, por ejemplo rotaciones a los vértices que definen los objetos.
¿Y cuál es la transformación? Si usted puede recordar de nuestras discusiones anteriores, definimos la transformación como una multiplicación de dos cosas. Una es una matriz de transformación y la otra es un vector de vértice. La cosa a tener en cuenta aquí es que la misma multiplicación de matriz vectorial se hace para todos los vértices que queremos transformar. Eso significa que estamos esencialmente realizando la misma operación multiplicación para todos los vértices.
Ahora, se nos da un conjunto de vértices que definen los objetos. Podemos ir para una multiplicación en serie donde realizamos una multiplicación de vector de matriz a la vez. Sin embargo, eso de todos modos no va a ser muy eficiente. Porque esencialmente, estamos realizando la misma operación, así que en lugar de ir para la multiplicación en serie, si podemos realizar la misma operación en todos los vectores al mismo tiempo que es en paralelo entonces vamos a tener una ganancia significativa en el rendimiento. Y esto es muy importante en la representación en tiempo real de escenas porque normalmente necesitamos procesar millones de vértices a la vez o millones de vértices por segundo. Por lo tanto, si podemos procesar todos estos millones de vértices de forma paralela entonces vamos a tener una gran ganancia en el rendimiento.
Si estamos realizando estas operaciones utilizando nuestra CPU, entonces no podemos aprovechar esta naturaleza paralela inherente de las operaciones de gráficos. Porque las CPU no están diseñadas para eso. Con el fin de abordar este problema en el que queremos aprovechar este paralelismo inherente, hay un hardware especial que viene con nuestros sistemas. Casi todos los sistemas gráficos vienen con una tarjeta gráfica separada, que contiene su propia unidad de procesamiento y elementos de memoria. Ahora, este sistema de hardware especializado separado se llama unidad de procesamiento de gráficos o GPU. Por lo tanto, esencialmente GPU significa un hardware especializado que se utiliza para realizar la operación gráfica explotando el paralelismo inherente que hay en las operaciones de gráficos.
Vamos a entrar en el funcionamiento de la GPU. Ahora, tenemos que tener en cuenta que la GPU es un sistema multicore que significa que contiene un gran número de núcleos o elementos de procesamiento de unidades. Ahora, cada uno de estos núcleos o estos elementos de proceso de unidad se denomina procesador de corriente. Porque funciona en corrientes de datos, corrientes de datos de entrada.
Ahora, estos núcleos no son más que un hardware simple capaz de realizar operaciones aritméticas simples de enteros y de coma flotante. Por lo tanto, cada núcleo sólo puede realizar operaciones aritméticas, ya sea aritmética de enteros o aritmética de coma flotante. Y múltiples núcleos se agrupan para formar otra unidad llamada multiprocesadores en streaming o SM. Por lo tanto, cada núcleo se llama procesador de corriente y muchos de estos núcleos se agrupan para formar multiprocesadores en modalidad continua.
Ahora, esto nos lleva a la idea de SIMD, anote el término. Para entender, consideremos un ejemplo, la transformación geométrica de los vértices que estábamos discutiendo antes. Entonces, aquí nuestra instrucción es la misma que es la multiplicación. Ahora, los datos en los que opera esta instrucción varían, porque los vectores de vértice varían. Aunque la matriz de transformación sigue siendo la misma. Entonces, entonces aquí lo que estamos haciendo, estamos teniendo una sola instrucción trabajando en múltiples datos. Esta es la idea de SIMD o Single Instruction Multiple Data, y los multiprocesadores de transmisión de GPU son esencialmente ejemplos de SIMD. Así que, cómo funciona, aquí como puede ver, tenemos la misma instrucción dada a todos los núcleos y los núcleos toman datos que pueden ser diferentes, pero la instrucción será la misma y la misma instrucción funcionará en diferentes corrientes de datos. Otra ilustración de esta idea se da aquí, aquí si no consideramos a SIMD entonces lo que pasa. Por lo tanto, tenemos dos operaciones de adición en dos corrientes de datos. A0 B0 y A1 B1, por lo que habrá dos instrucciones separadas para realizar estas dos adiciones separadas que dan la salida de C0 y C1, esta es una operación normal. En caso de SIMD lo que pasa es que tenemos esto como flujos de datos y la instrucción es sencilla. Aquí tenga en cuenta que tenemos dos instrucciones trabajando en dos flujos de datos separados. Aquí tenemos una sola instrucción trabajando en ambas corrientes de datos para darnos la salida deseada. Esa es la idea de SIMD. Por lo tanto, ahora sabe que las GPU contienen SMs o multiprocesadores en streaming que funcionan en función de la idea de SIMD.
A continuación, veamos cómo se organizan las GPUs. Como dije cada multiprocesador de streaming está diseñado para realizar operaciones de SIMD. Así que y tenemos muchos de estos multiprocesadores en streaming, como se muestra aquí. Entonces tenemos alguna memoria especializada, cuya finalidad se le explicará en breve, y otros componentes para gestionar este proceso paralelo. Cada multiprocesador de streaming contiene múltiples procesadores de streaming o curso como se muestra aquí. Y cada núcleo es capaz de realizar operaciones aritméticas simples de enteros o de coma flotante solamente. (Consulte el tiempo de la diapositiva: 11:33) Por lo tanto, esto es ampliamente lo que hay en GPU, multiprocesadores en streaming y unidades de memoria dedicada más componentes adicionales para gestionar este proceso paralelo. Ahora, intentemos entender cómo funcionan las operaciones gráficas en las GPUs. Lo primero que debemos tener en cuenta es que la mayoría de los sistemas gráficos en tiempo real asumen que la escena está hecha de triángulos. Por lo tanto, realmente convertimos cualquier superficie en triángulos o mallas triangulares. Este punto ya lo hemos comentado anteriormente cuando hablábamos de la representación de objetos.
Ahora, dado que la información de malla triangular lo que sucede es que, esas API dedicadas que se proporcionan en la biblioteca de gráficos como OpenGL o Direct3D, estos triángulos se envían a la GPU, un vértice a la vez en serie y la GPU los ensambla en triángulos.
También, debemos tener en cuenta aquí que los vértices están representados con un sistema homogéneo de coordenadas. Así que los vértices están representados en el sistema de coordenadas homogéneas.
Y así estamos tratando aquí con la primera etapa que es la definición de objeto, por lo que estos objetos se definen en sus sistemas de coordenadas locales o de modelado. Entonces la GPU realiza todas las etapas, por lo que primero realiza la transformación de modelado en vértices que es la primera etapa de procesamiento.
Y como hemos explicado anteriormente esta transformación se logra con una única matriz de transformación y operación de multiplicación de punto vectorial.
Como hemos notado anteriormente, la GPU multicore realiza tales operaciones simultáneamente o de forma paralela, por lo que esencialmente múltiples vértices se transforman simultáneamente al mismo tiempo. No es que uno tras otro estemos realizando las multiplicaciones. Por lo tanto, lo que obtenemos después de la multiplicación que es la corriente de los triángulos, pero esta vez, están definidos en el sistema de coordenadas del mundo, que es el propósito de modelar la etapa de transformación. También se supone que el espectador está situado en el origen del sistema de coordenadas del mundo y la dirección de la vista está alineada con el eje z. Esta es la suposición de que el hardware está diseñado.
Por lo tanto, después de la transformación del modelado, la GPU calcula el color del vértice o se realiza la etapa de iluminación. Ahora, esto se hace en base a la luz que se define para la escena, por lo que se asume alguna fuente de luz y en base a esa fuente de luz se hace esta coloración. Ahora, por qué la GPU es adecuada para la computación de colores porque si usted puede recordar nuestra discusión sobre la iluminación, hemos notado que la coloración puede ser calculada por productos de punto vectorial y una serie de operaciones de adición y multiplicación. Y estas operaciones se realizan simultáneamente para múltiples vértices por la GPU porque está diseñado de esa manera, así que de nuevo aquí estamos explotando la naturaleza inherente de las operaciones de gráficos que es el paralelismo.
Después de la coloración, cada vértice 3D coloreado se proyecta en el plano azul. Y eso otra vez se hace usando la multiplicación de vector de matriz, ya hemos notado esto antes durante nuestra discusión sobre la transformación de la proyección y la salida que obtenemos es la corriente de los triángulos en la pantalla o las coordenadas del dispositivo listas para ser convertidas a pixels. Ahora, tenga en cuenta que esta proyección en realidad implica también la transformación de vistas. Lo que no hemos mencionado explícitamente aquí, así como la ventana para ver la transformación puesta. Todas estas transformaciones podemos agrupar multiplicando las matrices de transformación correspondientes para obtener una única matriz de transformación.
Por lo tanto, después de esa etapa obtenemos los triángulos de espacio de dispositivos y ahora vamos para la conversión de rasterización o exploración. Así que aquí se puede notar que cada triángulo de espacio de dispositivo se solapa con algunos píxeles en la pantalla que significa que esos píxeles son parte de los triángulos. En la etapa de rasterizado se determinan estos pixeles.
Ahora, los diseñadores de GPU que desarrollaron GPUs a lo largo de los años incorporaron muchos tales algoritmos de rasterización, ya hemos discutido pocos en nuestras discusiones sobre la rasterización. Ahora, estos algoritmos explotan una observación crucial que es cada píxel se puede tratar independientemente de todos los demás píxeles. Por lo tanto, no es necesario tratar los pixeles como dependientes unos de otros pueden ser tratados independientemente.
Por consiguiente, los pixeles pueden ser rasterizados de manera paralela, por lo que usted puede usar este paralelismo inherente para rasterizar todos los pixeles de manera simultanea. Y esa es una gran ventaja de tener GPU, no tenemos que procesar un píxel a la vez en su lugar podemos procesar todos los píxeles juntos para obtener resultados rápidos, una salida rápida.
Ahora, si usted puede recordar la tubería de gráficos 3D, durante la etapa de procesamiento de píxeles hay dos etapas más que están allí, dos actividades más que están allí, uno es la textura de la superficie o la asignación de patrones a los colores de la superficie y segundo es la eliminación de la superficie oculta o HSR.
Ahora, la idea de la textura de la superficie es muy simple aquí la imagen de textura es allí que realmente se impone en la superficie para darnos la ilusión de los detalles. Tenga en cuenta que es sólo una creación de ilusión en lugar de realmente calcular un patrón de textura, simplemente reemplazar los colores de pixel por el color de la textura. Esa es la idea más sencilla que hemos discutido anteriormente. (Consultar tiempo de la diapositiva: 20:40) Ahora, para que tengamos que almacenar estas imágenes de textura o mapas de textura. Y ya que necesitamos acceder a él, que las imágenes de textura con frecuencia, lo ideal es que se almacenen en la memoria de alta velocidad, para que el tiempo de acceso sea menor. Ahora, esto se debe a que como dijimos anteriormente los cálculos de píxeles son muy frecuentes y cada cálculo de píxel debe acceder a estas imágenes de textura. En segundo lugar, el acceso suele ser de naturaleza muy regular. Eso significa que los píxeles cercanos tienden a acceder a imágenes de textura cercanas o a ubicaciones de imágenes de textura. Por lo tanto, para reducir el tiempo de acceso se utiliza memoria caché especializada para almacenar las imágenes de textura como se muestra aquí en esta figura. Se trata de ubicaciones de memoria especializadas en la GPU para almacenar imágenes de textura.
También, discutimos anteriormente durante nuestra discusión sobre la eliminación de la superficie oculta, la idea del algoritmo de almacenamiento intermedio Z o el algoritmo de almacenamiento intermedio de profundidad. Ahora, que se implementa en GPUs y para eso también las GPU suelen estar equipadas con elementos de memoria especializados o buffers de profundidad. Y almacena la distancia de los espectadores de cada píxel. Por lo tanto, eso es típicamente parte de la GPU.
Ahora si puedes recordar cómo funciona el buffer Z, así que aquí también GPU compara la distancia de píxeles con la distancia de píxel ya presente que es simplemente ejecuta el algoritmo y la memoria de visualización se actualiza solo si el nuevo píxel está más cerca. Por lo tanto, implementa el algoritmo de almacenamiento intermedio Z, para obtener más detalles, puede hacer referencia a la conferencia 23. Por lo tanto, usted tiene los multiprocesadores de streaming, cada curso que contiene, luego estos varios elementos de datos para realizar estas operaciones simultáneas más almacenamiento de textura especializada que forman GPU.
Ahora, hay un concepto más que es la idea de la programación de shaders y shader. Tratemos de entender este concepto de programación en breve a un nivel muy introductorio. En nuestra discusión anterior sobre la GPU lo que discutimos es que, cómo las GPUs implementan etapas de tuberías. Ahora, en esa discusión si usted puede haber notado que hay dos grupos amplios de actividades, uno es el procesamiento de los vértices o el procesamiento de vértice también llamado proceso de geometría. Otra es el procesamiento de píxeles. Por lo tanto, estos dos amplios grupos de actividades fueron discutidos para explicar el funcionamiento de la GPU.
Ahora, durante los primeros años de GPUs solían venir con una tubería de hardware de función fija, eso significa que todas las etapas de la tubería o todas las etapas que implementan la tubería están pre-programadas e incrustadas en el hardware. Los componentes de contenido de GPU dedicados a tareas específicas y el usuario no tenían ningún control sobre cómo se debe realizar esta tarea y qué unidad de proceso realiza qué etapa de la interconexión. Por lo tanto, la GPU anterior se utiliza para venir con este hardware de la función fija que significa que todo estaba predeterminado, qué componente de la GPU se ocupará de qué parte de la tubería y el usuario no tenía control sobre ella. Por lo tanto, el flujo era típicamente como este del programa de usuario que las primitivas fueron enviadas, entonces los componentes estaban allí para el procesamiento de la geometría, la salida es 2D coordenadas de la pantalla a partir de allí el procesamiento del pixel se inicia y los componentes se arreglaron de nuevo.
Pero entonces la gente se da cuenta de que, eso es realmente reducir la flexibilidad y debido a que el poder de la GPU no fue completamente utilizado. Para aprovechar mejor la potencia de la GPU, las GPU modernas están diseñadas para ser programables que significa que podemos programarlas. Las unidades de función fija se sustituyen por la cuadrícula unificada de procesadores conocidos como shaders. Por lo tanto, antes había unidades de función fija, ahora hay una rejilla unificada de procesadores que se llaman shaders.
Y cualquier unidad de proceso se puede utilizar para realizar cualquier cálculo de etapa de interconexión. Y los elementos de la GPU, es decir, las unidades de procesamiento y la memoria se pueden reutilizar a través de programas de usuario.
Así, antes teníamos unidades fijas para realizar diferentes etapas, ahora tenemos instalaciones comunes que se reutilizan para realizar diferentes etapas y que se determina a través de la programación. Qué porción y cómo los elementos de la GPU, a saber, las unidades de procesamiento y la memoria se utilizan para realizar operaciones relacionadas con una etapa en particular. La idea se muestra aquí como se puede ver una vez que los primitivos se envían a la GPU, la GPU como un elemento común, ahora subconjunto de estos elementos comunes se utilizan para diferentes propósitos como se puede ver aquí también la memoria también se comparte y se reutiliza.
Ahora, la idea es que escribimos programas para usar elementos de GPU, estos programas se llaman programas shader y el enfoque correspondiente se llama programación shader. Vamos brevemente a través de los fundamentos de la programación shader.
Ahora, con la GPU programable que acabamos de introducir es posible que el programador modifique cómo el hardware de la GPU procesa los vértices y los tonos píxeles, los tonos medios asignan el color a los píxeles. Esto es posible escribiendo shaders de vértice y sombreadores de fragmentos, estos también se llaman programas de vértice y programas de fragmentos. Estos son términos que probablemente se han encontrado con estos se utilizan para especificar a la GPU cómo utilizar su hardware para fines específicos. Y este enfoque como he dicho es conocido como programación shader y tiene otros nombres también como programación de GPU, programación de hardware de gráficos y así sucesivamente.
En caso de vertex shader, lo que sucede es que, estos programas se utilizan para procesar los vértices o la geometría. Básicamente, estos programas se utilizan para realizar transformaciones de modelado, iluminación y proyección a coordenadas de pantalla que implican todas las transformaciones intermedias de la transformación de vista. Y conceptualmente la ventana para ver también poner la transformación.
En caso de fragmento shader hace un trabajo diferente, estos son programas que realizan los cálculos necesarios para el procesamiento de píxeles. Ahora cuáles son los cálculos, los que están relacionados con cómo se representa cada píxel, cómo se aplica la textura o la correlación de la textura y si se dibuja un píxel o no que se oculta la eliminación de la superficie. Por lo tanto, estos 3 son la tarea realizada por los sombreadores de fragmentos. Tenga en cuenta que todos estos 3 están relacionados con el proceso de píxeles. Por lo tanto, los sombreadores de vértice son el procesamiento de vértices en su mayoría relacionados con las transformaciones de la coordinación de modelado a la coordinación de dispositivos, y todas las transformaciones en el medio. Mientras que los fragmentos de fragmentos tratan con procesamiento de pixeles que esta haciendo de pixeles aplicando texturas asi como la realizacion de remocion de superficie oculta en el nivel de pixel.
Ahora, por qué se llama fragmento shader las unidades de procesamiento de píxeles, implica que la GPU en cualquier instante puede procesar un subconjunto o fragmento de todos los píxeles de pantalla que están presentes. Por lo tanto, en un momento en que un subconjunto de los pixeles de pantalla son procesados por lo tanto se llama un fragmento de fragmento.
Ahora, estos programas de shader son pequeños trozos de códigos y se envían al hardware gráfico desde programas de usuario tan esencialmente llamando a algunas API y ejecutados en hardware gráfico. Por lo tanto, debemos tener en cuenta que son pequeños trozos de códigos que se ejecutan en hardware gráfico y que están incrustados en programas de usuario, enviados al hardware por los programas de usuario.
De hecho, esta capacidad de programar GPUs dio lugar a una nueva idea que es la idea de la GPU de propósito general o GPGPU. De nuevo estos son términos comunes hoy en día y usted probablemente ha llegado a través de este término, esto significa que podemos utilizar la GPU para cualquier propósito no necesariamente sólo para realizar las operaciones relacionadas con los gráficos. Por lo tanto, con la idea de GPGPU podemos realizar tareas que no están relacionadas con los gráficos en absoluto, sin embargo estos son temas muy involucrados y no vamos a ir más allá para explicar estos conceptos.
Así que, en resumen, lo que hemos aprendido hoy, intentemos recapitular rápidamente.
Nos enteramos de cómo funciona el hardware. Ahora, eso significa la unidad de procesamiento de gráficos que son de todos modos parte de los sistemas de computadora que se ocupan de las operaciones de gráficos. También aprendimos cómo las etapas del gasoducto se implementan en la GPU y se introdujeron a la idea de los shaders y los programas shader.
Ahora, se trata de hardware. Así, en la conferencia anterior y la conferencia de hoy hemos aprendido sobre el hardware gráfico. Empezamos con la discusión sobre la arquitectura general de un sistema de gráficos una arquitectura muy genérica, luego explicar términos diferentes y luego en algunos detalles aprendieron cómo funciona la GPU. Queda un componente que es cómo como programador podemos escribir un programa para realizar operaciones gráficas. Que aprenderemos ese aspecto del curso que está escribiendo programas para realizar una operación gráfica o crear una escena en la pantalla que aprenderemos en la próxima conferencia, donde aprenderemos sobre programas de escritura usando OpenGL que es una biblioteca de gráficos.
Cualquier cosa que hayamos discutido hoy usted puede encontrar en este libro, específicamente Capítulo 10, Sección 10 punto 3. Eso es todo para hoy, véanle en la próxima conferencia. Gracias y adiós.