StarPU Handbook - StarPU Performances
starpu_data_interfaces.h
Go to the documentation of this file.
1/* StarPU --- Runtime system for heterogeneous multicore architectures.
2 *
3 * Copyright (C) 2009-2023 Université de Bordeaux, CNRS (LaBRI UMR 5800), Inria
4 *
5 * StarPU is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU Lesser General Public License as published by
7 * the Free Software Foundation; either version 2.1 of the License, or (at
8 * your option) any later version.
9 *
10 * StarPU is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13 *
14 * See the GNU Lesser General Public License in COPYING.LGPL for more details.
15 */
16
17#ifndef __STARPU_DATA_INTERFACES_H__
18#define __STARPU_DATA_INTERFACES_H__
19
20#include <starpu.h>
21
22#ifdef STARPU_USE_CUDA
23/* to use CUDA streams */
24#include <cuda_runtime.h>
25typedef cudaStream_t starpu_cudaStream_t;
26#endif
27
28#ifdef STARPU_USE_HIP
29/* to use HIP streams */
30#pragma GCC diagnostic push
31#pragma GCC diagnostic ignored "-Wundef"
32#pragma GCC diagnostic ignored "-Wunused-result"
33#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
34#ifndef __cplusplus
35#pragma GCC diagnostic ignored "-Wimplicit-int"
36#endif
37#pragma GCC diagnostic ignored "-Wreturn-type"
38#include <hip/hip_runtime.h>
39#pragma GCC diagnostic pop
40typedef hipStream_t starpu_hipStream_t;
41#endif
42
43#ifdef __cplusplus
44extern "C" {
45#endif
46
105{
113 int (*can_copy)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node, unsigned handling_node);
114
120 int (*ram_to_ram)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node);
121
127 int (*ram_to_cuda)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node);
128
134 int (*ram_to_hip)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node);
135
141 int (*ram_to_opencl)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node);
142
148 int (*ram_to_max_fpga)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node);
149
155 int (*cuda_to_ram)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node);
156
162 int (*cuda_to_cuda)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node);
163
169 int (*hip_to_ram)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node);
170
176 int (*hip_to_hip)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node);
177
183 int (*opencl_to_ram)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node);
184
190 int (*opencl_to_opencl)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node);
191
197 int (*max_fpga_to_ram)(void *src_interface, unsigned srd_node, void *dst_interface, unsigned dst_node);
198
199#ifdef STARPU_USE_CUDA
208 int (*ram_to_cuda_async)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node, starpu_cudaStream_t stream);
209
218 int (*cuda_to_ram_async)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node, starpu_cudaStream_t stream);
219
228 int (*cuda_to_cuda_async)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node, starpu_cudaStream_t stream);
229#else
230 int (*ram_to_cuda_async)(void);
231 int (*cuda_to_ram_async)(void);
232 int (*cuda_to_cuda_async)(void);
233#endif
234
235#ifdef STARPU_USE_HIP
244 int (*ram_to_hip_async)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node, starpu_hipStream_t stream);
245
254 int (*hip_to_ram_async)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node, starpu_hipStream_t stream);
255
264 int (*hip_to_hip_async)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node, starpu_hipStream_t stream);
265#else
266 int (*ram_to_hip_async)(void);
267 int (*hip_to_ram_async)(void);
268 int (*hip_to_hip_async)(void);
269#endif
270
271#if defined(STARPU_USE_OPENCL) && !defined(__CUDACC__)
281 int (*ram_to_opencl_async)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node, cl_event *event);
291 int (*opencl_to_ram_async)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node, cl_event *event);
301 int (*opencl_to_opencl_async)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node, cl_event *event);
302#else
303 int (*ram_to_opencl_async)(void);
304 int (*opencl_to_ram_async)(void);
305 int (*opencl_to_opencl_async)(void);
306#endif
307
316 int (*ram_to_max_fpga_async)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node);
317
326 int (*max_fpga_to_ram_async)(void *src_interface, unsigned srd_node, void *dst_interface, unsigned dst_node);
327
345 int (*any_to_any)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node, void *async_data);
346};
347
352{
367
372{
386 void (*register_data_handle)(starpu_data_handle_t handle, int home_node, void *data_interface);
387
400
416 starpu_ssize_t (*allocate_data_on_node)(void *data_interface, unsigned node);
417
425 void (*free_data_on_node)(void *data_interface, unsigned node);
426
455 void (*cache_data_on_node)(void *cached_interface, void *src_interface, unsigned node);
456
477 void (*reuse_data_on_node)(void *dst_data_interface, const void *cached_interface, unsigned node);
478
484 int (*map_data)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node);
485
491 int (*unmap_data)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node);
492
498 int (*update_map)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node);
499
505 void (*init)(void *data_interface);
506
516
525 void *(*handle_to_pointer)(starpu_data_handle_t handle, unsigned node);
526
533 void *(*to_pointer)(void *data_interface, unsigned node);
534
539
547
555
561 uint32_t (*footprint)(starpu_data_handle_t handle);
562
572
579 int (*compare)(void *data_interface_a, void *data_interface_b);
580
588 int (*alloc_compare)(void *data_interface_a, void *data_interface_b);
589
594 void (*display)(starpu_data_handle_t handle, FILE *f);
595
602 starpu_ssize_t (*describe)(void *data_interface, char *buf, size_t size);
603
608
613
616 char is_multiformat;
617
626
629 struct starpu_multiformat_data_interface_ops *(*get_mf_ops)(void *data_interface);
630
647 int (*pack_data)(starpu_data_handle_t handle, unsigned node, void **ptr, starpu_ssize_t *count);
648
653 int (*peek_data)(starpu_data_handle_t handle, unsigned node, void *ptr, size_t count);
654
660 int (*unpack_data)(starpu_data_handle_t handle, unsigned node, void *ptr, size_t count);
661
668 int (*pack_meta)(void *data_interface, void **ptr, starpu_ssize_t *count);
669
676 int (*unpack_meta)(void **data_interface, void *ptr, starpu_ssize_t *count);
677
681 int (*free_meta)(void *data_interface);
682
686 char *name;
687};
688
712void starpu_data_register(starpu_data_handle_t *handleptr, int home_node, void *data_interface, struct starpu_data_interface_ops *ops);
713
724
732
739
747
754
759void *starpu_data_get_interface_on_node(starpu_data_handle_t handle, unsigned memory_node);
760
767
779int starpu_data_pack_node(starpu_data_handle_t handle, unsigned node, void **ptr, starpu_ssize_t *count);
780
785int starpu_data_pack(starpu_data_handle_t handle, void **ptr, starpu_ssize_t *count);
786
794int starpu_data_peek_node(starpu_data_handle_t handle, unsigned node, void *ptr, size_t count);
795
803int starpu_data_peek(starpu_data_handle_t handle, void *ptr, size_t count);
804
812int starpu_data_unpack_node(starpu_data_handle_t handle, unsigned node, void *ptr, size_t count);
813
821int starpu_data_unpack(starpu_data_handle_t handle, void *ptr, size_t count);
822
828
834
840
845
850void starpu_data_print(starpu_data_handle_t handle, unsigned node, FILE *stream);
851
857
867int starpu_interface_copy(uintptr_t src, size_t src_offset, unsigned src_node,
868 uintptr_t dst, size_t dst_offset, unsigned dst_node,
869 size_t size, void *async_data);
870
889int starpu_interface_copy2d(uintptr_t src, size_t src_offset, unsigned src_node,
890 uintptr_t dst, size_t dst_offset, unsigned dst_node,
891 size_t blocksize,
892 size_t numblocks, size_t ld_src, size_t ld_dst,
893 void *async_data);
894
917int starpu_interface_copy3d(uintptr_t src, size_t src_offset, unsigned src_node,
918 uintptr_t dst, size_t dst_offset, unsigned dst_node,
919 size_t blocksize,
920 size_t numblocks1, size_t ld1_src, size_t ld1_dst,
921 size_t numblocks2, size_t ld2_src, size_t ld2_dst,
922 void *async_data);
923
950int starpu_interface_copy4d(uintptr_t src, size_t src_offset, unsigned src_node,
951 uintptr_t dst, size_t dst_offset, unsigned dst_node,
952 size_t blocksize,
953 size_t numblocks1, size_t ld1_src, size_t ld1_dst,
954 size_t numblocks2, size_t ld2_src, size_t ld2_dst,
955 size_t numblocks3, size_t ld3_src, size_t ld3_dst,
956 void *async_data);
957
976int starpu_interface_copynd(uintptr_t src, size_t src_offset, unsigned src_node,
977 uintptr_t dst, size_t dst_offset, unsigned dst_node,
978 size_t elemsize, size_t ndim,
979 uint32_t *nn, uint32_t *ldn_src, uint32_t *ldn_dst,
980 void *async_data);
981
993void starpu_interface_start_driver_copy_async(unsigned src_node, unsigned dst_node, double *start);
994
999void starpu_interface_end_driver_copy_async(unsigned src_node, unsigned dst_node, double start);
1000
1006void starpu_interface_data_copy(unsigned src_node, unsigned dst_node, size_t size);
1007
1015uintptr_t starpu_malloc_on_node_flags(unsigned dst_node, size_t size, int flags);
1016
1024uintptr_t starpu_malloc_on_node(unsigned dst_node, size_t size);
1025
1032void starpu_free_on_node_flags(unsigned dst_node, uintptr_t addr, size_t size, int flags);
1033
1040void starpu_free_on_node(unsigned dst_node, uintptr_t addr, size_t size);
1041
1047void starpu_malloc_on_node_set_default_flags(unsigned node, int flags);
1048
1060uintptr_t starpu_interface_map(uintptr_t src, size_t src_offset, unsigned src_node, unsigned dst_node, size_t size, int *ret);
1065int starpu_interface_unmap(uintptr_t src, size_t src_offset, unsigned src_node, uintptr_t dst, unsigned dst_node, size_t size);
1070int starpu_interface_update_map(uintptr_t src, size_t src_offset, unsigned src_node, uintptr_t dst, size_t dst_offset, unsigned dst_node, size_t size);
1071
1079extern struct starpu_data_interface_ops starpu_interface_matrix_ops;
1080
1085{
1087 uintptr_t ptr;
1088 uintptr_t dev_handle;
1089 size_t offset;
1090 uint32_t nx;
1091 uint32_t ny;
1092 uint32_t ld;
1096 size_t elemsize;
1097 size_t allocsize;
1098};
1099
1116void starpu_matrix_data_register(starpu_data_handle_t *handle, int home_node, uintptr_t ptr, uint32_t ld, uint32_t nx, uint32_t ny, size_t elemsize);
1117
1124void starpu_matrix_data_register_allocsize(starpu_data_handle_t *handle, int home_node, uintptr_t ptr, uint32_t ld, uint32_t nx, uint32_t ny, size_t elemsize, size_t allocsize);
1125
1131void starpu_matrix_ptr_register(starpu_data_handle_t handle, unsigned node, uintptr_t ptr, uintptr_t dev_handle, size_t offset, uint32_t ld);
1132
1138
1144
1150
1155
1161
1166
1167#if defined(STARPU_HAVE_STATEMENT_EXPRESSIONS) && defined(STARPU_DEBUG)
1168#define STARPU_MATRIX_CHECK(interface) STARPU_ASSERT_MSG((((struct starpu_matrix_interface *)(interface))->id) == STARPU_MATRIX_INTERFACE_ID, "Error. The given data is not a matrix.")
1169#define STARPU_MATRIX_GET_PTR(interface) ( \
1170 { \
1171 STARPU_MATRIX_CHECK(interface); \
1172 (((struct starpu_matrix_interface *)(interface))->ptr); \
1173 })
1174#define STARPU_MATRIX_GET_DEV_HANDLE(interface) ( \
1175 { \
1176 STARPU_MATRIX_CHECK(interface); \
1177 (((struct starpu_matrix_interface *)(interface))->dev_handle); \
1178 })
1179#define STARPU_MATRIX_GET_OFFSET(interface) ( \
1180 { \
1181 STARPU_MATRIX_CHECK(interface); \
1182 (((struct starpu_matrix_interface *)(interface))->offset); \
1183 })
1184#define STARPU_MATRIX_GET_NX(interface) ( \
1185 { \
1186 STARPU_MATRIX_CHECK(interface); \
1187 (((struct starpu_matrix_interface *)(interface))->nx); \
1188 })
1189#define STARPU_MATRIX_GET_NY(interface) ( \
1190 { \
1191 STARPU_MATRIX_CHECK(interface); \
1192 (((struct starpu_matrix_interface *)(interface))->ny); \
1193 })
1194#define STARPU_MATRIX_GET_LD(interface) ( \
1195 { \
1196 STARPU_MATRIX_CHECK(interface); \
1197 (((struct starpu_matrix_interface *)(interface))->ld); \
1198 })
1199#define STARPU_MATRIX_GET_ELEMSIZE(interface) ( \
1200 { \
1201 STARPU_MATRIX_CHECK(interface); \
1202 (((struct starpu_matrix_interface *)(interface))->elemsize); \
1203 })
1204#define STARPU_MATRIX_GET_ALLOCSIZE(interface) ( \
1205 { \
1206 STARPU_MATRIX_CHECK(interface); \
1207 (((struct starpu_matrix_interface *)(interface))->allocsize); \
1208 })
1209#else
1215#define STARPU_MATRIX_GET_PTR(interface) (((struct starpu_matrix_interface *)(interface))->ptr)
1222#define STARPU_MATRIX_GET_DEV_HANDLE(interface) (((struct starpu_matrix_interface *)(interface))->dev_handle)
1227#define STARPU_MATRIX_GET_OFFSET(interface) (((struct starpu_matrix_interface *)(interface))->offset)
1232#define STARPU_MATRIX_GET_NX(interface) (((struct starpu_matrix_interface *)(interface))->nx)
1237#define STARPU_MATRIX_GET_NY(interface) (((struct starpu_matrix_interface *)(interface))->ny)
1242#define STARPU_MATRIX_GET_LD(interface) (((struct starpu_matrix_interface *)(interface))->ld)
1247#define STARPU_MATRIX_GET_ELEMSIZE(interface) (((struct starpu_matrix_interface *)(interface))->elemsize)
1251#define STARPU_MATRIX_GET_ALLOCSIZE(interface) (((struct starpu_matrix_interface *)(interface))->allocsize)
1252#endif
1253
1258#define STARPU_MATRIX_SET_NX(interface, newnx) \
1259 do { \
1260 STARPU_MATRIX_CHECK(interface); \
1261 (((struct starpu_matrix_interface *)(interface))->nx) = (newnx); \
1262 } \
1263 while (0)
1268#define STARPU_MATRIX_SET_NY(interface, newny) \
1269 do { \
1270 STARPU_MATRIX_CHECK(interface); \
1271 (((struct starpu_matrix_interface *)(interface))->ny) = (newny); \
1272 } \
1273 while (0)
1279#define STARPU_MATRIX_SET_LD(interface, newld) \
1280 do { \
1281 STARPU_MATRIX_CHECK(interface); \
1282 (((struct starpu_matrix_interface *)(interface))->ld) = (newld); \
1283 } \
1284 while (0)
1285
1293extern struct starpu_data_interface_ops starpu_interface_coo_ops;
1294
1299{
1302 uint32_t *columns;
1303 uint32_t *rows;
1304 uintptr_t values;
1305 uint32_t nx;
1306 uint32_t ny;
1307 uint32_t n_values;
1308 size_t elemsize;
1309};
1310
1317void starpu_coo_data_register(starpu_data_handle_t *handleptr, int home_node, uint32_t nx, uint32_t ny, uint32_t n_values, uint32_t *columns, uint32_t *rows, uintptr_t values, size_t elemsize);
1318
1323#define STARPU_COO_GET_COLUMNS(interface) (((struct starpu_coo_interface *)(interface))->columns)
1330#define STARPU_COO_GET_COLUMNS_DEV_HANDLE(interface) (((struct starpu_coo_interface *)(interface))->columns)
1335#define STARPU_COO_GET_ROWS(interface) (((struct starpu_coo_interface *)(interface))->rows)
1341#define STARPU_COO_GET_ROWS_DEV_HANDLE(interface) (((struct starpu_coo_interface *)(interface))->rows)
1346#define STARPU_COO_GET_VALUES(interface) (((struct starpu_coo_interface *)(interface))->values)
1352#define STARPU_COO_GET_VALUES_DEV_HANDLE(interface) (((struct starpu_coo_interface *)(interface))->values)
1357#define STARPU_COO_GET_OFFSET 0
1362#define STARPU_COO_GET_NX(interface) (((struct starpu_coo_interface *)(interface))->nx)
1367#define STARPU_COO_GET_NY(interface) (((struct starpu_coo_interface *)(interface))->ny)
1372#define STARPU_COO_GET_NVALUES(interface) (((struct starpu_coo_interface *)(interface))->n_values)
1377#define STARPU_COO_GET_ELEMSIZE(interface) (((struct starpu_coo_interface *)(interface))->elemsize)
1378
1386extern struct starpu_data_interface_ops starpu_interface_block_ops;
1387
1388/* TODO: rename to 3dmatrix? */
1389/* TODO: add allocsize support */
1394{
1397 uintptr_t ptr;
1398 uintptr_t dev_handle;
1399 size_t offset;
1400 uint32_t nx;
1401 uint32_t ny;
1402 uint32_t nz;
1403 uint32_t ldy;
1404 uint32_t ldz;
1405 size_t elemsize;
1406};
1407
1423void starpu_block_data_register(starpu_data_handle_t *handle, int home_node, uintptr_t ptr, uint32_t ldy, uint32_t ldz, uint32_t nx, uint32_t ny, uint32_t nz, size_t elemsize);
1424
1431void starpu_block_ptr_register(starpu_data_handle_t handle, unsigned node, uintptr_t ptr, uintptr_t dev_handle, size_t offset, uint32_t ldy, uint32_t ldz);
1432
1438
1444
1450
1456
1462
1467
1473
1474#if defined(STARPU_HAVE_STATEMENT_EXPRESSIONS) && defined(STARPU_DEBUG)
1475#define STARPU_BLOCK_CHECK(interface) STARPU_ASSERT_MSG((((struct starpu_block_interface *)(interface))->id) == STARPU_BLOCK_INTERFACE_ID, "Error. The given data is not a block.")
1476#define STARPU_BLOCK_GET_PTR(interface) ( \
1477 { \
1478 STARPU_BLOCK_CHECK(interface); \
1479 (((struct starpu_block_interface *)(interface))->ptr); \
1480 })
1481#define STARPU_BLOCK_GET_DEV_HANDLE(interface) ( \
1482 { \
1483 STARPU_BLOCK_CHECK(interface); \
1484 (((struct starpu_block_interface *)(interface))->dev_handle); \
1485 })
1486#define STARPU_BLOCK_GET_OFFSET(interface) ( \
1487 { \
1488 STARPU_BLOCK_CHECK(interface); \
1489 (((struct starpu_block_interface *)(interface))->offset); \
1490 })
1491#define STARPU_BLOCK_GET_NX(interface) ( \
1492 { \
1493 STARPU_BLOCK_CHECK(interface); \
1494 (((struct starpu_block_interface *)(interface))->nx); \
1495 })
1496#define STARPU_BLOCK_GET_NY(interface) ( \
1497 { \
1498 STARPU_BLOCK_CHECK(interface); \
1499 (((struct starpu_block_interface *)(interface))->ny); \
1500 })
1501#define STARPU_BLOCK_GET_NZ(interface) ( \
1502 { \
1503 STARPU_BLOCK_CHECK(interface); \
1504 (((struct starpu_block_interface *)(interface))->nz); \
1505 })
1506#define STARPU_BLOCK_GET_LDY(interface) ( \
1507 { \
1508 STARPU_BLOCK_CHECK(interface); \
1509 (((struct starpu_block_interface *)(interface))->ldy); \
1510 })
1511#define STARPU_BLOCK_GET_LDZ(interface) ( \
1512 { \
1513 STARPU_BLOCK_CHECK(interface); \
1514 (((struct starpu_block_interface *)(interface))->ldz); \
1515 })
1516#define STARPU_BLOCK_GET_ELEMSIZE(interface) ( \
1517 { \
1518 STARPU_BLOCK_CHECK(interface); \
1519 (((struct starpu_block_interface *)(interface))->elemsize); \
1520 })
1521#else
1525#define STARPU_BLOCK_GET_PTR(interface) (((struct starpu_block_interface *)(interface))->ptr)
1532#define STARPU_BLOCK_GET_DEV_HANDLE(interface) (((struct starpu_block_interface *)(interface))->dev_handle)
1537#define STARPU_BLOCK_GET_OFFSET(interface) (((struct starpu_block_interface *)(interface))->offset)
1542#define STARPU_BLOCK_GET_NX(interface) (((struct starpu_block_interface *)(interface))->nx)
1547#define STARPU_BLOCK_GET_NY(interface) (((struct starpu_block_interface *)(interface))->ny)
1552#define STARPU_BLOCK_GET_NZ(interface) (((struct starpu_block_interface *)(interface))->nz)
1557#define STARPU_BLOCK_GET_LDY(interface) (((struct starpu_block_interface *)(interface))->ldy)
1563#define STARPU_BLOCK_GET_LDZ(interface) (((struct starpu_block_interface *)(interface))->ldz)
1568#define STARPU_BLOCK_GET_ELEMSIZE(interface) (((struct starpu_block_interface *)(interface))->elemsize)
1569#endif
1570
1578extern struct starpu_data_interface_ops starpu_interface_tensor_ops;
1579
1580/* TODO: rename to 4dtensor? */
1581/* TODO: add allocsize support */
1586{
1589 uintptr_t ptr;
1590 uintptr_t dev_handle;
1591 size_t offset;
1592 uint32_t nx;
1593 uint32_t ny;
1594 uint32_t nz;
1595 uint32_t nt;
1596 uint32_t ldy;
1597 uint32_t ldz;
1598 uint32_t ldt;
1599 size_t elemsize;
1600};
1601
1617void starpu_tensor_data_register(starpu_data_handle_t *handle, int home_node, uintptr_t ptr, uint32_t ldy, uint32_t ldz, uint32_t ldt, uint32_t nx, uint32_t ny, uint32_t nz, uint32_t nt, size_t elemsize);
1618
1625void starpu_tensor_ptr_register(starpu_data_handle_t handle, unsigned node, uintptr_t ptr, uintptr_t dev_handle, size_t offset, uint32_t ldy, uint32_t ldz, uint32_t ldt);
1626
1632
1638
1644
1650
1656
1662
1668
1673
1679
1680#if defined(STARPU_HAVE_STATEMENT_EXPRESSIONS) && defined(STARPU_DEBUG)
1681#define STARPU_TENSOR_CHECK(interface) STARPU_ASSERT_MSG((((struct starpu_tensor_interface *)(interface))->id) == STARPU_TENSOR_INTERFACE_ID, "Error. The given data is not a tensor.")
1682#define STARPU_TENSOR_GET_PTR(interface) ( \
1683 { \
1684 STARPU_TENSOR_CHECK(interface); \
1685 (((struct starpu_tensor_interface *)(interface))->ptr); \
1686 })
1687#define STARPU_TENSOR_GET_DEV_HANDLE(interface) ( \
1688 { \
1689 STARPU_TENSOR_CHECK(interface); \
1690 (((struct starpu_tensor_interface *)(interface))->dev_handle); \
1691 })
1692#define STARPU_TENSOR_GET_OFFSET(interface) ( \
1693 { \
1694 STARPU_TENSOR_CHECK(interface); \
1695 (((struct starpu_tensor_interface *)(interface))->offset); \
1696 })
1697#define STARPU_TENSOR_GET_NX(interface) ( \
1698 { \
1699 STARPU_TENSOR_CHECK(interface); \
1700 (((struct starpu_tensor_interface *)(interface))->nx); \
1701 })
1702#define STARPU_TENSOR_GET_NY(interface) ( \
1703 { \
1704 STARPU_TENSOR_CHECK(interface); \
1705 (((struct starpu_tensor_interface *)(interface))->ny); \
1706 })
1707#define STARPU_TENSOR_GET_NZ(interface) ( \
1708 { \
1709 STARPU_TENSOR_CHECK(interface); \
1710 (((struct starpu_tensor_interface *)(interface))->nz); \
1711 })
1712#define STARPU_TENSOR_GET_NT(interface) ( \
1713 { \
1714 STARPU_TENSOR_CHECK(interface); \
1715 (((struct starpu_tensor_interface *)(interface))->nt); \
1716 })
1717#define STARPU_TENSOR_GET_LDY(interface) ( \
1718 { \
1719 STARPU_TENSOR_CHECK(interface); \
1720 (((struct starpu_tensor_interface *)(interface))->ldy); \
1721 })
1722#define STARPU_TENSOR_GET_LDZ(interface) ( \
1723 { \
1724 STARPU_TENSOR_CHECK(interface); \
1725 (((struct starpu_tensor_interface *)(interface))->ldz); \
1726 })
1727#define STARPU_TENSOR_GET_LDT(interface) ( \
1728 { \
1729 STARPU_TENSOR_CHECK(interface); \
1730 (((struct starpu_tensor_interface *)(interface))->ldt); \
1731 })
1732#define STARPU_TENSOR_GET_ELEMSIZE(interface) ( \
1733 { \
1734 STARPU_TENSOR_CHECK(interface); \
1735 (((struct starpu_tensor_interface *)(interface))->elemsize); \
1736 })
1737#else
1741#define STARPU_TENSOR_GET_PTR(interface) (((struct starpu_tensor_interface *)(interface))->ptr)
1748#define STARPU_TENSOR_GET_DEV_HANDLE(interface) (((struct starpu_tensor_interface *)(interface))->dev_handle)
1753#define STARPU_TENSOR_GET_OFFSET(interface) (((struct starpu_tensor_interface *)(interface))->offset)
1758#define STARPU_TENSOR_GET_NX(interface) (((struct starpu_tensor_interface *)(interface))->nx)
1763#define STARPU_TENSOR_GET_NY(interface) (((struct starpu_tensor_interface *)(interface))->ny)
1768#define STARPU_TENSOR_GET_NZ(interface) (((struct starpu_tensor_interface *)(interface))->nz)
1773#define STARPU_TENSOR_GET_NT(interface) (((struct starpu_tensor_interface *)(interface))->nt)
1778#define STARPU_TENSOR_GET_LDY(interface) (((struct starpu_tensor_interface *)(interface))->ldy)
1784#define STARPU_TENSOR_GET_LDZ(interface) (((struct starpu_tensor_interface *)(interface))->ldz)
1790#define STARPU_TENSOR_GET_LDT(interface) (((struct starpu_tensor_interface *)(interface))->ldt)
1795#define STARPU_TENSOR_GET_ELEMSIZE(interface) (((struct starpu_tensor_interface *)(interface))->elemsize)
1796#endif
1797
1805extern struct starpu_data_interface_ops starpu_interface_ndim_ops;
1806
1811{
1814 uintptr_t ptr;
1815 uintptr_t dev_handle;
1816 size_t offset;
1817 size_t allocsize;
1818 uint32_t *nn;
1819 uint32_t *ldn;
1820 size_t ndim;
1821 size_t elemsize;
1822};
1823
1843void starpu_ndim_data_register(starpu_data_handle_t *handleptr, int home_node, uintptr_t ptr, uint32_t *ldn, uint32_t *nn, size_t ndim, size_t elemsize);
1849void starpu_ndim_ptr_register(starpu_data_handle_t handle, unsigned node, uintptr_t ptr, uintptr_t dev_handle, size_t offset, uint32_t *ldn);
1850
1856
1862uint32_t starpu_ndim_get_ni(starpu_data_handle_t handle, size_t i);
1863
1869
1875
1880
1885
1891
1892#if defined(STARPU_HAVE_STATEMENT_EXPRESSIONS) && defined(STARPU_DEBUG)
1893#define STARPU_NDIM_CHECK(interface) STARPU_ASSERT_MSG((((struct starpu_ndim_interface *)(interface))->id) == STARPU_NDIM_INTERFACE_ID, "Error. The given data is not a ndim.")
1894#define STARPU_NDIM_GET_PTR(interface) ( \
1895 { \
1896 STARPU_NDIM_CHECK(interface); \
1897 (((struct starpu_ndim_interface *)(interface))->ptr); \
1898 })
1899#define STARPU_NDIM_GET_DEV_HANDLE(interface) ( \
1900 { \
1901 STARPU_NDIM_CHECK(interface); \
1902 (((struct starpu_ndim_interface *)(interface))->dev_handle); \
1903 })
1904#define STARPU_NDIM_GET_OFFSET(interface) ( \
1905 { \
1906 STARPU_NDIM_CHECK(interface); \
1907 (((struct starpu_ndim_interface *)(interface))->offset); \
1908 })
1909#define STARPU_NDIM_GET_NN(interface) ( \
1910 { \
1911 STARPU_NDIM_CHECK(interface); \
1912 (((struct starpu_ndim_interface *)(interface))->nn); \
1913 })
1914#define STARPU_NDIM_GET_LDN(interface) ( \
1915 { \
1916 STARPU_NDIM_CHECK(interface); \
1917 (((struct starpu_ndim_interface *)(interface))->ldn); \
1918 })
1919#define STARPU_NDIM_GET_NDIM(interface) ( \
1920 { \
1921 STARPU_NDIM_CHECK(interface); \
1922 (((struct starpu_ndim_interface *)(interface))->ndim); \
1923 })
1924#define STARPU_NDIM_GET_ELEMSIZE(interface) ( \
1925 { \
1926 STARPU_NDIM_CHECK(interface); \
1927 (((struct starpu_ndim_interface *)(interface))->elemsize); \
1928 })
1929#else
1933#define STARPU_NDIM_GET_PTR(interface) (((struct starpu_ndim_interface *)(interface))->ptr)
1940#define STARPU_NDIM_GET_DEV_HANDLE(interface) (((struct starpu_ndim_interface *)(interface))->dev_handle)
1945#define STARPU_NDIM_GET_OFFSET(interface) (((struct starpu_ndim_interface *)(interface))->offset)
1950#define STARPU_NDIM_GET_NN(interface) (((struct starpu_ndim_interface *)(interface))->nn)
1955#define STARPU_NDIM_GET_LDN(interface) (((struct starpu_ndim_interface *)(interface))->ldn)
1960#define STARPU_NDIM_GET_NDIM(interface) (((struct starpu_ndim_interface *)(interface))->ndim)
1965#define STARPU_NDIM_GET_ELEMSIZE(interface) (((struct starpu_ndim_interface *)(interface))->elemsize)
1966#endif
1967
1975extern struct starpu_data_interface_ops starpu_interface_vector_ops;
1976
1980{
1983 uintptr_t ptr;
1984 uintptr_t dev_handle;
1985 size_t offset;
1986 uint32_t nx;
1987 size_t elemsize;
1988 uint32_t slice_base;
1989 size_t allocsize;
1990};
1991
2004void starpu_vector_data_register(starpu_data_handle_t *handle, int home_node, uintptr_t ptr, uint32_t nx, size_t elemsize);
2005
2011void starpu_vector_data_register_allocsize(starpu_data_handle_t *handle, int home_node, uintptr_t ptr, uint32_t nx, size_t elemsize, size_t allocsize);
2012
2018void starpu_vector_ptr_register(starpu_data_handle_t handle, unsigned node, uintptr_t ptr, uintptr_t dev_handle, size_t offset);
2019
2024
2029
2034
2039
2040#if defined(STARPU_HAVE_STATEMENT_EXPRESSIONS) && defined(STARPU_DEBUG)
2041#define STARPU_VECTOR_CHECK(interface) STARPU_ASSERT_MSG((((struct starpu_vector_interface *)(interface))->id) == STARPU_VECTOR_INTERFACE_ID, "Error. The given data is not a vector.")
2042#define STARPU_VECTOR_GET_PTR(interface) ( \
2043 { \
2044 STARPU_VECTOR_CHECK(interface); \
2045 (((struct starpu_vector_interface *)(interface))->ptr); \
2046 })
2047#define STARPU_VECTOR_GET_DEV_HANDLE(interface) ( \
2048 { \
2049 STARPU_VECTOR_CHECK(interface); \
2050 (((struct starpu_vector_interface *)(interface))->dev_handle); \
2051 })
2052#define STARPU_VECTOR_GET_OFFSET(interface) ( \
2053 { \
2054 STARPU_VECTOR_CHECK(interface); \
2055 (((struct starpu_vector_interface *)(interface))->offset); \
2056 })
2057#define STARPU_VECTOR_GET_NX(interface) ( \
2058 { \
2059 STARPU_VECTOR_CHECK(interface); \
2060 (((struct starpu_vector_interface *)(interface))->nx); \
2061 })
2062#define STARPU_VECTOR_GET_ELEMSIZE(interface) ( \
2063 { \
2064 STARPU_VECTOR_CHECK(interface); \
2065 (((struct starpu_vector_interface *)(interface))->elemsize); \
2066 })
2067#define STARPU_VECTOR_GET_ALLOCSIZE(interface) ( \
2068 { \
2069 STARPU_VECTOR_CHECK(interface); \
2070 (((struct starpu_vector_interface *)(interface))->allocsize); \
2071 })
2072#define STARPU_VECTOR_GET_SLICE_BASE(interface) ( \
2073 { \
2074 STARPU_VECTOR_CHECK(interface); \
2075 (((struct starpu_vector_interface *)(interface))->slice_base); \
2076 })
2077#else
2083#define STARPU_VECTOR_GET_PTR(interface) (((struct starpu_vector_interface *)(interface))->ptr)
2089#define STARPU_VECTOR_GET_DEV_HANDLE(interface) (((struct starpu_vector_interface *)(interface))->dev_handle)
2094#define STARPU_VECTOR_GET_OFFSET(interface) (((struct starpu_vector_interface *)(interface))->offset)
2099#define STARPU_VECTOR_GET_NX(interface) (((struct starpu_vector_interface *)(interface))->nx)
2104#define STARPU_VECTOR_GET_ELEMSIZE(interface) (((struct starpu_vector_interface *)(interface))->elemsize)
2109#define STARPU_VECTOR_GET_ALLOCSIZE(interface) (((struct starpu_vector_interface *)(interface))->allocsize)
2114#define STARPU_VECTOR_GET_SLICE_BASE(interface) (((struct starpu_vector_interface *)(interface))->slice_base)
2115#endif
2116
2121#define STARPU_VECTOR_SET_NX(interface, newnx) \
2122 do { \
2123 STARPU_VECTOR_CHECK(interface); \
2124 (((struct starpu_vector_interface *)(interface))->nx) = (newnx); \
2125 } \
2126 while (0)
2127
2135extern struct starpu_data_interface_ops starpu_interface_variable_ops;
2136
2142{
2145 uintptr_t ptr;
2146 uintptr_t dev_handle;
2147 size_t offset;
2148 size_t elemsize;
2149};
2150
2164void starpu_variable_data_register(starpu_data_handle_t *handle, int home_node, uintptr_t ptr, size_t size);
2165
2171void starpu_variable_ptr_register(starpu_data_handle_t handle, unsigned node, uintptr_t ptr, uintptr_t dev_handle, size_t offset);
2172
2177
2182
2183#if defined(STARPU_HAVE_STATEMENT_EXPRESSIONS) && defined(STARPU_DEBUG)
2184#define STARPU_VARIABLE_CHECK(interface) STARPU_ASSERT_MSG((((struct starpu_variable_interface *)(interface))->id) == STARPU_VARIABLE_INTERFACE_ID, "Error. The given data is not a variable.")
2185#define STARPU_VARIABLE_GET_PTR(interface) ( \
2186 { \
2187 STARPU_VARIABLE_CHECK(interface); \
2188 (((struct starpu_variable_interface *)(interface))->ptr); \
2189 })
2190#define STARPU_VARIABLE_GET_OFFSET(interface) ( \
2191 { \
2192 STARPU_VARIABLE_CHECK(interface); \
2193 (((struct starpu_variable_interface *)(interface))->offset); \
2194 })
2195#define STARPU_VARIABLE_GET_ELEMSIZE(interface) ( \
2196 { \
2197 STARPU_VARIABLE_CHECK(interface); \
2198 (((struct starpu_variable_interface *)(interface))->elemsize); \
2199 })
2200#define STARPU_VARIABLE_GET_DEV_HANDLE(interface) ( \
2201 { \
2202 STARPU_VARIABLE_CHECK(interface); \
2203 (((struct starpu_variable_interface *)(interface))->ptr); \
2204 })
2205#else
2209#define STARPU_VARIABLE_GET_PTR(interface) (((struct starpu_variable_interface *)(interface))->ptr)
2214#define STARPU_VARIABLE_GET_OFFSET(interface) (((struct starpu_variable_interface *)(interface))->offset)
2218#define STARPU_VARIABLE_GET_ELEMSIZE(interface) (((struct starpu_variable_interface *)(interface))->elemsize)
2225#define STARPU_VARIABLE_GET_DEV_HANDLE(interface) (((struct starpu_variable_interface *)(interface))->ptr)
2226#endif
2227
2235extern struct starpu_data_interface_ops starpu_interface_void_ops;
2236
2247
2255extern struct starpu_data_interface_ops starpu_interface_csr_ops;
2256
2262{
2265 uint32_t nnz;
2266 uint32_t nrow;
2267 uintptr_t nzval;
2268 uint32_t *colind;
2269 uint32_t *rowptr;
2270 uint32_t *ram_colind;
2271 uint32_t *ram_rowptr;
2273 uint32_t firstentry;
2275 size_t elemsize;
2276};
2277
2282void starpu_csr_data_register(starpu_data_handle_t *handle, int home_node, uint32_t nnz, uint32_t nrow, uintptr_t nzval, uint32_t *colind, uint32_t *rowptr, uint32_t firstentry, size_t elemsize);
2283
2289
2295
2301
2307
2313
2319
2325
2330#define STARPU_CSR_GET_NNZ(interface) (((struct starpu_csr_interface *)(interface))->nnz)
2335#define STARPU_CSR_GET_NROW(interface) (((struct starpu_csr_interface *)(interface))->nrow)
2340#define STARPU_CSR_GET_NZVAL(interface) (((struct starpu_csr_interface *)(interface))->nzval)
2346#define STARPU_CSR_GET_NZVAL_DEV_HANDLE(interface) (((struct starpu_csr_interface *)(interface))->nnz)
2351#define STARPU_CSR_GET_COLIND(interface) (((struct starpu_csr_interface *)(interface))->colind)
2356#define STARPU_CSR_GET_RAM_COLIND(interface) (((struct starpu_csr_interface *)(interface))->ram_colind)
2362#define STARPU_CSR_GET_COLIND_DEV_HANDLE(interface) (((struct starpu_csr_interface *)(interface))->colind)
2367#define STARPU_CSR_GET_ROWPTR(interface) (((struct starpu_csr_interface *)(interface))->rowptr)
2372#define STARPU_CSR_GET_RAM_ROWPTR(interface) (((struct starpu_csr_interface *)(interface))->ram_rowptr)
2378#define STARPU_CSR_GET_ROWPTR_DEV_HANDLE(interface) (((struct starpu_csr_interface *)(interface))->rowptr)
2383#define STARPU_CSR_GET_OFFSET 0
2388#define STARPU_CSR_GET_FIRSTENTRY(interface) (((struct starpu_csr_interface *)(interface))->firstentry)
2393#define STARPU_CSR_GET_ELEMSIZE(interface) (((struct starpu_csr_interface *)(interface))->elemsize)
2394
2402extern struct starpu_data_interface_ops starpu_interface_bcsr_ops;
2403
2414{
2417 uint32_t nnz;
2418 uint32_t nrow;
2420 uintptr_t nzval;
2421 uint32_t *colind;
2422 uint32_t *rowptr;
2432 uint32_t *ram_colind;
2433 uint32_t *ram_rowptr;
2435 uint32_t firstentry;
2437 uint32_t r;
2438 uint32_t c;
2440 size_t elemsize;
2441};
2442
2511void starpu_bcsr_data_register(starpu_data_handle_t *handle, int 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);
2512
2518
2524
2530
2536
2542
2548
2553
2558
2564
2569#define STARPU_BCSR_GET_NNZ(interface) (((struct starpu_bcsr_interface *)(interface))->nnz)
2574#define STARPU_BCSR_GET_NROW(interface) (((struct starpu_bcsr_interface *)(interface))->nrow)
2579#define STARPU_BCSR_GET_NZVAL(interface) (((struct starpu_bcsr_interface *)(interface))->nzval)
2585#define STARPU_BCSR_GET_NZVAL_DEV_HANDLE(interface) (((struct starpu_bcsr_interface *)(interface))->nnz)
2590#define STARPU_BCSR_GET_COLIND(interface) (((struct starpu_bcsr_interface *)(interface))->colind)
2595#define STARPU_BCSR_GET_RAM_COLIND(interface) (((struct starpu_bcsr_interface *)(interface))->ram_colind)
2601#define STARPU_BCSR_GET_COLIND_DEV_HANDLE(interface) (((struct starpu_bcsr_interface *)(interface))->colind)
2606#define STARPU_BCSR_GET_ROWPTR(interface) (((struct starpu_bcsr_interface *)(interface))->rowptr)
2611#define STARPU_BCSR_GET_RAM_ROWPTR(interface) (((struct starpu_bcsr_interface *)(interface))->ram_rowptr)
2617#define STARPU_BCSR_GET_ROWPTR_DEV_HANDLE(interface) (((struct starpu_bcsr_interface *)(interface))->rowptr)
2622#define STARPU_BCSR_GET_FIRSTENTRY(interface) (((struct starpu_bcsr_interface *)(interface))->firstentry)
2627#define STARPU_BCSR_GET_R(interface) (((struct starpu_bcsr_interface *)(interface))->r)
2632#define STARPU_BCSR_GET_C(interface) (((struct starpu_bcsr_interface *)(interface))->c)
2636#define STARPU_BCSR_GET_ELEMSIZE(interface) (((struct starpu_bcsr_interface *)(interface))->elemsize)
2641#define STARPU_BCSR_GET_OFFSET 0
2642
2654{
2662};
2663
2665{
2667
2668 void *cpu_ptr;
2669 void *cuda_ptr;
2670 void *hip_ptr;
2671 void *opencl_ptr;
2672 uint32_t nx;
2674};
2675
2685void starpu_multiformat_data_register(starpu_data_handle_t *handle, int home_node, void *ptr, uint32_t nobjects, struct starpu_multiformat_data_interface_ops *format_ops);
2686
2690#define STARPU_MULTIFORMAT_GET_CPU_PTR(interface) (((struct starpu_multiformat_interface *)(interface))->cpu_ptr)
2694#define STARPU_MULTIFORMAT_GET_CUDA_PTR(interface) (((struct starpu_multiformat_interface *)(interface))->cuda_ptr)
2698#define STARPU_MULTIFORMAT_GET_HIP_PTR(interface) (((struct starpu_multiformat_interface *)(interface))->hip_ptr)
2699
2703#define STARPU_MULTIFORMAT_GET_OPENCL_PTR(interface) (((struct starpu_multiformat_interface *)(interface))->opencl_ptr)
2707#define STARPU_MULTIFORMAT_GET_NX(interface) (((struct starpu_multiformat_interface *)(interface))->nx)
2708
2713#ifdef __cplusplus
2714}
2715#endif
2716
2717#endif /* __STARPU_DATA_INTERFACES_H__ */
Definition: starpu_task.h:334
int(* peek_data)(starpu_data_handle_t handle, unsigned node, void *ptr, size_t count)
Definition: starpu_data_interfaces.h:653
size_t cuda_elemsize
Definition: starpu_data_interfaces.h:2659
uintptr_t dev_handle
Definition: starpu_data_interfaces.h:2146
uint32_t(* footprint)(starpu_data_handle_t handle)
Definition: starpu_data_interfaces.h:561
size_t offset
Definition: starpu_data_interfaces.h:1399
enum starpu_data_interface_id id
Definition: starpu_data_interfaces.h:2143
void(* unregister_data_handle)(starpu_data_handle_t handle)
Definition: starpu_data_interfaces.h:399
enum starpu_data_interface_id id
Definition: starpu_data_interfaces.h:1587
size_t(* get_size)(starpu_data_handle_t handle)
Definition: starpu_data_interfaces.h:538
int(* can_copy)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node, unsigned handling_node)
Definition: starpu_data_interfaces.h:113
uint32_t nrow
Definition: starpu_data_interfaces.h:2418
int(* ram_to_max_fpga)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node)
Definition: starpu_data_interfaces.h:148
size_t elemsize
Definition: starpu_data_interfaces.h:2440
size_t ndim
Definition: starpu_data_interfaces.h:1820
int(* update_map)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node)
Definition: starpu_data_interfaces.h:498
uint32_t nnz
Definition: starpu_data_interfaces.h:2417
int(* cuda_to_ram)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node)
Definition: starpu_data_interfaces.h:155
int(* alloc_compare)(void *data_interface_a, void *data_interface_b)
Definition: starpu_data_interfaces.h:588
uintptr_t ptr
Definition: starpu_data_interfaces.h:2145
uintptr_t ptr
Definition: starpu_data_interfaces.h:1814
uint32_t * nn
Definition: starpu_data_interfaces.h:1818
char dontcache
Definition: starpu_data_interfaces.h:625
int(* map_data)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node)
Definition: starpu_data_interfaces.h:484
uint32_t nz
Definition: starpu_data_interfaces.h:1594
size_t allocsize
Definition: starpu_data_interfaces.h:1097
uintptr_t values
Definition: starpu_data_interfaces.h:1304
int(* ram_to_ram)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node)
Definition: starpu_data_interfaces.h:120
uint32_t * colind
Definition: starpu_data_interfaces.h:2268
size_t elemsize
Definition: starpu_data_interfaces.h:1599
size_t elemsize
Definition: starpu_data_interfaces.h:2275
size_t elemsize
Definition: starpu_data_interfaces.h:1096
uint32_t firstentry
Definition: starpu_data_interfaces.h:2273
uintptr_t ptr
Definition: starpu_data_interfaces.h:1087
size_t offset
Definition: starpu_data_interfaces.h:1816
uintptr_t dev_handle
Definition: starpu_data_interfaces.h:1984
uint32_t ldy
Definition: starpu_data_interfaces.h:1403
uint32_t * ram_rowptr
Definition: starpu_data_interfaces.h:2433
uint32_t nz
Definition: starpu_data_interfaces.h:1402
int(* ram_to_cuda_async)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node, starpu_cudaStream_t stream)
Definition: starpu_data_interfaces.h:208
uint32_t * colind
Definition: starpu_data_interfaces.h:2421
int(* free_meta)(void *data_interface)
Definition: starpu_data_interfaces.h:681
size_t elemsize
Definition: starpu_data_interfaces.h:2148
uint32_t ld
Definition: starpu_data_interfaces.h:1092
enum starpu_data_interface_id id
Definition: starpu_data_interfaces.h:1300
uint32_t * rows
Definition: starpu_data_interfaces.h:1303
int(* pack_data)(starpu_data_handle_t handle, unsigned node, void **ptr, starpu_ssize_t *count)
Definition: starpu_data_interfaces.h:647
int(* hip_to_ram)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node)
Definition: starpu_data_interfaces.h:169
uintptr_t dev_handle
Definition: starpu_data_interfaces.h:1815
int(* ram_to_cuda)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node)
Definition: starpu_data_interfaces.h:127
size_t cpu_elemsize
Definition: starpu_data_interfaces.h:2655
int(* pack_meta)(void *data_interface, void **ptr, starpu_ssize_t *count)
Definition: starpu_data_interfaces.h:668
uint32_t ldz
Definition: starpu_data_interfaces.h:1597
uintptr_t nzval
Definition: starpu_data_interfaces.h:2267
int(* hip_to_hip_async)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node, starpu_hipStream_t stream)
Definition: starpu_data_interfaces.h:264
enum starpu_data_interface_id interfaceid
Definition: starpu_data_interfaces.h:607
uintptr_t ptr
Definition: starpu_data_interfaces.h:1983
int(* compare)(void *data_interface_a, void *data_interface_b)
Definition: starpu_data_interfaces.h:579
size_t offset
Definition: starpu_data_interfaces.h:1591
size_t opencl_elemsize
Definition: starpu_data_interfaces.h:2656
size_t elemsize
Definition: starpu_data_interfaces.h:1821
uint32_t * ldn
Definition: starpu_data_interfaces.h:1819
uintptr_t ptr
Definition: starpu_data_interfaces.h:1397
uint32_t n_values
Definition: starpu_data_interfaces.h:1307
uintptr_t dev_handle
Definition: starpu_data_interfaces.h:1398
uint32_t * rowptr
Definition: starpu_data_interfaces.h:2422
size_t interface_size
Definition: starpu_data_interfaces.h:612
uint32_t * ram_rowptr
Definition: starpu_data_interfaces.h:2271
uintptr_t dev_handle
Definition: starpu_data_interfaces.h:1590
enum starpu_data_interface_id id
Definition: starpu_data_interfaces.h:2263
uint32_t slice_base
Definition: starpu_data_interfaces.h:1988
uint32_t nrow
Definition: starpu_data_interfaces.h:2266
int(* opencl_to_ram)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node)
Definition: starpu_data_interfaces.h:183
uint32_t ny
Definition: starpu_data_interfaces.h:1401
int(* opencl_to_opencl)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node)
Definition: starpu_data_interfaces.h:190
size_t(* get_max_size)(starpu_data_handle_t handle)
Definition: starpu_data_interfaces.h:554
uint32_t nt
Definition: starpu_data_interfaces.h:1595
size_t elemsize
Definition: starpu_data_interfaces.h:1987
uintptr_t ptr
Definition: starpu_data_interfaces.h:1589
int(* hip_to_hip)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node)
Definition: starpu_data_interfaces.h:176
char * name
Definition: starpu_data_interfaces.h:686
size_t(* get_alloc_size)(starpu_data_handle_t handle)
Definition: starpu_data_interfaces.h:546
int(* hip_to_ram_async)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node, starpu_hipStream_t stream)
Definition: starpu_data_interfaces.h:254
uint32_t firstentry
Definition: starpu_data_interfaces.h:2435
int(* cuda_to_cuda)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node)
Definition: starpu_data_interfaces.h:162
uint32_t ldz
Definition: starpu_data_interfaces.h:1404
uint32_t r
Definition: starpu_data_interfaces.h:2437
struct starpu_codelet * cpu_to_cuda_cl
Definition: starpu_data_interfaces.h:2660
int(* cuda_to_cuda_async)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node, starpu_cudaStream_t stream)
Definition: starpu_data_interfaces.h:228
uint32_t nnz
Definition: starpu_data_interfaces.h:2265
size_t offset
Definition: starpu_data_interfaces.h:1089
enum starpu_data_interface_id id
Definition: starpu_data_interfaces.h:1086
size_t offset
Definition: starpu_data_interfaces.h:1985
int(* ram_to_hip)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node)
Definition: starpu_data_interfaces.h:134
void(* display)(starpu_data_handle_t handle, FILE *f)
Definition: starpu_data_interfaces.h:594
int(* max_fpga_to_ram_async)(void *src_interface, unsigned srd_node, void *dst_interface, unsigned dst_node)
Definition: starpu_data_interfaces.h:326
int(* unpack_data)(starpu_data_handle_t handle, unsigned node, void *ptr, size_t count)
Definition: starpu_data_interfaces.h:660
uint32_t ny
Definition: starpu_data_interfaces.h:1593
uint32_t(* alloc_footprint)(starpu_data_handle_t handle)
Definition: starpu_data_interfaces.h:571
size_t allocsize
Definition: starpu_data_interfaces.h:1989
enum starpu_data_interface_id id
Definition: starpu_data_interfaces.h:1981
uint32_t * columns
Definition: starpu_data_interfaces.h:1302
int(* ram_to_max_fpga_async)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node)
Definition: starpu_data_interfaces.h:316
struct starpu_codelet * cpu_to_opencl_cl
Definition: starpu_data_interfaces.h:2657
uintptr_t dev_handle
Definition: starpu_data_interfaces.h:1088
void(* register_data_handle)(starpu_data_handle_t handle, int home_node, void *data_interface)
Definition: starpu_data_interfaces.h:386
int(* cuda_to_ram_async)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node, starpu_cudaStream_t stream)
Definition: starpu_data_interfaces.h:218
void(* init)(void *data_interface)
Definition: starpu_data_interfaces.h:505
void(* free_data_on_node)(void *data_interface, unsigned node)
Definition: starpu_data_interfaces.h:425
void(* reuse_data_on_node)(void *dst_data_interface, const void *cached_interface, unsigned node)
Definition: starpu_data_interfaces.h:477
size_t elemsize
Definition: starpu_data_interfaces.h:1308
int(* opencl_to_opencl_async)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node, cl_event *event)
Definition: starpu_data_interfaces.h:301
uint32_t c
Definition: starpu_data_interfaces.h:2438
starpu_ssize_t(* describe)(void *data_interface, char *buf, size_t size)
Definition: starpu_data_interfaces.h:602
struct starpu_codelet * cuda_to_cpu_cl
Definition: starpu_data_interfaces.h:2661
int(* unpack_meta)(void **data_interface, void *ptr, starpu_ssize_t *count)
Definition: starpu_data_interfaces.h:676
struct starpu_codelet * opencl_to_cpu_cl
Definition: starpu_data_interfaces.h:2658
uint32_t ny
Definition: starpu_data_interfaces.h:1091
uint32_t nx
Definition: starpu_data_interfaces.h:1986
int(* any_to_any)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node, void *async_data)
Definition: starpu_data_interfaces.h:345
size_t allocsize
Definition: starpu_data_interfaces.h:1817
int(* opencl_to_ram_async)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node, cl_event *event)
Definition: starpu_data_interfaces.h:291
int(* unmap_data)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node)
Definition: starpu_data_interfaces.h:491
uint32_t * ram_colind
Definition: starpu_data_interfaces.h:2432
int(* ram_to_hip_async)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node, starpu_hipStream_t stream)
Definition: starpu_data_interfaces.h:244
int(* max_fpga_to_ram)(void *src_interface, unsigned srd_node, void *dst_interface, unsigned dst_node)
Definition: starpu_data_interfaces.h:197
enum starpu_data_interface_id id
Definition: starpu_data_interfaces.h:1395
size_t elemsize
Definition: starpu_data_interfaces.h:1405
uint32_t ny
Definition: starpu_data_interfaces.h:1306
enum starpu_data_interface_id id
Definition: starpu_data_interfaces.h:2415
uint32_t * rowptr
Definition: starpu_data_interfaces.h:2269
size_t offset
Definition: starpu_data_interfaces.h:2147
uint32_t * ram_colind
Definition: starpu_data_interfaces.h:2270
uint32_t ldy
Definition: starpu_data_interfaces.h:1596
int(* ram_to_opencl)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node)
Definition: starpu_data_interfaces.h:141
uint32_t nx
Definition: starpu_data_interfaces.h:1090
uintptr_t nzval
Definition: starpu_data_interfaces.h:2420
enum starpu_data_interface_id id
Definition: starpu_data_interfaces.h:1812
void(* cache_data_on_node)(void *cached_interface, void *src_interface, unsigned node)
Definition: starpu_data_interfaces.h:455
uint32_t nx
Definition: starpu_data_interfaces.h:1400
uint32_t ldt
Definition: starpu_data_interfaces.h:1598
uint32_t nx
Definition: starpu_data_interfaces.h:1305
uint32_t nx
Definition: starpu_data_interfaces.h:1592
starpu_ssize_t(* allocate_data_on_node)(void *data_interface, unsigned node)
Definition: starpu_data_interfaces.h:416
int(* ram_to_opencl_async)(void *src_interface, unsigned src_node, void *dst_interface, unsigned dst_node, cl_event *event)
Definition: starpu_data_interfaces.h:281
const struct starpu_data_copy_methods * copy_methods
Definition: starpu_data_interfaces.h:515
void * starpu_data_handle_to_pointer(starpu_data_handle_t handle, unsigned node)
uint32_t starpu_tensor_get_local_ldt(starpu_data_handle_t handle)
void starpu_free_on_node_flags(unsigned dst_node, uintptr_t addr, size_t size, int flags)
uint32_t starpu_tensor_get_local_ldy(starpu_data_handle_t handle)
void starpu_vector_data_register_allocsize(starpu_data_handle_t *handle, int home_node, uintptr_t ptr, uint32_t nx, size_t elemsize, size_t allocsize)
uint32_t starpu_vector_get_nx(starpu_data_handle_t handle)
void starpu_ndim_ptr_register(starpu_data_handle_t handle, unsigned node, uintptr_t ptr, uintptr_t dev_handle, size_t offset, uint32_t *ldn)
void starpu_tensor_ptr_register(starpu_data_handle_t handle, unsigned node, uintptr_t ptr, uintptr_t dev_handle, size_t offset, uint32_t ldy, uint32_t ldz, uint32_t ldt)
void starpu_data_register_same(starpu_data_handle_t *handledst, starpu_data_handle_t handlesrc)
void starpu_data_ptr_register(starpu_data_handle_t handle, unsigned node)
uintptr_t starpu_ndim_get_local_ptr(starpu_data_handle_t handle)
void starpu_matrix_ptr_register(starpu_data_handle_t handle, unsigned node, uintptr_t ptr, uintptr_t dev_handle, size_t offset, uint32_t ld)
int starpu_interface_copynd(uintptr_t src, size_t src_offset, unsigned src_node, uintptr_t dst, size_t dst_offset, unsigned dst_node, size_t elemsize, size_t ndim, uint32_t *nn, uint32_t *ldn_src, uint32_t *ldn_dst, void *async_data)
void starpu_malloc_on_node_set_default_flags(unsigned node, int flags)
starpu_ssize_t starpu_data_get_max_size(starpu_data_handle_t handle)
int starpu_data_pack_node(starpu_data_handle_t handle, unsigned node, void **ptr, starpu_ssize_t *count)
int starpu_data_get_home_node(starpu_data_handle_t handle)
void starpu_bcsr_data_register(starpu_data_handle_t *handle, int 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)
void starpu_matrix_data_register_allocsize(starpu_data_handle_t *handle, int home_node, uintptr_t ptr, uint32_t ld, uint32_t nx, uint32_t ny, size_t elemsize, size_t allocsize)
void starpu_multiformat_data_register(starpu_data_handle_t *handle, int home_node, void *ptr, uint32_t nobjects, struct starpu_multiformat_data_interface_ops *format_ops)
void starpu_ndim_data_register(starpu_data_handle_t *handleptr, int home_node, uintptr_t ptr, uint32_t *ldn, uint32_t *nn, size_t ndim, size_t elemsize)
size_t starpu_vector_get_allocsize(starpu_data_handle_t handle)
uint32_t starpu_tensor_get_local_ldz(starpu_data_handle_t handle)
uint32_t starpu_csr_get_firstentry(starpu_data_handle_t handle)
size_t starpu_bcsr_get_elemsize(starpu_data_handle_t handle)
void starpu_vector_data_register(starpu_data_handle_t *handle, int home_node, uintptr_t ptr, uint32_t nx, size_t elemsize)
uint32_t starpu_matrix_get_nx(starpu_data_handle_t handle)
size_t starpu_block_get_elemsize(starpu_data_handle_t handle)
int starpu_interface_copy3d(uintptr_t src, size_t src_offset, unsigned src_node, uintptr_t dst, size_t dst_offset, unsigned dst_node, size_t blocksize, size_t numblocks1, size_t ld1_src, size_t ld1_dst, size_t numblocks2, size_t ld2_src, size_t ld2_dst, void *async_data)
int starpu_data_unpack_node(starpu_data_handle_t handle, unsigned node, void *ptr, size_t count)
uintptr_t starpu_csr_get_local_nzval(starpu_data_handle_t handle)
void starpu_interface_start_driver_copy_async(unsigned src_node, unsigned dst_node, double *start)
uintptr_t starpu_variable_get_local_ptr(starpu_data_handle_t handle)
uint32_t * starpu_bcsr_get_local_colind(starpu_data_handle_t handle)
void starpu_data_print(starpu_data_handle_t handle, unsigned node, FILE *stream)
uint32_t starpu_matrix_get_local_ld(starpu_data_handle_t handle)
void starpu_interface_end_driver_copy_async(unsigned src_node, unsigned dst_node, double start)
uint32_t starpu_tensor_get_nx(starpu_data_handle_t handle)
uint32_t starpu_csr_get_nnz(starpu_data_handle_t handle)
uint32_t starpu_block_get_local_ldz(starpu_data_handle_t handle)
uintptr_t starpu_block_get_local_ptr(starpu_data_handle_t handle)
uint32_t * starpu_ndim_get_nn(starpu_data_handle_t handle)
uint32_t starpu_bcsr_get_c(starpu_data_handle_t handle)
int starpu_interface_copy4d(uintptr_t src, size_t src_offset, unsigned src_node, uintptr_t dst, size_t dst_offset, unsigned dst_node, size_t blocksize, size_t numblocks1, size_t ld1_src, size_t ld1_dst, size_t numblocks2, size_t ld2_src, size_t ld2_dst, size_t numblocks3, size_t ld3_src, size_t ld3_dst, void *async_data)
uint32_t starpu_matrix_get_ny(starpu_data_handle_t handle)
uint32_t starpu_csr_get_nrow(starpu_data_handle_t handle)
uint32_t starpu_tensor_get_nz(starpu_data_handle_t handle)
uint32_t * starpu_csr_get_local_rowptr(starpu_data_handle_t handle)
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)
void starpu_free_on_node(unsigned dst_node, uintptr_t addr, size_t size)
void starpu_data_register(starpu_data_handle_t *handleptr, int home_node, void *data_interface, struct starpu_data_interface_ops *ops)
uint32_t starpu_tensor_get_ny(starpu_data_handle_t handle)
uint32_t starpu_block_get_ny(starpu_data_handle_t handle)
void starpu_matrix_data_register(starpu_data_handle_t *handle, int home_node, uintptr_t ptr, uint32_t ld, uint32_t nx, uint32_t ny, size_t elemsize)
void starpu_data_register_ops(struct starpu_data_interface_ops *ops)
uint32_t starpu_block_get_nx(starpu_data_handle_t handle)
uint32_t starpu_tensor_get_nt(starpu_data_handle_t handle)
uint32_t starpu_bcsr_get_nnz(starpu_data_handle_t handle)
void starpu_block_ptr_register(starpu_data_handle_t handle, unsigned node, uintptr_t ptr, uintptr_t dev_handle, size_t offset, uint32_t ldy, uint32_t ldz)
uint32_t starpu_bcsr_get_firstentry(starpu_data_handle_t handle)
void starpu_coo_data_register(starpu_data_handle_t *handleptr, int home_node, uint32_t nx, uint32_t ny, uint32_t n_values, uint32_t *columns, uint32_t *rows, uintptr_t values, size_t elemsize)
uint32_t * starpu_bcsr_get_local_rowptr(starpu_data_handle_t handle)
int starpu_data_unpack(starpu_data_handle_t handle, void *ptr, size_t count)
size_t starpu_variable_get_elemsize(starpu_data_handle_t handle)
size_t starpu_matrix_get_allocsize(starpu_data_handle_t handle)
uintptr_t starpu_matrix_get_local_ptr(starpu_data_handle_t handle)
void starpu_block_data_register(starpu_data_handle_t *handle, int home_node, uintptr_t ptr, uint32_t ldy, uint32_t ldz, uint32_t nx, uint32_t ny, uint32_t nz, size_t elemsize)
void starpu_tensor_data_register(starpu_data_handle_t *handle, int home_node, uintptr_t ptr, uint32_t ldy, uint32_t ldz, uint32_t ldt, uint32_t nx, uint32_t ny, uint32_t nz, uint32_t nt, size_t elemsize)
starpu_data_interface_id
Definition: starpu_data_interfaces.h:352
void starpu_interface_data_copy(unsigned src_node, unsigned dst_node, size_t size)
uintptr_t starpu_malloc_on_node_flags(unsigned dst_node, size_t size, int flags)
size_t starpu_csr_get_elemsize(starpu_data_handle_t handle)
uint32_t starpu_ndim_get_ni(starpu_data_handle_t handle, size_t i)
uint32_t starpu_bcsr_get_nrow(starpu_data_handle_t handle)
void * starpu_data_get_interface_on_node(starpu_data_handle_t handle, unsigned memory_node)
uint32_t * starpu_ndim_get_local_ldn(starpu_data_handle_t handle)
void starpu_void_data_register(starpu_data_handle_t *handle)
uintptr_t starpu_malloc_on_node(unsigned dst_node, size_t size)
void starpu_csr_data_register(starpu_data_handle_t *handle, int home_node, uint32_t nnz, uint32_t nrow, uintptr_t nzval, uint32_t *colind, uint32_t *rowptr, uint32_t firstentry, size_t elemsize)
void * starpu_data_get_local_ptr(starpu_data_handle_t handle)
int starpu_interface_unmap(uintptr_t src, size_t src_offset, unsigned src_node, uintptr_t dst, unsigned dst_node, size_t size)
size_t starpu_data_get_size(starpu_data_handle_t handle)
size_t starpu_data_get_alloc_size(starpu_data_handle_t handle)
int starpu_interface_update_map(uintptr_t src, size_t src_offset, unsigned src_node, uintptr_t dst, size_t dst_offset, unsigned dst_node, size_t size)
uint32_t starpu_block_get_nz(starpu_data_handle_t handle)
void starpu_vector_ptr_register(starpu_data_handle_t handle, unsigned node, uintptr_t ptr, uintptr_t dev_handle, size_t offset)
int starpu_data_peek(starpu_data_handle_t handle, void *ptr, size_t count)
uint32_t starpu_ndim_get_local_ldi(starpu_data_handle_t handle, size_t i)
size_t starpu_ndim_get_elemsize(starpu_data_handle_t handle)
size_t starpu_vector_get_elemsize(starpu_data_handle_t handle)
uintptr_t starpu_vector_get_local_ptr(starpu_data_handle_t handle)
int starpu_interface_copy2d(uintptr_t src, size_t src_offset, unsigned src_node, uintptr_t dst, size_t dst_offset, unsigned dst_node, size_t blocksize, size_t numblocks, size_t ld_src, size_t ld_dst, void *async_data)
uint32_t * starpu_csr_get_local_colind(starpu_data_handle_t handle)
enum starpu_data_interface_id starpu_data_get_interface_id(starpu_data_handle_t handle)
int starpu_data_pack(starpu_data_handle_t handle, void **ptr, starpu_ssize_t *count)
uintptr_t starpu_tensor_get_local_ptr(starpu_data_handle_t handle)
uint32_t starpu_bcsr_get_r(starpu_data_handle_t handle)
size_t starpu_tensor_get_elemsize(starpu_data_handle_t handle)
uintptr_t starpu_interface_map(uintptr_t src, size_t src_offset, unsigned src_node, unsigned dst_node, size_t size, int *ret)
uintptr_t starpu_bcsr_get_local_nzval(starpu_data_handle_t handle)
int starpu_data_peek_node(starpu_data_handle_t handle, unsigned node, void *ptr, size_t count)
size_t starpu_matrix_get_elemsize(starpu_data_handle_t handle)
uint32_t starpu_block_get_local_ldy(starpu_data_handle_t handle)
size_t starpu_ndim_get_ndim(starpu_data_handle_t handle)
int starpu_data_interface_get_next_id(void)
void starpu_variable_ptr_register(starpu_data_handle_t handle, unsigned node, uintptr_t ptr, uintptr_t dev_handle, size_t offset)
void starpu_variable_data_register(starpu_data_handle_t *handle, int home_node, uintptr_t ptr, size_t size)
@ STARPU_BCSR_INTERFACE_ID
Definition: starpu_data_interfaces.h:358
@ STARPU_MATRIX_INTERFACE_ID
Definition: starpu_data_interfaces.h:354
@ STARPU_VARIABLE_INTERFACE_ID
Definition: starpu_data_interfaces.h:359
@ STARPU_VECTOR_INTERFACE_ID
Definition: starpu_data_interfaces.h:356
@ STARPU_CSR_INTERFACE_ID
Definition: starpu_data_interfaces.h:357
@ STARPU_UNKNOWN_INTERFACE_ID
Definition: starpu_data_interfaces.h:353
@ STARPU_TENSOR_INTERFACE_ID
Definition: starpu_data_interfaces.h:363
@ STARPU_COO_INTERFACE_ID
Definition: starpu_data_interfaces.h:362
@ STARPU_MAX_INTERFACE_ID
Definition: starpu_data_interfaces.h:365
@ STARPU_MULTIFORMAT_INTERFACE_ID
Definition: starpu_data_interfaces.h:361
@ STARPU_VOID_INTERFACE_ID
Definition: starpu_data_interfaces.h:360
@ STARPU_NDIM_INTERFACE_ID
Definition: starpu_data_interfaces.h:364
@ STARPU_BLOCK_INTERFACE_ID
Definition: starpu_data_interfaces.h:355
Definition: starpu_data_interfaces.h:2414
Definition: starpu_data_interfaces.h:1394
Definition: starpu_data_interfaces.h:1299
Definition: starpu_data_interfaces.h:2262
Definition: starpu_data_interfaces.h:105
Definition: starpu_data_interfaces.h:372
Definition: starpu_data_interfaces.h:1085
Definition: starpu_data_interfaces.h:2654
Definition: starpu_data_interfaces.h:2665
Definition: starpu_data_interfaces.h:1811
Definition: starpu_data_interfaces.h:1586
Definition: starpu_data_interfaces.h:2142
Definition: starpu_data_interfaces.h:1980
struct _starpu_data_state * starpu_data_handle_t
Definition: starpu_data.h:44