1
1
openmpi/ompi/mca/bcol/basesmuma/bcol_basesmuma_utils.h
Pavel Shamis b89f8fabc9 Adding Hierarchical Collectives project to the Open MPI trunk.
The project includes following components and frameworks: 
- ML Collective component
- NETPATTERNS and COMMPATTERNS common components
- BCOL framework
- SBGP framework

Note: By default the ML collective component is disabled. In order to enable
new collectives user should bump up the priority of ml component (coll_ml_priority)

=============================================

Primary Contributors (in alphabetical order):

Ishai Rabinovich (Mellanox)
Joshua S. Ladd (ORNL / Mellanox)
Manjunath Gorentla Venkata (ORNL)
Mike Dubman (Mellanox)
Noam Bloch (Mellanox)
Pavel (Pasha) Shamis (ORNL / Mellanox)
Richard Graham (ORNL / Mellanox)
Vasily Filipov (Mellanox)

This commit was SVN r27078.
2012-08-16 19:11:35 +00:00

68 строки
1.9 KiB
C

/*
* Copyright (c) 2009-2012 Oak Ridge National Laboratory. All rights reserved.
* Copyright (c) 2009-2012 Mellanox Technologies. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
#ifndef MCA_BCOL_BASESMUMA_UTILS_H
#define MCA_BCOL_BASESMUMA_UTILS_H
#include "ompi_config.h"
#include "orte/util/proc_info.h"
#include "orte/util/name_fns.h"
#include "orte/runtime/orte_globals.h"
BEGIN_C_DECLS
#define BASESMUMA_K_NOMIAL_SEND_CHILDREN(radix_mask,radix,relative_index, \
my_group_index, group_size, ready_flag) \
do { \
int k, child; \
while(radix_mask > 0){ \
for(k = 1; k < radix && relative_index+radix_mask*k<group_size; \
k++) {\
child = my_group_index+radix_mask*k; \
if(child >= group_size) { \
child -= group_size; \
} \
/*fprintf(stderr,"I am %d sending to child %d\n",my_group_index,child);*/ \
child_ctl_pointer = data_buffs[child].ctl_struct; \
child_ctl_pointer->src = my_group_index; \
/* this can be improved to make better asynchronous progress, but it's
* fine for now.
*/ \
while(child_ctl_pointer->sequence_number != sequence_number ); \
child_ctl_pointer->flags[BCAST_FLAG][bcol_id] = ready_flag; \
} \
radix_mask = radix_mask/radix; \
} \
} while( 0 )
/*
* Return closet power of K that is greater than or equal to "number".
*/
int pow_sm_k(int radix_k, int group_size, int *pow_k_group_size);
/*
* Get list of possible sources from which data may arrive based on a K-nomial tree fan-out.
*/
int get_k_nomial_src_list(int group_size, int radix,
int my_index, int *src_list);
int get_k_nomial_dst_size(int group_size, int radix, int my_index);
END_C_DECLS
#endif