XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_base, smpi, "Logging specific to SMPI (base)");
-static int match_recv(void* a, void* b, smx_action_t ignored) {
+static int match_recv(void* a, void* b, smx_synchro_t ignored) {
MPI_Request ref = (MPI_Request)a;
MPI_Request req = (MPI_Request)b;
XBT_DEBUG("Trying to match a recv of src %d against %d, tag %d against %d",ref->src,req->src, ref->tag, req->tag);
}else return 0;
}
-static int match_send(void* a, void* b,smx_action_t ignored) {
+static int match_send(void* a, void* b,smx_synchro_t ignored) {
MPI_Request ref = (MPI_Request)a;
MPI_Request req = (MPI_Request)b;
XBT_DEBUG("Trying to match a send of src %d against %d, tag %d against %d",ref->src,req->src, ref->tag, req->tag);
double smpi_iprobe_sleep = 1e-4;
double smpi_test_sleep = 1e-4;
-xbt_dict_t smpi_keyvals = NULL;
-int keyval_id=MPI_TAG_UB+1;//avoid collisions
// Methods used to parse and store the values for timing injections in smpi
// These are taken from surf/network.c and generalized to have more factors
//We have to check both mailboxes (because SSEND messages are sent to the large mbox). begin with the more appropriate one : the small one.
mailbox = smpi_process_mailbox_small();
XBT_DEBUG("Is there a corresponding send already posted the small mailbox %p (in case of SSEND)?", mailbox);
- smx_action_t action = simcall_comm_iprobe(mailbox, 0, request->src,request->tag, &match_recv, (void*)request);
+ smx_synchro_t action = simcall_comm_iprobe(mailbox, 0, request->src,request->tag, &match_recv, (void*)request);
if(action ==NULL){
mailbox = smpi_process_mailbox();
}else{
mailbox = smpi_process_mailbox_small();
XBT_DEBUG("Is there a corresponding send already posted the small mailbox?");
- smx_action_t action = simcall_comm_iprobe(mailbox, 0, request->src,request->tag, &match_recv, (void*)request);
+ smx_synchro_t action = simcall_comm_iprobe(mailbox, 0, request->src,request->tag, &match_recv, (void*)request);
if(action ==NULL){
XBT_DEBUG("No, nothing in the permanent receive mailbox");
if (request->flags & RMA || request->size < sg_cfg_get_int("smpi/async_small_thres")) { // eager mode
mailbox = smpi_process_remote_mailbox(receiver);
XBT_DEBUG("Is there a corresponding recv already posted in the large mailbox %p?", mailbox);
- smx_action_t action = simcall_comm_iprobe(mailbox, 1,request->dst, request->tag, &match_send, (void*)request);
+ smx_synchro_t action = simcall_comm_iprobe(mailbox, 1,request->dst, request->tag, &match_send, (void*)request);
if(action ==NULL){
if (! (request->flags & SSEND)){
mailbox = smpi_process_remote_mailbox_small(receiver);
*index = MPI_UNDEFINED;
flag = 0;
- comms = xbt_dynar_new(sizeof(smx_action_t), NULL);
+ comms = xbt_dynar_new(sizeof(smx_synchro_t), NULL);
map = xbt_new(int, count);
size = 0;
for(i = 0; i < count; i++) {
index = MPI_UNDEFINED;
if(count > 0) {
// Wait for a request to complete
- comms = xbt_dynar_new(sizeof(smx_action_t), NULL);
+ comms = xbt_dynar_new(sizeof(smx_synchro_t), NULL);
map = xbt_new(int, count);
size = 0;
XBT_DEBUG("Wait for one of %d", count);
xbt_free(requests);
}
-
-int smpi_keyval_create(MPI_Copy_function* copy_fn, MPI_Delete_function* delete_fn, int* keyval, void* extra_state){
-
- if(!smpi_keyvals)
- smpi_keyvals = xbt_dict_new();
-
- smpi_key_elem value = (smpi_key_elem) xbt_new0(s_smpi_mpi_key_elem_t,1);
-
- value->copy_fn=copy_fn;
- value->delete_fn=delete_fn;
-
- *keyval = keyval_id;
-
- xbt_dict_set(smpi_keyvals,(const char*)keyval,(void*)value, NULL);
- keyval_id++;
- return MPI_SUCCESS;
-}
-
-int smpi_keyval_free(int* keyval){
- smpi_key_elem elem = xbt_dict_get_or_null(smpi_keyvals, (const char*)keyval);
- if(!elem)
- return MPI_ERR_ARG;
- xbt_dict_remove(smpi_keyvals, (const char*)keyval);
- xbt_free(elem);
- return MPI_SUCCESS;
-}
-
-int smpi_attr_delete(MPI_Comm comm, int keyval){
- smpi_key_elem elem = xbt_dict_get_or_null(smpi_keyvals, (const char*)&keyval);
- if(!elem)
- return MPI_ERR_ARG;
- if(elem->delete_fn!=MPI_NULL_DELETE_FN){
- void * value;
- int flag;
- if(smpi_attr_get(comm, keyval, &value, &flag)==MPI_SUCCESS){
- int ret = elem->delete_fn(comm, keyval, &value, &flag);
- if(ret!=MPI_SUCCESS) return ret;
- }
- }
- return smpi_comm_attr_delete(comm, keyval);;
-}
-
-int smpi_attr_get(MPI_Comm comm, int keyval, void* attr_value, int* flag){
- smpi_key_elem elem = xbt_dict_get_or_null(smpi_keyvals, (const char*)&keyval);
- if(!elem)
- return MPI_ERR_ARG;
- return smpi_comm_attr_get(comm, keyval, attr_value, flag);;
-}
-
-int smpi_attr_put(MPI_Comm comm, int keyval, void* attr_value){
-
- if(!smpi_keyvals)
- smpi_keyvals = xbt_dict_new();
-
- smpi_key_elem elem = xbt_dict_get_or_null(smpi_keyvals, (const char*)&keyval);
- if(!elem )
- return MPI_ERR_ARG;
- int flag;
- void* value;
- smpi_attr_get(comm, keyval, &value, &flag);
- if(flag){
- int ret = elem->delete_fn(comm, keyval, &value, &flag);
- if(ret!=MPI_SUCCESS) return ret;
- }
- return smpi_comm_attr_put(comm, keyval, attr_value);;
-}
-