A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
secure collectives against some allowed uninitialized variables
[simgrid.git]
/
src
/
smpi
/
bindings
/
smpi_pmpi_coll.cpp
diff --git
a/src/smpi/bindings/smpi_pmpi_coll.cpp
b/src/smpi/bindings/smpi_pmpi_coll.cpp
index
2ae8177
..
6c990d4
100644
(file)
--- a/
src/smpi/bindings/smpi_pmpi_coll.cpp
+++ b/
src/smpi/bindings/smpi_pmpi_coll.cpp
@@
-99,7
+99,6
@@
int PMPI_Igather(const void* sendbuf, int sendcount, MPI_Datatype sendtype, void
{
CHECK_COMM(8)
SET_BUF1(sendbuf)
- SET_BUF2(recvbuf)
int rank = comm->rank();
if(sendbuf != MPI_IN_PLACE){
CHECK_COUNT(2, sendcount)
@@
-107,6
+106,7
@@
int PMPI_Igather(const void* sendbuf, int sendcount, MPI_Datatype sendtype, void
CHECK_BUFFER(1,sendbuf, sendcount, sendtype)
}
if(rank == root){
+ SET_BUF2(recvbuf)
CHECK_NOT_IN_PLACE_ROOT(4, recvbuf)
CHECK_TYPE(6, recvtype)
CHECK_COUNT(5, recvcount)
@@
-159,7
+159,6
@@
int PMPI_Igatherv(const void* sendbuf, int sendcount, MPI_Datatype sendtype, voi
{
CHECK_COMM(9)
SET_BUF1(sendbuf)
- SET_BUF2(recvbuf)
int rank = comm->rank();
if(sendbuf != MPI_IN_PLACE){
CHECK_TYPE(3, sendtype)
@@
-167,6
+166,7
@@
int PMPI_Igatherv(const void* sendbuf, int sendcount, MPI_Datatype sendtype, voi
}
CHECK_BUFFER(1, sendbuf, sendcount, sendtype)
if(rank == root){
+ SET_BUF2(recvbuf)
CHECK_NOT_IN_PLACE_ROOT(4, recvbuf)
CHECK_TYPE(6, recvtype)
CHECK_NULL(5, MPI_ERR_COUNT, recvcounts)
@@
-196,7
+196,8
@@
int PMPI_Igatherv(const void* sendbuf, int sendcount, MPI_Datatype sendtype, voi
aid_t pid = simgrid::s4u::this_actor::get_pid();
auto trace_recvcounts = std::make_shared<std::vector<int>>();
- trace_recvcounts->insert(trace_recvcounts->end(), &recvcounts[0], &recvcounts[comm->size()]);
+ if (rank == root)
+ trace_recvcounts->insert(trace_recvcounts->end(), &recvcounts[0], &recvcounts[comm->size()]);
TRACE_smpi_comm_in(pid, request == MPI_REQUEST_IGNORED ? "PMPI_Gatherv" : "PMPI_Igatherv",
new simgrid::instr::VarCollTIData(
@@
-331,10
+332,10
@@
int PMPI_Iscatter(const void* sendbuf, int sendcount, MPI_Datatype sendtype, voi
MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request* request)
{
CHECK_COMM(8)
- SET_BUF1(sendbuf)
SET_BUF2(recvbuf)
int rank = comm->rank();
if(rank == root){
+ SET_BUF1(sendbuf)
CHECK_NOT_IN_PLACE_ROOT(1, sendbuf)
CHECK_COUNT(2, sendcount)
CHECK_TYPE(3, sendtype)
@@
-386,12
+387,10
@@
int PMPI_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs,
int PMPI_Iscatterv(const void* sendbuf, const int* sendcounts, const int* displs, MPI_Datatype sendtype, void* recvbuf, int recvcount,
MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request* request)
{
- SET_BUF1(sendbuf)
SET_BUF2(recvbuf)
CHECK_COMM(9)
int rank = comm->rank();
if(recvbuf != MPI_IN_PLACE){
- CHECK_NOT_IN_PLACE_ROOT(1, sendbuf)
CHECK_COUNT(5, recvcount)
CHECK_TYPE(7, recvtype)
CHECK_BUFFER(4, recvbuf, recvcount, recvtype)
@@
-399,6
+398,8
@@
int PMPI_Iscatterv(const void* sendbuf, const int* sendcounts, const int* displs
CHECK_ROOT(9)
CHECK_REQUEST(10)
if (rank == root) {
+ SET_BUF1(sendbuf)
+ CHECK_NOT_IN_PLACE_ROOT(1, sendbuf)
CHECK_NULL(2, MPI_ERR_COUNT, sendcounts)
CHECK_NULL(3, MPI_ERR_ARG, displs)
CHECK_TYPE(4, sendtype)
@@
-419,7
+420,8
@@
int PMPI_Iscatterv(const void* sendbuf, const int* sendcounts, const int* displs
aid_t pid = simgrid::s4u::this_actor::get_pid();
auto trace_sendcounts = std::make_shared<std::vector<int>>();
- trace_sendcounts->insert(trace_sendcounts->end(), &sendcounts[0], &sendcounts[comm->size()]);
+ if (rank == root)
+ trace_sendcounts->insert(trace_sendcounts->end(), &sendcounts[0], &sendcounts[comm->size()]);
TRACE_smpi_comm_in(pid, request == MPI_REQUEST_IGNORED ? "PMPI_Scatterv" : "PMPI_Iscatterv",
new simgrid::instr::VarCollTIData(
@@
-446,12
+448,12
@@
int PMPI_Ireduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype dat
{
CHECK_COMM(7)
SET_BUF1(sendbuf)
- SET_BUF2(recvbuf)
int rank = comm->rank();
CHECK_TYPE(4, datatype)
CHECK_COUNT(3, count)
CHECK_BUFFER(1, sendbuf, count, datatype)
if(rank == root){
+ SET_BUF2(recvbuf)
CHECK_NOT_IN_PLACE(2, recvbuf)
CHECK_BUFFER(5, recvbuf, count, datatype)
}