herramientas de soporte para un simulador de un procesador gráfico 3d director: victor moya del...

39
Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos González Rodríguez Departamento: Arquitectura de Computadores

Upload: juana-vega-vazquez

Post on 23-Jan-2016

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

Herramientas de Soporte para un Simulador de un Procesador Gráfico

3D

Director: Victor Moya del Barrio

Ponente: Agustín Fernández Jiménez

Autor: Carlos González Rodríguez

Departamento: Arquitectura de Computadores

Page 2: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

Proyecto bGPU

Aplicación OpenGL

API OpenGL

Driver hardware gráfico

Aplicación OpenGL

API OpenGL

Driver (bGPU)

Simulador bGPU

Realidad Objetivo

Estadísticas

Page 3: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

Mi Proyecto Objetivo principal

Poder ejecutar aplicaciones 3D (trazas) que usen la API gráfica OpenGL en el simulador bGPU. También es un objetivo principal la obtención de estadísticas a nivel de la API OpenGL

GLInterceptor TraceDriver GPULib GPUDriver

Objetivos secundarios Comprobar integridad de trazas OpenGL y

visualizar el tráfico interno del simulador GLPlayer bGPU Traffic Visualizer

Page 4: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

Mi Proyecto

Aplicación OpenGL

API OpenGL

Driver hardware gráfico

Page 5: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

Mi Proyecto

Aplicación OpenGL

API OpenGL

Driver hardware gráfico

Traza OpenGL

GLPlayer

GLInterceptor TraceDriver

API OpenGL (bGPU)

Driver (bGPU)

Simulador bGPU

Estadísticas

Estadísticas

Page 6: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

Mi Proyecto

Aplicación OpenGL

API OpenGL

Driver hardware gráfico

Traza OpenGL

GLPlayer

GLInterceptor TraceDriver

API OpenGL (bGPU)

Driver (bGPU)

Simulador bGPU

Estadísticas

Estadísticas

Page 7: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

Mi Proyecto - Anexo

La última herramienta en este PFC es un visualizador del tráfico interno del simulador

El visualizador es un complemento independiente del resto de herramientas presentadas hasta ahora

Permite analizar el tráfico interno del simulador bGPU de forma visual

Page 8: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

OpenGL

¿Qué es OpenGL?

Aplicaciones Ejemplo simple

API OpenGL

Driver hardware gráfico

Aplicación OpenGL

Driver hardware gráfico

Aplicación OpenGL

Page 9: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

OpenGL – ¿Qué es OpenGL?

OpenGL es una API Gráfica que permite especificar los objetos y operaciones necesarias para el desarrollo de gráficos por ordenador de alta calidad, especialmente escenas 3D

Interfaz software para hardware gráfico

Capa software que se ubica entre el programador y la CPU/GPU

Independiente del sistema de ventanas y el SO

API completamente horizontal Interfaz C 455 funciones OpenGL 1.5 763 funciones pertenecientes a extensiones 2938 constantes

Page 10: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

OpenGL - Aplicaciones

Juegos 3D

Realidad Virtual CAD/CAM

Software científico/médico

Page 11: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

OpenGL - Ejemplo simple

#include <GL/gl.h>#include <GL/glut.h>

void display(void) { glClear (GL_COLOR_BUFFER_BIT); glColor( 1.0, 1.0, 1.0); glBegin(GL_POLYGON); glVertex3f (0.25, 0.25, 0.0); glVertex3f (0.75, 0.25, 0.0); glVertex3f (0.75, 0.75, 0.0); glVertex3f (0.25, 0.75, 0.0); glEnd(); glFlush ();}

void init (void) { glClearColor (0.0, 0.0, 0.0, 0.0); /* select clearing (background)

color */ glMatrixMode(GL_PROJECTION); /* initialize viewing values */ glLoadIdentity(); glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);}

int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize (250, 250); glutInitWindowPosition (100, 100); glutCreateWindow ("hello"); init (); glutDisplayFunc(display); glutMainLoop(); return 0;}

Page 12: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

GLInterceptor

¿Qué es GLInterceptor? Trazas Estadísticas Arquitectura Código autogenerado

Aplicación OpenGL

API OpenGL

Driver hardware gráfico

GLInterceptor

Aplicación OpenGL

API OpenGL

Driver hardware gráfico

Page 13: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

GLInterceptor - ¿Qué es GLInterceptor?

Objetivo Capturar todas las llamadas a la API OpenGL Almacenar llamadas con sus parámetros en disco Generar estadísticas de la frecuencia de uso de las llamadas

Requisitos

