|
Re: information sur taille prise en memoire par le projet pour choix GPU |
|
---|---|---|
OverdOzed
![]() ![]() Inscrit:
23/02/2006 18:10 De Alpes-Maritimes
Post(s): 3184
|
Hello,
Une réponse un peu longue pour t'aiguiller dans tes choix. Pour plus de clarté, j'ai découpé ça en trois parties. La partie technique n'est pas forcément nécessaire, mais j'ai essayé d'être le plus clair possible sans trop parler technique. 1. FONCTIONNEMENT DE BLENDER Dans cette documentation (anglais), l'utilisation de la mémoire est expliquée pour Cycles. https://wiki.blender.org/wiki/Reference/Release_Notes/2.80/Cycles#GPU_rendering Si jamais l'anglais pose souci : "Le rendu CUDA supporte maintenant le rendu de scènes qui ne rentrent pas en mémoire GPU, mais qui peuvent être stockées dans la mémoire CPU. Ce mécanisme est automatique mais a par contre un coût en terme de performances qui dépend de la scène et du matériel. Quand une texture image ne rentre pas dans la mémoire GPU, nous avons mesuré des ralentissements de l'ordre de 20 à 30% lors de nos essais. Quand d'autres données de la scène ne peuvent pas non plus entrer en mémoire GPU, le rendu peut être encore plus lent, à tel point qu'il peut être préférable de faire directement le rendu sur CPU." Pour le moment, EEVEE ne peut rendre que sur GPU. Ils ne prévoient pas de rendre sur CPU à cause des performances désastreuses que ça aurait, donc aucun intérêt. Par contre, le CPU reste important pour préparer la scène avant de la transférer au GPU, et ce à chaque frame rendue. Je ne sais pas si EEVEE a aussi ce mécanisme de transfert entre CPU et GPU. https://docs.blender.org/manual/en/latest/render/eevee/limitations.html 2. PARTIE TECHNIQUE SUR L'USAGE DE LA MEMOIRE EN 3D En 3D, ce qui consomme le plus, ce sont les textures. Plus elles sont grandes, plus elles prennent de place en mémoire (qu'importe que ce soit un BMP, un PNG ou un JPEG). Il faut savoir que si tu as un PNG de 1024x1024 qui pèse, disons 500ko sur ton disque car il y a de la compression, en mémoire GPU comme CPU il fera 3Mo ou 4Mo (ça dépend s'il y a un canal alpha pour la transparence). Et c'est quadratique puisqu'une image de 2048x2048 fera 9-16Mo en mémoire (avec/sans canal alpha). Une façon d'évaluer la taille en mémoire (CPU/GPU) de tes textures est de les convertir en BMP. Si elles n'ont pas de transparence, ça te donnera la valeur exacte (à quelques octets près). Si ce sont des images avec transparence, il faut penser que ça prendra 1/3 de place en plus (donc ajouter 33%). En effet, le BMP stocke des valeurs RGB. Il faut ajouter la taille du canal alpha pour du RGBA. Un vertex à côté, il occupe quelques dizaines d'octets seulement. Pour Blender, je n'ai pas trouvé l'information exacte. Mais on va dire qu'on a les infos de position 3D, le dépliage UV, le vecteur normal, etc. Et encore, je pense que pour le rendu, ces données ne sont pas toutes utilisées car il y a une étape de précalcul avant chaque frame. Donc les données peuvent être fusionnées. Par exemple, si un mesh est animé, j'imagine que la phase de précalcul va donner directement la position du vertex pour la keyframe en cours en fonction de tous les bone weights. Bref, la position du vertex est "définitive" quand elle est envoyée au GPU, qui n'a donc plus rien à faire que faire le rendu lui-même. https://en.wikipedia.org/wiki/Vertex_(computer_graphics) Prenons une grosse marge avec un vertex qui prend 96ko (parce que je n'ai pas l'information pour Blender). Un triangle occupe alors 3x96ko = 288ko. Si on a 10 millions de triangles (soit 30 millions de vertices), ça fait près de 3Go de mémoire. Dans les faits, c'est moins. J'ai testé avec 12 millions de triangles et j'ai eu un pic à 2.5Go, uniquement avec des meshes sans texture (il y a une barre qui indique la consommation de mémoire pendant le rendu, dans la fenêtre de rendu). Donc même avec 30 millions, ça ne devrait pas être excessif en terme de consommation (là encore, en comparaison de textures bien grandes). Il y a également d'autres sources de consommation de données, plus anecdotiques car bien moins nombreuses et moins coûteuses. On peut citer les données des matériaux. 3. QUANTITE DE MEMOIRE Me concernant, j'ai 4Go de mémoire GPU. Jusqu'à présent, que ce soit Blender ou des jeux vidéo, je n'ai pas été limité par mon matériel, en particulier pour la mémoire. Même avec des jeux vidéo très beaux et avec les paramètres à fond. Je ne joue pas avec des textures ultra HD car je sais que là, ça ne passerait peut-être pas (en fait, je n'ai pas essayé). Je viens de voir avec 32 millions de vertices. J'ai quelques ralentissements en terme de fluidité dans le viewport mais ça vient plus du calcul et donc des performances du GPU que de la mémoire (si c'était la mémoire, ça aurait freezé). Sinon pour le rendu sans textures, ça m'a pris moins de 2 secondes avec EEVEE. Donc, je dirais que tu peux partir sur au moins 6Go de mémoire GPU. Ça tombe bien, maintenant c'est la "norme" pour des GPU moyen de gamme (type GTX1060, RTX2060). Une RTX2070 Super, une carte haut de gamme mais accessible financièrement, embarque déjà 8Go de mémoire. C'est juste énorme et ça devrait te donner un excellent confort. Comme je te le disais, avec "seulement" 4Go je me sens déjà à l'aise et j'ai peu d'inquiétudes pour mes projets (moins gourmands que le tiens, certes). Si tu veux plus de 11Go (ce que propose une RTX2080 Ti), tu passes sur des cartes pro qui ont jusqu'à 48Go de mémoire. Par contre, va voir ton banquier avant !
Contribution le : 27/11/2019 09:41
|
|
![]() ![]() |
|
Re: information sur taille prise en memoire par le projet pour choix GPU |
|
---|---|---|
OverdOzed
![]() ![]() Inscrit:
23/02/2006 18:10 De Alpes-Maritimes
Post(s): 3184
|
Bonjour smogBlender,
L'erreur que tu as faite, et c'est normal, c'est de comparer les cartes par rapport à leur prix. Il faut plutôt les comparer par équivalence de modèle. https://fr.wikipedia.org/wiki/Turing_(architecture_de_carte_graphique) Dans ce tableau, tu regardes les lignes "Code de la puce". Tu vois que les RTX GeForcd (gaming grand public) ont des puces (processeurs) commun avec les RTX Quadro (cartes pro). Je prends l'exemple de la GeForce RTX 2080 et de la Quadro RTX 5000 qui partagent la même puce. Le nombre de coeurs CUDA exploitables* est différent : 2944 contre 3072. La mémoire aussi : 8Go contre 16Go. Et d'autres choses encore comme les unités de textures (qui font partie de la mémoire du GPU). Bref, ce sont des cartes dédiées en effet aux calculs intensifs pour du CUDA par exemple, mais aussi du calcul intensif qui n'a rien à voir avec la 3D (par exemple des simulations, etc). Leurs performances en 3D sont correctes mais en-dessous de leur équivalent gaming, qui elles sont optimisées pour ça (les drivers contribuent aussi à les booster pour du rendu en temps-réel comme OpenGL). Le tarif, à modèle équivalent, est aussi très différent. Donc la plupart du temps, tu préféreras prendre le modèle gaming même si tu ne joues pas car tu n'as pas de quoi faire un crédit de 5000€ pour une carte graphique. Les entreprises, elles, n'ont pas trop de souci avec ça et en achètent même, si besoin, plusieurs d'un coup. *exploitables car elles sont toutes fabriquées de la même manière, avec le même nombre de coeurs. Après leur production, elles sont mises sur un banc avec un test assez intensif qui va "cramer" certains coeurs mal gravés. Ils désactivent un certain nombre pour arriver à celui qui est vendu et propose, selon le nombre restant de coeurs fonctionnels, une RTX 2080, RTX 2080Ti, RTX 5000, etc. C'est pour ça que certaines personnes arrivent à réactiver des coeurs sur leur CPU aussi. Le fabriquant en désactive pour vendre un Intel i7 avec 4 coeurs, alors qu'il est fabriqué avec 6 coeurs par exemple (comme pour un i9). Mais comme l'un d'eux a cramé, et qu'un i7 a 4 coeurs, ils désactivent le 5ème même s'il fonctionne bien.
Contribution le : 28/11/2019 08:26
|
|
![]() ![]() |
|
Re: information sur taille prise en memoire par le projet pour choix GPU |
|
---|---|---|
OverdOzed
![]() ![]() Inscrit:
23/02/2006 18:10 De Alpes-Maritimes
Post(s): 3184
|
Pour compléter ma réponse, la finesse de gravure y est aussi pour quelque chose dans cette histoire de désactivation de coeurs.
Maintenant, on atteint des limites physiques (moins de 12nm). Plus on diminue cette finesse de gravure, plus c'est dur d'y arriver. C'est pour ça qu'il y a pas mal de pertes comme on le voit entre RTX 2080 et RTX 8000. Les industriels mettent en place des processus de fabrication. Au début, ils ont énormément de pertes. Petit à petit, les pertes sont plus rares. Au moment où ils ont des pertes industriellement viables, ils proposent la finesse de gravure sur leur nouveau modèle. https://www.developpez.com/actu/200818/Intel-ne-pourra-produire-des-CPU-graves-en-10-nm-en-masse-qu-en-2019-et-annonce-des-resultats-financiers-record-au-premier-trimestre-2018/ Bon nombre de coeurs ne sont pas fonctionnels aux fréquences voulues. Il y a donc plus de cartes qui perdent 40% de leurs coeurs que de cartes en perdant seulement 5%, par exemple. Or, ce qui est rare est cher. D'où une partie du prix des cartes pro équivalentes à une RTX2080. En plus de la mémoire de 24 ou 48Go qui a elle aussi un coût conséquent. @papillon: je pense que donner un chiffre, c'est bien. Donner une explication de pourquoi ce chiffre, c'est mieux. 😊
Contribution le : 28/11/2019 11:37
|
|
![]() ![]() |