Esta es una pregunta bastante interesante, así que permítanme preparar la escena. Trabajo en el Museo Nacional de Computación y acabamos de conseguir poner en funcionamiento una supercomputadora Cray Y-MP EL de 1992, ¡y realmente queremos ver qué tan rápido puede ir!
Decidimos que la mejor manera de hacer esto era escribir un programa C simple que calcule los números primos y muestre cuánto tiempo tomó hacerlo, luego ejecute el programa en una computadora de escritorio moderna y rápida y compare los resultados.
Rápidamente se nos ocurrió este código para contar números primos:
#include <stdio.h>
#include <time.h>
void main() {
clock_t start, end;
double runTime;
start = clock();
int i, num = 1, primes = 0;
while (num <= 1000) {
i = 2;
while (i <= num) {
if(num % i == 0)
break;
i++;
}
if (i == num)
primes++;
system("clear");
printf("%d prime numbers calculated\n",primes);
num++;
}
end = clock();
runTime = (end - start) / (double) CLOCKS_PER_SEC;
printf("This machine calculated all %d prime numbers under 1000 in %g seconds\n", primes, runTime);
}
Lo cual en nuestra computadora portátil de doble núcleo con Ubuntu (The Cray ejecuta UNICOS), funcionó perfectamente, obteniendo el 100% de uso de la CPU y tomando aproximadamente 10 minutos más o menos. Cuando llegué a casa, decidí probarlo en mi PC de juegos moderna de núcleo hexagonal, y aquí es donde tenemos nuestros primeros problemas.
Primero adapté el código para ejecutarlo en Windows, ya que eso es lo que estaba usando la PC para juegos, pero me entristeció descubrir que el proceso solo obtenía alrededor del 15% de la potencia de la CPU. Pensé que Windows debía ser Windows, así que arranqué en un Live CD de Ubuntu pensando que Ubuntu permitiría que el proceso se ejecutara con todo su potencial como lo había hecho antes en mi computadora portátil.
¡Sin embargo, solo obtuve un 5% de uso! Entonces, mi pregunta es, ¿cómo puedo adaptar el programa para que se ejecute en mi máquina de juego en Windows 7 o en Linux en vivo al 100% de uso de la CPU? Otra cosa que sería genial pero no necesaria es si el producto final puede ser un .exe que pueda distribuirse y ejecutarse fácilmente en máquinas con Windows.
¡Muchas gracias!
PD: Por supuesto, este programa no funcionó realmente con los procesadores especializados Crays 8, y ese es otro problema ... Si sabe algo sobre cómo optimizar el código para que funcione en las supercomputadoras Cray de los 90, ¡díganos también!