rte_gpudev.h(3) | DPDK | rte_gpudev.h(3) |
NAME¶
rte_gpudev.h
SYNOPSIS¶
#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>
#include <rte_mbuf.h>
#include <rte_bitops.h>
#include <rte_compat.h>
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)
Detailed Description¶
Generic library to interact with GPU computing device.
The API is not thread-safe. Device management must be done by a single thread.
Warning:
Definition in file rte_gpudev.h.
Macro Definition Documentation¶
#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)¶
Warning:
Macro to iterate over all valid GPU devices.
Parameters:
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)¶
Warning:
Macro to iterate over all valid computing devices having no parent.
Parameters:
Definition at line 250 of file rte_gpudev.h.
#define RTE_GPU_FOREACH_CHILD(dev_id, parent)¶
Value:
for (dev_id = rte_gpu_find_next(0, parent); dev_id >= 0; dev_id = rte_gpu_find_next(dev_id + 1, parent))
Warning:
Macro to iterate over all valid children of a computing device parent.
Parameters:
parent The device ID of the parent.
Definition at line 264 of file rte_gpudev.h.
Typedef Documentation¶
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.
Enumeration Type Documentation¶
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.
enum rte_gpu_comm_flag_type¶
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.
enum rte_gpu_comm_list_status¶
Possible status for the list of packets shared among CPU and device.
Enumerator
- RTE_GPU_COMM_LIST_FREE
- Packet list can be filled with new mbufs, no one is using it.
- RTE_GPU_COMM_LIST_READY
- Packet list has been filled with new mbufs and it's ready to be used .
- RTE_GPU_COMM_LIST_DONE
- Packet list has been processed, it's ready to be freed.
- RTE_GPU_COMM_LIST_ERROR
- Some error occurred during packet list processing.
Definition at line 105 of file rte_gpudev.h.
Function Documentation¶
__rte_experimental int rte_gpu_init (size_t dev_max)¶
Warning:
Initialize the device array before probing devices. If not called, the maximum of probed devices is RTE_GPU_DEFAULT_MAX.
Parameters:
Returns:
- ENOMEM if out of memory
- EINVAL if 0 size
- EBUSY if already initialized
__rte_experimental uint16_t rte_gpu_count_avail (void)¶
Warning:
Return the number of GPU detected and associated to DPDK.
Returns:
__rte_experimental bool rte_gpu_is_valid (int16_t dev_id)¶
Warning:
Check if the device is valid and initialized in DPDK.
Parameters:
Returns:
- True if dev_id is a valid and initialized computing device.
- False otherwise.
__rte_experimental int16_t rte_gpu_add_child (const char * name, int16_t parent, uint64_t child_context)¶
Warning:
Create a virtual device representing a context in the parent device.
Parameters:
parent Device ID of the parent.
child_context Opaque context handler.
Returns:
- EINVAL if empty name
- ENAMETOOLONG if long name
- EEXIST if existing device name
- ENODEV if invalid parent
- EPERM if secondary process
- ENOENT if too many devices
- ENOMEM if out of space
__rte_experimental int16_t rte_gpu_find_next (int16_t dev_id, int16_t parent)¶
Warning:
Get the ID of the next valid GPU initialized in DPDK.
Parameters:
parent The device ID of the parent. RTE_GPU_ID_NONE means no parent. RTE_GPU_ID_ANY means no or any parent.
Returns:
__rte_experimental int rte_gpu_close (int16_t dev_id)¶
Warning:
Close device or child context. All resources are released.
Parameters:
Returns:
- ENODEV if invalid dev_id
- EPERM if driver error
__rte_experimental int rte_gpu_callback_register (int16_t dev_id, enum rte_gpu_event event, rte_gpu_callback_t * function, void * user_data)¶
Warning:
Register a function as event callback. A function may be registered multiple times for different events.
Parameters:
event Device event to be registered for.
function Callback function to be called on event.
user_data Optional parameter passed in the callback.
Returns:
- ENODEV if invalid dev_id
- EINVAL if NULL function
- ENOMEM if out of memory
__rte_experimental int rte_gpu_callback_unregister (int16_t dev_id, enum rte_gpu_event event, rte_gpu_callback_t * function, void * user_data)¶
Warning:
Unregister for an event.
Parameters:
event Registered event.
function Registered function.
user_data Optional parameter as registered. RTE_GPU_CALLBACK_ANY_DATA is a catch-all.
Returns:
- ENODEV if invalid dev_id
- EINVAL if NULL function
__rte_experimental int rte_gpu_info_get (int16_t dev_id, struct rte_gpu_info * info)¶
Warning:
Return device specific info.
Parameters:
info Memory structure to fill with the info.
Returns:
- ENODEV if invalid dev_id
- EINVAL if NULL info
- EPERM if driver error
__rte_experimental void* rte_gpu_mem_alloc (int16_t dev_id, size_t size, unsigned int align)¶
Warning:
Allocate a chunk of memory in the device.
Parameters:
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.
Returns:
- ENODEV if invalid dev_id
- EINVAL if align is not a power of two
- ENOTSUP if operation not supported by the driver
- E2BIG if size is higher than limit
- ENOMEM if out of space
- EPERM if driver error
__rte_experimental int rte_gpu_mem_free (int16_t dev_id, void * ptr)¶
Warning:
Deallocate a chunk of memory allocated with rte_gpu_mem_alloc().
Parameters:
ptr Pointer to the memory area to be deallocated. NULL is a no-op accepted value.
Returns:
- ENODEV if invalid dev_id
- ENOTSUP if operation not supported by the driver
- EPERM if driver error
__rte_experimental int rte_gpu_mem_register (int16_t dev_id, size_t size, void * ptr)¶
Warning:
Register a chunk of memory on the CPU usable by the device.
Parameters:
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.
Returns:
- ENODEV if invalid dev_id
- EINVAL if reserved flags
- ENOTSUP if operation not supported by the driver
- E2BIG if size is higher than limit
- ENOMEM if out of space
- EPERM if driver error
__rte_experimental int rte_gpu_mem_unregister (int16_t dev_id, void * ptr)¶
Warning:
Deregister a chunk of memory previously registered with rte_gpu_mem_register()
Parameters:
ptr Pointer to the memory area to be unregistered. NULL is a no-op accepted value.
Returns:
- ENODEV if invalid dev_id
- ENOTSUP if operation not supported by the driver
- EPERM if driver error
__rte_experimental void* rte_gpu_mem_cpu_map (int16_t dev_id, size_t size, void * ptr)¶
Warning:
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().
Parameters:
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.
Returns:
- ENODEV if invalid dev_id
- ENOTSUP if operation not supported by the driver
- E2BIG if size is higher than limit
- ENOMEM if out of space
- EPERM if driver error
__rte_experimental int rte_gpu_mem_cpu_unmap (int16_t dev_id, void * ptr)¶
Warning:
Unmap a chunk of GPU memory previously mapped with rte_gpu_mem_cpu_map()
Parameters:
ptr Pointer to the GPU memory area to be unmapped. NULL is a no-op accepted value.
Returns:
- ENODEV if invalid dev_id
- ENOTSUP if operation not supported by the driver
- EPERM if driver error
__rte_experimental int rte_gpu_wmb (int16_t dev_id)¶
Warning:
Enforce a GPU write memory barrier.
Parameters:
Returns:
- ENODEV if invalid dev_id
- ENOTSUP if operation not supported by the driver
- EPERM if driver error
__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)¶
Warning:
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..).
Parameters:
devflag Pointer to the memory area of the devflag structure.
mtype Type of memory to allocate the communication flag.
Returns:
- ENODEV if invalid dev_id
- EINVAL if invalid inputs
- ENOTSUP if operation not supported by the driver
- ENOMEM if out of space
- EPERM if driver error
__rte_experimental int rte_gpu_comm_destroy_flag (struct rte_gpu_comm_flag * devflag)¶
Warning:
Deallocate a communication flag.
Parameters:
Returns:
- ENODEV if invalid dev_id
- EINVAL if NULL devflag
- ENOTSUP if operation not supported by the driver
- EPERM if driver error
__rte_experimental int rte_gpu_comm_set_flag (struct rte_gpu_comm_flag * devflag, uint32_t val)¶
Warning:
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.
Parameters:
val Value to set in the flag.
Returns:
- •
- EINVAL if invalid input params
__rte_experimental int rte_gpu_comm_get_flag_value (struct rte_gpu_comm_flag * devflag, uint32_t * val)¶
Warning:
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.
Parameters:
val Flag output value.
Returns:
- •
- EINVAL if invalid input params
__rte_experimental struct rte_gpu_comm_list* rte_gpu_comm_create_list (uint16_t dev_id, uint32_t num_comm_items)¶
Warning:
Create a communication list that can be used to share packets between CPU and device. Each element of the list contains:
- a packet list of RTE_GPU_COMM_LIST_PKTS_MAX elements
- number of packets in the list
- a status flag to communicate if the packet list is FREE, READY to be processed, DONE with processing.
The list is allocated in CPU-visible memory. At creation time, every list is in FREE state.
Parameters:
num_comm_items Number of items in the communication list.
Returns:
- •
- EINVAL if invalid input params
__rte_experimental int rte_gpu_comm_destroy_list (struct rte_gpu_comm_list * comm_list, uint32_t num_comm_items)¶
Warning:
Destroy a communication list.
Parameters:
num_comm_items Number of items in the communication list.
Returns:
- •
- EINVAL if invalid input params
__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)¶
Warning:
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.
Parameters:
mbufs List of mbufs.
num_mbufs Number of mbufs.
Returns:
- EINVAL if invalid input params
- ENOTSUP if mbufs are chained (multiple segments)
__rte_experimental int rte_gpu_comm_set_status (struct rte_gpu_comm_list * comm_list_item, enum rte_gpu_comm_list_status status)¶
Warning:
Set status flag value of a communication list item.
Parameters:
status Status value to set.
Returns:
- •
- EINVAL if invalid input params
__rte_experimental int rte_gpu_comm_get_status (struct rte_gpu_comm_list * comm_list_item, enum rte_gpu_comm_list_status * status)¶
Warning:
Get status flag value of a communication list item.
Parameters:
status Communication list item status flag value. Output parameter.
Returns:
- •
- EINVAL if invalid input params
__rte_experimental int rte_gpu_comm_cleanup_list (struct rte_gpu_comm_list * comm_list_item)¶
Warning:
Reset a communication list item to the original state. The status flag set to FREE and mbufs are returned to the pool.
Parameters:
Returns:
- •
- EINVAL if invalid input params
Author¶
Generated automatically by Doxygen for DPDK from the source code.
Thu May 23 2024 | Version 23.11.0 |