Bonjour,
Jusqu'à présent j'ai codé en Matlab mes modèles de simulations de fluide. Jusqu'à présent tout le monde me disait que je devrais utiliser c++ (ou fortran) c'est plus rapide.
Aujourd'hui je me suis dit qu'on allait essayer... Je n'arrive pas à la même conclusion, j'aimerai donc un peu de vos lumières (je suis débutant en c++).
En Matlab il faut à mon PC 0.176 secondes pour faire la somme élément à élément de deux matrices contenant 5000x5000 nombres aléatoires (double précision).
En C++ il lui faut 1.46 (presque 10 fois plus lent)!
Alors comme je débute en C++, je ne fais peut être pas les choses correctement. Je ne suis pas arrivé à trouver de bibliothèque qui me permette de faire des opérations à la volé entre 2 tableaux en c++ comme on peut le faire en Matlab. J'ai donc 2 boucles imbriquées... Bref, je vous met le code ci-dessous (les fonctions tic toc sont codés ailleurs, j'ai utilisé ça: http://www.cplusplus.com/reference/ctime/).
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 #include "tic_toc.h" #include <iostream> #include <stdlib.h> #include <time.h> using namespace std; int main() { int n(5000); double* A = new double[n*n]; double* B = new double[n*n]; double* C = new double[n*n]; int i(0); int j(0); for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { A[i*j] = float(rand() % 100000)/100000; B[i*j] = float(rand() % 100000)/100000; } } tic(); for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { C[i*j] = A[i*j] + B[i*j]; } } toc(); delete[] A; delete[] B; delete[] C; system("pause"); return 0; }
J'ai quand même remarqué qu'en utilisant ça
le temps de l'opération tombait 0.23 secondes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 for (i = 0; i < n*n; i++) { C[i] = A[i] + B[i]; }
Pouvez vous me m'expliquer si bon benchmark est comparable, s'il y a d'autres moyens de faire en c++ (une librairie?) etc.
NB: Je ne parallélise pas car mon Matlab s’exécute sur un cœur. A terme je compte bien passer en c++ pour pouvoir paralléliser mes modèles.
Merci d'avance pour votre aide/explications.
Partager