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:

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:

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:

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:

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:

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):


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

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