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 : 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
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 !