Browse Source

call vulkan create_pipeline on the vkdev condition, drop opt_cpu hacks

tags/20191113
nihuini 6 years ago
parent
commit
cd4be6d0fa
14 changed files with 46 additions and 121 deletions
  1. +2
    -2
      src/CMakeLists.txt
  2. +2
    -9
      src/layer/arm/concat_arm.cpp
  3. +2
    -6
      src/layer/arm/convolution_arm.cpp
  4. +4
    -10
      src/layer/arm/convolutiondepthwise_arm.cpp
  5. +2
    -6
      src/layer/arm/deconvolution_arm.cpp
  6. +4
    -10
      src/layer/arm/deconvolutiondepthwise_arm.cpp
  7. +2
    -8
      src/layer/arm/innerproduct_arm.cpp
  8. +2
    -8
      src/layer/arm/reshape_arm.cpp
  9. +7
    -15
      src/layer/convolution.cpp
  10. +6
    -12
      src/layer/convolutiondepthwise.cpp
  11. +5
    -11
      src/layer/innerproduct.cpp
  12. +2
    -8
      src/layer/x86/convolution_x86.cpp
  13. +4
    -10
      src/layer/x86/convolutiondepthwise_x86.cpp
  14. +2
    -6
      src/layer/yolodetectionoutput.cpp

+ 2
- 2
src/CMakeLists.txt View File

@@ -88,8 +88,8 @@ macro(ncnn_add_layer class)
if(WITH_LAYER_${name}_vulkan)
set(layer_declaration "${layer_declaration}#include \"layer/vulkan/${name}_vulkan.h\"\n")
set(layer_declaration_class "${layer_declaration_class}, virtual public ${class}_vulkan")
set(create_pipeline_content "${create_pipeline_content} if (opt.use_vulkan_compute) { int ret = ${class}_vulkan::create_pipeline(opt); if (ret) return ret; }\n")
set(destroy_pipeline_content " if (opt.use_vulkan_compute) { int ret = ${class}_vulkan::destroy_pipeline(opt); if (ret) return ret; }\n${destroy_pipeline_content}")
set(create_pipeline_content "${create_pipeline_content} if (vkdev) { int ret = ${class}_vulkan::create_pipeline(opt); if (ret) return ret; }\n")
set(destroy_pipeline_content " if (vkdev) { int ret = ${class}_vulkan::destroy_pipeline(opt); if (ret) return ret; }\n${destroy_pipeline_content}")

file(GLOB_RECURSE SHADER_SRCS "layer/vulkan/shader/${name}.comp")
file(GLOB_RECURSE SHADER_SUBSRCS "layer/vulkan/shader/${name}_*.comp")


+ 2
- 9
src/layer/arm/concat_arm.cpp View File

