Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
106 commits
Select commit Hold shift + click to select a range
e3a5061
Add a monitoring PML. This PML track all data exchanges by the processes
bosilca Mar 5, 2015
e3beaff
Fix a convertion problem and add a comment about the lack of component
bosilca Jul 25, 2015
c0b7932
add ability to querry pml monitorinting results with MPI Tools interface
gpapaure May 6, 2015
8db21b1
Allow the pvar to be written by invoking the associated callback.
bosilca Sep 15, 2015
d911c50
Various fixes for the monitoring.
bosilca Sep 16, 2016
d86fa51
Cleanup for the monitoring module.
bosilca Sep 21, 2016
b9c810a
Adding documentation about how to use pml_monitoring component, with …
clementFoyer Sep 23, 2016
6c1a506
Change rank into MPI_COMM_WORLD and size(MPI_COMM_WORLD) to global va…
Sep 26, 2016
d1e0a7d
Adapting code for MPI_T use
clementFoyer Sep 26, 2016
c1703b2
Use mca_pml_monitoring_enable to check status state. Set mca_pml_moni…
clementFoyer Sep 26, 2016
a45d03f
Fix typos in comments
clementFoyer Sep 26, 2016
fbc55b0
Allow 3 modes for pml_monitoring_enable_output :
clementFoyer Sep 27, 2016
d932bcc
Fix test : 1 for differenciated messages, >1 for not differenciated. …
clementFoyer Sep 27, 2016
52cf7c6
Add documentation for pml_monitoring_enable_output parameter. Remove …
clementFoyer Sep 27, 2016
f289b1a
Set filename only if using mpi tools
clementFoyer Sep 27, 2016
5d33f8c
Adding missing parameters for fprintf in monitoring_flush (for output…
clementFoyer Sep 27, 2016
be44c0a
Fix expected output/results for example header
clementFoyer Sep 27, 2016
586d255
Fix test for reseting the filename value to NULL.
clementFoyer Sep 28, 2016
af479aa
Fix exemple when using MPI_Tools : a null-pointer can't be passed dir…
clementFoyer Sep 28, 2016
89c9c5d
Re-enabling the saved copy of given filename. Adding a check for empt…
clementFoyer Sep 29, 2016
5b317b2
Base whether to output or not on message count, in order to print som…
clementFoyer Sep 29, 2016
9460414
Add a new example on how to access performance variables from within …
clementFoyer Oct 3, 2016
dff4dd3
Allocate arrays regarding value returned by binding
clementFoyer Oct 4, 2016
6fa5ccc
Remove double include in pml_monitoring.h
clementFoyer Oct 12, 2016
2b13924
Add a third phase with RMA monitoring
clementFoyer Oct 12, 2016
70ec61b
Add overhead benchmark, with script to use data and create graphs out…
clementFoyer Oct 13, 2016
2ac7082
Fix segfault error at end when not loading pml
clementFoyer Oct 19, 2016
12f7f11
Start create common monitoring module. Factorise version numbering
clementFoyer Oct 21, 2016
ca88198
Fix microbenchmarks script
clementFoyer Oct 21, 2016
08b45a9
Improve readability of code
clementFoyer Oct 21, 2016
b6ab213
Add osc monitoring component
clementFoyer Oct 21, 2016
ed3de24
Resolve brutal segfault when double freeing filename
clementFoyer Oct 21, 2016
fb8426b
Add error checking if running out of memory in osc_monitoring
clementFoyer Oct 21, 2016
6baa1b7
NULL can't be passed as a PVAR parameter value. It must be a pointer …
clementFoyer Oct 24, 2016
7a38c27
Removing files, to use templates
clementFoyer Oct 25, 2016
d9ceced
Templating to intertwine our monitoring functions.
clementFoyer Oct 25, 2016
ff69057
Moving to ompi/mca/common the proper parts of the monitoring system
clementFoyer Oct 26, 2016
2aa5e93
Fix linking library with mca/common
clementFoyer Oct 27, 2016
3f1175a
Add calls to record monitored data from osc. Use common function to t…
clementFoyer Oct 26, 2016
0411c47
Fix test_overhead benchmark script distribution
clementFoyer Oct 27, 2016
435fc49
Add passive operations in monitoring_test
clementFoyer Oct 27, 2016
ee4dcce
Fix from rank calculation. Add more detailed error messages
clementFoyer Oct 27, 2016
b21bdeb
Fix alignments. Fix common_monitoring_get_world_rank function. Remove…
clementFoyer Oct 27, 2016
35826f5
Fix osc_monitoring mget_message_count function call
clementFoyer Oct 28, 2016
364d3da
Change common_monitoring function names to respect the naming convent…
clementFoyer Oct 28, 2016
7257a10
Add monitoring common output system
clementFoyer Nov 2, 2016
31402de
Automatic add of the portals4 template. Define recv_data function. Ad…
clementFoyer Nov 4, 2016
a535e11
Add error message when trying to flush to a file, and open fails. Rem…
clementFoyer Nov 4, 2016
c58a30b
Consistent output file name (with and without MPI_T).
clementFoyer Nov 8, 2016
4640417
Always output to a file when flushing at pvar_stop(flush).
clementFoyer Nov 9, 2016
6eb3565
Update the monitoring documentation.
clementFoyer Nov 9, 2016
386b43b
Use the world_rank for printf's.
clementFoyer Nov 9, 2016
b5e682e
Clean potential previous runs, but keep the results at the end in ord…
clementFoyer Nov 9, 2016
fa3d013
Add security check for unique initialization for osc monitoring
clementFoyer Nov 10, 2016
c7e8a1e
Clean the amout of symbols available outside mca/common/monitoring
clementFoyer Nov 10, 2016
caea88c
Remove use of __sync_* built-ins. Use opal_atomic_* instead.
clementFoyer Nov 10, 2016
18c2d16
Add histogram ditribution of message sizes
clementFoyer Nov 21, 2016
d7b609b
Allocate the hashtable on common/monitoring component initialization.…
clementFoyer Nov 18, 2016
1eed2b7
Deleting now useless file : moved to common/monitoring
clementFoyer Nov 18, 2016
c60720c
Add histogram array of 2-based log of message sizes. Use simple call …
clementFoyer Nov 21, 2016
4875f77
Add informations in dumping file. Separate per category (pt2pt/osc/co…
clementFoyer Nov 21, 2016
95d50d3
Add coll component for collectives communications monitoring
clementFoyer Nov 21, 2016
4ea3976
Fix warning messages : use c_name as the magic id is not always defin…
clementFoyer Nov 22, 2016
1909813
Fix log10_2 constant initialization. Fix index calculation for histog…
clementFoyer Nov 22, 2016
1f7b99f
Add debug info messages to follow more easily initialization steps.
clementFoyer Nov 22, 2016
f1f38dc
Group all the var/pvar definitions to common_monitoring. Separate ini…
clementFoyer Nov 24, 2016
398532b
Fix invalid memory allocation. Initialize initial_filename to empty s…
clementFoyer Nov 25, 2016
18e6fe7
Fix missing procs in hashtable. Cache monitoring data relative to col…
clementFoyer Nov 28, 2016
b4b6e2c
Don't install the test scripts.
bosilca Nov 28, 2016
47a2a53
Use intermediate variable to avoid invalid write while retrieving ran…
clementFoyer Nov 29, 2016
c6fc1ac
Add missing release of the last element in flush_all. Add release of …
clementFoyer Nov 29, 2016
a59d157
Use a linked list instead of a hashtable to keep tracks of communicat…
clementFoyer Nov 29, 2016
05a0f79
Set world_rank from hashtable only if found
clementFoyer Nov 30, 2016
016df4b
Use predefined symbol from opal system to print int
clementFoyer Nov 30, 2016
01f562d
Move collective monitoring data to a hashtable. Add pvar to access th…
clementFoyer Nov 30, 2016
c9eb271
Fix pvar registration. Use OMPI_ERROR isntead of -1 as returned error…
clementFoyer Dec 6, 2016
863358b
Add automated check (with MPI_Tools) of monitoring.
clementFoyer Dec 6, 2016
ee2108f
Fix procs list caching in common_monitoring_coll_data_t
clementFoyer Dec 6, 2016
ba4f1dc
Fix error when freeing a released coll_monitoring_data hash_table ele…
clementFoyer Dec 8, 2016
145ac28
Fix monitoring_coll_data type definition. Use size(COMM_WORLD)-1 to d…
clementFoyer Dec 9, 2016
c7226c6
Add linking to Fortran applications for LD_PRELOAD usage of monitorin…
clementFoyer Dec 13, 2016
2093341
Add PVAR's handles. Clean up code (visibility, add comments...). Star…
clementFoyer Dec 14, 2016
80f1cd8
Fix coll operations monitoring. Update check_monitoring accordingly t…
clementFoyer Dec 15, 2016
bbdb904
Documentation update.
clementFoyer Dec 15, 2016
bc9a5c0
Aggregate monitoring COLL data to the generated matrix. Update docume…
clementFoyer Dec 15, 2016
e608b1c
Fix monitoring_prof (bad variable.vector used, and wrong array in PMP…
clementFoyer Dec 15, 2016
ec50c74
Add reduce_scatter and reduce_scatter_block monitoring. Reduce memory…
clementFoyer Dec 16, 2016
4ac76be
Add exchanged data estimation for reduce_scatter. Use proper variable…
clementFoyer Dec 19, 2016
05bb715
Add exchanged data estimation for reduce_scatter_block
clementFoyer Dec 19, 2016
8dba3b8
Straighten the value defined for a filtered/non-filtered monitoring.
clementFoyer Jan 17, 2017
fffc98a
Add the use of a machine file for overhead benchmark
clementFoyer Jan 17, 2017
b2dd028
Check for out-of-bound write in histogram
clementFoyer Jan 18, 2017
cb650c4
Fix common_monitoring_cache object init for MPI_COMM_WORLD
clementFoyer Jan 19, 2017
42c0e65
Add RDMA benchmarks to test_overhead
clementFoyer Feb 1, 2017
d60d3d1
Add error file output. Add MPI_Put and MPI_Get results analysis. Add …
clementFoyer Feb 10, 2017
a2aec9e
Add computation of average and median of overheads. Add comments and …
clementFoyer Feb 17, 2017
929113d
Add technical documentation
clementFoyer Feb 24, 2017
eb09a56
Add dumping histogram in edge case
clementFoyer Mar 3, 2017
7e15100
Update expected output in test/monitoring/monitoring_test.c
clementFoyer Mar 2, 2017
162bff6
Adding a reduce(pml_monitoring_messages_count, MPI_MAX) example
clementFoyer Mar 6, 2017
869b60e
Adapt to the new definition of communicators
clementFoyer Mar 1, 2017
8b557bf
Add consistency in header inclusion.
clementFoyer Mar 7, 2017
c3bcc0d
test/monitoring: fix test when weak symbols are not available
ggouaillardet Mar 9, 2017
bc67325
monitoring: fix a typo and add a missing file in Makefile.am
ggouaillardet Mar 9, 2017
766cbe1
test/monitoring: cleanup all tests and make distclean a happy panda
ggouaillardet Mar 9, 2017
c9f7069
test/monitoring: use gettimeofday() if clock_gettime() is unavailable
ggouaillardet Mar 9, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions ompi/mca/coll/monitoring/Makefile.am
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#
# Copyright (c) 2016 Inria. All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
#
# $HEADER$
#

monitoring_sources = \
coll_monitoring.h \
coll_monitoring_allgather.c \
coll_monitoring_allgatherv.c \
coll_monitoring_allreduce.c \
coll_monitoring_alltoall.c \
coll_monitoring_alltoallv.c \
coll_monitoring_alltoallw.c \
coll_monitoring_barrier.c \
coll_monitoring_bcast.c \
coll_monitoring_component.c \
coll_monitoring_exscan.c \
coll_monitoring_gather.c \
coll_monitoring_gatherv.c \
coll_monitoring_neighbor_allgather.c \
coll_monitoring_neighbor_allgatherv.c \
coll_monitoring_neighbor_alltoall.c \
coll_monitoring_neighbor_alltoallv.c \
coll_monitoring_neighbor_alltoallw.c \
coll_monitoring_reduce.c \
coll_monitoring_reduce_scatter.c \
coll_monitoring_reduce_scatter_block.c \
coll_monitoring_scan.c \
coll_monitoring_scatter.c \
coll_monitoring_scatterv.c

if MCA_BUILD_ompi_coll_monitoring_DSO
component_noinst =
component_install = mca_coll_monitoring.la
else
component_noinst = libmca_coll_monitoring.la
component_install =
endif

mcacomponentdir = $(ompilibdir)
mcacomponent_LTLIBRARIES = $(component_install)
mca_coll_monitoring_la_SOURCES = $(monitoring_sources)
mca_coll_monitoring_la_LDFLAGS = -module -avoid-version
mca_coll_monitoring_la_LIBADD = \
$(OMPI_TOP_BUILDDIR)/ompi/mca/common/monitoring/libmca_common_monitoring.la

noinst_LTLIBRARIES = $(component_noinst)
libmca_coll_monitoring_la_SOURCES = $(monitoring_sources)
libmca_coll_monitoring_la_LDFLAGS = -module -avoid-version
383 changes: 383 additions & 0 deletions ompi/mca/coll/monitoring/coll_monitoring.h

Large diffs are not rendered by default.

71 changes: 71 additions & 0 deletions ompi/mca/coll/monitoring/coll_monitoring_allgather.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/*
* Copyright (c) 2016-2017 Inria. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/

#include <ompi_config.h>
#include <ompi/request/request.h>
#include <ompi/datatype/ompi_datatype.h>
#include <ompi/communicator/communicator.h>
#include "coll_monitoring.h"

int mca_coll_monitoring_allgather(const void *sbuf, int scount,
struct ompi_datatype_t *sdtype,
void *rbuf, int rcount,
struct ompi_datatype_t *rdtype,
struct ompi_communicator_t *comm,
mca_coll_base_module_t *module)
{
mca_coll_monitoring_module_t*monitoring_module = (mca_coll_monitoring_module_t*) module;
size_t type_size, data_size;
const int comm_size = ompi_comm_size(comm);
const int my_rank = ompi_comm_rank(comm);
int i, rank;
ompi_datatype_type_size(sdtype, &type_size);
data_size = scount * type_size;
mca_common_monitoring_coll_a2a(data_size * (comm_size - 1), monitoring_module->data);
for( i = 0; i < comm_size; ++i ) {
if( i == my_rank ) continue; /* No communication for self */
/**
* If this fails the destination is not part of my MPI_COM_WORLD
* Lookup its name in the rank hastable to get its MPI_COMM_WORLD rank
*/
if( OPAL_SUCCESS == mca_common_monitoring_get_world_rank(i, comm, &rank) ) {
mca_common_monitoring_record_coll(rank, data_size);
}
}
return monitoring_module->real.coll_allgather(sbuf, scount, sdtype, rbuf, rcount, rdtype, comm, monitoring_module->real.coll_allgather_module);
}

int mca_coll_monitoring_iallgather(const void *sbuf, int scount,
struct ompi_datatype_t *sdtype,
void *rbuf, int rcount,
struct ompi_datatype_t *rdtype,
struct ompi_communicator_t *comm,
ompi_request_t ** request,
mca_coll_base_module_t *module)
{
mca_coll_monitoring_module_t*monitoring_module = (mca_coll_monitoring_module_t*) module;
size_t type_size, data_size;
const int comm_size = ompi_comm_size(comm);
const int my_rank = ompi_comm_rank(comm);
int i, rank;
ompi_datatype_type_size(sdtype, &type_size);
data_size = scount * type_size;
mca_common_monitoring_coll_a2a(data_size * (comm_size - 1), monitoring_module->data);
for( i = 0; i < comm_size; ++i ) {
if( my_rank == i ) continue; /* No communication for self */
/**
* If this fails the destination is not part of my MPI_COM_WORLD
* Lookup its name in the rank hastable to get its MPI_COMM_WORLD rank
*/
if( OPAL_SUCCESS == mca_common_monitoring_get_world_rank(i, comm, &rank) ) {
mca_common_monitoring_record_coll(rank, data_size);
}
}
return monitoring_module->real.coll_iallgather(sbuf, scount, sdtype, rbuf, rcount, rdtype, comm, request, monitoring_module->real.coll_iallgather_module);
}
71 changes: 71 additions & 0 deletions ompi/mca/coll/monitoring/coll_monitoring_allgatherv.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/*
* Copyright (c) 2016-2017 Inria. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/

#include <ompi_config.h>
#include <ompi/request/request.h>
#include <ompi/datatype/ompi_datatype.h>
#include <ompi/communicator/communicator.h>
#include "coll_monitoring.h"

int mca_coll_monitoring_allgatherv(const void *sbuf, int scount,
struct ompi_datatype_t *sdtype,
void * rbuf, const int *rcounts, const int *disps,
struct ompi_datatype_t *rdtype,
struct ompi_communicator_t *comm,
mca_coll_base_module_t *module)
{
mca_coll_monitoring_module_t*monitoring_module = (mca_coll_monitoring_module_t*) module;
size_t type_size, data_size;
const int comm_size = ompi_comm_size(comm);
const int my_rank = ompi_comm_rank(comm);
int i, rank;
ompi_datatype_type_size(sdtype, &type_size);
data_size = scount * type_size;
mca_common_monitoring_coll_a2a(data_size * (comm_size - 1), monitoring_module->data);
for( i = 0; i < comm_size; ++i ) {
if( my_rank == i ) continue; /* No communication for self */
/**
* If this fails the destination is not part of my MPI_COM_WORLD
* Lookup its name in the rank hastable to get its MPI_COMM_WORLD rank
*/
if( OPAL_SUCCESS == mca_common_monitoring_get_world_rank(i, comm, &rank) ) {
mca_common_monitoring_record_coll(rank, data_size);
}
}
return monitoring_module->real.coll_allgatherv(sbuf, scount, sdtype, rbuf, rcounts, disps, rdtype, comm, monitoring_module->real.coll_allgatherv_module);
}

