PureBasic

Forums PureBasic
Nous sommes le Mar 23/Oct/2018 9:18

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 1 message ] 
Auteur Message
 Sujet du message: Parallélisation (BenchMark C++/OpenMP vs PB )
MessagePosté: Ven 21/Sep/2018 22:03 
Hors ligne

Inscription: Dim 10/Jan/2010 5:29
Messages: 3328
Pourrais ton avoir la possibilité comme le permet OpenMP de paralléliser ses boucles ?

par exemple :

Citation:
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:
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()


En C++ sans OpenMP & g++ 6.3.0 & l'option de compilation -O1:

Code:
#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;
}


En c++ avec OpenMP & g++ 6.3.0 & l'option de compilation -O1 :
Code:
#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;
}

C'est le même code mais avec une macro devant la double boucle...

Les résultats sont édifiants :

    PureBasic------------> 11132ms
    C++ -O1----------------> 2286ms
    C++ -O1 & OpenMP--> 576ms


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 1 message ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye