Ceci est mon implémentation naïve du produit scalaire:Pourquoi std :: inner_product est-il plus lent que l'implémentation naïve?
float simple_dot(int N, float *A, float *B) {
float dot = 0;
for(int i = 0; i < N; ++i) {
dot += A[i] * B[i];
}
return dot;
}
Et cela est d'utiliser la bibliothèque C++:
float library_dot(int N, float *A, float *B) {
return std::inner_product(A, A+N, B, 0);
}
J'ai couru une référence (code est ici https://github.com/ijklr/sse), et la version de la bibliothèque est un beaucoup plus lent. Mon drapeau de compilateur est -Ofast -march=native
Utiliser '0.0f' comme valeur initiale. –
Que se passe-t-il si vous modifiez 0 à 0f dans l'appel à inner_product? – NathanOliver
Vous devriez être capable de regarder l'implémentation de la bibliothèque comme un modèle. –