int mca_coll_monitoring_iallgatherv(const void *sbuf, int scount,
struct ompi_datatype_t *sdtype,
void * rbuf, const int *rcounts, const int *disps,
struct ompi_datatype_t *rdtype,
struct ompi_communicator_t *comm,
ompi_request_t ** request,
mca_coll_base_module_t *module)
{
mca_coll_monitoring_module_t*monitoring_module = (mca_coll_monitoring_module_t*) module;
size_t type_size, data_size;
const int comm_size = ompi_comm_size(comm);
const int my_rank = ompi_comm_rank(comm);
int i, rank;
ompi_datatype_type_size(sdtype, &type_size);
data_size = scount * type_size;
mca_common_monitoring_coll_a2a(data_size * (comm_size - 1), monitoring_module->data);
for( i = 0; i < comm_size; ++i ) {
if( my_rank == i ) continue; /* No communication for self */
/**
* If this fails the destination is not part of my MPI_COM_WORLD
* Lookup its name in the rank hastable to get its MPI_COMM_WORLD rank
*/
if( OPAL_SUCCESS == mca_common_monitoring_get_world_rank(i, comm, &rank) ) {
mca_common_monitoring_record_coll(rank, data_size);
}
}
return monitoring_module->real.coll_iallgatherv(sbuf, scount, sdtype, rbuf, rcounts, disps, rdtype, comm, request, monitoring_module->real.coll_iallgatherv_module);
}
70 changes: 70 additions & 0 deletions ompi/mca/coll/monitoring/coll_monitoring_allreduce.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
/*
* Copyright (c) 2016-2017 Inria. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/

#include <ompi_config.h>
#include <ompi/op/op.h>
#include <ompi/request/request.h>
#include <ompi/datatype/ompi_datatype.h>
#include <ompi/communicator/communicator.h>
#include "coll_monitoring.h"

int mca_coll_monitoring_allreduce(const void *sbuf, void *rbuf, int count,
struct ompi_datatype_t *dtype,
struct ompi_op_t *op,
struct ompi_communicator_t *comm,
mca_coll_base_module_t *module)
{
mca_coll_monitoring_module_t*monitoring_module = (mca_coll_monitoring_module_t*) module;
size_t type_size, data_size;
const int comm_size = ompi_comm_size(comm);
const int my_rank = ompi_comm_rank(comm);
int i, rank;
ompi_datatype_type_size(dtype, &type_size);
data_size = count * type_size;
mca_common_monitoring_coll_a2a(data_size * (comm_size - 1), monitoring_module->data);
for( i = 0; i < comm_size; ++i ) {
if( my_rank == i ) continue; /* No communication for self */
/**
* If this fails the destination is not part of my MPI_COM_WORLD
* Lookup its name in the rank hastable to get its MPI_COMM_WORLD rank
*/
if( OPAL_SUCCESS == mca_common_monitoring_get_world_rank(i, comm, &rank) ) {
mca_common_monitoring_record_coll(rank, data_size);
}
}
return monitoring_module->real.coll_allreduce(sbuf, rbuf, count, dtype, op, comm, monitoring_module->real.coll_allreduce_module);
}

