mindspore.hal.Event

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

设备事件的封装器,此接口将在后续版本中废弃,请使用接口 mindspore.runtime.Event 代替。

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

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

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

  • blocking (bool, 可选) - 如果为 Truewait 函数将是阻塞的。默认 False

样例:

>>> import mindspore
>>> start = mindspore.hal.Event(enable_timing=True)
>>> end = mindspore.hal.Event(enable_timing=True)
>>> s1 = mindspore.hal.Stream()
>>> s2 = mindspore.hal.Stream()
>>> a = mindspore.tensor(mindspore.ops.ones([2, 2]), mindspore.float32)
>>> b = mindspore.tensor(mindspore.ops.ones([2, 2]), mindspore.float32)
>>> c = mindspore.tensor(mindspore.ops.ones([2, 2]), mindspore.float32)
>>> with mindspore.hal.StreamCtx(s1):
...     d = mindspore.ops.matmul(a, b)
...     start.record()
>>> c += 2
>>> end.record()
>>> with mindspore.hal.StreamCtx(s2):
...     start.synchronize()
...     end.synchronize()
...     e = c + d
>>> mindspore.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
>>> a = mindspore.tensor(mindspore.ops.ones([1024, 2048]), mindspore.float32)
>>> b = mindspore.tensor(mindspore.ops.ones([2048, 4096]), mindspore.float32)
>>> s1 = mindspore.hal.Stream()
>>> with mindspore.hal.StreamCtx(s1):
...     c = mindspore.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
>>> event = mindspore.hal.Event()
>>> s1 = mindspore.hal.Stream()
>>> s2 = mindspore.hal.Stream()
>>> a = mindspore.tensor(mindspore.ops.ones([2, 2]), mindspore.float32)
>>> b = mindspore.tensor(mindspore.ops.ones([2, 2]), mindspore.float32)
>>> with mindspore.hal.StreamCtx(s1):
...     c = mindspore.ops.matmul(a, b)
...     event.record()
>>> event.wait()
>>> d = c + 2
>>> mindspore.hal.synchronize()
>>> print(d)
[[4. 4.]
 [4. 4.]]