Peux-tu expliquer comment fonctionnent les ordinateurs de A à Z ?


Pour comprendre les ordinateurs, il faut d’abord accepter une realite physique. Il n’y a aucune magie a l’interieur d’un ordinateur. Seulement des signaux electriques. Plus precisement, seulement des tensions hautes et basses.

Le materiau de base des puces que nous utilisons aujourd’hui est le silicium. Le silicium est un semi-conducteur. Les semi-conducteurs ont une propriete physique : en les dopant avec differents elements et en controlant la tension sur l’electrode, on peut controler s’ils conduisent l’electricite ou non. Cette minuscule structure qui peut etre activee ou desactivee par l’electricite s’appelle un transistor.

Les CPU modernes contiennent des dizaines de milliards de transistors. Le procede actuel a 3 nanometres de TSMC signifie que ces transistors sont fabriques si incroyablement petits que des dizaines de milliards tiennent sur un morceau de silicium de la taille d’un ongle.

Vous devez seulement retenir une fonction essentielle du transistor. Si vous appliquez une tension elevee a sa borne de commande, il conduit. Si vous appliquez une tension basse, il se bloque. C’est la realite physique fondamentale. Nous definissons la tension elevee comme 1 logique et la tension basse comme 0 logique. Toute l’informatique repose sur ces deux etats.

Avec les transistors, nous pouvons les combiner en portes logiques.

Supposons que nous connections deux transistors en serie. Le courant ne peut circuler d’une extremite a l’autre – produisant un 1 en sortie – que lorsque les deux bornes de commande recoivent une tension elevee, c’est-a-dire que les deux entrees sont a 1. Si l’une est a 0, le courant est coupe et la sortie est a 0. Ce circuit physique s’appelle une porte ET.

Par la meme logique, si deux transistors sont connectes en parallele, le courant circule – produisant un 1 en sortie – des que l’une au moins des entrees est a 1. Ce n’est que lorsque les deux sont a 0 que la sortie est a 0. C’est une porte OU.

En utilisant une methode de connexion legerement differente, ou entrer 1 donne une sortie 0 et entrer 0 donne une sortie 1, nous creons une porte NON.

Avec les portes ET, OU et NON, le monde physique entre officiellement dans le monde mathematique. Je recommande vivement un manuel classique ici appele Code, de Charles Petzold. Ce livre ne contient rien de superflu – il part du telegraphe et explique comment cabler des portes logiques. C’est parfait pour construire cette premiere couche d’intuition physique. Vous devriez le consulter apres avoir lu cet article – ca vous epoustouflera.

Maintenant que nous avons des portes logiques, comment faire faire une addition a un ordinateur ?

En binaire, 1 plus 1 est egal a 10. Cela signifie que le bit courant devient 0 et que nous reportons 1 a la position suivante. C’est en fait deux operations logiques. Premierement, determiner le bit courant : si les deux entrees sont a 1, le bit courant est 0. Si une entree est a 1 et l’autre a 0, le bit courant est 1. Cette logique peut etre implementee en combinant les portes de base que nous avons vues – on l’appelle porte XOR. Deuxiemement, determiner la retenue : ce n’est que lorsque les deux entrees sont a 1 qu’il y a retenue, ce qui est exactement la fonction de la porte ET.

Connectez une porte XOR et une porte ET ensemble, et vous avez physiquement implemente l’addition d’un seul chiffre binaire. Cela s’appelle un demi-additionneur. Mettez plusieurs demi-additionneurs en cascade, en gerant le signal de retenue, et vous obtenez un additionneur complet. Si vous connectez 64 de ces additionneurs complets, vous obtenez un circuit physique capable d’additionner des nombres binaires 64 bits.

Lorsque vous ecrivez la ligne de code a = b + c, ce qui se passe au niveau le plus bas, c’est que les signaux electriques representant b et c se precipitent simultanement dans ce circuit additionneur compose de dizaines de milliers de transistors. Apres un delai physique extremement court, l’autre extremite du circuit produit des tensions hautes et basses stables representant le resultat.

