Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Membre actif 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 : 27
    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 : 158
    Points
    158

    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/Modérateur
    Avatar de bafman
    Profil pro Michel de Verdelhan
    Développeur informatique
    Inscrit en
    novembre 2003
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Nom : Michel de Verdelhan
    Âge : 30
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : novembre 2003
    Messages : 2 576
    Points : 4 993
    Points
    4 993

    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 actif 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 : 27
    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 : 158
    Points
    158

    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/Modérateur
    Avatar de bafman
    Profil pro Michel de Verdelhan
    Développeur informatique
    Inscrit en
    novembre 2003
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Nom : Michel de Verdelhan
    Âge : 30
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : novembre 2003
    Messages : 2 576
    Points : 4 993
    Points
    4 993

    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 Expert

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

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : août 2002
    Messages : 1 055
    Points : 1 441
    Points
    1 441

    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/Modérateur
    Avatar de bafman
    Profil pro Michel de Verdelhan
    Développeur informatique
    Inscrit en
    novembre 2003
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Nom : Michel de Verdelhan
    Âge : 30
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : novembre 2003
    Messages : 2 576
    Points : 4 993
    Points
    4 993

    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •