19 #ifndef __STARPU_DATA_INTERFACES_H__
20 #define __STARPU_DATA_INTERFACES_H__
24 #ifdef STARPU_USE_CUDA
26 # ifdef STARPU_DONT_INCLUDE_CUDA_HEADERS
27 typedef void *starpu_cudaStream_t;
29 # include <cuda_runtime.h>
30 typedef cudaStream_t starpu_cudaStream_t;
41 int (*
can_copy)(
void *src_interface,
unsigned src_node,
void *dst_interface,
unsigned dst_node,
unsigned handling_node);
43 int (*
ram_to_ram)(
void *src_interface,
unsigned src_node,
void *dst_interface,
unsigned dst_node);
44 int (*
ram_to_cuda)(
void *src_interface,
unsigned src_node,
void *dst_interface,
unsigned dst_node);
45 int (*
ram_to_opencl)(
void *src_interface,
unsigned src_node,
void *dst_interface,
unsigned dst_node);
47 int (*
cuda_to_ram)(
void *src_interface,
unsigned src_node,
void *dst_interface,
unsigned dst_node);
48 int (*
cuda_to_cuda)(
void *src_interface,
unsigned src_node,
void *dst_interface,
unsigned dst_node);
49 int (*
cuda_to_opencl)(
void *src_interface,
unsigned src_node,
void *dst_interface,
unsigned dst_node);
51 int (*
opencl_to_ram)(
void *src_interface,
unsigned src_node,
void *dst_interface,
unsigned dst_node);
52 int (*
opencl_to_cuda)(
void *src_interface,
unsigned src_node,
void *dst_interface,
unsigned dst_node);
53 int (*
opencl_to_opencl)(
void *src_interface,
unsigned src_node,
void *dst_interface,
unsigned dst_node);
55 #ifdef STARPU_USE_CUDA
56 int (*
ram_to_cuda_async)(
void *src_interface,
unsigned src_node,
void *dst_interface,
unsigned dst_node, starpu_cudaStream_t stream);
57 int (*
cuda_to_ram_async)(
void *src_interface,
unsigned src_node,
void *dst_interface,
unsigned dst_node, starpu_cudaStream_t stream);
58 int (*
cuda_to_cuda_async)(
void *src_interface,
unsigned src_node,
void *dst_interface,
unsigned dst_node, starpu_cudaStream_t stream);
65 #if defined(STARPU_USE_OPENCL) && !defined(__CUDACC__)
66 int (*
ram_to_opencl_async)(
void *src_interface,
unsigned src_node,
void *dst_interface,
unsigned dst_node, cl_event *event);
67 int (*
opencl_to_ram_async)(
void *src_interface,
unsigned src_node,
void *dst_interface,
unsigned dst_node, cl_event *event);
68 int (*
opencl_to_opencl_async)(
void *src_interface,
unsigned src_node,
void *dst_interface,
unsigned dst_node, cl_event *event);
71 int (*
any_to_any)(
void *src_interface,
unsigned src_node,
void *dst_interface,
unsigned dst_node,
void *async_data);
74 int starpu_interface_copy(uintptr_t src,
size_t src_offset,
unsigned src_node, uintptr_t dst,
size_t dst_offset,
unsigned dst_node,
size_t size,
void *async_data);
96 unsigned home_node,
void *data_interface);
103 int (*
compare)(
void *data_interface_a,
void *data_interface_b);
147 #define STARPU_MATRIX_GET_PTR(interface) (((struct starpu_matrix_interface *)(interface))->ptr)
148 #define STARPU_MATRIX_GET_DEV_HANDLE(interface) (((struct starpu_matrix_interface *)(interface))->dev_handle)
149 #define STARPU_MATRIX_GET_OFFSET(interface) (((struct starpu_matrix_interface *)(interface))->offset)
150 #define STARPU_MATRIX_GET_NX(interface) (((struct starpu_matrix_interface *)(interface))->nx)
151 #define STARPU_MATRIX_GET_NY(interface) (((struct starpu_matrix_interface *)(interface))->ny)
152 #define STARPU_MATRIX_GET_LD(interface) (((struct starpu_matrix_interface *)(interface))->ld)
153 #define STARPU_MATRIX_GET_ELEMSIZE(interface) (((struct starpu_matrix_interface *)(interface))->elemsize)
168 #define STARPU_COO_GET_COLUMNS(interface) \
169 (((struct starpu_coo_interface *)(interface))->columns)
170 #define STARPU_COO_GET_COLUMNS_DEV_HANDLE(interface) \
171 (((struct starpu_coo_interface *)(interface))->columns)
172 #define STARPU_COO_GET_ROWS(interface) \
173 (((struct starpu_coo_interface *)(interface))->rows)
174 #define STARPU_COO_GET_ROWS_DEV_HANDLE(interface) \
175 (((struct starpu_coo_interface *)(interface))->rows)
176 #define STARPU_COO_GET_VALUES(interface) \
177 (((struct starpu_coo_interface *)(interface))->values)
178 #define STARPU_COO_GET_VALUES_DEV_HANDLE(interface) \
179 (((struct starpu_coo_interface *)(interface))->values)
180 #define STARPU_COO_GET_OFFSET 0
181 #define STARPU_COO_GET_NX(interface) \
182 (((struct starpu_coo_interface *)(interface))->nx)
183 #define STARPU_COO_GET_NY(interface) \
184 (((struct starpu_coo_interface *)(interface))->ny)
185 #define STARPU_COO_GET_NVALUES(interface) \
186 (((struct starpu_coo_interface *)(interface))->n_values)
187 #define STARPU_COO_GET_ELEMSIZE(interface) \
188 (((struct starpu_coo_interface *)(interface))->elemsize)
214 #define STARPU_BLOCK_GET_PTR(interface) (((struct starpu_block_interface *)(interface))->ptr)
215 #define STARPU_BLOCK_GET_DEV_HANDLE(interface) (((struct starpu_block_interface *)(interface))->dev_handle)
216 #define STARPU_BLOCK_GET_OFFSET(interface) (((struct starpu_block_interface *)(interface))->offset)
217 #define STARPU_BLOCK_GET_NX(interface) (((struct starpu_block_interface *)(interface))->nx)
218 #define STARPU_BLOCK_GET_NY(interface) (((struct starpu_block_interface *)(interface))->ny)
219 #define STARPU_BLOCK_GET_NZ(interface) (((struct starpu_block_interface *)(interface))->nz)
220 #define STARPU_BLOCK_GET_LDY(interface) (((struct starpu_block_interface *)(interface))->ldy)
221 #define STARPU_BLOCK_GET_LDZ(interface) (((struct starpu_block_interface *)(interface))->ldz)
222 #define STARPU_BLOCK_GET_ELEMSIZE(interface) (((struct starpu_block_interface *)(interface))->elemsize)
239 #define STARPU_VECTOR_GET_PTR(interface) (((struct starpu_vector_interface *)(interface))->ptr)
240 #define STARPU_VECTOR_GET_DEV_HANDLE(interface) (((struct starpu_vector_interface *)(interface))->dev_handle)
241 #define STARPU_VECTOR_GET_OFFSET(interface) (((struct starpu_vector_interface *)(interface))->offset)
242 #define STARPU_VECTOR_GET_NX(interface) (((struct starpu_vector_interface *)(interface))->nx)
243 #define STARPU_VECTOR_GET_ELEMSIZE(interface) (((struct starpu_vector_interface *)(interface))->elemsize)
256 #define STARPU_VARIABLE_GET_PTR(interface) (((struct starpu_variable_interface *)(interface))->ptr)
257 #define STARPU_VARIABLE_GET_ELEMSIZE(interface) (((struct starpu_variable_interface *)(interface))->elemsize)
258 #define STARPU_VARIABLE_GET_DEV_HANDLE(interface) \
259 (((struct starpu_variable_interface *)(interface))->ptr)
260 #define STARPU_VARIABLE_GET_OFFSET 0
286 #define STARPU_CSR_GET_NNZ(interface) (((struct starpu_csr_interface *)(interface))->nnz)
287 #define STARPU_CSR_GET_NROW(interface) (((struct starpu_csr_interface *)(interface))->nrow)
288 #define STARPU_CSR_GET_NZVAL(interface) (((struct starpu_csr_interface *)(interface))->nzval)
289 #define STARPU_CSR_GET_NZVAL_DEV_HANDLE(interface) \
290 (((struct starpu_csr_interface *)(interface))->nnz)
291 #define STARPU_CSR_GET_COLIND(interface) (((struct starpu_csr_interface *)(interface))->colind)
292 #define STARPU_CSR_GET_COLIND_DEV_HANDLE(interface) \
293 (((struct starpu_csr_interface *)(interface))->colind)
294 #define STARPU_CSR_GET_ROWPTR(interface) (((struct starpu_csr_interface *)(interface))->rowptr)
295 #define STARPU_CSR_GET_ROWPTR_DEV_HANDLE(interface) \
296 (((struct starpu_csr_interface *)(interface))->rowptr)
297 #define STARPU_CSR_GET_OFFSET 0
298 #define STARPU_CSR_GET_FIRSTENTRY(interface) (((struct starpu_csr_interface *)(interface))->firstentry)
299 #define STARPU_CSR_GET_ELEMSIZE(interface) (((struct starpu_csr_interface *)(interface))->elemsize)
318 void starpu_bcsr_data_register(
starpu_data_handle_t *handle,
unsigned home_node, uint32_t nnz, uint32_t nrow, uintptr_t nzval, uint32_t *colind, uint32_t *rowptr, uint32_t firstentry, uint32_t r, uint32_t c,
size_t elemsize);
320 #define STARPU_BCSR_GET_NNZ(interface) (((struct starpu_bcsr_interface *)(interface))->nnz)
321 #define STARPU_BCSR_GET_NZVAL(interface) (((struct starpu_bcsr_interface *)(interface))->nzval)
322 #define STARPU_BCSR_GET_NZVAL_DEV_HANDLE(interface) \
323 (((struct starpu_bcsr_interface *)(interface))->nnz)
324 #define STARPU_BCSR_GET_COLIND(interface) (((struct starpu_bcsr_interface *)(interface))->colind)
325 #define STARPU_BCSR_GET_COLIND_DEV_HANDLE(interface) \
326 (((struct starpu_bcsr_interface *)(interface))->colind)
327 #define STARPU_BCSR_GET_ROWPTR(interface) (((struct starpu_bcsr_interface *)(interface))->rowptr)
328 #define STARPU_BCSR_GET_ROWPTR_DEV_HANDLE(interface) \
329 (((struct starpu_bcsr_interface *)(interface))->rowptr)
330 #define STARPU_BCSR_GET_OFFSET 0
363 #define STARPU_MULTIFORMAT_GET_CPU_PTR(interface) (((struct starpu_multiformat_interface *)(interface))->cpu_ptr)
364 #define STARPU_MULTIFORMAT_GET_CUDA_PTR(interface) (((struct starpu_multiformat_interface *)(interface))->cuda_ptr)
365 #define STARPU_MULTIFORMAT_GET_OPENCL_PTR(interface) (((struct starpu_multiformat_interface *)(interface))->opencl_ptr)
366 #define STARPU_MULTIFORMAT_GET_NX(interface) (((struct starpu_multiformat_interface *)(interface))->nx)