38 #define MAX_MPI_WAIT_TIME (10)
39 #define SLEEP_IN_NANO_SEC (100000000)
72 return floor(log10(n) + 1);
82 static void print_buff(
const int *buff,
size_t columns,
size_t rows)
87 const int *tmp_buff = buff;
89 for (i = 0; i < columns * rows; i++) {
91 max_wdt1 = (tmp > max_wdt1) ? tmp : max_wdt1;
94 for (j = 0; j < rows; j++) {
97 for (; wdt < max_wdt2; wdt++)
100 for (i = 0; i < columns - 1; i++) {
102 printf(
"%d ", tmp_buff[i]);
103 for (; wdt < max_wdt1; wdt++)
106 printf(
"%d", tmp_buff[columns - 1]);
108 for (; wdt < max_wdt1; wdt++)
122 return (rand() % 10000);
134 time_t now = time(
NULL);
137 MPI_Test(req, &status, MPI_STATUS_IGNORE);
139 while (status == 0 && (time(
NULL) < now + timeout))
140 MPI_Test(req, &status, MPI_STATUS_IGNORE);
151 struct doca_devinfo **dev_list;
152 uint32_t nb_devs = 0;
169 for (i = 0; i < nb_devs; i++) {
192 struct doca_devinfo **dev_list;
193 uint32_t nb_devs = 0;
210 for (i = 0; i < nb_devs; i++) {
245 const char *rdma_device_name,
246 struct doca_dev **pf_doca_device,
247 struct doca_dev **rdma_doca_device)
249 struct doca_devinfo **dev_list;
250 uint32_t nb_devs = 0;
258 DOCA_LOG_ERR(
"RDMA DOCA device must be different than PF DOCA device (%s)", pf_device_name);
268 for (i = 0; i < nb_devs; i++) {
278 if (strcmp(ibdev_name, actual_base_ibdev_name) == 0) {
314 if (*pf_doca_device ==
NULL) {
320 if (*rdma_doca_device ==
NULL) {
325 *rdma_doca_device = *pf_doca_device;
362 goto destroy_doca_dpa;
369 goto destroy_doca_dpa;
379 goto destroy_doca_dpa;
385 goto destroy_rdma_doca_dpa;
397 destroy_rdma_doca_dpa:
439 unsigned int mmap_permissions,
442 struct doca_mmap **
mmap,
514 struct doca_dev *doca_device,
515 const uint8_t *remote_event_export_data,
516 size_t remote_event_export_size,
517 struct doca_sync_event_remote_net **remote_event,
523 remote_event_export_data,
524 remote_event_export_size,
534 goto destroy_remote_event;
539 destroy_remote_event:
558 const void *recv_mmap_export;
560 size_t recv_mmap_export_len;
562 void **recvbufs_mmap_exports =
NULL;
564 size_t *recvbufs_mmap_exports_lens =
NULL;
583 MPI_Type_get_extent(
resources->msg_type, &lb, &extent);
605 &recvbuf_dpa_mmap_handle);
608 goto destroy_sendbuf_mmap;
615 &recv_mmap_export_len);
618 goto destroy_recvbuf_mmap;
622 recvbufs_mmap_exports_lens = (
size_t *)calloc(
resources->num_ranks,
sizeof(*recvbufs_mmap_exports_lens));
623 if (recvbufs_mmap_exports_lens ==
NULL) {
624 DOCA_LOG_ERR(
"Failed to allocate memory for recv mmap export lengths");
626 goto destroy_recvbuf_mmap;
630 recvbufs_mmap_exports = (
void **)calloc(
resources->num_ranks, recv_mmap_export_len);
631 if (recvbufs_mmap_exports ==
NULL) {
632 DOCA_LOG_ERR(
"Failed to allocate memory for recv mmap exports");
634 goto free_mmap_exports_lens;
638 MPI_Iallgather(&recv_mmap_export_len,
639 sizeof(recv_mmap_export_len),
641 recvbufs_mmap_exports_lens,
642 sizeof(recv_mmap_export_len),
650 goto free_mmap_exports;
654 MPI_Iallgather(recv_mmap_export,
655 recv_mmap_export_len,
657 recvbufs_mmap_exports,
658 recv_mmap_export_len,
666 goto free_mmap_exports;
671 DOCA_LOG_ERR(
"Failed to allocate memory for export mmaps");
673 goto free_mmap_exports;
679 DOCA_LOG_ERR(
"Failed to allocate memory for export mmaps dpa handle");
681 goto free_export_mmaps;
684 for (i = 0; i <
resources->num_ranks; i++) {
686 j = i * recv_mmap_export_len;
689 (
const void *)&(((
char *)recvbufs_mmap_exports)[j]),
690 recvbufs_mmap_exports_lens[i],
695 goto destroy_export_mmaps;
701 &(
resources->export_mmaps_dpa_handle[i]));
704 goto destroy_export_mmaps;
710 if (recvbufs ==
NULL) {
711 DOCA_LOG_ERR(
"Failed to allocate memory for recvbufs of all the processes");
713 goto destroy_export_mmaps;
747 goto free_devptr_recvbufs;
753 &(
resources->devptr_recvbufs_mmap_handles));
756 goto free_devptr_recvbufs;
762 (
void *)
resources->export_mmaps_dpa_handle,
766 goto free_devptr_recvbufs_mmap_handles;
769 resources->rp_remote_kernel_events_export_sizes =
770 calloc(
resources->num_ranks,
sizeof(*(
resources->rp_remote_kernel_events_export_sizes)));
771 if (
resources->rp_remote_kernel_events_export_sizes ==
NULL) {
772 DOCA_LOG_ERR(
"Failed to allocate memory for rp_remote_kernel_events_export_sizes");
774 goto free_devptr_recvbufs;
778 MPI_Ialltoall(
resources->lp_remote_kernel_events_export_sizes,
779 sizeof(*(
resources->lp_remote_kernel_events_export_sizes)),
781 resources->rp_remote_kernel_events_export_sizes,
782 sizeof(*(
resources->rp_remote_kernel_events_export_sizes)),
790 goto free_remote_kernel_events_exports;
793 resources->rp_remote_kernel_events_export_data =
795 if (
resources->rp_remote_kernel_events_export_data ==
NULL) {
796 DOCA_LOG_ERR(
"Failed to allocate memory for rp_remote_kernel_events_export_data");
798 goto free_remote_kernel_events_exports;
802 MPI_Ialltoall(
resources->lp_remote_kernel_events_export_data,
803 resources->lp_remote_kernel_events_export_sizes[0],
805 resources->rp_remote_kernel_events_export_data,
806 resources->rp_remote_kernel_events_export_sizes[0],
814 goto free_remote_kernel_events_exports;
819 DOCA_LOG_ERR(
"Failed to allocate memory for rp_kernel_events");
821 goto free_remote_kernel_events_exports;
824 resources->rp_kernel_events_dpa_handles =
827 DOCA_LOG_ERR(
"Failed to allocate memory for rp_kernel_events_dpa_handles");
829 goto free_remote_kernel_events;
832 for (i = 0; i <
resources->num_ranks; i++) {
834 j = i *
resources->rp_remote_kernel_events_export_sizes[i];
838 (
const uint8_t *)&(((
char *)
resources->rp_remote_kernel_events_export_data)[j]),
839 resources->rp_remote_kernel_events_export_sizes[i],
841 &(
resources->rp_kernel_events_dpa_handles[i]));
844 goto free_remote_kernel_events_dpa_handles;
851 &(
resources->devptr_rp_remote_kernel_events));
854 goto destroy_kernel_events_from_export;
859 resources->devptr_rp_remote_kernel_events,
860 (
void *)
resources->rp_kernel_events_dpa_handles,
864 goto destroy_kernel_events_from_export;
870 &(
resources->devptr_kernel_events_handle));
873 goto free_rp_remote_kernel_events_dpa;
883 goto free_kernel_events_handle_dpa;
889 free(recvbufs_mmap_exports);
890 free(recvbufs_mmap_exports_lens);
893 free(
resources->lp_remote_kernel_events_export_sizes);
894 free(
resources->lp_remote_kernel_events_export_data);
897 free(
resources->rp_remote_kernel_events_export_data);
898 free(
resources->rp_remote_kernel_events_export_sizes);
902 free_kernel_events_handle_dpa:
908 free_rp_remote_kernel_events_dpa:
914 destroy_kernel_events_from_export:
915 for (i = 0; i <
resources->num_ranks; i++) {
919 DOCA_LOG_ERR(
"Failed to destroy remote net DOCA sync event: %s",
925 free_remote_kernel_events_dpa_handles:
926 free(
resources->rp_kernel_events_dpa_handles);
927 free_remote_kernel_events:
929 free_remote_kernel_events_exports:
930 free(
resources->rp_remote_kernel_events_export_data);
931 free(
resources->rp_remote_kernel_events_export_sizes);
932 free_devptr_recvbufs_mmap_handles:
938 free_devptr_recvbufs:
946 destroy_export_mmaps:
947 for (j = 0; j < i; j++) {
959 free(recvbufs_mmap_exports);
960 free_mmap_exports_lens:
961 free(recvbufs_mmap_exports_lens);
962 destroy_recvbuf_mmap:
968 destroy_sendbuf_mmap:
987 const void *local_connection_details =
NULL;
989 const void *remote_connection_details =
NULL;
991 size_t local_connection_details_len, remote_connection_details_len;
993 struct doca_rdma_connection *connection =
NULL;
995 const int addr_tag = 1;
996 const int addr_len_tag = 2;
1002 for (i = 0; i <
resources->num_ranks; i++) {
1008 &local_connection_details,
1009 &local_connection_details_len,
1017 MPI_Isend(&local_connection_details_len, 1, MPI_INT64_T, i, addr_len_tag,
resources->comm, &reqs[0]);
1018 MPI_Isend(local_connection_details,
1019 local_connection_details_len,
1026 MPI_Irecv(&remote_connection_details_len, 1, MPI_INT64_T, i, addr_len_tag,
resources->comm, &reqs[2]);
1030 DOCA_LOG_ERR(
"Timed out waiting on receiving remote connection details length: %s",
1035 remote_connection_details = malloc(remote_connection_details_len);
1036 if (remote_connection_details ==
NULL) {
1037 DOCA_LOG_ERR(
"Failed to allocate memory for remote rdma connection details");
1040 MPI_Irecv((
void *)remote_connection_details,
1041 remote_connection_details_len,
1050 DOCA_LOG_ERR(
"Timed out waiting on receiving remote connection details: %s",
1052 free((
void *)remote_connection_details);
1061 remote_connection_details,
1062 remote_connection_details_len,
1066 free((
void *)remote_connection_details);
1072 DOCA_LOG_ERR(
"Timed out waiting on sending local connection details length: %s",
1074 free((
void *)remote_connection_details);
1080 DOCA_LOG_ERR(
"Timed out waiting on sending local connection details: %s",
1082 free((
void *)remote_connection_details);
1086 free((
void *)remote_connection_details);
1103 struct doca_dev *doca_device,
1104 unsigned int rdma_caps,
1105 struct doca_dpa_completion *dpa_completion,
1106 struct doca_rdma **rdma)
1108 struct doca_ctx *rdma_as_doca_ctx;
1205 DOCA_LOG_ERR(
"Failed to allocate memory for DOCA DPA completions");
1208 for (i = 0; i <
resources->num_ranks; i++) {
1214 goto destroy_dpa_completions;
1222 DOCA_LOG_ERR(
"Failed to destroy DOCA DPA completion instance: %s",
1226 goto destroy_dpa_completions;
1232 destroy_dpa_completions:
1233 for (j = 0; j < i; j++) {
1236 DOCA_LOG_ERR(
"Failed to destroy DOCA DPA completion instance: %s",
1267 DOCA_LOG_ERR(
"Failed to allocate memory for DOCA DPA RDMAs");
1270 for (i = 0; i <
resources->num_ranks; i++) {
1291 if (rdma_handlers ==
NULL) {
1292 DOCA_LOG_ERR(
"Failed to allocate memory for DOCA DPA device rdma handlers");
1295 for (j = 0; j <
resources->num_ranks; j++) {
1299 goto free_rdma_handlers;
1305 sizeof(*rdma_handlers) *
resources->num_ranks,
1309 goto free_rdma_handlers;
1315 (
void *)rdma_handlers,
1316 sizeof(*rdma_handlers) *
resources->num_ranks);
1319 goto free_rdma_handlers_dpa;
1323 free(rdma_handlers);
1327 free_rdma_handlers_dpa:
1334 free(rdma_handlers);
1336 for (j = 0; j < i; j++) {
1357 struct doca_dev *doca_device,
1358 struct doca_sync_event **comp_event)
1371 goto destroy_comp_event;
1377 goto destroy_comp_event;
1383 goto destroy_comp_event;
1405 struct doca_sync_event **kernel_event)
1418 goto destroy_kernel_event;
1424 goto destroy_kernel_event;
1430 goto destroy_kernel_event;
1435 destroy_kernel_event:
1456 const uint8_t **lp_remote_kernel_events_export_data_arr =
NULL;
1470 DOCA_LOG_ERR(
"Failed to allocate memory for kernel events");
1472 goto destroy_comp_event;
1474 for (i = 0; i <
resources->num_ranks; i++) {
1479 goto destroy_kernel_events;
1486 DOCA_LOG_ERR(
"Failed to allocate memory for kernel events handles");
1488 goto destroy_kernel_events_handles;
1491 for (j = 0; j <
resources->num_ranks; j++) {
1498 goto destroy_kernel_events_handles;
1503 resources->lp_remote_kernel_events_export_sizes =
1504 calloc(
resources->num_ranks,
sizeof(*(
resources->lp_remote_kernel_events_export_sizes)));
1505 if (
resources->lp_remote_kernel_events_export_sizes ==
NULL) {
1506 DOCA_LOG_ERR(
"Failed to allocate memory for kernel events export sizes");
1508 goto destroy_kernel_events_handles;
1511 lp_remote_kernel_events_export_data_arr = calloc(
resources->num_ranks,
sizeof(
const uint8_t *));
1513 for (j = 0; j <
resources->num_ranks; j++) {
1516 &(lp_remote_kernel_events_export_data_arr[j]),
1517 &(
resources->lp_remote_kernel_events_export_sizes[j]));
1520 goto free_remote_kernel_events_export_data_arr;
1524 resources->lp_remote_kernel_events_export_data =
1526 if (
resources->lp_remote_kernel_events_export_data ==
NULL) {
1527 DOCA_LOG_ERR(
"Failed to allocate memory for kernel events export data");
1529 goto free_remote_kernel_events_export_data_arr;
1532 for (j = 0; j <
resources->num_ranks; j++) {
1534 i = j *
resources->lp_remote_kernel_events_export_sizes[j];
1535 memcpy(&(
resources->lp_remote_kernel_events_export_data[i]),
1536 lp_remote_kernel_events_export_data_arr[j],
1537 resources->lp_remote_kernel_events_export_sizes[j]);
1540 free(lp_remote_kernel_events_export_data_arr);
1544 free_remote_kernel_events_export_data_arr:
1545 free(lp_remote_kernel_events_export_data_arr);
1547 free(
resources->lp_remote_kernel_events_export_sizes);
1548 destroy_kernel_events_handles:
1550 destroy_kernel_events:
1551 for (j = 0; j < i; j++) {
1599 DOCA_LOG_ERR(
"Failed to prepare DOCA DPA completion contexts resources: %s",
1601 goto destroy_events;
1608 goto destroy_dpa_completions;
1627 for (i = 0; i <
resources->num_ranks; i++) {
1635 destroy_dpa_completions:
1637 for (i = 0; i <
resources->num_ranks; i++) {
1640 DOCA_LOG_ERR(
"Failed to destroy DOCA DPA completion instance: %s",
1647 free(
resources->lp_remote_kernel_events_export_data);
1648 free(
resources->lp_remote_kernel_events_export_sizes);
1650 for (i = 0; i <
resources->num_ranks; i++) {
1664 #ifdef DOCA_ARCH_DPU
1681 #ifdef DOCA_ARCH_DPU
1709 for (i = 0; i <
resources->num_ranks; i++) {
1713 DOCA_LOG_ERR(
"Failed to destroy remote net DOCA sync event: %s",
1719 free(
resources->rp_kernel_events_dpa_handles);
1731 free(
resources->export_mmaps_dpa_handle);
1732 for (i = 0; i <
resources->num_ranks; i++) {
1760 for (i = 0; i <
resources->num_ranks; i++) {
1770 for (i = 0; i <
resources->num_ranks; i++) {
1773 DOCA_LOG_ERR(
"Failed to destroy DOCA DPA completion instance: %s",
1783 for (i = 0; i <
resources->num_ranks; i++) {
1800 #ifdef DOCA_ARCH_DPU
1817 #ifdef DOCA_ARCH_DPU
1856 double elapsed_time_in_sec = 0;
1857 struct timespec ts = {
1864 DOCA_LOG_ERR(
"Failed to wait for completion event, resourced uninitialized");
1886 nanosleep(&ts, &ts);
1887 elapsed_time_in_sec += sleep_in_sec;
1895 MPI_Datatype sendtype,
1898 MPI_Datatype recvtype,
1902 int num_ranks, my_rank;
1904 unsigned int num_threads;
1908 if (comm == MPI_COMM_NULL)
1912 MPI_Comm_rank(comm, &my_rank);
1914 MPI_Comm_size(comm, &num_ranks);
1957 (uint64_t)sendcount,
1976 MPI_Datatype sendtype,
1979 MPI_Datatype recvtype,
1986 result =
dpa_ialltoall(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm, &req);
2014 int my_rank, num_ranks, i;
2015 size_t buff_size, msg_size, msg_count;
2016 int *send_buf, *recv_buf, *send_buf_all, *recv_buf_all;
2017 MPI_Request reqs[2];
2021 MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
2022 MPI_Comm_size(MPI_COMM_WORLD, &num_ranks);
2035 msg_size = num_ranks *
sizeof(int);
2038 msg_count = (msg_size / num_ranks) /
sizeof(int);
2039 if (msg_count == 0) {
2041 DOCA_LOG_ERR(
"Message size %lu too small for the number of processes. Should be at least %lu",
2043 num_ranks *
sizeof(
int));
2047 buff_size = msg_size /
sizeof(int);
2063 DOCA_LOG_INFO(
"Number of processes = %d, message size = %lu, message count = %lu, buffer size = %lu",
2070 send_buf = calloc(buff_size,
sizeof(
int));
2071 recv_buf = calloc(buff_size,
sizeof(
int));
2072 send_buf_all = calloc(num_ranks * buff_size,
sizeof(
int));
2073 recv_buf_all = calloc(num_ranks * buff_size,
sizeof(
int));
2075 if (send_buf ==
NULL || recv_buf ==
NULL || send_buf_all ==
NULL || recv_buf_all ==
NULL) {
2076 DOCA_LOG_ERR(
"Failed to allocate memory for send/recv buffers");
2082 srand(time(
NULL) + my_rank);
2083 for (i = 0; i < buff_size; i++)
2086 MPI_Barrier(MPI_COMM_WORLD);
2089 result =
dpa_alltoall(send_buf, msg_count, MPI_INT, recv_buf, msg_count, MPI_INT, MPI_COMM_WORLD);
2097 MPI_Iallgather(send_buf, buff_size, MPI_INT, send_buf_all, buff_size, MPI_INT, MPI_COMM_WORLD, &reqs[0]);
2105 MPI_Iallgather(recv_buf, buff_size, MPI_INT, recv_buf_all, buff_size, MPI_INT, MPI_COMM_WORLD, &reqs[1]);
2114 printf(
" ------------send buffs----------------------\n");
2115 print_buff(send_buf_all, buff_size, num_ranks);
2116 printf(
" ------------recv buffs----------------------\n");
2117 print_buff(recv_buf_all, buff_size, num_ranks);
static doca_error_t create_doca_dpa_completion_sync_event(struct doca_dpa *doca_dpa, struct doca_dev *doca_device, struct doca_sync_event **comp_event)
DOCA_LOG_REGISTER(A2A::Core)
bool rdma_device_exists_check(const char *device_name)
static doca_error_t create_rdma(struct doca_dpa *doca_dpa, struct doca_dev *doca_device, unsigned int rdma_caps, struct doca_dpa_completion *dpa_completion, struct doca_rdma **rdma)
static doca_error_t create_dpa_a2a_events(struct a2a_resources *resources)
doca_dpa_func_t alltoall_kernel
static doca_error_t open_dpa_devices(const char *pf_device_name, const char *rdma_device_name, struct doca_dev **pf_doca_device, struct doca_dev **rdma_doca_device)
static doca_error_t prepare_dpa_a2a_dpa_completions(struct a2a_resources *resources)
char rdma_device1_name[MAX_IB_DEVICE_NAME_LEN]
static doca_error_t connect_dpa_a2a_rdmas(struct a2a_resources *resources)
doca_error_t dpa_a2a_req_finalize(struct dpa_a2a_request *req)
struct doca_dpa_app * dpa_all2all_app
#define SLEEP_IN_NANO_SEC
doca_error_t dpa_ialltoall(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm, struct dpa_a2a_request *req)
char pf_device2_name[MAX_IB_DEVICE_NAME_LEN]
doca_error_t dpa_a2a(int argc, char **argv, struct a2a_config *cfg)
static doca_error_t prepare_dpa_a2a_rdmas(struct a2a_resources *resources)
static doca_error_t mpi_request_wait_timeout(MPI_Request *req, size_t timeout)
static doca_error_t create_mmap(struct doca_dev *doca_device, unsigned int mmap_permissions, void *memrange_addr, size_t memrange_len, struct doca_mmap **mmap, doca_dpa_dev_mmap_t *dpa_mmap_handle)
doca_error_t dpa_a2a_req_wait(struct dpa_a2a_request *req)
static int calc_width(int n)
static doca_error_t create_dpa_context(struct a2a_resources *resources)
static void print_buff(const int *buff, size_t columns, size_t rows)
doca_error_t dpa_a2a_init(struct a2a_resources *resources)
doca_error_t dpa_alltoall(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
bool dpa_device_exists_check(const char *device_name)
#define MAX_MPI_WAIT_TIME
char pf_device1_name[MAX_IB_DEVICE_NAME_LEN]
static int compute_random_int(void)
static doca_error_t create_doca_dpa_sync_event_from_export(struct doca_dpa *doca_dpa, struct doca_dev *doca_device, const uint8_t *remote_event_export_data, size_t remote_event_export_size, struct doca_sync_event_remote_net **remote_event, doca_dpa_dev_sync_event_remote_net_t *remote_event_dpa_handle)
doca_error_t dpa_a2a_destroy(struct a2a_resources *resources)
static doca_error_t destroy_rdma(struct doca_rdma *rdma, struct doca_dev *doca_device)
static doca_error_t prepare_dpa_a2a_memory(struct a2a_resources *resources)
char rdma_device2_name[MAX_IB_DEVICE_NAME_LEN]
static doca_error_t create_doca_dpa_remote_net_sync_event(struct doca_dpa *doca_dpa, struct doca_sync_event **kernel_event)
#define MESSAGE_SIZE_DEFAULT_LEN
#define IB_DEVICE_DEFAULT_NAME
#define MAX_IB_DEVICE_NAME_LEN
struct rdma_resources resources
DOCA_STABLE doca_error_t doca_ctx_start(struct doca_ctx *ctx)
Finalizes all configurations, and starts the DOCA CTX.
DOCA_EXPERIMENTAL doca_error_t doca_ctx_set_datapath_on_dpa(struct doca_ctx *ctx, struct doca_dpa *dpa_dev)
This function binds the DOCA context to a dpa device.
DOCA_STABLE doca_error_t doca_ctx_stop(struct doca_ctx *ctx)
Stops the context allowing reconfiguration.
DOCA_STABLE doca_error_t doca_devinfo_create_list(struct doca_devinfo ***dev_list, uint32_t *nb_devs)
Creates list of all available local devices.
DOCA_STABLE doca_error_t doca_devinfo_get_ibdev_name(const struct doca_devinfo *devinfo, char *ibdev_name, uint32_t size)
Get the name of the IB device represented by a DOCA devinfo.
#define DOCA_DEVINFO_IBDEV_NAME_SIZE
Buffer size to hold Infiniband/RoCE device name. Including a null terminator.
DOCA_STABLE doca_error_t doca_devinfo_destroy_list(struct doca_devinfo **dev_list)
Destroy list of local device info structures.
DOCA_STABLE doca_error_t doca_dev_open(struct doca_devinfo *devinfo, struct doca_dev **dev)
Initialize local device for use.
DOCA_STABLE doca_error_t doca_dev_close(struct doca_dev *dev)
Destroy allocated local device instance.
DOCA_EXPERIMENTAL doca_error_t doca_dpa_completion_destroy(struct doca_dpa_completion *dpa_comp)
Destroy DPA completion context.
DOCA_EXPERIMENTAL doca_error_t doca_dpa_kernel_launch_update_set(struct doca_dpa *dpa, struct doca_sync_event *wait_event, uint64_t wait_threshold, struct doca_sync_event *comp_event, uint64_t comp_count, unsigned int num_threads, doca_dpa_func_t *func,...)
Submit a kernel to DPA that sets completion event.
DOCA_EXPERIMENTAL doca_error_t doca_dpa_create(struct doca_dev *dev, struct doca_dpa **dpa)
Create a DOCA DPA Context.
DOCA_EXPERIMENTAL doca_error_t doca_dpa_get_dpa_handle(struct doca_dpa *dpa, doca_dpa_dev_t *handle)
Get DPA context handle.
DOCA_EXPERIMENTAL doca_error_t doca_dpa_device_extend(struct doca_dpa *dpa, struct doca_dev *other_dev, struct doca_dpa **extended_dpa)
Create an extended DPA context.
DOCA_EXPERIMENTAL doca_error_t doca_dpa_mem_alloc(struct doca_dpa *dpa, size_t size, doca_dpa_dev_uintptr_t *dev_ptr)
Allocate DPA heap memory.
DOCA_EXPERIMENTAL doca_error_t doca_dpa_completion_start(struct doca_dpa_completion *dpa_comp)
Start DPA completion context.
DOCA_EXPERIMENTAL doca_error_t doca_dpa_mem_free(struct doca_dpa *dpa, doca_dpa_dev_uintptr_t dev_ptr)
Free the previously allocated DPA memory.
DOCA_EXPERIMENTAL doca_error_t doca_dpa_destroy(struct doca_dpa *dpa)
Destroy a DOCA DPA context.
DOCA_EXPERIMENTAL doca_error_t doca_dpa_completion_create(struct doca_dpa *dpa, unsigned int queue_size, struct doca_dpa_completion **dpa_comp)
Create DPA completion context.
void() doca_dpa_func_t(void)
Generic function pointer type.
DOCA_EXPERIMENTAL doca_error_t doca_dpa_start(struct doca_dpa *dpa)
Start a DPA context.
DOCA_EXPERIMENTAL doca_error_t doca_dpa_h2d_memcpy(struct doca_dpa *dpa, doca_dpa_dev_uintptr_t dst_ptr, void *src_ptr, size_t size)
Copy from host memory to DPA Heap.
DOCA_EXPERIMENTAL doca_error_t doca_dpa_cap_is_supported(const struct doca_devinfo *devinfo)
Get whether the DOCA device supports DPA.
DOCA_EXPERIMENTAL doca_error_t doca_dpa_set_app(struct doca_dpa *dpa, struct doca_dpa_app *app)
Set program app for DPA context.
#define DOCA_ERROR_PROPAGATE(r, t)
Save the first encountered doca_error_t.
enum doca_error doca_error_t
DOCA API return codes.
DOCA_STABLE const char * doca_error_get_descr(doca_error_t error)
Returns the description string of an error code.
@ DOCA_ERROR_INVALID_VALUE
#define DOCA_LOG_ERR(format,...)
Generates an ERROR application log message.
#define DOCA_LOG_INFO(format,...)
Generates an INFO application log message.
uint32_t doca_dpa_dev_mmap_t
Handle on the DPA for a doca_mmap instance.
DOCA_STABLE doca_error_t doca_mmap_set_memrange(struct doca_mmap *mmap, void *addr, size_t len)
Set the memory range of DOCA memory map.
DOCA_STABLE doca_error_t doca_mmap_destroy(struct doca_mmap *mmap)
Destroy DOCA Memory Map structure.
DOCA_STABLE doca_error_t doca_mmap_create(struct doca_mmap **mmap)
Allocates zero size memory map object with default/unset attributes.
DOCA_STABLE doca_error_t doca_mmap_create_from_export(const union doca_data *user_data, const void *export_desc, size_t export_desc_len, struct doca_dev *dev, struct doca_mmap **mmap)
Creates a memory map object representing memory ranges in remote system memory space.
DOCA_STABLE doca_error_t doca_mmap_set_permissions(struct doca_mmap *mmap, uint32_t access_mask)
Set access flags of the registered memory.
DOCA_STABLE doca_error_t doca_mmap_start(struct doca_mmap *mmap)
Start DOCA Memory Map.
DOCA_EXPERIMENTAL doca_error_t doca_mmap_dev_get_dpa_handle(struct doca_mmap *mmap, const struct doca_dev *dev, doca_dpa_dev_mmap_t *dpa_mmap_handle)
Extract mmap handle associated with the given DOCA device, for the DPA to operate on.
DOCA_STABLE doca_error_t doca_mmap_add_dev(struct doca_mmap *mmap, struct doca_dev *dev)
Register DOCA memory map on a given device.
DOCA_STABLE doca_error_t doca_mmap_export_rdma(struct doca_mmap *mmap, const struct doca_dev *dev, const void **export_desc, size_t *export_desc_len)
Compose memory map representation for later import with doca_mmap_create_from_export() for one of the...
DOCA_EXPERIMENTAL doca_error_t doca_rdma_destroy(struct doca_rdma *rdma)
Destroy a DOCA RDMA instance.
DOCA_EXPERIMENTAL doca_error_t doca_rdma_dpa_completion_attach(struct doca_rdma *rdma, struct doca_dpa_completion *dpa_comp)
Attach DOCA RDMA to DPA completion context.
DOCA_EXPERIMENTAL doca_error_t doca_rdma_set_grh_enabled(struct doca_rdma *rdma, uint8_t grh_enabled)
Set whether to use GRH in connection. The value can be queried using doca_rdma_get_grh_enabled()....
DOCA_EXPERIMENTAL doca_error_t doca_rdma_set_permissions(struct doca_rdma *rdma, uint32_t permissions)
Set rdma permissions for doca_rdma. The value can be queried using doca_rdma_get_permissions()....
DOCA_EXPERIMENTAL doca_error_t doca_rdma_get_dpa_handle(struct doca_rdma *rdma, doca_dpa_dev_rdma_t *dpa_rdma)
Retrieve the handle in the dpa memory space of a doca_rdma.
DOCA_EXPERIMENTAL doca_error_t doca_rdma_export(struct doca_rdma *rdma, const void **local_rdma_conn_details, size_t *local_rdma_conn_details_size, struct doca_rdma_connection **rdma_connection)
Export doca_rdma connection details object The doca_rdma_conn_details are used in doca_rdma_connect()...
DOCA_EXPERIMENTAL struct doca_ctx * doca_rdma_as_ctx(struct doca_rdma *rdma)
Convert doca_rdma instance into a generalized context for use with doca core objects.
uint64_t doca_dpa_dev_rdma_t
DOCA_EXPERIMENTAL doca_error_t doca_rdma_connect(struct doca_rdma *rdma, const void *remote_rdma_conn_details, size_t remote_rdma_conn_details_size, struct doca_rdma_connection *rdma_connection)
Connect to remote doca_rdma peer. Can only be called when the ctx is in DOCA_CTX_STATE_STARTING state...
DOCA_EXPERIMENTAL doca_error_t doca_rdma_create(struct doca_dev *dev, struct doca_rdma **rdma)
Create a DOCA RDMA instance.
DOCA_EXPERIMENTAL doca_error_t doca_rdma_cap_task_send_is_supported(const struct doca_devinfo *devinfo)
DOCA_EXPERIMENTAL doca_error_t doca_sync_event_remote_net_create_from_export(struct doca_dev *dev, const uint8_t *data, size_t sz, struct doca_sync_event_remote_net **event)
Create a remote Sync Event handle from an export.
DOCA_EXPERIMENTAL doca_error_t doca_sync_event_remote_net_destroy(struct doca_sync_event_remote_net *event)
Destroy a Sync Event instance.
DOCA_EXPERIMENTAL doca_error_t doca_sync_event_start(struct doca_sync_event *event)
Start a Sync Event to be operate as stand-alone DOCA Core object only.
DOCA_EXPERIMENTAL doca_error_t doca_sync_event_get(struct doca_sync_event *event, uint64_t *value)
Get the value of a Sync Event synchronously.
DOCA_EXPERIMENTAL doca_error_t doca_sync_event_create(struct doca_sync_event **event)
Create a Sync Event handle.
DOCA_EXPERIMENTAL doca_error_t doca_sync_event_add_subscriber_location_dpa(struct doca_sync_event *event, struct doca_dpa *dpa)
Associate a DOCA DPA context as the Sync Event subscriber.
DOCA_EXPERIMENTAL doca_error_t doca_sync_event_remote_net_get_dpa_handle(struct doca_sync_event_remote_net *event, struct doca_dpa *dpa, doca_dpa_dev_sync_event_remote_net_t *dpa_remote_event)
Export remote Sync Event to be shared with the DPA.
DOCA_EXPERIMENTAL doca_error_t doca_sync_event_get_dpa_handle(struct doca_sync_event *event, struct doca_dpa *dpa, doca_dpa_dev_sync_event_t *dpa_dev_se_handle)
Export Sync Event to be shared with the DPA.
DOCA_EXPERIMENTAL doca_error_t doca_sync_event_add_publisher_location_remote_net(struct doca_sync_event *event)
Declare Sync Event publisher as a remote peer.
DOCA_EXPERIMENTAL doca_error_t doca_sync_event_add_subscriber_location_cpu(struct doca_sync_event *event, struct doca_dev *dev)
DOCA_EXPERIMENTAL doca_error_t doca_sync_event_destroy(struct doca_sync_event *event)
Destroy a Sync Event instance.
DOCA_EXPERIMENTAL doca_error_t doca_sync_event_add_publisher_location_dpa(struct doca_sync_event *event, struct doca_dpa *dpa)
Associate a DOCA DPA context as the Sync Event publisher.
DOCA_EXPERIMENTAL doca_error_t doca_sync_event_export_to_remote_net(struct doca_sync_event *event, const uint8_t **data, size_t *sz)
Export Sync Event to be shared with a remote peer.
uint64_t doca_dpa_dev_sync_event_remote_net_t
DOCA Sync Event remote DPA handle.
@ DOCA_ACCESS_FLAG_LOCAL_READ_WRITE
@ DOCA_ACCESS_FLAG_RDMA_READ
@ DOCA_ACCESS_FLAG_LOCAL_READ_ONLY
@ DOCA_ACCESS_FLAG_RDMA_ATOMIC
@ DOCA_ACCESS_FLAG_RDMA_WRITE
const struct ip_frag_config * cfg
__UINTPTR_TYPE__ uintptr_t
struct doca_dpa * pf_doca_dpa
doca_dpa_dev_t rdma_doca_dpa_handle
doca_dpa_dev_uintptr_t devptr_recvbufs_mmap_handles
doca_dpa_dev_uintptr_t devptr_kernel_events_handle
doca_dpa_dev_mmap_t sendbuf_dpa_mmap_handle
doca_dpa_dev_uintptr_t devptr_rp_remote_kernel_events
doca_dpa_dev_uintptr_t devptr_recvbufs
struct doca_sync_event * comp_event
doca_dpa_dev_uintptr_t devptr_rdmas
struct a2a_resources * resources