Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions runtime/onert/backend/trix/ops/BulkPipelineLayer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ void BulkPipelineLayer::configure(const std::vector<const IPortableTensor *> &in
config.model_paths = binary_path;
config.device_id = 0; // default device id = 0
config.n_owner_models = 2; // Use 2 owner models for buffer sharing
config.n_inputs = inputs.size();
config.n_outputs = outputs.size();

_pipeline_manager = std::make_unique<BulkPipelineManager>(config);

Expand Down
14 changes: 14 additions & 0 deletions runtime/onert/backend/trix/ops/BulkPipelineManager.cc
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ bool BulkPipelineManager::initialize()
try
{
createModels();
verifyModels();
prepareModels();
linkModels();

Expand Down Expand Up @@ -207,6 +208,19 @@ void BulkPipelineManager::linkModels()
}
}

void BulkPipelineManager::verifyModels()
{
for (auto &model : _models)
{
if ((static_cast<uint32_t>(model->metadata()->input_seg_num) != _config.n_inputs) ||
(static_cast<uint32_t>(model->metadata()->output_seg_num) != _config.n_outputs))
{
throw std::runtime_error("Model " + model->modelPath() +
" has different number of inputs/outputs");
}
}
}

void BulkPipelineManager::prepareModels()
{
for (auto &model : _models)
Expand Down
3 changes: 3 additions & 0 deletions runtime/onert/backend/trix/ops/BulkPipelineManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ class BulkPipelineManager
std::vector<std::string> model_paths;
int device_id{0};
int n_owner_models{2}; // number of models that share the buffers
uint32_t n_inputs{1};
uint32_t n_outputs{1};
};

public:
Expand All @@ -59,6 +61,7 @@ class BulkPipelineManager
void createModels();
void linkModels();
void prepareModels();
void verifyModels();

private:
PipelineConfig _config;
Expand Down
43 changes: 41 additions & 2 deletions runtime/onert/backend/trix/ops/test/BulkPipelineManager.test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,23 @@ class BulkPipelineManagerTest : public ::testing::Test
{
BulkPipelineManager::PipelineConfig config;
config.device_id = 0;
config.model_paths.push_back("model_path");
config.model_paths.push_back("model_path_0");
config.model_paths.push_back("model_path_1");
config.n_inputs = 0;
config.n_outputs = 0;
manager = std::make_unique<BulkPipelineManager>(config);

// Reset all mock syscalls before each test
MockSyscallsManager::getInstance().resetAll();

MockSyscallsManager::getInstance().setFopenHook([](const char *path, const char *) -> FILE * {
if (strcmp(path, "model_path_0") == 0)
{
return (FILE *)1;
}
return (FILE *)2;
});

MockSyscallsManager::getInstance().setFreadHook(
[](void *ptr, size_t size, size_t, FILE *) -> int {
if (size == NPUBIN_META_SIZE)
Expand All @@ -43,6 +54,8 @@ class BulkPipelineManagerTest : public ::testing::Test
meta->program_size = 1024;
meta->weight_size = 1024;
meta->size = 4096;
meta->input_seg_num = 0;
meta->output_seg_num = 0;
}
return 1;
});
Expand All @@ -61,7 +74,7 @@ class BulkPipelineManagerTest : public ::testing::Test
void TearDown() override {}

std::unique_ptr<BulkPipelineManager> manager;
const int nr_models = 1;
const int nr_models = 2;
};

TEST_F(BulkPipelineManagerTest, test_initilize)
Expand Down Expand Up @@ -92,3 +105,29 @@ TEST_F(BulkPipelineManagerTest, test_execute)
std::vector<onert::backend::IPortableTensor *> outputs;
EXPECT_NO_THROW(manager->execute(inputs, outputs));
}

TEST_F(BulkPipelineManagerTest, test_verify_models)
{
MockSyscallsManager::getInstance().clearFreadHook();
MockSyscallsManager::getInstance().setFreadHook(
[](void *ptr, size_t size, size_t, FILE *fp) -> int {
if (size == NPUBIN_META_SIZE)
{
auto meta = reinterpret_cast<npubin_meta *>(ptr);
meta->program_size = 1024;
meta->weight_size = 1024;
meta->size = 4096;
meta->input_seg_num = 0;
if (fp == (FILE *)1)
{
meta->output_seg_num = 1;
}
else
{
meta->output_seg_num = 0;
}
}
return 1;
});
EXPECT_FALSE(manager->initialize());
}