| @@ -88,8 +88,8 @@ macro(ncnn_add_layer class) | |||||
| if(WITH_LAYER_${name}_vulkan) | if(WITH_LAYER_${name}_vulkan) | ||||
| set(layer_declaration "${layer_declaration}#include \"layer/vulkan/${name}_vulkan.h\"\n") | set(layer_declaration "${layer_declaration}#include \"layer/vulkan/${name}_vulkan.h\"\n") | ||||
| set(layer_declaration_class "${layer_declaration_class}, virtual public ${class}_vulkan") | 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_SRCS "layer/vulkan/shader/${name}.comp") | ||||
| file(GLOB_RECURSE SHADER_SUBSRCS "layer/vulkan/shader/${name}_*.comp") | file(GLOB_RECURSE SHADER_SUBSRCS "layer/vulkan/shader/${name}_*.comp") | ||||
| @@ -35,9 +35,6 @@ int Concat_arm::create_pipeline(const Option& opt) | |||||
| if (opt.use_packing_layout) | if (opt.use_packing_layout) | ||||
| { | { | ||||
| Option opt_cpu = opt; | |||||
| opt_cpu.use_vulkan_compute = false; | |||||
| { | { | ||||
| packing_pack4 = ncnn::create_layer(ncnn::LayerType::Packing); | 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->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) | if (opt.use_packing_layout) | ||||
| { | { | ||||
| Option opt_cpu = opt; | |||||
| opt_cpu.use_vulkan_compute = false; | |||||
| if (packing_pack4) | if (packing_pack4) | ||||
| { | { | ||||
| packing_pack4->destroy_pipeline(opt_cpu); | |||||
| packing_pack4->destroy_pipeline(opt); | |||||
| delete packing_pack4; | delete packing_pack4; | ||||
| packing_pack4 = 0; | packing_pack4 = 0; | ||||
| } | } | ||||
| @@ -95,9 +95,7 @@ int Convolution_arm::create_pipeline(const Option& opt) | |||||
| if (activation) | 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; | const int maxk = kernel_w * kernel_h; | ||||
| @@ -393,9 +391,7 @@ int Convolution_arm::destroy_pipeline(const Option& opt) | |||||
| { | { | ||||
| if (activation) | if (activation) | ||||
| { | { | ||||
| Option opt_cpu = opt; | |||||
| opt_cpu.use_vulkan_compute = false; | |||||
| activation->destroy_pipeline(opt_cpu); | |||||
| activation->destroy_pipeline(opt); | |||||
| delete activation; | delete activation; | ||||
| activation = 0; | activation = 0; | ||||
| } | } | ||||
| @@ -47,9 +47,6 @@ ConvolutionDepthWise_arm::ConvolutionDepthWise_arm() | |||||
| int ConvolutionDepthWise_arm::create_pipeline(const Option& opt) | int ConvolutionDepthWise_arm::create_pipeline(const Option& opt) | ||||
| { | { | ||||
| Option opt_cpu = opt; | |||||
| opt_cpu.use_vulkan_compute = false; | |||||
| if (activation_type == 1) | if (activation_type == 1) | ||||
| { | { | ||||
| activation = ncnn::create_layer(ncnn::LayerType::ReLU); | activation = ncnn::create_layer(ncnn::LayerType::ReLU); | ||||
| @@ -84,7 +81,7 @@ int ConvolutionDepthWise_arm::create_pipeline(const Option& opt) | |||||
| if (activation) | if (activation) | ||||
| { | { | ||||
| activation->create_pipeline(opt_cpu); | |||||
| activation->create_pipeline(opt); | |||||
| } | } | ||||
| // create Convolution op for each group | // create Convolution op for each group | ||||
| @@ -193,7 +190,7 @@ int ConvolutionDepthWise_arm::create_pipeline(const Option& opt) | |||||
| op->load_model(ModelBinFromMatArray(weights)); | op->load_model(ModelBinFromMatArray(weights)); | ||||
| } | } | ||||
| op->create_pipeline(opt_cpu); | |||||
| op->create_pipeline(opt); | |||||
| group_ops[g] = op; | group_ops[g] = op; | ||||
| } | } | ||||
| @@ -203,19 +200,16 @@ int ConvolutionDepthWise_arm::create_pipeline(const Option& opt) | |||||
| int ConvolutionDepthWise_arm::destroy_pipeline(const Option& opt) | int ConvolutionDepthWise_arm::destroy_pipeline(const Option& opt) | ||||
| { | { | ||||
| Option opt_cpu = opt; | |||||
| opt_cpu.use_vulkan_compute = false; | |||||
| if (activation) | if (activation) | ||||
| { | { | ||||
| activation->destroy_pipeline(opt_cpu); | |||||
| activation->destroy_pipeline(opt); | |||||
| delete activation; | delete activation; | ||||
| activation = 0; | activation = 0; | ||||
| } | } | ||||
| for (int i=0; i<(int)group_ops.size(); i++) | 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]; | delete group_ops[i]; | ||||
| } | } | ||||
| group_ops.clear(); | group_ops.clear(); | ||||
| @@ -73,9 +73,7 @@ int Deconvolution_arm::create_pipeline(const Option& opt) | |||||
| if (activation) | 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; | const int maxk = kernel_w * kernel_h; | ||||
| @@ -264,9 +262,7 @@ int Deconvolution_arm::destroy_pipeline(const Option& opt) | |||||
| { | { | ||||
| if (activation) | if (activation) | ||||
| { | { | ||||
| Option opt_cpu = opt; | |||||
| opt_cpu.use_vulkan_compute = false; | |||||
| activation->destroy_pipeline(opt_cpu); | |||||
| activation->destroy_pipeline(opt); | |||||
| delete activation; | delete activation; | ||||
| activation = 0; | activation = 0; | ||||
| } | } | ||||
| @@ -36,9 +36,6 @@ DeconvolutionDepthWise_arm::DeconvolutionDepthWise_arm() | |||||
| int DeconvolutionDepthWise_arm::create_pipeline(const Option& opt) | int DeconvolutionDepthWise_arm::create_pipeline(const Option& opt) | ||||
| { | { | ||||
| Option opt_cpu = opt; | |||||
| opt_cpu.use_vulkan_compute = false; | |||||
| if (activation_type == 1) | if (activation_type == 1) | ||||
| { | { | ||||
| activation = ncnn::create_layer(ncnn::LayerType::ReLU); | activation = ncnn::create_layer(ncnn::LayerType::ReLU); | ||||
| @@ -73,7 +70,7 @@ int DeconvolutionDepthWise_arm::create_pipeline(const Option& opt) | |||||
| if (activation) | if (activation) | ||||
| { | { | ||||
| activation->create_pipeline(opt_cpu); | |||||
| activation->create_pipeline(opt); | |||||
| } | } | ||||
| // create Deconvolution op for each group | // create Deconvolution op for each group | ||||
| @@ -167,7 +164,7 @@ int DeconvolutionDepthWise_arm::create_pipeline(const Option& opt) | |||||
| op->load_model(ModelBinFromMatArray(weights)); | op->load_model(ModelBinFromMatArray(weights)); | ||||
| } | } | ||||
| op->create_pipeline(opt_cpu); | |||||
| op->create_pipeline(opt); | |||||
| group_ops[g] = op; | group_ops[g] = op; | ||||
| } | } | ||||
| @@ -177,19 +174,16 @@ int DeconvolutionDepthWise_arm::create_pipeline(const Option& opt) | |||||
| int DeconvolutionDepthWise_arm::destroy_pipeline(const Option& opt) | int DeconvolutionDepthWise_arm::destroy_pipeline(const Option& opt) | ||||
| { | { | ||||
| Option opt_cpu = opt; | |||||
| opt_cpu.use_vulkan_compute = false; | |||||
| if (activation) | if (activation) | ||||
| { | { | ||||
| activation->destroy_pipeline(opt_cpu); | |||||
| activation->destroy_pipeline(opt); | |||||
| delete activation; | delete activation; | ||||
| activation = 0; | activation = 0; | ||||
| } | } | ||||
| for (int i=0; i<(int)group_ops.size(); i++) | 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]; | delete group_ops[i]; | ||||
| } | } | ||||
| group_ops.clear(); | group_ops.clear(); | ||||
| @@ -48,10 +48,7 @@ int InnerProduct_arm::create_pipeline(const Option& opt) | |||||
| flatten->load_param(pd); | 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 | } // opt.use_packing_layout | ||||
| @@ -64,10 +61,7 @@ int InnerProduct_arm::destroy_pipeline(const Option& opt) | |||||
| { | { | ||||
| if (flatten) | if (flatten) | ||||
| { | { | ||||
| Option opt_cpu = opt; | |||||
| opt_cpu.use_vulkan_compute = false; | |||||
| flatten->destroy_pipeline(opt_cpu); | |||||
| flatten->destroy_pipeline(opt); | |||||
| delete flatten; | delete flatten; | ||||
| flatten = 0; | flatten = 0; | ||||
| } | } | ||||
| @@ -44,10 +44,7 @@ int Reshape_arm::create_pipeline(const Option& opt) | |||||
| flatten->load_param(pd); | 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 | #endif // __ARM_NEON | ||||
| @@ -58,10 +55,7 @@ int Reshape_arm::destroy_pipeline(const Option& opt) | |||||
| { | { | ||||
| if (flatten) | if (flatten) | ||||
| { | { | ||||
| Option opt_cpu = opt; | |||||
| opt_cpu.use_vulkan_compute = false; | |||||
| flatten->destroy_pipeline(opt_cpu); | |||||
| flatten->destroy_pipeline(opt); | |||||
| delete flatten; | delete flatten; | ||||
| flatten = 0; | flatten = 0; | ||||
| } | } | ||||
| @@ -77,9 +77,6 @@ int Convolution::load_model(const ModelBin& mb) | |||||
| int Convolution::create_pipeline(const Option& opt) | int Convolution::create_pipeline(const Option& opt) | ||||
| { | { | ||||
| Option opt_cpu = opt; | |||||
| opt_cpu.use_vulkan_compute = false; | |||||
| use_int8_inference = opt.use_int8_inference; | use_int8_inference = opt.use_int8_inference; | ||||
| if (int8_scale_term == 0) | if (int8_scale_term == 0) | ||||
| @@ -113,7 +110,7 @@ int Convolution::create_pipeline(const Option& opt) | |||||
| op->load_param(pd); | op->load_param(pd); | ||||
| op->create_pipeline(opt_cpu); | |||||
| op->create_pipeline(opt); | |||||
| ncnn::Option opt; | ncnn::Option opt; | ||||
| opt.blob_allocator = int8_weight_data.allocator; | opt.blob_allocator = int8_weight_data.allocator; | ||||
| @@ -138,7 +135,7 @@ int Convolution::create_pipeline(const Option& opt) | |||||
| quantize->load_param(pd); | quantize->load_param(pd); | ||||
| quantize->create_pipeline(opt_cpu); | |||||
| quantize->create_pipeline(opt); | |||||
| } | } | ||||
| dequantize_ops.resize(num_output); | 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]->load_param(pd); | ||||
| dequantize_ops[n]->create_pipeline(opt_cpu); | |||||
| dequantize_ops[n]->create_pipeline(opt); | |||||
| ncnn::Mat weights[1]; | ncnn::Mat weights[1]; | ||||
| weights[0] = bias_data.range(n, 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) | int Convolution::destroy_pipeline(const Option& opt) | ||||
| { | { | ||||
| Option opt_cpu = opt; | |||||
| opt_cpu.use_vulkan_compute = false; | |||||
| if (quantize) | if (quantize) | ||||
| { | { | ||||
| quantize->destroy_pipeline(opt_cpu); | |||||
| quantize->destroy_pipeline(opt); | |||||
| delete quantize; | delete quantize; | ||||
| quantize = 0; | quantize = 0; | ||||
| } | } | ||||
| for (int i=0; i<(int)dequantize_ops.size(); i++) | 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]; | delete dequantize_ops[i]; | ||||
| } | } | ||||
| dequantize_ops.clear(); | dequantize_ops.clear(); | ||||
| for (int i=0; i<(int)requantize_ops.size(); i++) | 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]; | delete requantize_ops[i]; | ||||
| } | } | ||||
| requantize_ops.clear(); | 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)); | 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 | // forward | ||||
| op->forward(bottom_blob, top_blob, opt); | op->forward(bottom_blob, top_blob, opt); | ||||
| @@ -100,9 +100,6 @@ int ConvolutionDepthWise::load_model(const ModelBin& mb) | |||||
| int ConvolutionDepthWise::create_pipeline(const Option& opt) | int ConvolutionDepthWise::create_pipeline(const Option& opt) | ||||
| { | { | ||||
| Option opt_cpu = opt; | |||||
| opt_cpu.use_vulkan_compute = false; | |||||
| use_int8_inference = opt.use_int8_inference; | use_int8_inference = opt.use_int8_inference; | ||||
| if (int8_scale_term == 0) | if (int8_scale_term == 0) | ||||
| @@ -135,7 +132,7 @@ int ConvolutionDepthWise::create_pipeline(const Option& opt) | |||||
| op->load_param(pd); | op->load_param(pd); | ||||
| op->create_pipeline(opt_cpu); | |||||
| op->create_pipeline(opt); | |||||
| ncnn::Option opt; | ncnn::Option opt; | ||||
| opt.blob_allocator = int8_weight_data.allocator; | 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]->load_param(pd); | ||||
| quantize_ops[g]->create_pipeline(opt_cpu); | |||||
| quantize_ops[g]->create_pipeline(opt); | |||||
| } | } | ||||
| for (int g=0; g<group; g++) | 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]->load_model(ModelBinFromMatArray(weights)); | ||||
| dequantize_ops[g]->create_pipeline(opt_cpu); | |||||
| dequantize_ops[g]->create_pipeline(opt); | |||||
| dequantize_scales.push_back(top_rescale); | dequantize_scales.push_back(top_rescale); | ||||
| } | } | ||||
| @@ -200,26 +197,23 @@ int ConvolutionDepthWise::create_pipeline(const Option& opt) | |||||
| int ConvolutionDepthWise::destroy_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++) | 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]; | delete quantize_ops[i]; | ||||
| } | } | ||||
| quantize_ops.clear(); | quantize_ops.clear(); | ||||
| for (int i=0; i<(int)dequantize_ops.size(); i++) | 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]; | delete dequantize_ops[i]; | ||||
| } | } | ||||
| dequantize_ops.clear(); | dequantize_ops.clear(); | ||||
| for (int i=0; i<(int)requantize_ops.size(); i++) | 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]; | delete requantize_ops[i]; | ||||
| } | } | ||||
| requantize_ops.clear(); | requantize_ops.clear(); | ||||
| @@ -64,9 +64,6 @@ int InnerProduct::load_model(const ModelBin& mb) | |||||
| int InnerProduct::create_pipeline(const Option& opt) | int InnerProduct::create_pipeline(const Option& opt) | ||||
| { | { | ||||
| Option opt_cpu = opt; | |||||
| opt_cpu.use_vulkan_compute = false; | |||||
| use_int8_inference = opt.use_int8_inference; | use_int8_inference = opt.use_int8_inference; | ||||
| if (int8_scale_term == 0) | if (int8_scale_term == 0) | ||||
| @@ -91,7 +88,7 @@ int InnerProduct::create_pipeline(const Option& opt) | |||||
| quantize->load_param(pd); | quantize->load_param(pd); | ||||
| quantize->create_pipeline(opt_cpu); | |||||
| quantize->create_pipeline(opt); | |||||
| } | } | ||||
| dequantize_ops.resize(num_output); | 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]->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->load_param(pd); | ||||
| op->create_pipeline(opt_cpu); | |||||
| op->create_pipeline(opt); | |||||
| ncnn::Option opt; | ncnn::Option opt; | ||||
| opt.blob_allocator = int8_weight_data.allocator; | 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) | int InnerProduct::destroy_pipeline(const Option& opt) | ||||
| { | { | ||||
| Option opt_cpu = opt; | |||||
| opt_cpu.use_vulkan_compute = false; | |||||
| if (quantize) | if (quantize) | ||||
| { | { | ||||
| quantize->destroy_pipeline(opt_cpu); | |||||
| quantize->destroy_pipeline(opt); | |||||
| delete quantize; | delete quantize; | ||||
| quantize = 0; | quantize = 0; | ||||
| } | } | ||||
| for (int i=0; i<(int)dequantize_ops.size(); i++) | 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]; | delete dequantize_ops[i]; | ||||
| } | } | ||||
| dequantize_ops.clear(); | dequantize_ops.clear(); | ||||
| @@ -47,9 +47,6 @@ Convolution_x86::Convolution_x86() | |||||
| int Convolution_x86::create_pipeline(const Option& opt) | int Convolution_x86::create_pipeline(const Option& opt) | ||||
| { | { | ||||
| Option opt_cpu = opt; | |||||
| opt_cpu.use_vulkan_compute = false; | |||||
| if (activation_type == 1) | if (activation_type == 1) | ||||
| { | { | ||||
| activation = ncnn::create_layer(ncnn::LayerType::ReLU); | activation = ncnn::create_layer(ncnn::LayerType::ReLU); | ||||
| @@ -84,7 +81,7 @@ int Convolution_x86::create_pipeline(const Option& opt) | |||||
| if (activation) | if (activation) | ||||
| { | { | ||||
| activation->create_pipeline(opt_cpu); | |||||
| activation->create_pipeline(opt); | |||||
| } | } | ||||
| use_winograd3x3 = false; | use_winograd3x3 = false; | ||||
| @@ -122,12 +119,9 @@ int Convolution_x86::create_pipeline(const Option& opt) | |||||
| int Convolution_x86::destroy_pipeline(const Option& opt) | int Convolution_x86::destroy_pipeline(const Option& opt) | ||||
| { | { | ||||
| Option opt_cpu = opt; | |||||
| opt_cpu.use_vulkan_compute = false; | |||||
| if (activation) | if (activation) | ||||
| { | { | ||||
| activation->destroy_pipeline(opt_cpu); | |||||
| activation->destroy_pipeline(opt); | |||||
| delete activation; | delete activation; | ||||
| activation = 0; | activation = 0; | ||||
| } | } | ||||
| @@ -35,9 +35,6 @@ ConvolutionDepthWise_x86::ConvolutionDepthWise_x86() | |||||
| int ConvolutionDepthWise_x86::create_pipeline(const Option& opt) | int ConvolutionDepthWise_x86::create_pipeline(const Option& opt) | ||||
| { | { | ||||
| Option opt_cpu = opt; | |||||
| opt_cpu.use_vulkan_compute = false; | |||||
| if (activation_type == 1) | if (activation_type == 1) | ||||
| { | { | ||||
| activation = ncnn::create_layer(ncnn::LayerType::ReLU); | activation = ncnn::create_layer(ncnn::LayerType::ReLU); | ||||
| @@ -72,7 +69,7 @@ int ConvolutionDepthWise_x86::create_pipeline(const Option& opt) | |||||
| if (activation) | if (activation) | ||||
| { | { | ||||
| activation->create_pipeline(opt_cpu); | |||||
| activation->create_pipeline(opt); | |||||
| } | } | ||||
| // create Convolution op for each group | // create Convolution op for each group | ||||
| @@ -156,7 +153,7 @@ int ConvolutionDepthWise_x86::create_pipeline(const Option& opt) | |||||
| op->load_model(ModelBinFromMatArray(weights)); | op->load_model(ModelBinFromMatArray(weights)); | ||||
| } | } | ||||
| op->create_pipeline(opt_cpu); | |||||
| op->create_pipeline(opt); | |||||
| group_ops[g] = op; | group_ops[g] = op; | ||||
| } | } | ||||
| @@ -166,19 +163,16 @@ int ConvolutionDepthWise_x86::create_pipeline(const Option& opt) | |||||
| int ConvolutionDepthWise_x86::destroy_pipeline(const Option& opt) | int ConvolutionDepthWise_x86::destroy_pipeline(const Option& opt) | ||||
| { | { | ||||
| Option opt_cpu = opt; | |||||
| opt_cpu.use_vulkan_compute = false; | |||||
| if (activation) | if (activation) | ||||
| { | { | ||||
| activation->destroy_pipeline(opt_cpu); | |||||
| activation->destroy_pipeline(opt); | |||||
| delete activation; | delete activation; | ||||
| activation = 0; | activation = 0; | ||||
| } | } | ||||
| for (int i=0; i<(int)group_ops.size(); i++) | 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]; | delete group_ops[i]; | ||||
| } | } | ||||
| group_ops.clear(); | group_ops.clear(); | ||||
| @@ -48,9 +48,7 @@ int YoloDetectionOutput::create_pipeline(const Option& opt) | |||||
| softmax->load_param(pd); | 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; | return 0; | ||||
| @@ -60,9 +58,7 @@ int YoloDetectionOutput::destroy_pipeline(const Option& opt) | |||||
| { | { | ||||
| if (softmax) | if (softmax) | ||||
| { | { | ||||
| Option opt_cpu = opt; | |||||
| opt_cpu.use_vulkan_compute = false; | |||||
| softmax->destroy_pipeline(opt_cpu); | |||||
| softmax->destroy_pipeline(opt); | |||||
| delete softmax; | delete softmax; | ||||
| softmax = 0; | softmax = 0; | ||||
| } | } | ||||