!13332 uniform interface of micro
From: @yangjie159 Reviewed-by: @wangchengyuan,@hangangqiang Signed-off-by: @wangchengyuanpull/13332/MERGE
commit
e8fb3dfcc9
@ -0,0 +1,115 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2021 Huawei Technologies Co., Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "coder/generator/component/const_blocks/benchmark.h"
|
||||||
|
|
||||||
|
namespace mindspore::lite::micro {
|
||||||
|
|
||||||
|
const char *benchmark_source = R"RAW(
|
||||||
|
/**
|
||||||
|
* Copyright 2021 Huawei Technologies Co., Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
|
#include "include/lite_session.h"
|
||||||
|
#include "include/ms_tensor.h"
|
||||||
|
#include "include/errorcode.h"
|
||||||
|
|
||||||
|
#include "read_file.h"
|
||||||
|
|
||||||
|
using namespace mindspore;
|
||||||
|
|
||||||
|
void usage() {
|
||||||
|
printf(
|
||||||
|
"-- mindspore benchmark params usage:\n"
|
||||||
|
"args[0]: executable file\n"
|
||||||
|
"args[1]: inputs binary file\n"
|
||||||
|
"args[2]: model weight binary file\n"
|
||||||
|
"args[3]: loop count for performance test\n"
|
||||||
|
"args[4]: runtime thread num\n"
|
||||||
|
"args[5]: runtime thread bind mode\n\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, const char **argv) {
|
||||||
|
if (argc < 2) {
|
||||||
|
std::cout << "input command is invalid\n" << std::endl;
|
||||||
|
usage();
|
||||||
|
return lite::RET_ERROR;
|
||||||
|
}
|
||||||
|
std::cout << "start run benchmark" << std::endl;
|
||||||
|
|
||||||
|
const char *model_buffer = nullptr;
|
||||||
|
int model_size = 0;
|
||||||
|
// read .net file by ReadBinaryFile;
|
||||||
|
if (argc >= 3) {
|
||||||
|
model_buffer = static_cast<const char *>(ReadInputData(argv[2], &model_size));
|
||||||
|
}
|
||||||
|
session::LiteSession *session = mindspore::session::LiteSession::CreateSession(model_buffer, model_size, nullptr);
|
||||||
|
if (session == nullptr) {
|
||||||
|
std::cerr << "create lite session failed" << std::endl;
|
||||||
|
return lite::RET_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
// set model inputs tensor data
|
||||||
|
std::vector<tensor::MSTensor *> inputs = session->GetInputs();
|
||||||
|
size_t inputs_num = inputs.size();
|
||||||
|
void *inputs_binbuf[inputs_num];
|
||||||
|
int inputs_size[inputs_num];
|
||||||
|
for (size_t i = 0; i < inputs_num; ++i) {
|
||||||
|
inputs_size[i] = inputs[i]->Size();
|
||||||
|
}
|
||||||
|
int ret = ReadInputsFile(argv[1], inputs_binbuf, inputs_size, inputs_num);
|
||||||
|
if (ret != lite::RET_OK) {
|
||||||
|
return lite::RET_ERROR;
|
||||||
|
}
|
||||||
|
for (size_t i = 0; i < inputs_num; ++i) {
|
||||||
|
inputs[i]->set_data(inputs_binbuf[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = session->RunGraph();
|
||||||
|
if (ret != lite::RET_OK) {
|
||||||
|
return lite::RET_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto outputs = session->GetOutputs();
|
||||||
|
std::cout << outputs.size() << std::endl;
|
||||||
|
|
||||||
|
std::cout << "run benchmark success" << std::endl;
|
||||||
|
delete session;
|
||||||
|
for (size_t i = 0; i < inputs_num; ++i) {
|
||||||
|
free(inputs_binbuf[i]);
|
||||||
|
}
|
||||||
|
return lite::RET_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
)RAW";
|
||||||
|
|
||||||
|
} // namespace mindspore::lite::micro
|
@ -0,0 +1,26 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2021 Huawei Technologies Co., Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MINDSPORE_LITE_MICRO_GENERATOR_CONST_BLOCK_BENCHMARK_H_
|
||||||
|
#define MINDSPORE_LITE_MICRO_GENERATOR_CONST_BLOCK_BENCHMARK_H_
|
||||||
|
|
||||||
|
namespace mindspore::lite::micro {
|
||||||
|
|
||||||
|
extern const char *benchmark_source;
|
||||||
|
|
||||||
|
} // namespace mindspore::lite::micro
|
||||||
|
|
||||||
|
#endif // MINDSPORE_LITE_MICRO_GENERATOR_CONST_BLOCK_BENCHMARK_H_
|
@ -0,0 +1,172 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2021 Huawei Technologies Co., Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "coder/generator/component/const_blocks/mtensor.h"
|
||||||
|
|
||||||
|
namespace mindspore::lite::micro {
|
||||||
|
|
||||||
|
const char *tensor_header = R"RAW(
|
||||||
|
/**
|
||||||
|
* Copyright 2021 Huawei Technologies Co., Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MINDSPORE_LITE_MICRO_LIBRARY_SOURCE_TENSOR_H_
|
||||||
|
#define MINDSPORE_LITE_MICRO_LIBRARY_SOURCE_TENSOR_H_
|
||||||
|
|
||||||
|
#include "include/ms_tensor.h"
|
||||||
|
#include <utility>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace mindspore {
|
||||||
|
namespace lite {
|
||||||
|
struct QuantArg {
|
||||||
|
double scale;
|
||||||
|
int32_t zeroPoint;
|
||||||
|
float var_corr{1};
|
||||||
|
float mean_corr{0};
|
||||||
|
bool inited;
|
||||||
|
std::vector<float> clusters{};
|
||||||
|
int bitNum;
|
||||||
|
int roundType;
|
||||||
|
int multiplier;
|
||||||
|
int dstDtype;
|
||||||
|
};
|
||||||
|
|
||||||
|
class MTensor : public mindspore::tensor::MSTensor {
|
||||||
|
public:
|
||||||
|
MTensor() = default;
|
||||||
|
MTensor(std::string name, enum TypeId type, std::vector<int32_t> shape, void *data)
|
||||||
|
: tensor_name_(std::move(name)), data_type_(type), shape_(std::move(shape)), data_(data) {}
|
||||||
|
~MTensor() override = default;
|
||||||
|
|
||||||
|
TypeId data_type() const override { return data_type_; }
|
||||||
|
std::vector<int> shape() const override { return shape_; }
|
||||||
|
int DimensionSize(size_t index) const override;
|
||||||
|
int ElementsNum() const override;
|
||||||
|
size_t Size() const override;
|
||||||
|
void *MutableData() override { return data_; };
|
||||||
|
std::string tensor_name() const override { return tensor_name_; }
|
||||||
|
void set_tensor_name(const std::string name) override { tensor_name_ = name; }
|
||||||
|
void set_data(void *data) override { data_ = data; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::string tensor_name_;
|
||||||
|
TypeId data_type_;
|
||||||
|
std::vector<int> shape_;
|
||||||
|
void *data_ = nullptr;
|
||||||
|
std::vector<QuantArg> quant_params_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace lite
|
||||||
|
} // namespace mindspore
|
||||||
|
|
||||||
|
#endif // MINDSPORE_LITE_MICRO_LIBRARY_SOURCE_TENSOR_H_
|
||||||
|
|
||||||
|
)RAW";
|
||||||
|
|
||||||
|
const char *tensor_source = R"RAW(
|
||||||
|
/**
|
||||||
|
* Copyright 2021 Huawei Technologies Co., Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "tensor.h"
|
||||||
|
|
||||||
|
namespace mindspore {
|
||||||
|
namespace lite {
|
||||||
|
size_t DataTypeSize(const TypeId type) {
|
||||||
|
switch (type) {
|
||||||
|
case kNumberTypeFloat64:
|
||||||
|
return sizeof(double);
|
||||||
|
case kNumberTypeFloat:
|
||||||
|
case kNumberTypeFloat32:
|
||||||
|
return sizeof(float);
|
||||||
|
case kNumberTypeInt8:
|
||||||
|
return sizeof(int8_t);
|
||||||
|
case kNumberTypeUInt8:
|
||||||
|
return sizeof(uint8_t);
|
||||||
|
case kNumberTypeFloat16:
|
||||||
|
case kNumberTypeInt16:
|
||||||
|
return sizeof(int16_t);
|
||||||
|
case kNumberTypeInt32:
|
||||||
|
return sizeof(int32_t);
|
||||||
|
case kNumberTypeInt64:
|
||||||
|
return sizeof(int64_t);
|
||||||
|
case kNumberTypeUInt16:
|
||||||
|
return sizeof(uint16_t);
|
||||||
|
case kNumberTypeUInt32:
|
||||||
|
return sizeof(uint32_t);
|
||||||
|
case kNumberTypeUInt64:
|
||||||
|
return sizeof(uint64_t);
|
||||||
|
case kNumberTypeBool:
|
||||||
|
return sizeof(bool);
|
||||||
|
case kObjectTypeString:
|
||||||
|
return sizeof(char);
|
||||||
|
case kObjectTypeTensorType:
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int MTensor::DimensionSize(const size_t index) const {
|
||||||
|
int dim_size = -1;
|
||||||
|
if (index < shape_.size()) {
|
||||||
|
dim_size = shape_[index];
|
||||||
|
}
|
||||||
|
return dim_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
int MTensor::ElementsNum() const {
|
||||||
|
int elements = 1;
|
||||||
|
for (int i : shape_) {
|
||||||
|
elements *= i;
|
||||||
|
}
|
||||||
|
return elements;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t MTensor::Size() const {
|
||||||
|
size_t element_size = DataTypeSize(data_type_);
|
||||||
|
return element_size * ElementsNum();
|
||||||
|
}
|
||||||
|
} // namespace lite
|
||||||
|
} // namespace mindspore
|
||||||
|
|
||||||
|
)RAW";
|
||||||
|
|
||||||
|
} // namespace mindspore::lite::micro
|
@ -0,0 +1,27 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2021 Huawei Technologies Co., Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MINDSPORE_LITE_MICRO_GENERATOR_CONST_BLOCK_MTENSOR_H_
|
||||||
|
#define MINDSPORE_LITE_MICRO_GENERATOR_CONST_BLOCK_MTENSOR_H_
|
||||||
|
|
||||||
|
namespace mindspore::lite::micro {
|
||||||
|
|
||||||
|
extern const char *tensor_header;
|
||||||
|
extern const char *tensor_source;
|
||||||
|
|
||||||
|
} // namespace mindspore::lite::micro
|
||||||
|
|
||||||
|
#endif // MINDSPORE_LITE_MICRO_GENERATOR_CONST_BLOCK_MTENSOR_H_
|
Loading…
Reference in new issue