instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_IRECV;
- extra->send_size = count;
extra->src = src_traced;
extra->dst = rank;
- extra->datatype1 = encode_datatype(datatype);
+ int known=0;
+ extra->datatype1 = encode_datatype(datatype, &known);
+ int dt_size_send = 1;
+ if(!known)
+ dt_size_send = smpi_datatype_size(datatype);
+ extra->send_size = count*dt_size_send;
TRACE_smpi_ptp_in(rank, src_traced, rank, __FUNCTION__, extra);
#endif
#ifdef HAVE_TRACING
int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
int dst_traced = smpi_group_index(smpi_comm_group(comm), dst);
-
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_ISEND;
- extra->send_size = count;
extra->src = rank;
extra->dst = dst_traced;
- extra->datatype1 = encode_datatype(datatype);
+ int known=0;
+ extra->datatype1 = encode_datatype(datatype, &known);
+ int dt_size_send = 1;
+ if(!known)
+ dt_size_send = smpi_datatype_size(datatype);
+ extra->send_size = count*dt_size_send;
TRACE_smpi_ptp_in(rank, rank, dst_traced, __FUNCTION__, extra);
TRACE_smpi_send(rank, rank, dst_traced, count*smpi_datatype_size(datatype));
#endif
int dst_traced = smpi_group_index(smpi_comm_group(comm), dst);
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_ISSEND;
- extra->send_size = count;
extra->src = rank;
extra->dst = dst_traced;
- extra->datatype1 = encode_datatype(datatype);
+ int known=0;
+ extra->datatype1 = encode_datatype(datatype, &known);
+ int dt_size_send = 1;
+ if(!known)
+ dt_size_send = smpi_datatype_size(datatype);
+ extra->send_size = count*dt_size_send;
TRACE_smpi_ptp_in(rank, rank, dst_traced, __FUNCTION__, extra);
TRACE_smpi_send(rank, rank, dst_traced, count*smpi_datatype_size(datatype));
#endif
int src_traced = smpi_group_index(smpi_comm_group(comm), src);
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_RECV;
- extra->send_size = count;
extra->src = src_traced;
extra->dst = rank;
- extra->datatype1 = encode_datatype(datatype);
+ int known=0;
+ extra->datatype1 = encode_datatype(datatype, &known);
+ int dt_size_send = 1;
+ if(!known)
+ dt_size_send = smpi_datatype_size(datatype);
+ extra->send_size = count*dt_size_send;
TRACE_smpi_ptp_in(rank, src_traced, rank, __FUNCTION__, extra);
#endif
int dst_traced = smpi_group_index(smpi_comm_group(comm), dst);
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_SEND;
- extra->send_size = count;
extra->src = rank;
extra->dst = dst_traced;
- extra->datatype1 = encode_datatype(datatype);
+ int known=0;
+ extra->datatype1 = encode_datatype(datatype, &known);
+ int dt_size_send = 1;
+ if(!known)
+ dt_size_send = smpi_datatype_size(datatype);
+ extra->send_size = count*dt_size_send;
TRACE_smpi_ptp_in(rank, rank, dst_traced, __FUNCTION__, extra);
TRACE_smpi_send(rank, rank, dst_traced,count*smpi_datatype_size(datatype));
#endif
int dst_traced = smpi_group_index(smpi_comm_group(comm), dst);
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_SSEND;
- extra->send_size = count;
extra->src = rank;
extra->dst = dst_traced;
- extra->datatype1 = encode_datatype(datatype);
+ int known=0;
+ extra->datatype1 = encode_datatype(datatype, &known);
+ int dt_size_send = 1;
+ if(!known)
+ dt_size_send = smpi_datatype_size(datatype);
+ extra->send_size = count*dt_size_send;
TRACE_smpi_ptp_in(rank, rank, dst_traced, __FUNCTION__, extra); TRACE_smpi_send(rank, rank, dst_traced,count*smpi_datatype_size(datatype));
#endif
int src_traced = smpi_group_index(smpi_comm_group(comm), src);
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_SENDRECV;
- extra->send_size = sendcount;
- extra->recv_size = recvcount;
extra->src = src_traced;
extra->dst = dst_traced;
- extra->datatype1 = encode_datatype(sendtype);
- extra->datatype2 = encode_datatype(recvtype);
+ int known=0;
+ extra->datatype1 = encode_datatype(sendtype, &known);
+ int dt_size_send = 1;
+ if(!known)
+ dt_size_send = smpi_datatype_size(sendtype);
+ extra->send_size = sendcount*dt_size_send;
+ extra->datatype2 = encode_datatype(recvtype, &known);
+ int dt_size_recv = 1;
+ if(!known)
+ dt_size_recv = smpi_datatype_size(recvtype);
+ extra->recv_size = recvcount*dt_size_recv;
TRACE_smpi_ptp_in(rank, src_traced, dst_traced, __FUNCTION__, extra);
TRACE_smpi_send(rank, rank, dst_traced,sendcount*smpi_datatype_size(sendtype));
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_BCAST;
- extra->send_size = count;
extra->root = root_traced;
- extra->datatype1 = encode_datatype(datatype);
+ int known=0;
+ extra->datatype1 = encode_datatype(datatype, &known);
+ int dt_size_send = 1;
+ if(!known)
+ dt_size_send = smpi_datatype_size(datatype);
+ extra->send_size = count*dt_size_send;
TRACE_smpi_collective_in(rank, root_traced, __FUNCTION__, extra);
#endif
int root_traced = smpi_group_index(smpi_comm_group(comm), root);
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_GATHER;
- extra->send_size = sendtmpcount;
- extra->recv_size = recvcount;
extra->root = root_traced;
- extra->datatype1 = encode_datatype(sendtmptype);
- extra->datatype2 = encode_datatype(recvtype);
+ int known=0;
+ extra->datatype1 = encode_datatype(sendtmptype, &known);
+ int dt_size_send = 1;
+ if(!known)
+ dt_size_send = smpi_datatype_size(sendtmptype);
+ extra->send_size = sendtmpcount*dt_size_send;
+ extra->datatype2 = encode_datatype(recvtype, &known);
+ int dt_size_recv = 1;
+ if((smpi_comm_rank(comm)==root) && !known)
+ dt_size_recv = smpi_datatype_size(recvtype);
+ extra->recv_size = recvcount*dt_size_recv;
TRACE_smpi_collective_in(rank, root_traced, __FUNCTION__, extra);
#endif
int size = smpi_comm_size(comm);
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_GATHERV;
- extra->send_size = sendtmpcount;
- extra->recvcounts= xbt_malloc(size*sizeof(int));
- for(i=0; i< size; i++)//copy data to avoid bad free
- extra->recvcounts[i] = recvcounts[i];
extra->num_processes = size;
extra->root = root_traced;
- extra->datatype1 = encode_datatype(sendtmptype);
- extra->datatype2 = encode_datatype(recvtype);
+ int known=0;
+ extra->datatype1 = encode_datatype(sendtmptype, &known);
+ int dt_size_send = 1;
+ if(!known)
+ dt_size_send = smpi_datatype_size(sendtype);
+ extra->send_size = sendtmpcount*dt_size_send;
+ extra->datatype2 = encode_datatype(recvtype, &known);
+ int dt_size_recv = 1;
+ if(!known)
+ dt_size_recv = smpi_datatype_size(recvtype);
+ extra->recvcounts= xbt_malloc(size*sizeof(int));
+ for(i=0; i< size; i++)//copy data to avoid bad free
+ extra->recvcounts[i] = recvcounts[i]*dt_size_recv;
TRACE_smpi_collective_in(rank, root_traced, __FUNCTION__,extra);
#endif
int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_ALLGATHER;
- extra->send_size = sendcount;
- extra->recv_size = recvcount;
- extra->datatype1 = encode_datatype(sendtype);
- extra->datatype2 = encode_datatype(recvtype);
+ int known=0;
+ extra->datatype1 = encode_datatype(sendtype, &known);
+ int dt_size_send = 1;
+ if(!known)
+ dt_size_send = smpi_datatype_size(sendtype);
+ extra->send_size = sendcount*dt_size_send;
+ extra->datatype2 = encode_datatype(recvtype, &known);
+ int dt_size_recv = 1;
+ if(!known)
+ dt_size_recv = smpi_datatype_size(recvtype);
+ extra->recv_size = recvcount*dt_size_recv;
TRACE_smpi_collective_in(rank, -1, __FUNCTION__, extra);
#endif
int size = smpi_comm_size(comm);
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_ALLGATHERV;
- extra->send_size = sendcount;
+ extra->num_processes = size;
+ int known=0;
+ extra->datatype1 = encode_datatype(sendtype, &known);
+ int dt_size_send = 1;
+ if(!known)
+ dt_size_send = smpi_datatype_size(sendtype);
+ extra->send_size = sendcount*dt_size_send;
+ extra->datatype2 = encode_datatype(recvtype, &known);
+ int dt_size_recv = 1;
+ if(!known)
+ dt_size_recv = smpi_datatype_size(recvtype);
extra->recvcounts= xbt_malloc(size*sizeof(int));
for(i=0; i< size; i++)//copy data to avoid bad free
- extra->recvcounts[i] = recvcounts[i];
- extra->num_processes = size;
- extra->datatype1 = encode_datatype(sendtype);
- extra->datatype2 = encode_datatype(recvtype);
+ extra->recvcounts[i] = recvcounts[i]*dt_size_recv;
TRACE_smpi_collective_in(rank, -1, __FUNCTION__,extra);
#endif
int root_traced = smpi_group_index(smpi_comm_group(comm), root);
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_SCATTER;
- extra->send_size = sendcount;
- extra->recv_size= recvcount;
extra->root = root_traced;
- extra->datatype1 = encode_datatype(sendtype);
- extra->datatype2 = encode_datatype(recvtype);
-
+ int known=0;
+ extra->datatype1 = encode_datatype(sendtype, &known);
+ int dt_size_send = 1;
+ if((smpi_comm_rank(comm)==root) && !known)
+ dt_size_send = smpi_datatype_size(sendtype);
+ extra->send_size = sendcount*dt_size_send;
+ extra->datatype2 = encode_datatype(recvtype, &known);
+ int dt_size_recv = 1;
+ if(!known)
+ dt_size_recv = smpi_datatype_size(recvtype);
+ extra->recv_size = recvcount*dt_size_recv;
TRACE_smpi_collective_in(rank, root_traced, __FUNCTION__,extra);
#endif
mpi_coll_scatter_fun(sendbuf, sendcount, sendtype, recvbuf, recvcount,
int size = smpi_comm_size(comm);
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_SCATTERV;
- extra->recv_size = recvcount;
- extra->sendcounts= xbt_malloc(size*sizeof(int));
- for(i=0; i< size; i++)//copy data to avoid bad free
- extra->sendcounts[i] = sendcounts[i];
extra->num_processes = size;
extra->root = root_traced;
- extra->datatype1 = encode_datatype(sendtype);
- extra->datatype2 = encode_datatype(recvtype);
-
+ int known=0;
+ extra->datatype1 = encode_datatype(sendtype, &known);
+ int dt_size_send = 1;
+ if(!known)
+ dt_size_send = smpi_datatype_size(sendtype);
+ extra->sendcounts= xbt_malloc(size*sizeof(int));
+ for(i=0; i< size; i++)//copy data to avoid bad free
+ extra->sendcounts[i] = sendcounts[i]*dt_size_send;
+ extra->datatype2 = encode_datatype(recvtype, &known);
+ int dt_size_recv = 1;
+ if(!known)
+ dt_size_recv = smpi_datatype_size(recvtype);
+ extra->recv_size = recvcount*dt_size_recv;
TRACE_smpi_collective_in(rank, root_traced, __FUNCTION__,extra);
#endif
int root_traced = smpi_group_index(smpi_comm_group(comm), root);
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_REDUCE;
- extra->send_size = count;
- extra->datatype1 = encode_datatype(datatype);
+ int known=0;
+ extra->datatype1 = encode_datatype(datatype, &known);
+ int dt_size_send = 1;
+ if(!known)
+ dt_size_send = smpi_datatype_size(datatype);
+ extra->send_size = count*dt_size_send;
extra->root = root_traced;
TRACE_smpi_collective_in(rank, root_traced, __FUNCTION__,extra);
int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_ALLREDUCE;
- extra->send_size = count;
- extra->datatype1 = encode_datatype(datatype);
+ int known=0;
+ extra->datatype1 = encode_datatype(datatype, &known);
+ int dt_size_send = 1;
+ if(!known)
+ dt_size_send = smpi_datatype_size(datatype);
+ extra->send_size = count*dt_size_send;
TRACE_smpi_collective_in(rank, -1, __FUNCTION__,extra);
#endif
int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_SCAN;
- extra->send_size = count;
- extra->datatype1 = encode_datatype(datatype);
+ int known=0;
+ extra->datatype1 = encode_datatype(datatype, &known);
+ int dt_size_send = 1;
+ if(!known)
+ dt_size_send = smpi_datatype_size(datatype);
+ extra->send_size = count*dt_size_send;
TRACE_smpi_collective_in(rank, -1, __FUNCTION__,extra);
#endif
int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_EXSCAN;
- extra->send_size = count;
- extra->datatype1 = encode_datatype(datatype);
-
+ int known=0;
+ extra->datatype1 = encode_datatype(datatype, &known);
+ int dt_size_send = 1;
+ if(!known)
+ dt_size_send = smpi_datatype_size(datatype);
+ extra->send_size = count*dt_size_send;
TRACE_smpi_collective_in(rank, -1, __FUNCTION__,extra);
#endif
smpi_mpi_exscan(sendbuf, recvbuf, count, datatype, op, comm);
int size = smpi_comm_size(comm);
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_REDUCE_SCATTER;
+ extra->num_processes = size;
+ int known=0;
+ extra->datatype1 = encode_datatype(datatype, &known);
+ int dt_size_send = 1;
+ if(!known)
+ dt_size_send = smpi_datatype_size(datatype);
extra->send_size = 0;
extra->recvcounts= xbt_malloc(size*sizeof(int));
for(i=0; i< size; i++)//copy data to avoid bad free
- extra->recvcounts[i] = recvcounts[i];
- extra->num_processes = size;
- extra->datatype1 = encode_datatype(datatype);
-
+ extra->recvcounts[i] = recvcounts[i]*dt_size_send;
TRACE_smpi_collective_in(rank, -1, __FUNCTION__,extra);
#endif
void* sendtmpbuf=sendbuf;
int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_REDUCE_SCATTER;
+ extra->num_processes = count;
+ int known=0;
+ extra->datatype1 = encode_datatype(datatype, &known);
+ int dt_size_send = 1;
+ if(!known)
+ dt_size_send = smpi_datatype_size(datatype);
extra->send_size = 0;
extra->recvcounts= xbt_malloc(count*sizeof(int));
for(i=0; i< count; i++)//copy data to avoid bad free
- extra->recvcounts[i] = recvcount;
- extra->num_processes = count;
- extra->datatype1 = encode_datatype(datatype);
+ extra->recvcounts[i] = recvcount*dt_size_send;
TRACE_smpi_collective_in(rank, -1, __FUNCTION__,extra);
#endif
int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1;
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_ALLTOALL;
- extra->send_size = sendcount;
- extra->recv_size = recvcount;
- extra->datatype1 = encode_datatype(sendtype);
- extra->datatype2 = encode_datatype(recvtype);
-
+ int known=0;
+ extra->datatype1 = encode_datatype(sendtype, &known);
+ if(!known)
+ extra->send_size = sendcount*smpi_datatype_size(sendtype);
+ else
+ extra->send_size = sendcount;
+ extra->datatype2 = encode_datatype(recvtype, &known);
+ if(!known)
+ extra->recv_size = recvcount*smpi_datatype_size(recvtype);
+ else
+ extra->recv_size = recvcount;
TRACE_smpi_collective_in(rank, -1, __FUNCTION__,extra);
#endif
retval = mpi_coll_alltoall_fun(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm);
extra->recv_size = 0;
extra->recvcounts= xbt_malloc(size*sizeof(int));
extra->sendcounts= xbt_malloc(size*sizeof(int));
-
+ int known=0;
+ extra->datatype1 = encode_datatype(sendtype, &known);
+ int dt_size_send = 1;
+ if(!known)
+ dt_size_send = smpi_datatype_size(sendtype);
+ int dt_size_recv = 1;
+ extra->datatype2 = encode_datatype(recvtype, &known);
+ if(!known)
+ dt_size_recv = smpi_datatype_size(recvtype);
for(i=0; i< size; i++){//copy data to avoid bad free
- extra->send_size += sendcounts[i];
- extra->recv_size += recvcounts[i];
+ extra->send_size += sendcounts[i]*dt_size_send;
+ extra->recv_size += recvcounts[i]*dt_size_recv;
- extra->sendcounts[i] = sendcounts[i];
- extra->recvcounts[i] = recvcounts[i];
+ extra->sendcounts[i] = sendcounts[i]*dt_size_send;
+ extra->recvcounts[i] = recvcounts[i]*dt_size_recv;
}
extra->num_processes = size;
-
- extra->datatype1 = encode_datatype(sendtype);
- extra->datatype2 = encode_datatype(recvtype);
-
TRACE_smpi_collective_in(rank, -1, __FUNCTION__,extra);
#endif
retval =
return smpi_comm_c2f(comm);
}
+MPI_Info PMPI_Info_f2c(MPI_Fint info){
+ return smpi_info_f2c(info);
+}
+
+MPI_Fint PMPI_Info_c2f(MPI_Info info){
+ return smpi_info_c2f(info);
+}
+
int PMPI_Keyval_create(MPI_Copy_function* copy_fn, MPI_Delete_function* delete_fn, int* keyval, void* extra_state) {
return smpi_comm_keyval_create(copy_fn, delete_fn, keyval, extra_state);
}
return smpi_type_keyval_free(keyval);
}
-/* The following calls are not yet implemented and will fail at runtime. */
-/* Once implemented, please move them above this notice. */
+int PMPI_Info_create( MPI_Info *info){
+ if (info == NULL)
+ return MPI_ERR_ARG;
+ *info = xbt_new(s_smpi_mpi_info_t, 1);
+ (*info)->info_dict= xbt_dict_new_homogeneous(NULL);
+ (*info)->refcount=1;
+ return MPI_SUCCESS;
+}
-#define NOT_YET_IMPLEMENTED { \
- XBT_WARN("Not yet implemented : %s. Please contact the Simgrid team if support is needed", __FUNCTION__); \
- return MPI_SUCCESS; \
+int PMPI_Info_set( MPI_Info info, char *key, char *value){
+ if (info == NULL || key == NULL || value == NULL)
+ return MPI_ERR_ARG;
+
+ xbt_dict_set(info->info_dict, key, (void*)value, NULL);
+ return MPI_SUCCESS;
+}
+
+int PMPI_Info_free( MPI_Info *info){
+ if (info == NULL || *info==NULL)
+ return MPI_ERR_ARG;
+ (*info)->refcount--;
+ if((*info)->refcount==0){
+ xbt_dict_free(&((*info)->info_dict));
+ xbt_free(*info);
}
+ *info=MPI_INFO_NULL;
+ return MPI_SUCCESS;
+}
+int PMPI_Info_get(MPI_Info info,char *key,int valuelen, char *value, int *flag){
+ if (info == NULL || key == NULL || valuelen <0)
+ return MPI_ERR_ARG;
+ if (value == NULL)
+ return MPI_ERR_INFO_VALUE;
+ *flag=FALSE;
+ char* tmpvalue=(char*)xbt_dict_get_or_null(info->info_dict, key);
+ if(tmpvalue){
+ memcpy(value,tmpvalue, (strlen(tmpvalue) + 1 < valuelen) ?
+ strlen(tmpvalue) + 1 : valuelen);
+ *flag=TRUE;
+ }
+ return MPI_SUCCESS;
+}
-MPI_Info PMPI_Info_f2c(MPI_Fint info){
- NOT_YET_IMPLEMENTED
+int PMPI_Info_dup(MPI_Info info, MPI_Info *newinfo){
+ if (info == NULL || newinfo==NULL)
+ return MPI_ERR_ARG;
+ *newinfo = xbt_new(s_smpi_mpi_info_t, 1);
+ (*newinfo)->info_dict= xbt_dict_new_homogeneous(NULL);
+ xbt_dict_cursor_t cursor = NULL;
+ int *key;
+ void* data;
+ xbt_dict_foreach(info->info_dict,cursor,key,data){
+ xbt_dict_set((*newinfo)->info_dict, (char*)key, data, NULL);
+ }
+ return MPI_SUCCESS;
}
-MPI_Fint PMPI_Info_c2f(MPI_Info info){
- NOT_YET_IMPLEMENTED
+int PMPI_Info_delete(MPI_Info info, char *key){
+ xbt_ex_t e;
+ if (info == NULL || key==NULL)
+ return MPI_ERR_ARG;
+ TRY {
+ xbt_dict_remove(info->info_dict, key);
+ }CATCH(e){
+ xbt_ex_free(e);
+ return MPI_ERR_INFO_NOKEY;
+ }
+ return MPI_SUCCESS;
}
-MPI_Errhandler PMPI_Errhandler_f2c(MPI_Fint errhandler){
- NOT_YET_IMPLEMENTED
+int PMPI_Info_get_nkeys( MPI_Info info, int *nkeys){
+ if (info == NULL || nkeys==NULL)
+ return MPI_ERR_ARG;
+ *nkeys=xbt_dict_size(info->info_dict);
+ return MPI_SUCCESS;
}
-MPI_Fint PMPI_Errhandler_c2f(MPI_Errhandler errhandler){
- NOT_YET_IMPLEMENTED
+int PMPI_Info_get_nthkey( MPI_Info info, int n, char *key){
+ if (info == NULL || key==NULL || n<0 || n> MPI_MAX_INFO_KEY)
+ return MPI_ERR_ARG;
+
+ xbt_dict_cursor_t cursor = NULL;
+ char *keyn;
+ void* data;
+ int num=0;
+ xbt_dict_foreach(info->info_dict,cursor,keyn,data){
+ if(num==n){
+ strcpy(key,keyn);
+ return MPI_SUCCESS;
+ }
+ num++;
+ }
+ return MPI_ERR_ARG;
+}
+
+int PMPI_Info_get_valuelen( MPI_Info info, char *key, int *valuelen, int *flag){
+ if (info == NULL || key == NULL || valuelen <0)
+ return MPI_ERR_ARG;
+ *flag=FALSE;
+ char* tmpvalue=(char*)xbt_dict_get_or_null(info->info_dict, key);
+ if(tmpvalue){
+ *valuelen=strlen(tmpvalue);
+ *flag=TRUE;
+ }
+ return MPI_SUCCESS;
+}
+
+int PMPI_Unpack(void* inbuf, int incount, int* position, void* outbuf, int outcount, MPI_Datatype type, MPI_Comm comm) {
+ if(incount<0 || outcount < 0 || inbuf==NULL || outbuf==NULL)
+ return MPI_ERR_ARG;
+ if(!is_datatype_valid(type))
+ return MPI_ERR_TYPE;
+ if(comm==MPI_COMM_NULL)
+ return MPI_ERR_COMM;
+ return smpi_mpi_unpack(inbuf, incount, position, outbuf,outcount,type, comm);
+}
+
+int PMPI_Pack(void* inbuf, int incount, MPI_Datatype type, void* outbuf, int outcount, int* position, MPI_Comm comm) {
+ if(incount<0 || outcount < 0|| inbuf==NULL || outbuf==NULL)
+ return MPI_ERR_ARG;
+ if(!is_datatype_valid(type))
+ return MPI_ERR_TYPE;
+ if(comm==MPI_COMM_NULL)
+ return MPI_ERR_COMM;
+ return smpi_mpi_pack(inbuf, incount, type, outbuf,outcount,position, comm);
}
int PMPI_Pack_size(int incount, MPI_Datatype datatype, MPI_Comm comm, int* size) {
+ if(incount<0)
+ return MPI_ERR_ARG;
+ if(!is_datatype_valid(datatype))
+ return MPI_ERR_TYPE;
+ if(comm==MPI_COMM_NULL)
+ return MPI_ERR_COMM;
+
+ *size=incount*smpi_datatype_size(datatype);
+
+ return MPI_SUCCESS;
+}
+
+
+/* The following calls are not yet implemented and will fail at runtime. */
+/* Once implemented, please move them above this notice. */
+
+#define NOT_YET_IMPLEMENTED { \
+ XBT_WARN("Not yet implemented : %s. Please contact the Simgrid team if support is needed", __FUNCTION__); \
+ return MPI_SUCCESS; \
+ }
+
+MPI_Errhandler PMPI_Errhandler_f2c(MPI_Fint errhandler){
NOT_YET_IMPLEMENTED
}
+MPI_Fint PMPI_Errhandler_c2f(MPI_Errhandler errhandler){
+ NOT_YET_IMPLEMENTED
+}
int PMPI_Cart_map(MPI_Comm comm_old, int ndims, int* dims, int* periods, int* newrank) {
NOT_YET_IMPLEMENTED
}
-
int PMPI_Graph_create(MPI_Comm comm_old, int nnodes, int* index, int* edges, int reorder, MPI_Comm* comm_graph) {
NOT_YET_IMPLEMENTED
}
NOT_YET_IMPLEMENTED
}
-int PMPI_Unpack(void* inbuf, int insize, int* position, void* outbuf, int outcount, MPI_Datatype type, MPI_Comm comm) {
- NOT_YET_IMPLEMENTED
-}
int PMPI_Intercomm_create(MPI_Comm local_comm, int local_leader, MPI_Comm peer_comm, int remote_leader, int tag, MPI_Comm* comm_out) {
NOT_YET_IMPLEMENTED
NOT_YET_IMPLEMENTED
}
-int PMPI_Pack(void* inbuf, int incount, MPI_Datatype type, void* outbuf, int outcount, int* position, MPI_Comm comm) {
- NOT_YET_IMPLEMENTED
-}
+
int PMPI_Pack_external_size(char *datarep, int incount, MPI_Datatype datatype, MPI_Aint *size){
NOT_YET_IMPLEMENTED
NOT_YET_IMPLEMENTED
}
-int PMPI_Info_create( MPI_Info *info){
- NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Info_set( MPI_Info info, char *key, char *value){
- NOT_YET_IMPLEMENTED
-}
-int PMPI_Info_free( MPI_Info *info){
- NOT_YET_IMPLEMENTED
-}
int PMPI_Type_get_envelope( MPI_Datatype datatype, int *num_integers,
int *num_addresses, int *num_datatypes, int *combiner){
NOT_YET_IMPLEMENTED
}
-int PMPI_Info_get(MPI_Info info,char *key,int valuelen, char *value, int *flag){
- NOT_YET_IMPLEMENTED
-}
-
int PMPI_Comm_create_errhandler( MPI_Comm_errhandler_fn *function, MPI_Errhandler *errhandler){
NOT_YET_IMPLEMENTED
}
NOT_YET_IMPLEMENTED
}
-int PMPI_Info_dup(MPI_Info info, MPI_Info *newinfo){
- NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Info_delete(MPI_Info info, char *key){
- NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Info_get_nkeys( MPI_Info info, int *nkeys){
- NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Info_get_nthkey( MPI_Info info, int n, char *key){
- NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Info_get_valuelen( MPI_Info info, char *key, int *valuelen, int *flag){
- NOT_YET_IMPLEMENTED
-}
-
int PMPI_Request_get_status( MPI_Request request, int *flag, MPI_Status *status){
NOT_YET_IMPLEMENTED
}