76 lines
2.9 KiB
C
76 lines
2.9 KiB
C
#ifndef HALIDE_HALIDERUNTIMECUDA_H
|
|
#define HALIDE_HALIDERUNTIMECUDA_H
|
|
|
|
// Don't include HalideRuntime.h if the contents of it were already pasted into a generated header above this one
|
|
#ifndef HALIDE_HALIDERUNTIME_H
|
|
|
|
#include "HalideRuntime.h"
|
|
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/** \file
|
|
* Routines specific to the Halide Cuda runtime.
|
|
*/
|
|
|
|
#define HALIDE_RUNTIME_CUDA
|
|
|
|
extern const struct halide_device_interface_t *halide_cuda_device_interface();
|
|
|
|
/** These are forward declared here to allow clients to override the
|
|
* Halide Cuda runtime. Do not call them. */
|
|
// @{
|
|
extern int halide_cuda_initialize_kernels(void *user_context, void **state_ptr,
|
|
const char *src, int size);
|
|
extern int halide_cuda_run(void *user_context,
|
|
void *state_ptr,
|
|
const char *entry_name,
|
|
int blocksX, int blocksY, int blocksZ,
|
|
int threadsX, int threadsY, int threadsZ,
|
|
int shared_mem_bytes,
|
|
size_t arg_sizes[],
|
|
void *args[],
|
|
int8_t arg_is_buffer[],
|
|
int num_attributes,
|
|
float *vertex_buffer,
|
|
int num_coords_dim0,
|
|
int num_coords_dim1);
|
|
// @}
|
|
|
|
/** Set the underlying cuda device poiner for a buffer. The device
|
|
* pointer should be allocated using cuMemAlloc or similar and must
|
|
* have an extent large enough to cover that specified by the
|
|
* halide_buffer_t extent fields. The dev field of the halide_buffer_t
|
|
* must be NULL when this routine is called. This call can fail due to
|
|
* being passed an invalid device pointer. The device and host dirty
|
|
* bits are left unmodified. */
|
|
extern int halide_cuda_wrap_device_ptr(void *user_context, struct halide_buffer_t *buf, uint64_t device_ptr);
|
|
|
|
/** Disconnect this halide_buffer_t from the device pointer it was
|
|
* previously wrapped around. Should only be called for a
|
|
* halide_buffer_t that halide_cuda_wrap_device_ptr was previously
|
|
* called on. The device field of the halide_buffer_t will be NULL on
|
|
* return.
|
|
*/
|
|
extern int halide_cuda_detach_device_ptr(void *user_context, struct halide_buffer_t *buf);
|
|
|
|
/** Return the underlying device pointer for a halide_buffer_t. This buffer
|
|
* must be valid on a Cuda device, or not have any associated device
|
|
* memory. If there is no device memory (dev field is NULL), this
|
|
* returns 0.
|
|
*/
|
|
extern uintptr_t halide_cuda_get_device_ptr(void *user_context, struct halide_buffer_t *buf);
|
|
|
|
/** Release any currently-unused device allocations back to the cuda
|
|
* driver. See halide_reuse_device_allocations. */
|
|
extern int halide_cuda_release_unused_device_allocations(void *user_context);
|
|
|
|
#ifdef __cplusplus
|
|
} // End extern "C"
|
|
#endif
|
|
|
|
#endif // HALIDE_HALIDERUNTIMECUDA_H
|