123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- /* StarPU --- Runtime system for heterogeneous multicore architectures.
- *
- * Copyright (C) 2010-2019 CNRS
- * Copyright (C) 2009-2019 Université de Bordeaux
- * Copyright (C) 2012,2013,2016,2017 Inria
- * Copyright (C) 2017 Guillaume Beauchamp
- *
- * StarPU is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or (at
- * your option) any later version.
- *
- * StarPU is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * See the GNU Lesser General Public License in COPYING.LGPL for more details.
- */
- #include <starpu.h>
- #include <starpu_mpi_private.h>
- void _starpu_mpi_request_init(struct _starpu_mpi_req **req)
- {
- _STARPU_MPI_CALLOC(*req, 1, sizeof(struct _starpu_mpi_req));
- /* Initialize the request structure */
- (*req)->data_handle = NULL;
- (*req)->prio = 0;
- (*req)->datatype = 0;
- (*req)->datatype_name = NULL;
- (*req)->ptr = NULL;
- (*req)->count = -1;
- (*req)->registered_datatype = -1;
- (*req)->node_tag.node.rank = -1;
- (*req)->node_tag.data_tag = -1;
- (*req)->node_tag.node.comm = 0;
- (*req)->func = NULL;
- (*req)->status = NULL;
- (*req)->flag = NULL;
- _starpu_mpi_req_multilist_init_coop_sends(*req);
- (*req)->ret = -1;
- (*req)->request_type = UNKNOWN_REQ;
- (*req)->submitted = 0;
- (*req)->completed = 0;
- (*req)->posted = 0;
- (*req)->sync = 0;
- (*req)->detached = -1;
- (*req)->callback = NULL;
- (*req)->callback_arg = NULL;
- (*req)->sequential_consistency = 1;
- (*req)->pre_sync_jobid = -1;
- (*req)->post_sync_jobid = -1;
- #ifdef STARPU_SIMGRID
- starpu_pthread_queue_init(&((*req)->queue));
- starpu_pthread_queue_register(&_starpu_mpi_thread_wait, &((*req)->queue));
- (*req)->done = 0;
- #endif
- _mpi_backend._starpu_mpi_backend_request_init(*req);
- }
- struct _starpu_mpi_req *_starpu_mpi_request_fill(starpu_data_handle_t data_handle,
- int srcdst, starpu_mpi_tag_t data_tag, MPI_Comm comm,
- unsigned detached, unsigned sync, int prio, void (*callback)(void *), void *arg,
- enum _starpu_mpi_request_type request_type, void (*func)(struct _starpu_mpi_req *),
- int sequential_consistency,
- int is_internal_req,
- starpu_ssize_t count)
- {
- struct _starpu_mpi_req *req;
- /* Initialize the request structure */
- _starpu_mpi_request_init(&req);
- req->request_type = request_type;
- /* prio_list is sorted by increasing values */
- if (_starpu_mpi_use_prio)
- req->prio = prio;
- req->data_handle = data_handle;
- req->node_tag.node.rank = srcdst;
- req->node_tag.data_tag = data_tag;
- req->node_tag.node.comm = comm;
- req->detached = detached;
- req->sync = sync;
- req->callback = callback;
- req->callback_arg = arg;
- req->func = func;
- req->sequential_consistency = sequential_consistency;
- req->count = count;
- _mpi_backend._starpu_mpi_backend_request_fill(req, comm, is_internal_req);
- return req;
- }
- void _starpu_mpi_request_destroy(struct _starpu_mpi_req *req)
- {
- _mpi_backend._starpu_mpi_backend_request_destroy(req);
- free(req->datatype_name);
- req->datatype_name = NULL;
- #ifdef STARPU_SIMGRID
- starpu_pthread_queue_unregister(&_starpu_mpi_thread_wait, &req->queue);
- starpu_pthread_queue_destroy(&req->queue);
- #endif
- free(req);
- }
|