Soporte para OpenGL 1.5 Soporte para cualquier extensión OpenGL Diversos formatos de traza: Text, bin, comprimido, etc

Dificultad Recordemos números sobre la API OpenGL

455 funciones OpenGL 1.5 763 funciones pertenecientes a extensiones Total: 1218 funciones a “interceptar”

Solución Código fuente autogenerado Entraremos en esto más adelante cuando hablemos de las funciones

Wrapper

Page 14: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

GLInterceptor - Trazas

GLI0.t# Trace generated with GLInterceptor 0.1# Thu Jun 03 11:18:45 2004wglDescribePixelFormat(3103857406,1,40,U0x20759612)=54…glBindTexture(GL_TEXTURE_2D,1041)glTexImage2D(GL_TEXTURE_2D,0,3,16,16,0,GL_RGBA,GL_UNSIGNED_BYTE,*68)glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,9729)glGetError()=GL_FALSE…glDisable(GL_CLIP_PLANE0)glColor3f(0.5,0.5,0.5)glBegin(GL_QUADS)glTexCoord2f(0.000976563,0.000976563)glVertex2f(0,0)glTexCoord2f(0.999023,0.000976563)glVertex2f(1280,0)…glVertexPointer(3,GL_FLOAT,16,*1133)glLockArraysEXT(0,4)glBindTexture(GL_TEXTURE_2D,1024)glDisable(GL_BLEND)glDepthMask(TRUE)glEnable(GL_DEPTH_TEST)glDrawElements(GL_TRIANGLES,6,GL_UNSIGNED_INT,*1134)glUnlockArraysEXT()…wglSwapBuffers(3103857406)=1…

Page 15: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

GLInterceptor - Estadísticas

FRAME STATS 1 2 ... 2280 2281 2282 2283

glActiveTextureARB 2 ... 146 144 144 144

glAlphaFunc ...

glBegin 1 1 ...

... … … ... ... ... ... ...

glDrawElements ... 176 178 186 184

... … … ... ... ... ... ...

BATCHES 1 1 ... 176 178 186 184

VERTEXES 4 4 ... 28371 28323 29007 29781

TRIANGLES 2 2 ... 9457 9441 9669 9927

Page 16: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

GLInterceptor - Arquitectura

Aplicación OpenGLGLIConfig.ini

gl.h glext.h wgl.h wglext.h

GLWrapper SpecificGLInterceptorDLL start

GLIStatManager

SpecificStats

AdvancedStats

TraceWriter GLJumpTableBuffers Objects

Zlib Compression

statsPerFrame.csvstatsPerBatch.csv

tracefile.dat BufferDescriptors.datMemoryRegions.dat

opengl32.dll

ICD

auto

auto

auto

auto

auto auto

Page 17: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

GLInterceptor – Código autogenerado

Mecanismo para interceptar llamadas Funciones Wrapper

Una función Wrapper por cada función OpenGL original Actualizan el contador de estadísticas Almacenan la llamada y sus parámetros Ejecutan la función OpenGL original

Código de funciones Wrapper generado de forma automática. GLWrapperGenerator

Una función Wrapper puede tener comportamiento específico Código escrito manualmente

El código específico se escribe en ficheros independientes. El generador de código se encarga de enlazar nuestro código específico con el código autogenerado

Specific.h Directivas

Page 18: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

GLInterceptor – Función Wrapper

