You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
graphengine/ge/graph/manager/model_manager/event_manager.cc

84 lines
2.7 KiB

/**
* Copyright 2019-2020 Huawei Technologies Co., Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "graph/manager/model_manager/event_manager.h"
#define RETURN_IF_COND_NOT_MET(condition, ...) \
do { \
if (!(condition)) { \
GELOGE(FAILED, __VA_ARGS__); \
return; \
} \
} while (0);
namespace ge {
Status EventManager::Init(size_t event_num) {
if (this->inited_) {
return SUCCESS;
}
rtEvent_t event = nullptr;
current_idx_ = 0;
for (size_t i = 0; i < event_num; ++i) {
GE_CHK_RT_RET(rtEventCreate(&event));
this->event_list_.push_back(event);
}
this->inited_ = true;
return SUCCESS;
}
void EventManager::Release() noexcept {
for (size_t i = 0; i < this->event_list_.size(); ++i) {
rtError_t rt_ret = rtEventDestroy(this->event_list_[i]);
RETURN_IF_COND_NOT_MET(rt_ret == RT_ERROR_NONE, "Destroy event failed, idx is %zu, ret is 0x%x.", i, rt_ret);
}
this->event_list_.clear();
this->inited_ = false;
}
Status EventManager::EventRecord(size_t event_idx, rtStream_t stream) {
GE_CHK_BOOL_RET_STATUS_NOLOG(this->inited_, INTERNAL_ERROR);
GE_CHK_BOOL_RET_STATUS_NOLOG(event_idx < this->event_list_.size(), PARAM_INVALID);
GE_CHK_RT_RET(rtEventRecord(this->event_list_[event_idx], stream));
current_idx_ = static_cast<uint32_t>(event_idx);
return SUCCESS;
}
Status EventManager::EventElapsedTime(size_t start_event_idx, size_t stop_event_idx, float &time) {
GE_CHK_BOOL_RET_STATUS_NOLOG(this->inited_, INTERNAL_ERROR);
GE_CHK_BOOL_RET_STATUS_NOLOG(start_event_idx < this->event_list_.size() &&
stop_event_idx < this->event_list_.size() && start_event_idx <= stop_event_idx,
PARAM_INVALID);
GE_CHK_RT_RET(rtEventElapsedTime(&time, this->event_list_[start_event_idx], this->event_list_[stop_event_idx]));
return SUCCESS;
}
Status EventManager::GetEvent(uint32_t index, rtEvent_t &event) {
GE_CHK_BOOL_RET_STATUS_NOLOG(index < this->event_list_.size(), PARAM_INVALID);
event = this->event_list_[index];
return SUCCESS;
}
} // namespace ge