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é :
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).
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); } }
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 !
Partager