PRISM v7 et la mémoire

Il existe deux types de version de Windows, les versions 32 bits et les version 64 bits, ou OS 32 ou 64 bits.

PRISM v7 est un programme compilé en 32 bits, donc même sous un OS64 bits il ne pourra pas allouer plus de 4 Gb de mémoire.
Sous XP, c'est plus compliqué, mais pour simplifier, il ne peut pas allouer plus que 2Gb de mémoire ou 3Gb si le commutateur /3GB est mis dans le fichier caché boot.ini présent sous C:\

Pour information, une image contenant disons 11 millions de pixel, en mode entier (0 à 32767) occupe environ 22Mo de mémoire , on peut donc loger 45 images par Gb de RAM.
Cette même image en mode pixel réel (un pixel est un nombre à virgules codé sur 8 octets), on pourra loger sous ce même Gigabyte que 22 images.

Évidemment, il faut que le système les offre, et PRISM n'est pas seul à fonctionner sur un PC.

On peut installer sur un PC de la mémoire vive, et l' étendre sur le disque par de la mémoire virtuelle (ou Swap) cela ralentit les applications qui ont un bout de leur mémoire sur le disque, mais c'est mieux que rien.

J'ai personnellement configuré ma mémoire virtuelle sous XP32 de cette façon (et j' ai 4 Gb de RAM):

J' ai autorisé que sur le disque G un espace aussi grand que 16800 MB (16.4 Gb) d' être alloué, sachant que sous XP 32 une application SEULE ne peut pas allouer plus de 2GB (ou 3GB sous certaines conditions).


 

Quelques travaux pratiques :

Je suis sous XP 32 sans le commutateur /3GB, avec 4Go de RAM et une mémoire virtuelle de 3Go sur le disque, et je veux faire la pile médiane de 15 images de 20D qui ont 8.5 millions de pixels en 32 bits par pixels (soit 32 mega par image en mémoire). Dans ce cas, il alloue 480MB de mémoire et la pile mediane se passe bien. Par contre, si je porte à 64 le nombre d' images, j' ai le message suivant (apres une minute) :

Un "out of memory" ou "plus de mémoire" !

Avec un logiciel comme Process Explorer, il est facile de voir pourquoi : Prism à alloué 1.9 Go apres avoir chargé 63 images, et s' appretait à en allouer 32Mo de plus pour la derniere... et ça passe plus, car je passe la barre des 2Go pour une application: tout est normal (hélas) ! Le cas n°3 va vous montrer comment s'en tirer.


Je suis sousVista 64, avec 4Go de RAM et une mémoire virtuelle de 4Gb sur le disque, et je veux faire la pile médiane de 100 images de 20D qui ont 8.5 millions de pixels en 32 bits par pixels. Dans ce cas, il alloue 3.5 Go de mémoire et ca passe trés bien avec un bon résultat comme le montre la capture d'écran suivante :

Attention, il faut au moins la version 7.2.11 de Prism pour y arriver, car cette version a été crée avec une option speciale (LARGEADRESSAWARE), cela ne fonctionnera pas avec les version précédentes de Prism, même avec Vista64, la barre des 2 Go restera là. Pour le verifier dans le "à propos" du logiciel :

Il indique combien de mémoire PRISM peut adresser au maximum et si c'est une version 32 bits ou 64 de l'OS.
Par contre une allocation d'images superieure a 4Go ne fonctionnera pas (c'est plus de 125 images de 32Mo) , PRISM n'est pas encore un programme 64 bits natif, c'est un logiciel 32 bits.


Je suis sous XP pro 32, avec 4Go de RAM et une mémoire virtuelle de 4Gb sur le disque. Le commutateur /3GB dans le fichier boot.ini qui est actif.
Avec ce commutateur, j'autorise les applications qui le peuvent, à allouer jusqu'à 3Go.
La je vais faire une médiane de 79 images (chaque fichier image occupe 32 Mo en mémoire). Ca fonctionne très bien, au bout de 4 minutes j'ai le resultat de ma pile médiane, il a alloué 2.7Go ce qui est supérieur à la barre des 2Go que j'avais dans le cas n°1 !

note 1: toute demande de mémoire au dela de 3Go (soit plus de 94 images de 32 Mo) aboutira au message "Out of memory" ou "Plus de mémoire". Dans ce cas, il faut utiliser Vista 64 ou Windows7 x64 et se retrouver dans le cas n°2, on pourra gagner un gigaoctet de plus (mais pas plus !).

note 2 : le commutateur /3GB offre une possibilité intéressante, mais il y a une contrepartie à cela : La mémoire que le noyau (kernel) peut addresser passer de 2Go à 1Go ! Quelles en sont les conséquences ? La partie mémoire utilisé pour stocker les graphiques (ou menus) dit GDI dans les fenêtres de vos application va se réduire comme peau de chagrin. Ce qui veut dire que si vous avez l'habitude de travailler avec bcp d'applications ouvertes en même temps, ces applications peuvent ne plus rafraichir leur fenêtres, ne plus démarrer ou se comporter bizarrement. Le commutateur /3Gb est interessant pour les usages mono-application -Prism- avec de grosses quantités de grandes images à traiter.
Pour ne plus être ennuyé par tout cela, solution radicale : passer à un OS 64 bits, mais votre driver SBIG (par exemple) écrit pou un OS32 bits ne fonctionnera plus !!



Informations diverses

Mémoire maximum que l'on peut installer :

Microsoft Windows XP Professional (dit OS 32 bits)
4 Gb
Microsoft Windows XP Professional x64 Edition (dit OS 64 bits)
128 Gb
Microsoft Vista x64 Edition pro (dit OS 64 bits)
128 Gb
Microsoft Windows 7 x64 Edition professionnal / enterprise / ultimate (dit OS 64 bits)
192 Gb
Microsoft Windows 7 x64 Edition Starter (dit OS 64 bits)
8 Gb
Microsoft Windows 7 x64 Edition Home basic
8 Gb
Microsoft Windows 7 x64 Edition Premium
16 Gb
Microsoft Vsita x64 Edition Basic
8 Gb
Microsoft Vsita x64 Edition Premium
16 Gb

 

 
OS 32 bits
OS 64 bits
Quantité de mémoire adressable par une application 32 bits
2 GB (3 GB si le commutateur /3GB est ajouté au fichier Boot.ini)
2 GB (4 GB si l'option /LARGEADDRESSAWARE est utilisé)
Quantité de mémoire adressable par une application 64 bits
non applicable
8 TB
Paged pool (memoire sur disque dur pour les appli, par appli)
Vista : 2Gb
Xp : 490Mb
128 Gb
Unpaged pool (memoire sur disque dur pour les drivers, par driver)

Vista : 2Gb
256 Mb

128 Gb

ICI un tout petit programme de test qui essaie d'allouer beaucoup de mémoire

Sous Windows 7, x64 : 3.6Go ont pu être alloués.

Sous XP32 sans le commutateur /3Gb, seuls 1.5Go ont pu être alloués :

 

Annexes :


C.Cavadore, Sept 2009