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
[WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|