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) 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")


+ 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) 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;
} }


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

@@ -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;
} }


+ 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) 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();


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

@@ -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;
} }


+ 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) 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();


+ 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); 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;
} }


+ 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); 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;
} }


+ 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) 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);


+ 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) 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();


+ 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) 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();


+ 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) 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;
} }


+ 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) 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();


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

@@ -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;
} }


Loading…
Cancel
Save