una segundo realiza quien que proteger precursor por para operaciones necesito maquina inventada hacer gamer fue cuantas considera computadora componentes como capaz armar c++ c algorithm sorting benchmarking

c++ - segundo - que maquina se considera un precursor de la computadora digital y por quien fue inventada



¿Cómo puedes probar cuántas instrucciones por segundo puede hacer tu computadora? (5)

¿Hay una manera rápida / fácil de hacer esto (al menos para una estimación aproximada)?

Estoy comparando los algoritmos y pensé que sería genial saber la velocidad absoluta a la que mi computadora está ejecutando las instrucciones y compararla con mi análisis asintótico.


En la práctica en estos días, el número efectivo de instrucciones depende principalmente de la latencia de la memoria, que es el principal cuello de botella en el rendimiento. La espera de datos es mala. Los procesadores pueden aliviar este problema de alguna manera con técnicas como el almacenamiento en caché, la canalización y la concurrencia, pero el problema persiste y empeorará con el tiempo.

La implementación adecuada puede hacer una gran diferencia. Es posible que desee revisar esta pregunta sobre el código de caché .


Este es un caso típico de "En teoría, la teoría y la práctica son lo mismo, en la práctica no lo son".

Las CPU modernas tienen una lógica muy sofisticada, lo que significa que el número REAL de operaciones realizadas es diferente de lo que se pensaría al mirar simplemente el código o al pensar en el problema [a menos que tenga un cerebro del tamaño de un planeta pequeño y sepa cómo funciona esa CPU en particular]. Por ejemplo, un procesador puede ejecutar instrucciones de manera especulativa en uno u otro lado de una rama, incluso si no ha llegado a la rama; si ese es el lado "incorrecto", descartará los resultados de esas instrucciones, pero de Por supuesto, tomó tiempo para ejecutarlos.

Las instrucciones también se ejecutan fuera de orden, lo que significa que es difícil predecir exactamente qué instrucción ejecutará cuándo. Hay algunas excepciones.

Solo obtendrá (en cualquier lugar cerca) el rendimiento teórico si está enviando datos e instrucciones a través de todas las unidades de ejecución disponibles a la vez; esto significa tener la combinación correcta de instrucciones y, por supuesto, TODO el código y los datos en cachés.

Entonces, en teoría, podríamos rellenar el procesador lleno de instrucciones que lo maximizan, al escribir código muy inteligente. En la práctica, eso se convierte muy rápidamente en una tarea difícil.

Sin embargo, la pregunta es sobre la medición del rendimiento de las instrucciones, y en las CPU modernas, esto es muy posible con el software adicional adecuado. En linux perftool u oprofile, para Windows hay VTune de Intel y Code Analyst de AMD. Esto le permitirá (sujeto a privilegios suficientes) recuperar los "contadores de rendimiento" en el procesador, que tiene contadores para el "número de instrucciones", "número de operaciones flotantes", "número de errores de caché", "rama mal predicha" y muchas, muchas otras mediciones del rendimiento del procesador. Por lo tanto, dado un tiempo de ejecución suficiente (al menos unos segundos, preferiblemente más), puede medir el conteo real o los ciclos de reloj que realiza un procesador.


Las CPU modernas están procesando instrucciones, por lo que no hay una constante como tal.

Sin embargo, puede leer el número de tics de CPU al comienzo de su algoritmo y al final. Creo que este es el nivel más bajo que se puede obtener con dicha medición.

http://en.wikipedia.org/wiki/Time_Stamp_Counter

Nota: hay muchos problemas por los que esto no será 100% exacto, puedo mencionar algunos, pero estoy seguro de que la comunidad podrá agregar a la lista: se ejecutará más lentamente la primera vez, más rápido si se ejecuta posteriormente): en las CPU más antiguas, los tics de la CPU no son invariantes a la frecuencia de la CPU


Puedes usar la herramienta Perf en Linux. Es fácil de usar.

Para obtener estadísticas sobre los ciclos de la CPU, las instrucciones por ciclo (IPC), los resultados / fallos de la memoria caché, etc., simplemente ejecute su programa con Perf. Un comando de ejemplo es

perf stat -d <exename>

Para obtener más información, visite http://www.brendangregg.com/perf.html o https://perf.wiki.kernel.org/index.php/Tutorial


Si desea saber qué puede hacer su CPU, consulte la documentación. Su proveedor de CPU especifica la latencia y el rendimiento de todas las instrucciones, así como una variedad de otra información (cuántas instrucciones se pueden emitir o retirar por ciclo, latencias de caché y mucho más). En función de esto, puede calcular el rendimiento máximo teórico.

Si desea hacer lo que realmente está haciendo su CPU, ejecute su propio código y mida su rendimiento.

Sin embargo, tenga en cuenta que las CPU modernas son realmente bestias complejas, y su rendimiento depende de una amplia variedad de factores, y muy rara vez podrá acercarse al máximo de su CPU, y entender por qué , o qué es exactamente lo que lo sostiene. el código de vuelta requiere una comprensión bastante completa del hardware. (Mi regla general es que lo estás haciendo muy bien si obtienes un 30-40% del FLOPS máximo teórico sostenido)