自定义 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  |