Optimisation accès fichier (ifstream)
Bonjour,
j'ai développé une classe qui contient plusieurs fonctions qui vont lire des fichiers à un index particulier et en déduisent une valeur. Un exemple très simplifié :
Code:
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 26 27
|
#define SIZE_OF_DOUBLE (sizeof(double))
class module {
private:
std::ifstream file;
public:
module() {
file.open("path.bin, ios::in | ios::binary");
}
getValue(const double x, const double y) {
double value[4][4];
unsigned int index = calcul(x, y); // Transformation des paramètres d'entrée en index
file.seekg(index*SIZE_OF_DOUBLE, ios::beg);
file.read(reinterpret_cast<char *> (&value[0]), 4*SIZE_DOUBLE);
file.seekg(ligne_suivante*SIZE_OF_DOUBLE, ios::cur);
file.read(reinterpret_cast<char *> (&value[1]), 4*SIZE_DOUBLE);
file.seekg(ligne_suivante*SIZE_OF_DOUBLE, ios::cur);
file.read(reinterpret_cast<char *> (&value[2]), 4*SIZE_DOUBLE);
file.seekg(ligne_suivante*SIZE_OF_DOUBLE, ios::cur);
file.read(reinterpret_cast<char *> (&value[3]), 4*SIZE_DOUBLE);
return bicubicInterpo(x, y, values);
}
} |
Ceci n'est qu'un exemple. J'ai une 20aine de fonctions similaires à getValue() et à peu près le même nombre d'ifstream qui pointent sur des fichiers qui font entre 5 et 10Mo (soit un total d'environ 150Mo).
Auriez-vous un conseil pour d'une part l'optimiser car j'appelle plusieurs centaines de millions de fois chaque fonction et d'autre part, si je devais passer au multi-thread, que puis-je faire pour le rendre thread-safe car quand j'essaye de paralléliser avec openmp, j'ai un segfault (j'imagine que ce cela vient de l'accès au ifstream).
Merci d'avance !