C’est ce qu’on appelle l’unite arithmetique et logique. Ce n’est pas du tout un composant central mysterieux – c’est juste un maillage dense de portes logiques semi-conductrices, câblees selon des regles mathematiques concues par l’homme. Outre l’addition, grace a differentes configurations de câblage, elle peut egalement effectuer des soustractions, des decalages de bits et meme des multiplications.

Mais pouvoir seulement additionner ne sert a rien. Le resultat n’est qu’un tas de signaux electriques – des que le courant est coupe ou que l’entree change, le resultat disparait. Un ordinateur doit pouvoir memoriser les donnees. Cela nous amene a la memoire et aux registres.

Comment utiliser des signaux electriques pour memoriser un etat ? Les ingenieurs electroniciens ont invente un circuit extremement ingenieux appele bascule. C’est un circuit de porte logique avec une boucle de retroaction. En termes simples, le signal de sortie est renvoye a l’entree. Cette conception permet au circuit de maintenir son etat de tension haute ou basse actuel par retroaction interne, meme apres la suppression de l’entree d’origine.

Lorsque vous donnez a cette bascule un signal d’ecriture specifique, elle met a jour son etat interne et le verrouille. A moins que vous ne lui envoyiez un autre signal d’ecriture, elle conservera ce 0 ou ce 1 indefiniment.

Disposez 64 bascules en rang, et vous pouvez stocker un nombre binaire 64 bits. A l’interieur du CPU, juste a cote de l’ALU, ces unites de stockage ultrarapides faites de bascules sont appelees registres. Leur emplacement physique est juste a cote du circuit de calcul, ce qui signifie que le signal electrique parcourt la distance la plus courte possible, donc ils sont extremement rapides. Bien sur, ils sont aussi extremement chers a fabriquer, donc ils ne peuvent etre que tres petits.

Je dois ici recommander energiquement un livre absolument legendaire : Computer Systems: A Programmer’s Perspective, mieux connu dans le monde IT sous le nom de CSAPP. C’est le manuel utilise a l’Universite Carnegie Mellon. Ce qui le rend incroyable, c’est qu’il fait le pont entre le langage assembleur, l’architecture materielle et les systemes d’exploitation. Une fois que vous l’aurez compris, vous saurez pourquoi certains codes sont rapides et d’autres lents – parce que vous commencerez a ecrire du code avec une mentalite de niveau physique.

Si vous voulez aller plus loin et relier systematiquement les systemes d’exploitation, l’organisation des ordinateurs, les reseaux et d’autres fondamentaux essentiels d’un seul coup, j’ai rassemble une collection couvrant les structures de donnees et algorithmes, l’organisation des ordinateurs, et plus encore.

Plus d’un million de telechargements sur le web – des fondamentaux informatiques qui propulseront vos competences.

Continuons vers l’exterieur. Et si les registres ne suffisent pas ? Nous avons besoin de stockage plus grand. C’est la qu’interviennent les barrettes de RAM branchees sur votre carte mere. Le nom technique est Memoire Vive Dynamique, ou DRAM.

Le principe physique de la DRAM est completement different de celui des registres. Au lieu de bascules, elle utilise de minuscules condensateurs pour stocker la charge electrique. Un condensateur charge est a 1, decharge est a 0. Parce que la structure du condensateur est extremement simple – ne necessitant qu’un transistor et un condensateur pour stocker un bit de donnees – la capacite peut etre tres grande. Aujourd’hui, des dizaines voire des centaines de gigaoctets sont courants.

Mais les condensateurs ont un defaut fatal : ils fuient. Si on les laisse tranquilles, la charge representant le 1 fuit completement en quelques millisecondes, devenant 0. La carte mere doit donc avoir un circuit de commande dedie qui lit les donnees de la memoire et les recharge a intervalles extremement courts. C’est ce qu’on appelle le rafraichissement dynamique. C’est pourquoi lorsque vous debranchez votre ordinateur, tout ce qui est en memoire disparait instantanement.

Maintenant nous avons une ALU qui peut faire des calculs, et des registres et une memoire qui peuvent stocker des donnees. La question centrale est : comment ces choses inanimees se mettent-elles en mouvement ? Qui leur ordonne de faire d’abord l’addition, puis la multiplication, et enfin de stocker le resultat ?

