1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 #ifndef MCA_BTL_SMCUDA_SEND_FRAG_H
28 #define MCA_BTL_SMCUDA_SEND_FRAG_H
29
30 #include "opal_config.h"
31 #include "btl_smcuda.h"
32
33 #if OPAL_CUDA_SUPPORT
34 #include "opal/mca/common/cuda/common_cuda.h"
35 #endif
36
37 #define MCA_BTL_SMCUDA_FRAG_TYPE_MASK ((uintptr_t)0x3)
38 #define MCA_BTL_SMCUDA_FRAG_SEND ((uintptr_t)0x0)
39 #define MCA_BTL_SMCUDA_FRAG_ACK ((uintptr_t)0x1)
40 #define MCA_BTL_SMCUDA_FRAG_PUT ((uintptr_t)0x2)
41 #define MCA_BTL_SMCUDA_FRAG_GET ((uintptr_t)0x3)
42
43 #define MCA_BTL_SMCUDA_FRAG_STATUS_MASK ((uintptr_t)0x4)
44
45 struct mca_btl_smcuda_frag_t;
46
47 struct mca_btl_smcuda_hdr_t {
48 struct mca_btl_smcuda_frag_t *frag;
49 size_t len;
50 int my_smp_rank;
51 mca_btl_base_tag_t tag;
52 };
53 typedef struct mca_btl_smcuda_hdr_t mca_btl_smcuda_hdr_t;
54
55 #if OPAL_CUDA_SUPPORT
56 struct mca_btl_base_registration_handle_t {
57 mca_rcache_common_cuda_reg_data_t reg_data;
58 };
59 #endif
60
61 struct mca_btl_smcuda_segment_t {
62 mca_btl_base_segment_t base;
63 #if OPAL_CUDA_SUPPORT
64 uint8_t key[128];
65
66 opal_ptr_t memh_seg_addr;
67
68 uint32_t memh_seg_len;
69 #endif
70 };
71 typedef struct mca_btl_smcuda_segment_t mca_btl_smcuda_segment_t;
72
73
74
75
76 struct mca_btl_smcuda_frag_t {
77 mca_btl_base_descriptor_t base;
78 mca_btl_base_segment_t segment;
79 struct mca_btl_base_endpoint_t *endpoint;
80 #if OPAL_CUDA_SUPPORT
81 struct mca_rcache_base_registration_t *registration;
82 struct mca_btl_base_registration_handle_t *local_handle;
83 #endif
84 size_t size;
85
86 mca_btl_smcuda_hdr_t *hdr;
87 opal_free_list_t* my_list;
88 };
89 typedef struct mca_btl_smcuda_frag_t mca_btl_smcuda_frag_t;
90 typedef struct mca_btl_smcuda_frag_t mca_btl_smcuda_frag1_t;
91 typedef struct mca_btl_smcuda_frag_t mca_btl_smcuda_frag2_t;
92 typedef struct mca_btl_smcuda_frag_t mca_btl_smcuda_user_t;
93
94
95 OBJ_CLASS_DECLARATION(mca_btl_smcuda_frag_t);
96 OBJ_CLASS_DECLARATION(mca_btl_smcuda_frag1_t);
97 OBJ_CLASS_DECLARATION(mca_btl_smcuda_frag2_t);
98 OBJ_CLASS_DECLARATION(mca_btl_smcuda_user_t);
99
100 #define MCA_BTL_SMCUDA_FRAG_ALLOC_EAGER(frag) \
101 { \
102 frag = (mca_btl_smcuda_frag_t *) \
103 opal_free_list_get (&mca_btl_smcuda_component.sm_frags_eager); \
104 }
105
106 #define MCA_BTL_SMCUDA_FRAG_ALLOC_MAX(frag) \
107 { \
108 frag = (mca_btl_smcuda_frag_t *) \
109 opal_free_list_get (&mca_btl_smcuda_component.sm_frags_max); \
110 }
111
112 #define MCA_BTL_SMCUDA_FRAG_ALLOC_USER(frag) \
113 { \
114 frag = (mca_btl_smcuda_frag_t *) \
115 opal_free_list_get (&mca_btl_smcuda_component.sm_frags_user); \
116 }
117
118 #define MCA_BTL_SMCUDA_FRAG_RETURN(frag) \
119 { \
120 opal_free_list_return (frag->my_list, (opal_free_list_item_t*)(frag)); \
121 }
122 #endif