- smpi_group_index(smpi_comm_group(request->comm), request->dst));
- // FIXME: SIMIX does not yet support don-contiguous datatypes
- request->action = SIMIX_req_comm_isend(mailbox, request->size, -1.0,
- request->buf, request->size, &match_send, request, 0);
+ smpi_group_index(smpi_comm_group(request->comm), request->dst));
+ // FIXME: SIMIX does not yet support non-contiguous datatypes
+
+ if (request->size < 64*1024 ) { // eager mode => detached send (FIXME: this limit should be configurable)
+ void *oldbuf = request->buf;
+ detached = 1;
+ request->buf = malloc(request->size);
+ memcpy(request->buf,oldbuf,request->size);
+ XBT_DEBUG("Send request %p is detached; buf %p copied into %p",request,oldbuf,request->buf);
+ } else {
+ XBT_DEBUG("Send request %p is not detached (buf: %p)",request,request->buf);
+ }
+ request->action =
+ SIMIX_req_comm_isend(mailbox, request->size, -1.0,
+ request->buf, request->size, &match_send, request,
+ // detach if msg size < eager/rdv switch limit
+ detached);
+