diff --git a/ai/neural_network_runtime/common/mock_idevice.cpp b/ai/neural_network_runtime/common/mock_idevice.cpp index 650c77aaf3c8342b2b193fc1921b83d8d71ba014..04ea181edac6b7e599fced8504b4bc2866c34289 100644 --- a/ai/neural_network_runtime/common/mock_idevice.cpp +++ b/ai/neural_network_runtime/common/mock_idevice.cpp @@ -147,6 +147,7 @@ int32_t MockIDevice::IsModelCacheSupported(bool& isSupported) int32_t MockIDevice::AllocateBuffer(uint32_t length, SharedBuffer &buffer) { + std::lock_guard lock(m_mtx); sptr ashptr = Ashmem::CreateAshmem("allocateBuffer", length); if (ashptr == nullptr) { LOGE("[NNRtTest] Create shared memory failed."); @@ -170,6 +171,7 @@ int32_t MockIDevice::AllocateBuffer(uint32_t length, SharedBuffer &buffer) int32_t MockIDevice::ReleaseBuffer(const SharedBuffer &buffer) { + std::lock_guard lock(m_mtx); auto ash = m_ashmems[buffer.fd]; ash->UnmapAshmem(); return HDF_SUCCESS; @@ -177,6 +179,7 @@ int32_t MockIDevice::ReleaseBuffer(const SharedBuffer &buffer) int32_t MockIDevice::MemoryCopy(float* data, uint32_t length) { + std::lock_guard lock(m_mtx); auto memManager = NeuralNetworkRuntime::MemoryManager::GetInstance(); auto memAddress = memManager->MapMemory(m_bufferFd, length); if (memAddress == nullptr) { diff --git a/ai/neural_network_runtime/common/mock_idevice.h b/ai/neural_network_runtime/common/mock_idevice.h index 3c2d8e4d1186b1c7691df813ce6d824e4512046f..a2baa6d3b6f509e54dfc6709e9a928ef010e6c74 100644 --- a/ai/neural_network_runtime/common/mock_idevice.h +++ b/ai/neural_network_runtime/common/mock_idevice.h @@ -98,6 +98,7 @@ private: bool m_cache = true; bool m_dynamic = true; std::vector m_operations{true}; + std::mutex m_mtx; }; class MockIPreparedModel : public IPreparedModel { diff --git a/ai/neural_network_runtime/common/nnrt_utils.cpp b/ai/neural_network_runtime/common/nnrt_utils.cpp index 8692dffc3c73f8f24f82fc263cbb73ba60fc8e7c..01f10ffed2c4fb21191de68f6809e517d1c072ba 100644 --- a/ai/neural_network_runtime/common/nnrt_utils.cpp +++ b/ai/neural_network_runtime/common/nnrt_utils.cpp @@ -222,7 +222,9 @@ int ExecuteGraphMock(OH_NNExecutor *executor, const OHNNGraphArgs &graphArgs, LOGE("[NNRtTest] OH_NNExecutor_SetOutput failed! ret=%d\n", ret); return ret; } - ret = device->MemoryCopy(expect, operandTem.length); + if(expect!=nullptr){ + ret = device->MemoryCopy(expect, operandTem.length); + } if (ret != OH_NN_SUCCESS) { LOGE("[NNRtTest] device set expect output failed! ret=%d\n", ret); return ret; diff --git a/ai/neural_network_runtime/stability/src/MultiThreadTest.cpp b/ai/neural_network_runtime/stability/src/MultiThreadTest.cpp index dee5ea9a9659f7597668c08166f7fc150e185bd3..0c613c2dcd25ed9b1a8a3b915cfaedca5fefae57 100644 --- a/ai/neural_network_runtime/stability/src/MultiThreadTest.cpp +++ b/ai/neural_network_runtime/stability/src/MultiThreadTest.cpp @@ -41,21 +41,10 @@ protected: 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.name : 模型编译多线程并发长稳测试 + * @tc.name : 模型编译并发长稳测试 * @tc.desc : [C- SOFTWARE -0200] */ 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 ASSERT_NE(nullptr, model1); 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); ASSERT_NE(nullptr, compilation1); - OH_NNCompilation *compilation2 = OH_NNCompilation_Construct(model2); - ASSERT_NE(nullptr, compilation2); + ASSERT_EQ(OH_NN_SUCCESS, CompileGraphMock(compilation1, compileParam)); - std::thread th1(CompileModel, compilation1, compileParam); - std::thread th2(CompileModel, compilation2, compileParam); - th1.join(); - th2.join(); Free(model1, compilation1); - Free(model2, compilation2); if (i % PRINT_FREQ == 0) { 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 /** * @tc.number : SUB_AI_NNR_Reliability_North_Stress_0200 - * @tc.name : 模型推理多线程并发长稳测试 + * @tc.name : 模型推理并发长稳测试 * @tc.desc : [C- SOFTWARE -0200] */ 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 ASSERT_NE(nullptr, model1); 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); ASSERT_NE(nullptr, compilation1); 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++) { OH_NNExecutor *executor1 = OH_NNExecutor_Construct(compilation1); ASSERT_NE(nullptr, executor1); - - 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(); + ASSERT_EQ(OH_NN_SUCCESS, ExecuteGraphMock(executor1, graphArgs, nullptr)); OH_NNExecutor_Destroy(&executor1); ASSERT_EQ(nullptr, executor1); - OH_NNExecutor_Destroy(&executor2); - ASSERT_EQ(nullptr, executor2); if (i % PRINT_FREQ == 0) { printf("[NnrtTest] SUB_AI_NNR_Reliability_North_Stress_0200 times: %d/%d\n", i, STRESS_COUNT); } } Free(model1, compilation1); - Free(model2, compilation2); }