Line data Source code
1 : /**
2 : * Copyright (c) 2025 Huawei Technologies Co., Ltd.
3 : * This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4 : * CANN Open Software License Agreement Version 2.0 (the "License").
5 : * Please refer to the License for details. You may not use this file except in compliance with the License.
6 : * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7 : * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8 : * See LICENSE in the root of the software repository for the full text of the License.
9 : */
10 :
11 : #include <unordered_map>
12 : #include "acl_rt_impl.h"
13 :
14 : #include "runtime/stream.h"
15 : #include "runtime/rts/rts_stream.h"
16 : #include "runtime/rt_inner_stream.h"
17 :
18 : #include "common/log_inner.h"
19 : #include "common/error_codes_inner.h"
20 : #include "common/prof_reporter.h"
21 : #include "common/resource_statistics.h"
22 :
23 : namespace {
24 : std::unordered_map<rtError_t, const char*> succStmSyncErrCodes = {
25 : {ACL_ERROR_RT_END_OF_SEQUENCE, "end of sequence"},
26 : {ACL_ERROR_RT_MODEL_ABORT_NORMAL, "model abort normal"},
27 : {ACL_ERROR_RT_AICORE_OVER_FLOW, "aicore overflow"},
28 : {ACL_ERROR_RT_AIVEC_OVER_FLOW, "aivec overflow"},
29 : {ACL_ERROR_RT_OVER_FLOW, "overflow"},
30 : {ACL_ERROR_RT_SOCKET_CLOSE, "socket close"}};
31 : }
32 :
33 : #ifdef __cplusplus
34 : extern "C" {
35 : #endif
36 :
37 11 : aclError aclrtCreateStreamImpl(aclrtStream* stream)
38 : {
39 11 : ACL_PROFILING_REG(acl::AclProfType::AclrtCreateStream);
40 11 : ACL_ADD_APPLY_TOTAL_COUNT(acl::ACL_STATISTICS_CREATE_DESTROY_STREAM);
41 11 : ACL_LOG_INFO("start to execute aclrtCreateStream");
42 11 : ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(stream);
43 :
44 8 : rtStream_t rtStream = nullptr;
45 8 : ACL_REQUIRES_RTS_OK(rtStreamCreate(&rtStream, static_cast<int32_t>(RT_STREAM_PRIORITY_DEFAULT)));
46 :
47 5 : *stream = static_cast<aclrtStream>(rtStream);
48 5 : ACL_ADD_APPLY_SUCCESS_COUNT(acl::ACL_STATISTICS_CREATE_DESTROY_STREAM);
49 5 : return ACL_SUCCESS;
50 11 : }
51 :
52 9 : aclError aclrtCreateStreamWithConfigImpl(aclrtStream* stream, uint32_t priority, uint32_t flag)
53 : {
54 9 : ACL_PROFILING_REG(acl::AclProfType::AclrtCreateStreamWithConfig);
55 9 : ACL_ADD_APPLY_TOTAL_COUNT(acl::ACL_STATISTICS_CREATE_DESTROY_STREAM);
56 9 : ACL_LOG_INFO("start to execute aclrtCreateStreamWithConfig with priority:%u, flag:%u", priority, flag);
57 9 : ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(stream);
58 :
59 8 : uint32_t streamFlag = 0U;
60 8 : if ((flag & ACL_STREAM_FAST_LAUNCH) != 0U) {
61 2 : streamFlag |= RT_STREAM_FAST_LAUNCH;
62 : }
63 8 : if ((flag & ACL_STREAM_FAST_SYNC) != 0U) {
64 1 : streamFlag |= RT_STREAM_FAST_SYNC;
65 : }
66 8 : if ((flag & ACL_STREAM_PERSISTENT) != 0U) {
67 1 : streamFlag |= RT_STREAM_PERSISTENT;
68 : }
69 8 : if ((flag & ACL_STREAM_HUGE) != 0U) {
70 1 : streamFlag |= RT_STREAM_HUGE;
71 : }
72 8 : if ((flag & ACL_STREAM_CPU_SCHEDULE) != 0U) {
73 1 : streamFlag |= RT_STREAM_CPU_SCHEDULE;
74 : }
75 8 : if ((flag & ACL_STREAM_DEVICE_USE_ONLY) != 0U) {
76 3 : streamFlag |= RT_STREAM_CP_PROCESS_USE;
77 : }
78 :
79 8 : rtStream_t rtStream = nullptr;
80 8 : constexpr size_t numAttrs = 2;
81 : rtStreamCreateAttr_t attrs[numAttrs];
82 8 : attrs[0].id = RT_STREAM_CREATE_ATTR_PRIORITY;
83 8 : attrs[0].value.priority = priority;
84 8 : attrs[1].id = RT_STREAM_CREATE_ATTR_FLAGS;
85 8 : attrs[1].value.flags = streamFlag;
86 8 : rtStreamCreateConfig_t config = {attrs, numAttrs};
87 8 : ACL_REQUIRES_RTS_OK(rtsStreamCreate(&rtStream, &config));
88 :
89 8 : *stream = static_cast<aclrtStream>(rtStream);
90 8 : ACL_ADD_APPLY_SUCCESS_COUNT(acl::ACL_STATISTICS_CREATE_DESTROY_STREAM);
91 8 : return ACL_SUCCESS;
92 9 : }
93 :
94 6 : aclError aclrtDestroyStreamImpl(aclrtStream stream)
95 : {
96 6 : ACL_PROFILING_REG(acl::AclProfType::AclrtDestroyStream);
97 6 : ACL_ADD_RELEASE_TOTAL_COUNT(acl::ACL_STATISTICS_CREATE_DESTROY_STREAM);
98 6 : ACL_LOG_INFO("start to execute aclrtDestroyStream");
99 6 : ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(stream);
100 :
101 4 : ACL_REQUIRES_RTS_OK(rtStreamDestroy(static_cast<rtStream_t>(stream)));
102 2 : ACL_LOG_INFO("aclrtDestroyStream success");
103 2 : ACL_ADD_RELEASE_SUCCESS_COUNT(acl::ACL_STATISTICS_CREATE_DESTROY_STREAM);
104 2 : return ACL_SUCCESS;
105 6 : }
106 :
107 6 : aclError aclrtDestroyStreamForceImpl(aclrtStream stream)
108 : {
109 6 : ACL_PROFILING_REG(acl::AclProfType::AclrtDestroyStreamForce);
110 6 : ACL_ADD_RELEASE_TOTAL_COUNT(acl::ACL_STATISTICS_CREATE_DESTROY_STREAM);
111 6 : ACL_LOG_INFO("start to execute aclrtDestroyStreamForce");
112 6 : ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(stream);
113 :
114 4 : ACL_REQUIRES_RTS_OK(rtStreamDestroyForce(static_cast<rtStream_t>(stream)));
115 2 : ACL_LOG_INFO("aclrtDestroyStreamForce success");
116 2 : ACL_ADD_RELEASE_SUCCESS_COUNT(acl::ACL_STATISTICS_CREATE_DESTROY_STREAM);
117 2 : return ACL_SUCCESS;
118 6 : }
119 :
120 7 : aclError aclrtSynchronizeStreamImpl(aclrtStream stream)
121 : {
122 7 : ACL_PROFILING_REG(acl::AclProfType::AclrtSynchronizeStream);
123 :
124 7 : const rtError_t rtErr = rtStreamSynchronize(static_cast<rtStream_t>(stream));
125 7 : if (rtErr != RT_ERROR_NONE) {
126 3 : const auto it = succStmSyncErrCodes.find(rtErr);
127 3 : if (it != succStmSyncErrCodes.cend()) {
128 1 : ACL_LOG_INFO("Synchronize stream success, err = %d, desc = %s", static_cast<int32_t>(rtErr), it->second);
129 : }
130 3 : return ACL_GET_ERRCODE_RTS(rtErr);
131 : }
132 :
133 4 : return ACL_SUCCESS;
134 7 : }
135 :
136 7 : aclError aclrtSynchronizeStreamWithTimeoutImpl(aclrtStream stream, int32_t timeout)
137 : {
138 7 : ACL_PROFILING_REG(acl::AclProfType::AclrtSynchronizeStreamWithTimeout);
139 7 : constexpr int32_t defaultTimeout = -1;
140 7 : if (timeout < defaultTimeout) {
141 1 : ACL_LOG_CALL_ERROR("the timeout of synchronize stream is invalid");
142 1 : const std::string timeoutVal = std::to_string(timeout);
143 1 : std::string funcName = acl::AclErrorLogManager::GetFuncNameWithoutImplSuffix(__func__);
144 1 : acl::AclErrorLogManager::ReportInputError(
145 2 : acl::INVALID_VALUE_MSG, std::vector<const char*>({"func", "value", "param", "expect"}),
146 2 : std::vector<const char*>({funcName.c_str(), timeoutVal.c_str(), "timeout", "[-1, INT_MAX]"}));
147 1 : return ACL_ERROR_RT_PARAM_INVALID;
148 1 : }
149 6 : const rtError_t rtErr = rtStreamSynchronizeWithTimeout(static_cast<rtStream_t>(stream), timeout);
150 6 : if (rtErr == ACL_ERROR_RT_STREAM_SYNC_TIMEOUT) {
151 1 : return ACL_ERROR_RT_STREAM_SYNC_TIMEOUT;
152 : }
153 5 : if (rtErr != RT_ERROR_NONE) {
154 2 : const auto it = succStmSyncErrCodes.find(rtErr);
155 2 : if (it != succStmSyncErrCodes.cend()) {
156 1 : ACL_LOG_INFO(
157 : "synchronize stream with timeout success, err = %d, desc = %s", static_cast<int32_t>(rtErr),
158 : it->second);
159 : }
160 2 : return ACL_GET_ERRCODE_RTS(rtErr);
161 : }
162 :
163 3 : return ACL_SUCCESS;
164 7 : }
165 :
166 4 : aclError aclrtStreamQueryImpl(aclrtStream stream, aclrtStreamStatus* status)
167 : {
168 4 : ACL_PROFILING_REG(acl::AclProfType::AclrtStreamQuery);
169 4 : ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(status);
170 :
171 3 : const rtError_t rtErr = rtStreamQuery(static_cast<rtStream_t>(stream));
172 3 : if (rtErr == RT_ERROR_NONE) {
173 1 : *status = ACL_STREAM_STATUS_COMPLETE;
174 2 : } else if (rtErr == ACL_ERROR_RT_STREAM_NOT_COMPLETE) {
175 1 : *status = ACL_STREAM_STATUS_NOT_READY;
176 : } else {
177 1 : return ACL_GET_ERRCODE_RTS(rtErr);
178 : }
179 :
180 2 : return ACL_SUCCESS;
181 4 : }
182 :
183 4 : aclError aclrtStreamGetPriorityImpl(aclrtStream stream, uint32_t* priority)
184 : {
185 4 : ACL_PROFILING_REG(acl::AclProfType::AclrtStreamGetPriority);
186 4 : ACL_LOG_INFO("start to execute aclrtStreamGetPriority");
187 4 : ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(priority);
188 3 : rtStream_t rtStream = static_cast<rtStream_t>(stream);
189 3 : uint32_t prio = 0U;
190 3 : ACL_REQUIRES_RTS_OK(rtStreamGetPriority(rtStream, &prio));
191 2 : *priority = prio;
192 2 : ACL_LOG_INFO("successfully execute aclrtStreamGetPriority, priority is %u", *priority);
193 2 : return ACL_SUCCESS;
194 4 : }
195 :
196 4 : aclError aclrtStreamGetFlagsImpl(aclrtStream stream, uint32_t* flags)
197 : {
198 4 : ACL_PROFILING_REG(acl::AclProfType::AclrtStreamGetFlags);
199 4 : ACL_LOG_INFO("start to execute aclrtStreamGetFlags");
200 4 : ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(flags);
201 3 : rtStream_t rtStream = static_cast<rtStream_t>(stream);
202 3 : uint32_t rtFlags = 0U;
203 3 : ACL_REQUIRES_RTS_OK(rtStreamGetFlags(rtStream, &rtFlags));
204 2 : uint32_t aclFlags = 0U;
205 2 : if ((rtFlags & RT_STREAM_FAST_LAUNCH) != 0U) {
206 1 : aclFlags |= ACL_STREAM_FAST_LAUNCH;
207 : }
208 2 : if ((rtFlags & RT_STREAM_FAST_SYNC) != 0U) {
209 0 : aclFlags |= ACL_STREAM_FAST_SYNC;
210 : }
211 2 : if ((rtFlags & RT_STREAM_PERSISTENT) != 0U) {
212 0 : aclFlags |= ACL_STREAM_PERSISTENT;
213 : }
214 2 : if ((rtFlags & RT_STREAM_HUGE) != 0U) {
215 0 : aclFlags |= ACL_STREAM_HUGE;
216 : }
217 2 : if ((rtFlags & RT_STREAM_CPU_SCHEDULE) != 0U) {
218 0 : aclFlags |= ACL_STREAM_CPU_SCHEDULE;
219 : }
220 2 : if ((rtFlags & RT_STREAM_CP_PROCESS_USE) != 0U) {
221 0 : aclFlags |= ACL_STREAM_DEVICE_USE_ONLY;
222 : }
223 2 : *flags = aclFlags;
224 2 : ACL_LOG_INFO("successfully execute aclrtStreamGetFlags, rtFlags is %#x, aclFlags is %#x", rtFlags, *flags);
225 2 : return ACL_SUCCESS;
226 4 : }
227 :
228 6 : aclError aclrtStreamWaitEventImpl(aclrtStream stream, aclrtEvent event)
229 : {
230 6 : ACL_PROFILING_REG(acl::AclProfType::AclrtStreamWaitEvent);
231 6 : ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(event);
232 :
233 6 : ACL_REQUIRES_RTS_OK(rtStreamWaitEvent(static_cast<rtStream_t>(stream), static_cast<rtEvent_t>(event)));
234 :
235 4 : return ACL_SUCCESS;
236 6 : }
237 :
238 6 : aclError aclrtStreamWaitEventWithFlagImpl(aclrtStream stream, aclrtEvent event, uint32_t timeout, uint32_t flag)
239 : {
240 6 : ACL_PROFILING_REG(acl::AclProfType::AclrtStreamWaitEventWithFlag);
241 6 : ACL_LOG_INFO("start to execute aclrtStreamWaitEventWithFlag");
242 6 : ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(event);
243 8 : ACL_CHECK_INVALID_VALUE_WITH_EXPECT_RET(
244 : (flag == ACL_EVENT_WAIT_DEFAULT) || (flag == ACL_EVENT_WAIT_EXTERNAL), flag,
245 : "ACL_EVENT_WAIT_DEFAULT or ACL_EVENT_WAIT_EXTERNAL", ACL_ERROR_INVALID_PARAM);
246 :
247 4 : if (flag == ACL_EVENT_WAIT_EXTERNAL) {
248 6 : ACL_CHECK_INVALID_VALUE_WITH_EXPECT_RET(
249 : timeout == 0U, timeout, "0 when flag is ACL_EVENT_WAIT_EXTERNAL", ACL_ERROR_INVALID_PARAM);
250 : }
251 :
252 3 : ACL_REQUIRES_RTS_OK(
253 : rtStreamWaitEventWithFlag(static_cast<rtStream_t>(stream), static_cast<rtEvent_t>(event), timeout, flag));
254 2 : return ACL_SUCCESS;
255 6 : }
256 :
257 8 : aclError aclrtSetStreamFailureModeImpl(aclrtStream stream, uint64_t mode)
258 : {
259 8 : ACL_PROFILING_REG(acl::AclProfType::AclrtSetStreamFailureMode);
260 8 : ACL_LOG_INFO("start to execute aclrtSetStreamFailureMode, mode is %lu", mode);
261 8 : ACL_REQUIRES_RTS_OK(rtStreamSetMode(static_cast<rtStream_t>(stream), mode));
262 4 : ACL_LOG_INFO("successfully execute aclrtSetStreamFailureMode, mode is %lu", mode);
263 4 : return ACL_SUCCESS;
264 8 : }
265 :
266 2 : aclError aclrtGetStreamOverflowSwitchImpl(aclrtStream stream, uint32_t* flag)
267 : {
268 2 : ACL_LOG_INFO("start to execute aclrtGetStreamOverflowSwitch");
269 2 : ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(flag);
270 2 : ACL_REQUIRES_RTS_OK(rtGetStreamOverflowSwitch(static_cast<rtStream_t>(stream), flag));
271 1 : ACL_LOG_INFO("successfully execute aclrtGetStreamOverflowSwitch, flag is %d.", *flag);
272 1 : return ACL_SUCCESS;
273 : }
274 :
275 2 : aclError aclrtSetStreamOverflowSwitchImpl(aclrtStream stream, uint32_t flag)
276 : {
277 2 : ACL_LOG_INFO("start to execute aclrtSetStreamOverflowSwitch, flag is %u.", flag);
278 2 : ACL_CHECK_INVALID_VALUE_WITH_EXPECT((flag == 0U) || (flag == 1U), flag, "0 or 1");
279 2 : ACL_REQUIRES_RTS_OK(rtSetStreamOverflowSwitch(static_cast<rtStream_t>(stream), flag));
280 1 : ACL_LOG_INFO("successfully execute rtSetStreamOverflowSwitch, flag is %u.", flag);
281 1 : return ACL_SUCCESS;
282 : }
283 :
284 3 : aclError aclrtStreamAbortImpl(aclrtStream stream)
285 : {
286 3 : ACL_PROFILING_REG(acl::AclProfType::AclrtStreamAbort);
287 3 : ACL_LOG_INFO("start to execute aclrtStreamAbort");
288 3 : ACL_REQUIRES_RTS_OK(rtStreamAbort(stream));
289 :
290 2 : ACL_LOG_INFO("successfully execute aclrtStreamAbort");
291 2 : return ACL_SUCCESS;
292 3 : }
293 :
294 2 : aclError aclrtStreamGetIdImpl(aclrtStream stream, int32_t* streamId)
295 : {
296 2 : ACL_PROFILING_REG(acl::AclProfType::AclrtStreamGetId);
297 2 : ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(streamId);
298 2 : ACL_REQUIRES_RTS_OK(rtsStreamGetId(static_cast<rtStream_t>(stream), streamId));
299 1 : return ACL_SUCCESS;
300 2 : }
301 :
302 3 : aclError aclrtGetStreamAvailableNumImpl(uint32_t* streamCount)
303 : {
304 3 : ACL_PROFILING_REG(acl::AclProfType::AclrtGetStreamAvailableNum);
305 3 : ACL_LOG_INFO("start to execute aclrtGetStreamAvailableNum");
306 3 : ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(streamCount);
307 :
308 2 : ACL_REQUIRES_RTS_OK(rtsStreamGetAvailableNum(streamCount));
309 :
310 1 : ACL_LOG_INFO("successfully execute aclrtGetStreamAvailableNum");
311 1 : return ACL_SUCCESS;
312 3 : }
313 :
314 4 : aclError aclrtSetStreamAttributeImpl(aclrtStream stream, aclrtStreamAttr stmAttrType, aclrtStreamAttrValue* value)
315 : {
316 4 : ACL_PROFILING_REG(acl::AclProfType::AclrtSetStreamAttribute);
317 4 : ACL_LOG_INFO("start to execute aclrtSetStreamAttribute, stmAttrType = [%u]", static_cast<uint32_t>(stmAttrType));
318 4 : ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(value);
319 :
320 2 : ACL_REQUIRES_RTS_OK(rtsStreamSetAttribute(
321 : static_cast<rtStream_t>(stream), static_cast<rtStreamAttr>(stmAttrType),
322 : reinterpret_cast<rtStreamAttrValue_t*>(value)));
323 :
324 1 : ACL_LOG_INFO("successfully execute aclrtSetStreamAttribute");
325 1 : return ACL_SUCCESS;
326 4 : }
327 :
328 4 : aclError aclrtGetStreamAttributeImpl(aclrtStream stream, aclrtStreamAttr stmAttrType, aclrtStreamAttrValue* value)
329 : {
330 4 : ACL_PROFILING_REG(acl::AclProfType::AclrtGetStreamAttribute);
331 4 : ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(value);
332 :
333 2 : ACL_REQUIRES_RTS_OK(rtsStreamGetAttribute(
334 : static_cast<rtStream_t>(stream), static_cast<rtStreamAttr>(stmAttrType),
335 : reinterpret_cast<rtStreamAttrValue_t*>(value)));
336 :
337 1 : return ACL_SUCCESS;
338 4 : }
339 :
340 4 : aclError aclrtActiveStreamImpl(aclrtStream activeStream, aclrtStream stream)
341 : {
342 4 : ACL_PROFILING_REG(acl::AclProfType::AclrtActiveStream);
343 4 : ACL_LOG_INFO("start to execute aclrtActiveStream");
344 4 : ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(activeStream);
345 3 : ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(stream);
346 :
347 2 : ACL_REQUIRES_RTS_OK(rtsActiveStream(static_cast<rtStream_t>(activeStream), static_cast<rtStream_t>(stream)));
348 :
349 1 : ACL_LOG_INFO("successfully execute aclrtActiveStream");
350 1 : return ACL_SUCCESS;
351 4 : }
352 :
353 7 : aclError aclrtSwitchStreamImpl(
354 : void* leftValue, aclrtCondition cond, void* rightValue, aclrtCompareDataType dataType, aclrtStream trueStream,
355 : aclrtStream falseStream, aclrtStream stream)
356 : {
357 7 : ACL_PROFILING_REG(acl::AclProfType::AclrtSwitchStream);
358 7 : ACL_LOG_INFO(
359 : "start to execute aclrtSwitchStream, cond is [%u], dataType is [%u]", static_cast<uint32_t>(cond),
360 : static_cast<uint32_t>(dataType));
361 7 : ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(leftValue);
362 6 : ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(rightValue);
363 5 : ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(trueStream);
364 4 : ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(stream);
365 3 : ACL_CHECK_INVALID_PARAM_NO_VALUE(
366 : falseStream == nullptr, "falseStream", "falseStream is a reserved parameter and must be nullptr");
367 :
368 2 : ACL_REQUIRES_RTS_OK(rtsSwitchStream(
369 : leftValue, static_cast<rtCondition_t>(cond), rightValue, static_cast<rtSwitchDataType_t>(dataType),
370 : static_cast<rtStream_t>(trueStream), static_cast<rtStream_t>(falseStream), static_cast<rtStream_t>(stream)));
371 :
372 1 : ACL_LOG_INFO("successfully execute aclrtSwitchStream");
373 1 : return ACL_SUCCESS;
374 7 : }
375 :
376 3 : aclError aclrtStreamStopImpl(aclrtStream stream)
377 : {
378 3 : ACL_PROFILING_REG(acl::AclProfType::AclrtStreamStop);
379 3 : ACL_LOG_INFO("start to execute aclrtStreamStop");
380 :
381 3 : ACL_REQUIRES_RTS_OK(rtsStreamStop(static_cast<rtStream_t>(stream)));
382 2 : ACL_LOG_INFO("successfully execute aclrtStreamStop");
383 2 : return ACL_SUCCESS;
384 3 : }
385 :
386 3 : aclError aclrtPersistentTaskCleanImpl(aclrtStream stream)
387 : {
388 3 : ACL_PROFILING_REG(acl::AclProfType::AclrtPersistentTaskClean);
389 3 : ACL_LOG_INFO("start to execute aclrtPersistentTaskClean");
390 :
391 3 : ACL_REQUIRES_RTS_OK(rtsPersistentTaskClean(static_cast<rtStream_t>(stream)));
392 2 : ACL_LOG_INFO("successfully execute aclrtPersistentTaskClean");
393 2 : return ACL_SUCCESS;
394 3 : }
395 :
396 3 : aclError aclmdlRIGetTasksByStreamImpl(aclrtStream stream, aclmdlRITask* tasks, uint32_t* numTasks)
397 : {
398 3 : ACL_PROFILING_REG(acl::AclProfType::AclmdlRIGetTasksByStream);
399 :
400 3 : ACL_REQUIRES_RTS_OK(rtStreamGetTasks(static_cast<rtStream_t>(stream), static_cast<rtTask_t*>(tasks), numTasks));
401 :
402 1 : return ACL_SUCCESS;
403 3 : }
404 : #ifdef __cplusplus
405 : }
406 : #endif
|