Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
some cleaning in the NAS examples
[simgrid.git] / examples / smpi / NAS / DT / dt.c
index ed8cfeb..1a49317 100644 (file)
@@ -2,7 +2,7 @@
  *                                                                       * 
  *        N  A  S     P A R A L L E L     B E N C H M A R K S  3.3       *
  *                                                                       * 
- *                                  D T                                         
+ *                                  D T           * 
  *                                                                       * 
  ************************************************************************* 
  *                                                                       * 
@@ -33,7 +33,7 @@
  *                                                                       * 
  ************************************************************************* 
  *                                                                       * 
- *   Author: M. Frumkin                                                         *                                               * 
+ *   Author: M. Frumkin               *             * 
  *                                                                       * 
  *************************************************************************/
 
@@ -44,6 +44,8 @@
 #include "mpi.h"
 #include "npbparams.h"
 
+#include "simgrid/instr.h" //TRACE_
+
 #ifndef CLASS
 #define CLASS 'S'
 #define NUM_PROCS            1                 
@@ -62,7 +64,7 @@ void c_print_results( char   *name,
                       int    nprocs_total,
                       double t,
                       double mops,
-                     char   *optype,
+          char   *optype,
                       int    passed_verification,
                       char   *npbversion,
                       char   *compiletime,
@@ -72,7 +74,7 @@ void c_print_results( char   *name,
                       char   *cmpi_inc,
                       char   *cflags,
                       char   *clinkflags );
-                     
+          
 void    timer_clear( int n );
 void    timer_start( int n );
 void    timer_stop( int n );
@@ -98,55 +100,55 @@ int verify(char *bmname,double rnm2){
          verified = 0;
        }else if(cls=='W') {
          if(strstr(bmname,"BH")){
-          verify_value = 4102461.0;
+       verify_value = 4102461.0;
          }else if(strstr(bmname,"WH")){
-          verify_value = 204280762.0;
+       verify_value = 204280762.0;
          }else if(strstr(bmname,"SH")){
-          verify_value = 186944764.0;
+       verify_value = 186944764.0;
          }else{
            fprintf(stderr,"No such benchmark as %s.\n",bmname);
          }
          verified = 0;
        }else if(cls=='A') {
          if(strstr(bmname,"BH")){
-          verify_value = 17809491.0;
+       verify_value = 17809491.0;
          }else if(strstr(bmname,"WH")){
-          verify_value = 1289925229.0;
+       verify_value = 1289925229.0;
          }else if(strstr(bmname,"SH")){
-          verify_value = 610856482.0;
+       verify_value = 610856482.0;
          }else{
            fprintf(stderr,"No such benchmark as %s.\n",bmname);
          }
-        verified = 0;
+     verified = 0;
        }else if(cls=='B') {
          if(strstr(bmname,"BH")){
-          verify_value = 4317114.0;
+       verify_value = 4317114.0;
          }else if(strstr(bmname,"WH")){
-          verify_value = 7877279917.0;
+       verify_value = 7877279917.0;
          }else if(strstr(bmname,"SH")){
-          verify_value = 1836863082.0;
+       verify_value = 1836863082.0;
          }else{
            fprintf(stderr,"No such benchmark as %s.\n",bmname);
-          verified = 0;
+       verified = 0;
          }
        }else if(cls=='C') {
          if(strstr(bmname,"BH")){
-          verify_value = 0.0;
+       verify_value = 0.0;
          }else if(strstr(bmname,"WH")){
-          verify_value = 0.0;
+       verify_value = 0.0;
          }else if(strstr(bmname,"SH")){
-          verify_value = 0.0;
+       verify_value = 0.0;
          }else{
            fprintf(stderr,"No such benchmark as %s.\n",bmname);
-          verified = -1;
+       verified = -1;
          }
        }else if(cls=='D') {
          if(strstr(bmname,"BH")){
-          verify_value = 0.0;
+       verify_value = 0.0;
          }else if(strstr(bmname,"WH")){
-          verify_value = 0.0;
+       verify_value = 0.0;
          }else if(strstr(bmname,"SH")){
-          verify_value = 0.0;
+       verify_value = 0.0;
          }else{
            fprintf(stderr,"No such benchmark as %s.\n",bmname);
          }
@@ -156,15 +158,15 @@ int verify(char *bmname,double rnm2){
        }
        fprintf(stderr," %s L2 Norm = %f\n",bmname,rnm2);
        if(verified==-1){
-        fprintf(stderr," No verification was performed.\n");
+     fprintf(stderr," No verification was performed.\n");
        }else if( rnm2 - verify_value < epsilon &&
                  rnm2 - verify_value > -epsilon) {  /* abs here does not work on ALTIX */
-         verified = 1;
-         fprintf(stderr," Deviation = %f\n",(rnm2 - verify_value));
+      verified = 1;
+      fprintf(stderr," Deviation = %f\n",(rnm2 - verify_value));
        }else{
-        verified = 0;
-        fprintf(stderr," The correct verification value = %f\n",verify_value);
-        fprintf(stderr," Got value = %f\n",rnm2);
+     verified = 0;
+     fprintf(stderr," The correct verification value = %f\n",verify_value);
+     fprintf(stderr," Got value = %f\n",rnm2);
        }
     }else{
        verified = -1;
@@ -297,7 +299,7 @@ DGraph *buildWH(char cls){
       id=AttachNode(dg,nd);
       for(j=0;j<maxInDeg;j++){
         sid=i*maxInDeg+j;
-       if(sid>=numPrevLayerNodes) break;
+  if(sid>=numPrevLayerNodes) break;
         snd=dg->node[firstLayerNode+sid];
         ar=newArc(dg->node[id],snd);
         AttachArc(dg,ar);
@@ -357,7 +359,7 @@ DGraph *buildBH(char cls){
       id=AttachNode(dg,nd);
       for(j=0;j<maxInDeg;j++){
         sid=i*maxInDeg+j;
-       if(sid>=numPrevLayerNodes) break;
+  if(sid>=numPrevLayerNodes) break;
         snd=dg->node[firstLayerNode+sid];
         ar=newArc(snd,dg->node[id]);
         AttachArc(dg,ar);
@@ -486,19 +488,19 @@ Arr* WindowFilter(Arr *a, Arr* b,int w){
   if(a->len>b->len) Resample(b,a->len);
   for(i=fielddim;i<a->len-fielddim;i+=fielddim){
     rms0=(a->val[i]-b->val[i])*(a->val[i]-b->val[i])
-       +(a->val[i+1]-b->val[i+1])*(a->val[i+1]-b->val[i+1])
-       +(a->val[i+2]-b->val[i+2])*(a->val[i+2]-b->val[i+2])
-       +(a->val[i+3]-b->val[i+3])*(a->val[i+3]-b->val[i+3]);
+  +(a->val[i+1]-b->val[i+1])*(a->val[i+1]-b->val[i+1])
+  +(a->val[i+2]-b->val[i+2])*(a->val[i+2]-b->val[i+2])
+  +(a->val[i+3]-b->val[i+3])*(a->val[i+3]-b->val[i+3]);
     j=i+fielddim;
     rms1=(a->val[j]-b->val[j])*(a->val[j]-b->val[j])
-       +(a->val[j+1]-b->val[j+1])*(a->val[j+1]-b->val[j+1])
-       +(a->val[j+2]-b->val[j+2])*(a->val[j+2]-b->val[j+2])
-       +(a->val[j+3]-b->val[j+3])*(a->val[j+3]-b->val[j+3]);
+      +(a->val[j+1]-b->val[j+1])*(a->val[j+1]-b->val[j+1])
+      +(a->val[j+2]-b->val[j+2])*(a->val[j+2]-b->val[j+2])
+      +(a->val[j+3]-b->val[j+3])*(a->val[j+3]-b->val[j+3]);
     j=i-fielddim;
     rmsm1=(a->val[j]-b->val[j])*(a->val[j]-b->val[j])
-        +(a->val[j+1]-b->val[j+1])*(a->val[j+1]-b->val[j+1])
-        +(a->val[j+2]-b->val[j+2])*(a->val[j+2]-b->val[j+2])
-        +(a->val[j+3]-b->val[j+3])*(a->val[j+3]-b->val[j+3]);
+   +(a->val[j+1]-b->val[j+1])*(a->val[j+1]-b->val[j+1])
+   +(a->val[j+2]-b->val[j+2])*(a->val[j+2]-b->val[j+2])
+   +(a->val[j+3]-b->val[j+3])*(a->val[j+3]-b->val[j+3]);
     k=0;
     if(rms1<rms0){
       k=1;
@@ -523,7 +525,7 @@ Arr* WindowFilter(Arr *a, Arr* b,int w){
       a->val[i+1]=weight*b->val[j+1];
       a->val[i+2]=weight*b->val[j+2];
       a->val[i+3]=weight*b->val[j+3];  
-    }     
+    }     
   }
   if(timer_on){
     timer_stop(w);
@@ -537,6 +539,7 @@ int SendResults(DGraph *dg,DGNode *nd,Arr *feat){
   DGArc *ar=NULL;
   DGNode *head=NULL;
   if(!feat) return 0;
+  TRACE_smpi_set_category ("SendResults");
   for(i=0;i<nd->outDegree;i++){
     ar=nd->outArc[i];
     if(ar->tail!=nd) continue;
@@ -547,6 +550,7 @@ int SendResults(DGraph *dg,DGNode *nd,Arr *feat){
       MPI_Send(feat->val,feat->len,MPI_DOUBLE,head->address,tag,MPI_COMM_WORLD);
     }
   }
+  TRACE_smpi_set_category (NULL);
   return 1;
 }
 Arr* CombineStreams(DGraph *dg,DGNode *nd){
@@ -605,6 +609,8 @@ double ReduceStreams(DGraph *dg,DGNode *nd){
   Arr *feat=NULL;
   double retv=0.0;
 
+  TRACE_smpi_set_category ("ReduceStreams");
+
   for(i=0;i<nd->inDegree;i++){
     ar=nd->inArc[i];
     if(ar->head!=nd) continue;
@@ -635,6 +641,8 @@ int ProcessNodes(DGraph *dg,int me){
   double rchksum=0.0;
   MPI_Status status;
 
+  TRACE_smpi_set_category ("ProcessNodes");
+
   for(i=0;i<dg->numNodes;i++){
     nd=dg->node[i];
     if(nd->address!=me) continue;
@@ -650,6 +658,9 @@ int ProcessNodes(DGraph *dg,int me){
       SendResults(dg,nd,feat);
     }
   }
+
+  TRACE_smpi_set_category ("ProcessNodes");
+
   if(me==0){ /* Report node */
     rchksum=0.0;
     chksum=0.0;
@@ -675,6 +686,7 @@ int main(int argc,char **argv ){
     MPI_Init( &argc, &argv );
     MPI_Comm_rank( MPI_COMM_WORLD, &my_rank );
     MPI_Comm_size( MPI_COMM_WORLD, &comm_size );
+    TRACE_smpi_set_category ("begin");
 
      if(argc!=2||
                 (  strncmp(argv[1],"BH",2)!=0
@@ -726,7 +738,8 @@ int main(int argc,char **argv ){
       timer_start(0);
     }
     verified=ProcessNodes(dg,my_rank);
-    
+    TRACE_smpi_set_category ("end");
+
     featnum=NUM_SAMPLES*fielddim;
     bytes_sent=featnum*dg->numArcs;
     bytes_sent/=1048576;
@@ -734,25 +747,25 @@ int main(int argc,char **argv ){
       timer_stop(0);
       tot_time=timer_read(0);
       c_print_results( dg->name,
-                      CLASS,
-                      featnum,
-                      0,
-                      0,
-                      dg->numNodes,
-                      0,
-                      comm_size,
-                      tot_time,
-                      bytes_sent/tot_time,
-                      "bytes transmitted", 
-                      verified,
-                      NPBVERSION,
-                      COMPILETIME,
-                      MPICC,
-                      CLINK,
-                      CMPI_LIB,
-                      CMPI_INC,
-                      CFLAGS,
-                      CLINKFLAGS );
+                 CLASS,
+                 featnum,
+                 0,
+                 0,
+                 dg->numNodes,
+                 0,
+                 comm_size,
+                 tot_time,
+                 bytes_sent/tot_time,
+                 "bytes transmitted", 
+                 verified,
+                 NPBVERSION,
+                 COMPILETIME,
+                 MPICC,
+                 CLINK,
+                 CMPI_LIB,
+                 CMPI_INC,
+                 CFLAGS,
+                 CLINKFLAGS );
     }          
     MPI_Finalize();
   return 1;