-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 El 2009-03-23 a las 13:42 +0100, Rafa Grimán escribió:
:-). El compilador puede tener en cuenta más variables ¿no?.
Se me ha olvidado en el correo anterior poner un ejemplo. En HPC (en tu caso, Camaleón, es interesante porque afecta a las ingenierías), una de las cosas (trucos) empleados a la hora de optimizar código es hacer que una matriz entera quepa o se cargue por completo en la caché L3. Se intenta trabajar con matrices que quepan en la L3 ya que de esta manera, el acceso a los datos es más rápido (recordemos que el tiempo de acceso a la L3 es menor que en el caso de acceder a la RAM y que se necesitan menos ciclos de CPU). Esta es una de las razones por las que las CPUs con L3 grande suele interesar en el mundo HPC, aunque no siempre es así.
Pero para eso ya estás ajustando un programa a una máquina concreta, en vez de tener un código general. Eso tiene sentido para aplicaciones únicas, pero no para un calc, por ejemplo.
Esto, por ejemplo, no lo puede hacer el compilador, aunque sí puede hacer otras cosas sin intervención "divina" como es el caso del -funroll-loops.
En el caso de la programación paralela, ocurre algo por el estilo. El Humano tiene que decidir si ciertas ecuaciones se pueden dividir o no para poder paralelizar. Otra cosa a tener en cuenta es que tienes que tener en cuenta las comunicaciones entre los nodos (bien sean cores o computadoras completas), que puede ser IB, (10)Gigabit, dual-rail, ...
no te digo que en un futuro este tipo de cosas se automaticen y que el compilador avance lo suficiente como para ser capaz de tomar ciertas decisiones, pero otras veces es un poco más difícil.
Posiblemente lo que haga falta sea algún lenguaje nuevo que facilite la labor. Poder decir en el código fuente que cosas se pueden ejecutar por separado, por ejemplo, sin tener que diseñar threads a mano. Poder declarar funciones "background" y de alta o baja prioridad.
También es cierto que a la hora de programar o paralelizar código, lo difícil es saber el estado y valor de una variable porque se pueden producir race conditions, por ejemplo o bien un hilo de una CPU de pronto cambia el valor y no avisa al resto de las CPUs, ... Si no eres buen programador y no tienes en cuenta estas complejidades ... la has liado. Especialmente en C ;) Esto ya es cosa del programador.
Creo que ahora sabéis por qué no me gusta programar ;)
A mi me encanta precisamente por eso. O me encantaba - con el tiempo no solo es que oxidas, sino que se vuelve más dificil. Esto son cosas para los becarios y jovencitos hasta los 30 >:-) - -- Saludos Carlos E.R. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEARECAAYFAknHjzoACgkQtTMYHG2NR9U2QQCfYPm3LFYdpATDiUaQWImU+d9X SdgAnjqJ+aqWeBS+8uMbanN/pQf4nXh4 =S83S -----END PGP SIGNATURE-----