@@ -35,9 +35,6 @@ int Concat_arm::create_pipeline(const Option& opt)
if (opt.use_packing_layout)
{

Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;

{
packing_pack4 = ncnn::create_layer(ncnn::LayerType::Packing);

@@ -46,7 +43,7 @@ int Concat_arm::create_pipeline(const Option& opt)

packing_pack4->load_param(pd);

packing_pack4->create_pipeline(opt_cpu);
packing_pack4->create_pipeline(opt);
}

}
@@ -61,13 +58,9 @@ int Concat_arm::destroy_pipeline(const Option& opt)
if (opt.use_packing_layout)
{

Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;

if (packing_pack4)
{
packing_pack4->destroy_pipeline(opt_cpu);

packing_pack4->destroy_pipeline(opt);
delete packing_pack4;
packing_pack4 = 0;
}


+ 2
- 6
src/layer/arm/convolution_arm.cpp View File

@@ -95,9 +95,7 @@ int Convolution_arm::create_pipeline(const Option& opt)

if (activation)
{
Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;
activation->create_pipeline(opt_cpu);
activation->create_pipeline(opt);
}

const int maxk = kernel_w * kernel_h;
@@ -393,9 +391,7 @@ int Convolution_arm::destroy_pipeline(const Option& opt)
{
if (activation)
{
Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;
activation->destroy_pipeline(opt_cpu);
activation->destroy_pipeline(opt);
delete activation;
activation = 0;
}


+ 4
- 10
src/layer/arm/convolutiondepthwise_arm.cpp View File

@@ -47,9 +47,6 @@ ConvolutionDepthWise_arm::ConvolutionDepthWise_arm()

int ConvolutionDepthWise_arm::create_pipeline(const Option& opt)
{
Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;

if (activation_type == 1)
{
activation = ncnn::create_layer(ncnn::LayerType::ReLU);
@@ -84,7 +81,7 @@ int ConvolutionDepthWise_arm::create_pipeline(const Option& opt)

if (activation)
{
activation->create_pipeline(opt_cpu);
activation->create_pipeline(opt);
}

// create Convolution op for each group
@@ -193,7 +190,7 @@ int ConvolutionDepthWise_arm::create_pipeline(const Option& opt)
op->load_model(ModelBinFromMatArray(weights));
}

op->create_pipeline(opt_cpu);
op->create_pipeline(opt);

group_ops[g] = op;
}
@@ -203,19 +200,16 @@ int ConvolutionDepthWise_arm::create_pipeline(const Option& opt)

int ConvolutionDepthWise_arm::destroy_pipeline(const Option& opt)
{
Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;

if (activation)
{
activation->destroy_pipeline(opt_cpu);
activation->destroy_pipeline(opt);
delete activation;
activation = 0;
}

for (int i=0; i<(int)group_ops.size(); i++)
{
group_ops[i]->destroy_pipeline(opt_cpu);
group_ops[i]->destroy_pipeline(opt);
delete group_ops[i];
}
group_ops.clear();


+ 2
- 6
src/layer/arm/deconvolution_arm.cpp View File

@@ -73,9 +73,7 @@ int Deconvolution_arm::create_pipeline(const Option& opt)

if (activation)
{
Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;
activation->create_pipeline(opt_cpu);
activation->create_pipeline(opt);
}

const int maxk = kernel_w * kernel_h;
@@ -264,9 +262,7 @@ int Deconvolution_arm::destroy_pipeline(const Option& opt)
{
if (activation)
{
Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;
activation->destroy_pipeline(opt_cpu);
activation->destroy_pipeline(opt);
delete activation;
activation = 0;
}


+ 4
- 10
src/layer/arm/deconvolutiondepthwise_arm.cpp View File

@@ -36,9 +36,6 @@ DeconvolutionDepthWise_arm::DeconvolutionDepthWise_arm()

int DeconvolutionDepthWise_arm::create_pipeline(const Option& opt)
{
Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;

if (activation_type == 1)
{
activation = ncnn::create_layer(ncnn::LayerType::ReLU);
@@ -73,7 +70,7 @@ int DeconvolutionDepthWise_arm::create_pipeline(const Option& opt)

if (activation)
{
activation->create_pipeline(opt_cpu);
activation->create_pipeline(opt);
}

// create Deconvolution op for each group
@@ -167,7 +164,7 @@ int DeconvolutionDepthWise_arm::create_pipeline(const Option& opt)
op->load_model(ModelBinFromMatArray(weights));
}

op->create_pipeline(opt_cpu);
op->create_pipeline(opt);

group_ops[g] = op;
}
@@ -177,19 +174,16 @@ int DeconvolutionDepthWise_arm::create_pipeline(const Option& opt)

int DeconvolutionDepthWise_arm::destroy_pipeline(const Option& opt)
{
Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;

if (activation)
{
activation->destroy_pipeline(opt_cpu);
activation->destroy_pipeline(opt);
delete activation;
activation = 0;
}

for (int i=0; i<(int)group_ops.size(); i++)
{
group_ops[i]->destroy_pipeline(opt_cpu);
group_ops[i]->destroy_pipeline(opt);
delete group_ops[i];
}
group_ops.clear();


+ 2
- 8
src/layer/arm/innerproduct_arm.cpp View File

@@ -48,10 +48,7 @@ int InnerProduct_arm::create_pipeline(const Option& opt)

flatten->load_param(pd);

Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;

flatten->create_pipeline(opt_cpu);
flatten->create_pipeline(opt);
}

} // opt.use_packing_layout
@@ -64,10 +61,7 @@ int InnerProduct_arm::destroy_pipeline(const Option& opt)
{
if (flatten)
{
Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;

flatten->destroy_pipeline(opt_cpu);
flatten->destroy_pipeline(opt);
delete flatten;
flatten = 0;
}


+ 2
- 8
src/layer/arm/reshape_arm.cpp View File

@@ -44,10 +44,7 @@ int Reshape_arm::create_pipeline(const Option& opt)

flatten->load_param(pd);

Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;

flatten->create_pipeline(opt_cpu);
flatten->create_pipeline(opt);
}
#endif // __ARM_NEON

@@ -58,10 +55,7 @@ int Reshape_arm::destroy_pipeline(const Option& opt)
{
if (flatten)
{
Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;

flatten->destroy_pipeline(opt_cpu);
flatten->destroy_pipeline(opt);
delete flatten;
flatten = 0;
}


+ 7
- 15
src/layer/convolution.cpp View File

@@ -77,9 +77,6 @@ int Convolution::load_model(const ModelBin& mb)

int Convolution::create_pipeline(const Option& opt)
{
Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;

use_int8_inference = opt.use_int8_inference;

if (int8_scale_term == 0)
@@ -113,7 +110,7 @@ int Convolution::create_pipeline(const Option& opt)

op->load_param(pd);

op->create_pipeline(opt_cpu);
op->create_pipeline(opt);

ncnn::Option opt;
opt.blob_allocator = int8_weight_data.allocator;
@@ -138,7 +135,7 @@ int Convolution::create_pipeline(const Option& opt)

quantize->load_param(pd);

quantize->create_pipeline(opt_cpu);
quantize->create_pipeline(opt);
}

dequantize_ops.resize(num_output);
@@ -160,7 +157,7 @@ int Convolution::create_pipeline(const Option& opt)

dequantize_ops[n]->load_param(pd);

dequantize_ops[n]->create_pipeline(opt_cpu);
dequantize_ops[n]->create_pipeline(opt);

ncnn::Mat weights[1];
weights[0] = bias_data.range(n, 1);
@@ -176,26 +173,23 @@ int Convolution::create_pipeline(const Option& opt)

int Convolution::destroy_pipeline(const Option& opt)
{
Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;

if (quantize)
{
quantize->destroy_pipeline(opt_cpu);
quantize->destroy_pipeline(opt);
delete quantize;
quantize = 0;
}

for (int i=0; i<(int)dequantize_ops.size(); i++)
{
dequantize_ops[i]->destroy_pipeline(opt_cpu);
dequantize_ops[i]->destroy_pipeline(opt);
delete dequantize_ops[i];
}
dequantize_ops.clear();

for (int i=0; i<(int)requantize_ops.size(); i++)
{
requantize_ops[i]->destroy_pipeline(opt_cpu);
requantize_ops[i]->destroy_pipeline(opt);
delete requantize_ops[i];
}
requantize_ops.clear();
@@ -289,9 +283,7 @@ int Convolution::forward(const Mat& bottom_blob, Mat& top_blob, const Option& op

op->load_model(ModelBinFromMatArray(weights));

Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;
op->create_pipeline(opt_cpu);
op->create_pipeline(opt);

// forward
op->forward(bottom_blob, top_blob, opt);


+ 6
- 12
src/layer/convolutiondepthwise.cpp View File

@@ -100,9 +100,6 @@ int ConvolutionDepthWise::load_model(const ModelBin& mb)

int ConvolutionDepthWise::create_pipeline(const Option& opt)
{
Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;

use_int8_inference = opt.use_int8_inference;

if (int8_scale_term == 0)
@@ -135,7 +132,7 @@ int ConvolutionDepthWise::create_pipeline(const Option& opt)

op->load_param(pd);

op->create_pipeline(opt_cpu);
op->create_pipeline(opt);

ncnn::Option opt;
opt.blob_allocator = int8_weight_data.allocator;
@@ -164,7 +161,7 @@ int ConvolutionDepthWise::create_pipeline(const Option& opt)

quantize_ops[g]->load_param(pd);

quantize_ops[g]->create_pipeline(opt_cpu);
quantize_ops[g]->create_pipeline(opt);
}

for (int g=0; g<group; g++)
@@ -189,7 +186,7 @@ int ConvolutionDepthWise::create_pipeline(const Option& opt)

dequantize_ops[g]->load_model(ModelBinFromMatArray(weights));

dequantize_ops[g]->create_pipeline(opt_cpu);
dequantize_ops[g]->create_pipeline(opt);

dequantize_scales.push_back(top_rescale);
}
@@ -200,26 +197,23 @@ int ConvolutionDepthWise::create_pipeline(const Option& opt)

int ConvolutionDepthWise::destroy_pipeline(const Option& opt)
{
Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;

for (int i=0; i<(int)quantize_ops.size(); i++)
{
quantize_ops[i]->destroy_pipeline(opt_cpu);
quantize_ops[i]->destroy_pipeline(opt);
delete quantize_ops[i];
}
quantize_ops.clear();

for (int i=0; i<(int)dequantize_ops.size(); i++)
{
dequantize_ops[i]->destroy_pipeline(opt_cpu);
dequantize_ops[i]->destroy_pipeline(opt);
delete dequantize_ops[i];
}
dequantize_ops.clear();

for (int i=0; i<(int)requantize_ops.size(); i++)
{
requantize_ops[i]->destroy_pipeline(opt_cpu);
requantize_ops[i]->destroy_pipeline(opt);
delete requantize_ops[i];
}
requantize_ops.clear();


+ 5
- 11
src/layer/innerproduct.cpp View File

@@ -64,9 +64,6 @@ int InnerProduct::load_model(const ModelBin& mb)

int InnerProduct::create_pipeline(const Option& opt)
{
Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;

use_int8_inference = opt.use_int8_inference;

if (int8_scale_term == 0)
@@ -91,7 +88,7 @@ int InnerProduct::create_pipeline(const Option& opt)

quantize->load_param(pd);

quantize->create_pipeline(opt_cpu);
quantize->create_pipeline(opt);
}

dequantize_ops.resize(num_output);
@@ -118,7 +115,7 @@ int InnerProduct::create_pipeline(const Option& opt)

dequantize_ops[n]->load_model(ModelBinFromMatArray(weights));

dequantize_ops[n]->create_pipeline(opt_cpu);
dequantize_ops[n]->create_pipeline(opt);
}
}

@@ -141,7 +138,7 @@ int InnerProduct::create_pipeline(const Option& opt)

op->load_param(pd);

op->create_pipeline(opt_cpu);
op->create_pipeline(opt);

ncnn::Option opt;
opt.blob_allocator = int8_weight_data.allocator;
@@ -161,19 +158,16 @@ int InnerProduct::create_pipeline(const Option& opt)

int InnerProduct::destroy_pipeline(const Option& opt)
{
Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;

if (quantize)
{
quantize->destroy_pipeline(opt_cpu);
quantize->destroy_pipeline(opt);
delete quantize;
quantize = 0;
}

for (int i=0; i<(int)dequantize_ops.size(); i++)
{
dequantize_ops[i]->destroy_pipeline(opt_cpu);
dequantize_ops[i]->destroy_pipeline(opt);
delete dequantize_ops[i];
}
dequantize_ops.clear();


+ 2
- 8
src/layer/x86/convolution_x86.cpp View File

@@ -47,9 +47,6 @@ Convolution_x86::Convolution_x86()

int Convolution_x86::create_pipeline(const Option& opt)
{
Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;

if (activation_type == 1)
{
activation = ncnn::create_layer(ncnn::LayerType::ReLU);
@@ -84,7 +81,7 @@ int Convolution_x86::create_pipeline(const Option& opt)

if (activation)
{
activation->create_pipeline(opt_cpu);
activation->create_pipeline(opt);
}

use_winograd3x3 = false;
@@ -122,12 +119,9 @@ int Convolution_x86::create_pipeline(const Option& opt)

int Convolution_x86::destroy_pipeline(const Option& opt)
{
Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;

if (activation)
{
activation->destroy_pipeline(opt_cpu);
activation->destroy_pipeline(opt);
delete activation;
activation = 0;
}


+ 4
- 10
src/layer/x86/convolutiondepthwise_x86.cpp View File

@@ -35,9 +35,6 @@ ConvolutionDepthWise_x86::ConvolutionDepthWise_x86()

int ConvolutionDepthWise_x86::create_pipeline(const Option& opt)
{
Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;

if (activation_type == 1)
{
activation = ncnn::create_layer(ncnn::LayerType::ReLU);
@@ -72,7 +69,7 @@ int ConvolutionDepthWise_x86::create_pipeline(const Option& opt)

if (activation)
{
activation->create_pipeline(opt_cpu);
activation->create_pipeline(opt);
}

// create Convolution op for each group
@@ -156,7 +153,7 @@ int ConvolutionDepthWise_x86::create_pipeline(const Option& opt)
op->load_model(ModelBinFromMatArray(weights));
}

op->create_pipeline(opt_cpu);
op->create_pipeline(opt);

group_ops[g] = op;
}
@@ -166,19 +163,16 @@ int ConvolutionDepthWise_x86::create_pipeline(const Option& opt)

int ConvolutionDepthWise_x86::destroy_pipeline(const Option& opt)
{
Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;

if (activation)
{
activation->destroy_pipeline(opt_cpu);
activation->destroy_pipeline(opt);
delete activation;
activation = 0;
}

for (int i=0; i<(int)group_ops.size(); i++)
{
group_ops[i]->destroy_pipeline(opt_cpu);
group_ops[i]->destroy_pipeline(opt);
delete group_ops[i];
}
group_ops.clear();


+ 2
- 6
src/layer/yolodetectionoutput.cpp View File

@@ -48,9 +48,7 @@ int YoloDetectionOutput::create_pipeline(const Option& opt)

softmax->load_param(pd);

Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;
softmax->create_pipeline(opt_cpu);
softmax->create_pipeline(opt);
}

return 0;
@@ -60,9 +58,7 @@ int YoloDetectionOutput::destroy_pipeline(const Option& opt)
{
if (softmax)
{
Option opt_cpu = opt;
opt_cpu.use_vulkan_compute = false;
softmax->destroy_pipeline(opt_cpu);
softmax->destroy_pipeline(opt);
delete softmax;
softmax = 0;
}


Loading…
Cancel
Save