# QuickPath Interconnect

Le QuickPath Interconnect, ou QPI (anciennement CSI pour common system interface), est un bus informatique développé par Intel dans le but de remplacer le bus système parallèle FSB, et introduit à partir de 2008. Le principal intérêt du bus QPI provient de sa topologie point à point : le bus connectant les processeurs au chipset n'est plus partagé. Il est similaire au bus HyperTransport présent sur les processeurs Athlon 64 et postérieurs produits par AMD.
La première architecture à implémenter le bus QPI est Nehalem ; les premiers processeurs à l'utiliser ont été disponibles à la vente fin 2008.
QPI 1.1 est une version significativement améliorée introduite avec Sandy Bridge-EP (plateforme Romley).
QPI a été remplacé en 2017 par Ultra Path Interconnect (UPI) dans les processeurs Xeon Skylake-SP basés sur le socket LGA 3647.

## Généralités

Le bus QPI partage de nombreux points communs avec les bus dits de troisième génération (tels le HyperTransport, PCI Express, DVI/HDMI et SATA) :
* Utilisation d'un agrégat de liaisons séries uni-directionnelles et multi-gigabit.
* Implémentation sous forme d'une pile de protocoles.
* Données transmises sous forme de trames.
* L'unité de mesure du débit est en GT/s (Giga Transferts par seconde)

## Historique
### Contexte

L'architecture système utilisée par Intel, consistant en un bus parallèle (le FSB) connectant le processeur au reste du système, est restée fondamentalement inchangée depuis le processeur Pentium Pro. L'apparition de systèmes multiprocesseurs et l'augmentation des capacités de traitement de ceux-ci, ont fait du bus FSB, où convergent tous les flux de données allant et venant des processeurs, un chemin critique.
L'évolution significative du bus FSB avec l'architecture NetBurst (processeurs de type Pentium 4), ne suffira pas à répondre aux besoins de bande passante générés par les processeurs devenus multi-threads puis multi-cœurs. La situation est critique sur les systèmes quadri-processeurs, forçant Intel à développer des processeurs doté d'une large mémoire cache de niveau 3 (jusqu'à 16 Mo) afin de soulager le bus FSB.

### Développement

Le bus QPI, nommé Common System Interface (CSI) durant son développement, est un élément clé de l'architecture QuickPath Architecture annoncé par Intel. Tout comme l'architecture système utilisée par AMD depuis le processeur Athlon 64, elle-même inspirée de celle du processeur Alpha 21364, cette nouvelle architecture est centrée autour du (ou des) processeur(s), là où l'architecture actuelle est centrée autour du chipset.

## Mise en œuvre

