IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Moteurs 3D Discussion :

Gestion des ressources avec un cache LRU


Sujet :

Moteurs 3D

  1. #1
    Membre habitué Avatar de Kromagg
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2008
    Messages : 275
    Points : 198
    Points
    198
    Par défaut Gestion des ressources avec un cache LRU
    Bonjour

    J'aimerai savoir si un cache LRU est une bonne façon de gérer les ressources dans un moteur de rendu ? Sinon qu'elle politique utilisez-vous pour détruire vos ressources au fur et à mesure qu'elles deviennent inutiles ?

    Kromagg
    C'est dans ses rêves que l'homme trouve la liberté cela fut, est et restera la vérité! (John Keating - Le cercle des poètes disparus)

  2. #2
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    ça dépend complètement du projet en fait.

    le cache LRU sera sans doute une solution générique relativement correcte, mais du coup, tu vas perdre une chose importante quand tu voudra tweaker finement ton projet : le "determinisme" (avec des guillemet car le LRU sera bien entendu déterministe). En effet, tu vas te retrouver, par exemple, a vouloir toujours avoir en mémoire une texture utilisé dans le menu quand tu appuie sur echape. Te le veut car c'est chiant de devoir attendre un loading quand on va dans ce menu. problème, il est rarement utilisé, dont toujours évincé du cache... Du coup, tu vas rajouter un système de priorité/ressource obligatoirement présentes en memoire, mais ça va devenir chiant, car par moment, tu ne veut quand même pas avoir ces données (par exemple, quand tu est dans le menu au lancement du jeu, tu ne veut pas forcement de l’écran d'echape .

    Une solution (parmi tant d'autre) est d'avoir un système de "transaction" qui va te permettre explicitement (ou pas) de déterminer quelle sont les ressources à charger/maintenir dans le cache.

    Ainsi, quand tu lance le jeu, tu charge la transaction contenant les ressources du menu. Quand tu va lancer une partie, tu décharge cette transaction et tu charge celle du niveau en cours.

    L’intérêt de ce genre de système, c'est qu'en plus de gérer quelles sont les ressources à (potentiellement) charger à un instant T, c'est qu'on a aussi une liste des ressources à décharger, ce qui est aussi très important si tu ne veut pas faire "bloater" ton projet.

    Après, en interne, tu peut toujours avoir un LRU qui va faire de l’éviction automatique et sur lequel tu agira lors des déchargement de transactions, mais la gestion des caches est toujours un problème plus complexe qu'il ne semble. Quelle taille doit il faire, qu'est ce que je fait quand il est vraiment plein. par exemple : toutes les textures du caches on été utilisées durant la même frame et on réclame une nouvelle texture, que faire ? En supprimer une au pif (elle ont toutes le même age) ou ne pas ajouter la nouvelle texture (qui du coup risque d'être rechargée encore et encore)
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  3. #3
    Membre habitué Avatar de Kromagg
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2008
    Messages : 275
    Points : 198
    Points
    198
    Par défaut
    Donc si je comprend la gestion des ressources avec un cache LRU ne se fait pas au niveau du moteur de rendu lui-même mais à un niveau au dessus, comme le moteur de jeu par exemple ?

    Autre question : admettons que je me balade dans mon environnement dans lequel je croise différents objets avec chacun sa propre texture. Comment savoir qu'un objet que j'ai croisé il y a 2 min (façon de parler) n'est plus nécessaire, car plus du tout visible à l'écran, et donc que je peux libérer la texture qui lui est associé ?

    Maintenant au niveau de la scène en générale. Sachant que celle-ci est organisé via un graphe de scène, quelles sont les politiques de suppression utilisées pour retirer les nœuds du graphe qui ne sont plus utiles ?

    Kromagg
    C'est dans ses rêves que l'homme trouve la liberté cela fut, est et restera la vérité! (John Keating - Le cercle des poètes disparus)

  4. #4
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    comme je dit au début de mon post précédent, tout dépend de l'utilisation que tu en fait. En fait, en pratique, tu vas très probablement avoir plusieurs systèmes différents pour gérer plusieurs problématiques. En plus, comme ton moteur 3D est bien fait, les textures de tes objets sont dans des atlas de textures, donc, du coup, tu n'as plus une relation 1-1 entre objet et texture mais 1-*

    En plus, la solution du LRU pour les objets semble bonne, mais est ce qu'elle correspond à tes besoins pour le terrain, les textures du ciel, l'interface ?

    Bref, l'objectif, c'est de créer un design bas niveau suffisamment simple pour que tu puisse le manipuler avec des couche plus haut niveau qui feront ce que tu veut. Donc, oui, a priori, ton LRU de gestion des textures d'objets ne sera pas dans le coeur de ton moteur 3D.
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  5. #5
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par bafman Voir le message
    Bref, l'objectif, c'est de créer un design bas niveau suffisamment simple pour que tu puisse le manipuler avec des couche plus haut niveau qui feront ce que tu veut. Donc, oui, a priori, ton LRU de gestion des textures d'objets ne sera pas dans le coeur de ton moteur 3D.
    Et les couches au dessus ne feront pas partie du moteur 3D ?

    Pour savoir après combien de temps enlever les choses du cache, je ne raisonnerais pas comme cela. Par exemple les cartes graphiques ont une quantité fixe de mémoire embarquée. Cette mémoire peut-être chargée de données mais qui n'affectent pas les performances si elles ne sont pas utilisées. Par contre il peut y avoir un effondrement de perf si tout à coup on excède cette quantité embarquée. Il peut donc y avoir à prévoir "un budget" pour le cache à ne pas excéder. Les objets pouvant résider dans le cache tant que ce budget est disponible et doivent être évincés (en LRU par exemple) lorsque ce budget est excédé pour faire de la place pour de nouvelles assets. La taille du budget pouvant être défini par carte graphique ou réglable manuellement par l'utilisateur (texture/details low/high etc).

    Si le cache LRU est continuellement renouvelé il y a probablement un problème sur la taille des assets par rapport à la taille du cache, donc ce n'est pas forcément lié au choix d'algorithme mais aux autres décisions techniques.

    LeGreg

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  6. #6
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    Citation Envoyé par LeGreg Voir le message
    Et les couches au dessus ne feront pas partie du moteur 3D ?
    si, mais elles font partie de la partie "spécialisée" du moteur, pas de la partie "générique" (avec des guillemet car la limite est toujours floue)
    Citation Envoyé par LeGreg Voir le message
    Pour savoir après combien de temps enlever les choses du cache, je ne raisonnerais pas comme cela. Par exemple les cartes graphiques ont une quantité fixe de mémoire embarquée. Cette mémoire peut-être chargée de données mais qui n'affectent pas les performances si elles ne sont pas utilisées. Par contre il peut y avoir un effondrement de perf si tout à coup on excède cette quantité embarquée. Il peut donc y avoir à prévoir "un budget" pour le cache à ne pas excéder. Les objets pouvant résider dans le cache tant que ce budget est disponible et doivent être évincés (en LRU par exemple) lorsque ce budget est excédé pour faire de la place pour de nouvelles assets. La taille du budget pouvant être défini par carte graphique ou réglable manuellement par l'utilisateur (texture/details low/high etc).

    Si le cache LRU est continuellement renouvelé il y a probablement un problème sur la taille des assets par rapport à la taille du cache, donc ce n'est pas forcément lié au choix d'algorithme mais aux autres décisions techniques.

    LeGreg
    Je suis tout a fait d'accord. Ce que je voulais dire ci dessus est qu'il n'y a malheureusement pas de "solution magique" qui va gérer tous les problèmes, et qu'il faut prévoir de devoir adapter la gestion des ressources au type de projet
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/11/2011, 11h28
  2. Gestion des transactions avec les composants DOA
    Par lper dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/12/2008, 17h06
  3. [DLL] Gestions des ressources textes (StringTable)
    Par Clorish dans le forum Langage
    Réponses: 1
    Dernier message: 26/05/2005, 17h50
  4. Class de gestion des images avec rotation
    Par Johnny Boy dans le forum MFC
    Réponses: 1
    Dernier message: 03/05/2005, 12h54
  5. [Swing] Gestion des ressources
    Par speedster dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 13/11/2004, 16h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo