diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 967555a88..d657739cc 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -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") diff --git a/src/layer/arm/concat_arm.cpp b/src/layer/arm/concat_arm.cpp index c3722b990..a2283a4ab 100644 --- a/src/layer/arm/concat_arm.cpp +++ b/src/layer/arm/concat_arm.cpp @@ -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; } diff --git a/src/layer/arm/convolution_arm.cpp b/src/layer/arm/convolution_arm.cpp index 0a26878ea..28cfceab9 100644 --- a/src/layer/arm/convolution_arm.cpp +++ b/src/layer/arm/convolution_arm.cpp @@ -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; } diff --git a/src/layer/arm/convolutiondepthwise_arm.cpp b/src/layer/arm/convolutiondepthwise_arm.cpp index b39185677..159e07018 100644 --- a/src/layer/arm/convolutiondepthwise_arm.cpp +++ b/src/layer/arm/convolutiondepthwise_arm.cpp @@ -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(); diff --git a/src/layer/arm/deconvolution_arm.cpp b/src/layer/arm/deconvolution_arm.cpp index 5f6cbbabb..fb6f5d1da 100644 --- a/src/layer/arm/deconvolution_arm.cpp +++ b/src/layer/arm/deconvolution_arm.cpp @@ -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; } diff --git a/src/layer/arm/deconvolutiondepthwise_arm.cpp b/src/layer/arm/deconvolutiondepthwise_arm.cpp index cbcc8f52e..7d209990f 100644 --- a/src/layer/arm/deconvolutiondepthwise_arm.cpp +++ b/src/layer/arm/deconvolutiondepthwise_arm.cpp @@ -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(); diff --git a/src/layer/arm/innerproduct_arm.cpp b/src/layer/arm/innerproduct_arm.cpp index ca8089efd..6721103d6 100644 --- a/src/layer/arm/innerproduct_arm.cpp +++ b/src/layer/arm/innerproduct_arm.cpp @@ -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; } diff --git a/src/layer/arm/reshape_arm.cpp b/src/layer/arm/reshape_arm.cpp index d6da147fa..16f066570 100644 --- a/src/layer/arm/reshape_arm.cpp +++ b/src/layer/arm/reshape_arm.cpp @@ -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; } diff --git a/src/layer/convolution.cpp b/src/layer/convolution.cpp index 16b4beb36..c96f27923 100644 --- a/src/layer/convolution.cpp +++ b/src/layer/convolution.cpp @@ -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); diff --git a/src/layer/convolutiondepthwise.cpp b/src/layer/convolutiondepthwise.cpp index d0f16c32b..946ff83db 100644 --- a/src/layer/convolutiondepthwise.cpp +++ b/src/layer/convolutiondepthwise.cpp @@ -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; gload_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(); diff --git a/src/layer/innerproduct.cpp b/src/layer/innerproduct.cpp index a25f32c8f..f4b0e97f5 100644 --- a/src/layer/innerproduct.cpp +++ b/src/layer/innerproduct.cpp @@ -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(); diff --git a/src/layer/x86/convolution_x86.cpp b/src/layer/x86/convolution_x86.cpp index 726fed3f3..9bdb5aaf1 100644 --- a/src/layer/x86/convolution_x86.cpp +++ b/src/layer/x86/convolution_x86.cpp @@ -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; } diff --git a/src/layer/x86/convolutiondepthwise_x86.cpp b/src/layer/x86/convolutiondepthwise_x86.cpp index 85a74bb40..b7ce6810a 100644 --- a/src/layer/x86/convolutiondepthwise_x86.cpp +++ b/src/layer/x86/convolutiondepthwise_x86.cpp @@ -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(); diff --git a/src/layer/yolodetectionoutput.cpp b/src/layer/yolodetectionoutput.cpp index 244a4bb27..8d8518687 100644 --- a/src/layer/yolodetectionoutput.cpp +++ b/src/layer/yolodetectionoutput.cpp @@ -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; }