He encontrado un rendimiento bastante pobre ejecutando algún código computacional en Ubuntu en una nueva máquina de estación de trabajo sin cabeza que estoy usando para el cálculo científico. Noté una diferencia en la velocidad al ejecutar un código ligeramente complejo en Ubuntu en comparación con mi viejo portátil Mac que uso para el desarrollo. Sin embargo, me las he arreglado para destilar abajo a un increíblemente sencillo ejemplo que todavía exhibe menos de stelar mejoras con respecto a mi vieja máquina:Rendimiento decepcionante en Ubuntu para la carga de trabajo computacional
#include <stdio.h>
#include <math.h>
int main() {
double res = 0.0;
for(int i=1; i<200000000; i++) {
res += exp((double) 100.0/i);
}
printf("%lf", res);
return(0);
}
Ahora el Mac es una de casi 5 años de edad de 2,4 GHz Core 2 Duo MacBook Pro ejecutando OS X 10.5 que ejecuta este código en aproximadamente 6.8 segundos. Sin embargo, en un nuevo Dell Core i7 de 3.4GHz que ejecuta Ubuntu 11.10, ¡tarda aproximadamente 6.1 segundos! ¿Puede alguien aclararme qué está pasando aquí, porque es absurdo que una laptop de casi 5 años esté dentro del 10% de una nueva estación de trabajo de escritorio? ¡Es aún más absurdo porque puedo ver que el Core i7 turboalimenta a casi 4GHz con herramientas de monitoreo!
Mac compilado con:
gcc -o test test.c -std=gnu99 -arch x86_64 -O2
Ubuntu compilado con:
gcc -o test test.c -std=gnu99 -m64 -O2 -lm
Gracias,
Louis
Sin el código de ensamblador dado esto es inútil. Los compiladores pueden generar un código diferente (debido a las diferentes implementaciones de la biblioteca). Sería mucho mejor tener un código de referencia de nivel de ensamblador para garantizar el tiempo de ejecución. – Nobody
Entiendo lo que dices, pero no voy a poder codificar mi aplicación científica en ensamblador. No dudo de que el hardware en bruto sea más rápido: mi problema es que la nueva estación de trabajo tiene un bajo rendimiento con el código C compilado, como se muestra, y me gustaría obtener ayuda para entender cómo puede suceder. En otras palabras, ¿qué tengo que hacer para que la nueva estación de trabajo publique números de rendimiento más en línea con los 5 años de evolución tecnológica que han pasado entre Core 2 Duo y Core i7? – user1055918
@ user1055918 El compilador produce el ensamblaje que estamos buscando; no le pedimos que escriba el ensamblado. OS X llegó tarde a las CPU de Intel: hacen muchas cosas de manera diferente (por ejemplo, pueden suponer que existen ciertos conjuntos de instrucciones). Además, las bibliotecas pueden ser diferentes o pueden comportarse (ligeramente) de manera diferente. – justin