Пример #1
0
extern void gasnete_vis_init(void) {
  gasneti_assert(!gasnete_vis_isinit);
  gasnete_vis_isinit = 1;
  GASNETI_TRACE_PRINTF(C,("gasnete_vis_init()"));

  #define GASNETE_VIS_ENV_YN(varname, envname, enabler) do {                                                    \
    if (enabler) {                                                                                              \
      varname = gasneti_getenv_yesno_withdefault(#envname, enabler##_DEFAULT);                                  \
    } else if (!gasneti_mynode && gasneti_getenv(#envname) && gasneti_getenv_yesno_withdefault(#envname, 0)) {  \
      fprintf(stderr, "WARNING: %s is set in environment, but %s support is compiled out - setting ignored\n",  \
                      #envname, #enabler);                                                                      \
    }                                                                                                           \
  } while (0)
  #if !GASNETE_USE_AMPIPELINE
    int gasnete_vis_use_ampipe = 0; // dummy
  #endif
  GASNETE_VIS_ENV_YN(gasnete_vis_use_ampipe,GASNET_VIS_AMPIPE, GASNETE_USE_AMPIPELINE);
  #if GASNETE_USE_AMPIPELINE
  if (gasnete_vis_use_ampipe) {
    #ifndef GASNETE_VIS_MAXCHUNK_DEFAULT
    #define GASNETE_VIS_MAXCHUNK_DEFAULT MIN(gex_AM_LUBRequestMedium(),gex_AM_LUBReplyMedium())-2*sizeof(void*)
    #endif
    #ifndef GASNETE_VIS_PUT_MAXCHUNK_DEFAULT
    #define GASNETE_VIS_PUT_MAXCHUNK_DEFAULT GASNETE_VIS_MAXCHUNK_DEFAULT
    #endif
    #ifndef GASNETE_VIS_GET_MAXCHUNK_DEFAULT
    #define GASNETE_VIS_GET_MAXCHUNK_DEFAULT GASNETE_VIS_MAXCHUNK_DEFAULT
    #endif
    int gasnete_vis_maxchunk_set = !!gasneti_getenv("GASNET_VIS_MAXCHUNK");
    size_t gasnete_vis_maxchunk = GASNETE_VIS_MAXCHUNK_DEFAULT;
    gasnete_vis_maxchunk = gasneti_getenv_int_withdefault("GASNET_VIS_MAXCHUNK", gasnete_vis_maxchunk, 1);
    gasnete_vis_put_maxchunk = GASNETE_VIS_PUT_MAXCHUNK_DEFAULT;
    gasnete_vis_put_maxchunk = gasneti_getenv_int_withdefault("GASNET_VIS_PUT_MAXCHUNK", 
                                 (gasnete_vis_maxchunk_set ? gasnete_vis_maxchunk : gasnete_vis_put_maxchunk), 1);
    gasnete_vis_get_maxchunk = GASNETE_VIS_GET_MAXCHUNK_DEFAULT;
    gasnete_vis_get_maxchunk = gasneti_getenv_int_withdefault("GASNET_VIS_GET_MAXCHUNK", 
                                 (gasnete_vis_maxchunk_set ? gasnete_vis_maxchunk : gasnete_vis_get_maxchunk), 1);
  } else { // !gasnete_vis_use_ampipe
    gasnete_vis_put_maxchunk = 0;
    gasnete_vis_get_maxchunk = 0;
  }
  #endif
  #if !GASNETE_USE_REMOTECONTIG_GATHER_SCATTER
    int gasnete_vis_use_remotecontig = 0; // dummy
  #endif
  GASNETE_VIS_ENV_YN(gasnete_vis_use_remotecontig,GASNET_VIS_REMOTECONTIG, GASNETE_USE_REMOTECONTIG_GATHER_SCATTER);
}
Пример #2
0
void smp_coll_tune_barrier(smp_coll_t handle) {
  int iter;
  int i;
  gasnett_tick_t start,stop;
  int radix=2;
  double best_time=1e20;
  double time;
  int barrier_iters=gasneti_getenv_int_withdefault("GASNET_COLL_TUNE_SMP_BARRIER_ITER", 1000, 0);
  int root;
  static int best_barrier_radix = 2;
  static int best_barrier_routine = SMP_COLL_BARRIER_DISSEM_ATOMIC;
  static int best_root = 0;

#if VERBOSE_TUNING
  if(handle->MYTHREAD==0) fprintf(stderr, "starting autotuning of local barrier\n");
#endif
  for(root=0; root<1; root++) {

    if(handle->MYTHREAD==0 && VERBOSE_TUNING) fprintf(stderr, "ROOT: %d\n", root);
    for(i=0; i<SMP_COLL_NUM_BARR_ROUTINES; i++) {
      if(i==SMP_COLL_BARRIER_COND_VAR) continue;
      if(handle->MYTHREAD==0 && VERBOSE_TUNING) fprintf(stderr, "\t routine: %d\n",(int)i);
      for(radix=2; radix<=handle->THREADS; radix*=2) {
        
        
        
        if(i==SMP_COLL_BARRIER_COND_VAR && radix>2) continue;
        if(i==SMP_COLL_BARRIER_PTHREAD && radix>2) continue;
        if(handle->MYTHREAD==0 && VERBOSE_TUNING) fprintf(stderr, "\t\t radix: %d\n",radix);
        smp_coll_set_barrier_routine_with_root(handle, (smp_coll_barrier_routine_t)i, radix, root);
        
        start = gasnett_ticks_now();
        for(iter = 0; iter<barrier_iters; iter++) {
          smp_coll_barrier(handle, 0);
        }
        stop = gasnett_ticks_now();
        smp_coll_safe_barrier(handle, 0);
        time = ((double) gasnett_ticks_to_ns(stop-start))/barrier_iters;
        
        
        if(time < best_time && handle->MYTHREAD==0) {
          best_barrier_radix=radix;
          best_barrier_routine = i;
          best_time = time;
          best_root = root;
        }
        smp_coll_reset_all_flags(handle);
        /*run a root agnostic barrier*/
        smp_coll_safe_barrier(handle, 0);
      }
    }
  }
#if VERBOSE_TUNING
  if(handle->MYTHREAD==0) fprintf(stderr, "setting best barrier: routine: %d radix: %d root: %d time: %g ns\n", best_barrier_routine, best_barrier_radix, best_root, best_time);
#endif
  smp_coll_set_barrier_routine_with_root(handle, (smp_coll_barrier_routine_t)best_barrier_routine, best_barrier_radix, best_root);
  
  
}
Пример #3
0
extern void gasnete_vis_init(void) {
  gasneti_assert(!gasnete_vis_isinit);
  gasnete_vis_isinit = 1;
  GASNETI_TRACE_PRINTF(C,("gasnete_vis_init()"));

  #define GASNETE_VIS_ENV_YN(varname, envname, enabler) do {                                                    \
    if (enabler) {                                                                                              \
      varname = gasneti_getenv_yesno_withdefault(#envname, enabler##_DEFAULT);                                  \
    } else if (!gasnet_mynode() && gasneti_getenv(#envname) && gasneti_getenv_yesno_withdefault(#envname, 0)) { \
      fprintf(stderr, "WARNING: %s is set in environment, but %s support is compiled out - setting ignored",    \
                      #envname, #enabler);                                                                      \
    }                                                                                                           \
  } while (0)
  #if GASNETE_USE_AMPIPELINE
  GASNETE_VIS_ENV_YN(gasnete_vis_use_ampipe,GASNET_VIS_AMPIPE, GASNETE_USE_AMPIPELINE);
  gasnete_vis_maxchunk = gasneti_getenv_int_withdefault("GASNET_VIS_MAXCHUNK", gasnet_AMMaxMedium()-2*sizeof(void*),1);
  #endif
  #if GASNETE_USE_REMOTECONTIG_GATHER_SCATTER
  GASNETE_VIS_ENV_YN(gasnete_vis_use_remotecontig,GASNET_VIS_REMOTECONTIG, GASNETE_USE_REMOTECONTIG_GATHER_SCATTER);
  #endif
}
Пример #4
0
void gasnete_coll_bcast_proto_register(void)
{
    DCMF_GlobalBcast_Configuration_t gbcast_conf;
    DCMF_Broadcast_Configuration_t bcast_conf;
    DCMF_AsyncBroadcast_Configuration_t a_bcast_conf;

    GASNETC_DCMF_LOCK(); /* for DCMF_SAFE */

    gasnete_use_dcmf_bcast =
        gasneti_getenv_yesno_withdefault("GASNET_USE_DCMF_BCAST", 1);

    /* tree broadcast registration */
    gasnete_dcmf_bcast_enabled[TREE_BROADCAST] =
        gasneti_getenv_yesno_withdefault("GASNET_DCMF_TREE_BCAST", 1);
    if (gasnete_dcmf_bcast_enabled[TREE_BROADCAST])
    {
        gbcast_conf.protocol = DCMF_TREE_GLOBALBCAST_PROTOCOL;
        DCMF_SAFE(DCMF_GlobalBcast_register(&gasnete_dcmf_globalbcast_proto,
                                            &gbcast_conf));
        bcast_conf.protocol = DCMF_TREE_BROADCAST_PROTOCOL;
        DCMF_SAFE(DCMF_Broadcast_register(&gasnete_dcmf_bcast_proto[TREE_BROADCAST],
                                          &bcast_conf));
    }

    /* torus broadcast registration */
    gasnete_dcmf_bcast_enabled[TORUS_RECTANGLE_BROADCAST] =
        gasneti_getenv_yesno_withdefault("GASNET_DCMF_TORUS_RECTANGLE_BCAST", 1);
    if (gasnete_dcmf_bcast_enabled[TORUS_RECTANGLE_BROADCAST])
    {
        bcast_conf.protocol = DCMF_TORUS_RECTANGLE_BROADCAST_PROTOCOL;
        DCMF_SAFE(DCMF_Broadcast_register(&gasnete_dcmf_bcast_proto[TORUS_RECTANGLE_BROADCAST],
                                          &bcast_conf));
    }

    gasnete_dcmf_bcast_enabled[TORUS_BINOMIAL_BROADCAST] =
        gasneti_getenv_yesno_withdefault("GASNET_DCMF_TORUS_BINOMIAL_BCAST", 1);
    if (gasnete_dcmf_bcast_enabled[TORUS_BINOMIAL_BROADCAST])
    {
        bcast_conf.protocol = DCMF_TORUS_BINOMIAL_BROADCAST_PROTOCOL;
        DCMF_SAFE(DCMF_Broadcast_register(&gasnete_dcmf_bcast_proto[TORUS_BINOMIAL_BROADCAST],
                                          &bcast_conf));
    }

    /* asynchronous broadcast registration */
    gasnete_dcmf_bcast_enabled[TORUS_ASYNCBROADCAST_RECTANGLE] =
        gasneti_getenv_yesno_withdefault("GASNET_DCMF_TORUS_ASYNCBROADCAST_RECTANGLE_BCAST", 1);
    if (gasnete_dcmf_bcast_enabled[TORUS_ASYNCBROADCAST_RECTANGLE])
    {
        a_bcast_conf.protocol = DCMF_TORUS_ASYNCBROADCAST_RECTANGLE_PROTOCOL;
        a_bcast_conf.isBuffered = 1;
        a_bcast_conf.cb_geometry = gasnete_dcmf_get_geometry;
        DCMF_SAFE(DCMF_AsyncBroadcast_register(&gasnete_dcmf_bcast_proto[TORUS_ASYNCBROADCAST_RECTANGLE],
                                               &a_bcast_conf));
    }

    gasnete_dcmf_bcast_enabled[TORUS_ASYNCBROADCAST_BINOMIAL] =
        gasneti_getenv_yesno_withdefault("GASNET_DCMF_TORUS_ASYNCBROADCAST_BINOMIAL_BCAST", 1);
    if (gasnete_dcmf_bcast_enabled[TORUS_ASYNCBROADCAST_BINOMIAL])
    {
        a_bcast_conf.protocol = DCMF_TORUS_ASYNCBROADCAST_BINOMIAL_PROTOCOL;
        a_bcast_conf.isBuffered = 1;
        a_bcast_conf.cb_geometry = gasnete_dcmf_get_geometry;
        DCMF_SAFE(DCMF_AsyncBroadcast_register(&gasnete_dcmf_bcast_proto[TORUS_ASYNCBROADCAST_BINOMIAL],
                                               &a_bcast_conf));
    }

    /* number of bcast streams used in the torus rectangle bcast */
    gasnete_dcmf_bcast_num_colors = gasneti_getenv_int_withdefault("GASNET_DCMF_BCAST_NUM_COLORS", 1, 0);
    if (gasnete_dcmf_bcast_num_colors < 1 || gasnete_dcmf_bcast_num_colors > 6)
        gasnete_dcmf_bcast_num_colors = 1;

    GASNETC_DCMF_UNLOCK();
}