已合并
feat:nano支持rtsPointerGetAttributes接口 #4371
maxiaofan创建于 25 天前
feat:nano支持rtsPointerGetAttributes接口 #4371
已合并
共 10 个文件变更+106-2
| @@ -34,6 +34,7 @@ if (${TARGET_SYSTEM_NAME} STREQUAL "Linux") | |||
| 34 | ${BASE_DIR}/include/external/acl | 34 | ${BASE_DIR}/include/external/acl |
| 35 | ${BASE_DIR}/include | 35 | ${BASE_DIR}/include |
| 36 | ${BASE_DIR}/pkg_inc/base # dlog_pub.h | 36 | ${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} PRIVATE | 40 | target_compile_options(${ASCENDCL_C_COMPILE_TARGET} PRIVATE |
| @@ -86,6 +87,7 @@ elseif (${TARGET_SYSTEM_NAME} STREQUAL "LiteOS") | |||
| 86 | ${BASE_DIR}/include/external/acl | 87 | ${BASE_DIR}/include/external/acl |
| 87 | ${BASE_DIR}/include | 88 | ${BASE_DIR}/include |
| 88 | ${BASE_DIR}/pkg_inc/base # dlog_pub.h | 89 | ${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} PRIVATE | 93 | target_compile_options(${ASCENDCL_C_COMPILE_TARGET} PRIVATE |
| @@ -14,6 +14,7 @@ | |||
| 14 | 14 | ||
| 15 | 15 | ||
| 16 | 16 | ||
| 17 | + | ||
| 17 | 18 | ||
| 18 | 19 | ||
| 19 | 20 | ||
| @@ -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 | + | ||
| 136 | aclError aclrtGetMemInfo(aclrtMemAttr attr, size_t* free, size_t* total) | 146 | aclError 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 | 16 | ||
| 17 | 17 | ||
| 18 | 18 | ||
| 19 | + | ||
| 19 | 20 | ||
| 20 | 21 | ||
| 21 | extern "C" { | 22 | extern "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 | |||
| 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; | ||
| 95 | + return ACL_RT_SUCCESS; | ||
| 96 | +} | ||
| 97 | + | ||
| 89 | rtError_t rtMemset(void* devPtr, uint64_t destMax, uint32_t val, uint64_t cnt) | 98 | rtError_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 | */ |
| 892 | extern drvError_t halHostMemFree(void* p); | 892 | extern 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/common | 58 | ${BASE_DIR}/src/acl/aclrt_c/common |
| 59 | ${BASE_DIR}/pkg_inc/runtime # runtime/mem.h,runtime/base.h | 59 | ${BASE_DIR}/pkg_inc/runtime # runtime/mem.h,runtime/base.h |
| 60 | ${BASE_DIR}/pkg_inc/runtime/runtime # base.h | 60 | ${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/inc | 62 | ${BASE_DIR}/src/runtime_compact/c_base/inc |
| 62 | ${BASE_DIR}/src/acl/aclrt_c/common # ge_executor_rt.h | 63 | ${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 | + | ||
| 866 | TEST_F(AclRtTest, aclrtGetMemInfo_ParamNULL) | 897 | TEST_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 | + | ||
| 206 | rtError_t rtGetRunMode_Device_Normal_Invoke(rtRunMode* mode) | 211 | rtError_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 | 14 | ||
| 15 | 15 | ||
| 16 | 16 | ||
| 17 | + | ||
| 17 | 18 | ||
| 18 | 19 | ||
| 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 | ||
| 41 | rtError_t rtGetRunMode_Device_Normal_Invoke(rtRunMode* mode); | 43 | rtError_t rtGetRunMode_Device_Normal_Invoke(rtRunMode* mode); |
| 42 | -#endif | 44 | +#endif |
| @@ -125,3 +125,11 @@ drvError_t halSqUnSubscribeTid(uint8_t devId, uint8_t sqId, uint8_t type) { retu | |||
| 125 | drvError_t halSqResume(uint8_t devId, int32_t sqid) { return DRV_ERROR_NONE; } | 125 | drvError_t halSqResume(uint8_t devId, int32_t sqid) { return DRV_ERROR_NONE; } |
| 126 | 126 | ||
| 127 | drvError_t halHostFuncWait(int32_t timeout, int64_t tid) { return DRV_ERROR_NONE; } | 127 | drvError_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 | 14 | ||
| 15 | 15 | ||
| 16 | 16 | ||
| 17 | + | ||
| 17 | 18 | ||
| 18 | 19 | ||
| 19 | 20 | ||
| @@ -25,6 +26,8 @@ using namespace testing; | |||
| 25 | 26 | ||
| 26 | 27 | ||
| 27 | 28 | ||
| 29 | +extern drvMemType_t g_halMemTypeForTest; | ||
| 30 | + | ||
| 28 | class ApiCTest : public testing::Test { | 31 | class ApiCTest : public testing::Test { |
| 29 | protected: | 32 | protected: |
| 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 | +} | ||


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