Bonjour,
Mon programme calcule pour des matrices de grande tailles (ici Q), une mise à jour de ses valeurs non nulles, via le produit d'éléments contenus dans une autre matrice R.
Q et R comptent de l'ordre de 500 lignes et 250 colonnes. Or j'utilise ce programme de nombreuses fois et je me suis rendu compte que si je souhaite obtenir un gain de temps d'exécution, il faut que j'optimise ce programme.
Avez-vous des techniques ou conseils ?
En particulier, je sais que les "if" sont à éviter, cependant je ne sais pas par quoi les remplacer. J'ai entendu parler de la possibilité d'intégrer la condition du "if" dans une boucle "for" précédente, sans succès.
Quelques valeurs :
M=252;
N=504;
GForder=8;
Code->rowDegree[i] contient des valeurs entre 3 et 5.
Merci d'avance,
Ci-dessous mon programme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 int i = 0; int j = 0; int l = 0; int k = 0 ; const int M = Code->M; const int N = Code->N; const int GForder = GF->M; for ( i = 0; i < M; i++){ for ( l = 0 ; l < GForder; l++){ for ( j = 0 ; j < Code->rowDegree[i] ; j++){ Q[i*GForder+l][(Code->H[i][j]-1)] = Qinit[i*GForder+l][(Code->H[i][j]-1)]; for (k = 0; k < i ; k++){ if ( R[k*GForder+l][(Code->H[i][j]-1)] != 0 ) Q[i*GForder+l][(Code->H[i][j]-1)] *= R[k*GForder+l][(Code->H[i][j]-1)] ; } for ( k = i+1 ; k < M ; k++){ if ( R[k*GForder+l][(Code->H[i][j]-1)] != 0 ) Q[i*GForder+l][(Code->H[i][j]-1)] *= R[k*GForder+l][(Code->H[i][j]-1)] ; } } } }
Partager