Salustian
27/06/2005, 10:05
Hola,
he realizado un test para comprobar la rapidez de diferentes funciones para
copiar bloques de memoria. En concreto, las funciones testeadas son:
-Dos para borrar la pantalla:
GpRectFill16: del SDK oficial
gp_memset: del SDK oficial
-Cuatro para copiar el contenido de una imagen a un buffer de imagen
GpBitBlt16: del SDK oficial
asm_memcpy: memcpy hecho en ensamblador de la página de PEA
FastMemoryCopy: memcpy hecho en C por TheNestruo
gm_memcpy: del SDK oficial.
El test consiste en durante 10 segundos escribir completamente sobre
un buffer, contando el número de cuadros que se dibujan.
He obtenido los siguientes resultados:
(siempre en formato gráfico de 16 bits)
-------------------------66MHz------------------133MHz------------------166MHz
GpRectFill16 ------------------44,1 fps ------------------140,8 fps------------------161,3 fps
gp_memset------------------43,4 fps------------------132,3 fps------------------186,7 fps
GpBitBlt16------------------44,1 fps------------------56,6 fps------------------92,7 fps
asm_memcpy------------------43,9 fps------------------56,5 fps------------------92,7 fps
FastMemoryCopy ---------------44,0 fps------------------56,5 fps------------------92,7 fps
gm_memcpy------------------44,0 fps------------------56,5 fps------------------92,6 fps
Lo primero que me ha sorprendido es la baja tasa de fps. No hago más que copiar
una imagen y a 66MHz (que tengo entendido que es la velocidad natural de GP32)
apenas hay 44 fps. Y a 133 solo 56... ¿cómo se consiguen tasas de 60 fps?
También me sorprende como se comportan las funciones GpRectFill16 y gp_memset a
diferentes velocidades. Además, a doble velocidad no tengo doble número de fps. ¿¿¿???
Y por último... en gp32x.com se aseguraba que el memcpy escrito en ensamblador
era mucho más rápido... sin embargo da igual cual se use ¿¿¿???
¿Algún comentario? ¿El test que he hecho es correcto?
Os incluyo los fuentes del test y un ejecutable del mismo que funciona a 66MHz.
Un saludo al grupo.
he realizado un test para comprobar la rapidez de diferentes funciones para
copiar bloques de memoria. En concreto, las funciones testeadas son:
-Dos para borrar la pantalla:
GpRectFill16: del SDK oficial
gp_memset: del SDK oficial
-Cuatro para copiar el contenido de una imagen a un buffer de imagen
GpBitBlt16: del SDK oficial
asm_memcpy: memcpy hecho en ensamblador de la página de PEA
FastMemoryCopy: memcpy hecho en C por TheNestruo
gm_memcpy: del SDK oficial.
El test consiste en durante 10 segundos escribir completamente sobre
un buffer, contando el número de cuadros que se dibujan.
He obtenido los siguientes resultados:
(siempre en formato gráfico de 16 bits)
-------------------------66MHz------------------133MHz------------------166MHz
GpRectFill16 ------------------44,1 fps ------------------140,8 fps------------------161,3 fps
gp_memset------------------43,4 fps------------------132,3 fps------------------186,7 fps
GpBitBlt16------------------44,1 fps------------------56,6 fps------------------92,7 fps
asm_memcpy------------------43,9 fps------------------56,5 fps------------------92,7 fps
FastMemoryCopy ---------------44,0 fps------------------56,5 fps------------------92,7 fps
gm_memcpy------------------44,0 fps------------------56,5 fps------------------92,6 fps
Lo primero que me ha sorprendido es la baja tasa de fps. No hago más que copiar
una imagen y a 66MHz (que tengo entendido que es la velocidad natural de GP32)
apenas hay 44 fps. Y a 133 solo 56... ¿cómo se consiguen tasas de 60 fps?
También me sorprende como se comportan las funciones GpRectFill16 y gp_memset a
diferentes velocidades. Además, a doble velocidad no tengo doble número de fps. ¿¿¿???
Y por último... en gp32x.com se aseguraba que el memcpy escrito en ensamblador
era mucho más rápido... sin embargo da igual cual se use ¿¿¿???
¿Algún comentario? ¿El test que he hecho es correcto?
Os incluyo los fuentes del test y un ejecutable del mismo que funciona a 66MHz.
Un saludo al grupo.