DPDK
23.03.0
|
#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>
#include <rte_mbuf.h>
#include <rte_bitops.h>
#include <rte_compat.h>
Go to the source code of this file.
Data Structures | |
struct | rte_gpu_info |
struct | rte_gpu_comm_flag |
struct | rte_gpu_comm_pkt |
struct | rte_gpu_comm_list |
Macros | |
#define | RTE_GPU_DEFAULT_MAX 32 |
#define | RTE_GPU_ID_NONE -1 |
#define | RTE_GPU_ID_ANY INT16_MIN |
#define | RTE_GPU_CALLBACK_ANY_DATA ((void *)-1) |
#define | RTE_GPU_VOLATILE(x) (*(volatile typeof(x) *)&(x)) |
#define | RTE_GPU_COMM_LIST_PKTS_MAX 1024 |
#define | RTE_GPU_FOREACH(dev_id) RTE_GPU_FOREACH_CHILD(dev_id, RTE_GPU_ID_ANY) |
#define | RTE_GPU_FOREACH_PARENT(dev_id) RTE_GPU_FOREACH_CHILD(dev_id, RTE_GPU_ID_NONE) |
#define | RTE_GPU_FOREACH_CHILD(dev_id, parent) |
Typedefs | |
typedef void() | rte_gpu_callback_t(int16_t dev_id, enum rte_gpu_event event, void *user_data) |
Enumerations | |
enum | rte_gpu_event { RTE_GPU_EVENT_NEW, RTE_GPU_EVENT_DEL } |
enum | rte_gpu_comm_flag_type { RTE_GPU_COMM_FLAG_CPU = 0 } |
enum | rte_gpu_comm_list_status { RTE_GPU_COMM_LIST_FREE = 0, RTE_GPU_COMM_LIST_READY, RTE_GPU_COMM_LIST_DONE, RTE_GPU_COMM_LIST_ERROR } |
Functions | |
__rte_experimental int | rte_gpu_init (size_t dev_max) |
__rte_experimental uint16_t | rte_gpu_count_avail (void) |
__rte_experimental bool | rte_gpu_is_valid (int16_t dev_id) |
__rte_experimental int16_t | rte_gpu_add_child (const char *name, int16_t parent, uint64_t child_context) |
__rte_experimental int16_t | rte_gpu_find_next (int16_t dev_id, int16_t parent) |
__rte_experimental int | rte_gpu_close (int16_t dev_id) |
__rte_experimental int | rte_gpu_callback_register (int16_t dev_id, enum rte_gpu_event event, rte_gpu_callback_t *function, void *user_data) |
__rte_experimental int | rte_gpu_callback_unregister (int16_t dev_id, enum rte_gpu_event event, rte_gpu_callback_t *function, void *user_data) |
__rte_experimental int | rte_gpu_info_get (int16_t dev_id, struct rte_gpu_info *info) |
__rte_experimental void * | rte_gpu_mem_alloc (int16_t dev_id, size_t size, unsigned int align) __rte_alloc_size(2) |
__rte_experimental int | rte_gpu_mem_free (int16_t dev_id, void *ptr) |
__rte_experimental int | rte_gpu_mem_register (int16_t dev_id, size_t size, void *ptr) |
__rte_experimental int | rte_gpu_mem_unregister (int16_t dev_id, void *ptr) |
__rte_experimental void * | rte_gpu_mem_cpu_map (int16_t dev_id, size_t size, void *ptr) |
__rte_experimental int | rte_gpu_mem_cpu_unmap (int16_t dev_id, void *ptr) |
__rte_experimental int | rte_gpu_wmb (int16_t dev_id) |
__rte_experimental int | rte_gpu_comm_create_flag (uint16_t dev_id, struct rte_gpu_comm_flag *devflag, enum rte_gpu_comm_flag_type mtype) |
__rte_experimental int | rte_gpu_comm_destroy_flag (struct rte_gpu_comm_flag *devflag) |
__rte_experimental int | rte_gpu_comm_set_flag (struct rte_gpu_comm_flag *devflag, uint32_t val) |
__rte_experimental int | rte_gpu_comm_get_flag_value (struct rte_gpu_comm_flag *devflag, uint32_t *val) |
__rte_experimental struct rte_gpu_comm_list * | rte_gpu_comm_create_list (uint16_t dev_id, uint32_t num_comm_items) |
__rte_experimental int | rte_gpu_comm_destroy_list (struct rte_gpu_comm_list *comm_list, uint32_t num_comm_items) |
__rte_experimental int | rte_gpu_comm_populate_list_pkts (struct rte_gpu_comm_list *comm_list_item, struct rte_mbuf **mbufs, uint32_t num_mbufs) |
__rte_experimental int | rte_gpu_comm_set_status (struct rte_gpu_comm_list *comm_list_item, enum rte_gpu_comm_list_status status) |
__rte_experimental int | rte_gpu_comm_get_status (struct rte_gpu_comm_list *comm_list_item, enum rte_gpu_comm_list_status *status) |
__rte_experimental int | rte_gpu_comm_cleanup_list (struct rte_gpu_comm_list *comm_list_item) |
Generic library to interact with GPU computing device.
The API is not thread-safe. Device management must be done by a single thread.
Definition in file rte_gpudev.h.
#define RTE_GPU_DEFAULT_MAX 32 |
Maximum number of devices if rte_gpu_init() is not called.
Definition at line 32 of file rte_gpudev.h.
#define RTE_GPU_ID_NONE -1 |
Empty device ID.
Definition at line 35 of file rte_gpudev.h.
#define RTE_GPU_ID_ANY INT16_MIN |
Catch-all device ID.
Definition at line 37 of file rte_gpudev.h.
#define RTE_GPU_CALLBACK_ANY_DATA ((void *)-1) |
Catch-all callback data.
Definition at line 40 of file rte_gpudev.h.
#define RTE_GPU_VOLATILE | ( | x | ) | (*(volatile typeof(x) *)&(x)) |
Access variable as volatile.
Definition at line 43 of file rte_gpudev.h.
#define RTE_GPU_COMM_LIST_PKTS_MAX 1024 |
Max number of packets per communication list.
Definition at line 46 of file rte_gpudev.h.
#define RTE_GPU_FOREACH | ( | dev_id | ) | RTE_GPU_FOREACH_CHILD(dev_id, RTE_GPU_ID_ANY) |
Macro to iterate over all valid GPU devices.
dev_id | The ID of the next possible valid device, usually 0 to iterate all. |
Definition at line 238 of file rte_gpudev.h.
#define RTE_GPU_FOREACH_PARENT | ( | dev_id | ) | RTE_GPU_FOREACH_CHILD(dev_id, RTE_GPU_ID_NONE) |
Macro to iterate over all valid computing devices having no parent.
dev_id | The ID of the next possible valid device, usually 0 to iterate all. |
Definition at line 250 of file rte_gpudev.h.
#define RTE_GPU_FOREACH_CHILD | ( | dev_id, | |
parent | |||
) |
Macro to iterate over all valid children of a computing device parent.
dev_id | The ID of the next possible valid device, usually 0 to iterate all. |
parent | The device ID of the parent. |
Definition at line 264 of file rte_gpudev.h.
typedef void() rte_gpu_callback_t(int16_t dev_id, enum rte_gpu_event event, void *user_data) |
Prototype of event callback function.
Definition at line 77 of file rte_gpudev.h.
enum rte_gpu_event |
Flags passed in notification callback.
Enumerator | |
---|---|
RTE_GPU_EVENT_NEW | Device is just initialized. |
RTE_GPU_EVENT_DEL | Device is going to be released. |
Definition at line 69 of file rte_gpudev.h.
Memory where communication flag is allocated.
Enumerator | |
---|---|
RTE_GPU_COMM_FLAG_CPU | Allocate flag on CPU memory visible from device. |
Definition at line 81 of file rte_gpudev.h.
Possible status for the list of packets shared among CPU and device.
Definition at line 105 of file rte_gpudev.h.
__rte_experimental int rte_gpu_init | ( | size_t | dev_max | ) |
Initialize the device array before probing devices. If not called, the maximum of probed devices is RTE_GPU_DEFAULT_MAX.
dev_max | Maximum number of devices. |
__rte_experimental uint16_t rte_gpu_count_avail | ( | void | ) |
Return the number of GPU detected and associated to DPDK.
__rte_experimental bool rte_gpu_is_valid | ( | int16_t | dev_id | ) |
Check if the device is valid and initialized in DPDK.
dev_id | The input device ID. |
__rte_experimental int16_t rte_gpu_add_child | ( | const char * | name, |
int16_t | parent, | ||
uint64_t | child_context | ||
) |
Create a virtual device representing a context in the parent device.
name | Unique string to identify the device. |
parent | Device ID of the parent. |
child_context | Opaque context handler. |
__rte_experimental int16_t rte_gpu_find_next | ( | int16_t | dev_id, |
int16_t | parent | ||
) |
Get the ID of the next valid GPU initialized in DPDK.
dev_id | The initial device ID to start the research. |
parent | The device ID of the parent. RTE_GPU_ID_NONE means no parent. RTE_GPU_ID_ANY means no or any parent. |
__rte_experimental int rte_gpu_close | ( | int16_t | dev_id | ) |
Close device or child context. All resources are released.
dev_id | Device ID to close. |
__rte_experimental int rte_gpu_callback_register | ( | int16_t | dev_id, |
enum rte_gpu_event | event, | ||
rte_gpu_callback_t * | function, | ||
void * | user_data | ||
) |
Register a function as event callback. A function may be registered multiple times for different events.
dev_id | Device ID to get notified about. RTE_GPU_ID_ANY means all devices. |
event | Device event to be registered for. |
function | Callback function to be called on event. |
user_data | Optional parameter passed in the callback. |
__rte_experimental int rte_gpu_callback_unregister | ( | int16_t | dev_id, |
enum rte_gpu_event | event, | ||
rte_gpu_callback_t * | function, | ||
void * | user_data | ||
) |
Unregister for an event.
dev_id | Device ID to be silenced. RTE_GPU_ID_ANY means all devices. |
event | Registered event. |
function | Registered function. |
user_data | Optional parameter as registered. RTE_GPU_CALLBACK_ANY_DATA is a catch-all. |
__rte_experimental int rte_gpu_info_get | ( | int16_t | dev_id, |
struct rte_gpu_info * | info | ||
) |
Return device specific info.
dev_id | Device ID to get info. |
info | Memory structure to fill with the info. |
__rte_experimental void* rte_gpu_mem_alloc | ( | int16_t | dev_id, |
size_t | size, | ||
unsigned int | align | ||
) |
Allocate a chunk of memory in the device.
dev_id | Device ID requiring allocated memory. |
size | Number of bytes to allocate. Requesting 0 will do nothing. |
align | If 0, the return is a pointer that is suitably aligned for any kind of variable (in the same manner as malloc()). Otherwise, the return is a pointer that is a multiple of align. In this case, it must obviously be a power of two. |
__rte_experimental int rte_gpu_mem_free | ( | int16_t | dev_id, |
void * | ptr | ||
) |
Deallocate a chunk of memory allocated with rte_gpu_mem_alloc().
dev_id | Reference device ID. |
ptr | Pointer to the memory area to be deallocated. NULL is a no-op accepted value. |
__rte_experimental int rte_gpu_mem_register | ( | int16_t | dev_id, |
size_t | size, | ||
void * | ptr | ||
) |
Register a chunk of memory on the CPU usable by the device.
dev_id | Device ID requiring allocated memory. |
size | Number of bytes to allocate. Requesting 0 will do nothing. |
ptr | Pointer to the memory area to be registered. NULL is a no-op accepted value. |
__rte_experimental int rte_gpu_mem_unregister | ( | int16_t | dev_id, |
void * | ptr | ||
) |
Deregister a chunk of memory previously registered with rte_gpu_mem_register()
dev_id | Reference device ID. |
ptr | Pointer to the memory area to be unregistered. NULL is a no-op accepted value. |
__rte_experimental void* rte_gpu_mem_cpu_map | ( | int16_t | dev_id, |
size_t | size, | ||
void * | ptr | ||
) |
Map a chunk of GPU memory to make it accessible from the CPU using the memory pointer returned by the function. GPU memory has to be allocated via rte_gpu_mem_alloc().
dev_id | Device ID requiring mapped memory. |
size | Number of bytes to map. Requesting 0 will do nothing. |
ptr | Pointer to the GPU memory area to be mapped. NULL is a no-op accepted value. |
__rte_experimental int rte_gpu_mem_cpu_unmap | ( | int16_t | dev_id, |
void * | ptr | ||
) |
Unmap a chunk of GPU memory previously mapped with rte_gpu_mem_cpu_map()
dev_id | Reference device ID. |
ptr | Pointer to the GPU memory area to be unmapped. NULL is a no-op accepted value. |
__rte_experimental int rte_gpu_wmb | ( | int16_t | dev_id | ) |
Enforce a GPU write memory barrier.
dev_id | Reference device ID. |
__rte_experimental int rte_gpu_comm_create_flag | ( | uint16_t | dev_id, |
struct rte_gpu_comm_flag * | devflag, | ||
enum rte_gpu_comm_flag_type | mtype | ||
) |
Create a communication flag that can be shared between CPU threads and device workload to exchange some status info (e.g. work is done, processing can start, etc..).
dev_id | Reference device ID. |
devflag | Pointer to the memory area of the devflag structure. |
mtype | Type of memory to allocate the communication flag. |
__rte_experimental int rte_gpu_comm_destroy_flag | ( | struct rte_gpu_comm_flag * | devflag | ) |
Deallocate a communication flag.
devflag | Pointer to the memory area of the devflag structure. |
__rte_experimental int rte_gpu_comm_set_flag | ( | struct rte_gpu_comm_flag * | devflag, |
uint32_t | val | ||
) |
Set the value of a communication flag as the input value. Flag memory area is treated as volatile. The flag must have been allocated with RTE_GPU_COMM_FLAG_CPU.
devflag | Pointer to the memory area of the devflag structure. |
val | Value to set in the flag. |
__rte_experimental int rte_gpu_comm_get_flag_value | ( | struct rte_gpu_comm_flag * | devflag, |
uint32_t * | val | ||
) |
Get the value of the communication flag. Flag memory area is treated as volatile. The flag must have been allocated with RTE_GPU_COMM_FLAG_CPU.
devflag | Pointer to the memory area of the devflag structure. |
val | Flag output value. |
__rte_experimental struct rte_gpu_comm_list* rte_gpu_comm_create_list | ( | uint16_t | dev_id, |
uint32_t | num_comm_items | ||
) |
Create a communication list that can be used to share packets between CPU and device. Each element of the list contains:
The list is allocated in CPU-visible memory. At creation time, every list is in FREE state.
dev_id | Reference device ID. |
num_comm_items | Number of items in the communication list. |
__rte_experimental int rte_gpu_comm_destroy_list | ( | struct rte_gpu_comm_list * | comm_list, |
uint32_t | num_comm_items | ||
) |
Destroy a communication list.
comm_list | Communication list to be destroyed. |
num_comm_items | Number of items in the communication list. |
__rte_experimental int rte_gpu_comm_populate_list_pkts | ( | struct rte_gpu_comm_list * | comm_list_item, |
struct rte_mbuf ** | mbufs, | ||
uint32_t | num_mbufs | ||
) |
Populate the packets list of the communication item with info from a list of mbufs. Status flag of that packet list is set to READY.
comm_list_item | Communication list item to fill. |
mbufs | List of mbufs. |
num_mbufs | Number of mbufs. |
__rte_experimental int rte_gpu_comm_set_status | ( | struct rte_gpu_comm_list * | comm_list_item, |
enum rte_gpu_comm_list_status | status | ||
) |
Set status flag value of a communication list item.
comm_list_item | Communication list item to query. |
status | Status value to set. |
__rte_experimental int rte_gpu_comm_get_status | ( | struct rte_gpu_comm_list * | comm_list_item, |
enum rte_gpu_comm_list_status * | status | ||
) |
Get status flag value of a communication list item.
comm_list_item | Communication list item to query. Input parameter. |
status | Communication list item status flag value. Output parameter. |
__rte_experimental int rte_gpu_comm_cleanup_list | ( | struct rte_gpu_comm_list * | comm_list_item | ) |
Reset a communication list item to the original state. The status flag set to FREE and mbufs are returned to the pool.
comm_list_item | Communication list item to reset. |