未验证 提交 a06c5afa 编写于 作者: O openharmony_ci 提交者: Gitee

!7127 AI子系统稳定性用例修改

Merge pull request !7127 from 汤石华/monthly_20221018
...@@ -147,6 +147,7 @@ int32_t MockIDevice::IsModelCacheSupported(bool& isSupported) ...@@ -147,6 +147,7 @@ int32_t MockIDevice::IsModelCacheSupported(bool& isSupported)
int32_t MockIDevice::AllocateBuffer(uint32_t length, SharedBuffer &buffer) int32_t MockIDevice::AllocateBuffer(uint32_t length, SharedBuffer &buffer)
{ {
std::lock_guard<std::mutex> lock(m_mtx);
sptr<Ashmem> ashptr = Ashmem::CreateAshmem("allocateBuffer", length); sptr<Ashmem> ashptr = Ashmem::CreateAshmem("allocateBuffer", length);
if (ashptr == nullptr) { if (ashptr == nullptr) {
LOGE("[NNRtTest] Create shared memory failed."); LOGE("[NNRtTest] Create shared memory failed.");
...@@ -170,6 +171,7 @@ int32_t MockIDevice::AllocateBuffer(uint32_t length, SharedBuffer &buffer) ...@@ -170,6 +171,7 @@ int32_t MockIDevice::AllocateBuffer(uint32_t length, SharedBuffer &buffer)
int32_t MockIDevice::ReleaseBuffer(const SharedBuffer &buffer) int32_t MockIDevice::ReleaseBuffer(const SharedBuffer &buffer)
{ {
std::lock_guard<std::mutex> lock(m_mtx);
auto ash = m_ashmems[buffer.fd]; auto ash = m_ashmems[buffer.fd];
ash->UnmapAshmem(); ash->UnmapAshmem();
return HDF_SUCCESS; return HDF_SUCCESS;
...@@ -177,6 +179,7 @@ int32_t MockIDevice::ReleaseBuffer(const SharedBuffer &buffer) ...@@ -177,6 +179,7 @@ int32_t MockIDevice::ReleaseBuffer(const SharedBuffer &buffer)
int32_t MockIDevice::MemoryCopy(float* data, uint32_t length) int32_t MockIDevice::MemoryCopy(float* data, uint32_t length)
{ {
std::lock_guard<std::mutex> lock(m_mtx);
auto memManager = NeuralNetworkRuntime::MemoryManager::GetInstance(); auto memManager = NeuralNetworkRuntime::MemoryManager::GetInstance();
auto memAddress = memManager->MapMemory(m_bufferFd, length); auto memAddress = memManager->MapMemory(m_bufferFd, length);
if (memAddress == nullptr) { if (memAddress == nullptr) {
......
...@@ -98,6 +98,7 @@ private: ...@@ -98,6 +98,7 @@ private:
bool m_cache = true; bool m_cache = true;
bool m_dynamic = true; bool m_dynamic = true;
std::vector<bool> m_operations{true}; std::vector<bool> m_operations{true};
std::mutex m_mtx;
}; };
class MockIPreparedModel : public IPreparedModel { class MockIPreparedModel : public IPreparedModel {
......
...@@ -222,7 +222,9 @@ int ExecuteGraphMock(OH_NNExecutor *executor, const OHNNGraphArgs &graphArgs, ...@@ -222,7 +222,9 @@ int ExecuteGraphMock(OH_NNExecutor *executor, const OHNNGraphArgs &graphArgs,
LOGE("[NNRtTest] OH_NNExecutor_SetOutput failed! ret=%d\n", ret); LOGE("[NNRtTest] OH_NNExecutor_SetOutput failed! ret=%d\n", ret);
return ret; return ret;
} }
ret = device->MemoryCopy(expect, operandTem.length); if(expect!=nullptr){
ret = device->MemoryCopy(expect, operandTem.length);
}
if (ret != OH_NN_SUCCESS) { if (ret != OH_NN_SUCCESS) {
LOGE("[NNRtTest] device set expect output failed! ret=%d\n", ret); LOGE("[NNRtTest] device set expect output failed! ret=%d\n", ret);
return ret; return ret;
......
...@@ -41,21 +41,10 @@ protected: ...@@ -41,21 +41,10 @@ protected:
OHNNGraphArgs graphArgs = addModel.graphArgs; OHNNGraphArgs graphArgs = addModel.graphArgs;
}; };
void CompileModel(OH_NNCompilation *compilation, const OHNNCompileParam &compileParam)
{
ASSERT_EQ(OH_NN_SUCCESS, CompileGraphMock(compilation, compileParam));
}
void ExecuteModel(OH_NNExecutor *executor, const OHNNGraphArgs &graphArgs)
{
float addExpectValue[4] = {0, 1, 2, 3};
ASSERT_EQ(OH_NN_SUCCESS, ExecuteGraphMock(executor, graphArgs, addExpectValue));
}
/** /**
* @tc.number : SUB_AI_NNR_Reliability_North_Stress_0100 * @tc.number : SUB_AI_NNR_Reliability_North_Stress_0100
* @tc.name : 模型编译多线程并发长稳测试 * @tc.name : 模型编译并发长稳测试
* @tc.desc : [C- SOFTWARE -0200] * @tc.desc : [C- SOFTWARE -0200]
*/ */
HWTEST_F(MultiThreadTest, SUB_AI_NNR_Reliability_North_Stress_0100, Reliability | MediumTest | Level2) HWTEST_F(MultiThreadTest, SUB_AI_NNR_Reliability_North_Stress_0100, Reliability | MediumTest | Level2)
...@@ -65,21 +54,11 @@ HWTEST_F(MultiThreadTest, SUB_AI_NNR_Reliability_North_Stress_0100, Reliability ...@@ -65,21 +54,11 @@ HWTEST_F(MultiThreadTest, SUB_AI_NNR_Reliability_North_Stress_0100, Reliability
ASSERT_NE(nullptr, model1); ASSERT_NE(nullptr, model1);
ASSERT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model1, graphArgs)); ASSERT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model1, graphArgs));
OH_NNModel *model2 = OH_NNModel_Construct();
ASSERT_NE(nullptr, model2);
ASSERT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model2, graphArgs));
OH_NNCompilation *compilation1 = OH_NNCompilation_Construct(model1); OH_NNCompilation *compilation1 = OH_NNCompilation_Construct(model1);
ASSERT_NE(nullptr, compilation1); ASSERT_NE(nullptr, compilation1);
OH_NNCompilation *compilation2 = OH_NNCompilation_Construct(model2); ASSERT_EQ(OH_NN_SUCCESS, CompileGraphMock(compilation1, compileParam));
ASSERT_NE(nullptr, compilation2);
std::thread th1(CompileModel, compilation1, compileParam);
std::thread th2(CompileModel, compilation2, compileParam);
th1.join();
th2.join();
Free(model1, compilation1); Free(model1, compilation1);
Free(model2, compilation2);
if (i % PRINT_FREQ == 0) { if (i % PRINT_FREQ == 0) {
printf("[NnrtTest] SUB_AI_NNR_Reliability_North_Stress_0100 times: %d/%d\n", i, STRESS_COUNT); printf("[NnrtTest] SUB_AI_NNR_Reliability_North_Stress_0100 times: %d/%d\n", i, STRESS_COUNT);
} }
...@@ -88,7 +67,7 @@ HWTEST_F(MultiThreadTest, SUB_AI_NNR_Reliability_North_Stress_0100, Reliability ...@@ -88,7 +67,7 @@ HWTEST_F(MultiThreadTest, SUB_AI_NNR_Reliability_North_Stress_0100, Reliability
/** /**
* @tc.number : SUB_AI_NNR_Reliability_North_Stress_0200 * @tc.number : SUB_AI_NNR_Reliability_North_Stress_0200
* @tc.name : 模型推理多线程并发长稳测试 * @tc.name : 模型推理并发长稳测试
* @tc.desc : [C- SOFTWARE -0200] * @tc.desc : [C- SOFTWARE -0200]
*/ */
HWTEST_F(MultiThreadTest, SUB_AI_NNR_Reliability_North_Stress_0200, Reliability | MediumTest | Level2) HWTEST_F(MultiThreadTest, SUB_AI_NNR_Reliability_North_Stress_0200, Reliability | MediumTest | Level2)
...@@ -97,37 +76,19 @@ HWTEST_F(MultiThreadTest, SUB_AI_NNR_Reliability_North_Stress_0200, Reliability ...@@ -97,37 +76,19 @@ HWTEST_F(MultiThreadTest, SUB_AI_NNR_Reliability_North_Stress_0200, Reliability
ASSERT_NE(nullptr, model1); ASSERT_NE(nullptr, model1);
ASSERT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model1, graphArgs)); ASSERT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model1, graphArgs));
OH_NNModel *model2 = OH_NNModel_Construct();
ASSERT_NE(nullptr, model2);
ASSERT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model2, graphArgs));
OH_NNCompilation *compilation1 = OH_NNCompilation_Construct(model1); OH_NNCompilation *compilation1 = OH_NNCompilation_Construct(model1);
ASSERT_NE(nullptr, compilation1); ASSERT_NE(nullptr, compilation1);
ASSERT_EQ(OH_NN_SUCCESS, CompileGraphMock(compilation1, compileParam)); ASSERT_EQ(OH_NN_SUCCESS, CompileGraphMock(compilation1, compileParam));
OH_NNCompilation *compilation2 = OH_NNCompilation_Construct(model2);
ASSERT_NE(nullptr, compilation2);
ASSERT_EQ(OH_NN_SUCCESS, CompileGraphMock(compilation2, compileParam));
for (int i = 0; i < STRESS_COUNT; i++) { for (int i = 0; i < STRESS_COUNT; i++) {
OH_NNExecutor *executor1 = OH_NNExecutor_Construct(compilation1); OH_NNExecutor *executor1 = OH_NNExecutor_Construct(compilation1);
ASSERT_NE(nullptr, executor1); ASSERT_NE(nullptr, executor1);
ASSERT_EQ(OH_NN_SUCCESS, ExecuteGraphMock(executor1, graphArgs, nullptr));
OH_NNExecutor *executor2 = OH_NNExecutor_Construct(compilation2);
ASSERT_NE(nullptr, executor2);
std::thread th1(ExecuteModel, executor1, graphArgs);
std::thread th2(ExecuteModel, executor2, graphArgs);
th1.join();
th2.join();
OH_NNExecutor_Destroy(&executor1); OH_NNExecutor_Destroy(&executor1);
ASSERT_EQ(nullptr, executor1); ASSERT_EQ(nullptr, executor1);
OH_NNExecutor_Destroy(&executor2);
ASSERT_EQ(nullptr, executor2);
if (i % PRINT_FREQ == 0) { if (i % PRINT_FREQ == 0) {
printf("[NnrtTest] SUB_AI_NNR_Reliability_North_Stress_0200 times: %d/%d\n", i, STRESS_COUNT); printf("[NnrtTest] SUB_AI_NNR_Reliability_North_Stress_0200 times: %d/%d\n", i, STRESS_COUNT);
} }
} }
Free(model1, compilation1); Free(model1, compilation1);
Free(model2, compilation2);
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册