void GLAPIENTRY glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices){#ifndef WRAP_ONLY_MODE // Specific stats code glDrawElements_STAT(mode,count,type,indices); _COUNT(APICall_glDrawElements);#endif GLInterceptor::init(); CHECKCALL(glDrawElements); DO_REAL_CALL(glDrawElements(mode,count,type,indices));#if !defined(STATS_ONLY_MODE) && !defined(WRAP_ONLY_MODE) _W.writeAPICall("glDrawElements"); _W.writeMark("("); _W.writeEnum(mode); _W.writeMark(","); _W.write(count); _W.writeMark(","); _W.writeEnum(type); _W.writeMark(","); // [GEN-CODE info: Specific user call] glDrawElements_SPECIFIC(mode,count,type,indices); _W.writeMark(")\n");#endif}

//<NL=4>//<A=3>

void GLAPIENTRY glDrawElements_SPECIFIC( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices );

Page 19: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

GLPlayer

¿Qué es GLPlayer? Arquitectura GLExec API OpenGL

Driver hardware gráfico

API OpenGL

Driver hardware gráfico

GLPlayer

Traza OpenGL

Page 20: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

GLPlayer - ¿Qué es GLPlayer?

Reproductor de trazas OpenGL generadas con GLInterceptor

Verificador visual

Realiza el proceso “inverso” a GLInteceptor ¿Traza correcta?

Crea un contexto/ventana donde recrean todos los comandos OpenGL de la traza

Implementado utilizando el componente GLExec que permite procesar una traza con un grado de abstracción muy elevado

Page 21: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

GLPlayer - Arquitectura

GLPlayer win32

Contexto de visualización (ventana)

GLExec

Tracefile.dat BufferDescriptors.dat MemoryRegions.dat

Crear ventana

Inicializar GLExec Ejecutar Llamadas OpenGL

config.ini

Leer configuración

Si wglSwapBuffers(fin del frame)

SwapBuffers

Page 22: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

GLPlayer - GLExec

Interfaz “simple” de acceso a una traza Independiente del formato de la traza Transparente a la gestión de buffers Transparente a la ejecución de OpenGL

Usa un mecanismo inverso a GLInterceptor Funciones STUB

Leer llamada seleccionar función STUB

Leer parámetros Ejecutar la función OpenGL

Permite asociar diferentes implementaciones a cada una de las funciones OpenGL de su tabla de funciones, de forma dinámica o estática.

GLPlayer opengl32.dll TraceDriver Librería GPULib …

Fácilmente extensible Funciones STUB auto-generadas No necesita código específico

Page 23: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

GLPlayer - GLExec

TraceDriver

Traza OpenGL

API OpenGL (bGPU)

Driver (bGPU)

Simulador bGPU

Estadísticas

API OpenGL

Driver hardware gráfico

GLPlayer

Traza OpenGL

Page 24: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

GPULib ¿Qué es GPULib? Estado en GPULib Paradigma

glBegin/glEnd T&L vs Vertex Shaders

TraceDriver

Traza OpenGL

API OpenGL (bGPU)

Driver (bGPU)

Simulador bGPU

Estadísticas

Driver (bGPU)

Simulador bGPU

Estadísticas

TraceDriver

Traza OpenGL

Page 25: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

GPULib - ¿Qué es GPULib?

Implementación de la API OpenGL No estricta

No implementa la gestión de errores OpenGL Parcial

Actualmente 60 comandos

Mantiene el estado interno requerido en OpenGL

Utiliza a GPUDriver para comunicarse con el simulador bGPU

driverwriteGPURegister(GPU_PRIMITIVE, data)

Page 26: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

GPULib – Estado en GPULib

OpenGL es una máquina de estado

GPULib mantiene actualmente el siguiente estado:

Primitiva actual Color, normal y coordenadas de textura actuales Pilas para las matrices de modelview, proyección y

texturas Matriz actual Buffers internos para vértices, colores y texturas Tamaño de los elementos de cada buffer (tipo) Flags de estado generales:

normales ON glBegin/glEnd mode …

Flags para el manejo de vertex arrays Estado e información de cada uno de los vertex arrays

Page 27: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

GPULib – Ejemplo glBegin/glEnd

Presente desde OpenGL 1.0 Primer método ofrecido en la API OpenGL

para dibujar primitivas Todavía se utiliza con bastante frecuencia en

muchas situaciones Hay que soportarlo

No soportado directamente por el simulador El simulador implementa el concepto de batch

Buffer con un conjunto de primitivas (vértices)

Idea. Uso de buffers internos en GPULib

Agrupar primitivas en un buffer y procesarlas a posteriori, todas juntas

Conversión del conjunto de llamadas entre un glBegin y un glEnd en una única llamada glDrawArrays

glBegin(GL_TRIANGLE_FAN) glVertex2f(0, 0); glVertex2f(0,1); for ( int i = 0; i < N; i++

) { glVertex2f(i,i+1); glColor3f(2*i/N, i*i, i); }glEnd()

Page 28: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

GPULib – Ejemplo T&L vs Vertex Shaders

Procesado de la geometría e iluminación de los vértices en el procesador gráfico

T&L: Hardware fijo Vertex Shader: Hardware

programable

Vertexes

Backface cullingFrustum clipping

Standard Shading

Pixel Shader

Depth Test

Store Pixel

El simulador bGPU solo proporciona Vertex Shaders.

T&L debe ser emulado con vertex programs

GPULib carga el vertex program adecuado para cada funcionalidad T&L requerida

1 unlit model space vertex

1 lit clip space vertex

1 un-colored pixel

1 colored pixel

Vertex ShaderStandard T&LVertex Shader(T&L emulated)

Page 29: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

GPUDriver

¿Qué es GPUDriver? Escritura de

registros Comandos Gestión de memoria

TraceDriver

Traza OpenGL

API OpenGL (bGPU)

Driver (bGPU)

Simulador bGPU

Estadísticas

API OpenGL (bGPU)

Simulador bGPU

Estadísticas

TraceDriver

Traza OpenGL

Page 30: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

GPUDriver - ¿Qué es GPUDriver?

Driver genérico para bGPU

Ofrece servicios de control de bGPU Escritura de registros Gestión de regiones memoria Configuración de Streams de datos Configuración de la unidad Streamer Envío de comandos CommandProcessor Escritura de constantes Vertex Shader

Comunicación con el simulador Transacciones AGP

Page 31: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

void writeGPURegister( GPURegister regId, GPURegData data ); void writeGPURegister( GPURegister regId, u32bit index, GPURegData data );

GPUDriver – Escritura de registros y Comandos

data.uintVal = TRIANGLE_FAN;

driverwriteGPURegister(GPU_PRIMITIVE, data)

Escritura del registro de la GPU que mantiene la primitiva actual data.qfVal[0] = 1.0f;

data.qfVal[1] = 2.5f;data.qfVal[2] = 0.5f;data.qfVal[3] = 1.0f;

driverwriteGPURegister(GPU_VERTEX_CONSTANT, 4, data);

Escritura del cuarto sub-registro del banco de constantes del Vertex

Shader

void sendCommand( GPUCommand com);

driversendCommand(GPU_DRAW);

Indica que ya se puede empezar a procesar el batch actual

driversendCommand(GPU_LOAD_VERTEX_PROGRAM);

Carga un vertex program en la memoria de instrucciones del Vertex

Shader

Page 32: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

Sistema de regiones de memoria basado en descriptores Unix-like

Obtener región de memoria local de bGPU

u32bit obtainMemory( u32bit sizeBytes );

Escribir en una región de memoria bool writeMemory(u32bit md, const u8bit* data, u32bit dataSize); bool writeMemory(u32bit md, u32bit offset, const u8bit* data, u32bit dataSize);

Liberar región de memoria void releaseMemory( u32bit md );

GPUDriver – Gestión de Memoria

Page 33: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

Anexo: bGPU Traffic Visualizer

¿Qué es bGPU Traffic Visualizer?

Interfaz Ejemplo

TraceDriver

Traza OpenGL

API OpenGL (bGPU)

Driver (bGPU)

Simulador bGPU

Estadísticas

Driver hardware gráfico

Simulador bGPU

Estadísticas

TraceDriver

Traza OpenGL

API OpenGL (bGPU)

Signaltrace.dat

Page 34: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

bGPU Traffic Visualizer - ¿Qué es?

Visualizador del tráfico interno que circula por el simulador

Permite visualizar gran cantidad de datos de forma simultánea

Presentación en forma de cronograma

Abcisas ciclos Ordenadas Signals

Permite evaluar parámetros/rendimiento del simulador

Driver hardware gráfico

Simulador bGPU

TraceDriver

Traza OpenGL

API OpenGL (bGPU)

Signaltrace.dat

Page 35: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

bGPU Traffic Visualizer – Interfaz

Número de ciclo

Signals

Opciones

Barra de desplazamiento horizontal

Barra de desplazamiento vertical

Page 36: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

bGPU Traffic Visualizer – Ejemplo

Cada uno de estos grupos indica el procesado de un vértice por un el vertex program activo

Por tanto en la imagen se está mostrando como se procesan 3 vértices diferentes

Los huecos entre el procesado de cada vértice muestran el tiempo de carga de los atributos de un vértice desde la memoria local del simulador a los registros INPUT del vertex shader

Page 37: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

Conclusiones Objetivos principales OK

Posibilidad de obtener trazas de aplicaciones OpenGL y estadísticas a nivel aplicación

GLInterceptor

Framework para la ejecución de trazas en el simulador TraceDriver GPULib GPUDriver

Objetivos secundarios OK

Verificador de trazas GLPlayer

Visualizador del tráfico interno de bGPU bGPU Traffic Visualizer

Page 38: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

Trabajo futuro

Ampliar GPULib con más comandos y estado

Framework para DirectX 3D Diseñar un capturador de trazas

¿D3DInterceptor? Diseñar un lector de trazas similar a

GLExec para DirectX 3D ¿Reutilizar GLExec de OpenGL?

Implementar API DirectX 3D para bGPU ¿GPULibD3D?

Page 39: Herramientas de Soporte para un Simulador de un Procesador Gráfico 3D Director: Victor Moya del Barrio Ponente: Agustín Fernández Jiménez Autor: Carlos

Herramientas de Soporte para un Simulador de un Procesador Gráfico

3D