root/oshmem/shmem/c/shmem_alltoall.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. _shmem_alltoall

   1 /*
   2  * Copyright (c) 2016-2018 Mellanox Technologies, Inc.
   3  *                         All rights reserved.
   4  * Copyright (c) 2019      Research Organization for Information Science
   5  *                         and Technology (RIST).  All rights reserved.
   6  * $COPYRIGHT$
   7  *
   8  * Additional copyrights may follow
   9  *
  10  * $HEADER$
  11  */
  12 #include "oshmem_config.h"
  13 
  14 #include "oshmem/constants.h"
  15 #include "oshmem/include/shmem.h"
  16 
  17 #include "oshmem/runtime/runtime.h"
  18 
  19 #include "oshmem/mca/scoll/scoll.h"
  20 
  21 #include "oshmem/proc/proc.h"
  22 
  23 static void _shmem_alltoall(void *target,
  24                             const void *source,
  25                             ptrdiff_t dst, ptrdiff_t sst,
  26                             size_t nelems,
  27                             size_t element_size,
  28                             int PE_start,
  29                             int logPE_stride,
  30                             int PE_size,
  31                             long *pSync);
  32 
  33 #define SHMEM_TYPE_ALLTOALL(name, element_size)                      \
  34     void shmem##name(void *target,                                   \
  35                      const void *source,                             \
  36                      size_t nelems,                                  \
  37                      int PE_start,                                   \
  38                      int logPE_stride,                               \
  39                      int PE_size,                                    \
  40                      long *pSync)                                    \
  41 {                                                                    \
  42     RUNTIME_CHECK_INIT();                                            \
  43     RUNTIME_CHECK_ADDR_SIZE(target, nelems);                         \
  44     RUNTIME_CHECK_ADDR_SIZE(source, nelems);                         \
  45                                                                      \
  46     _shmem_alltoall(target, source, 1, 1, nelems, element_size,      \
  47                        PE_start, logPE_stride, PE_size,              \
  48                        pSync);                                       \
  49 }
  50 
  51 #define SHMEM_TYPE_ALLTOALLS(name, element_size)                     \
  52     void shmem##name(void *target,                                   \
  53                      const void *source,                             \
  54                      ptrdiff_t dst, ptrdiff_t sst,                   \
  55                      size_t nelems,                                  \
  56                      int PE_start,                                   \
  57                      int logPE_stride,                               \
  58                      int PE_size,                                    \
  59                      long *pSync)                                    \
  60 {                                                                    \
  61     RUNTIME_CHECK_INIT();                                            \
  62     RUNTIME_CHECK_ADDR_SIZE(target, nelems);                         \
  63     RUNTIME_CHECK_ADDR_SIZE(source, nelems);                         \
  64                                                                      \
  65     _shmem_alltoall(target, source, dst, sst, nelems, element_size,  \
  66                        PE_start, logPE_stride, PE_size,              \
  67                        pSync);                                       \
  68 }
  69 
  70 static void _shmem_alltoall(void *target,
  71                             const void *source,
  72                             ptrdiff_t dst, ptrdiff_t sst,
  73                             size_t nelems,
  74                             size_t element_size,
  75                             int PE_start,
  76                             int logPE_stride,
  77                             int PE_size,
  78                             long *pSync)
  79 {
  80     int rc;
  81     oshmem_group_t* group;
  82 
  83     /* Create group basing PE_start, logPE_stride and PE_size */
  84     group = oshmem_proc_group_create_nofail(PE_start, 1<<logPE_stride, PE_size);
  85     /* Call collective alltoall operation */
  86     rc = group->g_scoll.scoll_alltoall(group,
  87                                        target,
  88                                        source,
  89                                        dst,
  90                                        sst,
  91                                        nelems,
  92                                        element_size,
  93                                        pSync,
  94                                        SCOLL_DEFAULT_ALG);
  95     oshmem_proc_group_destroy(group);
  96     RUNTIME_CHECK_RC(rc);
  97 }
  98 
  99 #if OSHMEM_PROFILING
 100 #include "oshmem/include/pshmem.h"
 101 #pragma weak shmem_alltoall32 = pshmem_alltoall32
 102 #pragma weak shmem_alltoall64 = pshmem_alltoall64
 103 #pragma weak shmem_alltoalls32 = pshmem_alltoalls32
 104 #pragma weak shmem_alltoalls64 = pshmem_alltoalls64
 105 #include "oshmem/shmem/c/profile/defines.h"
 106 #endif
 107 
 108 SHMEM_TYPE_ALLTOALL(_alltoall32, sizeof(uint32_t))
 109 SHMEM_TYPE_ALLTOALL(_alltoall64, sizeof(uint64_t))
 110 SHMEM_TYPE_ALLTOALLS(_alltoalls32, sizeof(uint32_t))
 111 SHMEM_TYPE_ALLTOALLS(_alltoalls64, sizeof(uint64_t))

/* [<][>][^][v][top][bottom][index][help] */