Made tempo message a varsize message.
authorMilind Bhandarkar <milind@cs.uiuc.edu>
Tue, 29 Jun 1999 06:28:42 +0000 (06:28 +0000)
committerMilind Bhandarkar <milind@cs.uiuc.edu>
Tue, 29 Jun 1999 06:28:42 +0000 (06:28 +0000)
src/ck-core/tempo.C
src/ck-core/tempo.ci
src/ck-core/tempo.h

index 31e0d8da068a47ba7e91b175fdd33ba1bae66089..8fd95aab31b4a408bef88594801cde72644f362a 100644 (file)
@@ -1,38 +1,6 @@
 #include "charm++.h"
 #include "tempo.h"
 
-// static
-void *
-TempoMessage::pack(TempoMessage *in)
-{
-  int len = in->length + 3*sizeof(int) + sizeof(ArrayMessage);
-  void *themsg = CkAllocBuffer(in, len);
-  *((int *)themsg) = in->tag1;
-  *((int *)themsg + 1) = in->tag2;
-  *((int *)themsg + 2) = in->length;
-  memcpy(((int *)themsg + 3), in->data, in->length); 
-  char *tempmsg = ((char*)((int *)themsg+3))+in->length;
-  memcpy(tempmsg, (ArrayMessage *) in, sizeof(ArrayMessage));
-  delete in;
-  return(themsg);
-}
-
-// static
-TempoMessage *
-TempoMessage::unpack(void *in)
-{
-  int tag1 = *((int *) in);
-  int tag2 = *(((int *) in)+1);
-  int length = *(((int *) in) + 2);
-  void * data = (void *) (((int *) in) + 3);
-  void *buf = CkAllocBuffer(in, sizeof(TempoMessage));
-  TempoMessage *msg = new (buf) TempoMessage(tag1, tag2, length, data);
-  char *tempmsg = (char *) (((int *) in) + 3) + length;
-  memcpy((ArrayMessage *) msg, tempmsg, sizeof(ArrayMessage));
-  CkFreeMsg(in);
-  return msg;
-}
-
 Tempo::Tempo(void)
 {
   tempoMessages = CmmNew();
@@ -67,7 +35,7 @@ void Tempo::ckTempoRecv(int tag, void *buffer, int buflen)
 void 
 Tempo::ckTempoSend(int tag1,int tag2,void *buffer,int buflen, CkChareID cid)
 {
-  TempoMessage *msg = new TempoMessage(tag1, tag2, buflen, buffer);
+  TempoMessage *msg = new (&buflen, 0) TempoMessage(tag1, tag2, buflen, buffer);
   CProxy_TempoChare ptc(cid);
   ptc.tempoGeneric(msg);
 }
@@ -106,7 +74,7 @@ int Tempo::ckTempoProbe(int tag)
 void 
 TempoGroup::ckTempoBcast(int tag, void *buffer, int buflen, int bocid)
 {
-  TempoMessage *msg = new TempoMessage(tag, BCAST_TAG, buflen, buffer);
+  TempoMessage *msg = new (&buflen,0) TempoMessage(tag,BCAST_TAG,buflen,buffer);
   CProxy_TempoGroup ptg(bocid);
   ptg.tempoGeneric(msg);
 }
@@ -116,7 +84,7 @@ void
 TempoGroup::ckTempoSendBranch(int tag1, int tag2, void *buffer, int buflen, 
                               int bocid, int processor)
 {
-  TempoMessage *msg = new TempoMessage(tag1, tag2, buflen, buffer);
+  TempoMessage *msg = new (&buflen, 0) TempoMessage(tag1, tag2, buflen, buffer);
   CProxy_TempoGroup ptg(bocid);
   ptg.tempoGeneric(msg, processor);
 }
@@ -155,7 +123,7 @@ void
 TempoArray::ckTempoSendElem(int tag1, int tag2, void *buffer, int buflen,
                             CkAID aid, int idx)
 {
-  TempoMessage *msg = new TempoMessage(tag1, tag2, buflen, buffer);
+  TempoMessage *msg = new (&buflen, 0) TempoMessage(tag1, tag2, buflen, buffer);
   CProxy_TempoArray pta(aid);
   pta[idx].tempoGeneric(msg);
 }
index 2b922478d681f5a55bf1d2fe20160d6e20b2c764..f5a54521bce29f7a5705098b31af34ed7b20e63a 100644 (file)
@@ -1,5 +1,5 @@
 module tempo  {
-  message [packed] TempoMessage;
+  message [varsize] TempoMessage;
 
   chare TempoChare
   {
index 5bc3c87f2aa5c048be5012f1ad32fb1e34998e73..13a3cc95c90ac34cc0ce68a5ab9e63fd56fd893a 100644 (file)
 #define BARR_TAG   1026
 #define REDUCE_TAG 1027
 
+#define TempoAlign(x) (((x)+7)&~7)
+
 class TempoMessage : public ArrayMessage, public CMessage_TempoMessage
 {
   public:
     int tag1, tag2, length;
     void *data;
   
-    TempoMessage(void) { data = 0; length = 0; }
+    TempoMessage(void) { data = (char *)this + sizeof(TempoMessage); }
     TempoMessage(int t1, int t2, int l, void *d):tag1(t1),tag2(t2),length(l) {
-      data = malloc(l);
+      data = (char *)this + sizeof(TempoMessage);
       memcpy(data, d, l);
     }
-    ~TempoMessage() {
-      if(data) free(data);
+    static void *alloc(int msgnum, size_t size, int *sizes, int pbits) {
+      return CkAllocMsg(msgnum, size+sizes[0], pbits);
     }
-    static void *pack(TempoMessage *);
-    static TempoMessage *unpack(void *);
+    static void *pack(TempoMessage *in) { return (void *) in; }
+    static TempoMessage *unpack(void *in) { return new (in) TempoMessage; }
 };
 
 class Tempo