#ifndef UCT_CUDA_COPY_IFACE_H
#define UCT_CUDA_COPY_IFACE_H
#include <uct/base/uct_iface.h>
#include <uct/cuda/base/cuda_iface.h>
#include <ucs/memory/memory_type.h>
#include <pthread.h>
typedef uint64_t uct_cuda_copy_iface_addr_t;
typedef struct uct_cuda_copy_queue_desc {
cudaStream_t stream;
ucs_queue_head_t event_queue;
ucs_queue_elem_t queue;
} uct_cuda_copy_queue_desc_t;
typedef struct uct_cuda_copy_iface {
uct_base_iface_t super;
uct_cuda_copy_iface_addr_t id;
ucs_mpool_t cuda_event_desc;
ucs_queue_head_t active_queue;
cudaStream_t short_stream;
uct_cuda_copy_queue_desc_t queue_desc[UCS_MEMORY_TYPE_LAST][UCS_MEMORY_TYPE_LAST];
struct {
unsigned max_poll;
unsigned max_cuda_events;
double bandwidth;
} config;
struct {
void *event_arg;
uct_async_event_cb_t event_cb;
} async;
} uct_cuda_copy_iface_t;
typedef struct uct_cuda_copy_iface_config {
uct_iface_config_t super;
unsigned max_poll;
unsigned max_cuda_events;
double bandwidth;
} uct_cuda_copy_iface_config_t;
typedef struct uct_cuda_copy_event_desc {
cudaEvent_t event;
uct_completion_t *comp;
ucs_queue_elem_t queue;
} uct_cuda_copy_event_desc_t;
#endif