Que sont les «instructions par cycle»?

23

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.

Matt Simmons
la source
Non, ce n'est pas le cas. Les processeurs x86 modernes peuvent supporter trois instructions par cœur et par cycle dans des conditions idéales tandis que certaines instructions peuvent nécessiter des dizaines de cycles.
David Schwartz

Réponses:

22

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.

Ludwig Weinzierl
la source
9
Pour moi, l'analogie de la "chaîne de montage" suggère simplement un pipeline simple, pas une architecture superscalaire. Superscalar implique la réplication de parties du matériel CPU (par exemple, une étape du pipeline qui est un goulot d'étranglement) pour améliorer le débit.
sblair
2
J'ajoute par souci de concision: RISC = jeu d'instructions réduit; CISC = jeu d'instructions complexe. Bonne explication, Ludwig pour avoir souligné le rapport hit / miss du cache et (finalement) souligné TLB. Expliquer l'architecture du microprocesseur n'est pas facile, surtout pour tout ranger dans un poste (assez compact)! :)
osij2is
1
D'après ce que j'entends, les processeurs passent de nos jours beaucoup de temps à attendre le travail pour apparaître de la mémoire principale. C'est du moins la réponse que j'ai obtenue lorsque j'ai demandé pourquoi il n'y avait pas plus de cœurs d'exécution dans un processeur.
surfasb
32

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 ...

Kevin Panko
la source
Belle analogie. Je vais le voler.
dmckee
6
Et l'hyperthreading, c'est comme si plusieurs personnes faisaient leur lavage dans la même laverie.
Ronald Pottol
1
Prédiction de branche: vous commencez à laver les vêtements dont vous pensez avoir besoin la semaine prochaine
Akash
2
Hyperthreading: vous commencez à accepter le linge des autres et annoncez le nombre de machines à laver que vous avez (1). Bientôt, vous vous rendez compte que votre lave-linge a de la place pour plus que la paire de pantalons que vous lavez, juste pas une autre paire de pantalons, mais quelque chose de plus petit. Donc, vous fourrez aussi des chaussettes. Maintenant, vous annoncez 2 machines à laver et vous espérez que les gens déposeront le linge suffisamment diversifié pour que vous puissiez toujours «remplir les trous» avec des articles plus petits. Juste au moment où ce gars qui vient avec 10 jeans sales et 1 paire de chaussettes laisse tomber ses affaires, c'est plus lent que jamais.
Florenz Kley
@Akash Vous lavez des vêtements qui n'ont même pas encore de taches, au cas où?
Kevin Panko
3

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 .

hyperslug
la source
2

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 .

dmckee
la source
1

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.

Synetech
la source
0

Les cycles sont plus un concept par cœur. Chaque noyau possède ses propres cycles en parallèle.

Joakim Elofsson
la source