C’est le travail de l’unite de controle, et c’est le mecanisme central qui fait d’un ordinateur une machine.

La carte mere possede un oscillateur a cristal – un cristal de quartz qui genere un signal d’impulsion a frequence fixe tant qu’il est alimente. Par exemple, si votre CPU est cadence a 4,0 GHz, cela signifie que ce cristal genere 4 milliards de transitions haute-basse tension chaque seconde.

C’est le battement de c ur de l’ordinateur. Toutes les portes logiques et bascules a l’interieur du CPU fonctionnent en synchronisation stricte avec ce battement.

A l’interieur du CPU, il y a un registre tres special appele le compteur de programme. Il ne contient rien d’autre qu’une adresse memoire.

Lorsque le premier battement retentit, le CPU fait la premiere chose : chercher l’instruction. Il envoie l’adresse stockee dans le compteur de programme a la memoire via les pistes metalliques de la carte mere. La memoire renvoie la longue chaine de 0 et de 1 stockee a cette adresse.

Cette longue chaine de 0 et de 1 est l’instruction. Une fois que l’instruction revient au CPU, elle entre dans l’unite de controle. L’unite de controle n’est aussi qu’un tas de portes logiques câblees – son travail est le decodage. Par exemple, lorsqu’elle voit que les premiers chiffres des 0 et 1 entrants sont 1011, sa structure de câblage interne determine que ces tensions hautes et basses activent exactement l’interrupteur menant au circuit d’addition dans l’ALU. En meme temps, le reste de l’instruction specifie quels registres contiennent les deux valeurs de donnees a additionner.

Lorsque le battement suivant retentit, la phase d’execution commence. Le circuit d’addition active recoit les donnees, les signaux electriques traversent le reseau de portes logiques de l’additionneur en un instant, et le resultat est produit.

Au battement suivant, le resultat est reecrit dans le registre specifie.

Enfin, le compteur de programme s’incremente automatiquement de un, pointant vers l’instruction suivante en memoire. Puis le cycle recommence. Des milliards de fois par seconde.

C’est la verite complete du niveau le plus bas sur le fonctionnement d’un ordinateur. Il n’y a aucune intelligence avancee – seulement un oscillateur a cristal qui bat aveuglement, un compteur de programme qui incremente mecaniquement les adresses, une unite de controle qui commute robotiquement les chemins de signal en fonction des 0 et 1 qu’elle lit, et une ALU qui convertit passivement les niveaux de tension entrants en nouveaux niveaux de tension.

Le code Python ou Java que vous ecrivez dans votre travail quotidien est finalement traduit par un logiciel appele compilateur en une longue et tedieuse sequence d’instructions machine specifiques a l’architecture CPU – des 0 et des 1 purs.

A ce stade, vous avez en fait parcouru toute la chaine du sable (silicium) au programme. Beaucoup de gens ont l’impression de comprendre a ce stade, mais dans l’environnement industriel actuel, comprendre seulement les principes traditionnels du CPU n’atteint meme pas la note de passage.

Compte tenu du sujet actuellement brûlant des grands modeles d’IA, je dois elargir vos horizons. Regardons a quoi ressemble reellement le paysage de la puissance de calcul aujourd’hui.

Toute equipe travaillant aujourd’hui sur de grands modeles, que ce soit pour l’entrainement ou l’inference, ne peut absolument pas utiliser de CPU pour calculer. Pourquoi ?

Parce que les CPU ont ete concues pour gerer un controle logique complexe. Regardez un CPU : une grande partie de sa surface est consacree a la prediction de branchement, a la gestion du cache et a l’unite de controle. La portion utilisee pour le calcul numerique pur – l’ALU – n’est pas si grande. C’est comme si le CPU etait un intellectuel hautement eduque qui excelle dans les processus de gestion complexes. Demandez-lui de calculer 1+1, il peut le faire, et il pourrait meme analyser s’il y a une erreur – mais il ne peut en traiter que quelques-uns a la fois.