QPI est un élément d’une architecture système qu’Intel appelle QuickPath architecture qui implémente ce qu’Intel appelle la technologie QuickPath. Dans sa forme la plus simple sur une carte mère monoprocesseur, un seul QPI est utilisé pour connecter le processeur au hub d’E/S (par exemple, pour connecter un Intel Core i7 à un chipset X58). Dans les instances plus complexes de l’architecture, des paires de liaisons QPI distinctes connectent un ou plusieurs processeurs et un ou plusieurs concentrateurs d’E/S ou concentrateurs de routage dans un réseau sur la carte mère, permettant à tous les composants d’accéder à d’autres composants via le réseau. Comme pour HyperTransport, l’architecture QuickPath suppose que les processeurs ont des contrôleurs mémoire intégrés et permettent un accès à la mémoire non uniforme (NUMA).
Chaque QPI comprend deux liaisons de données point à point à 20 voies, une dans chaque direction (duplex intégral), avec une paire d’horloge distincte dans chaque direction, pour un total de 42 signaux. Chaque signal est une paire différentielle, de sorte que le nombre total de broches est de 84. Les 20 voies de données sont divisées en quatre « quadrants » de 5 voies chacun. L’unité de transfert de base est le flit de 80 bits, qui a 8 bits pour la détection d’erreur, 8 bits pour « l’en-tête de couche de liaison » et 64 bits pour les données. Un flit de 80 bits est transféré en deux cycles d’horloge (quatre transferts de 20 bits, deux par tic-tac d’horloge). Les bandes passantes de QPI sont annoncées en calculant le transfert de 64 bits (8 octets) de données tous les deux cycles d’horloge dans chaque direction.
Bien que les implémentations initiales utilisent des liaisons uniques à quatre quadrants, la spécification QPI autorise d’autres implémentations. Chaque quadrant peut être utilisé indépendamment. Sur les serveurs à haute fiabilité, une liaison QPI peut fonctionner en mode dégradé. Si un ou plusieurs des signaux 20+1 échouent, l’interface fonctionnera en utilisant 10+1 ou même 5+1 signaux restants, réassignant même l’horloge à un signal de données si l’horloge tombe en panne. L’implémentation initiale de Nehalem utilisait une interface complète à quatre quadrants pour atteindre 25,6 Go/s (6,4 GT/s × 1 octet × 4), ce qui fournit exactement le double de la bande passante théorique du bus frontal à 1600 MHz d’Intel utilisé dans le chipset X58.
Bien que certains processeurs Core i7 haut de gamme exposent QPI, d’autres processeurs Nehalem pour ordinateurs de bureau et portables « grand public » destinés aux cartes à socket unique (par exemple le LGA 1156 des processeurs Core i3, Core i5 et autres Core i7 des familles Lynnfield/Clarksfield et successeurs) n’exposent pas QPI à l’extérieur, car ces processeurs ne sont pas destinés à participer à des systèmes multi-sockets.
Cependant, QPI est utilisé en interne sur ces puces pour communiquer avec le « uncore », qui est la partie de la puce contenant les contrôleurs mémoire, le PCI Express côté CPU et le GPU, le cas échéant ; le uncore peut ou non être sur la même puce que le cœur du processeur, par exemple il se trouve sur une puce séparée dans les Clarkdale/Arrandale basés sur Westmere$^,$$^,$$^,$$^{:3}$.
Dans les puces à socket unique sorties après 2009, à commencer par Lynnfield, Clarksfield, Clarkdale et Arrandale, les fonctions traditionnelles du northbridge sont intégrées dans ces processeurs, qui communiquent donc en externe via les interfaces DMI et PCI Express, plus lentes. Ainsi, il n’est pas nécessaire d’engager des dépenses pour exposer l'(ancien) front side bus via le socket du processeur.
Bien que la liaison QPI core-uncore ne soit pas présente dans les processeurs Sandy Bridge pour PC de bureau et portables (comme c’était le cas sur Clarkdale, par exemple), l’interconnexion en anneau interne entre les cœurs sur la puce est également basée sur les principes derrière QPI, du moins en ce qui concerne la cohérence du cache$^{:10}$.

## Spécifications de fréquence

Étant un circuit synchrone, le QPI fonctionne à une fréquence d’horloge de 2,4, 2,93, 3,2, 3,6, 4,0 ou 4,8 GHz (les fréquences 3,6 et 4,0 GHz ont été introduites avec la plate-forme Sandy Bridge-E/EP et la fréquence 4,8 GHz avec la plate-forme Haswell-E/EP). La fréquence d’horloge d’une liaison particulière dépend des capacités des composants à chaque extrémité de la liaison et des caractéristiques du signal du chemin du signal sur la carte de circuit imprimé. Les processeurs Core i7 9xx non extrêmes sont limités à une fréquence de 2,4 GHz, la fréquence d'horloge de référence d’origine.
Les transferts de bits se produisent à la fois sur les fronts montant et descendant de l’horloge, de sorte que le taux de transfert est le double de la fréquence d’horloge.
Intel décrit le débit de données (en Go/s) en ne comptant que la charge utile de données 64 bits dans chaque flux de 80 bits. Cependant, Intel double alors le résultat car la paire de liens unidirectionnels d’envoi et de réception peut être active simultanément. Ainsi, Intel décrit une paire de liaisons QPI à 20 voies (envoi et réception) avec une fréquence d'horloge de 3,2 GHz comme ayant un débit de données de 25,6 Go/s. Une fréquence d’horloge de 2,4 GHz donne un débit de données de 19,2 Go/s. Plus généralement, selon cette définition, un QPI à deux liaisons à 20 voies transfère huit octets par cycle d’horloge, quatre dans chaque direction.
Le débit est calculé comme suit :
    3,2 GHz
    × 2 bits/Hz (débit de données doublé)
    × 16(20) (bits de données/largeur de liaison QPI)
    × 2 (envoi et réception unidirectionnels fonctionnant simultanément)
    ÷ 8 (bits/octet)
    = 25,6 Go/s