20 #include <dpu_macro_utils.h> 22 #include <dpu_bank_interface_pmc.h> 146 #define DPU_CHECK(statement, on_error) \ 148 dpu_error_t __error = (statement); \ 149 if (__error != DPU_OK) { \ 150 char *__error_string = dpu_error_to_string(__error); \ 151 fprintf(stderr, "%s:%d(%s): DPU Error (%s)\n", __FILE__, __LINE__, __func__, __error_string); \ 152 free(__error_string); \ 162 #define DPU_ASSERT(statement) DPU_CHECK(statement, exit(EXIT_FAILURE)) 168 #define DPU_ALLOCATE_ALL (UINT_MAX) 234 #define DPU_RANK_FOREACH(set, ...) _CONCAT(_DPU_RANK_FOREACH_, _DPU_FOREACH_VARIANT(set, ##__VA_ARGS__))(set, ##__VA_ARGS__) 241 #define _DPU_RANK_FOREACH_X(set, rank) \ 242 for (struct dpu_set_rank_iterator_t __rank_it = dpu_set_rank_iterator_from(&set); rank = __rank_it.next, __rank_it.has_next; \ 243 dpu_set_rank_iterator_next(&__rank_it)) 250 #define _DPU_RANK_FOREACH_I(set, rank, i) \ 251 for (struct dpu_set_rank_iterator_t __rank_it = dpu_set_rank_iterator_from(&set); \ 252 i = __rank_it.count, rank = __rank_it.next, __rank_it.has_next; \ 253 dpu_set_rank_iterator_next(&__rank_it)) 262 #define DPU_FOREACH(set, ...) _CONCAT(_DPU_FOREACH_, _DPU_FOREACH_VARIANT(set, ##__VA_ARGS__))(set, ##__VA_ARGS__) 269 #define _DPU_FOREACH_X(set, dpu) \ 270 for (struct dpu_set_dpu_iterator_t __dpu_it = dpu_set_dpu_iterator_from(&set); dpu = __dpu_it.next, __dpu_it.has_next; \ 271 dpu_set_dpu_iterator_next(&__dpu_it)) 278 #define _DPU_FOREACH_I(set, dpu, i) \ 279 for (struct dpu_set_dpu_iterator_t __dpu_it = dpu_set_dpu_iterator_from(&set); \ 280 i = __dpu_it.count, dpu = __dpu_it.next, __dpu_it.has_next; \ 281 dpu_set_dpu_iterator_next(&__dpu_it)) 289 struct dpu_set_rank_iterator_t {
303 struct dpu_set_dpu_iterator_t {
304 struct dpu_set_rank_iterator_t rank_iterator;
320 struct dpu_set_rank_iterator_t
321 dpu_set_rank_iterator_from(struct dpu_set_t *
set);
332 dpu_set_rank_iterator_next(
struct dpu_set_rank_iterator_t *iterator);
343 struct dpu_set_dpu_iterator_t
344 dpu_set_dpu_iterator_from(struct dpu_set_t *
set);
355 dpu_set_dpu_iterator_next(
struct dpu_set_dpu_iterator_t *iterator);
367 dpu_load_from_memory(
struct dpu_set_t dpu_set, uint8_t *buffer,
size_t buffer_size,
struct dpu_program_t **program);
389 dpu_load(
struct dpu_set_t dpu_set,
const char *binary_path,
struct dpu_program_t **program);
418 dpu_status(
struct dpu_set_t dpu_set,
bool *done,
bool *fault);
438 dpu_copy_to(
struct dpu_set_t dpu_set,
const char *symbol_name, uint32_t symbol_offset,
const void *src,
size_t length);
450 dpu_copy_from(
struct dpu_set_t dpu_set,
const char *symbol_name, uint32_t symbol_offset,
void *dst,
size_t length);
543 const char *symbol_name,
544 uint32_t symbol_offset,
571 uint32_t symbol_offset,
594 const char *symbol_name,
595 uint32_t symbol_offset,
618 uint32_t symbol_offset,
635 const char *symbol_name,
636 uint32_t symbol_offset,
655 uint32_t symbol_offset,
700 dpu_error_t (*callback)(
struct dpu_set_t, uint32_t,
void *),
711 #define DPU_INCBIN(name, file) \ 712 __asm__(".pushsection .rodata.dpu_incbin\n" \ 713 ".global dpu_incbin_" _STR(name) "\n" \ 714 ".type dpu_incbin_" _STR(name) ", @object\n" \ 715 "dpu_incbin_" _STR(name) ":\n" \ 716 ".incbin \"" file "\"\n" \ 718 ".size dpu_incbin_" _STR(name) ", .-dpu_incbin_" _STR(name) "\n" \ 719 ".global dpu_incbin_" _STR(name) "_size\n" \ 720 "dpu_incbin_" _STR(name) "_size = . - dpu_incbin_" _STR(name) "\n" \ 723 extern const void *dpu_incbin_ ## name; \ 724 extern const void *dpu_incbin_ ## name ## _size; \ 725 struct dpu_incbin_t name = {.buffer = (uint8_t *)&dpu_incbin_ ## name , \ 726 .size = (size_t)&dpu_incbin_ ## name ## _size, \ dpu_error_t dpu_load_from_memory(struct dpu_set_t dpu_set, uint8_t *buffer, size_t buffer_size, struct dpu_program_t **program)
Load a program from the memory in all the DPUs of a DPU set.
dpu_error_t dpu_get_nr_ranks(struct dpu_set_t dpu_set, uint32_t *nr_ranks)
Fetch the number of DPU ranks in a given DPU set.
dpu_error_t dpu_callback(struct dpu_set_t dpu_set, dpu_error_t(*callback)(struct dpu_set_t, uint32_t, void *), void *args, dpu_callback_flags_t flags)
Execute a user-defined function with the given DPU set as argument.
dpu_error_t dpu_push_xfer(struct dpu_set_t dpu_set, dpu_xfer_t xfer, const char *symbol_name, uint32_t symbol_offset, size_t length, dpu_xfer_flags_t flags)
Execute the memory transfer on the DPU set.
dpu_error_t dpu_broadcast_to_symbol(struct dpu_set_t dpu_set, struct dpu_symbol_t symbol, uint32_t symbol_offset, const void *src, size_t length, dpu_xfer_flags_t flags)
Execute the broadcast memory transfer on the DPU set.
Base DPU types in the C API.
enum _dpu_xfer_t dpu_xfer_t
Direction for a DPU memory transfer.
_dpu_launch_policy_t
The different synchronization methods for launching DPUs. polling method to check whether the executi...
Definition: dpu.h:53
dpu_error_t dpu_launch(struct dpu_set_t dpu_set, dpu_launch_policy_t policy)
Request the boot of all the DPUs in a DPU set.
dpu_error_t dpu_broadcast_to(struct dpu_set_t dpu_set, const char *symbol_name, uint32_t symbol_offset, const void *src, size_t length, dpu_xfer_flags_t flags)
Execute the broadcast memory transfer on the DPU set.
dpu_error_t dpu_sync(struct dpu_set_t dpu_set)
Wait for the end of the execution on the DPU set.
dpu_error_t dpu_load_from_incbin(struct dpu_set_t dpu_set, struct dpu_incbin_t *incbin, struct dpu_program_t **program)
Load a program from a "struct dpu_incbin" in all the DPUs of a DPU set.
dpu_error_t dpu_alloc_ranks(uint32_t nr_ranks, const char *profile, struct dpu_set_t *dpu_set)
Allocate the specified number of DPU ranks.
Information on a binary embedded in the program with "DPU_INCBIN".
Definition: dpu_types.h:276
dpu_error_t dpu_fifo_push_xfer(struct dpu_set_t dpu_set, struct dpu_fifo_link_t *fifo_link, dpu_xfer_flags_t flags)
Execute the memory transfer on the DPU FIFOs.
dpu_error_t dpu_push_sg_xfer_symbol(struct dpu_set_t dpu_set, dpu_xfer_t xfer, struct dpu_symbol_t symbol, uint32_t symbol_offset, size_t length, get_block_t *get_block_info, dpu_sg_xfer_flags_t flags)
Execute the scatter/gather memory transfer on the DPU set.
dpu_error_t dpu_push_xfer_symbol(struct dpu_set_t dpu_set, dpu_xfer_t xfer, struct dpu_symbol_t symbol, uint32_t symbol_offset, size_t length, dpu_xfer_flags_t flags)
Execute the memory transfer on the DPU set.
dpu_error_t dpu_get_symbol(struct dpu_program_t *program, const char *symbol_name, struct dpu_symbol_t *symbol)
Get the requested symbol information.
Information for a symbol from a DPU program.
Definition: dpu_types.h:266
Structure that stores the information about each scatter transfer memory block.
Definition: dpu.h:492
_dpu_sg_xfer_flags_t
Options for a DPU scatter gather memory transfer.
Definition: dpu.h:98
struct get_block_t get_block_t
User API structure that stores the scatter transfer get_block function pointer and its arguments...
dpu_error_t dpu_log_read(struct dpu_set_t set, FILE *stream)
reads and displays the contents of the log of a DPU
void * args
Definition: dpu.h:517
enum _dpu_sg_xfer_flags_t dpu_sg_xfer_flags_t
Options for a DPU scatter gather memory transfer.
dpu_error_t dpu_fifo_prepare_xfer(struct dpu_set_t dpu_set, struct dpu_fifo_link_t *fifo_link, void *buffer)
Set the specified buffer to be transfered for the next DPU FIFO transfer.
dpu_error_t dpu_prepare_xfer(struct dpu_set_t dpu_set, void *buffer)
Set the Host buffer of all DPUs of the DPU set for the next memory transfer.
dpu_error_t dpu_load(struct dpu_set_t dpu_set, const char *binary_path, struct dpu_program_t **program)
Load a program in all the DPUs of a DPU set.
dpu_error_t dpu_copy_to_symbol(struct dpu_set_t dpu_set, struct dpu_symbol_t symbol, uint32_t symbol_offset, const void *src, size_t length)
Copy data from the Host memory buffer to one the DPU memories.
dpu_error_t dpu_push_sg_xfer(struct dpu_set_t dpu_set, dpu_xfer_t xfer, const char *symbol_name, uint32_t symbol_offset, size_t length, get_block_t *get_block_info, dpu_sg_xfer_flags_t flags)
Execute the scatter/gather memory transfer on the DPU set.
dpu_error_t dpu_alloc(uint32_t nr_dpus, const char *profile, struct dpu_set_t *dpu_set)
Allocate a number of ranks that will have the specified number of DPUs.
get_block_func_t f
Definition: dpu.h:515
A set of DPU devices.
Definition: dpu_types.h:241
dpu_error_t
Status returned by any API operation to specify the success or failure of the operation.
Definition: dpu_error.h:17
enum _dpu_xfer_flags_t dpu_xfer_flags_t
Options for a DPU memory transfer.
dpu_error_t dpu_copy_to(struct dpu_set_t dpu_set, const char *symbol_name, uint32_t symbol_offset, const void *src, size_t length)
Copy data from the Host memory buffer to one the DPU memories.
enum _dpu_callback_flags_t dpu_callback_flags_t
Options for a DPU callback.
bool(* get_block_func_t)(struct sg_block_info *out, uint32_t dpu_index, uint32_t block_index, void *args)
User API prototype of the get_block function for scatter transfers.
Definition: dpu.h:507
dpu_error_t dpu_copy_from(struct dpu_set_t dpu_set, const char *symbol_name, uint32_t symbol_offset, void *dst, size_t length)
Copy data from one of the DPU memories to the Host memory buffer.
Define the possible status returned by the API functions.
dpu_error_t dpu_status(struct dpu_set_t dpu_set, bool *done, bool *fault)
Fetch the current state of the DPU set.
enum _dpu_launch_policy_t dpu_launch_policy_t
The different synchronization methods for launching DPUs. polling method to check whether the executi...
dpu_error_t dpu_copy_from_symbol(struct dpu_set_t dpu_set, struct dpu_symbol_t symbol, uint32_t symbol_offset, void *dst, size_t length)
Copy data from one of the DPU memories to the Host memory buffer.
_dpu_xfer_t
Direction for a DPU memory transfer.
Definition: dpu.h:66
uint32_t length
Definition: dpu.h:496
_dpu_callback_flags_t
Options for a DPU callback.
Definition: dpu.h:118
User API structure that stores the scatter transfer get_block function pointer and its arguments...
Definition: dpu.h:513
C API to create and manage DPU checkpoints.
dpu_error_t dpu_free(struct dpu_set_t dpu_set)
Free all the DPUs of a DPU set.
size_t args_size
Definition: dpu.h:519
dpu_error_t dpu_get_nr_dpus(struct dpu_set_t dpu_set, uint32_t *nr_dpus)
Fetch the number of DPUs in a given DPU set.
uint8_t * addr
Definition: dpu.h:494
_dpu_xfer_flags_t
Options for a DPU memory transfer.
Definition: dpu.h:76