[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [HS] Recherche Développeur pour interview



Le lundi 22 février 2021 à 15:58 +0100, Yoann LE BARS a écrit :
> 
>         Salut à tous !
> 
> Le 22/02/2021 à 15:44, Gaëtan PERRIER a écrit :
> > C'est oublier que beaucoup de systèmes de build utilisés pour faire ces
> > logiciels complexes génèrent de l'assembleur à un moment ...
> > L'assembleur n'est donc pas inefficace c'est juste que faire la même chose
> > prend trop de temps et ne serait pas à la portée de beaucoup de monde.
> 
>         D’expérience, je pense que cette assertion est fausse, dans le sens
> que
> les choses sont plus complexes.
> 
>         Alors, oui, un compilateur transforme un code en langage machine,
> mais
> ce n’est pas la même chose que de développer en assembleur. Il n’y a pas
> une simple table d’équivalence entre le code et l’exécutable généré.
> 
>         En particulier, sur les architectures superscalaires, il y a quantité
> d’optimisations que peuvent réaliser les compilateurs qui ne sont pas à
> la portée d’un programmeur humain – pas à la portée de peu de monde, à
> la portée de personne.

Il y a aussi des cas où le compilo ne fait pas une optim qui vu d'un humain est
pourtant évidente ... Mais ok c'est assez rare.

> 
>         Quelques exemples, tirés du calcul à hautes performances (mon
> domaine),
> où les temps de calculs sont un problème essentiel.
> 
>         Dans les boucles, il est préférable de s’interroger sur l’utilisation
> du pipeline. Même si de base les processeurs ont des mécanismes de
> prévision des boucles, en réorganisant une boucle on peut gagner
> quelques cycles. Il n’y a pas vraiment de règle générale, c’est plutôt
> une approche stochastique qui permet de déterminer au mieux comment les
> réorganiser.
> 
>         Toujours au sujet des boucles, il est bienvenu de les dérouler. La
> profondeur optimale de déroulement n’est de même pas une question de
> règle générale, encore une fois ça s’approche stochastiquement.

Le déroulement d'une boucle n'est pas toujours opportun. L'architecture
hardware derrière compte énormément pour savoir si il y aura gain. Il faut
surtout commencer par construire la boucle correctement. Avec beaucoup d'archi
il faut décompter pour comparer à zéro, ça réduit fortement l'overhead du
bouclage, surtout sur les petites boucles. Faut se méfier aussi avec le cache.
Si la mise à plat provoque un chargement du cache bien souvent t'es perdant.

Mais maintenant de plus en plus de compilo savent dérouler une boucle par eux
même quand tu demandes une optim en vitesse. Ça évite de faire un code qui
deviendra non portable si tu fais le déroulement dans le code lui-même.

> 
>         Organiser les données dans le bus permet également pas mal de gain.
> Ça,
> outre qu’il faut passer du temps pour le faire à la main, ça a tendance
> à rendre les programmes moins lisibles.

Non pas obligatoirement. Tu as des choses que tu peux faire par "calcul" plutôt
que par du if ... then ... comme ça tu n'as de vidange du pipeline dans un des
2 cas. Etc.

Mais pour ça faut avoir un minimum conscience de comment fonctionne ce qui est
en dessous ...


Gaëtan

Attachment: signature.asc
Description: This is a digitally signed message part


Reply to: