Function: subscribe_report
Applicability
|
Product |
Supported (√/x) |
|---|---|
|
|
√ |
|
|
√ |
|
|
√ |
|
|
√ |
|
|
√ |
Function Usage
Specifies the thread that processes the callback function in the stream in the asynchronous task scenario.
- Create a thread. Once acl.rt.process_report in the thread function is called to set the timeout interval (cyclic calling is required), acl.rt.launch_callback will deliver a callback task after a period of time.
- Call acl.rt.subscribe_report to bind the thread created in Step 1 to the stream. The callback task delivered by the stream is executed in the bound thread.
- Execute an asynchronous job (for example, an asynchronous inference job) on the specified stream.
- Define and implement the callback function, call acl.rt.launch_callback to deliver a callback task in the task queue of the stream, and trigger the thread to process the callback function subscribed by acl.rt.subscribe_report. Each time acl.rt.launch_callback is called, a callback task is delivered.
- Call acl.rt.unsubscribe_report to unsubscribe from threads and unbind threads from streams after all asynchronous tasks are executed.
Prototype
- C Prototype
1aclError aclrtSubscribeReport(uint64_t threadId, aclrtStream stream)
- Python Function
1ret = acl.rt.subscribe_report(thread_id, stream)
Parameter Description
|
Parameter |
Description |
|---|---|
|
thread_id |
int, thread ID. |
|
stream |
Int, pointer address of the stream to be processed. |
Return Value Description
|
Return Value |
Description |
|---|---|
|
ret |
Int, error code: 0 on success; else, failure. |
Restrictions
-
acl.rt.subscribe_report can be called for multiple times to subscribe to the same thread for processing the callback function in multiple streams of the same device.
-
To ensure that tasks in a stream can be executed in order, acl.rt.subscribe_report cannot be called to subscribe to multiple threads for processing more than one callback function in the same stream.
- For the
Atlas training products : If the number of threads subscribed by this call in a single process exceeds 1024, a failure code is returned. - For the
Atlas A2 training products /Atlas A2 inference products : If the number of threads subscribed by this call in a single process exceeds 1024, a failure code is returned. - For the
Atlas A3 training products /Atlas A3 inference products : If the number of threads registered by this call in a single process exceeds 1024, a failure code is returned. - For the
Atlas inference products : If the number of threads subscribed by this call in a single process exceeds 1024, a failure code is returned. - For the
Atlas 200I/500 A2 inference products : If the number of threads subscribed by this call in a single process exceeds 1024, a failure code is returned. -
Considering the thread switching performance overhead of the operating system, try to keep the number of threads subscribed by this call within 32.
-
It is not allowed to pass the same thread ID for subscribing to different callback functions on different devices in the same process.