text: /* begin_generated_IBM_copyright_prolog                             */
  /*                                                                  */
  /* This is an automatically generated copyright prolog.             */
  /* After initializing,  DO NOT MODIFY OR MOVE                       */
  /*  --------------------------------------------------------------- */
  /* Licensed Materials - Property of IBM                             */
  /* Blue Gene/Q 5765-PER 5765-PRP                                    */
  /*                                                                  */
  /* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved           */
  /* US Government Users Restricted Rights -                          */
  /* Use, duplication, or disclosure restricted                       */
  /* by GSA ADP Schedule Contract with IBM Corp.                      */
  /*                                                                  */
  /*  --------------------------------------------------------------- */
  /*                                                                  */
  /* end_generated_IBM_copyright_prolog                               */
  /*  (C)Copyright IBM Corp.  2007, 2011  */
  /**
   * \file include/mpidi_platform.h
   * \brief ???
   */
  
  
  #ifndef __include_mpidi_platform_h__
  #define __include_mpidi_platform_h__
  
  /* Allow MPICH to detect local tasks */
  #define MPID_USE_NODE_IDS
  typedef int32_t MPID_Node_id_t;
  
  /* Default values */
  
  #define MPIDI_MAX_CONTEXTS 64
  /** This is not the real value, but should default to something larger than PAMI_DISPATCH_SEND_IMMEDIATE_MAX */
  #define MPIDI_SHORT_LIMIT  555
  /** This is set to 4 BGQ torus packets (+1, because of the way it is compared) */
  #define MPIDI_EAGER_LIMIT  2049
  /** This is set to 0 which effectively disables the eager protocol for local transfers */
  #define MPIDI_EAGER_LIMIT_LOCAL  0
  /** This is set to 'max unsigned' which effectively never disables internal eager at scale */
  #define MPIDI_DISABLE_INTERNAL_EAGER_SCALE ((unsigned)-1)
  
  /* Default features */
  #define USE_PAMI_RDMA 1
  #define USE_PAMI_CONSISTENCY PAMI_HINT_ENABLE
  #undef  OUT_OF_ORDER_HANDLING
  #undef  DYNAMIC_TASKING
  #undef  RDMA_FAILOVER
  #undef  QUEUE_BINARY_SEARCH_SUPPORT
  
  #define ASYNC_PROGRESS_MODE_DEFAULT 0
  
  /*
   * The default behavior is to disable (ignore) the 'internal vs application' and
   * the 'local vs remote' point-to-point eager limits.
   */
  #define MPIDI_PT2PT_EAGER_LIMIT(is_internal,is_local)                           \
  ({                                                                              \
    MPIDI_Process.pt2pt.limits_lookup[0][0][0];                                   \
  })
  
  /*
   * The default behavior is to disable (ignore) the 'internal vs application' and
   * the 'local vs remote' point-to-point short limits.
   */
  #define MPIDI_PT2PT_SHORT_LIMIT(is_internal,is_local)                           \
  ({                                                                              \
    MPIDI_Process.pt2pt.limits_lookup[0][1][0];                                   \
  })
  
  
  
  #ifdef __BGQ__
  #undef  MPIDI_EAGER_LIMIT_LOCAL
  #define MPIDI_EAGER_LIMIT_LOCAL  4097
  #undef  MPIDI_EAGER_LIMIT
  #define MPIDI_EAGER_LIMIT  4097
  #undef  MPIDI_DISABLE_INTERNAL_EAGER_SCALE
  #define MPIDI_DISABLE_INTERNAL_EAGER_SCALE (512*1024)
  #define MPIDI_MAX_THREADS     64
  #define MPIDI_MUTEX_L2_ATOMIC 1
  #define MPIDI_OPTIMIZED_COLLECTIVE_DEFAULT 1
  
  #define PAMIX_IS_LOCAL_TASK
  #define PAMIX_IS_LOCAL_TASK_STRIDE  (4)
  #define PAMIX_IS_LOCAL_TASK_SHIFT   (6)
  #define MPIDI_SMP_DETECT_DEFAULT 1
  #define TOKEN_FLOW_CONTROL    0
  #define CUDA_AWARE_SUPPORT    0
  
  /*
   * Enable both the 'internal vs application' and the 'local vs remote'
   * point-to-point eager limits.
   */
  #undef MPIDI_PT2PT_EAGER_LIMIT
  #define MPIDI_PT2PT_EAGER_LIMIT(is_internal,is_local)                           \
  ({                                                                              \
    MPIDI_Process.pt2pt.limits_lookup[is_internal][0][is_local];                  \
  })
  
  /*
   * Enable both the 'internal vs application' and the 'local vs remote'
   * point-to-point short limits.
   */
  #undef MPIDI_PT2PT_SHORT_LIMIT
  #define MPIDI_PT2PT_SHORT_LIMIT(is_internal,is_local)                           \
  ({                                                                              \
    MPIDI_Process.pt2pt.limits_lookup[is_internal][1][is_local];                  \
  })
  
  
  #undef ASYNC_PROGRESS_MODE_DEFAULT
  #define ASYNC_PROGRESS_MODE_DEFAULT 1
  
  static const char _ibm_release_version_[] = "V1R2M0";
  #endif
  
  #ifdef __PE__
  
  /*
   * This 'maximum contexts' define needs to be changed when mpich on PE
   * will support multiple contexts. Currently the PE PAMI allows multiple
   * contexts, but the PE mpich code is not set up to use them.
   */
  #undef MPIDI_MAX_CONTEXTS
  #define MPIDI_MAX_CONTEXTS 1
  
  #undef USE_PAMI_CONSISTENCY
  #define USE_PAMI_CONSISTENCY PAMI_HINT_DISABLE
  #undef  MPIDI_SHORT_LIMIT
  #define MPIDI_SHORT_LIMIT 256 - sizeof(MPIDI_MsgInfo)
  #undef  MPIDI_EAGER_LIMIT
  #define MPIDI_EAGER_LIMIT 65536
  #undef  MPIDI_EAGER_LIMIT_LOCAL
  #define MPIDI_EAGER_LIMIT_LOCAL  1048576
  #define OUT_OF_ORDER_HANDLING 1
  #define MPIDI_STATISTICS      1
  #define MPIDI_PRINTENV        1
  #define MPIDI_OPTIMIZED_COLLECTIVE_DEFAULT 0
  #undef  USE_PAMI_RDMA
  #define RDMA_FAILOVER
  #define MPIDI_BANNER          1
  #define MPIDI_NO_ASSERT       1
  #define TOKEN_FLOW_CONTROL    1
  #define DYNAMIC_TASKING       1
  #define CUDA_AWARE_SUPPORT    1
  
  /* 'is local task' extension and limits */
  #define PAMIX_IS_LOCAL_TASK
  #define PAMIX_IS_LOCAL_TASK_STRIDE  (1)
  #define PAMIX_IS_LOCAL_TASK_SHIFT   (0)
  #define MPIDI_SMP_DETECT_DEFAULT 1
  /*
   * Enable only the 'local vs remote' point-to-point eager limits.
   */
  #undef MPIDI_PT2PT_EAGER_LIMIT
  #define MPIDI_PT2PT_EAGER_LIMIT(is_internal,is_local)                           \
  ({                                                                              \
    MPIDI_Process.pt2pt.limits_lookup[0][0][is_local];                            \
  })
  
  /*
   * Enable only the 'local vs remote' point-to-point short limits.
   */
  #undef MPIDI_PT2PT_SHORT_LIMIT
  #define MPIDI_PT2PT_SHORT_LIMIT(is_internal,is_local)                           \
  ({                                                                              \
    MPIDI_Process.pt2pt.limits_lookup[0][1][is_local];                            \
  })
  
  
  #undef ASYNC_PROGRESS_MODE_DEFAULT
  #define ASYNC_PROGRESS_MODE_DEFAULT 2
  
  /* When the Pok build team extracts this file from CMVC, %W% will expand to */
  /* a string with the current release, for example ppe_rbarlx.               */
  /* If this file is cloned from GIT then %W% will not be expanded.  The      */
  /* banner code has accounted for this situation.                            */
  static const char _ibm_release_version_[] = "%W%";
  
  #endif
  
  #if TOKEN_FLOW_CONTROL
  #define BUFFER_MEM_DEFAULT (1<<26)          /* 64MB                         */
  #define BUFFER_MEM_MAX     (1<<26)          /* 64MB                         */
  #define ONE_SHARED_SEGMENT (1<<28)          /* 256MB                        */
  #define EAGER_LIMIT_DEFAULT     65536
  #define MAX_BUF_BKT_SIZE        (1<<18)     /* Max eager_limit is 256K     */
  #define MIN_BUF_BKT_SIZE        (64)
  #define TOKENS_BIT         (4)              /* 4 bits piggy back to sender */
                                              /* should be consistent with tokens
                                                 defined in MPIDI_MsgInfo    */
  #define TOKENS_BITMASK ((1 << TOKENS_BIT)-1)
  #endif
  
  #endif
  