Bonjour,
j'implémente un algorithme de calcul et je voulais savoir si la class Vector du STL optimise le temps de calcul ou que je doit implémenter ma propre classe template Vector (plus allégée que celle du la STL) ?
Merci de m'éclairer,
++
Version imprimable
Bonjour,
j'implémente un algorithme de calcul et je voulais savoir si la class Vector du STL optimise le temps de calcul ou que je doit implémenter ma propre classe template Vector (plus allégée que celle du la STL) ?
Merci de m'éclairer,
++
Il n'y a pas de classe Vector dans la STL.
Il y a vector, mais ça n'a rien à voir avec le calcul.
pour la performance des calculs, il est possible, mais très difficile de faire mieux que la lib <algorithm> de la STL (cf. ma signature) qui utilise les conteneurs de cette même STL (dont la classe vecteur fait partie).
Merci pour vos réponse,
Je vais creuser cela, et je vous tiens au courant.
++
Pour des calculs numériques, la classe std::valarray était initialement prévue pour ce genre de choses (en particulier par un aliasing réduit), mais par manque d'attention, et est assez peu populaire actuellement, et il n'est pas certain que l'implémentation livrée avec ton compilateur soit optimale.
std::vector est une classe générique, qui a de bonnes performances globales, mais qui n'est pas spécialisée pour du calcul numérique.
Il existe aussi de nombreuses bibliothèques dédiées au calcul numérique (MTL, Blitz++,...).
Il faudrait en savoir plus sur ce que tu souhaites faire pour pouvoir mieux te guider.
A noter que les compilateurs ne vont pas vraiment faire d'optimisation avec des std::vector...
Par exemple:
ne sera pas beaucoup optimisé...Code:
1
2
3
4
5
6
7
8 std::vector<float> vec1; std::vector<float> vec2; std::vector<float> vec3; std::vector<float> result; for (int i = 0; (i < length); ++i) result.push_back(vec1[i] * vec2[i] + vec3[i]);
alors que:
Va utiliser les instructions SSE....Code:
1
2
3
4
5
6
7
8 float[] vec1; float[] vec2; float[] vec3; float[] result; for (int i = 0; (i < length); ++i) result[i] = vec1[i] * vec2[i] + vec3[i];
J'ai pas essayé ce code sur mes compilos favoris, mais je doute qu'ils utilisent des instructions SSE. Tu peux nous montrer le code assembleur généré par ton compilo, stp. (Donne moi également le petit programme de test en entier stp, ainsi que les options de compilation)
Il va surtout pas compiler, ce code.
Et c'est normal que ce soit différent, push_back n'est pas la même chose que machin[i] =
Oui, effectivement, j'avais passé sous silence les déclarations erronées.
Et il compare un push_back avec un tableau[i], j'avais pas fait de commentaire non plus.
Ce qui m'intéresse plus, c'est l'affirmation "Va utiliser les instructions SSE....".
Je voudrais des explications.