Halide 14.0.0
Halide compiler and libraries
device_interface.h
Go to the documentation of this file.
1#ifndef HALIDE_RUNTIME_DEVICE_INTERFACE_H
2#define HALIDE_RUNTIME_DEVICE_INTERFACE_H
3
4#ifndef WEAK
5#include "runtime_internal.h"
6#endif
7
8extern "C" {
9
11 // These next two methods are used to reference count the runtime code
12 // these function pointers point to. They should always be initialized
13 // to halide_use_jit_module and halide_release_jit_module and Halide's JIT
14 // arranges for this to reference count the container for the code. In AOT
15 // compilation, these are empty functions which do nothing.
16 void (*use_module)();
17 void (*release_module)();
18 int (*device_malloc)(void *user_context, struct halide_buffer_t *buf);
19 int (*device_free)(void *user_context, struct halide_buffer_t *buf);
20 int (*device_sync)(void *user_context, struct halide_buffer_t *buf);
21 int (*device_release)(void *user_context);
22 int (*copy_to_host)(void *user_context, struct halide_buffer_t *buf);
23 int (*copy_to_device)(void *user_context, struct halide_buffer_t *buf);
24 int (*device_and_host_malloc)(void *user_context, struct halide_buffer_t *buf);
25 int (*device_and_host_free)(void *user_context, struct halide_buffer_t *buf);
26 int (*buffer_copy)(void *user_context, struct halide_buffer_t *src,
27 const struct halide_device_interface_t *dst_device_interface, struct halide_buffer_t *dst);
28 int (*device_crop)(void *user_context,
29 const struct halide_buffer_t *src,
30 struct halide_buffer_t *dst);
31 int (*device_slice)(void *user_context,
32 const struct halide_buffer_t *src,
33 int slice_dim, int slice_pos,
34 struct halide_buffer_t *dst);
35 int (*device_release_crop)(void *user_context,
36 struct halide_buffer_t *buf);
37 int (*wrap_native)(void *user_context, struct halide_buffer_t *buf, uint64_t handle);
38 int (*detach_native)(void *user_context, struct halide_buffer_t *buf);
39};
40
41extern WEAK int halide_default_device_and_host_malloc(void *user_context, struct halide_buffer_t *buf,
43extern WEAK int halide_default_device_and_host_free(void *user_context, struct halide_buffer_t *buf,
45extern WEAK int halide_default_buffer_copy(void *user_context, struct halide_buffer_t *src,
46 const struct halide_device_interface_t *dst_device_interface,
47 struct halide_buffer_t *dst);
48extern WEAK int halide_default_device_crop(void *user_context, const struct halide_buffer_t *src,
49 struct halide_buffer_t *dst);
50extern WEAK int halide_default_device_slice(void *user_context, const struct halide_buffer_t *src,
51 int slice_dim, int slice_pos, struct halide_buffer_t *dst);
52extern WEAK int halide_default_device_release_crop(void *user_context, struct halide_buffer_t *buf);
53extern WEAK int halide_default_device_wrap_native(void *user_context, struct halide_buffer_t *buf, uint64_t handle);
54extern WEAK int halide_default_device_detach_native(void *user_context, struct halide_buffer_t *buf);
55}
56
57#endif // HALIDE_RUNTIME_DEVICE_INTERFACE_H
WEAK int halide_default_device_and_host_malloc(void *user_context, struct halide_buffer_t *buf, const struct halide_device_interface_t *device_interface)
WEAK int halide_default_device_and_host_free(void *user_context, struct halide_buffer_t *buf, const struct halide_device_interface_t *device_interface)
WEAK int halide_default_device_wrap_native(void *user_context, struct halide_buffer_t *buf, uint64_t handle)
WEAK int halide_default_device_detach_native(void *user_context, struct halide_buffer_t *buf)
WEAK int halide_default_device_crop(void *user_context, const struct halide_buffer_t *src, struct halide_buffer_t *dst)
WEAK int halide_default_buffer_copy(void *user_context, struct halide_buffer_t *src, const struct halide_device_interface_t *dst_device_interface, struct halide_buffer_t *dst)
WEAK int halide_default_device_release_crop(void *user_context, struct halide_buffer_t *buf)
WEAK int halide_default_device_slice(void *user_context, const struct halide_buffer_t *src, int slice_dim, int slice_pos, struct halide_buffer_t *dst)
unsigned __INT64_TYPE__ uint64_t
#define WEAK
The raw representation of an image passed around by generated Halide code.
const struct halide_device_interface_t * device_interface
The interface used to interpret the above handle.
int(* wrap_native)(void *user_context, struct halide_buffer_t *buf, uint64_t handle)
int(* device_slice)(void *user_context, const struct halide_buffer_t *src, int slice_dim, int slice_pos, struct halide_buffer_t *dst)
int(* device_free)(void *user_context, struct halide_buffer_t *buf)
int(* device_release_crop)(void *user_context, struct halide_buffer_t *buf)
int(* device_crop)(void *user_context, const struct halide_buffer_t *src, struct halide_buffer_t *dst)
int(* detach_native)(void *user_context, struct halide_buffer_t *buf)
int(* device_and_host_malloc)(void *user_context, struct halide_buffer_t *buf)
int(* buffer_copy)(void *user_context, struct halide_buffer_t *src, const struct halide_device_interface_t *dst_device_interface, struct halide_buffer_t *dst)
int(* copy_to_host)(void *user_context, struct halide_buffer_t *buf)
int(* device_sync)(void *user_context, struct halide_buffer_t *buf)
int(* copy_to_device)(void *user_context, struct halide_buffer_t *buf)
int(* device_release)(void *user_context)
int(* device_malloc)(void *user_context, struct halide_buffer_t *buf)
int(* device_and_host_free)(void *user_context, struct halide_buffer_t *buf)
Each GPU API provides a halide_device_interface_t struct pointing to the code that manages device all...