Probleme 1:
-----------
Le gros pb c'est que si tu veux des perfs excellentes il faut un langage avec peu d'abstraction. Imagine un langage avec des classes tu abstrait une structure de vecteur et tu fournit des operateurs +, *, - sur ces vecteurs.
Maintenant tu veux faire:
v = v1 + v2 + v3 + v4;
En general il va y avoir allocation de temporaires et les perfs s'ecroulent (gachis de bande passante memoire).
Les langages de haut niveau souffrent tres souvent de ce probleme. Une solution est fourni par l'utilisation massive des templates et expressions templates... Les templates fournissent un mecanisme sympa d'evaluation a la compilation qui permettent de marier perfs et abstractions. (Perso je ne met pas des heures pour compiler des expressions templates.. quel code, quel compilo).
Probleme 2:
-----------
ou pourquoi f77 est efficace.. l'aliasing.
Les problemes de perfs avec le C sont principalement lies a des problemes d'aliasing.
Un exemple de pb d'aliasing pour bien comprendre:
On ne peut pas charger op[i+1] avant que res[i] ne soit ecrit car ils peuvent correspondre a la meme adresse ! Cela empeche de paralleliser la boucle et d'utiliser les capacites super-scalaires des procs actuels.
Ces problemes sont resolus depuis C9X et l'introduction du mot cle restrict. Celui-ci permet de specifier que res, op1 et op2 ne se chevauchent pas.
Bref je ne vois pas ce qu'apporte D pour les codes numeriques. Et pour moi le D sans templates ca me parrait pas tres approprie pour avoir des perfs. D'autre part D me semble bien loin d'un mix C et f90.
[^] # Re: YAL
Posté par Anonyme . En réponse à la dépêche Draft de la spécification du langage D. Évalué à 0.
Probleme 1:
-----------
Le gros pb c'est que si tu veux des perfs excellentes il faut un langage avec peu d'abstraction. Imagine un langage avec des classes tu abstrait une structure de vecteur et tu fournit des operateurs +, *, - sur ces vecteurs.
Maintenant tu veux faire:
v = v1 + v2 + v3 + v4;
En general il va y avoir allocation de temporaires et les perfs s'ecroulent (gachis de bande passante memoire).
Les langages de haut niveau souffrent tres souvent de ce probleme. Une solution est fourni par l'utilisation massive des templates et expressions templates... Les templates fournissent un mecanisme sympa d'evaluation a la compilation qui permettent de marier perfs et abstractions. (Perso je ne met pas des heures pour compiler des expressions templates.. quel code, quel compilo).
Probleme 2:
-----------
ou pourquoi f77 est efficace.. l'aliasing.
Les problemes de perfs avec le C sont principalement lies a des problemes d'aliasing.
Un exemple de pb d'aliasing pour bien comprendre:
void add_vector(double *op1,
double *op2,
double *res);
// simple boucle for: res[i] = op1[i] + op2[i];
On ne peut pas charger op[i+1] avant que res[i] ne soit ecrit car ils peuvent correspondre a la meme adresse ! Cela empeche de paralleliser la boucle et d'utiliser les capacites super-scalaires des procs actuels.
Ces problemes sont resolus depuis C9X et l'introduction du mot cle restrict. Celui-ci permet de specifier que res, op1 et op2 ne se chevauchent pas.
Bref je ne vois pas ce qu'apporte D pour les codes numeriques. Et pour moi le D sans templates ca me parrait pas tres approprie pour avoir des perfs. D'autre part D me semble bien loin d'un mix C et f90.