mindspore.hal.Event
- class mindspore.hal.Event(enable_timing=False, blocking=False)[source]
Wrapper around a device event.
Device events are synchronization markers that can be used to monitor the device’s progress, to accurately measure timing, and to synchronize device streams.
The underlying device events are lazily initialized when the event is first recorded.
- Parameters
Examples
>>> 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)[source]
Returns the time elapsed in milliseconds after the event was recorded and before the end_event was recorded.
- Parameters
end_event (Event) – end event.
- Returns
float, the time elapsed in milliseconds.
- Raises
TypeError – If 'end_event' is not a
mindspore.hal.Event
.
- query()[source]
Checks if all work currently captured by event has completed.
- Returns
A boolean indicating if all work currently captured by event has completed.
Examples
>>> 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)[source]
Records the event in a given stream.
Uses
mindspore.hal.current_stream()
if no stream is specified. The stream's device must match the event's device.- Parameters
stream (Stream, optional) – a stream to record. If this argument is
None
, current stream will be used. Default value:None
.- Raises
TypeError – If 'stream' is neither a
mindspore.hal.Stream
nor aNone
.
- synchronize()[source]
Waits for the event to complete.
Waits until the completion of all work currently captured in this event. This prevents the CPU thread from proceeding until the event completes.
- wait(stream=None)[source]
Makes all future work submitted to the given stream wait for this event.
Use
mindspore.hal.current_stream()
if no stream is specified.- Parameters
stream (Stream, optional) – a stream to record. If this argument is
None
, current stream will be used. Default value:None
.- Raises
TypeError – If 'stream' is neither a
mindspore.hal.Stream
nor aNone
.
Examples
>>> 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.]]