mindspore.hal.Event

class mindspore.hal.Event(enable_timing=False, blocking=False)[源代码]

设备事件的封装器。

设备事件是同步标记,可用于监视设备的执行进度、准确计时和同步设备流。

当事件首次被记录时,底层设备事件才会被初始化。

参数:
  • enable_timing (bool, 可选) - 事件是否应计时。(默认值: False

  • blocking (bool, 可选) - 如果为 Truewait 函数将是阻塞的。(默认值: 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,经过的时间(以毫秒为单位)。

异常:
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

异常:
synchronize()[源代码]

等待事件完成。

等待直到完成当前此事件捕获的所有工作。 这将阻止CPU线程继续进行,直到事件完成。

wait(stream=None)[源代码]

使提交给给定流的所有未来工作等待此事件。

如果未指定 stream,将使用 mindspore.hal.current_stream()

参数:
  • stream (Stream, 可选) - 需要等待的流。如果输入为 None,将使用当前流。默认值: 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.]]