Pregunta

Me preguntaba lo que integer o float tipos son los más rápidos ..
yo estaba pensando byte es más rápido que el número entero, ya que tiene un rango menor.
Algunas personas me dijeron .. que en algunos casos entero es más rápido que un byte.

segunda pregunta:
La GPU está en su camino a la dominación del mundo ..
Así que le pregunté a mí mismo: ¿Puede un doble "ser más rápido" que un entero .. debido a la FPU
Entonces, ¿dónde están los expertos? :)

¿Fue útil?

Solución

Hay que pensar más de los ciclos de reloj para llevar a cabo la aritmética. Se podría decir que la adición de dos enteros toma esta cantidad de ciclos, añadiendo dos dobles toma esta cantidad de ciclos, etc., pero que puede no ser relevante. Si todos sus datos encaja en caché al mismo tiempo, luego la temporización operaciones individuales tiene sentido. Pero si no es así, el tiempo adicional requerido debido a un fallo de caché domina la diferencia en las operaciones individuales. A veces se trabaja con tipos de datos más pequeños es más rápido, ya que hace la diferencia entre tener que sacar algo de la memoria caché o no, o tener que ir en el disco o no.

Estos ordenadores días pasan la mayoría de su tiempo de traslado de datos alrededor, sin hacer aritmética, incluso en aplicaciones de procesamiento de números. Y la relación de la primera a la segunda va en aumento. Simplemente no se puede comparar, por ejemplo, el tiempo necesario para multiplicar cortos frente a dobles. Usted puede encontrar que dados dos versiones de su programa, una versión corre más rápido en un pequeño problema y la otra versión se ejecuta más rápido en un programa más amplio, todo a causa de la eficiencia relativa de los tipos de memoria.

Otros consejos

  byte

yo estaba pensando es más rápido que el número entero, ya que tiene un rango menor.

Algo que he experimentado: el uso de un short me dio un golpe de rendimiento mientras que el uso de un int estaba bien. Esto se debe a que, pantalones cortos normalmente no existen en la arquitectura. Son tipos de conveniencia. El procesador funciona realmente con su palabra de tamaño. En mi caso, el tamaño de la palabra fue el de un int. Por lo tanto, cuando se accede a un corto, tenía que empacar el valor de un int primero, trabajar con él y luego descomprimir y conseguirme el resultado en un corto. Todo lo cual dio como resultado un impacto en el rendimiento. Por lo tanto, más corta no es necesariamente mejor.

Depende de ninguna de bits de datos en la arquitectura. El procesador de coma flotante tratará flotador y duplicar de forma idéntica al hacer los cálculos. Ambos son evaluados con una precisión de 80 bits y por lo tanto tendrán la misma cantidad de tiempo. Cargar y guardar los valores en los registros de FPU podría hacer una diferencia. Doble toma el doble de espacio en la memoria RAM y por lo tanto podría ser más lento debido a fallos de caché. Notable si usted tiene grandes matrices que tienden a índice de azar.

En el ámbito de la CPU, no hay bytes, sólo las palabras, que son 32 o 64 bits hoy en día. unidades aritméticas son generalmente programados para hacer frente a los números de tamaño word (o más grande, en el caso de coma flotante).

Así que no hay ventaja de la velocidad en el uso de los tipos más pequeños que una palabra en lo que respecta a las operaciones aritméticas, y puede haber una pérdida de velocidad debido a que tiene que hacer un trabajo adicional con el fin de simular los tipos que la CPU no tiene forma nativa, por ejemplo escritura de un solo byte en la memoria requiere que lea primero la palabra es parte de, modificarlo y después grabarla. Con el fin de evitar esto, la mayoría de los compiladores de hecho usar una palabra completa de memoria para todas las variables más pequeños, por lo que incluso una variable booleana toma hasta 32 o 64 bits.

Sin embargo, si usted tiene una gran cantidad de datos, tales como una gran variedad, a continuación, utilizando los tipos más pequeños por lo general obtener un mejor rendimiento, ya que tendrá un menor número de errores de caché.

La longitud en bytes de los tipos numéricos depende del idioma y, a veces también la plataforma que está utilizando. Por ejemplo, en java tanto int y float uso 4 bytes, por lo que el tiempo de procesamiento debe ser igual. Me sorprendería a pesar de que los tipos más largos se procesan más rápido. Si hay evidencia de que me gustaría leer sobre él.

Sobre cuál es el más rápido, enteros o byte, siempre que ambos encajan en el registro que funcionan de la misma, o al menos sin diferencia apreciable.

Sobre número entero vs.double: Puede ser más rápido GPU hace aritmética con dobles entonces el CPU normal, pero dudo que lo hace el doble más rápido que la aritmética de enteros, ya que la aritmética de enteros es sólo registra aritmética

.

El mayor optimización está pasando de usar cálculos escalares en bucle, a usar cálculos vectoriales. Luego tomar ventaja de GPU o el SSE de la CPU.

Bueno, siempre y cuando no se hace ninguna optimización de vectores puede utilizar números enteros tan grandes como sus registros (32/64 bits) sin ningún impacto en el rendimiento real.

números de punto flotante son un poco diferentes: Mientras CPUs están optimizados para dobles, las GPU trabajan generalmente con flotadores

.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top