mindspore.hal.Event
- class mindspore.hal.Event(enable_timing=False, blocking=False)[源代码]
设备事件的封装器。
设备事件是同步标记,可用于监视设备的执行进度、准确计时和同步设备流。
当事件首次被记录时,底层设备事件才会被初始化。
- 参数:
enable_timing (bool, 可选) - 事件是否应计时。(默认值:
False
)blocking (bool, 可选) - 如果为
True
, wait 函数将是阻塞的。(默认值:False
)
样例:
>>> import mindspore as ms >>> import numpy as np >>> from mindspore import Tensor, ops >>> start = ms.hal.Event(enable_timing=True) >>> end = ms.hal.Event(enable_timing=True) >>> s1 = ms.hal.Stream() >>> s2 = ms.hal.Stream() >>> a = Tensor(np.ones([2, 2]), ms.float32) >>> b = Tensor(np.ones([2, 2]), ms.float32) >>> c = Tensor(np.ones([2, 2]), ms.float32) >>> with ms.hal.StreamCtx(s1): ... d = ops.matmul(a, b) ... start.record() >>> c += 2 >>> end.record() >>> with ms.hal.StreamCtx(s2): ... start.synchronize() ... end.synchronize() ... e = c + d >>> ms.hal.synchronize() >>> print(e) [[5. 5.] [5. 5.]] >>> elapsed_time = start.elapsed_time(end)
- elapsed_time(end_event)[源代码]
返回记录事件之后到记录end_event之前所用的时间(以毫秒为单位)。
- 参数:
end_event (Event) - 结束事件。
- 返回:
float,经过的时间(以毫秒为单位)。
- 异常:
TypeError - 参数 end_event 不是一个
mindspore.hal.Event
。
- query()[源代码]
检查事件当前捕获的所有工作是否已完成。
- 返回:
bool,指示事件当前捕获的所有工作是否都已完成。
样例:
>>> import mindspore as ms >>> import numpy as np >>> from mindspore import Tensor, ops >>> a = Tensor(np.ones([1024, 2048]), ms.float32) >>> b = Tensor(np.ones([2048, 4096]), ms.float32) >>> s1 = ms.hal.Stream() >>> with ms.hal.StreamCtx(s1): ... c = ops.matmul(a, b) ... ev = s1.record_event() >>> s1.synchronize() >>> assert ev.query()
- record(stream=None)[源代码]
在给定的流中记录事件。
如果未指定 stream,将使用
mindspore.hal.current_stream()
。- 参数:
stream (Stream, 可选) - 需要记录的流。如果输入为
None
,将使用当前流。默认值:None
。
- 异常:
TypeError - 参数 stream 即不是一个
mindspore.hal.Stream
也不是一个None
。
- wait(stream=None)[源代码]
使提交给给定流的所有未来工作等待此事件。
如果未指定 stream,将使用
mindspore.hal.current_stream()
。- 参数:
stream (Stream, 可选) - 需要等待的流。如果输入为
None
,将使用当前流。默认值:None
。
- 异常:
TypeError - 参数 stream 即不是一个
mindspore.hal.Stream
也不是一个None
。
样例:
>>> import mindspore as ms >>> import numpy as np >>> from mindspore import Tensor, ops >>> event = ms.hal.Event() >>> s1 = ms.hal.Stream() >>> s2 = ms.hal.Stream() >>> a = Tensor(np.ones([2, 2]), ms.float32) >>> b = Tensor(np.ones([2, 2]), ms.float32) >>> with ms.hal.StreamCtx(s1): ... c = ops.matmul(a, b) ... event.record() >>> event.wait() >>> d = c + 2 >>> ms.hal.synchronize() >>> print(d) [[4. 4.] [4. 4.]]