add multi-thread simulator for multi-core version codes. Also add two new files in...
[IRC.git] / Robust / src / Runtime / task.c
index ac045dad75d3f11635c941630773d1c95fed09c3..142f076d263395e8c8d5f25f5750241c7a4be1df 100644 (file)
@@ -22,9 +22,7 @@ extern int instaccum;
 #endif
 
 struct genhashtable * activetasks;
-#ifndef MULTICORE
 struct parameterwrapper * objectqueues[NUMCLASSES];
-#endif
 struct genhashtable * failedtasks;
 struct taskparamdescriptor * currtpd;
 struct RuntimeHash * forward;
@@ -80,13 +78,8 @@ void createstartupobject(int argc, char ** argv) {
   }
   
   /* Set initialized flag for startup object */ 
-#ifdef MULTICORE
-  flagorand(startupobject,1,0xFFFFFFFF,NULL,0);
-  enqueueObject(startupobject, objq4startupobj[corenum], numqueues4startupobj[corenum]);
-#else
   flagorand(startupobject,1,0xFFFFFFFF);
   enqueueObject(startupobject);
-#endif
 }
 
 int hashCodetpd(struct taskparamdescriptor *ftd) {
@@ -296,11 +289,7 @@ struct ___TagDescriptor___ * allocate_tag(int index) {
 /* This function updates the flag for object ptr.  It or's the flag
    with the or mask and and's it with the andmask. */
 
-#ifdef MULTICORE
-void flagbody(struct ___Object___ *ptr, int flag, struct parameterwrapper ** queues, int length);
-#else
 void flagbody(struct ___Object___ *ptr, int flag);
-#endif
 #ifdef OPTIONAL
 void enqueueoptional(struct ___Object___ * currobj, int numfailedfses, int * failedfses, struct taskdescriptor * task, int index);
 #endif
@@ -309,11 +298,7 @@ void enqueueoptional(struct ___Object___ * currobj, int numfailedfses, int * fai
    return (*val1)-(*val2);
  } 
 
-#ifdef MULTICORE
-void flagorand(void * ptr, int ormask, int andmask, struct parameterwrapper ** queues, int length) {
-#else
 void flagorand(void * ptr, int ormask, int andmask) {
-#endif
 #ifdef OPTIONAL
   struct ___Object___ * obj = (struct ___Object___ *)ptr;
   if(obj->numfses){/*store the information about fses*/
@@ -336,11 +321,7 @@ void flagorand(void * ptr, int ormask, int andmask) {
       int oldflag=((int *)ptr)[1];
       int flag=ormask|oldflag;
       flag&=andmask;
-#ifdef MULTICORE
-         flagbody(ptr, flag, queues, length);
-#else
       flagbody(ptr, flag);
-#endif
     }
 }
  
@@ -370,11 +351,7 @@ bool intflagorand(void * ptr, int ormask, int andmask) {
       if (flag==oldflag) /* Don't do anything */
        return false;
       else {
-#ifdef MULTICORE
-                flagbody(ptr, flag, NULL, 0);
-#else
                 flagbody(ptr, flag);
-#endif
                 return true;
          }
     }
@@ -384,67 +361,32 @@ void flagorandinit(void * ptr, int ormask, int andmask) {
   int oldflag=((int *)ptr)[1];
   int flag=ormask|oldflag;
   flag&=andmask;
-#ifdef MULTICORE
-  flagbody(ptr,flag,NULL,0);
-#else
   flagbody(ptr,flag);
-#endif
 }
 
-#ifdef MULTICORE
-void flagbody(struct ___Object___ *ptr, int flag, struct parameterwrapper ** queues, int length) {
-#else
 void flagbody(struct ___Object___ *ptr, int flag) {
-#endif
-#ifdef MULTICORE
-  struct parameterwrapper * flagptr = NULL;
-  int i = 0;
-#else
   struct parameterwrapper *flagptr=(struct parameterwrapper *)ptr->flagptr;
-#endif
   ptr->flag=flag;
   
   /*Remove object from all queues */
-#ifdef MULTICORE
-  for(i = 0; i < length; ++i) {
-         flagptr = queues[i];
-#else
   while(flagptr!=NULL) {
-#endif
-#ifdef MULTICORE
-       int next;
-#else
     struct parameterwrapper *next;
-#endif
     int UNUSED, UNUSED2;
     int * enterflags;
     ObjectHashget(flagptr->objectset, (int) ptr, (int *) &next, (int *) &enterflags, &UNUSED, &UNUSED2);
     ObjectHashremove(flagptr->objectset, (int)ptr);
     if (enterflags!=NULL)
       free(enterflags);
-#ifdef MULTICORE
-       ;
-#else
     flagptr=next;
-#endif
   }
  }
 
-#ifdef MULTICORE
- void enqueueObject(void * vptr, struct parameterwrapper ** queues, int length) {
-#else
  void enqueueObject(void *vptr) {
-#endif
    struct ___Object___ *ptr = (struct ___Object___ *)vptr;
   
   {
     struct QueueItem *tmpptr;
-#ifdef MULTICORE
-       struct parameterwrapper * parameter=NULL;
-       int j;
-#else
     struct parameterwrapper * parameter=objectqueues[ptr->type];
-#endif
     int i;
     struct parameterwrapper * prevptr=NULL;
     struct ___Object___ *tagptr=ptr->___tags___;
@@ -452,12 +394,7 @@ void flagbody(struct ___Object___ *ptr, int flag) {
     /* Outer loop iterates through all parameter queues an object of
        this type could be in.  */
     
-#ifdef MULTICORE
-       for(j = 0; j < length; ++j) {
-               parameter = queues[j];
-#else
     while(parameter!=NULL) {
-#endif
       /* Check tags */
       if (parameter->numbertags>0) {
        if (tagptr==NULL)
@@ -498,52 +435,12 @@ void flagbody(struct ___Object___ *ptr, int flag) {
        }
       }
     nextloop:
-#ifdef MULTICORE
-         ;
-#else
       parameter=parameter->next;
-#endif
     }
-#ifdef MULTICORE
-       /*if(prevptr != NULL) {
-         ptr->flagptr=prevptr->arrayindex;
-       } else {
-         ptr->flagptr = 0;
-       }*/
-#else
     ptr->flagptr=prevptr;
-#endif
   }
 }
 
-#ifdef MULTICORE
-
-void transferObject(void * obj, int targetcore) {
-       int type=((int *)obj)[0];
- // if (type<NUMCLASSES) {
-    /* We have a normal object */
-    int size=classsize[type];
-
-#ifdef RAW
-#endif
-       
-    //struct ___Object___ * newobj=FREEMALLOC(size);
-    //memcpy(newobj, obj, size);
-    //obj->___localcopy___=newobj;
-  //} else {
-    /* We have an array */
-    /*struct ArrayObject *ao=(struct ArrayObject *)obj;
-    int elementsize=classsize[type];
-    int length=ao->___length___;
-    int size=sizeof(struct ArrayObject)+length*elementsize;
-    struct ___Object___ * newobj=FREEMALLOC(size);
-    memcpy(newobj, obj, size);
-    obj->___localcopy___=newobj;
-  }*/
-}
-
-#endif
-
 #ifdef OPTIONAL
 
 int checktags(struct ___Object___ * currobj, struct fsanalysiswrapper * fswrapper) {
@@ -987,15 +884,7 @@ int enqueuetasks(struct parameterwrapper *parameter, struct parameterwrapper *pr
     retval=0;
   } else {
 #endif
-#ifdef MULTICORE
-       /*int arrayindex = 0;
-       if(prevptr != NULL) {
-               arrayindex = prevptr->arrayindex;
-       }*/
-       ObjectHashadd(parameter->objectset, (int) ptr, 0, (int) enterflags, numenterflags, enterflags==NULL);//this add the object to parameterwrapper
-#else
     ObjectHashadd(parameter->objectset, (int) ptr, (int) prevptr, (int) enterflags, numenterflags, enterflags==NULL);//this add the object to parameterwrapper
-#endif
 #ifdef OPTIONAL
   }
 #endif
@@ -1180,11 +1069,7 @@ void executetasks() {
            //      printf("Setting fd %d\n",fd);
            if (RuntimeHashget(fdtoobject, fd,(int *) &objptr)) {
              if(intflagorand(objptr,1,0xFFFFFFFF)) { /* Set the first flag to 1 */
-#ifdef MULTICORE
-                        enqueueObject(objptr, NULL, 0);
-#else
                         enqueueObject(objptr);
-#endif
                  }
            }
          }
@@ -1468,13 +1353,8 @@ void builditerators(struct taskdescriptor * task, int index, struct parameterwra
  void printdebug() {
    int i;
    int j;
-#ifdef MULTICORE
-   for(i=0;i<numtasks[corenum];i++) {
-     struct taskdescriptor * task=taskarray[corenum][i];
-#else
    for(i=0;i<numtasks;i++) {
         struct taskdescriptor * task=taskarray[i];
-#endif
      printf("%s\n", task->name);
      for(j=0;j<task->numParameters;j++) {
        struct parameterdescriptor *param=task->descriptorarray[j];
@@ -1518,16 +1398,10 @@ void builditerators(struct taskdescriptor * task, int index, struct parameterwra
 
 void processtasks() {
   int i;
-#ifdef MULTICORE
-  for(i=0;i<numtasks[corenum];i++) {
-    struct taskdescriptor * task=taskarray[corenum][i];
-#else
   for(i=0;i<numtasks;i++) {
        struct taskdescriptor * task=taskarray[i];
-#endif
     int j;
 
-#ifndef MULTICORE
     for(j=0;j<task->numParameters;j++) {
       struct parameterdescriptor *param=task->descriptorarray[j];
       struct parameterwrapper * parameter=RUNMALLOC(sizeof(struct parameterwrapper));
@@ -1546,16 +1420,11 @@ void processtasks() {
        ptr=&((*ptr)->next);
       (*ptr)=parameter;
     }
-#endif
 
     /* Build iterators for parameters */
     for(j=0;j<task->numParameters;j++) {
       struct parameterdescriptor *param=task->descriptorarray[j];
       struct parameterwrapper *parameter=param->queue;
-#ifdef MULTICORE
-         parameter->objectset=allocateObjectHash(10);
-         parameter->task=task;
-#endif
       builditerators(task, j, parameter);
     }
   }