Salut à tous !
Le 22/02/2021 à 16:51, Gaëtan PERRIER a écrit : > 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. Oui, de plus en plus rare. Tellement rare que de toute façon un compilateur bien utilisé produit désormais de toute façon un code bien plus efficace qu’un code réalisé immédiatement en assembleur. > 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. Oui, c’est ce que je disais : ça dépend totalement du contexte. Je n’ai donné que quelques exemples pour lesquels je n’ai pas donné de détail, mais il y en a plein d’autres. À chaque fois, alors, oui, ça dépend du contexte, du matériel, de ci, de ça. C’est exactement ce que je dis : à chaque fois, il n’y a rien de systématique, ça s’approche stochastiquement. Donc, c’est bien ce que je dis : les optimisations, ce ne sont que des cas particuliers, dans tous les sens. Tellement que, sur un projet complexe, les optimisations à la main sont vouées à l’échec. Donc, nous sommes bien d’accord : ça dépend complètement du contexte. > 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. Oui, c’est très exactement ce que je disais… > 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. Oui, c’est ce que je dis : ça dépend du contexte, ça n’est jamais systématique. > Mais pour ça faut avoir un minimum conscience de comment fonctionne ce qui est > en dessous ... Dans la plupart des cas, savoir intimement comment fonctionne un processeur n’apporte aucune information pour savoir comment améliorer son code. Par exemple, ça ne sert à rien dans un système à réseau de neurones, dans des codes de simulations numériques, dans la gestion de base de données, etc. Comme dit, comme tu l’as confirmé, dans ces cas-là l’optimisation machine n’est pas accessible à un être humain. Dans la majorité des cas, ce qu’il faut, c’est bien réfléchir à ses algorithmes et à ses structures de données, réaliser un code propre, lisible et documenté, par ailleurs ne surtout pas faire d’optimisation à la main. Déjà, parce que dans ce cas, le compilateur ne pourra plus appliquer ses algorithmes d’optimisations, alors que le compilateur est bien plus efficace qu’un être humain à cette tâche. Ensuite, parce que ces optimisations augmentent statistiquement le nombre de bogues. Enfin, parce qu’un code a une durée de vie très supérieure à la durée des machines qui les exécutent et les optimisations ne seront plus les mêmes et l’équipe qui maintiendra le code ne sera plus la même que celle qui a initié le projet. En revanche, il faut apprendre à utiliser son compilateur, l’architecte du programme doit prendre le temps de bien le configurer. Ce qui n’est pas une question d’électronicien. Donc, dans la majorité des cas, il est faux de dire que pour réaliser un bon code il faut savoir comment fonctionne le processeur. Au contraire, à vouloir trop coller à un processeur particulier, on se lance dans des optimisations vaines et qui vont dégrader le code. Bien entendu, ça ne veut pas dire qu’il ne faut pas connaître le fonctionnement d’un ordinateur dans les grandes lignes, simplement que la connaissance intime n’est en rien un plus dans ces applications. En revanche, il est vrai qu’il y a des domaines bien déterminés où il faut connaître intimement l’architecture, par exemple : la programmation système, la réalisation de compilateurs, l’embarqué. En revanche, dans ces cas-là, la connaissance de l’algorithmique est essentielle également. Maintenant, le point de départ était le programme d’enseignement de la programmation au lycée. Clairement, à ce niveau, la question est de les préparer à aborder le plus large panel de situations qui peuvent se présenter en informatique. Du coup, clairement, le plus important est que les élèves aient une première approche de l’algorithmique. Dans ce cadre, l’assembleur, qui oblige de se concentrer sur le matériel et avec lequel il est beaucoup plus difficile de mettre en évidence les algorithmes, est contre-productif, en plus de rebuter la majorité des élèves. Python, au contraire, qui permet une première approche de l’algorithmique et justement oblige à réaliser un code indenté donc mis en forme, remplit vraiment très bien cet objectif. À bientôt. -- Yoann LE BARS https://le-bars.net/yoann/ Diaspora* : yleb...@framasphere.org