Ils ont une table interne au processeur. Quand tu passes sur un choix, il vire l’entrée la plus ancienne et ajoute que à telle adresse on a sauté ou pas. Au passage suivant il recommence. Au bout de quelques passages, si le saut est plus courant, le proc va suposé que tu va « jumpé » (le saut) est donc remplir le pipe avec ce qui suit le saut. Ça évite le flush du pipe en cas de mauvais branchement.
J’avais fait des tests sur PowerPC en 2004 pour mon boulot sur une petite fonction.
1er passage 2μs (2000ns)
2ième passage 1800ns. (cache instruction rempli)
…
18ième passage 1800ns.
19ième passage 950ns.
…
De 2 à 18 le temps varié avec un écart type de 50ns. Au 19ième passage, je gagnais 1μs. Il faut voir que ceci se met en place que en cas de boucle, et si un autre processus ne prend pas la main pour exploser tous les points de passage noté.
Ce test remonte à il y a quelques temps. Je ne sais pas comment gère les CPUs multi-cœur. La table est-elle commune ? ou lié à un cœur ? Dans ce cas, l’OS a intérêt à remettre un même thread sur le même cœur.
[^] # Re: Gestion des paramètres
Posté par Anthony Jaguenaud . En réponse au journal Parlons C, parlons pipe !. Évalué à 3.
Ils ont une table interne au processeur. Quand tu passes sur un choix, il vire l’entrée la plus ancienne et ajoute que à telle adresse on a sauté ou pas. Au passage suivant il recommence. Au bout de quelques passages, si le saut est plus courant, le proc va suposé que tu va « jumpé » (le saut) est donc remplir le pipe avec ce qui suit le saut. Ça évite le flush du pipe en cas de mauvais branchement.
J’avais fait des tests sur PowerPC en 2004 pour mon boulot sur une petite fonction.
1er passage 2μs (2000ns)
2ième passage 1800ns. (cache instruction rempli)
…
18ième passage 1800ns.
19ième passage 950ns.
…
De 2 à 18 le temps varié avec un écart type de 50ns. Au 19ième passage, je gagnais 1μs. Il faut voir que ceci se met en place que en cas de boucle, et si un autre processus ne prend pas la main pour exploser tous les points de passage noté.
Ce test remonte à il y a quelques temps. Je ne sais pas comment gère les CPUs multi-cœur. La table est-elle commune ? ou lié à un cœur ? Dans ce cas, l’OS a intérêt à remettre un même thread sur le même cœur.