Accueil > > > PARALLEL OBJECT PROGRAMMING IN C++ (POP-C++) : DEMO
PARALLEL OBJECT PROGRAMMING IN C++ (POP-C++) : DEMO
Information sur la source
Description
Voici un programme de démo qui a été écrit dans une extension de C++ (POP-C++). C'est un programme tout simple qui montre la création d'objets parallèles. POP-C++ est un outil qui permet de faire tourner un programme orienté objet en parallèle sur plusieurs machines (sous Linux). C'est un logiciel libre qui étend le langage C++ et permet de transformer très simplement des classes C++ en des classes parallèles. Les objets parallèles générés peuvent alors tourner indépendamment sur plusieurs machines. POP-C++ contient entre autre : - Un parseur qui génère le code de ces objets parallèles - Une gestion des threads pour permettre d'appeler des méthodes de manière synchrone/asynchrone ... - Une gestion des protocoles de communication, en particulier les socket tcpip, afin de passer des structures de données complexes entre différents objets. - ... Si vous êtes intéressés ou désirez installer le programme, je vous invite à visiter le wiki de POP-C++ et en particulier la page tutoriel : http://gridgroup.hefr.ch/popc/index.php/Quick_st art
Source
- ////// Fichier POPCobject.ph
- #ifndef POPCOBJECT_PH_
- #define POPCOBJECT_PH_
-
- #include <timer.h>
-
- parclass POPCobject
- {
- classuid(1500);
-
- public:
- POPCobject(int newID, int wanted, int minp) @{od.power(wanted, minp);};
- POPCobject(int newID, paroc_string machine) @{od.url(machine);};
- ~POPCobject();
-
- async seq void sendIDto([in] POPCobject &o);
- sync conc int getID();
- async conc void recAnID(int i);
- sync mutex void wait(int sec);
-
- private:
- int iD;
- Timer timer;
- double initTime, computeTime;
-
- };
-
- #endif /*POPCOBJECT_PH_*/
-
- ////// Fichier POPCobject.cc
-
- #include "POPCobject.ph"
- #include <unistd.h>
-
- POPCobject::POPCobject(int newID, int wanted, int minp)
- {
- printf("POPCobject with ID=%d created (by JobMgr) on machine:%s\n", newID, (const char*)paroc_system::GetHost());
- iD=newID;
- }
-
- POPCobject::POPCobject(int newID, paroc_string machine)
- {
- printf("POPCobject with ID=%d created on machine:%s\n", newID, (const char*)paroc_system::GetHost());
- iD=newID;
- }
-
- POPCobject::~POPCobject()
- {
- printf("POPCobject:%d on machine:%s is being destroyed\n", iD, (const char*)paroc_system::GetHost());
- iD=-1;
- }
-
- void POPCobject::sendIDto(POPCobject &o)
- {
- printf("POPCobject:%d on machine:%s is sending his iD to object:%d\n", iD, (const char*)paroc_system::GetHost(), o.getID());
- o.recAnID(iD);
- }
-
- int POPCobject::getID()
- {
- return iD;
- }
-
- void POPCobject::recAnID(int i)
- {
- printf("POPCobject:%d on machine:%s is receiving id = %d\n", iD, (const char*)paroc_system::GetHost(), i);
- }
-
- void POPCobject::wait(int sec)
- {
- printf("POPCobject:%d on machine:%s is waiting %d sec.\n", iD, (const char*)paroc_system::GetHost(), sec);
- sleep(sec);
- }
-
- @pack(POPCobject);
-
- ////// Fichier main.cc
- #include "POPCobject.ph"
-
- int main(int argc, char** argv)
-
- {
- if (argc<2)
- {
- printf("Usage: parocrun objmap %s NbObjects machine1, machine2, .... \n", argv[0]);
- return 0;
- }
- else
- {
- int nbObjects = atoi(argv[1]);
- POPCobject** objects=new POPCobject*[nbObjects];
-
- printf("\nSTART of %s program with %d objects\n", argv[0], nbObjects);
-
- for (int i = 0; i<argc-2; i++){
- if(argv[i+2][0]=='-'){
- // objects created by job manager
- objects[i]=new POPCobject(i+1, 60, 40);
- }
- else
- {
- // objects created on a given hostname
- objects[i]=new POPCobject(i+1, argv[i+2]);
- }
- }
- // The rest is created using hostname=localhost
- for (int i = argc-2; i<nbObjects; i++) objects[i]=new POPCobject(i+1, (paroc_string)("localhost"));
-
- // Send IDs to each other
- for (int i=0; i<(nbObjects-1); i++) objects[i]->sendIDto(*(objects[i+1]));
- objects[nbObjects-1]->sendIDto(*(objects[0]));
- objects[nbObjects-1]->wait(2);
- for (int i=0; i<nbObjects; i++) delete objects[i];
- delete objects;
- }
- printf("\nEND of %s program\n", argv[0]);
- return 0;
- }
////// Fichier POPCobject.ph
#ifndef POPCOBJECT_PH_
#define POPCOBJECT_PH_
#include <timer.h>
parclass POPCobject
{
classuid(1500);
public:
POPCobject(int newID, int wanted, int minp) @{od.power(wanted, minp);};
POPCobject(int newID, paroc_string machine) @{od.url(machine);};
~POPCobject();
async seq void sendIDto([in] POPCobject &o);
sync conc int getID();
async conc void recAnID(int i);
sync mutex void wait(int sec);
private:
int iD;
Timer timer;
double initTime, computeTime;
};
#endif /*POPCOBJECT_PH_*/
////// Fichier POPCobject.cc
#include "POPCobject.ph"
#include <unistd.h>
POPCobject::POPCobject(int newID, int wanted, int minp)
{
printf("POPCobject with ID=%d created (by JobMgr) on machine:%s\n", newID, (const char*)paroc_system::GetHost());
iD=newID;
}
POPCobject::POPCobject(int newID, paroc_string machine)
{
printf("POPCobject with ID=%d created on machine:%s\n", newID, (const char*)paroc_system::GetHost());
iD=newID;
}
POPCobject::~POPCobject()
{
printf("POPCobject:%d on machine:%s is being destroyed\n", iD, (const char*)paroc_system::GetHost());
iD=-1;
}
void POPCobject::sendIDto(POPCobject &o)
{
printf("POPCobject:%d on machine:%s is sending his iD to object:%d\n", iD, (const char*)paroc_system::GetHost(), o.getID());
o.recAnID(iD);
}
int POPCobject::getID()
{
return iD;
}
void POPCobject::recAnID(int i)
{
printf("POPCobject:%d on machine:%s is receiving id = %d\n", iD, (const char*)paroc_system::GetHost(), i);
}
void POPCobject::wait(int sec)
{
printf("POPCobject:%d on machine:%s is waiting %d sec.\n", iD, (const char*)paroc_system::GetHost(), sec);
sleep(sec);
}
@pack(POPCobject);
////// Fichier main.cc
#include "POPCobject.ph"
int main(int argc, char** argv)
{
if (argc<2)
{
printf("Usage: parocrun objmap %s NbObjects machine1, machine2, .... \n", argv[0]);
return 0;
}
else
{
int nbObjects = atoi(argv[1]);
POPCobject** objects=new POPCobject*[nbObjects];
printf("\nSTART of %s program with %d objects\n", argv[0], nbObjects);
for (int i = 0; i<argc-2; i++){
if(argv[i+2][0]=='-'){
// objects created by job manager
objects[i]=new POPCobject(i+1, 60, 40);
}
else
{
// objects created on a given hostname
objects[i]=new POPCobject(i+1, argv[i+2]);
}
}
// The rest is created using hostname=localhost
for (int i = argc-2; i<nbObjects; i++) objects[i]=new POPCobject(i+1, (paroc_string)("localhost"));
// Send IDs to each other
for (int i=0; i<(nbObjects-1); i++) objects[i]->sendIDto(*(objects[i+1]));
objects[nbObjects-1]->sendIDto(*(objects[0]));
objects[nbObjects-1]->wait(2);
for (int i=0; i<nbObjects; i++) delete objects[i];
delete objects;
}
printf("\nEND of %s program\n", argv[0]);
return 0;
}
Conclusion
L'output ressemble à cela :
parocrun object.map ./main 2 localhost 192.168.0.202
START of ./main program with 2 objects POPCobject with ID=1 created on machine:160.98.20.78 POPCobject with ID=2 created on machine:192.168.0.202 POPCobject:1 on machine:160.98.20.78 is sending his iD to object:2 POPCobject:2 on machine:192.168.0.202 is receiving id = 1 POPCobject:2 on machine:192.168.0.202 is sending his iD to object:1 POPCobject:1 on machine:160.98.20.78 is receiving id = 2 POPCobject:2 on machine:192.168.0.202 is waiting 2 sec.
END of ./main program POPCobject:1 on machine:160.98.20.78 is being destroyed [objectmonitor.cc:82]Check parallel objects....0 object alive /*------------------------------------------ -------------------------------------*/
Questions et remarques sont les bienvenues !
PS: Le code de POP-C++ ne tenait pas dans le .zip. Il faudra aller sur le site pour le télécharger. Je vous conseille vivement de prendre la version béta des sources de POP-C++. Le tutoriel ci-dessus explique l'installation.
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Threads & Sockets appliqués au jeu [ par LA_Tupac ]
Salut à tous les progueurs !!J'ouvre ce post pour receuillir des infos sur les techniques de prog reseau sous les jeux videos.Je bosse actuellement su
Thread en GTK+ [ par Yunchi ]
Bonjour,J'avais un projet gtk en C et il y'avait des threads dedans.J'aimerais savoir si il est possible de faire pareil avec GTK+Quand j'essaye de re
Communication en C avec le Port Parallèle ou série [ par No limite ]
Bonjour Je suis à la recherche d'info ou de tuto. pour la communication vers le port Parallèle ou série.Je début et je cherche a le faire en mode cons
A la recherche d'un cour pour les sockets MFC (visual studio 2008) [ par youssef_sympas ]
Bonjour tout le monde,Je cherche un cour pour la gestion des sockets avec les MFC pour visual studio 2008. Si vous avez un cour entre vos mains aidez
Rapidité des systèmes temps réel [ par morpheux74 ]
Bonjour,Voila je suis en ce moment sur un projet de traitement d'image qui doit fonctionner avec la meilleure performance possible.Je m'explique:J'ai
Port Parallèle en Input, Mode SPP [ par laulau47 ]
Bonjour, Je tente de faire fonctionner en C un port parallèle en lecture (mode HighZ input). Le driver du port parallèle est un driver ECP, son
sockets [ par coucoumiya ]
bonjour, moi je travaille avec les sockets sous le procole de transmission TCP/IP. mon client est programmé avec Builderc++ sous windows. mon serveur
aide sur les sockets en c [ par minuh ]
salut à vous je tente d'écrire une application sur les sockets en c j'ai lu dans un tutoriel qu'il fallait utiliser la fonction WSAStartup() quand je
Lecture du port parallèle sous XP par interruption externe [ par mfilleau ]
Bonjour, Je réalise un système de commande domotique à l'aide d'un micro PC portable (tournant sous Windows XP) ne possèdant pas de port série RS232,
acces à une machine distance avec les sockets [ par marwamouna ]
Bonsoir tout le monde, J'ai un projet à faire qui consiste se connecter à une machine distante en utilisant les sockets sans aucun protocole prédéfin
|
Derniers Blogs
FAIRE APPARAITRE L'ONGLET 'DéVELOPPEUR' DANS OFFICE 2010FAIRE APPARAITRE L'ONGLET 'DéVELOPPEUR' DANS OFFICE 2010 par neodante
La nouvelle interface d'Office 2010 à amener quelques modifications par rapport à celle de 2007. Certes mineures, ces modifications ont fait disparaître la case à cocher de l'onglet 'Développeur' en première page du panneau du 'bouton Office' (dans Office...
Cliquez pour lire la suite de l'article par neodante [ASTUCE] PATCH POUR MICROSOFT FORUMS NNTP BRIDGE V1[ASTUCE] PATCH POUR MICROSOFT FORUMS NNTP BRIDGE V1 par pierre
Si vous avez téléchargé comme moi Microsoft Forums NNTP Bridge V1 avant le 11 mars 2010 (voir [Astuce] Disponibilité de Microsoft Forum NNTP Bridge Version 1.0), un problème de date localisée pour les non anglais était présent. Un patch est disponibl...
Cliquez pour lire la suite de l'article par pierre PB LORS DE L'INSTALLATION SHAREPOINT 2010.PB LORS DE L'INSTALLATION SHAREPOINT 2010. par Patrick Guimonet
Lors de l'installation de SharePoint 2010, j'ai rencontré un problème de plantage à l'étape 5 du configuration Wizard. Ca se termine sur cet écran : Et en analysant le fichier de journalisation, on remarque vers la fin des 15000 et quelques lign...
Cliquez pour lire la suite de l'article par Patrick Guimonet [WF4] AJOUTER DES CONTRAINTES à UNE ACTIVITé (2/2)[WF4] AJOUTER DES CONTRAINTES à UNE ACTIVITé (2/2) par JeremyJeanson
Après mon précédent article qui attaque les contraintes par la fasse Nord de l'Everest. passons à la seconde possibilité offerte par WF4 pour valider une activité : la metadata . Je vous en ai déjà toucher un ou deux mots. La metadata dans WF4 est un élém...
Cliquez pour lire la suite de l'article par JeremyJeanson [WF4] AJOUTER DES CONTRAINTES à UNE ACTIVITé (1/2)[WF4] AJOUTER DES CONTRAINTES à UNE ACTIVITé (1/2) par JeremyJeanson
De WF3 à WF4 pas mal de choses on été changées pour faciliter la vie des développeurs, mais certain points peuvent sembler obscures. comme les contraintes. Pour vous guider, je me lance dans une série de deux articles. Ils présenterons deux approches poss...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods Konvertor (4.00)KONVERTOR (4.00)Le logiciel est un gestionnaire multimedia affichant, jouant et convertissant plus de 2000 format... Cliquez pour télécharger Konvertor
|