|
|
|
@ -29,25 +29,7 @@ void SetConfig(AnalysisConfig *cfg) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SetInput(std::vector<std::vector<PaddleTensor>> *inputs) {
|
|
|
|
|
PADDLE_ENFORCE_EQ(FLAGS_test_all_data, 0, "Only have single batch of data.");
|
|
|
|
|
|
|
|
|
|
PaddleTensor input;
|
|
|
|
|
// channel=3, height/width=318
|
|
|
|
|
std::vector<int> shape({FLAGS_batch_size, 3, 318, 318});
|
|
|
|
|
input.shape = shape;
|
|
|
|
|
input.dtype = PaddleDType::FLOAT32;
|
|
|
|
|
|
|
|
|
|
// fill input data, for profile easily, do not use random data here.
|
|
|
|
|
size_t size = FLAGS_batch_size * 3 * 318 * 318;
|
|
|
|
|
input.data.Resize(size * sizeof(float));
|
|
|
|
|
float *input_data = static_cast<float *>(input.data.data());
|
|
|
|
|
for (size_t i = 0; i < size; i++) {
|
|
|
|
|
*(input_data + i) = static_cast<float>(i) / size;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::vector<PaddleTensor> input_slots;
|
|
|
|
|
input_slots.assign({input});
|
|
|
|
|
(*inputs).emplace_back(input_slots);
|
|
|
|
|
SetFakeImageInput(inputs, FLAGS_infer_model);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Easy for profiling independently.
|
|
|
|
@ -60,13 +42,6 @@ void profile(bool use_mkldnn = false) {
|
|
|
|
|
std::vector<std::vector<PaddleTensor>> input_slots_all;
|
|
|
|
|
SetInput(&input_slots_all);
|
|
|
|
|
TestPrediction(cfg, input_slots_all, &outputs, FLAGS_num_threads);
|
|
|
|
|
|
|
|
|
|
if (FLAGS_num_threads == 1 && !FLAGS_test_all_data) {
|
|
|
|
|
PADDLE_ENFORCE_EQ(outputs.size(), 1UL);
|
|
|
|
|
size_t size = GetSize(outputs[0]);
|
|
|
|
|
// output is a 1000-dimension feature
|
|
|
|
|
EXPECT_EQ(size, 1000 * FLAGS_batch_size);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(Analyzer_mobilenet, profile) { profile(); }
|
|
|
|
@ -74,7 +49,7 @@ TEST(Analyzer_mobilenet, profile) { profile(); }
|
|
|
|
|
TEST(Analyzer_mobilenet, profile_mkldnn) { profile(true /* use_mkldnn */); }
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
// Check the depthwise_conv status
|
|
|
|
|
// Check the depthwise_conv pass status
|
|
|
|
|
TEST(Analyzer_mobilenet, depthwise_conv_statis) {
|
|
|
|
|
AnalysisConfig cfg;
|
|
|
|
|
SetConfig(&cfg);
|
|
|
|
@ -83,8 +58,7 @@ TEST(Analyzer_mobilenet, depthwise_conv_statis) {
|
|
|
|
|
auto predictor = CreatePaddlePredictor<AnalysisConfig>(cfg);
|
|
|
|
|
auto fuse_statis = GetFuseStatis(
|
|
|
|
|
static_cast<AnalysisPredictor *>(predictor.get()), &num_ops);
|
|
|
|
|
ASSERT_TRUE(fuse_statis.count("depthwise_conv_mkldnn_pass"));
|
|
|
|
|
EXPECT_EQ(fuse_statis.at("depthwise_conv_mkldnn_pass"), 13);
|
|
|
|
|
LOG(INFO) << "num_ops: " << num_ops;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Compare result of NativeConfig and AnalysisConfig
|
|
|
|
|