已合并
feat:nano支持rtsPointerGetAttributes接口 #4371
feat:nano支持rtsPointerGetAttributes接口 #4371
已合并
maxiaofan创建于 25 天前
10 个文件变更+106-2
@@ -34,6 +34,7 @@ if (${TARGET_SYSTEM_NAME} STREQUAL "Linux")
34 ${BASE_DIR}/include/external/acl34 ${BASE_DIR}/include/external/acl
35 ${BASE_DIR}/include35 ${BASE_DIR}/include
36 ${BASE_DIR}/pkg_inc/base # dlog_pub.h36 ${BASE_DIR}/pkg_inc/base # dlog_pub.h
37+ ${BASE_DIR}/pkg_inc/runtime/runtime/rts
37 )38 )
38 39 
39 target_compile_options(${ASCENDCL_C_COMPILE_TARGET} PRIVATE40 target_compile_options(${ASCENDCL_C_COMPILE_TARGET} PRIVATE
@@ -86,6 +87,7 @@ elseif (${TARGET_SYSTEM_NAME} STREQUAL "LiteOS")
86 ${BASE_DIR}/include/external/acl87 ${BASE_DIR}/include/external/acl
87 ${BASE_DIR}/include88 ${BASE_DIR}/include
88 ${BASE_DIR}/pkg_inc/base # dlog_pub.h89 ${BASE_DIR}/pkg_inc/base # dlog_pub.h
90+ ${BASE_DIR}/pkg_inc/runtime/runtime/rts
89 )91 )
90 92 
91 target_compile_options(${ASCENDCL_C_COMPILE_TARGET} PRIVATE93 target_compile_options(${ASCENDCL_C_COMPILE_TARGET} PRIVATE
@@ -14,6 +14,7 @@
14#include "securec.h"14#include "securec.h"
15#include "runtime/dev.h"15#include "runtime/dev.h"
16#include "runtime/mem.h"16#include "runtime/mem.h"
17+#include "rts_mem.h"
17#include "model_config_rt.h"18#include "model_config_rt.h"
18 19 
19#define ACL_MEMCPY_KIND_DESC_LEN 48U20#define ACL_MEMCPY_KIND_DESC_LEN 48U
@@ -133,6 +134,15 @@ aclError aclrtMemset(void* devPtr, size_t maxCount, int32_t value, size_t count)
133 return rtMemset(devPtr, maxCount, (uint32_t)(value), count);134 return rtMemset(devPtr, maxCount, (uint32_t)(value), count);
134}135}
135 136 
137+aclError aclrtPointerGetAttributes(const void* ptr, aclrtPtrAttributes* attributes)
138+{
139+ if (ptr == NULL || attributes == NULL) {
140+ ACL_LOG_ERROR("%s", ptr == NULL ? "ptr is NULL." : "attributes is NULL.");
141+ return ACL_ERROR_INVALID_PARAM;
142+ }
143+ return rtsPointerGetAttributes(ptr, (rtPtrAttributes_t*)attributes);
144+}
145+ 
136aclError aclrtGetMemInfo(aclrtMemAttr attr, size_t* free, size_t* total)146aclError aclrtGetMemInfo(aclrtMemAttr attr, size_t* free, size_t* total)
137{147{
138 if (free == NULL || total == NULL) {148 if (free == NULL || total == NULL) {
@@ -16,6 +16,7 @@
16#include "securec.h"16#include "securec.h"
17#include "ref_obj.h"17#include "ref_obj.h"
18#include "rt_ctrl_model.h"18#include "rt_ctrl_model.h"
19+#include "rts_mem.h"
19 20 
20#if defined(__cplusplus)21#if defined(__cplusplus)
21extern "C" {22extern "C" {
@@ -86,6 +87,14 @@ rtError_t rtFree(void* devPtr)
86 return ACL_RT_SUCCESS;87 return ACL_RT_SUCCESS;
87}88}
88 89 
90+rtError_t rtsPointerGetAttributes(const void* ptr, rtPtrAttributes_t* attributes)
Y
Yyanhaiyan24 天前

这个函数名称命名和常规的rt接口命名不一样,请确认是否OK

likedislike
maxiaofan
23 天前 评论:
zhangpengpeng8
20 天前 评论:
91+{
92+ (void)memset_s(attributes, sizeof(*attributes), 0, sizeof(*attributes));
93+ const drvMemType_t type = halMemGetType(ptr);
94+ attributes->location.type = (type == DRV_MEMTYPE_HOST) ? RT_MEMORY_LOC_HOST : RT_MEMORY_LOC_DEVICE;
Y
Yyanhaiyan24 天前

location.id是设备ID,清零后未赋值,请确认是否OK

likedislike
maxiaofan
23 天前 评论:
zhangpengpeng8
20 天前 评论:
95+ return ACL_RT_SUCCESS;
Y
Yyanhaiyan24 天前

获取完类型后,是否打印个INFO或者DEBUG日志显示是什么类型?

likedislike
maxiaofan
23 天前 评论:
96+}
97+ 
89rtError_t rtMemset(void* devPtr, uint64_t destMax, uint32_t val, uint64_t cnt)98rtError_t rtMemset(void* devPtr, uint64_t destMax, uint32_t val, uint64_t cnt)
90{99{
91 drvError_t error = halMemset((DVdeviceptr)(uintptr_t)devPtr, destMax, (uint8_t)val, cnt);100 drvError_t error = halMemset((DVdeviceptr)(uintptr_t)devPtr, destMax, (uint8_t)val, cnt);
@@ -891,6 +891,15 @@ extern drvError_t halHostMemAlloc(void** pp, unsigned long long size, unsigned l
891 */891 */
892extern drvError_t halHostMemFree(void* p);892extern drvError_t halHostMemFree(void* p);
893 893 
894+typedef enum tagDrvMemType { DRV_MEMTYPE_HOST, DRV_MEMTYPE_DEVICE } drvMemType_t;
895+ 
896+/**
897+ * @brief Get the memory location type for an address.
898+ * @param [in] p Memory address.
899+ * @return Memory location type.
900+ */
901+extern drvMemType_t halMemGetType(const void* p);
902+ 
894/* 功能说明: NPU驱动全局公共资源初始化,仅能调用一次包括:903/* 功能说明: NPU驱动全局公共资源初始化,仅能调用一次包括:
895 * 1) 规格类配置:如sq队列数、支持的模型执行描述符数目、模型描述符数目等904 * 1) 规格类配置:如sq队列数、支持的模型执行描述符数目、模型描述符数目等
896 2) 公共资源池初始化:ModelExecDesc、ModelDesc初始化905 2) 公共资源池初始化:ModelExecDesc、ModelDesc初始化
@@ -58,6 +58,7 @@ target_include_directories(ascendcl_c_utest PRIVATE
58 ${BASE_DIR}/src/acl/aclrt_c/common58 ${BASE_DIR}/src/acl/aclrt_c/common
59 ${BASE_DIR}/pkg_inc/runtime # runtime/mem.h,runtime/base.h59 ${BASE_DIR}/pkg_inc/runtime # runtime/mem.h,runtime/base.h
60 ${BASE_DIR}/pkg_inc/runtime/runtime # base.h60 ${BASE_DIR}/pkg_inc/runtime/runtime # base.h
61+ ${BASE_DIR}/pkg_inc/runtime/runtime/rts # rts_mem.h
61 ${BASE_DIR}/src/runtime_compact/c_base/inc62 ${BASE_DIR}/src/runtime_compact/c_base/inc
62 ${BASE_DIR}/src/acl/aclrt_c/common # ge_executor_rt.h63 ${BASE_DIR}/src/acl/aclrt_c/common # ge_executor_rt.h
63 ${BASE_DIR}/tests/ut/acl/testcase_c/64 ${BASE_DIR}/tests/ut/acl/testcase_c/
@@ -863,6 +863,37 @@ TEST_F(AclRtTest, aclrtMemcpy_normal_ToDevice)
863 EXPECT_EQ(ret, ACL_SUCCESS);863 EXPECT_EQ(ret, ACL_SUCCESS);
864}864}
865 865 
866+TEST_F(AclRtTest, aclrtPointerGetAttributes_success)
867+{
868+ void* ptr = reinterpret_cast<void*>(0x01);
869+ aclrtPtrAttributes attributes = {};
870+ EXPECT_CALL(RuntimeStubMock::GetInstance(), rtsPointerGetAttributes(ptr, _)).WillOnce(Return(RT_ERROR_NONE));
871+ 
872+ const aclError ret = aclrtPointerGetAttributes(ptr, &attributes);
873+ EXPECT_EQ(ret, ACL_SUCCESS);
874+}
875+ 
876+TEST_F(AclRtTest, aclrtPointerGetAttributes_nullptr)
877+{
878+ void* ptr = reinterpret_cast<void*>(0x01);
879+ aclrtPtrAttributes attributes = {};
880+ 
881+ aclError ret = aclrtPointerGetAttributes(NULL, &attributes);
882+ EXPECT_EQ(ret, ACL_ERROR_INVALID_PARAM);
883+ ret = aclrtPointerGetAttributes(ptr, NULL);
884+ EXPECT_EQ(ret, ACL_ERROR_INVALID_PARAM);
885+}
886+ 
887+TEST_F(AclRtTest, aclrtPointerGetAttributes_rtsFailed)
888+{
889+ void* ptr = reinterpret_cast<void*>(0x01);
890+ aclrtPtrAttributes attributes = {};
891+ EXPECT_CALL(RuntimeStubMock::GetInstance(), rtsPointerGetAttributes(ptr, _)).WillOnce(Return(ACL_ERROR_RT_FAILURE));
892+ 
893+ const aclError ret = aclrtPointerGetAttributes(ptr, &attributes);
894+ EXPECT_EQ(ret, ACL_ERROR_RT_FAILURE);
895+}
896+ 
866TEST_F(AclRtTest, aclrtGetMemInfo_ParamNULL)897TEST_F(AclRtTest, aclrtGetMemInfo_ParamNULL)
867{898{
868 size_t free;899 size_t free;
@@ -203,6 +203,11 @@ rtError_t rtStreamCreateWithConfig(rtStream_t* stream, rtStreamConfigHandle* han
203 return RuntimeStubMock::GetInstance().rtStreamCreateWithConfig(stream, handle);203 return RuntimeStubMock::GetInstance().rtStreamCreateWithConfig(stream, handle);
204}204}
205 205 
206+rtError_t rtsPointerGetAttributes(const void* ptr, rtPtrAttributes_t* attributes)
207+{
208+ return RuntimeStubMock::GetInstance().rtsPointerGetAttributes(ptr, attributes);
209+}
210+ 
206rtError_t rtGetRunMode_Device_Normal_Invoke(rtRunMode* mode)211rtError_t rtGetRunMode_Device_Normal_Invoke(rtRunMode* mode)
207{212{
208 *mode = RT_RUN_MODE_OFFLINE;213 *mode = RT_RUN_MODE_OFFLINE;
@@ -14,6 +14,7 @@
14#include "runtime/base.h"14#include "runtime/base.h"
15#include "runtime/mem.h"15#include "runtime/mem.h"
16#include "runtime/rt.h"16#include "runtime/rt.h"
17+#include "rts_mem.h"
17#include "acl_base.h"18#include "acl_base.h"
18#include "acl_rt.h"19#include "acl_rt.h"
19 20 
@@ -36,7 +37,8 @@ public:
36 MOCK_METHOD1(rtCtxGetCurrent, rtError_t(rtContext_t* ctx));37 MOCK_METHOD1(rtCtxGetCurrent, rtError_t(rtContext_t* ctx));
37 MOCK_METHOD1(rtGetRunMode, rtError_t(rtRunMode* mode));38 MOCK_METHOD1(rtGetRunMode, rtError_t(rtRunMode* mode));
38 MOCK_METHOD2(rtStreamCreateWithConfig, rtError_t(rtStream_t* stream, rtStreamConfigHandle* handle));39 MOCK_METHOD2(rtStreamCreateWithConfig, rtError_t(rtStream_t* stream, rtStreamConfigHandle* handle));
40+ MOCK_METHOD2(rtsPointerGetAttributes, rtError_t(const void* ptr, rtPtrAttributes_t* attributes));
39};41};
40 42 
41rtError_t rtGetRunMode_Device_Normal_Invoke(rtRunMode* mode);43rtError_t rtGetRunMode_Device_Normal_Invoke(rtRunMode* mode);
42-#endif44+#endif
@@ -125,3 +125,11 @@ drvError_t halSqUnSubscribeTid(uint8_t devId, uint8_t sqId, uint8_t type) { retu
125drvError_t halSqResume(uint8_t devId, int32_t sqid) { return DRV_ERROR_NONE; }125drvError_t halSqResume(uint8_t devId, int32_t sqid) { return DRV_ERROR_NONE; }
126 126 
127drvError_t halHostFuncWait(int32_t timeout, int64_t tid) { return DRV_ERROR_NONE; }127drvError_t halHostFuncWait(int32_t timeout, int64_t tid) { return DRV_ERROR_NONE; }
128+ 
129+drvMemType_t g_halMemTypeForTest = DRV_MEMTYPE_DEVICE;
130+ 
131+drvMemType_t halMemGetType(const void* p)
132+{
133+ (void)p;
134+ return g_halMemTypeForTest;
135+}
@@ -14,6 +14,7 @@
14#include "mockcpp/mockcpp.hpp"14#include "mockcpp/mockcpp.hpp"
15#include "securec.h"15#include "securec.h"
16#include "rt.h"16#include "rt.h"
17+#include "rts_mem.h"
17#include "hal_ts.h"18#include "hal_ts.h"
18#include "error_codes/rt_error_codes.h"19#include "error_codes/rt_error_codes.h"
19#include "rt_ctrl_model.h"20#include "rt_ctrl_model.h"
@@ -25,6 +26,8 @@ using namespace testing;
25#define LINUX 026#define LINUX 0
26#define LITEOS 127#define LITEOS 1
27 28 
29+extern drvMemType_t g_halMemTypeForTest;
30+ 
28class ApiCTest : public testing::Test {31class ApiCTest : public testing::Test {
29protected:32protected:
30 void SetUp() { MOCKER(GetMemPoolReuseFlag).stubs().will(returnValue(true)); }33 void SetUp() { MOCKER(GetMemPoolReuseFlag).stubs().will(returnValue(true)); }
@@ -1390,4 +1393,28 @@ TEST_F(ApiCTest, runtime_rtProcessHostFunc)
1390 1393 
1391 error = rtProcessHostFunc(timeout);1394 error = rtProcessHostFunc(timeout);
1392 EXPECT_EQ(error, ACL_ERROR_RT_REPORT_TIMEOUT);1395 EXPECT_EQ(error, ACL_ERROR_RT_REPORT_TIMEOUT);
1393-}1396+}
1397+ 
1398+TEST_F(ApiCTest, runtime_rtsPointerGetAttributes)
1399+{
1400+ uint8_t address = 0U;
1401+ rtPtrAttributes_t attributes = {};
1402+ 
1403+ g_halMemTypeForTest = DRV_MEMTYPE_HOST;
1404+ EXPECT_EQ(rtsPointerGetAttributes(&address, &attributes), RT_ERROR_NONE);
1405+ EXPECT_EQ(attributes.location.type, RT_MEMORY_LOC_HOST);
1406+ EXPECT_EQ(attributes.location.id, 0U);
1407+ EXPECT_EQ(attributes.pageSize, 0U);
1408+ 
1409+ EXPECT_EQ(rtInit(), RT_ERROR_NONE);
1410+ rtContext_t context = nullptr;
1411+ EXPECT_EQ(rtCtxCreateEx(&context, 0U, 0), RT_ERROR_NONE);
1412+ 
1413+ g_halMemTypeForTest = DRV_MEMTYPE_DEVICE;
1414+ EXPECT_EQ(rtsPointerGetAttributes(&address, &attributes), RT_ERROR_NONE);
1415+ EXPECT_EQ(attributes.location.type, RT_MEMORY_LOC_DEVICE);
1416+ EXPECT_EQ(attributes.location.id, 0U);
1417+ 
1418+ EXPECT_EQ(rtCtxDestroyEx(context), RT_ERROR_NONE);
1419+ rtDeinit();
1420+}