Bonjour
Je cherche à optimiser une opération que je répète un très grand nombre de fois, et qui correspond à une convolution (c'est en fait ici une dérivée seconde centrée discrétisée).
D'une manière simple, le code est le suivant :
Tous les tableaux sont des réels double précision.
DF est de taille 512*512 (1 à 512, 1 à 512).
F est de taille 514*514 (0 à 513, 0 à 513).
Le tableau M des coefficients est de taille 512*512*5 (1 à 512, 1 à 512, 1 à 5).
Il est possible que je me soit trompé dans l'ordre des boucles (i avant j, ou l'inverse, pour optimiser le cache). En principe, je code en Fortran, donc je ne connais pas les optimisations du C++.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 for ( j=0 ; j<=512 ; j++ ) { for ( i=0 ; i<=512 ; i++ ) { DF[i][j] = M[i][j][1] * F[i][j] + M[i][j][2] * F[i-1][j] + M[i][j][3] * F[i+1][j] + M[i][j][4] * F[i][j-1] + M[i][j][5] * F[i][j+1] ; } }
Ici, je cherche plutôt à utiliser la bibliothèque BLAS qui devrait me permettre de gagner un bon facteur 2 ou 3 sur cette opération. Cependant, après avoir lus la doc, je ne sais pas trop quel routine utiliser... Il doit falloir dérouler les boucles pour clarifier la chose.
Quelqu'un as-t-il déjà utilisé BLAS sur ce genre d'opérations ?
En vous remerciant d'avance
Moomba
Partager