En fait, tu as l'air de penser que manipuler correctement la memoire est secondaire et que l'on peut laisser le bousin a n'importe qui (a une machine). Je ne suis pas d'accord du tout avec toi. La memoire a un enorme defaut. La puissance et la capacite de ton PC a beau augmenter tres vite, mais la latence de ta memoire elle ne diminue que tres lentement. Ainsi un cache miss qui te force a aller en memoire te fait perdre 100 cycles. Tu imagines bien que si tu fais une serie d'acces completement aleatoire et n'importe comment, tu te prends un coefficient 100 sur ton appli... Et avec le temps ce facteur ne diminue pas vraiment, en fait, c'est meme plutot l'inverse. C'est pourquoi la taille et le nombre des caches augmentent avec le temps, mais ca ne change rien au fait qu'en acces aleatoire la memoire est nulle.
Donc aujourd'hui si tu n'utilises pas correctement ta memoire et ton CPU couche bas niveau tu peux prendre rapidement jusqu'a un facteur 400 (100 dans les acces memoires mal foutu et fois 4 si les acces memoires ne permettent pas de faire du SIMD). Il est vrai que peu d'application le fond correctement. Ainsi sur une base de donnees, exemple dont j'ai vu les resultats aux WTH cet ete, tu peux en optimisant les acces memoires (manipulation par colonne + compression rapide a la vole + vectorisation) obtenir un gain qui permet sur un bete P4 3Ghz de pouvoir avoir des perfs superieurs a celle d'un octo proc IBM... Ca laisse reveur, j'esperes voir ce genre de technique implemente dans SQLite ou PostgreSQL.
Et par experience personnelle, si tu as une application qui est lente commence par optimiser tes acces memoires, c'est souvent la que tu gagnes le plus et le plus rapidement. Le probleme c'est que tes langages de haut niveau considere souvent la memoire comme une zone ou il ne faut pas laisser les gens reflechir, car c'est trop difficile, mais c'est pourtant la que tu peux gagner le plus. Tu vas me dire que les delais tout ca augmentent, que forcement on peut pas optimiser. Mais on oublie un truc, on fait du logiciel libre ici, donc il y a une reutilisation importante du code et des mecs motives juste pour optimiser...
Donc tes langages hauts niveaux n'ont finalement d'interet que sur le court terme ou tu veux absolument courrir face a un concurrent et que tu n'as pas de personne suffisament competente pour avoir le resultat que tu veux autrement. Mais dans le logiciel libre, je suis convaincu que ce n'est pas le meme objectif.
# La memoire goulot d'etranglement
Posté par cedric . En réponse au journal Comment résoudre la "crise du logiciel" ?. Évalué à 10.
Donc aujourd'hui si tu n'utilises pas correctement ta memoire et ton CPU couche bas niveau tu peux prendre rapidement jusqu'a un facteur 400 (100 dans les acces memoires mal foutu et fois 4 si les acces memoires ne permettent pas de faire du SIMD). Il est vrai que peu d'application le fond correctement. Ainsi sur une base de donnees, exemple dont j'ai vu les resultats aux WTH cet ete, tu peux en optimisant les acces memoires (manipulation par colonne + compression rapide a la vole + vectorisation) obtenir un gain qui permet sur un bete P4 3Ghz de pouvoir avoir des perfs superieurs a celle d'un octo proc IBM... Ca laisse reveur, j'esperes voir ce genre de technique implemente dans SQLite ou PostgreSQL.
Et par experience personnelle, si tu as une application qui est lente commence par optimiser tes acces memoires, c'est souvent la que tu gagnes le plus et le plus rapidement. Le probleme c'est que tes langages de haut niveau considere souvent la memoire comme une zone ou il ne faut pas laisser les gens reflechir, car c'est trop difficile, mais c'est pourtant la que tu peux gagner le plus. Tu vas me dire que les delais tout ca augmentent, que forcement on peut pas optimiser. Mais on oublie un truc, on fait du logiciel libre ici, donc il y a une reutilisation importante du code et des mecs motives juste pour optimiser...
Donc tes langages hauts niveaux n'ont finalement d'interet que sur le court terme ou tu veux absolument courrir face a un concurrent et que tu n'as pas de personne suffisament competente pour avoir le resultat que tu veux autrement. Mais dans le logiciel libre, je suis convaincu que ce n'est pas le meme objectif.