自定义 Runtime¶
自定义 Runtime 为 PaddlePaddle 提供了一种插件式注册新硬件 Runtime 的方式。 DeviceManager 管理 PaddlePaddle 的硬件设备以及 Runtime/Driver 接口,向上提供统一的接口供框架调用硬件功能,向下暴露一系列接口用于注册自定义 Runtime ,通过 C API 形式保证二进制兼容性。这些接口可以在 device_ext.h 文件中查看,开发者只需要实现这些接口即可为 PaddlePaddle 添加自定义 Runtime 。
- 数据类型 : 介绍自定义 Runtime 的数据类型定义。 
- Device 接口 : 介绍 Device 接口的定义和功能。 
- Memory 接口 : 介绍 Memory 接口的定义和功能。 
- Stream 接口 : 介绍 Stream 接口的定义和功能。 
- Event 接口 : 介绍 Event 接口的定义和功能。 
- 集合通讯接口 : 介绍集合通讯接口的定义和功能。 
- Profiler 接口 : 介绍 Profiler 接口的定义和功能。 
Device 接口¶
| 接口名称 | 功能简介 | 必选 | 
|---|---|---|
| initialize | 初始化硬件后端。 | N | 
| finalize | 去初始化硬件后端。 | N | 
| init_device | 初始化指定硬件设备。 | N | 
| deinit_device | 去初始化指定硬件设备。 | N | 
| set_device | 设置当前使用的硬件设备。 | Y | 
| get_device | 获取当前使用的硬件设备。 | Y | 
| synchronize_device | 同步指定的硬件设备。 | Y | 
| get_device_count | 查询可用设备数量。 | Y | 
| get_device_list | 查询可用设备号。 | Y | 
| get_compute_capability | 查询设备算力。 | Y | 
| get_runtime_version | 查询运行时版本号。 | Y | 
| get_driver_version | 查询驱动版本号。 | Y | 
Memory 接口¶
| 接口名称 | 功能简介 | 必选 | 
|---|---|---|
| device_memory_allocate | 分配设备内存。 | Y | 
| device_memory_deallocate | 释放设备内存。 | Y | 
| host_memory_allocate | 分配主机锁页内存。 | N | 
| host_memory_deallocate | 释放主机锁页内存。 | N | 
| unified_memory_allocate | 分配统一地址空间内存。 | N | 
| unified_memory_deallocate | 释放统一地址空间内存。 | N | 
| memory_copy_h2d | 主机到设备的同步内存拷贝。 | N | 
| memory_copy_d2h | 设备到主机的同步内存拷贝。 | N | 
| memory_copy_d2d | 设备内同步内存拷贝。 | N | 
| memory_copy_p2d | 设备间同步内存拷贝。 | N | 
| async_memory_copy_h2d | 主机到设备异步内存拷贝。 | N | 
| async_memory_copy_d2h | 设备到主机异步内存拷贝。 | N | 
| async_memory_copy_d2d | 设备内异步内存拷贝。 | N | 
| async_memory_copy_p2d | 设备间异步内存拷贝。 | N | 
| device_memory_set | 填充设备内存。 | N | 
| device_memory_stats | 设备内存使用统计。 | N | 
| device_min_chunk_size | 查询设备内存最小块大小。 | N | 
| device_max_chunk_size | 查询设备内存最大块大小。 | N | 
| device_max_alloc_size | 查询设备最大可分配内存大小。 | N | 
| device_extra_padding_size | 查询设备内存额外填充大小。 | N | 
| device_init_alloc_size | 查询设备初始化分配内存大小。 | N | 
| device_realloc_size | 查询设备重分配内存大小。 | N | 
Stream 接口¶
| 接口名称 | 功能简介 | 必选 | 
|---|---|---|
| create_stream | 创建一个 stream 对象。 | N | 
| destroy_stream | 销毁一个 stream 对象。 | N | 
| query_stream | 查询 stream 上任务是否完成。 | N | 
| synchronize_stream | 同步 stream,等待 stream 上所有任务完成。 | N | 
| stream_add_callback | 添加一个主机回调到 stream 上。 | N | 
| stream_wait_event | 等待 stream 上的一个 event 完成。 | N | 
Event 接口¶
| 接口名称 | 功能简介 | 必选 | 
|---|---|---|
| create_event | 创建一个 event 对象。 | Y | 
| destroy_event | 销毁一个 event 对象。 | Y | 
| record_event | 在 stream 上记录 event。 | Y | 
| query_event | 查询 event 是否完成。 | N | 
| synchronize_event | 同步 event,等待 event 完成。 | Y | 
集合通讯接口¶
| 接口名称 | 功能简介 | 必选 | 
|---|---|---|
| xccl_get_unique_id_size | 获取 unique_id 对象的大小。 | N | 
| xccl_get_unique_id | 获取 unique_id 对象。 | N | 
| xccl_comm_init_rank | 初始化 communicator。 | N | 
| xccl_destroy_comm | 销毁 communicator。 | N | 
| xccl_all_reduce | 集合通讯 AllReduce 操作。 | N | 
| xccl_broadcast | 集合通讯 Broadcast 操作。 | N | 
| xccl_reduce | 集合通讯 Reduce 操作。 | N | 
| xccl_all_gather | 集合通讯 AllGather 操作。 | N | 
| xccl_reduce_scatter | 集合通讯 ReduceScatter 操作。 | N | 
| xccl_group_start | 开始集合通迅操作聚合。 | N | 
| xccl_group_end | 停止集合通迅操作聚合。 | N | 
| xccl_send | 集合通讯 Send 操作。 | N | 
| xccl_recv | 集合通讯 Recv 操作。 | N | 
Profiler 接口¶
| 接口名称 | 功能简介 | 必选 | 
|---|---|---|
| profiler_initialize | 初始化硬件 Profiler | N | 
| profiler_finalize | 去初始化硬件 Profiler | N | 
| profiler_prepare_tracing | Profiler 准备收集数据 | N | 
| profiler_start_tracing | Profiler 开始收集数据 | N | 
| profiler_stop_tracing | Profiler 停止收集数据 | N | 
| profiler_collect_trace_data | Profiler 数据转换 | N |