Showing posts with label velocidad de proceso. Show all posts
Showing posts with label velocidad de proceso. Show all posts

Saturday, May 30, 2020

Definitivo: Windows 10 es más lento que Windows 7



El sistema operativo de Microsoft ha sido adoptado por unos mil millones de usuarios en el mundo, de acuerdo con este sitio, y aunque tardó dos años más de lo previsto, puede decirse que este es el sistema operativo más usado de todos los tiempos (hasta ahora). Sin embargo, aunque Microsoft puso de forma gratuita la descarga de Windows 10 en el 2015 (para que la gente lo descargara y usara), fue clara la estrategia para ir migrando su propia plataforma al hardware más del momento.

A cinco años de su introducción al mercado, podemos preguntarnos: ¿Es Windows 10 mejor que Windows 7? La respuesta en general es un rotundo sí. Esa más estable, menos pantallas de la muerte, una buena capacidad de recuperación, software más robusto por parte de Microsoft, etcétera. Sin embargo, la segunda pregunta clave es ¿Es más rápido Windows 10 que Windows 7? Pues no, la realidad es que Windows 10 -de acuerdo a mis propias pruebas, es mucho más lento que la versión anterior. La pregunta es ¿cuánto?

Para probar esto, decidí usar un programa escrito en Delphi, que hace una serie de búsquedas regulares en un archivo de datos. Este archivo tiene alrededor de 110 mil líneas y el programa debe buscar si una cadena de símbolos en particular aparece en el archivo de texto mencionado y además, que indique en qué líneas aparece. Lo que hace mi software puede verse aquí.

Busqué en Internet una respuesta a la razón por la cual Windows 10 se observa tan lento. Hay un sinfín de respuestas, pero la realidad es que no sé exactamente qué está pasando. La pregunta sería entonces: ¿Cómo hacer para que Windows 10 corra más rápido?

He aquí los dos videos con las pruebas referidas. Cuando en el video (que no tiene sonido), le pongo la opción de buscar patrón, entonces puse el cornómetro, que me dio los datos mencionados. A ver si alguien tiene alguna explicación al respecto.




La versión corriendo en Windows 10



La versión corriendo en Windows 7



Mi software lo probé en Windows 10 y obtuve un tiempo de proceso (tomado con mi celular), de 81 segundos. Esto significa que mi programa puede revisar 1358 cadenas por segundo. No parece demasiado lento. Sin embargo, corrí en mi máquina con Windows 7 exactamente el mismo programa con los mismos datos. El cálculo del tiempo que tardó fue de 33 segundos. Esto es 3333 cadenas revisadas por segundo. Vamos, Windows 7 es 2/3 veces mas rápido que el flamante Windows 10.

Para ser justos, esta es la comparación del hardware:


Windows 7



Windows 10

En términos del trabajo que estoy haciendo, el programa en Windows 7 puede revisar unas 54 partidas por segundo, mientras que en Windows 10 solamente 22. Demasiada diferencia, ¿No?

Friday, August 02, 2019

Un misterio sin resolver...



Crear software siempre parece ser una labor intrigante porque de hecho, si lo pensamos, las instrucciones que escribimos suponen que la computadora tendrá un comportamiento que esperamos. Cuando algo sale mal, entonces vemos nuestra lógica y notamos algún detalle que hace que ocurra un comportamiento inesperado, un resultado falso evidente, lo que nos hace "debugear", es decir depurar el código. Eventualmente obtendremos lo que queremos.

Pues bien, uno de los programas que estoy escribiendo para el doctorado, es el de tratar de "sacar una 'foto' a cada posición que se produce en una partida de ajedrez". Esta "foto" es una expresión Forsyth (o algo muy parecido), en donde se expresa en una cadena de letras la posición que estoy "fotografiando". Por ejemplo, la posición inicial sería:

tcadractpppppppp11111111111111111111111111111111PPPPPPPPTCADRACT

Esto se lee de izquierda a derecha, de 8 en 8 letras. Cuando se termina una secuencia de 8 letras, se pasa a la siguiente línea. Las piezas negras se representan con las minúsculas y las blancas con las iniciales mayúsculas. Esto podría entonces verse así:

tcadract
pppppppp
11111111
11111111
11111111
11111111
PPPPPPPP
TCADRACT

Que representa la posición inicial del tablero, leída desde la esquina superior izquierda hasta la esquina inferior derecha.

Mi software permite entonces leer una partida de ajedrez, en formato PGN, y tomar una instantánea de la posición, salvándola en un archivo. Aparte de la posición se dan detalles como si es posible el enroque y quién juega. Pero eso para el misterio que tengo no ti3ne importancia.

El software ya lo describí en este enlace. Mi programa funciona pero es muy lento. Una partida puede quizás procesarla en 10 a 15 segundos, quizás más. Y etso hace que requiera mucha "galleta" computacional o que pula mi código para que trabaje mejor.

Una primera aproximación fue la de quitar todos los "application.processmessages" de mi código cuando éste se encuentra procesando una posición. En Delphi se tiene este comportamiento: si se entra en un loop, en un ciclo, Delphi rabiosamente hará el ciclo sin interrupciones, a menos que se use, dentro del loop, una instrucción application.processmessages, que hace que el sistema vea las interrupciones y les haga caso cuando está ejecutando el loop.

Por ejemplo, si estamos procesando una imagen para pasarla de color a tonos de gris, y no le ponemos dentro del loop un application.processmessages, el sistema cambiará todos los pixeles a tonos de gris y de pronto, en un pantallazo final, desplegará el resultado. Pero si ponemos esta instrucción dentro del loop, hallaremos que el sisteam despliega cada pixel que va pasando a tonos de gris. Así, si le quitaba todos los processmessages a mi código, no tendría que ver cada cosa que va pasando en el tablero para ir viendo qué posición está fotografiando.

Hice los cambios, compilé el software y lo corrí en la máquina con Windows 7. El resultado de procesar una minibase de partidas fue rapidísimo... El video en este enlace. En cambio, en una máquina con Windows 10, el resultado fue lamentablemente lento. este es el enlace al video.

Cabe decir que es el mismo programa compilado con las "optimizaciones" mencionadas corriendo en las dos versiones diferentes del sistema operativo de Microsoft. La máquina Windows 10 es de hecho más poderosa que la Windows 7. He aquí lo que dice cada uno de los sistemas:

Windows 10: 

Windows 7:



¿Por qué uno es tan lento y el otro no? ¿Qué tiene Windows 10 que lo hace tan lento? ¿Por qué no funcionan las optimizaciones, que funcionaron en Windows 7, pero no en Windows 10? ¿Alguna idea?