Aller à : navigation, rechercher

Gestion de la mémoire


Introduction

La notion d'utilisation et d'allocation de mémoire n'est pas réellement chose simple.
En effet, il est très difficile d'évaluer le rapport entre la puissance d'un ordinateur et le travail qu'on lui demande.


Utiliser Autopano permet une multitude de possibilités, de l'assemblage de panoramas de vacances de quelques photos, jusqu'au panorama gigapixels de 1000, 2346 ou même 12000 photos, tout en passant par le bracketing et les nombreux formats d'images.


Il est n'est pas forcément nécessaire de comprendre cette gestion (bien moins simple qu'elle ne peut paraitre sous un curseur et quelques chiffres) pour utiliser Autopano.
Cependant, les informations de cette page permettront de pouvoir estimer justement la charge de travail demandée à Autopano, suivant les spécifications de son ordinateur.

Définition

La mémoire attribuée à Autopano est définie en pourcentage de la mémoire disponible au démarrage de l'application. Toute la mémoire n'est pas forcément utilisée.
Selon les systèmes, la mémoire utilisable par une application est limitée (notamment pour les systèmes 32 bits). Il faut également conserver une marge pour ne pas saturer le système.

Exemple d'allocation mémoire en mode 32 bits Exemple d'allocation mémoire en mode 64 bits
mode 32 bits mode 64 bits


La mémoire est réservée pour cacher les images utilisées par le logiciel. On distingue actuellement deux types de cache dans Autopano :

  • le premier est utilisé pour conserver les images affichées dans l'interface du logiciel (dans l’éditeur essentiellement).
  • le second sert aux images intermédiaires créées lors d'un rendu.


Un tiers de la mémoire disponible est attribuée au premier cache dans la limite de 500Mo. Le reste est attribué au second cache.

Principe

Premier cache

Le principe du premier est assez simple : Si une image est nécessaire, celle-ci est chargée et stockée en mémoire (même si elle n'est plus utilisée), tant qu'il reste du cache disponible.
Ceci permet d'accélérer les futurs accès éventuels aux images.


Second cache

Apparu avec la version 2.5 d'Autopano, il est la base nécessaire pour l’application des algorithmes complexes sur des images Gigapixels (l'Anti-ghost et le Multiband en gigapixel).

Celui-ci est un peu plus complexe car rien ne garantie qu'une image puisse tenir en mémoire. Ce cache est divisé en blocs de taille fixe.
Lorsque l’algorithme de rendu travaille sur une partie d'une image, un bloc est alors affecté à cette image pour la zone concernée.
Dans le même principe que précédemment, tant qu'il reste du cache, la zone est conservée en mémoire pour accélérer le prochain accès.


Cette notion de blocs explique les limitations de rendu :

  • une ligne d'une image doit pouvoir tenir dans un bloc (d'où la limite de largeur maximale selon la mémoire disponible)
  • pour l'Anti-fantôme il faut pouvoir analyser les données superposées en même temps (d'où la limite concernant le nombre maximum d'images superposées).
  • enfin lorsqu'une ligne du panorama est calculée, il faut charger les lignes concernées des images source. Il n'est pas nécessaire de les avoir toutes en même temps en mémoire, mais si pour une même ligne il faut décharger une zone (l'écrire sur disque) et la recharger pour la ligne suivante (lecture disque), un risque de surcharge des accès disques influera sur le temps de rendu qui sera d'autant plus long.


La taille des blocs de mémoire évolue par palier selon la mémoire totale disponible. Nous essayons de garantir un nombre de blocs permettant d'assembler la majorité des panoramas.
Ce fonctionnement par palier explique les messages de préventions qui peuvent surprendre.
En effet, il se peut qu'en augmentant la mémoire, la taille d'un bloc augmente (et donc la largeur maximale du panorama final) mais que le nombre total de blocs disponibles ai diminué (et donc moins de recouvrement autorisé pour l'Anti-fantôme).

En pratique

Pour illustrer ces cas limites, voici un exemple simple (6 images) où chaque image source peut tenir entièrement dans un bloc appartenant au cache (donc une image = 1 bloc) :


Snap0.gif


Pour appliquer l'Anti-fantôme sur l'image 2, Autopano a besoin de connaitre l'information de toutes les images qui la recouvre, c'est à dire les 5 autres images.
Chaque image source est également associée à une image contenant le résultat du découpage actuel (l'algorithme est itératif).
Il nous faut donc au minmum 12 blocs pour résoudre les contraintes d'Anti-fantôme sur l'image 2.


Pour rendre la première ligne du panorama, Autopano a besoin de :

  • 3 blocs : images 4, 5 et 6.
  • 3 blocs : résultat de l'anti-fantôme associé aux 3 images.
  • 1 bloc : première ligne dans le panorama de sortie.

Il nous faut donc 7 blocs. Cela peut fonctionner si nous possédons moins de blocs, en contrepartie d'une augmentation conséquente des lectures disque.


Imaginons que nous ne possédons que 5 blocs libres :
Une fois que l'image 4 et 5 auront été mélangées dans la ligne, il faudra libérer les blocs de l'image 4 pour charger l'image 6 en mémoire et finir le mélange de cette première ligne.
A la ligne suivante, il faudra donc recharger les blocs de l'image 4 pour commencer le mélange.
Comme nous avons dit qu'une image tenait entièrement dans un bloc (dans cet exemple), les images d'entrée seront entièrement relues pour chaque ligne du panorama de sortie, dû au manque de bloc.










Support technique / Documentation Autopano Pro / Documentation Autopano Giga