提交 9be6f691 编写于 作者: Y yejianwu

Merge branch 'master' of v9.git.n.xiaomi.com:deep-computing/mace into update_engine_run

...@@ -10,50 +10,48 @@ ...@@ -10,50 +10,48 @@
namespace mace { namespace mace {
TensorProto::TensorProto(const std::string &name, ConstTensor::ConstTensor(const std::string &name,
unsigned char *data, unsigned char *data,
const std::vector<int64_t> &dims, const std::vector<int64_t> &dims,
const DataType data_type, const DataType data_type,
uint32_t node_id) : uint32_t node_id) :
name_(name), name_(name),
data_(data), data_(data),
data_size_(0), data_size_(std::accumulate(dims.begin(), dims.end(), 1,
std::multiplies<int64_t>())),
dims_(dims.begin(), dims.end()), dims_(dims.begin(), dims.end()),
data_type_(data_type), data_type_(data_type),
node_id_(node_id) { node_id_(node_id) {}
data_size_ = std::accumulate(dims_.begin(), dims_.end(), 1, std::multiplies<int64_t>());
}
TensorProto::TensorProto(const std::string &name, ConstTensor::ConstTensor(const std::string &name,
unsigned char *data, unsigned char *data,
const std::vector<int64_t> &dims, const std::vector<int64_t> &dims,
const int data_type, const int data_type,
uint32_t node_id) : uint32_t node_id) :
name_(name), name_(name),
data_(data), data_(data),
data_size_(0), data_size_(std::accumulate(dims.begin(), dims.end(), 1,
std::multiplies<int64_t>())),
dims_(dims.begin(), dims.end()), dims_(dims.begin(), dims.end()),
data_type_(static_cast<DataType>(data_type)), data_type_(static_cast<DataType>(data_type)),
node_id_(node_id) { node_id_(node_id) {}
data_size_ = std::accumulate(dims_.begin(), dims_.end(), 1, std::multiplies<int64_t>());
}
const std::string &TensorProto::name() const { const std::string &ConstTensor::name() const {
return name_; return name_;
} }
unsigned char *TensorProto::data() const { const unsigned char *ConstTensor::data() const {
return data_; return data_;
} }
const int64_t TensorProto::data_size() const { int64_t ConstTensor::data_size() const {
return data_size_; return data_size_;
} }
const std::vector<int64_t> &TensorProto::dims() const { const std::vector<int64_t> &ConstTensor::dims() const {
return dims_; return dims_;
} }
DataType TensorProto::data_type() const { DataType ConstTensor::data_type() const {
return data_type_; return data_type_;
} }
uint32_t TensorProto::node_id() const { uint32_t ConstTensor::node_id() const {
return node_id_; return node_id_;
} }
...@@ -446,10 +444,10 @@ Argument *NetDef::add_arg() { ...@@ -446,10 +444,10 @@ Argument *NetDef::add_arg() {
std::vector<Argument> &NetDef::mutable_arg() { std::vector<Argument> &NetDef::mutable_arg() {
return arg_; return arg_;
} }
const std::vector<TensorProto> &NetDef::tensors() const { const std::vector<ConstTensor> &NetDef::tensors() const {
return tensors_; return tensors_;
} }
std::vector<TensorProto> &NetDef::mutable_tensors() { std::vector<ConstTensor> &NetDef::mutable_tensors() {
return tensors_; return tensors_;
} }
const MemoryArena &NetDef::mem_arena() const { const MemoryArena &NetDef::mem_arena() const {
......
...@@ -38,33 +38,33 @@ enum DataType { ...@@ -38,33 +38,33 @@ enum DataType {
DT_UINT32 = 22 DT_UINT32 = 22
}; };
class TensorProto { class ConstTensor {
public: public:
TensorProto(const std::string &name, ConstTensor(const std::string &name,
unsigned char *data, unsigned char *data,
const std::vector<int64_t> &dims, const std::vector<int64_t> &dims,
const DataType data_type = DT_FLOAT, const DataType data_type = DT_FLOAT,
uint32_t node_id = 0); uint32_t node_id = 0);
TensorProto(const std::string &name, ConstTensor(const std::string &name,
unsigned char *data, unsigned char *data,
const std::vector<int64_t> &dims, const std::vector<int64_t> &dims,
const int data_type, const int data_type,
uint32_t node_id = 0); uint32_t node_id = 0);
const std::string &name() const; const std::string &name() const;
unsigned char *data() const; const unsigned char *data() const;
const int64_t data_size() const; int64_t data_size() const;
const std::vector<int64_t> &dims() const; const std::vector<int64_t> &dims() const;
DataType data_type() const; DataType data_type() const;
uint32_t node_id() const; uint32_t node_id() const;
private: private:
std::string name_; const std::string name_;
unsigned char *data_; const unsigned char *data_;
int64_t data_size_; const int64_t data_size_;
std::vector<int64_t> dims_; const std::vector<int64_t> dims_;
DataType data_type_; const DataType data_type_;
uint32_t node_id_; const uint32_t node_id_;
}; };
class Argument { class Argument {
...@@ -270,8 +270,8 @@ class NetDef { ...@@ -270,8 +270,8 @@ class NetDef {
const std::vector<Argument> &arg() const; const std::vector<Argument> &arg() const;
Argument *add_arg(); Argument *add_arg();
std::vector<Argument> &mutable_arg(); std::vector<Argument> &mutable_arg();
const std::vector<TensorProto> &tensors() const; const std::vector<ConstTensor> &tensors() const;
std::vector<TensorProto> &mutable_tensors(); std::vector<ConstTensor> &mutable_tensors();
const MemoryArena &mem_arena() const; const MemoryArena &mem_arena() const;
bool has_mem_arena() const; bool has_mem_arena() const;
MemoryArena &mutable_mem_arena(); MemoryArena &mutable_mem_arena();
...@@ -288,7 +288,7 @@ class NetDef { ...@@ -288,7 +288,7 @@ class NetDef {
std::string version_; std::string version_;
std::vector<OperatorDef> op_; std::vector<OperatorDef> op_;
std::vector<Argument> arg_; std::vector<Argument> arg_;
std::vector<TensorProto> tensors_; std::vector<ConstTensor> tensors_;
// for mem optimization // for mem optimization
MemoryArena mem_arena_; MemoryArena mem_arena_;
......
...@@ -6,13 +6,13 @@ ...@@ -6,13 +6,13 @@
namespace mace { namespace mace {
unique_ptr<TensorProto> Serializer::Serialize(const Tensor &tensor, unique_ptr<ConstTensor> Serializer::Serialize(const Tensor &tensor,
const string &name) { const string &name) {
MACE_NOT_IMPLEMENTED; MACE_NOT_IMPLEMENTED;
return nullptr; return nullptr;
} }
unique_ptr<Tensor> Serializer::Deserialize(const TensorProto &proto, unique_ptr<Tensor> Serializer::Deserialize(const ConstTensor &proto,
DeviceType type) { DeviceType type) {
unique_ptr<Tensor> tensor( unique_ptr<Tensor> tensor(
new Tensor(GetDeviceAllocator(type), proto.data_type())); new Tensor(GetDeviceAllocator(type), proto.data_type()));
...@@ -24,31 +24,40 @@ unique_ptr<Tensor> Serializer::Deserialize(const TensorProto &proto, ...@@ -24,31 +24,40 @@ unique_ptr<Tensor> Serializer::Deserialize(const TensorProto &proto,
switch (proto.data_type()) { switch (proto.data_type()) {
case DT_FLOAT: case DT_FLOAT:
tensor->Copy<float>(reinterpret_cast<float*>(proto.data()), proto.data_size()); tensor->Copy<float>(reinterpret_cast<const float *>(proto.data()),
proto.data_size());
break; break;
case DT_DOUBLE: case DT_DOUBLE:
tensor->Copy<double>(reinterpret_cast<double*>(proto.data()), proto.data_size()); tensor->Copy<double>(reinterpret_cast<const double *>(proto.data()),
proto.data_size());
break; break;
case DT_INT32: case DT_INT32:
tensor->Copy<int32_t>(reinterpret_cast<int32_t*>(proto.data()), proto.data_size()); tensor->Copy<int32_t>(reinterpret_cast<const int32_t *>(proto.data()),
proto.data_size());
break; break;
case DT_INT64: case DT_INT64:
tensor->Copy<int64_t>(reinterpret_cast<int64_t*>(proto.data()), proto.data_size()); tensor->Copy<int64_t>(reinterpret_cast<const int64_t *>(proto.data()),
proto.data_size());
break; break;
case DT_UINT8: case DT_UINT8:
tensor->CopyWithCast<int32_t, uint8_t>(reinterpret_cast<int32_t*>(proto.data()), proto.data_size()); tensor->CopyWithCast<int32_t, uint8_t>(
reinterpret_cast<const int32_t *>(proto.data()), proto.data_size());
break; break;
case DT_INT16: case DT_INT16:
tensor->CopyWithCast<int32_t, uint16_t>(reinterpret_cast<int32_t*>(proto.data()), proto.data_size()); tensor->CopyWithCast<int32_t, uint16_t>(
reinterpret_cast<const int32_t *>(proto.data()), proto.data_size());
break; break;
case DT_INT8: case DT_INT8:
tensor->CopyWithCast<int32_t, int8_t>(reinterpret_cast<int32_t*>(proto.data()), proto.data_size()); tensor->CopyWithCast<int32_t, int8_t>(
reinterpret_cast<const int32_t *>(proto.data()), proto.data_size());
break; break;
case DT_UINT16: case DT_UINT16:
tensor->CopyWithCast<int32_t, int16_t>(reinterpret_cast<int32_t*>(proto.data()), proto.data_size()); tensor->CopyWithCast<int32_t, int16_t>(
reinterpret_cast<const int32_t *>(proto.data()), proto.data_size());
break; break;
case DT_BOOL: case DT_BOOL:
tensor->CopyWithCast<int32_t, bool>(reinterpret_cast<int32_t*>(proto.data()), proto.data_size()); tensor->CopyWithCast<int32_t, bool>(
reinterpret_cast<const int32_t *>(proto.data()), proto.data_size());
break; break;
default: default:
MACE_NOT_IMPLEMENTED; MACE_NOT_IMPLEMENTED;
...@@ -58,4 +67,4 @@ unique_ptr<Tensor> Serializer::Deserialize(const TensorProto &proto, ...@@ -58,4 +67,4 @@ unique_ptr<Tensor> Serializer::Deserialize(const TensorProto &proto,
return tensor; return tensor;
} }
} // namespace mace } // namespace mace
\ No newline at end of file
...@@ -16,9 +16,9 @@ class Serializer { ...@@ -16,9 +16,9 @@ class Serializer {
Serializer() {} Serializer() {}
~Serializer() {} ~Serializer() {}
unique_ptr<TensorProto> Serialize(const Tensor &tensor, const string &name); unique_ptr<ConstTensor> Serialize(const Tensor &tensor, const string &name);
unique_ptr<Tensor> Deserialize(const TensorProto &proto, DeviceType type); unique_ptr<Tensor> Deserialize(const ConstTensor &proto, DeviceType type);
DISABLE_COPY_AND_ASSIGN(Serializer); DISABLE_COPY_AND_ASSIGN(Serializer);
}; };
......
...@@ -45,7 +45,7 @@ int main() { ...@@ -45,7 +45,7 @@ int main() {
alignas(4) unsigned char tensor_data[] = "012345678901234567890123"; alignas(4) unsigned char tensor_data[] = "012345678901234567890123";
const std::vector<int64_t> dims = {1, 2, 3, 1}; const std::vector<int64_t> dims = {1, 2, 3, 1};
TensorProto input("Input", tensor_data, dims, DataType::DT_FLOAT); ConstTensor input("Input", tensor_data, dims, DataType::DT_FLOAT);
net_def.mutable_tensors().push_back(input); net_def.mutable_tensors().push_back(input);
// Create workspace and input tensor // Create workspace and input tensor
......
...@@ -13,8 +13,8 @@ alignas(4) unsigned char {{ tensor_info.name }}[] = { ...@@ -13,8 +13,8 @@ alignas(4) unsigned char {{ tensor_info.name }}[] = {
{% for d in tensor_info.data %}{{"0x%02X, " % d }}{%endfor%} {% for d in tensor_info.data %}{{"0x%02X, " % d }}{%endfor%}
}; };
void Create{{tensor.name}}(std::vector<mace::TensorProto> &tensors) { void Create{{tensor.name}}(std::vector<mace::ConstTensor> &tensors) {
tensors.emplace_back(mace::TensorProto( tensors.emplace_back(mace::ConstTensor(
{{ tensor.name|tojson }}, {{ tensor.name }}, {{ tensor.name|tojson }}, {{ tensor.name }},
{ {{ tensor.dims|join(', ') }} }, {{ tensor.data_type }}, {{ tensor.node_id }})); { {{ tensor.dims|join(', ') }} }, {{ tensor.data_type }}, {{ tensor.node_id }}));
} }
...@@ -100,7 +100,7 @@ void CreateOperator{{i}}(mace::OperatorDef &op) { ...@@ -100,7 +100,7 @@ void CreateOperator{{i}}(mace::OperatorDef &op) {
namespace {{tag}} { namespace {{tag}} {
{% for tensor in tensors %} {% for tensor in tensors %}
extern void Create{{ tensor.name }}(std::vector<mace::TensorProto> &tensors); extern void Create{{ tensor.name }}(std::vector<mace::ConstTensor> &tensors);
{% endfor %} {% endfor %}
...@@ -159,7 +159,7 @@ static void CreateOperators(std::vector<mace::OperatorDef> &ops) { ...@@ -159,7 +159,7 @@ static void CreateOperators(std::vector<mace::OperatorDef> &ops) {
} }
static void CreateTensors(std::vector<mace::TensorProto> &tensors) { static void CreateTensors(std::vector<mace::ConstTensor> &tensors) {
tensors.reserve({{ net.tensors|length }}); tensors.reserve({{ net.tensors|length }});
{% for tensor in net.tensors %} {% for tensor in net.tensors %}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册