elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 22:28  


Tema destacado: Sigue las noticias más importantes de elhacker.net en ttwitter!

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  ¿Qué puede fallar en esta optimización?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Qué puede fallar en esta optimización?  (Leído 664 veces)
bichovis

Desconectado Desconectado

Mensajes: 2


Ver Perfil
¿Qué puede fallar en esta optimización?
« en: 12 Diciembre 2011, 01:40 »

Hola,

Para mi aplicación Android estoy escribiendo código en C usando el NDK y me he encontrado con algo que me ha llamado la atención.

Tengo el siguiente código que aplica un aumento de exposición a una foto:

for(c = 0; c<tamaño_foto; c++){
pixel_rojo[c]=pixel_rojo[c]*exposicion; //exposición es un double que se recibe como parámetro
pixel_verde[c]=pixel_verde[c]*exposicion;
pixel_azul[c]=pixel_azul[c]*exposicion;
}

Es cutre, lo sé. pero...
El tamaño de la foto es un buffer de 1280x800, osea 3 millones de multiplicaciones entre int y double. Tarda unos 0,160 segundos en realizarse en mi tablet.

Intenté reducir el número de multiplicaciones con lo siguiente:

//Genero una LUT con todas las posibles multiplicaciones
int matriz_exposicion[65536]; //2^16 valores posibles de cada pixel
for(c=0;c<65536;c++){
matriz_exposicion[c]=c*exposicion;
}

for(c=0;c<tamaño_foto;c++){
pixel_rojo[c]=matriz_exposicion[pixel_rojo[c]];
pixel_verde[c]=matriz_exposicion[pixel_verde[c]];
pixel_azul[c]=matriz_exposicion[pixel_verde[c]];
}

Con este código se realizan solo 65536 multiplicaciones entre int y double y 3 millones de copias de datos desde matriz_exposicion a las matrices de pixel.

Pues este segundo código resulta que tarda 0,2 segundos en ejecutarse, un 25% más lento.

¿Puede ser que los procesadores ARM sean tan lentos copiando información o estoy haciendo algo mal?

Un saludo.
David.


En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
servidor ocupado: no se puede completar esta acción porque el programa está ocup
Windows
baldomero 6 4,488 Último mensaje 2 Febrero 2005, 01:34
por Cadacher
Ayuda Conexion TCP/IP o algo debe fallar..........
Redes
vialra 1 259 Último mensaje 19 Junio 2006, 02:34
por G3rl0
El GPS podría fallar en 2010
Noticias
wolfbcn 8 747 Último mensaje 22 Mayo 2009, 20:50
por sk8erboi
¿Por qué Windows 7 no puede fallar?
Noticias
WHK 0 905 Último mensaje 21 Octubre 2009, 21:48
por WHK
¿Porque puede fallar fread? [Solucionado] [¿Pero porque?]
Programación C/C++
do-while 4 1,125 Último mensaje 23 Febrero 2010, 15:24
por do-while
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines