call vulkan create_pipeline on the vkdev condition, drop opt_cpu hacks

This commit is contained in:
nihuini
2019-10-23 10:50:28 +08:00
parent 81a028547a
commit cd4be6d0fa
14 changed files with 46 additions and 121 deletions
+2 -2
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
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
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
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
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
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
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
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
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
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
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
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
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
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;
}