J'ai appris un peu plus sur le fonctionnement des processeurs, mais je n'ai pas pu trouver de réponse claire sur les instructions par cycle.
Par exemple, j'avais l'impression qu'un processeur à quatre cœurs pouvait exécuter quatre instructions par cycle, donc un processeur à quatre cœurs fonctionnant à 2 GHz exécuterait 8 milliards d'opérations par seconde. Est-ce le cas?
Je suis sûr que cela simplifie trop les choses, mais s'il y a un guide ou quelque chose d'autre que je peux utiliser pour me redresser, je suis définitivement ouvert aux idées.
cpu
computer-architecture
Matt Simmons
la source
la source
Réponses:
Les mots clés que vous devriez probablement rechercher sont CISC , RISC et architecture superscalaire .
CISC
Dans une architecture CISC (x86, 68000, VAX), une instruction est puissante, mais son traitement prend plusieurs cycles . Dans les anciennes architectures, le nombre de cycles était fixe, de nos jours le nombre de cycles par instruction dépend généralement de divers facteurs (hit / miss cache, prédiction de branche, etc.). Il y a des tables pour rechercher ce genre de choses. Souvent, il existe également des moyens de mesurer réellement le nombre de cycles requis par une certaine instruction dans certaines circonstances (voir les compteurs de performance ).
Si vous êtes intéressé par les détails d'Intel, le Manuel de référence d'optimisation Intel 64 et IA-32 est une très bonne lecture.
RISC
L'architecture RISC (ARM, PowerPC, SPARC) signifie généralement qu'une instruction très simple ne prend que quelques cycles (souvent un seul).
Superscalaire
Mais indépendamment du CISC ou du RISC, il existe une architecture superscalaire. Le CPU ne traite pas une instruction après l'autre mais travaille sur plusieurs instructions simultanément, un peu comme une chaîne de montage.
La conséquence est la suivante: si vous recherchez simplement les cycles pour chaque instruction de votre programme, puis que vous les additionnez tous, vous vous retrouvez avec un nombre élevé. Supposons que vous ayez un processeur RISC monocœur. Le temps nécessaire pour traiter une seule instruction ne peut jamais être inférieur au temps d'un cycle, mais le débit global peut très bien être de plusieurs instructions par cycle.
la source
La façon dont j'aime y penser est avec une analogie de blanchisserie. Les instructions du processeur sont comme des charges de linge. Vous devez utiliser à la fois la laveuse et la sécheuse pour chaque charge. Disons que chacun prend 30 minutes pour fonctionner. C'est le cycle d'horloge. Les anciens processeurs faisaient fonctionner la laveuse, puis faisaient fonctionner la sécheuse, ce qui prenait 60 minutes (2 cycles) pour terminer chaque charge de linge, à chaque fois.
Pipelining: Un pipeline est lorsque vous utilisez les deux en même temps - vous lavez une charge, puis pendant le séchage, vous lavez la charge suivante. La première charge prend 2 cycles pour terminer, mais la deuxième charge est terminée après 1 cycle supplémentaire. Ainsi, la plupart des charges n'ont besoin que d'un cycle, à l'exception de la première charge.
Superscalaire: apportez tout le linge à la laverie. Obtenez 2 rondelles et chargez-les toutes les deux. Quand ils ont terminé, trouvez 2 séchoirs et utilisez-les tous les deux. Vous pouvez maintenant laver et sécher 2 brassées en 60 minutes. Soit 2 charges en 2 cycles. Chaque charge prend toujours 2 cycles, mais vous pouvez en faire plus maintenant. Le temps moyen est maintenant de 1 charge par cycle.
Superscalaire avec pipelining: lavez les 2 premières charges, puis pendant qu'elles sèchent, chargez les rondelles avec les 2 charges suivantes. Maintenant, les 2 premières charges prennent encore 2 cycles, puis les 2 suivantes sont terminées après 1 cycle supplémentaire. Ainsi, la plupart du temps, vous terminez 2 charges à chaque cycle.
Plusieurs noyaux: donnez la moitié de votre linge à votre mère, qui a également 2 laveuses et 2 sécheuses. En travaillant tous les deux ensemble, vous pouvez en faire deux fois plus. Ceci est similaire à superscalaire, mais légèrement différent. Au lieu de devoir déplacer vous-même tout le linge vers et depuis chaque machine, elle peut le faire en même temps que vous.
C'est formidable, nous pouvons faire huit fois plus de linge qu'auparavant dans le même temps, sans avoir à créer des machines plus rapides. (Doublez la vitesse d'horloge: machines à laver qui ne nécessitent que 15 minutes pour fonctionner.)
Maintenant, parlons de la façon dont les choses tournent mal:
Bulle de pipeline: vous avez une tache qui n'est pas sortie au lavage, vous décidez donc de la laver à nouveau. Maintenant, la sécheuse est juste assise là, attendant quelque chose à faire.
Cache Miss: Le camion qui livre le linge sale est coincé dans la circulation. Vous avez maintenant 2 laveuses et 2 sécheuses, mais vous ne faites aucun travail car vous devez attendre.
Selon la fréquence à laquelle les choses tournent mal, nous ne pourrons pas toujours effectuer 4 charges à chaque cycle, la quantité réelle de travail peut donc varier.
Prédiction de branche: Eh bien, vous commencez à faire la lessive sur vos vêtements propres au cas où vous les tacheriez plus tard afin qu'ils soient déjà propres ... d' accord, c'est là que l'analogie tombe en panne ...
la source
Pas exactement. Le cycle auquel vous faites référence est le cycle d'horloge et, comme la plupart des processeurs modernes, il faut plusieurs cycles d'horloge pour exécuter 1 instruction. (C'est une bonne chose car cela permet à d'autres instructions de commencer l'exécution avant même la fin de la première instruction.) En supposant que la situation la plus idéale, ce serait probablement environ 8 milliards d'IPC, mais toutes sortes de choses se produisent comme des dépendances, des bulles dans le pipeline , branches, etc. donc ça ne marche pas toujours.
Désolé, c'est beaucoup trop compliqué pour une réponse directe. Jon Stokes l'explique bien avec cet article .
la source
Les jours où l'on pouvait rechercher (ou même mémoriser) le temps de cycle pour chaque instruction et savoir combien d'horloges il faudrait pour qu'un certain morceau de code se termine sont bien révolus pour les puces haut de gamme (mais sont toujours avec nous dans certains micro-contrôleurs). Un cœur de processeur moderne et polyvalent peut avoir plusieurs copies de plusieurs unités d'exécution différentes dans plusieurs pipelines, accédant à un cache de mémoire à plusieurs étages avec sa propre logique, ainsi qu'une prédiction de branche et une capacité d'exécution spéculative. Le fait d'avoir plusieurs cœurs sur un seul dé traîne dans la logique de cohérence du cache et d'autres complexités.
Donc, la réponse courte est: plus de cœurs signifie plus de capacité pour faire avancer les choses, mais pas de manière agréable et prévisible .
la source
Ludwig a expliqué la différence entre CISC et RISC, mais a oublié de mentionner que bien que les instructions RISC soient simples et rapides, elles ne font pas grand-chose individuellement et vous devez donc enchaîner plusieurs pour faire la même chose qu'une instruction unique dans un processeur CISC. En conséquence, certaines instructions RISC seront plus rapides, d'autres non.
la source
Les cycles sont plus un concept par cœur. Chaque noyau possède ses propres cycles en parallèle.
la source