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)