Browse Source

fp16a option fix

tags/20200916
nihuini 5 years ago
parent
commit
a334513b5e
3 changed files with 24 additions and 2 deletions
  1. +2
    -0
      src/gpu.cpp
  2. +18
    -2
      src/net.cpp
  3. +4
    -0
      tests/test_squeezenet.cpp

+ 2
- 0
src/gpu.cpp View File

@@ -2372,6 +2372,8 @@ void VulkanDevice::destroy_utility_operator()
{
Option opt;
opt.use_vulkan_compute = true;
opt.use_fp16_arithmetic = false;
opt.use_int8_arithmetic = false;
opt.pipeline_cache = 0;

// from buffer | image


+ 18
- 2
src/net.cpp View File

@@ -166,6 +166,14 @@ int Net::load_param(const DataReader& dr)
if (vkdev->info.bug_storage_buffer_no_l1) opt.use_image_storage = true;

if (vkdev->info.bug_layout_binding_id_alias) opt.use_image_storage = false;

// fp16a makes no sense when fp16 storage disabled
if (!opt.use_fp16_packed && !opt.use_fp16_storage) opt.use_fp16_arithmetic = false;
}
else
{
// fp16a makes no sense when fp16 storage disabled
if (!opt.use_fp16_storage) opt.use_fp16_arithmetic = false;
}
#endif // NCNN_VULKAN

@@ -374,6 +382,14 @@ int Net::load_param_bin(const DataReader& dr)
if (vkdev->info.bug_storage_buffer_no_l1) opt.use_image_storage = true;

if (vkdev->info.bug_layout_binding_id_alias) opt.use_image_storage = false;

// fp16a makes no sense when fp16 storage disabled
if (!opt.use_fp16_packed && !opt.use_fp16_storage) opt.use_fp16_arithmetic = false;
}
else
{
// fp16a makes no sense when fp16 storage disabled
if (!opt.use_fp16_storage) opt.use_fp16_arithmetic = false;
}
#endif // NCNN_VULKAN

@@ -1183,7 +1199,7 @@ int Net::forward_layer(int layer_index, std::vector<Mat>& blob_mats, const Optio
if (elemcount % 8 == 0)
dst_elempack = 8;
#elif NCNN_ARM82
if (elemcount % 8 == 0 && opt.use_fp16_arithmetic && layer->support_fp16_storage)
if (elemcount % 8 == 0 && opt.use_fp16_storage && opt.use_fp16_arithmetic && layer->support_fp16_storage)
dst_elempack = 8;
else if (elemcount % 4 == 0)
dst_elempack = 4;
@@ -1316,7 +1332,7 @@ int Net::forward_layer(int layer_index, std::vector<Mat>& blob_mats, const Optio
if (elemcount % 8 == 0)
dst_elempack = 8;
#elif NCNN_ARM82
if (elemcount % 8 == 0 && opt.use_fp16_arithmetic && layer->support_fp16_storage)
if (elemcount % 8 == 0 && opt.use_fp16_storage && opt.use_fp16_arithmetic && layer->support_fp16_storage)
dst_elempack = 8;
else if (elemcount % 4 == 0)
dst_elempack = 4;


+ 4
- 0
tests/test_squeezenet.cpp View File

@@ -219,18 +219,21 @@ int main()
opts[0].use_packing_layout = false;
opts[0].use_fp16_packed = false;
opts[0].use_fp16_storage = false;
opts[0].use_fp16_arithmetic = false;
opts[0].use_shader_pack8 = false;
opts[0].use_image_storage = false;

opts[1].use_packing_layout = true;
opts[1].use_fp16_packed = true;
opts[1].use_fp16_storage = false;
opts[1].use_fp16_arithmetic = false;
opts[1].use_shader_pack8 = true;
opts[1].use_image_storage = false;

opts[2].use_packing_layout = true;
opts[2].use_fp16_packed = true;
opts[2].use_fp16_storage = true;
opts[2].use_fp16_arithmetic = false;
opts[2].use_bf16_storage = true;
opts[2].use_shader_pack8 = true;
opts[2].use_image_storage = true;
@@ -240,6 +243,7 @@ int main()
opts[3].use_packing_layout = true;
opts[3].use_fp16_packed = true;
opts[3].use_fp16_storage = true;
opts[3].use_fp16_arithmetic = false;// FIXME enable me
opts[3].use_bf16_storage = false;
opts[3].use_shader_pack8 = true;
opts[3].use_image_storage = true;


Loading…
Cancel
Save