Make hipEvent_t thread safe.
Support re-recording of same event by different threads. - Add criticalData structure to hipEvent_t, similar to mechanism used for streams, contexts, device. Events are always locked after streams to avoid deadlock. - ihipEvent_t::locked_copyCrit can be used to copy critical state including marker. The critical state in the event can then be re-recorded. - refactor hipEventElapsedTime. Remmove stale debug code, native signal refs.
Bu işleme şunda yer alıyor:
@@ -93,18 +93,22 @@ hipError_t hipStreamWaitEvent(hipStream_t stream, hipEvent_t event, unsigned int
|
||||
|
||||
hipError_t e = hipSuccess;
|
||||
|
||||
auto ecd = event->locked_copyCrit();
|
||||
|
||||
if (event == nullptr) {
|
||||
e = hipErrorInvalidResourceHandle;
|
||||
|
||||
} else if (event->_state != hipEventStatusUnitialized) {
|
||||
} else if (ecd._state != hipEventStatusUnitialized) {
|
||||
|
||||
if (HIP_SYNC_STREAM_WAIT || (HIP_SYNC_NULL_STREAM && (stream == 0))) {
|
||||
// conservative wait on host for the specified event to complete:
|
||||
event->locked_waitComplete((event->_flags & hipEventBlockingSync) ? hc::hcWaitModeBlocked : hc::hcWaitModeActive);
|
||||
// return _stream->locked_eventWaitComplete(this, waitMode);
|
||||
//
|
||||
ecd._stream->locked_eventWaitComplete(ecd.marker(), (event->_flags & hipEventBlockingSync) ? hc::hcWaitModeBlocked : hc::hcWaitModeActive);
|
||||
} else {
|
||||
stream = ihipSyncAndResolveStream(stream);
|
||||
// This will use create_blocking_marker to wait on the specified queue.
|
||||
stream->locked_streamWaitEvent(event);
|
||||
stream->locked_streamWaitEvent(ecd);
|
||||
}
|
||||
|
||||
} // else event not recorded, return immediately and don't create marker.
|
||||
|
||||
Yeni konuda referans
Bir kullanıcı engelle