5.2.1.2.1 : Les includes
Afin d'avoir une certaine généricité dans notre code, nous utiliserons l'include qui nous permet d'avoir accès à la taille des registres vectoriels de la machine hôte PLIB_VECTOR_SIZE_BYTE_FLOAT, dont nous aurons besoin dans la partie suivante :
1 |
#include "phoenix_intrinsics.h"
|
Nous aurons besoin de la fonction std::transform qui est disponible dans algorithm et d'un mode d'execution qui est définit dans execution :
1 2 |
#include <algorithm> #include <execution> |
Nous n'oublions pas la fonction de calcul intrinsèque :
1 |
#include "intrinsics_propagation.h"
|
Enfin, nous incluons notre header :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#include "intrinsics_propagation_block.h" ///Propagate the U and V species in the matVecVecU and matVecV for blocks /** @param[out] outMatVecU : updated matrix U version (with vectorial neighbours) * @param[out] outMatVecV : updated matrix V version (with vectorial neighbours) * @param matVecVecU : input of matrix U (with vectorial neighbours) * @param matVecV : input of matrix V (with vectorial neighbours) * @param matBroadcastDeltaSquare : matrix of the delta square values (with broadcast neighbours) * @param nbStencilRow : number of rows of the matrix matBroadcastDeltaSquare * @param nbStencilCol : number of columns of the matrix matBroadcastDeltaSquare * @param diffusionRateU : diffusion rate of the U specie * @param diffudionRateV : diffusion rate of the V specie * @param feedRate : rate of the process which feeds U and drains U, V and P * @param killRate : rate of the process which converts V into P * @param dt : time interval between two steps */ void grayscott_propagation_compute_block(PBlock<float> & outMatVecU, PBlock<float> & outMatVecV, const PBlock<float> & matVecVecU, const PBlock<float> & matVecVecV, const float * matBroadcastDeltaSquare, long nbStencilRow, long nbStencilCol, float diffusionRateU, float diffusionRateV, float feedRate, float killRate, float dt) { size_t nbRow(outMatVecU.getFullNbRow()), nbCol(outMatVecU.getNbCol()); grayscott_propagation(outMatVecU.getData(), outMatVecV.getData(), matVecVecU.getData(), matVecVecV.getData(), nbRow, nbCol, matBroadcastDeltaSquare, nbStencilRow, nbStencilCol, diffusionRateU, diffusionRateV, feedRate, killRate, dt); } void grayscott_propagation_compute_block_dummy(PBlock<float> & outMatVecU, PBlock<float> & outMatVecV, // const PBlock<float> & matVecVecU, const PBlock<float> & matVecVecV, const float * matBroadcastDeltaSquare, long nbStencilRow, long nbStencilCol, float diffusionRateU, float diffusionRateV, float feedRate, float killRate, float dt) { } |