charm AT lists.siebelschool.illinois.edu
Subject: Charm++ parallel programming system
List archive
- From: SAGAR SHEDGE <sagar.shedge92 AT gmail.com>
- To: charm AT cs.uiuc.edu
- Subject: [charm] About example of commLib
- Date: Mon, 27 Jun 2011 17:11:06 +0530
- List-archive: <http://lists.cs.uiuc.edu/pipermail/charm>
- List-id: CHARM parallel programming system <charm.cs.uiuc.edu>
Respected Sir/Mam,
I am trying to run code from examples/commlib/multicast. But it gives me following error.
Also I am sending code.
So please give me solution.
Error is :-
gm.C:20:97: warning: deprecated conversion from string constant to ‘char*’
pgm.C:20:97: warning: deprecated conversion from string constant to ‘char*’
pgm.C:20:97: warning: deprecated conversion from string constant to ‘char*’
pgm.C: In constructor ‘Main::Main(CkArgMsg*)’:
pgm.C:78:61: error: no matching function for call to ‘DirectMulticastStrategy::DirectMulticastStrategy(CProxy_Destination&)’
/home/sagee/charm-6.2/net-linux-local-tcp-gcc/bin/../include/DirectMulticastStrategy.h:50:5: note: candidates are: DirectMulticastStrategy::DirectMulticastStrategy()
/home/sagee/charm-6.2/net-linux-local-tcp-gcc/bin/../include/DirectMulticastStrategy.h:47:5: note: DirectMulticastStrategy::DirectMulticastStrategy(CkMigrateMessage*)
/home/sagee/charm-6.2/net-linux-local-tcp-gcc/bin/../include/DirectMulticastStrategy.h:23:57: note: DirectMulticastStrategy::DirectMulticastStrategy(const DirectMulticastStrategy&)
pgm.C:79:41: error: cannot convert ‘CharmStrategy*’ to ‘Strategy*’ for argument ‘1’ to ‘ComlibInstanceHandle ComlibRegister(Strategy*)’
pgm.C:81:44: error: no matching function for call to ‘RingMulticastStrategy::RingMulticastStrategy(CProxy_Destination&)’
/home/sagee/charm-6.2/net-linux-local-tcp-gcc/bin/../include/RingMulticastStrategy.h:31:5: note: candidates are: RingMulticastStrategy::RingMulticastStrategy(CkMigrateMessage*)
/home/sagee/charm-6.2/net-linux-local-tcp-gcc/bin/../include/RingMulticastStrategy.h:30:5: note: RingMulticastStrategy::RingMulticastStrategy()
/home/sagee/charm-6.2/net-linux-local-tcp-gcc/bin/../include/RingMulticastStrategy.h:18:55: note: RingMulticastStrategy::RingMulticastStrategy(const RingMulticastStrategy&)
pgm.C:82:39: error: cannot convert ‘CharmStrategy*’ to ‘Strategy*’ for argument ‘1’ to ‘ComlibInstanceHandle ComlibRegister(Strategy*)’
pgm.C:84:18: error: expected type-specifier before ‘MultiRingMulticast’
pgm.C:84:18: error: cannot convert ‘int*’ to ‘CharmStrategy*’ in assignment
pgm.C:84:18: error: expected ‘;’ before ‘MultiRingMulticast’
pgm.C:85:44: error: cannot convert ‘CharmStrategy*’ to ‘Strategy*’ for argument ‘1’ to ‘ComlibInstanceHandle ComlibRegister(Strategy*)’
pgm.C: In constructor ‘Source::Source(int, int*)’:
pgm.C:112:53: error: invalid conversion from ‘ComlibInstanceHandle*’ to ‘ComlibInstanceHandle’
pgm.C:112:53: error: initializing argument 1 of ‘void ComlibAssociateProxy(ComlibInstanceHandle, CProxy&)’
pgm.C:115:49: error: invalid conversion from ‘ComlibInstanceHandle*’ to ‘ComlibInstanceHandle’
pgm.C:115:49: error: initializing argument 1 of ‘void ComlibAssociateProxy(ComlibInstanceHandle, CProxy&)’
pgm.C:118:59: error: invalid conversion from ‘ComlibInstanceHandle*’ to ‘ComlibInstanceHandle’
pgm.C:118:59: error: initializing argument 1 of ‘void ComlibAssociateProxy(ComlibInstanceHandle, CProxy&)’
Fatal Error by charmc in directory /home/sagee/charm-6.2/net-linux-local-tcp-gcc/examples/charm++/commlib/multicast
Command g++ -fPIC -Wno-deprecated -I/home/sagee/charm-6.2/net-linux-local-tcp-gcc/bin/../include -D__CHARMC__=1 -c pgm.C -o pgm.o returned error code 1
charmc exiting...
make: *** [pgm.o] Error 1
--
Sagar Dilip Shedge,
C-DAC R&D,
Pune.
With Regards.
#include <stdlib.h>
#include <alloca.h>
#include <time.h>
#include <string.h>
#include "pgm.h"
/* Proxies to allow charm structures to talk to each other */
CProxy_Main mainProxy;
CProxy_Source src;
CProxy_Destination dest;
/* Declaration of the three readonly variables used to hold the instances of
multicast strategies. In this way the association with the ProxySections can
be performed on any processor. */
ComlibInstanceHandle strat_direct;
ComlibInstanceHandle strat_ring;
ComlibInstanceHandle strat_multiring;
char *strategyName[3] = {"DirectMulticastStrategy", "RingMulticastStrategy", "MultiRingStrategy"};
Main::Main(CkArgMsg *m) {
count = 0;
// some hardcoded values
nsrc = 1000;
ndest = 1000;
int mcastFactor = 50;
iteration = 0;
mainProxy = thishandle;
// create the random mapping of sender-receiver
char **matrix = (char **) alloca(nsrc * sizeof(char*));
matrix[0] = (char *) malloc(nsrc * ndest * sizeof(char));
memset(matrix[0], 0, nsrc * ndest * sizeof(char));
for (int i=1; i<nsrc; ++i) matrix[i] = matrix[i-1] + ndest;
srand48(time(NULL));
for (int i=0; i<nsrc; ++i) {
for (int j=0; j<mcastFactor; ++j) {
int k = int(drand48() * ndest);
matrix[i][k] = 1;
}
}
// create the source and destination proxies
src = CProxy_Source::ckNew();
int *indices = (int *) alloca (mcastFactor * sizeof(int));
for (int i=0; i<nsrc; ++i) {
int idx = 0;
//CkPrintf("%d: sending to ",i);
for (int j=0; j<ndest; ++j) {
if (matrix[i][j] > 0) {
indices[idx++] = j;
//CkPrintf("%d ",j);
}
}
//CkPrintf("\n");
src[i].insert(idx, indices);
}
src.doneInserting();
dest = CProxy_Destination::ckNew();
int empty = 0;
for (int i=0; i<ndest; ++i) {
int cnt = 0;
for (int j=0; j<nsrc; ++j)
if (matrix[j][i] > 0) cnt++;
//CkPrintf("dest %d: receiving from %d\n",i,cnt);
dest[i].insert(cnt);
if (cnt == 0) empty++;
}
dest.doneInserting();
ndest -= empty;
// create the strategies and register them to commlib
CharmStrategy *strategy = new DirectMulticastStrategy(dest);
strat_direct = ComlibRegister(strategy);
strategy = new RingMulticastStrategy(dest);
strat_ring = ComlibRegister(strategy);
strategy = new MultiRingMulticast(dest);
strat_multiring = ComlibRegister(strategy);
CkPrintf("Starting new iteration\n");
src.start(++iteration);
}
/* invoked when the multicast has finished, will start next iteration, or end the program */
void Main::done() {
if (++count == ndest) {
CkPrintf("Iteration %d (%s) finished\n", iteration,strategyName[iteration-1]);
count = 0;
if (iteration == 3) CkExit();
else {
CkPrintf("Starting new iteration\n");
src.start(++iteration);
}
}
}
Source::Source(int n, int *indices) {
CkArrayIndexMax *elems = (CkArrayIndexMax*) alloca(n * sizeof(CkArrayIndexMax));
for (int i=0; i<n; ++i) elems[i] = CkArrayIndex1D(indices[i]);
/* Create the ProxySections and associate them with the three different
instances of commlib multicasts. */
direct_section = CProxySection_Destination::ckNew(dest, elems, n);
ComlibAssociateProxy(&strat_direct, direct_section);
ring_section = CProxySection_Destination::ckNew(dest, elems, n);
ComlibAssociateProxy(&strat_ring, ring_section);
multiring_section = CProxySection_Destination::ckNew(dest, elems, n);
ComlibAssociateProxy(&strat_multiring, multiring_section);
}
void Source::start(int i) {
MyMulticastMessage *msg = new (1000) MyMulticastMessage();
//CkPrintf("Source %d: starting multicast %d\n",thisIndex,i);
// Perform a multicast, using one of the strategies through the associated proxies
switch (i) {
case 1:
direct_section.receive(msg);
break;
case 2:
ring_section.receive(msg);
break;
case 3:
multiring_section.receive(msg);
break;
default:
CkAbort("Invalid iteration");
}
}
Destination::Destination(int senders) {
nsrc = senders;
waiting = senders;
//CkPrintf("dest %d: waiting for %d messages\n",thisIndex,senders);
}
void Destination::receive(MyMulticastMessage *m) {
delete m;
//CkPrintf("Destination %d: received, remaining %d\n",thisIndex,waiting);
if (--waiting == 0) {
// all messages received, send message to main
//CkPrintf("Destination %d: received all\n",thisIndex);
waiting = nsrc;
mainProxy.done();
}
}
#include "pgm.def.h"
Attachment:
pgm.ci
Description: Binary data
#include "comlib.h"
#include "pgm.decl.h"
extern CProxy_Main mainProxy;
extern CProxy_Source src;
extern CProxy_Destination dest;
extern ComlibInstanceHandle strat_direct;
extern ComlibInstanceHandle strat_ring;
extern ComlibInstanceHandle strat_multiring;
class MyMulticastMessage : public CkMcastBaseMsg, public CMessage_MyMulticastMessage {
public:
char *data;
};
class Main : public CBase_Main {
private:
int nsrc, ndest;
int count;
int iteration;
public:
Main(CkArgMsg *m);
void done();
};
class Source : public CBase_Source {
private:
/* local variables used to keep the sections for the multicast.
each of them will be associated with a specific strategy */
CProxySection_Destination direct_section;
CProxySection_Destination ring_section;
CProxySection_Destination multiring_section;
public:
Source(int n, int *list);
Source(CkMigrateMessage *m) {}
void start(int i);
};
class Destination : public CBase_Destination {
private:
int waiting;
int nsrc;
public:
Destination(int senders);
Destination(CkMigrateMessage *m) {}
void receive(MyMulticastMessage *m);
};
- [charm] About example of commLib, SAGAR SHEDGE, 06/27/2011
- [charm] About example of commLib, SAGAR SHEDGE, 06/29/2011
- Re: [charm] [ppl] About example of commLib, Ramprasad Venkataraman, 06/29/2011
- [charm] About example of commLib, SAGAR SHEDGE, 06/29/2011
Archive powered by MHonArc 2.6.16.