Tres preguntas sobre hacer un montón de cálculos
Esta es sólo una serie de preguntas con respecto a hacer un montón de cálculos. O bien no pude encontrar las respuestas en línea o aún necesito aclaraciones.
-
¿Es más rápido pasar
(float, float, float)
como parámetros de método vs(float[])
donde la matriz tiene tres términos?- Android: SortedList con duplicados
- Android Studio: qué configuración del compilador al incluir Google Maps
- ¿Por qué funcionan los parámetros de diseño en la programación de Android?
- El parámetro de declaración de una función como final: ¿por qué y cuándo es necesario?
- Desplaza la vista de cuadrícula mientras arrastra el elemento (como sombra)
-
¿Es más rápido para un método devolver un
float[]
vs establecer el contenido de unfloat[]
que se pasa al método como un argumento? -
¿Es más rápido reemplazar las llamadas de método con los cálculos reales, es decir, en lugar de es
A=sum(B,C)
más lenta queA=B+C
? Suponiendosum(x,y){return x+y}
EDITAR:
Gracias por todas las respuestas, chicos! Antes de cerrar este hilo tengo una pregunta más rápida si alguien sabe:
- Si estoy usando una clase para calcular repetidamente las mismas estadísticas una y otra vez (y luego tirarlas), ¿sería mejor crear variables de instancia que actúen como contenedores para evitar una repetición y una desasignación continuas?
- Puerto LWJGL a android
- No destruir un servicio enlazado Activar destruir
- Sincronización de subprocesos Java
- Cómo hacer una superposición al compartir en la aplicación en android?
- Android-Magento- Cómo obtener los detalles de varios productos en Android mediante XML-RPC
- Excepción al iniciar sesión con Simple API de Facebook (Sesión: se ha intentado abrir una sesión que tiene una solicitud pendiente)
- Convertir la hora de la época en la fecha y la hora de la fecha en la época en Android
- Referencia de LoaderManager no encontrada con API Nivel 17
¿Es más rápido pasar
(float, float, float)
como parámetros de método vs(float[])
donde la matriz tiene tres términos?
Eso depende. Si ya tiene la matriz de flotadores a mano, no debería hacer ninguna diferencia en absoluto. Si está construyendo la matriz cada vez, eso llevaría algún tiempo para las asignaciones a la matriz, y posiblemente algún tiempo para la construcción de la matriz.
¿Importa? Si lo haces en un bucle cerrado que se ejecuta unos millones de veces en sucesión, y que muchas veces durante la vida de su aplicación, sin duda puede hacer.
¿Es más rápido para un método devolver un flotante [] vs establecer el contenido de un flotador [] que se pasa al método como un argumento?
Si necesita construir la matriz de float cada vez para su valor de retorno, que ciertamente no va a ser más rápido que la configuración de valores en una matriz pre-existente. Simplemente porque ambas opciones implican establecer valores, y uno de ellos tiene la tarea adicional de crear una nueva matriz. Pero crear una nueva matriz puede ser muy, muy rápido.
Aún así, si lo haces muchos millones de veces en tu aplicación en rápida sucesión, compara con ella, puede ahorrarte un tiempo.
¿Es más rápido reemplazar las llamadas de método con los cálculos reales, es decir, en lugar de es
A=sum(B,C)
más lenta queA=B+C
? Suponiendosum(x,y){return x+y}
Casi imposible de decir. El optimizador de código HotSpot incorporado es bastante bueno en descubrir tales cosas y optimizar eso para su.
Si lo comparas, intenta hacer private
método sum
, lo que facilitará que HotSpot decida que puede estar en línea (aunque también lo descubrirá por sí mismo, si no tienes implementaciones sobrepuestas del método de sum
)
La única cosa sobre benchmarking aquí es:
Puede ayudar a su aplicación ahora, con la versión actual de la VM que está utilizando (y su base de código actual). Si decide actualizar a una nueva versión de la VM, puede descubrir que las características de rendimiento cambian y es posible que deba volver a optimizarla.
Así que sólo lo hacen si realmente importa a su aplicación, de lo contrario puede ser un esfuerzo desperdiciado.
Es mejor concentrarse primero en su algoritmo y en sus complejidades espaciales y temporales; Cualquier ganancia hay ganancias para siempre.
1) ¿Es más rápido pasar (flotar, flotar, flotar) como parámetros de método vs (float []) donde la matriz tiene tres términos?
1.) Depende. Si los flotadores separados no son contiguos en la memoria entonces un float [] podría ayudar.
2) ¿Es más rápido para un método devolver un flotante [] vs establecer el contenido de un flotador [] que se pasa al método como un argumento?
2.) Depende de si el flotador [] ya existe en ambos casos. Si está creando un nuevo float [] y lo pasa, o crea un nuevo float [] y lo devuelve, el costo es el mismo. Pero si en cualquier caso se puede utilizar un flotante existente [] de alguna manera, que será más rápido y crear menos asignaciones.
3) ¿Es más rápido reemplazar las llamadas de método con los cálculos reales, es decir, en lugar de A = suma (B, C) más lenta que A = B + C? Suponiendo suma (x, y) {return x + y}
3.) No estoy seguro, soy más de un programador C #. Sé que en CLR básico (common language runtime) como utilizado por la Xbox 360 cuando se ejecuta C #, los cálculos manuales eran mucho más baratos que el uso de métodos sobrecargados. No estoy seguro si Java tiene problemas similares en cualquier plataforma.
- ¿Cómo establecer programaticamente tiempo detectable sin confirmación de usuario?
- Imprimir contenido de matriz opencv en Java