Profilage de code C++ sur Linux : comment trouver les goulots d'étranglement ?
Bonjour, collègues ! J'écris une application à forte charge en C++ sous Linux. Je suis confronté à un problème : le programme fonctionne plus lentement que prévu, mais je n'arrive pas à comprendre où la performance se perd exactement. J'ai essayé d'insérer des mesures manuelles de temps avec
std::chrono, mais cela transforme le code en bouillie et ne donne pas une image complète.
Voici un exemple simplifié de mon code qui traite un grand ensemble de données :
#include <vector>
#include <algorithm>
#include <iostream>
void processData(const std::vector<int>& data) {
std::vector<int> result;
for (size_t i = 0; i < data.size(); ++i) {
if (data[i] % 2 == 0) {
result.push_back(data[i] * data[i]);
}
}
// Ensuite des calculs complexes...
std::sort(result.begin(), result.end());
for (auto& v : result) {
v = v % 1000;
}
}
int main() {
std::vector<int> data(1000000);
std::generate(data.begin(), data.end(), std::rand);
processData(data);
return 0;
}