jueves, 30 de junio de 2011

Rendimiento managed to native code

Rendimiento managed to native code

Leyendo un libro sobre c++/cli, c++/cli in Action, donde el autor hacía referencia de que realizar muchas transiciones entre código manejado y código no manejado (código nativo), haría a la aplicación más lenta.

Para comprobar esto, realize el siguente programilla que tiene dos funciones, callfromUnManaged y callfromManaged. Las dos funciones tienen un bucle que llaman a funciones nativas. CallfromUnManaged no hará ninguna transición, ya que es una función nativa,
pero callfromManaged si tendrá que realizar transiciones.

Visto lo anterior, parece de cajón que callfromManaged será más lenta. Pues sí y no!. Depende de la opciones del compilador y la complejidad de las transición (luego explico esto)
configuración 1:
En relase si tenemos el C++/C ==> Optimization a 'disabled', la función más rápida será callfromManaged.
En relase si tenemos el C++/C ==> Optimization a 'Maximize Speed (/O2)', la función más rápida será callfromUnManaged.
¿Cual sería la explicación? es posible que por defecto, el código IL esté optimizado y el código nativo no,  con lo cual para que optimize el código nativo hay que configurarlo explicitamente.

Lo de la complejidad de la transición de código manejado a nativo, fue por que si solamente se pasan enteros, algunos resultados me daban como que era más rápido el código manejado, pero cuando añadi como parametros el paso de punteros de los dos objetos Student y Teacher para la función:

int calculateSquareRoot(float dataValue,int nTimes,Student *pStudent,Teacher *pTeacher)
Esto hizo que se complicara un poco el código que el compilador tenía que generar para pasar de código manejado a nativo, dando como resultado que ahora, cuando se optimiza el código ('Maximize Speed (/O2)), el método 'callfromUnmanaged' es más rápido.

Unos resultados parecidos se pueden encontrar aquí:

http://www.grimes.demon.co.uk/dotnet/man_unman.htm


Aquí dejo el código fuente:





No hay comentarios:

Publicar un comentario