L’essence mathematique au c ur des grands modeles est la multiplication de matrices a une echelle extremement grande. Par exemple, multiplier deux matrices de plusieurs milliers par plusieurs milliers. Cela necessite des centaines de millions d’operations de multiplication et d’addition. La logique est extremement simple – multiplier-additionner, multiplier-additionner – sans aucune branchement complexe, mais le volume de donnees est stupéfiant.

Si vous utilisiez un CPU traditionnel pour calculer cela, il pourrait certes executer des milliards d’instructions par seconde, mais face a des centaines de milliards de parametres, ce serait une goutte d’eau dans l’ocean.

Pour vraiment comprendre ce que les grands modeles calculent reellement, si votre intuition mathematique repose encore sur des formules apprises par c ur, je vous recommande vivement de regarder “Essence of Linear Algebra” de 3Blue1Brown. Pour faciliter la revision et la deduction, vous pouvez le combinez avec cet ensemble de notes de 3Blue1Brown en chinois et en anglais. Il parvient a une visualisation intuitive reelle de la multiplication de matrices avancee et des transformations lineaires. Apres l’avoir vu, vous aurez une image mentale physique reelle des operations de multiplication-accumulation sur des milliers et des milliers de parametres.

Notes d’algebre lineaire de 3Blue1Brown : Probablement la meilleure compilation chinois-anglais sur le web

La nature de ce calcul matriciel massif a donne naissance au GPU, l’unite de traitement graphique – qui devrait maintenant etre appelee unite de calcul parallele a usage general.

La philosophie de conception d’un GPU est completement opposee a celle d’un CPU. Elle supprime la plupart des circuits de controle complexes et des grands caches, remplissant chaque espace physique libere avec les ALU les plus simples possible. Une puce NVIDIA H100 actuelle contient des dizaines de milliers de c urs de calcul. Bien que chaque c ur puisse fonctionner a une frequence inferieure a celle d’un c ur CPU et ait une logique de controle faible, ils peuvent tous travailler simultanement.

Imaginez un GPU comme une formation de 100 000 eleves de primaire qui ne savent que l’arithmetique. Vous leur donnez un ordre extremement simple : multipliez le nombre a votre gauche par le nombre a votre droite. Les 100 000 eleves calculent le resultat simultanement sur le meme cycle d’horloge. Pour les operations matricielles massivement paralleles requises par les grands modeles, un GPU est des centaines a des milliers de fois plus efficace qu’un CPU.

En realite, l’IA – comme l’additionneur du CPU – n’a rien de si mysterieux. Ce n’est toujours que couche apres couche de logique et de matrices. Si vous voulez construire votre comprehansion du deep learning a partir de zero, je recommande un livre que beaucoup sur Twitter ont loue pour avoir complete demystifie l’IA : Deep Learning with Python. Une fois que vous aurez compris les calculs tensoriels dans la propagation avant et arriere, vous realiserez qu’il n’y a pas de magie dans les grands modeles non plus.

Apres avoir lu ce livre, j’ai ete completement demystifie sur l’IA !

Retour au materiel. Quand on fait de l’optimisation d’algorithmes de bas niveau, la plupart de nos efforts vont a lutter contre la bande passante de la VRAM. C’est aussi la que de nombreux programmeurs avances trebuchent.

Parce que l’ALU calcule extremement vite. Comme mentionne precedemment, les modules memoire stockent les donnees en chargeant et dechargeant des condensateurs, et ils sont physiquement a une certaine distance du CPU ou du GPU – les signaux electriques mettent du temps a voyager sur la carte mere. Le plus grand defi auquel sont confrontes les puces d’IA aujourd’hui est ce que le monde academique appelle le goulot d’etranglement de von Neumann.

C’est-a-dire : des milliers de c urs de calcul finissent de traiter les donnees en leur possession en un instant, puis ils ne peuvent que rester inactifs, attendant que de nouvelles donnees soient transferees depuis la memoire lente. Meme si vous rendez les circuits de calcul sur la puce plus rapides, si vous ne pouvez pas alimenter les donnees assez rapidement, la puissance de calcul est gaspillee.

