Utiliser la puissance de sa carte vidéo pour effectuer des calculs - C++ - Programmation
Marsh Posté le 05-03-2005 à 21:24:15
pas terrible. la CG est effectivement super couillue, mais seulement pour effectuer des operations bien precises. Bon, ok, avec les derniers CG, qui ont moultes VS et PS, et surtout des textures pouvant stocker des flottants, on doit pouvoir arriver a qqchose.
normalement sur une CG on ne fait qu'envoyer des données, on en recoit pas (c'est possible mais ca ralenti salement le biniou), mais bon, avec une CG recette, moi je dis : pourquoi pas ? essaye et regarde si tu peux te servir de la CG pour decharger un peu le proc. Par contre garde a l'esprit que meme si bcp de progres ont ete fait, une CG n'offre pas la flexibilité d'un CPU (et les performances se cassent mechamment la gueule si le shader devient trop long)
Marsh Posté le 05-03-2005 à 21:34:46
D'ac! merci pour ces indications. Mais en terme de programmation pure (instructions, variables, structures), comment procède-t-on pour faire réaliser des opérations à la CG ?
Marsh Posté le 05-03-2005 à 21:37:05
ah bin la il faut te pencher du coté des langages de shader : soit cui de DX (nommé HLSL), soit de celui d'opengl (jsais pu le nom) ou ptet encore du coté de celui de nvidia (cg, mais je sais pas trop non plus si il est tjs maintenu....)
ca a une vague tronche de C (sans pointeur, ni allocation dynimaque... evidemment. Et les instructions dont tu disposeras (et le nombre de celle ci) dependront de ta cg)
Marsh Posté le 05-03-2005 à 21:59:13
ouais, en gros : beaucoup de soucis pour peu de résultats à la sortie...
topic over
Marsh Posté le 05-03-2005 à 22:06:33
quelques ressources là :
http://www.gpgpu.org/
les problèmes des gpus actuels : capacités de readback pas super adapté (si tu as beaucoup de calculs dépendants les uns des autres dont une partie doit être traité par le CPU). Fournir les données du calcul à la carte graphique est couteux en temps CPU et les modeles de shaders actuels limitent les accès aléatoires à la mémoire (ce qui fait que le CPU doit prévoir à l'avance quelles données seront accédées + hardcoder certains accès ou données dans les programmes, ce qui augmente la dépendance ci dessus).
Les modèles complexes style appel récursif avec pile, sont à oublier et le modèle de branchement est très différent des CPUs (les GPUS actuels privilégient la cohérence, les CPUs privilégient la prédiction).
Les GPUS sont fortement SIMD, pour atteindre la pleine vitesse il faut qu'une meme instruction puisse s'appliquer à 4 vecteurs de 4 flottants simultanément. Le pipeline graphique contient de nombreuses unités "logiques" qui paraissent dupliquées pour privilégier le parallélisme mais qui parfois utilisent les meme ressources physiques pour économiser des transistors. Le nombre de registres est limité mais n'est pas backupé par un espace de stockage intermédiaire ce qui fait que les programmes qui ont besoin de stockage intermédiaire doivent être découpés en passes multiples.
Aucun GPU actuel ne travaille sur de simples entiers, tous les calculs se font en flottant.
Il n'y a pas d'exceptions, pas de capacités de déboguage (à part en émulation software).
A cause et grace à tout ça, un GPU sera toujours plus rapide au traitement graphique pur (tel que défini par les APIs OpenGL et Direct3D) qu'un simple CPU. Mais il faudra un peu se casser la tete pour tout le reste.
Bien entendu plus on avance plus les modèles se complexifient et bientot il sera possible de faire fonctionner des programmes complexes sur les GPUs, voire d'avoir l'équivalent d'un CPU Intel sur la carte graphique ou intégré au die du GPU (mais tu peux oublier ça pour cette année..)
Marsh Posté le 05-03-2005 à 22:12:16
exemple commercial :
http://film.nvidia.com/page/home.html
Gelato délègue certains calculs couteux à la carte graphique pour faire du rendu offline (non temps réel).
Marsh Posté le 05-03-2005 à 22:16:59
exemple académique:
http://graphics.stanford.edu/projects/brookgpu/
BrookGPU introduit un modèle abstrait de stream programming pour pouvoir programmer plus facilement les cartes graphiques et effectuer des calculs géneriques sur les GPUs.
Marsh Posté le 06-03-2005 à 10:22:11
me semblait bien que j'avais déjà vu ça quelque part ...
http://www.hardware.fr/html/news/?date=26-12-2003#6253
j'ai eu du mal a le retrouver vu le titre de l'article : Une GeFFX pour remplacer le P4 ?
@ +
Marsh Posté le 05-03-2005 à 21:19:49
Je fais de gros calculs mathématiques qui prennent beaucoup de temps. On m'a dit qu'il était possible en C/C++ d'utiliser la puissance de calcul de la carte vidéo (en plus du couple carte mère et processeur)... Est-ce vrai?
Comment réalise-t-on cela? Quel est l'ordre de grandeur des gains, en terme de puissance?
Merci pour vos lumières!