4.1.6 : Le format de données

Ce format de données est bien entendu completement récupérer du cours précédent. Et pour cause, il faut que les résultats soient comparables, donc avec la même bibliothèque de format de donnée. Nous allons en refaire la desciption détaillée, mais le lecteur perspicace peut bien entendu sauter à la prochaine section.

Le format de données est très simple : Un tableau à trois dimensions :

  • Nombre d'images
  • Largeur des images en pixels
  • Hauteur des images en pixels


Format de données interne



Les "images" seront décrites par des nombres floatant simple précision ce qui sera suffisant pour notre exemple. Ce format de données interne ne sera pas sauvegardé dans des fichiers mais nous permettra de manipuler nos images simplement.

La description de tels images se fait simplement avec la bibliothèque TensorAlloc.

Ces matrices à deux dimensions peuvent être décrites comme suit :

1
PTensor<float> matV(AllocMode::ALIGNED, nbRow, nbCol);		//V concentration


Où :

  • AllocMode::ALIGNED : demande l'allocation d'un tableau aligné
  • nbRow : donne le nombre de ligne du tenseur, donc la hauteur de l'image
  • nbCol : donne le nombre de colonnes du tenseur, donc la largeur de l'image


Afin d'empiller toutes ces images ensemble, nous allons utiliser le format HDF5 (Hierartical Data Format) qui permet de sauvergarder très simplement n'importe quel type de données.

Il convient néanmoins de rappeler que plus un format de données est plat, plus il sera rapide à lire et à écrire et plus il autorisera des calculs efficaces. Et on ne le dira jamais assez, mais plus il sera également simple à utiliser et à comprendre.


Cette tâche sera d'autant simplifiée par l'utilisation d'un générateur de code qui permet de faire cela très simplement :

  • PhoenixHDF5 : générateur de code qui permet de créer à la volée des classes qui gèrent des données en HDF5.


Note : le format HDF5 est vraiment très puissant et simple à utilser. L'utilisation d'un générateur de code ne permet pas de contourner une éventuelle difficulté mais juste de gagner du temps. Vous pouvez très bien créer cette classe vous-même si vous le souhaitez.


La description en .ph5 est vraiment minimale (appellons ce fichier MatrixHdf5.ph5) :

1
2
3
4
5
///@brief Matrix of the concentation of the U specie
MatrixHdf5[matrix]{
	///Matrix of the concentration of the U specie
	Tensor(float, nbRow, nbCol) tabMat[image];
}


Ce fichier peut être téléchargé ici.

Ensuite, il faut lancer la commande suivante dans le dossier (GrayScottGpuCuda/DataFormat) :

phoenix_hdf5 -i MatrixHdf5.ph5


Qui nous donnera les deux fichiers :

  • MatrixHdf5.h
  • MatrixHdf5.cpp


Ils décrivent la classe MatrixHdf5 qui nous permettra de lire et d'écrire nos données en HDF5.