coll/libnbc: Implement MPI_STARTALL
Signed-off-by: KAWASHIMA Takahiro <t-kawashima@jp.fujitsu.com>
Этот коммит содержится в:
родитель
ed0144bad4
Коммит
0b8b0f8393
@ -410,8 +410,6 @@ int ompi_coll_libnbc_neighbor_alltoallw_init(const void *sbuf, const int *scount
|
|||||||
struct ompi_communicator_t *comm, MPI_Info info, ompi_request_t ** request,
|
struct ompi_communicator_t *comm, MPI_Info info, ompi_request_t ** request,
|
||||||
struct mca_coll_base_module_2_2_0_t *module);
|
struct mca_coll_base_module_2_2_0_t *module);
|
||||||
|
|
||||||
int ompi_coll_libnbc_start(size_t count, ompi_request_t ** request);
|
|
||||||
|
|
||||||
|
|
||||||
END_C_DECLS
|
END_C_DECLS
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
#include "ompi_config.h"
|
#include "ompi_config.h"
|
||||||
|
|
||||||
#include "coll_libnbc.h"
|
#include "coll_libnbc.h"
|
||||||
|
#include "nbc_internal.h"
|
||||||
|
|
||||||
#include "mpi.h"
|
#include "mpi.h"
|
||||||
#include "ompi/mca/coll/coll.h"
|
#include "ompi/mca/coll/coll.h"
|
||||||
@ -384,6 +385,44 @@ OBJ_CLASS_INSTANCE(ompi_coll_libnbc_module_t,
|
|||||||
libnbc_module_destruct);
|
libnbc_module_destruct);
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
request_start(size_t count, ompi_request_t ** requests)
|
||||||
|
{
|
||||||
|
int i, res;
|
||||||
|
|
||||||
|
NBC_DEBUG(5, " ** request_start **\n");
|
||||||
|
|
||||||
|
for (i = 0; i < count; i++) {
|
||||||
|
NBC_Handle *handle = (NBC_Handle *) requests[i];
|
||||||
|
NBC_Schedule *schedule = handle->schedule;
|
||||||
|
|
||||||
|
NBC_DEBUG(5, "--------------------------------\n");
|
||||||
|
NBC_DEBUG(5, "schedule %p size %u\n", &schedule, sizeof(schedule));
|
||||||
|
NBC_DEBUG(5, "handle %p size %u\n", &handle, sizeof(handle));
|
||||||
|
NBC_DEBUG(5, "data %p size %u\n", &schedule->data, sizeof(schedule->data));
|
||||||
|
NBC_DEBUG(5, "req_array %p size %u\n", &handle->req_array, sizeof(handle->req_array));
|
||||||
|
NBC_DEBUG(5, "row_offset=%u address=%p size=%u\n", handle->row_offset, &handle->row_offset, sizeof(handle->row_offset));
|
||||||
|
NBC_DEBUG(5, "req_count=%u address=%p size=%u\n", handle->req_count, &handle->req_count, sizeof(handle->req_count));
|
||||||
|
NBC_DEBUG(5, "tmpbuf address=%p size=%u\n", handle->tmpbuf, sizeof(handle->tmpbuf));
|
||||||
|
NBC_DEBUG(5, "--------------------------------\n");
|
||||||
|
|
||||||
|
handle->super.req_complete = REQUEST_PENDING;
|
||||||
|
handle->nbc_complete = false;
|
||||||
|
|
||||||
|
res = NBC_Start(handle);
|
||||||
|
if (OPAL_UNLIKELY(OMPI_SUCCESS != res)) {
|
||||||
|
NBC_DEBUG(5, " ** bad result from NBC_Start **\n");
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
NBC_DEBUG(5, " ** LEAVING request_start **\n");
|
||||||
|
|
||||||
|
return OMPI_SUCCESS;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
request_cancel(struct ompi_request_t *request, int complete)
|
request_cancel(struct ompi_request_t *request, int complete)
|
||||||
{
|
{
|
||||||
@ -413,7 +452,7 @@ request_construct(ompi_coll_libnbc_request_t *request)
|
|||||||
{
|
{
|
||||||
request->super.req_type = OMPI_REQUEST_COLL;
|
request->super.req_type = OMPI_REQUEST_COLL;
|
||||||
request->super.req_status._cancelled = 0;
|
request->super.req_status._cancelled = 0;
|
||||||
request->super.req_start = ompi_coll_libnbc_start;
|
request->super.req_start = request_start;
|
||||||
request->super.req_free = request_free;
|
request->super.req_free = request_free;
|
||||||
request->super.req_cancel = request_cancel;
|
request->super.req_cancel = request_cancel;
|
||||||
}
|
}
|
||||||
|
@ -761,67 +761,3 @@ void NBC_SchedCache_args_delete(void *entry) {
|
|||||||
free(entry);
|
free(entry);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int NBC_Start_internal(NBC_Handle *handle) {
|
|
||||||
|
|
||||||
/* kick off first round */
|
|
||||||
int res = NBC_Start_round(handle);
|
|
||||||
if (OPAL_UNLIKELY(OMPI_SUCCESS != res)) {
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* FIXME - The request may already be complete/inactive now
|
|
||||||
* if so, it should not be added to the active list
|
|
||||||
* Must add param to provide the status of request,
|
|
||||||
* because the user could have already freed it and
|
|
||||||
* it could already be in use by another operation!
|
|
||||||
*/
|
|
||||||
|
|
||||||
OPAL_THREAD_LOCK(&mca_coll_libnbc_component.lock);
|
|
||||||
opal_list_append(&mca_coll_libnbc_component.active_requests, &(handle->super.super.super));
|
|
||||||
OPAL_THREAD_UNLOCK(&mca_coll_libnbc_component.lock);
|
|
||||||
|
|
||||||
return OMPI_SUCCESS;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
int ompi_coll_libnbc_start(size_t count, ompi_request_t ** request) {
|
|
||||||
|
|
||||||
NBC_DEBUG(5, " ** ompi_coll_libnbc_start **\n");
|
|
||||||
|
|
||||||
/* FIXME */
|
|
||||||
assert (1 == count);
|
|
||||||
|
|
||||||
NBC_Handle *handle;
|
|
||||||
NBC_Schedule *schedule;
|
|
||||||
|
|
||||||
int res;
|
|
||||||
|
|
||||||
handle = (NBC_Handle *) *request;
|
|
||||||
|
|
||||||
NBC_DEBUG(5, "--------------------------------\n");
|
|
||||||
NBC_DEBUG(5, "schedule %p size %u\n", &schedule, sizeof(schedule));
|
|
||||||
NBC_DEBUG(5, "handle %p size %u\n", &handle, sizeof(handle));
|
|
||||||
NBC_DEBUG(5, "data %p size %u\n", &schedule->data, sizeof(schedule->data));
|
|
||||||
NBC_DEBUG(5, "req_array %p size %u\n", &handle->req_array, sizeof(handle->req_array));
|
|
||||||
NBC_DEBUG(5, "row_offset=%u address=%p size=%u\n", handle->row_offset, &handle->row_offset, sizeof(handle->row_offset));
|
|
||||||
NBC_DEBUG(5, "req_count=%u address=%p size=%u\n", handle->req_count, &handle->req_count, sizeof(handle->req_count));
|
|
||||||
NBC_DEBUG(5, "tmpbuf address=%p size=%u\n", handle->tmpbuf, sizeof(handle->tmpbuf));
|
|
||||||
NBC_DEBUG(5, "--------------------------------\n");
|
|
||||||
|
|
||||||
handle->super.req_complete = REQUEST_PENDING;
|
|
||||||
handle->super.req_state = OMPI_REQUEST_ACTIVE;
|
|
||||||
handle->nbc_complete = false;
|
|
||||||
res = NBC_Start_internal(handle);
|
|
||||||
if (OPAL_UNLIKELY(OMPI_SUCCESS != res)) {
|
|
||||||
NBC_DEBUG(5, " ** bad result from NBC_Start_internal **\n");
|
|
||||||
NBC_Return_handle (handle);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
NBC_DEBUG(5, " ** LEAVING ompi_coll_libnbc_start **\n");
|
|
||||||
|
|
||||||
return OMPI_SUCCESS;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user