Hi George,
joust out of curiosity, how much did that get You?

CU,
Rainer

On Saturday 07 July 2007 06:31, bosi...@osl.iu.edu wrote:
> Author: bosilca
> Date: 2007-07-07 00:31:06 EDT (Sat, 07 Jul 2007)
> New Revision: 15302
> URL: https://svn.open-mpi.org/trac/ompi/changeset/15302
>
> Log:
> Add few OPAL_LIKELY/OPAL_UNLIKELY to the datatype engine.
>
> Text files modified:
>    trunk/ompi/datatype/convertor.c |    20 ++++++++++----------
>    trunk/ompi/datatype/convertor.h |     9 +++++----
>    2 files changed, 15 insertions(+), 14 deletions(-)
>
> Modified: trunk/ompi/datatype/convertor.c
> ===========================================================================
>=== --- trunk/ompi/datatype/convertor.c        (original)
> +++ trunk/ompi/datatype/convertor.c   2007-07-07 00:31:06 EDT (Sat, 07 Jul
> 2007) @@ -229,7 +229,7 @@
>  {
>      OMPI_CONVERTOR_SET_STATUS_BEFORE_PACK_UNPACK( pConv, iov, out_size,
> max_data );
>
> -    if( pConv->flags & CONVERTOR_NO_OP ) {
> +    if( OPAL_LIKELY(pConv->flags & CONVERTOR_NO_OP) ) {
>          /* We are doing conversion on a contiguous datatype on a
> homogeneous * environment. The convertor contain minimal informations, we
> only * use the bConverted to manage the conversion.
> @@ -245,7 +245,7 @@
>              if( iov[i].iov_len >= pending_length ) {
>                  goto complete_contiguous_data_pack;
>              }
> -            if( NULL == iov[i].iov_base )
> +            if( OPAL_LIKELY(NULL == iov[i].iov_base) )
>                  iov[i].iov_base = base_pointer;
>              else
>                  MEMCPY( iov[i].iov_base, base_pointer, iov[i].iov_len );
> @@ -257,7 +257,7 @@
>          return 0;
>      complete_contiguous_data_pack:
>          iov[i].iov_len = pending_length;
> -        if( NULL == iov[i].iov_base )
> +        if( OPAL_LIKELY(NULL == iov[i].iov_base) )
>              iov[i].iov_base = base_pointer;
>          else
>              MEMCPY( iov[i].iov_base, base_pointer, iov[i].iov_len );
> @@ -276,7 +276,7 @@
>  {
>      OMPI_CONVERTOR_SET_STATUS_BEFORE_PACK_UNPACK( pConv, iov, out_size,
> max_data );
>
> -    if( pConv->flags & CONVERTOR_NO_OP ) {
> +    if( OPAL_LIKELY(pConv->flags & CONVERTOR_NO_OP) ) {
>          /* We are doing conversion on a contiguous datatype on a
> homogeneous * environment. The convertor contain minimal informations, we
> only * use the bConverted to manage the conversion.
> @@ -340,7 +340,7 @@
>      /* we save the current displacement starting from the begining
>       * of this data.
>       */
> -    if( 0 == count ) {
> +    if( OPAL_LIKELY(0 == count) ) {
>          pStack[1].type     = pElems->elem.common.type;
>          pStack[1].count    = pElems->elem.count;
>          pStack[1].disp     = pElems->elem.disp;
> @@ -403,7 +403,7 @@
>          rc = ompi_convertor_create_stack_at_begining( convertor,
> ompi_ddt_local_sizes ); if( 0 == (*position) ) return rc;
>      }
> -    if( convertor->flags & DT_FLAG_CONTIGUOUS ) {
> +    if( OPAL_LIKELY(convertor->flags & DT_FLAG_CONTIGUOUS) ) {
>          rc = ompi_convertor_create_stack_with_pos_contig( convertor,
> (*position), ompi_ddt_local_sizes ); } else {
> @@ -443,13 +443,13 @@
>           * completed. With this flag set the pack and unpack functions  \
>           * will not do anything.                                        \
>           */                                                             \
> -        if( OPAL_UNLIKELY(0 == convertor->local_size) ) {               \
> +        if( OPAL_UNLIKELY((0 == count) || (0 == datatype->size)) ) {    \
>              convertor->flags |= CONVERTOR_COMPLETED;                    \
>              convertor->remote_size = 0;                                 \
>              return OMPI_SUCCESS;                                        \
>          }                                                               \
>                                                                          \
> -        if( convertor->remoteArch == ompi_mpi_local_arch ) {            \
> +        if( OPAL_LIKELY(convertor->remoteArch == ompi_mpi_local_arch) ) {
> \ convertor->remote_size = convertor->local_size;             \ if(
> (convertor->flags & (CONVERTOR_WITH_CHECKSUM | DT_FLAG_NO_GAPS)) ==
> DT_FLAG_NO_GAPS ) { \ return OMPI_SUCCESS;                                 
>   \ @@ -599,7 +599,7 @@
>      destination->local_size        = source->local_size;
>      destination->remote_size       = source->remote_size;
>      /* create the stack */
> -    if( source->stack_size > DT_STATIC_STACK_SIZE ) {
> +    if( OPAL_UNLIKELY(source->stack_size > DT_STATIC_STACK_SIZE) ) {
>          destination->pStack = (dt_stack_t*)malloc(sizeof(dt_stack_t) *
> source->stack_size ); } else {
>          destination->pStack = destination->static_stack;
> @@ -607,7 +607,7 @@
>      destination->stack_size = source->stack_size;
>
>      /* initialize the stack */
> -    if( 0 == copy_stack ) {
> +    if( OPAL_LIKELY(0 == copy_stack) ) {
>          destination->bConverted = -1;
>          destination->stack_pos  = -1;
>      } else {
>
> Modified: trunk/ompi/datatype/convertor.h
> ===========================================================================
>=== --- trunk/ompi/datatype/convertor.h        (original)
> +++ trunk/ompi/datatype/convertor.h   2007-07-07 00:31:06 EDT (Sat, 07 Jul
> 2007) @@ -23,6 +23,7 @@
>  #include "ompi_config.h"
>  #include "ompi/constants.h"
>  #include "ompi/datatype/datatype.h"
> +#include "opal/prefetch.h"
>  #ifdef HAVE_SYS_TYPES_H
>  #include <sys/types.h>
>  #endif
> @@ -143,7 +144,7 @@
>   */
>  static inline int ompi_convertor_cleanup( ompi_convertor_t* convertor )
>  {
> -    if( convertor->stack_size > DT_STATIC_STACK_SIZE ) {
> +    if( OPAL_UNLIKELY(convertor->stack_size > DT_STATIC_STACK_SIZE) ) {
>          free( convertor->pStack );
>          convertor->pStack     = convertor->static_stack;
>          convertor->stack_size = DT_STATIC_STACK_SIZE;
> @@ -256,13 +257,13 @@
>      /*
>       * If the convertor is already at the correct position we are happy.
>       */
> -    if( (*position) == convertor->bConverted ) return OMPI_SUCCESS;
> +    if( OPAL_LIKELY((*position) == convertor->bConverted) ) return
> OMPI_SUCCESS;
>
>      /*
>       * Do not allow the convertor to go outside the data boundaries. This
> test include * the check for datatype with size zero as well as for
> convertors with a count of zero. */
> -    if( convertor->local_size <= *position) {
> +    if( OPAL_UNLIKELY(convertor->local_size <= *position) ) {
>          convertor->flags |= CONVERTOR_COMPLETED;
>          convertor->bConverted = convertor->local_size;
>          *position = convertor->bConverted;
> @@ -291,7 +292,7 @@
>  {
>      convertor->flags |= flags;
>
> -    if( NULL == position )
> +    if( OPAL_UNLIKELY(NULL == position) )
>          return OMPI_SUCCESS;
>      return ompi_convertor_set_position( convertor, position );
>  }
> _______________________________________________
> svn-full mailing list
> svn-f...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/svn-full

-- 
----------------------------------------------------------------
Dipl.-Inf. Rainer Keller       http://www.hlrs.de/people/keller
 High Performance Computing       Tel: ++49 (0)711-685 6 5858
   Center Stuttgart (HLRS)           Fax: ++49 (0)711-685 6 5832
 POSTAL:Nobelstrasse 19                 email: kel...@hlrs.de     
 ACTUAL:Allmandring 30, R.O.030            AIM:rusraink
 70550 Stuttgart

Reply via email to