跳到主要内容

关于Stream内任务的同步等待

基本原理

同步机制

pyACL提供以下几种同步机制:

  • Event的同步等待:调用acl.rt.synchronize_event接口,阻塞应用程序运行,等待Event完成。
  • Stream内任务的同步等待:调用acl.rt.synchronize_stream接口,阻塞应用程序运行,直到指定Stream中的所有任务都完成。
  • Stream间任务的同步等待:调用acl.rt.stream_wait_event接口,阻塞指定Stream的运行,直到指定的Event完成。支持多个Stream等待同一个Event的场景。接口调用流程请参见多Stream接口调用流程
  • Device的同步等待:调用acl.rt.synchronize_device接口,阻塞应用程序运行,直到正在运算中的Device完成运算。

父主题: 同步等待

关于Event的同步等待

调用接口后,需增加异常处理的分支,并记录报错日志、提示日志,此处不一一列举。以下是关键步骤的代码示例,不可以直接拷贝运行,仅供参考。

import acl
## ......
## 创建一个Event。
event, ret = acl.rt.create_event()

## 创建一个Stream。
stream, ret = acl.rt.create_stream()

## stream末尾添加了一个event。
ret = acl.rt.record_event(event, stream)

## 阻塞应用程序运行,等待event发生,也就是stream执行完成。
## stream完成后产生event,唤醒执行应用程序的控制流,开始执行程序。
ret = acl.rt.synchronize_event(event)

## 显式销毁资源。
ret = acl.rt.destroy_stream(stream)
ret = acl.rt.destroy_event(event)
## ......

父主题: 同步等待

关于Stream内任务的同步等待

调用接口后,需增加异常处理的分支,并记录报错日志、提示日志,此处不一一列举。以下是关键步骤的代码示例,不可以直接拷贝运行,仅供参考。

import acl
## ......

## 显式创建一个Stream。
stream, ret = acl.rt.create_stream()

## 调用触发任务的接口,传入stream参数。
ret = acl.rt.memcpy_async(dev_ptr, dev_size, host_ptr, host_size, ACL_MEMCPY_HOST_TO_DEVICE, stream)
## 调用acl.rt.synchronize_stream接口,阻塞应用程序运行,直到指定Stream中的所有任务都完成。
ret = acl.rt.synchronize_stream(stream)

## Stream使用结束后,显式销毁Stream。
ret = acl.rt.destroy_stream(stream)
## ......

父主题: 同步等待

关于Stream间任务的同步等待

调用接口后,需增加异常处理的分支,并记录报错日志、提示日志,此处不一一列举。以下是关键步骤的代码示例,不可以直接拷贝运行,仅供参考。

import acl
## ......
## 创建一个Event。
event, ret = acl.rt.create_event()

## 创建两个Stream。
s1, ret = acl.rt.create_stream()
s2, ret = acl.rt.create_stream()

## 在s1末尾添加了一个event。
ret = acl.rt.record_event(event, s1)

## 阻塞s2运行,直到指定Event发生,也就是s1执行完成。
## s1完成后,唤醒s2,继续执行s2的任务。
ret = acl.rt.stream_wait_event(s2, event)

## 显式销毁资源。
ret = acl.rt.destroy_stream(s2)
ret = acl.rt.destroy_stream(s1)
ret = acl.rt.destroy_event(event)
## ......

父主题: 同步等待

关于Device的同步等待

调用接口后,需增加异常处理的分支,并记录报错日志、提示日志,示例代码中不一一列举。以下是关键步骤的代码示例,不可以直接拷贝运行,仅供参考。

<br> 1<br> 2<br> 3<br> 4<br> 5<br> 6<br> 7<br> 8<br> 9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>python<br>import acl<br># ......<br>device_id = 0<br># 指定Device。<br>ret = acl.rt.set_device(device_id)<br># 创建context。<br>context, ret = acl.rt.create_context(device_id)<br># 创建stream。<br>stream, ret = acl.rt.create_stream()<br># 阻塞应用程序运行,直到正在运算中的Device完成运算。<br>ret = acl.rt.synchronize_device()<br># 资源销毁。<br>ret = acl.rt.synchronize_stream(stream)<br>ret = acl.rt.destroy_context(context)<br>ret = acl.rt.reset_device(device_id)<br>

父主题: 同步等待

在线提单