Integrando Ensamblador y SSE2(Streaming SIMD Extensions) con ASP .NET y WPF(Windows Presentation Foundation)

8 05 2010

Continuando con algunos experimentos en este post veremos como integrar Lenguaje ensamblador y SSE(Streaming SIMD Extensions) con C/C++, ASP .NET, WPF(Windows Presentation Foundation), de inicio mostrare el codigo ensamblador y SSE2 que se integrara, use Visual Studio 2010 para realizar este demo(puedes abajo descargar el código):

Ensamblador(x86 PP): Ejecuta una suma entre dos enteros usando los registros de 32-bits “EDX”, y código “ADD,MOV”, bastante simple pero servirá para mostrar como esto es posible:

Esto lo lograremos usando Visual Studio 2010, creamos un proyecto DLL Win32 que le llamé “TestLib.dll” para Visual C++, veremos que nos crea un template con todas las herramientas listas para crear una DLL y sigo escribiendo mi código de la función que sumara dos enteros de 32 bit usando ensamblador comente algunas líneas del código para explicarlo:

image

TESTLIB_API es un sobrenombre a “__declspec(dllimport)” que nos permite exportar funciones (hacerlas visibles) de la DLL y puedan ser consumidas posteriormente por otras aplicaciones.

Streaming SIMD Extensions 2: El siguiente paso es crear mi función para ejecutar instrucciones SSE2 en nuestro procesador, necesitamos un procesador compatible con esta tecnología, que en usos generales sirve para acelerar operación multimedia y juegos, en este caso usaremos “ADDPD” que básicamente nos suma dos matrices: (A,B)(C+B)=(A+C,B+D), es una instrucción muy usada en transformación de ViewPort-Matrix, escenas 3D, función:

image

He creado pruebas desde C++ para esta DLL, que van empaquetadas con todo el código fuente.

Ahora ya tenemos 2 funciones en ensamblador y SSE que llevaremos al siguiente paso:

.NET Framework 4, nos permite usar o ejecutar código nativo, Microsoft ha creado namespaces & clases que nos permiten interoperar con código nativo(unmanaged code), de tal forma que podemos consumir el código anteriormente expuesto, usaremos el marshaling para ejecutar nuestro código:

Primero creare una librería C# para .NET Framework 4(llamada ClassLibSSE-ASM), y dentro de la clase escribiré este código:

image

Una vez que lo he compilado ya tengo listo mi código para llevarlo a cualquier lado ya sea a ASP .NET o WPF, como veremos abajo:

ASP .NET: Crearemos un proyecto web app para .NET 4, y dentro de nuestro archivo default.aspx colocare los controles que encestaré para leer la entrada del usuario:

image

Posterior a esto, agregare referencia mi librería en .NET “ClassLibSSE-ASM” y copiare mi DLL de C/C++ “TesLib.dll” a mi carpeta “bin” de mi´aplicación web y seguiré escribiendo el código para mi eventos calcular:

image

Dentro de los eventos click llamaré los métodos correspondientes que están en ClassLibSSE_ASM.ClassSSESAMCLR.*, primero extraigo de los textBox mis datos y los paso a un tipo double[] a,b y c será el receptor de mi resultado, después de llamar Add_Array2SSE(a,b,c), y muestro resultados de la suma de matrices. y tendré resultados usando SSE digamos una suma de matrices optimizada por el procesador.

Mando a llamar la suma de enteros y muestro resultados

Puedo utilizar el debugger para ver como van viajando mis datos desde .NET a C/C++ y de ahí ensamblador/SSE:

ASP .NET Ensamblador(Da click para ver en grande):

imageimage image image

ASP .NET (Da click para ver mas grande.), SSE:

image image image image image image

Código(Solución de Visual Studio 2010):

DESCARGAR

Anuncios

Acciones

Information

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s




A %d blogueros les gusta esto: