par exemple :
UseParallelFor
For i = 0 to 10000000
....
next
ou le mot clé UseParallelFor serait une directive de compilation afin que la boucle soit découpé & répercuté sur chaque cœur disponible.
je me suis amusé a faire un test de comparaison avec PB & g++:
En PB :
Code : Tout sélectionner
OpenConsole()
#SIZE = 100000
clock = ElapsedMilliseconds()
For i = 0 To #SIZE-1
For j = 0 To #SIZE-1
index = i + #SIZE * j
Next
Next
clock_stop = ElapsedMilliseconds() - clock
PrintN("Time : "+Str(clock_stop) + "ms")
PrintN("press enter to quit")
Input()
Code : Tout sélectionner
#include <iostream>
#include <cstdio>
#include <ctime>
#define SIZE 100000
int main() {
unsigned long int index;
std::clock_t start;
double duration;
start = std::clock();
for(unsigned long int i=0; i<SIZE; ++i){
for(unsigned long int j=0; j<SIZE; ++j){
index = i + SIZE * j;
}
}
duration = ( std::clock() - start ) / (double) CLOCKS_PER_SEC;
std::cout<<"Time : "<< duration * 1000 << "ms " << std::endl;
}
Code : Tout sélectionner
#include <iostream>
#include <cstdio>
#include <ctime>
#define SIZE 100000
int main() {
unsigned long int index;
std::clock_t start;
double duration;
start = std::clock();
#pragma omp parallel for
for(unsigned long int i=0; i<SIZE; ++i){
for(unsigned long int j=0; j<SIZE; ++j){
index = i + SIZE * j;
}
}
duration = ( std::clock() - start ) / (double) CLOCKS_PER_SEC;
std::cout<<"Time : "<< duration * 1000 << "ms " << std::endl;
}
Les résultats sont édifiants :
- PureBasic------------> 11132ms
C++ -O1----------------> 2286ms
C++ -O1 & OpenMP--> 576ms