eGPU : l’influence de la bande passante

Récemment, j’ai mis à jour mon installation eGPU : mon montage à base d’ExpressCard passe à la trappe pour un boîtier Thunderbolt 2 (en mode Thunderbolt 1).

La bande passante en eGPU

On voit souvent des gens qui parlent des eGPU en expliquant que la bande passante est un énorme problème, mais il s’agit dans 90 % des cas de personne qui se basent sur les chiffres théoriques, sans jamais avoir testé. Une carte graphique moderne, donc, s’interface généralement en PCI-Express 3.0 avec 16 lignes, soit ~128 Gb/s. Avec le codage 128b/130b (130 bits utilisés pour 128 bits utiles), ça donne environ 16 Go/s. En PCI-Express 1.1, un emplacement 16x atteint 40 Gb/s (~4 Go/s en codage 8b/10b) et il monte à 80 Gb/s en PCI-Express 2.0 (8 Go/s).

En ExpressCard classique, on dispose d’une ligne PCI-Express 1.1 (~250 Mo/s), en ExpressCard 2.0 (et avec mon montage), on passe à une ligne PCI-Express 2.0 (~500 Mo/s). Le Thunderbolt 1 monte à 10 Gb/s dans le meilleur des cas, soit ~1 Go/s à cause du codage 8b/10b. Le Thunderbolt 2 atteint 16 Gb/s (~2 Go/s) et le Thunderbolt 3 à 32 Gb/s (~4 Go/s). Les différences viennent du fonctionnement des normes. Techniquement, la première version du Thunderbolt dispose de 10 Gb/s pour les données et 10 Gb/s pour la vidéo, mais synchronise le bus PCI-Express en version 2.0 sur quatre lignes (16 Gb/s). Le contrôleur ne fournit ensuite que 10 Gb/s. En Thunderbolt 2, la norme monte à 20 Gb/s au total, avec un partage entre la vidéo et les données, mais sur un bus synchronisé en PCI-Express 2.0 / 4x (16 Gb/s). Le débit maximal est donc de 16 Gb/s. Même chose en Thunderbolt 3 : 40 Gb/s en théorie, 32 Gb/s en pratique (PCI-Express 3.0 en 4x).

Mes deux montages

Mon premier kit eGPU comprend un adaptateur Thunderbolt vers ExpressCard 2.0, puis ExpressCard 2.0 vers PCI-Express 16x. Il donne une bande passante maximale de 500 Mo/s. Le second est un Thunder2 de chez AKiTio. vendu ~250 €, ce boîtier fonctionne en Thunderbolt 2 mais je l’utilise en Thunderbolt 1 (~1 Go/s). Le boîtier nécessite quelques modifications pour alimenter correctement une GPU – ici une GeForce GTX 1060 (Pascal) – : j’ai utilisé l’alimentation de 120 W de mon ancien boîtier ViDock pour alimenter le bus lui-même (AKiTio ne fournit qu’une alimentation de 60 W) et une alimentation ATX externe pour la carte. Globalement, le boîtier ne permet pas d’alimenter correctement un GPU de base, en ne fournissant officiellement que 25 W sur le bus (au lieu de 75 W) et en limitant la taille des cartes. Pour accepter un gros GPU, il faut donc bidouiller un peu et sortir le PCB du boîtier.

Un peu de bricolage


La carte en PCIe 4x

Les performances

Avec F1 2016, un jeu récent, les performances évoluent assez peu. En 1080p sur un écran externe, avec les options réglées sur Supérieurs et en activant l’AA 2x, on passe de 37 fps de moyenne à 42 fps de moyenne (+13%). Dans ce jeu, le CPU de mon MacBook Air limite un peu (un simple dual core à 3,2 GHz dans le meilleur des cas). Avec Unigine Heaven, un benchmark, le réglage « Extreme » passe de 51 à 59 fps, soit un gain d’un peu plus de 15 % en fps. La différence n’est pas énorme en considérant que la bande passante réelle est doublée. Les gains avec du Thunderbolt 2 et 3 sont encore plus réduits, vu que la bande passante n’évolue pas autant qu’entre l’ExpressCard et le Thunderbolt. Très clairement, de toute façon, le facteur limitant dans mon cas reste le CPU.

En ExpressCard


En Thunderbolt


En ExpressCard


En Thunderbolt

Conclusion

Très clairement, le gain reste assez faible. C’est un peu plus compact (surtout avec une carte graphique courte) et réutilisable avec des performances plus élevées en Thunderbolt 2 ou même Thunderbolt 3 (l’adaptateur Thunderbolt 2 vers 3 d’Apple le permet), mais ça ne vaut pas vraiment le coût de changer si vous disposez déjà d’un adaptateur ExpressCard (ou équivalent).