mirror of
https://github.com/Tencent/ncnn.git
synced 2026-10-28 11:47:38 +08:00
call vulkan create_pipeline on the vkdev condition, drop opt_cpu hacks
This commit is contained in:
+2
-2
@@ -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")
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user