Pour resoudre ce probleme, les ingenieurs materiel ont ete pousses a l’extreme. Puisque les modules memoire ordinaires sont trop loin et trop lents, pourquoi ne pas encapsuler la memoire et la puce GPU directement sur le meme substrat ? Pour augmenter la largeur du canal de transmission des donnees, au lieu d’utiliser des fils traditionnels, ils utilisent une technologie appelee interposeurs en silicium – percer des milliers de vias conducteurs microscopiques a l’interieur du silicium pour connecter directement la memoire et les c urs de calcul. C’est ce qu’on a appele la memoire a large bande passante, ou HBM.

Si cette partie vous passionne profondement et que vous voulez obtenir un salaire eleve irremplaçable en tant qu’architecte ou developpeur bas niveau dans l’ere a venir de l’IA, je vous exhorte vivement a vous attaquer a Computer Architecture: A Quantitative Approach. Ce livre a ete ecrit par deux laureats du prix Turing, et presque tous les ingenieurs materiel de la Silicon Valley en possedent un exemplaire. Il utilise des masses de donnees reelles et de formules pour vous dire pourquoi les puces doivent etre concues avec des architectures de cache specifiques et exactement ou se situent les goulots d’etranglement dans le parallelisme multic ur. Bien qu’il soit incroyablement aride a lire, et que certains chapitres soient tres difficiles, c’est le chemin necessaire pour combler le fosse cognitif dans la comprehension de bas niveau.

Revenons a votre question initiale. Pourquoi vous sentez-vous encore confus apres avoir appris tous ces termes ? Parce que l’enseignement traditionnel sectionne la connexion vitale entre les entites physiques et les abstractions logiques.

Lorsque vous traitez le CPU comme une boite noire magique, ces termes semblent etre des definitions incomprehensibles. Mais si vous suivez les lois de la physique vers le haut :

  • Parce que les tensions hautes et basses peuvent former des portes logiques, nous avons obtenu des unites arithmetiques qui peuvent faire des calculs.
  • Parce que les circuits de retroaction peuvent verrouiller les etats de tension, nous avons obtenu des registres qui peuvent stocker des donnees.
  • Parce que nous avions besoin de controler rythmiquement le flux des signaux electriques, nous avons obtenu des oscillateurs a cristal et des unites de controle.
  • Parce que ce systeme est trop complexe pour que les humains entrent directement des niveaux de tension, nous avons invente des jeux d’instructions, emballant les 0 et 1 en langage assembleur, et finalement en C et Python.

En tant que praticien qui a fait ses preuves dans cette industrie, je peux vous dire tres responsablement : a notre epoque, les frameworks frontend vont et viennent, les architectures de microservices backend ont leur moment pendant quelques annees, et meme les architectures de grands modeles d’IA iterent a une vitesse vertigineuse. De nombreuses techniques de developpement d’applications de haut niveau que vous apprenez aujourd’hui pourraient etre obsoletes l’annee prochaine. En fait, les grands modeles peuvent deja effectuer de nombreuses taches de codage de base mieux que le programmeur moyen.

Mais la seule chose qui ne change jamais, c’est cet ensemble de principes fondamentaux de fonctionnement des ordinateurs enracines dans la physique des semi-conducteurs. Peu importe comment le logiciel est abstrait, peu importe la sophistication des algorithmes, tout se resumera toujours a des fluctuations de tension sur un morceau de silicium. Plus l’optimisation des performances est avancee, plus l’ordonnancement du calcul est de pointe, plus les ingenieurs ont besoin de la capacite de voir a travers toutes les couches d’abstraction logicielles et de percevoir directement l’etat operationnel du materiel sous-jacent.

Ne pensez pas que ces connaissances de bas niveau sont eloignees de vous. Lorsque vous rencontrerez un morceau de code extremement gourmand en performances, et parce que vous comprenez le mecanisme des lignes de cache au niveau le plus bas, vous ajustez la disposition des tableaux en memoire pour améliorer drastiquement les taux de succes du cache CPU – faisant tourner le code dix fois plus vite – a ce moment-la, vous ressentirez l’immense sentiment de controle qui vient de la maitrise des principes sous-jacents.