int mca_coll_monitoring_iallreduce(const void *sbuf, void *rbuf, int count,
struct ompi_datatype_t *dtype,
struct ompi_op_t *op,
struct ompi_communicator_t *comm,
ompi_request_t ** request,
mca_coll_base_module_t *module)
{
mca_coll_monitoring_module_t*monitoring_module = (mca_coll_monitoring_module_t*) module;
size_t type_size, data_size;
const int comm_size = ompi_comm_size(comm);
const int my_rank = ompi_comm_rank(comm);
int i, rank;
ompi_datatype_type_size(dtype, &type_size);
data_size = count * type_size;
mca_common_monitoring_coll_a2a(data_size * (comm_size - 1), monitoring_module->data);
for( i = 0; i < comm_size; ++i ) {
if( my_rank == i ) continue; /* No communication for self */
/**
* If this fails the destination is not part of my MPI_COM_WORLD
* Lookup its name in the rank hastable to get its MPI_COMM_WORLD rank
*/
if( OPAL_SUCCESS == mca_common_monitoring_get_world_rank(i, comm, &rank) ) {
mca_common_monitoring_record_coll(rank, data_size);
}
}
return monitoring_module->real.coll_iallreduce(sbuf, rbuf, count, dtype, op, comm, request, monitoring_module->real.coll_iallreduce_module);
}
69 changes: 69 additions & 0 deletions ompi/mca/coll/monitoring/coll_monitoring_alltoall.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/*
* Copyright (c) 2016-2017 Inria. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/

#include <ompi_config.h>
#include <ompi/request/request.h>
#include <ompi/datatype/ompi_datatype.h>
#include <ompi/communicator/communicator.h>
#include "coll_monitoring.h"

int mca_coll_monitoring_alltoall(const void *sbuf, int scount, struct ompi_datatype_t *sdtype,
void* rbuf, int rcount, struct ompi_datatype_t *rdtype,
struct ompi_communicator_t *comm,
mca_coll_base_module_t *module)
{
mca_coll_monitoring_module_t*monitoring_module = (mca_coll_monitoring_module_t*) module;
size_t type_size, data_size;
const int comm_size = ompi_comm_size(comm);
const int my_rank = ompi_comm_rank(comm);
int i, rank;
ompi_datatype_type_size(sdtype, &type_size);
data_size = scount * type_size;
mca_common_monitoring_coll_a2a(data_size * (comm_size - 1), monitoring_module->data);
for( i = 0; i < comm_size; ++i ) {
if( my_rank == i ) continue; /* No communication for self */
/**
* If this fails the destination is not part of my MPI_COM_WORLD
* Lookup its name in the rank hastable to get its MPI_COMM_WORLD rank
*/
if( OPAL_SUCCESS == mca_common_monitoring_get_world_rank(i, comm, &rank) ) {
mca_common_monitoring_record_coll(rank, data_size);
}
}
return monitoring_module->real.coll_alltoall(sbuf, scount, sdtype, rbuf, rcount, rdtype, comm, monitoring_module->real.coll_alltoall_module);
}

