Se connecter

Informatique

Programmation

Sujet : Comment communiquer "directement" avec le GPU ?
1
neytsumi
Niveau 12
13 novembre 2019 à 21:06:32

Salut,

Derrière ma question un peu floue, je cherche en fait à comprendre comment la communication CPU<->GPU se fait ; le système d'une manière plus générale :hap:
Je suis parti en master système pour comprendre ce qui se cache dernière nos PC, mais force est de constater que plus je creuse, plus je découvre de nouvelles choses qui demande de creuser encore et encore ... :hap:

Du coup pour en revenir à ma question, je me demande comment depuis un code C/C++ on peut "parler" directement au GPU ?
Je sais qu'il existe différentes API graphique (OpenGL, DirectX, Vulkan, etc.) qui se chargent d'aller communiquer avec le driver du GPU et de lui "traduire" ce que l'on veut ("fait moi un triangle").
Mais ces API font comment pour parler aux drivers ? Je suis sous Linux donc j'imagine que le noyau à mis à disposition une API qui permet de communiquer avec les drivers qui nous intéressent.
Est-ce que je peux les appeler depuis mon code C ? Bien que ça doit être du (très) bas niveau, en manipulant directement les octets et les adresses de la mémoire du GPU, est-ce que c'est en théorie possible ?

D'ailleurs question subsidiaire, j'imagine que les GPU intègrent une sorte de microcontrôleur (microprocesseur ?) chargé de lire ce qui lui arrive par le bus PCIe (entre autre). Est-ce qu'ils ont une sorte d'assembleur/jeu d'instructions (à la manière du x86 ou de l'ARM) en interne pour ordonner ses différents unités de calcul ?

Bref j'ai des milliers des question, si vous avez une bribe d'info ou des liens je prends :hap:

Merci d'avance :ok:

godrik
Niveau 21
14 novembre 2019 à 01:29:32

fondamentalement c'est un appareil auquel tu communique par pci-e. donc il faudraot que le noyau expose une api pour ecrore sur pcie depuis un code qui est en userspace. et c'est une faille de securite horrible potentiellement donc les kernels ne l'expose pas typiquement.
apres comment lui donner des commandes il y a des protocoles different en fonctions des fabricant de gpu et du model en particulier. les protocoles ne sont pas forcement ouvert donc ca peut etre tres galere a ecrire.

tsez93
Niveau 10
14 novembre 2019 à 02:19:35

https://developer.nvidia.com/nvapi

Zongo_Le_Dozo
Niveau 8
19 novembre 2019 à 15:35:43

Les API comme vulkan, openGL etc... Passe par le driver, le driver indique à Windows ce qu'il faut faire.

neytsumi
Niveau 12
02 décembre 2019 à 01:35:45

Le 14 novembre 2019 à 01:29:32 godrik a écrit :
fondamentalement c'est un appareil auquel tu communique par pci-e. donc il faudraot que le noyau expose une api pour ecrore sur pcie depuis un code qui est en userspace. et c'est une faille de securite horrible potentiellement donc les kernels ne l'expose pas typiquement.
apres comment lui donner des commandes il y a des protocoles different en fonctions des fabricant de gpu et du model en particulier. les protocoles ne sont pas forcement ouvert donc ca peut etre tres galere a ecrire.

D'accord, sous Linux on peut imaginer que c'est fait avec des modules noyaux qui exposent des IOCTL par exemple pour la partie du driver situé espace-utilisateur ? Avec qui le reste du système communique ?
Ou plutôt un système unifié ? Connaissant un peu Linux c'est plutôt vers là non ?

Le 14 novembre 2019 à 02:19:35 tsez93 a écrit :
https://developer.nvidia.com/nvapi

Merci bien, t'aurais l'idée sous Linux ? Ça n'a l'air disponible que sous Windows.

Le 19 novembre 2019 à 15:35:43 Zongo_Le_Dozo a écrit :
Les API comme vulkan, openGL etc... Passe par le driver, le driver indique à Windows ce qu'il faut faire.

