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
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];
	}
le temps de l'opération tombait 0.23 secondes.


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.