int mca_coll_monitoring_ialltoall(const void *sbuf, int scount,
struct ompi_datatype_t *sdtype,
void *rbuf, int rcount,
struct ompi_datatype_t *rdtype,
struct ompi_communicator_t *comm,
ompi_request_t ** request,
mca_coll_base_module_t *module)
{
mca_coll_monitoring_module_t*monitoring_module = (mca_coll_monitoring_module_t*) module;
size_t type_size, data_size;
const int comm_size = ompi_comm_size(comm);
const int my_rank = ompi_comm_rank(comm);
int i, rank;
ompi_datatype_type_size(sdtype, &type_size);
data_size = scount * type_size;
mca_common_monitoring_coll_a2a(data_size * (comm_size - 1), monitoring_module->data);
for( i = 0; i < comm_size; ++i ) {
if( my_rank == i ) continue; /* No communication for self */
/**
* If this fails the destination is not part of my MPI_COM_WORLD
* Lookup its name in the rank hastable to get its MPI_COMM_WORLD rank
*/
if( OPAL_SUCCESS == mca_common_monitoring_get_world_rank(i, comm, &rank) ) {
mca_common_monitoring_record_coll(rank, data_size);
}
}
return monitoring_module->real.coll_ialltoall(sbuf, scount, sdtype, rbuf, rcount, rdtype, comm, request, monitoring_module->real.coll_ialltoall_module);
}
Loading