提交 1d155a33 编写于 作者: L liuruilong

add add split bool arg

上级 663d0fd4
...@@ -106,11 +106,14 @@ std::shared_ptr<ProgramDesc> ProgramOptimize::FushionOptimize( ...@@ -106,11 +106,14 @@ std::shared_ptr<ProgramDesc> ProgramOptimize::FushionOptimize(
} }
std::vector<std::shared_ptr<framework::OpDesc>> op_descs; std::vector<std::shared_ptr<framework::OpDesc>> op_descs;
for (int m = 0; m < nodes.size(); ++m) { if (add_split) {
auto &node = nodes[m]; GenerateOps(&op_descs, begin_node.get(), add_split);
op_descs.push_back(node->op_desc_); } else {
for (int m = 0; m < nodes.size(); ++m) {
auto &node = nodes[m];
op_descs.push_back(node->op_desc_);
}
} }
// GenerateOps(&op_descs, begin_node.get());
block->ops_ = op_descs; block->ops_ = op_descs;
} }
...@@ -268,11 +271,11 @@ void ProgramOptimize::GenerateOps( ...@@ -268,11 +271,11 @@ void ProgramOptimize::GenerateOps(
void ProgramOptimize::GenerateOps( void ProgramOptimize::GenerateOps(
std::vector<std::shared_ptr<framework::OpDesc>> *op_descs, std::vector<std::shared_ptr<framework::OpDesc>> *op_descs,
Node *begin_node) { Node *begin_node, bool can_add_split) {
// std::vector<std::shared_ptr<framework::OpDesc>> *op_desc, // std::vector<std::shared_ptr<framework::OpDesc>> *op_desc,
// Node *input_node, Node *current_node, bool adding_thread, int // Node *input_node, Node *current_node, bool adding_thread, int
// thread_num // thread_num
if (false) { if (can_add_split) {
this->GenerateOps(op_descs, begin_node, begin_node, false, -1, nullptr); this->GenerateOps(op_descs, begin_node, begin_node, false, -1, nullptr);
} else { } else {
this->GenerateOps(op_descs, begin_node, begin_node); this->GenerateOps(op_descs, begin_node, begin_node);
......
...@@ -34,7 +34,7 @@ class ProgramOptimize { ...@@ -34,7 +34,7 @@ class ProgramOptimize {
int current_block_; int current_block_;
std::vector<std::shared_ptr<BlockDesc>> new_blocks_; std::vector<std::shared_ptr<BlockDesc>> new_blocks_;
void GenerateOps(std::vector<std::shared_ptr<framework::OpDesc>> *op_descs, void GenerateOps(std::vector<std::shared_ptr<framework::OpDesc>> *op_descs,
Node *begin_node); Node *begin_node, bool can_add_split);
void GenerateOps(std::vector<std::shared_ptr<framework::OpDesc>> *op_desc, void GenerateOps(std::vector<std::shared_ptr<framework::OpDesc>> *op_desc,
Node *input_node, Node *current_node); Node *input_node, Node *current_node);
void GenerateOps(std::vector<std::shared_ptr<framework::OpDesc>> *op_desc, void GenerateOps(std::vector<std::shared_ptr<framework::OpDesc>> *op_desc,
......
...@@ -74,8 +74,8 @@ static size_t ReadBuffer(const char *file_name, uint8_t **out) { ...@@ -74,8 +74,8 @@ static size_t ReadBuffer(const char *file_name, uint8_t **out) {
template <typename Dtype, Precision P> template <typename Dtype, Precision P>
const framework::Program<Dtype, P> Loader<Dtype, P>::Load( const framework::Program<Dtype, P> Loader<Dtype, P>::Load(
const std::string &dirname, bool optimize) { const std::string &dirname, bool optimize, bool can_add_split) {
auto program = this->LoadProgram(dirname + "/__model__", optimize); auto program = this->LoadProgram(dirname + "/__model__", optimize, can_add_split);
program.model_path = dirname; program.model_path = dirname;
return program; return program;
} }
...@@ -92,7 +92,7 @@ const framework::Program<Dtype, P> Loader<Dtype, P>::Load( ...@@ -92,7 +92,7 @@ const framework::Program<Dtype, P> Loader<Dtype, P>::Load(
template <typename Dtype, Precision P> template <typename Dtype, Precision P>
const framework::Program<Dtype, P> Loader<Dtype, P>::LoadProgram( const framework::Program<Dtype, P> Loader<Dtype, P>::LoadProgram(
const std::string &model_path, bool optimize) { const std::string &model_path, bool optimize, bool can_add_split) {
std::string model_filename = model_path; std::string model_filename = model_path;
PaddleMobile__Framework__Proto__ProgramDesc *c_program; PaddleMobile__Framework__Proto__ProgramDesc *c_program;
uint8_t *buf = NULL; uint8_t *buf = NULL;
...@@ -144,7 +144,7 @@ const framework::Program<Dtype, P> Loader<Dtype, P>::LoadProgram( ...@@ -144,7 +144,7 @@ const framework::Program<Dtype, P> Loader<Dtype, P>::LoadProgram(
if (optimize) { if (optimize) {
framework::ProgramOptimize program_optimize; framework::ProgramOptimize program_optimize;
program.optimizeProgram = program.optimizeProgram =
program_optimize.FushionOptimize(originProgramDesc); program_optimize.FushionOptimize(originProgramDesc, can_add_split);
} }
if (optimize) { if (optimize) {
program.optimizeProgram->Description("optimize: "); program.optimizeProgram->Description("optimize: ");
...@@ -308,6 +308,7 @@ void Executor<Dtype, P>::InitMemory() { ...@@ -308,6 +308,7 @@ void Executor<Dtype, P>::InitMemory() {
template <typename Dtype, Precision P> template <typename Dtype, Precision P>
void Executor<Dtype, P>::InitCombineMemory() { void Executor<Dtype, P>::InitCombineMemory() {
LOG(kLOG_INFO) << " begin init combine memory";
char *origin_data = Get_binary_data(program_.para_path); char *origin_data = Get_binary_data(program_.para_path);
char *data = origin_data; char *data = origin_data;
for (const auto &block : to_predict_program_->Blocks()) { for (const auto &block : to_predict_program_->Blocks()) {
...@@ -328,6 +329,7 @@ void Executor<Dtype, P>::InitCombineMemory() { ...@@ -328,6 +329,7 @@ void Executor<Dtype, P>::InitCombineMemory() {
} }
} }
delete origin_data; delete origin_data;
LOG(kLOG_INFO) << " end init combine memory ";
} }
template <typename Dtype, Precision P> template <typename Dtype, Precision P>
......
...@@ -35,7 +35,7 @@ class Loader { ...@@ -35,7 +35,7 @@ class Loader {
* @b 加载分开形式的 fluid 模型 * @b 加载分开形式的 fluid 模型
* */ * */
const framework::Program<Dtype, P> Load(const std::string &dirname, const framework::Program<Dtype, P> Load(const std::string &dirname,
bool optimize = false); bool optimize = false, bool can_add_split = false);
/* /*
* @b load combine format fluid mode * @b load combine format fluid mode
...@@ -47,7 +47,7 @@ class Loader { ...@@ -47,7 +47,7 @@ class Loader {
private: private:
const framework::Program<Dtype, P> LoadProgram(const std::string &model_path, const framework::Program<Dtype, P> LoadProgram(const std::string &model_path,
bool optimize = false); bool optimize = false, bool can_add_split = false);
}; };
template <typename Dtype = CPU, Precision P = Precision::FP32> template <typename Dtype = CPU, Precision P = Precision::FP32>
......
...@@ -12,16 +12,16 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ...@@ -12,16 +12,16 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and See the License for the specific language governing permissions and
limitations under the License. */ limitations under the License. */
#include "../test_helper.h"
#include "io/io.h" #include "io/io.h"
#include "../test_helper.h"
int main() { int main() {
paddle_mobile::Loader<paddle_mobile::CPU> loader; paddle_mobile::Loader<paddle_mobile::CPU> loader;
// ../../../test/models/googlenet // ../../../test/models/googlenet
// ../../../test/models/mobilenet // ../../../test/models/mobilenet
auto program = loader.Load(g_resnet, true); auto program = loader.Load(g_googlenet, true, true);
loader.Load(g_googlenet_combine + "/model", g_googlenet_combine + "/params", // loader.Load(g_googlenet_combine + "/model", g_googlenet_combine + "/params",
true); // true);
program.originProgram->Description("program desc: "); program.originProgram->Description("program desc: ");
return 0; return 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册