1
1
This commit was SVN r915.
Этот коммит содержится в:
Tim Woodall 2004-03-18 16:03:03 +00:00
родитель 3364dc51e2
Коммит 96f263403a
4 изменённых файлов: 45 добавлений и 29 удалений

Просмотреть файл

@ -81,7 +81,7 @@ typedef int (*mca_pml_base_progress_fn_t)(void);
typedef int (*mca_pml_base_irecv_init_fn_t)(
void *buf,
size_t size,
size_t count,
struct lam_datatype_t *datatype,
int src,
int tag,
@ -91,7 +91,7 @@ typedef int (*mca_pml_base_irecv_init_fn_t)(
typedef int (*mca_pml_base_irecv_fn_t)(
void *buf,
size_t size,
size_t count,
struct lam_datatype_t *datatype,
int src,
int tag,
@ -101,7 +101,7 @@ typedef int (*mca_pml_base_irecv_fn_t)(
typedef int (*mca_pml_base_recv_fn_t)(
void *buf,
size_t size,
size_t count,
struct lam_datatype_t *datatype,
int src,
int tag,
@ -111,7 +111,7 @@ typedef int (*mca_pml_base_recv_fn_t)(
typedef int (*mca_pml_base_isend_init_fn_t)(
void *buf,
size_t size,
size_t count,
struct lam_datatype_t *datatype,
int dst,
int tag,
@ -122,7 +122,7 @@ typedef int (*mca_pml_base_isend_init_fn_t)(
typedef int (*mca_pml_base_isend_fn_t)(
void *buf,
size_t size,
size_t count,
struct lam_datatype_t *datatype,
int dst,
int tag,
@ -133,7 +133,7 @@ typedef int (*mca_pml_base_isend_fn_t)(
typedef int (*mca_pml_base_send_fn_t)(
void *buf,
size_t size,
size_t count,
struct lam_datatype_t *datatype,
int dst,
int tag,
@ -159,7 +159,7 @@ typedef int (*mca_pml_base_wait_fn_t)(
);
typedef int (*mca_pml_base_wait_all_fn_t)(
int count, /* size of request/status arrays */
int count, /* count of request/status arrays */
lam_request_t** request, /* array of requests */
lam_status_public_t *status /* array of statuses */
);

Просмотреть файл

@ -10,35 +10,51 @@ int mca_pml_teg_wait(
int *index,
lam_status_public_t* status)
{
#if 0
mca_pml_base_request_t* pml_request = *(mca_pml_base_request_t**)request;
if(pml_request->req_mpi_done == false) {
int c, i;
int completed = -1;
mca_pml_base_request_t* pml_request;
/* poll for completion - primarily for benchmarks */
int i;
for(i=0; i<mca_pml_teg.teg_poll_iterations && pml_request->req_mpi_done == false; i++)
; /* do nothing */
/* poll for completion */
for(c=0; completed < 0 && c < mca_pml_teg.teg_poll_iterations; c++) {
for(i=0; i<count; i++) {
pml_request = (mca_pml_base_request_t*)request[i];
if(pml_request == NULL)
continue;
if(pml_request->req_mpi_done == true) {
completed = i;
break;
}
}
}
/* if not complete - sleep on condition variable until a request completes */
if(pml_request->req_mpi_done == false) {
if(completed < 0) {
/* give up and sleep until completion */
lam_mutex_lock(&mca_pml_teg.teg_request_lock);
mca_pml_teg.teg_request_waiting++;
while(pml_request->req_mpi_done == false)
while(completed < 0) {
for(i=0; i<count; i++) {
pml_request = (mca_pml_base_request_t*)request[i];
if(pml_request->req_mpi_done == true) {
completed = i;
break;
}
lam_condition_wait(&mca_pml_teg.teg_request_cond, &mca_pml_teg.teg_request_lock);
}
}
mca_pml_teg.teg_request_waiting--;
lam_mutex_unlock(&mca_pml_teg.teg_request_lock);
}
}
/* return request to pool */
if(pml_request->req_persistent == false) {
mca_pml_teg_free(request);
}
if (status != NULL) {
*status = pml_request->req_status;
}
#endif
if (index != NULL) {
*index = completed;
}
return LAM_SUCCESS;
}