4.2.1.1 : Le header vectorized_propagation.h



Écrivons le fichier vectorized_propagation.h :



Comme d'habitude, il faut commencer par définir des macro qui éviterons les inclusions multiples de notre header :

1
2
#ifndef __VECTORIZED_PROPAGATION_H__
#define __VECTORIZED_PROPAGATION_H__


Un petit include des familles :

1
#include <iostream>


Le prototype de notre fonction :

1
2
3
4
void grayscott_propagation(float * __restrict__ poutMatU, float * __restrict__ poutMatV, const float * __restrict__ pmatU, const float * __restrict__ pmatV,
			long nbRow, long nbCol,
			const float * matDeltaSquare, long nbStencilRow, long nbStencilCol,
			float diffudionRateU, float diffusionRateV, float feedRate, float killRate, float dt);


Où :
  • outMatU : est le résultat du calcul pour l'espèce U
  • outMatV : est le résultat du calcul pour l'espèce V
  • matU : est la concentration initiale de l'espèce U
  • matV : est la concentration initiale de l'espèce V
  • nbRow : est le nombre de lignes des matrices précédentes
  • nbCol : est le nombre de colonnes des matrices précédentes
  • matDeltaSquare : est la matrice de poids que nous avons évoqués précédemment (section 4.1.1.1)
  • nbStencilRow : le nombre de lignes de cette matrice de poids (pour nous ce sera 3)
  • nbStencilCol : le nombre de colonnes de cette matrice de poids (pour nous ce sera 3)
  • diffudionRateU : le taux de diffusion de l'espèce U
  • diffusionRateV : le taux de diffusion de l'espèce V
  • feedRate : la vitesse du processus qui nourrit U et tue V et P
  • textbfkillRate : le taux de conversion de V en P
  • dt : l'intervalle de temps du calcul (plus il est petit plus le calcul sera précis noteBien sûr, si vous mettez un nombre dénormalisé comme pas de temps ça n'a aucun sens et vos résultats seront tout pourri, mais je me comprends.)


Et où le mot clé __restrict__ signifie au compilateur que les différents pointeurs passés en paramètres ne se recouvrent pas ce qui lui permet de faire plus d'optimisations.

Et finalement la fin de la condition du préprocesseur :

1
#endif


Le fichier vectorized_propagation.h complet :

1
2
3
4
5
6
7
8
9
10
11
12
13
/***************************************
	Auteur : Pierre Aubert
	Mail : pierre.aubert@lapp.in2p3.fr
	Licence : CeCILL-C
****************************************/
#ifndef __VECTORIZED_PROPAGATION_H__
#define __VECTORIZED_PROPAGATION_H__
#include <iostream>
void grayscott_propagation(float * __restrict__ poutMatU, float * __restrict__ poutMatV, const float * __restrict__ pmatU, const float * __restrict__ pmatV,
			long nbRow, long nbCol,
			const float * matDeltaSquare, long nbStencilRow, long nbStencilCol,
			float diffudionRateU, float diffusionRateV, float feedRate, float killRate, float dt);
#endif


Vous pouvez le télécharger ici.