+
/* Copyright (c) 2007-2014. The SimGrid Team.
* All rights reserved. */
int PMPI_Type_free(MPI_Datatype * datatype)
{
int retval = 0;
-
- if (!datatype) {
+ /* Free a predefined datatype is an error according to the standard, and
+ should be checked for */
+ if (*datatype == MPI_DATATYPE_NULL) {
retval = MPI_ERR_ARG;
} else {
smpi_datatype_free(datatype);
smpi_bench_end();
if (request == NULL) {
- retval = MPI_ERR_ARG;
+ retval = MPI_ERR_ARG;
} else if (comm == MPI_COMM_NULL) {
- retval = MPI_ERR_COMM;
+ retval = MPI_ERR_COMM;
+ } else if (!is_datatype_valid(datatype)) {
+ retval = MPI_ERR_TYPE;
} else if (dst == MPI_PROC_NULL) {
- retval = MPI_SUCCESS;
+ retval = MPI_SUCCESS;
} else {
- *request = smpi_mpi_send_init(buf, count, datatype, dst, tag, comm);
- retval = MPI_SUCCESS;
+ *request = smpi_mpi_send_init(buf, count, datatype, dst, tag, comm);
+ retval = MPI_SUCCESS;
}
smpi_bench_begin();
if (retval != MPI_SUCCESS && request)
retval = MPI_ERR_ARG;
} else if (comm == MPI_COMM_NULL) {
retval = MPI_ERR_COMM;
+ } else if (!is_datatype_valid(datatype)) {
+ retval = MPI_ERR_TYPE;
} else if (src == MPI_PROC_NULL) {
retval = MPI_SUCCESS;
} else {
retval = MPI_ERR_ARG;
} else if (comm == MPI_COMM_NULL) {
retval = MPI_ERR_COMM;
+ } else if (!is_datatype_valid(datatype)) {
+ retval = MPI_ERR_TYPE;
} else if (dst == MPI_PROC_NULL) {
retval = MPI_SUCCESS;
} else {
smpi_bench_end();
if (request == NULL || *request == MPI_REQUEST_NULL) {
- retval = MPI_ERR_ARG;
+ retval = MPI_ERR_REQUEST;
} else {
smpi_mpi_start(*request);
retval = MPI_SUCCESS;
int PMPI_Startall(int count, MPI_Request * requests)
{
- int retval = 0;
-
+ int retval;
+ int i = 0;
smpi_bench_end();
if (requests == NULL) {
retval = MPI_ERR_ARG;
} else {
- smpi_mpi_startall(count, requests);
retval = MPI_SUCCESS;
+ for (i = 0 ; i < count ; i++) {
+ if(requests[i] == MPI_REQUEST_NULL) {
+ retval = MPI_ERR_REQUEST;
+ }
+ }
+ if(retval != MPI_ERR_REQUEST) {
+ smpi_mpi_startall(count, requests);
+ }
}
smpi_bench_begin();
return retval;
retval = MPI_ERR_COUNT;
} else if (buf==NULL && count > 0) {
retval = MPI_ERR_COUNT;
- } else if (datatype == MPI_DATATYPE_NULL){
- retval = MPI_ERR_TYPE;
+ } else if (!is_datatype_valid(datatype)) {
+ retval = MPI_ERR_TYPE;
} else if(tag<0 && tag != MPI_ANY_TAG){
retval = MPI_ERR_TAG;
} else {
retval = MPI_ERR_COUNT;
} else if (buf==NULL && count > 0) {
retval = MPI_ERR_COUNT;
- } else if (datatype == MPI_DATATYPE_NULL){
- retval = MPI_ERR_TYPE;
+ } else if (!is_datatype_valid(datatype)) {
+ retval = MPI_ERR_TYPE;
} else if(tag<0 && tag != MPI_ANY_TAG){
retval = MPI_ERR_TAG;
} else {
retval = MPI_ERR_COUNT;
} else if (buf==NULL && count > 0) {
retval = MPI_ERR_COUNT;
- } else if (datatype == MPI_DATATYPE_NULL){
- retval = MPI_ERR_TYPE;
+ } else if (!is_datatype_valid(datatype)) {
+ retval = MPI_ERR_TYPE;
} else if(tag<0 && tag != MPI_ANY_TAG){
retval = MPI_ERR_TAG;
} else {
retval = MPI_ERR_COUNT;
} else if (buf==NULL && count > 0) {
retval = MPI_ERR_COUNT;
- } else if (datatype == MPI_DATATYPE_NULL){
- retval = MPI_ERR_TYPE;
+ } else if (!is_datatype_valid(datatype)) {
+ retval = MPI_ERR_TYPE;
} else if(tag<0 && tag != MPI_ANY_TAG){
retval = MPI_ERR_TAG;
} else {
retval = MPI_ERR_COUNT;
} else if (buf==NULL && count > 0) {
retval = MPI_ERR_COUNT;
- } else if (datatype == MPI_DATATYPE_NULL){
- retval = MPI_ERR_TYPE;
+ } else if (!is_datatype_valid(datatype)) {
+ retval = MPI_ERR_TYPE;
} else if(tag<0 && tag != MPI_ANY_TAG){
retval = MPI_ERR_TAG;
} else {
retval = MPI_ERR_COUNT;
} else if (buf==NULL && count > 0) {
retval = MPI_ERR_COUNT;
- } else if (datatype == MPI_DATATYPE_NULL){
+ } else if (!is_datatype_valid(datatype)){
retval = MPI_ERR_TYPE;
} else if(tag<0 && tag != MPI_ANY_TAG){
retval = MPI_ERR_TAG;
if (comm == MPI_COMM_NULL) {
retval = MPI_ERR_COMM;
- } else if (sendtype == MPI_DATATYPE_NULL
- || recvtype == MPI_DATATYPE_NULL) {
+ } else if (!is_datatype_valid(sendtype)
+ || !is_datatype_valid(recvtype)) {
retval = MPI_ERR_TYPE;
} else if (src == MPI_PROC_NULL || dst == MPI_PROC_NULL) {
smpi_empty_status(status);
//TODO: suboptimal implementation
void *recvbuf;
int retval = 0;
- if (datatype == MPI_DATATYPE_NULL) {
+ if (!is_datatype_valid(datatype)) {
retval = MPI_ERR_TYPE;
} else if (count < 0) {
retval = MPI_ERR_COUNT;
int PMPI_Test(MPI_Request * request, int *flag, MPI_Status * status)
{
int retval = 0;
-
smpi_bench_end();
if (request == NULL || flag == NULL) {
retval = MPI_ERR_ARG;
smpi_empty_status(status);
retval = MPI_ERR_REQUEST;
} else {
+#ifdef HAVE_TRACING
+ int rank = request && (*request)->comm != MPI_COMM_NULL
+ ? smpi_process_index()
+ : -1;
+
+ instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
+ extra->type = TRACING_TEST;
+ TRACE_smpi_testing_in(rank, extra);
+#endif
*flag = smpi_mpi_test(request, status);
+#ifdef HAVE_TRACING
+ TRACE_smpi_testing_out(rank);
+#endif
retval = MPI_SUCCESS;
}
smpi_bench_begin();
if (comm == MPI_COMM_NULL) {
retval = MPI_ERR_COMM;
- } else if (datatype == MPI_DATATYPE_NULL || op == MPI_OP_NULL) {
+ } else if (!is_datatype_valid(datatype) || op == MPI_OP_NULL) {
retval = MPI_ERR_ARG;
} else {
#ifdef HAVE_TRACING
int retval = 0;
smpi_bench_end();
- if (datatype == MPI_DATATYPE_NULL || op == MPI_OP_NULL) {
+ if (!is_datatype_valid(datatype) || op == MPI_OP_NULL) {
retval = MPI_ERR_ARG;
} else {
smpi_op_apply(op, inbuf, inoutbuf, &count, &datatype);
if (comm == MPI_COMM_NULL) {
retval = MPI_ERR_COMM;
- } else if (datatype == MPI_DATATYPE_NULL) {
+ } else if (!is_datatype_valid(datatype)) {
retval = MPI_ERR_TYPE;
} else if (op == MPI_OP_NULL) {
retval = MPI_ERR_OP;
if (comm == MPI_COMM_NULL) {
retval = MPI_ERR_COMM;
- } else if (datatype == MPI_DATATYPE_NULL) {
+ } else if (!is_datatype_valid(datatype)) {
retval = MPI_ERR_TYPE;
} else if (op == MPI_OP_NULL) {
retval = MPI_ERR_OP;
if (comm == MPI_COMM_NULL) {
retval = MPI_ERR_COMM;
- } else if (datatype == MPI_DATATYPE_NULL) {
+ } else if (!is_datatype_valid(datatype)) {
retval = MPI_ERR_TYPE;
} else if (op == MPI_OP_NULL) {
retval = MPI_ERR_OP;
if (comm == MPI_COMM_NULL) {
retval = MPI_ERR_COMM;
- } else if (datatype == MPI_DATATYPE_NULL) {
+ } else if (!is_datatype_valid(datatype)) {
retval = MPI_ERR_TYPE;
} else if (op == MPI_OP_NULL) {
retval = MPI_ERR_OP;
if (comm == MPI_COMM_NULL) {
retval = MPI_ERR_COMM;
- } else if (datatype == MPI_DATATYPE_NULL) {
+ } else if (!is_datatype_valid(datatype)) {
retval = MPI_ERR_TYPE;
} else if (op == MPI_OP_NULL) {
retval = MPI_ERR_OP;
if (status == NULL || count == NULL) {
retval = MPI_ERR_ARG;
- } else if (datatype == MPI_DATATYPE_NULL) {
+ } else if (!is_datatype_valid(datatype)) {
retval = MPI_ERR_TYPE;
} else {
size = smpi_datatype_size(datatype);
int PMPI_Cart_create(MPI_Comm comm_old, int ndims, int* dims, int* periodic, int reorder, MPI_Comm* comm_cart) {
int retval = 0;
- smpi_bench_end();
if (comm_old == MPI_COMM_NULL){
- return MPI_ERR_COMM;
+ retval = MPI_ERR_COMM;
}
else if (ndims < 0 ||
(ndims > 0 && (dims == NULL ||
periodic == NULL)) ||
comm_cart == NULL) {
- return MPI_ERR_ARG;
+ retval = MPI_ERR_ARG;
}
retval = smpi_mpi_cart_create(comm_old, ndims, dims, periodic, reorder, comm_cart);
-
- smpi_bench_begin();
-
return retval;
}
return smpi_mpi_cart_sub(comm, remain_dims, comm_new);
}
+int PMPI_Type_create_resized(MPI_Datatype oldtype,MPI_Aint lb, MPI_Aint extent, MPI_Datatype *newtype){
+ if(oldtype == MPI_DATATYPE_NULL) {
+ return MPI_ERR_TYPE;
+ }
+ int blocks[3] = { 1, 1, 1 };
+ MPI_Aint disps[3] = { lb, 0, lb+extent };
+ MPI_Datatype types[3] = { MPI_LB, oldtype, MPI_UB };
+
+ s_smpi_mpi_struct_t* subtype = smpi_datatype_struct_create( blocks,
+ disps,
+ 3,
+ types
+ );
+ smpi_datatype_create(newtype,oldtype->size, lb, lb + extent, 1 , subtype, DT_FLAG_VECTOR);
+
+ (*newtype)->flags &= ~DT_FLAG_COMMITED;
+ return MPI_SUCCESS;
+}
+
/* The following calls are not yet implemented and will fail at runtime. */
/* Once implemented, please move them above this notice. */
return MPI_SUCCESS; \
}
-
int PMPI_Type_dup(MPI_Datatype datatype, MPI_Datatype *newtype){
NOT_YET_IMPLEMENTED
}
NOT_YET_IMPLEMENTED
}
-int PMPI_Type_create_resized(MPI_Datatype oldtype,MPI_Aint lb, MPI_Aint extent, MPI_Datatype *newtype){
- NOT_YET_IMPLEMENTED
-}
-
int PMPI_Type_create_subarray(int ndims,int *array_of_sizes, int *array_of_subsizes, int *array_of_starts, int order, MPI_Datatype oldtype, MPI_Datatype *newtype){
NOT_YET_IMPLEMENTED
}