Merci bien mais comme indiqué dans ma question je m'intéresse aux détails d'implémentation (jusqu'au plus bas niveau, quitte à me taper le code de communication avec le bus PCI-e).

godrik
Niveau 21
02 décembre 2019 à 02:29:19

Le 02 décembre 2019 à 01:35:45 neytsumi a écrit :

Le 14 novembre 2019 à 01:29:32 godrik a écrit :
fondamentalement c'est un appareil auquel tu communique par pci-e. donc il faudraot que le noyau expose une api pour ecrore sur pcie depuis un code qui est en userspace. et c'est une faille de securite horrible potentiellement donc les kernels ne l'expose pas typiquement.
apres comment lui donner des commandes il y a des protocoles different en fonctions des fabricant de gpu et du model en particulier. les protocoles ne sont pas forcement ouvert donc ca peut etre tres galere a ecrire.

D'accord, sous Linux on peut imaginer que c'est fait avec des modules noyaux qui exposent des IOCTL par exemple pour la partie du driver situé espace-utilisateur ? Avec qui le reste du système communique ?
Ou plutôt un système unifié ? Connaissant un peu Linux c'est plutôt vers là non ?

Il n'y a aucune partie du driver en userspace probablement. Le driver expose certainement des appels systeme pour que le driver soit utile. mais je ne pe se pas que le driver soit en user space. apres il y a un driver de xorg qui est en user space et qui parle au driver nvidia dans le kernel. Mais le driver de xorg n'est pas un driver materiel. de laeme facon que la lib cuda fait l'interface entre l'appli cuda et le driver nvidia. mais ils ne font pas vraent parti du driver lui meme.

en pratique je ne pense pas que le noyau expose le bus pci express directement en userspace. foirer les protocols de pcie peut rendre la machine instable facilement, tu peux perdre des do nees facilement, etc.

Le 14 novembre 2019 à 02:19:35 tsez93 a écrit :
https://developer.nvidia.com/nvapi

Merci bien, t'aurais l'idée sous Linux ? Ça n'a l'air disponible que sous Windows.

Meme nvapi ca ne va pas t'aider. ca n'expose rie du protocole de communication.

neytsumi
Niveau 12
04 décembre 2019 à 16:55:40

Le 02 décembre 2019 à 02:29:19 godrik a écrit :

Le 02 décembre 2019 à 01:35:45 neytsumi a écrit :

Le 14 novembre 2019 à 01:29:32 godrik a écrit :
fondamentalement c'est un appareil auquel tu communique par pci-e. donc il faudraot que le noyau expose une api pour ecrore sur pcie depuis un code qui est en userspace. et c'est une faille de securite horrible potentiellement donc les kernels ne l'expose pas typiquement.
apres comment lui donner des commandes il y a des protocoles different en fonctions des fabricant de gpu et du model en particulier. les protocoles ne sont pas forcement ouvert donc ca peut etre tres galere a ecrire.

D'accord, sous Linux on peut imaginer que c'est fait avec des modules noyaux qui exposent des IOCTL par exemple pour la partie du driver situé espace-utilisateur ? Avec qui le reste du système communique ?
Ou plutôt un système unifié ? Connaissant un peu Linux c'est plutôt vers là non ?

Il n'y a aucune partie du driver en userspace probablement. Le driver expose certainement des appels systeme pour que le driver soit utile. mais je ne pe se pas que le driver soit en user space. apres il y a un driver de xorg qui est en user space et qui parle au driver nvidia dans le kernel. Mais le driver de xorg n'est pas un driver materiel. de laeme facon que la lib cuda fait l'interface entre l'appli cuda et le driver nvidia. mais ils ne font pas vraent parti du driver lui meme.

en pratique je ne pense pas que le noyau expose le bus pci express directement en userspace. foirer les protocols de pcie peut rendre la machine instable facilement, tu peux perdre des do nees facilement, etc.

Le 14 novembre 2019 à 02:19:35 tsez93 a écrit :
https://developer.nvidia.com/nvapi

Merci bien, t'aurais l'idée sous Linux ? Ça n'a l'air disponible que sous Windows.

Meme nvapi ca ne va pas t'aider. ca n'expose rie du protocole de communication.

Du coup sur des drivers libres comme ceux de Intel ou AMD y’a moyen de le voir ? Ou y’a quand même quelque chose de propriétaire au bout ?

godrik
Niveau 21
04 décembre 2019 à 19:49:43

le driver intel a probablement tout ca dedans. Voir meme nouveau.

neytsumi
Niveau 12
04 décembre 2019 à 19:51:00

D’accord merci pour toutes réponse :ok:

1
Sujet : Comment communiquer "directement" avec le GPU ?
   Retour haut de page
Consulter la version web de cette page