Custom Runtime

Custom Runtime offers a new method to register the runtime of new devices via plug-ins. Responsible for the management of PaddlePaddle devices and Runtime/Driver API, DeviceManager provides a uniform API for the framework to invoke device capabilities, offers a series of APIs to register Custom Runtime, and ensure that the binary system is compatible through C API. The APIs can be found in device_ext.h . Developers can add custom runtime for PaddlePaddle only by implementing these APIs.

  • Data type : to introduce definitions of data types of custom runtime.

  • Device API : to introduce definitions and functions of Device APIs.

  • Memory API : to introduce definitions and functions of Memory APIs.

  • Stream API : to introduce definitions and functions of Stream APIs.

  • Event API : to introduce definitions and functions of Event APIs.

Device APIs

API

Function

initialize

To initialize the device backend

finalize

To de-initialize the device backend

init_device

To initialize the designated device

deinit_device

To de-initialize the designated device

set_device

To set the current device

get_device

To get the current device

synchronize_device

To synchronize the desginated device

get_device_count

To count available devices

get_device_list

To get the list of available devices

get_compute_capability

To get computing capability of devices

get_runtime_version

To get the runtime version

get_driver_version

To get the driver version

Memory APIs

API

Function

device_memory_allocate

To allocate the device memory

device_memory_deallocate

To deallocate the device memory

host_memory_allocate

To allocate pinned host memory

host_memory_deallocate

To deallocate pinned host memory

unified_memory_allocate

To allocated unified memory

unified_memory_deallocate

To deallocate unified memory

memory_copy_h2d

To copy synchronous memory from host to device

memory_copy_d2h

To copy synchronous memory from device to host

memory_copy_d2d

To copy synchronous memory in the device

memory_copy_p2d

To copy synchronous memory between devices

async_memory_copy_h2d

To copy asynchronous memory from host to device

async_memory_copy_d2h

To copy asynchronous memory from device to host

async_memory_copy_d2d

To copy asynchronous memory in the device

async_memory_copy_p2d

To copy asynchronous memory between devices

device_memory_set

To fill the device memory

device_memory_stats

To measure device memory utilization

device_min_chunk_size

To check the minimum size of device memory chunks

device_max_chunk_size

To check the maximum size of device memory chunks

device_max_alloc_size

To check the maximum size of allocatable device memory

device_extra_padding_size

To check the extra padding size of device memory

device_init_alloc_size

To check the size of allocated device memory after initialization

device_realloc_size

To check the size of reallocated device memory

Stream APIs

API

Function

create_stream

To create a stream object

destroy_stream

To destroy a stream object

query_stream

To query whether all the tasks on the stream are done

synchronize_stream

To synchronize the stream and wait for the completion of all tasks

stream_add_callback

To add a host and call it back on the stream

stream_wait_event

To wait for the completion of an event on the stream

Event APIs

API

Function

create_event

To create an event

destroy_event

To destroy an event

record_event

To record an event on the stream

query_event

To query whether the event is done

synchronize_event

To synchronize the event and wait for its completion