From efbfd957ff6f5a08f17eb6d307ee6183b0ee3cf7 Mon Sep 17 00:00:00 2001 From: hyunback kim Date: Fri, 11 Feb 2022 00:13:33 +0900 Subject: [PATCH] [GPU] Enable disabled network fro oneDNNv2.6-pc2 (#10226) Some networks newly uses wtags in oneDNN. Add g_os_is_yx_osa2_isa8_osv8_isv2 Signed-off-by: hyunback --- .../intel_gpu/include/intel_gpu/runtime/format.hpp | 1 + src/plugins/intel_gpu/src/graph/impls/onednn/utils.cpp | 1 + .../intel_gpu/src/graph/kernel_selector_helper.cpp | 4 ++++ .../src/kernel_selector/common/tensor_type.cpp | 2 ++ .../intel_gpu/src/kernel_selector/common/tensor_type.h | 1 + .../cl_kernels/include/batch_headers/fetch_weights.cl | 10 ++++++++++ .../kernel_selector/core/cl_kernels/reorder_weights.cl | 4 ++++ .../kernel_selector/core/kernel_selector_common.cpp | 1 + src/plugins/intel_gpu/src/runtime/format.cpp | 1 + 9 files changed, 25 insertions(+) diff --git a/src/plugins/intel_gpu/include/intel_gpu/runtime/format.hpp b/src/plugins/intel_gpu/include/intel_gpu/runtime/format.hpp index d41c233cc08..1e77bf55c6b 100644 --- a/src/plugins/intel_gpu/include/intel_gpu/runtime/format.hpp +++ b/src/plugins/intel_gpu/include/intel_gpu/runtime/format.hpp @@ -216,6 +216,7 @@ struct format { gi_yxs_os_yxsv2_osv16, giy_xs_os_xsv2_osv8__ao32, giy_xs_os_xsv2_osv16__ao32, + g_os_is_yx_osa2_isa8_osv8_isv2, g_os_is_yx_osa4_isa8_osv8_isv4, g_os_is_yx_osa4_isa8_osv8_isv2, g_os_is_yx_osa2_isa8_osv16_isv2, diff --git a/src/plugins/intel_gpu/src/graph/impls/onednn/utils.cpp b/src/plugins/intel_gpu/src/graph/impls/onednn/utils.cpp index c2f37d7f89c..36051ae57f3 100644 --- a/src/plugins/intel_gpu/src/graph/impls/onednn/utils.cpp +++ b/src/plugins/intel_gpu/src/graph/impls/onednn/utils.cpp @@ -271,6 +271,7 @@ static cldnn::format convert_format(dnnl::memory::format_tag fmt, bool is_groupe case dnnl::memory::format_tag::Abcde16a: return cldnn::format::gs_oiyx_gsv16; case dnnl::memory::format_tag::Abcde32a: return cldnn::format::gs_oiyx_gsv32; case dnnl::memory::format_tag::aCBde16c16b: return cldnn::format::g_is_os_yx_isv16_osv16; + case dnnl::memory::format_tag::aBCde2b8c8b2c: return cldnn::format::g_os_is_yx_osa2_isa8_osv8_isv2; case dnnl::memory::format_tag::aBCde4b8c8b4c: return cldnn::format::g_os_is_yx_osa4_isa8_osv8_isv4; case dnnl::memory::format_tag::aBCde4b8c8b2c: return cldnn::format::g_os_is_yx_osa4_isa8_osv8_isv2; case dnnl::memory::format_tag::aBCd2b8c16b4c: return cldnn::format::g_os_is_yx_osa2_isa8_osv16_isv4; diff --git a/src/plugins/intel_gpu/src/graph/kernel_selector_helper.cpp b/src/plugins/intel_gpu/src/graph/kernel_selector_helper.cpp index 8c2e6343931..cab06f3e87e 100644 --- a/src/plugins/intel_gpu/src/graph/kernel_selector_helper.cpp +++ b/src/plugins/intel_gpu/src/graph/kernel_selector_helper.cpp @@ -258,6 +258,8 @@ kernel_selector::weights_layout to_weights_layout(format f, bool is_grouped) { return kernel_selector::weights_layout::os_is_zyx_osa4_isa8_osv8_isv2; case format::os_is_zyx_osa4_isa8_osv8_isv4: return kernel_selector::weights_layout::os_is_zyx_osa4_isa8_osv8_isv4; + case format::g_os_is_yx_osa2_isa8_osv8_isv2: + return kernel_selector::weights_layout::g_os_is_yx_osa2_isa8_osv8_isv2; case format::g_os_is_yx_osa4_isa8_osv8_isv2: return kernel_selector::weights_layout::g_os_is_yx_osa4_isa8_osv8_isv2; case format::g_os_is_yx_osa4_isa8_osv8_isv4: @@ -456,6 +458,8 @@ cldnn::format::type from_weights_layout(kernel_selector::weights_layout l) { return cldnn::format::os_is_zyx_osa4_isa8_osv8_isv2; case kernel_selector::weights_layout::os_is_zyx_osa4_isa8_osv8_isv4: return cldnn::format::os_is_zyx_osa4_isa8_osv8_isv4; + case kernel_selector::weights_layout::g_os_is_yx_osa2_isa8_osv8_isv2: + return cldnn::format::g_os_is_yx_osa2_isa8_osv8_isv2; case kernel_selector::weights_layout::g_os_is_yx_osa4_isa8_osv8_isv2: return cldnn::format::g_os_is_yx_osa4_isa8_osv8_isv2; case kernel_selector::weights_layout::g_os_is_yx_osa4_isa8_osv8_isv4: diff --git a/src/plugins/intel_gpu/src/kernel_selector/common/tensor_type.cpp b/src/plugins/intel_gpu/src/kernel_selector/common/tensor_type.cpp index f6c89ac127a..ea9a0b01e28 100644 --- a/src/plugins/intel_gpu/src/kernel_selector/common/tensor_type.cpp +++ b/src/plugins/intel_gpu/src/kernel_selector/common/tensor_type.cpp @@ -86,6 +86,7 @@ WeightsTensor::WeightsChannelArray WeightsTensor::weightsChannelArray {{ { WeightsLayout::os_is_yx_isa8_osv16_isv4, { 0, 1, -1, 2, 3, -1 } }, { WeightsLayout::os_is_yx_isa8_osv8_isv4_swizzled_by_4, { 0, 1, -1, 2, 3, -1 } }, { WeightsLayout::os_is_yx_osa4_isa8_osv8_isv4, { 0, 1, -1, 2, 3, -1 } }, + { WeightsLayout::g_os_is_yx_osa2_isa8_osv8_isv2, { 0, 1, -1, 2, 3, 4 } }, { WeightsLayout::g_os_is_yx_osa4_isa8_osv8_isv4, { 0, 1, -1, 2, 3, 4 } }, { WeightsLayout::g_os_is_zyx_osa4_isa8_osv8_isv4, { 0, 1, 2, 3, 4, 5 } }, { WeightsLayout::os_is_yx_osa4_isa8_osv8_isv2, { 0, 1, -1, 2, 3, -1 } }, @@ -544,6 +545,7 @@ NDims WeightsTensor::GetSimpleDims(const std::vector& d, WeightsLayout l break; case os_is_yx_osa2_isa8_osv8_isv2: case is_os_yx_isa2_osa8_isv8_osv2: + case g_os_is_yx_osa2_isa8_osv8_isv2: newDims[2] = RoundUp(newDims[2], 16); newDims[3] = RoundUp(newDims[3], 16); break; diff --git a/src/plugins/intel_gpu/src/kernel_selector/common/tensor_type.h b/src/plugins/intel_gpu/src/kernel_selector/common/tensor_type.h index cb2b996112d..675c3d8a9a5 100644 --- a/src/plugins/intel_gpu/src/kernel_selector/common/tensor_type.h +++ b/src/plugins/intel_gpu/src/kernel_selector/common/tensor_type.h @@ -108,6 +108,7 @@ enum WeightsLayout { os_is_zyx_isa8_osv16_isv4, // for fully connected MMAD os_is_yx_osa4_isa8_osv8_isv4, // for MMAD convolution swizzled from ofm 0..7 to 0,4,8,12,16,20,24,28, is_os_yx_isa4_osa8_isv8_osv4, // for onednn deconvolution + g_os_is_yx_osa2_isa8_osv8_isv2, // for MMAD convolution swizzled from ofm 0..7 to 0,4,8,12,16,20,24,28, g_os_is_yx_osa4_isa8_osv8_isv4, // for MMAD convolution swizzled from ofm 0..7 to 0,4,8,12,16,20,24,28, g_os_is_zyx_osa4_isa8_osv8_isv4, // for MMAD convolution swizzled from ofm 0..7 to 0,4,8,12,16,20,24,28, os_is_yx_osa4_isa8_osv8_isv2, // for MMAD convolution swizzled from ofm 0..7 to 0,4,8,12,16,20,24,28, diff --git a/src/plugins/intel_gpu/src/kernel_selector/core/cl_kernels/include/batch_headers/fetch_weights.cl b/src/plugins/intel_gpu/src/kernel_selector/core/cl_kernels/include/batch_headers/fetch_weights.cl index a30403b6f14..7c1cdc8a34f 100644 --- a/src/plugins/intel_gpu/src/kernel_selector/core/cl_kernels/include/batch_headers/fetch_weights.cl +++ b/src/plugins/intel_gpu/src/kernel_selector/core/cl_kernels/include/batch_headers/fetch_weights.cl @@ -834,6 +834,16 @@ inline uint get_g_is_os_yx_isa4_osa8_isv8_osv4(uint g, uint o, uint i, uint z, u CAT(prefix, _OFM_NUM), \ CAT(prefix, _OFFSET)) +#define GET_FILTER_G_OS_IS_YX_OSA2_ISA8_OSV8_ISV2_INDEX(prefix, g, o, i, y, x) \ + get_g_os_is_yx_osa2_isa8_osv8_isv2( \ + g, o, i, 0, y, x, \ + CAT(prefix, _SIZE_X), \ + CAT(prefix, _SIZE_Y), \ + 1, \ + CAT(prefix, _IFM_NUM), \ + CAT(prefix, _OFM_NUM), \ + CAT(prefix, _OFFSET)) + #define GET_FILTER_OS_IS_YX_OSA2_ISA8_OSV8_ISV2_INDEX(prefix, o, i, y, x) \ get_g_os_is_yx_osa2_isa8_osv8_isv2( \ 0, o, i, 0, y, x, \ diff --git a/src/plugins/intel_gpu/src/kernel_selector/core/cl_kernels/reorder_weights.cl b/src/plugins/intel_gpu/src/kernel_selector/core/cl_kernels/reorder_weights.cl index a9a603bc864..adc837aecce 100644 --- a/src/plugins/intel_gpu/src/kernel_selector/core/cl_kernels/reorder_weights.cl +++ b/src/plugins/intel_gpu/src/kernel_selector/core/cl_kernels/reorder_weights.cl @@ -105,6 +105,8 @@ inline uint FUNC(get_input_index)(uint g, uint o, uint i, uint z, uint y, uint x return GET_FILTER_OS_IS_ZYX_OSV16_ISV16_INDEX(INPUT0, o, i, z, y, x); #elif defined INPUT0_LAYOUT_OS_IS_YX_OSA2_ISA8_OSV16_ISV4 return GET_FILTER_OS_IS_YX_OSA2_ISA8_OSV16_ISV4_INDEX(INPUT0, o, i, y, x); +#elif defined INPUT0_LAYOUT_G_OS_IS_YX_OSA2_ISA8_OSV8_ISV2 + return GET_FILTER_G_OS_IS_YX_OSA2_ISA8_OSV8_ISV2_INDEX(INPUT0, g, o, i, y, x); #elif defined INPUT0_LAYOUT_G_OS_IS_YX_OSA2_ISA8_OSV16_ISV4 return GET_FILTER_G_OS_IS_YX_OSA2_ISA8_OSV16_ISV4_INDEX(INPUT0, g, o, i, y, x); #elif defined INPUT0_LAYOUT_OS_IS_YX_OSA2_ISA8_OSV16_ISV2 @@ -225,6 +227,8 @@ inline uint FUNC(get_output_index)(uint g, uint o, uint i, uint z, uint y, uint return GET_FILTER_G_OS_IS_ZYX_OSA4_ISA8_OSV8_ISV2_INDEX(OUTPUT, g, o, i, z, y, x); #elif defined OUTPUT_LAYOUT_OS_IS_YX_OSA2_ISA8_OSV16_ISV2 return GET_FILTER_OS_IS_YX_OSA2_ISA8_OSV16_ISV2_INDEX(OUTPUT, o, i, y, x); +#elif defined OUTPUT_LAYOUT_G_OS_IS_YX_OSA2_ISA8_OSV8_ISV2 + return GET_FILTER_G_OS_IS_YX_OSA2_ISA8_OSV8_ISV2_INDEX(OUTPUT, g, o, i, y, x); #elif defined OUTPUT_LAYOUT_G_OS_IS_YX_OSA2_ISA8_OSV16_ISV2 return GET_FILTER_G_OS_IS_YX_OSA2_ISA8_OSV16_ISV2_INDEX(OUTPUT, g, o, i, y, x); #elif defined OUTPUT_LAYOUT_OS_IS_YX_OSA2_ISA8_OSV16_ISV4 diff --git a/src/plugins/intel_gpu/src/kernel_selector/core/kernel_selector_common.cpp b/src/plugins/intel_gpu/src/kernel_selector/core/kernel_selector_common.cpp index 8e7f3c4f486..f1d8f30bf44 100644 --- a/src/plugins/intel_gpu/src/kernel_selector/core/kernel_selector_common.cpp +++ b/src/plugins/intel_gpu/src/kernel_selector/core/kernel_selector_common.cpp @@ -385,6 +385,7 @@ std::string toString(WeightsLayout layout) { case WeightsLayout::gs_oi_yxs_gsv16_yxsv4: return "GS_OI_YXS_GSV16_YXSV4"; case WeightsLayout::gs_oi_yxs_gsv32_yxsv4: return "GS_OI_YXS_GSV32_YXSV4"; case WeightsLayout::os_is_yx_osa4_isa8_osv8_isv4: return "OS_IS_YX_OSA4_ISA8_OSV8_ISV4"; + case WeightsLayout::g_os_is_yx_osa2_isa8_osv8_isv2: return "G_OS_IS_YX_OSA2_ISA8_OSV8_ISV2"; case WeightsLayout::g_os_is_yx_osa4_isa8_osv8_isv4: return "G_OS_IS_YX_OSA4_ISA8_OSV8_ISV4"; case WeightsLayout::g_os_is_zyx_osa4_isa8_osv8_isv4: return "G_OS_IS_ZYX_OSA4_ISA8_OSV8_ISV4"; case WeightsLayout::os_is_yx_osa4_isa8_osv8_isv2: return "OS_IS_YX_OSA4_ISA8_OSV8_ISV2"; diff --git a/src/plugins/intel_gpu/src/runtime/format.cpp b/src/plugins/intel_gpu/src/runtime/format.cpp index c007d338d5f..554949a0d0b 100644 --- a/src/plugins/intel_gpu/src/runtime/format.cpp +++ b/src/plugins/intel_gpu/src/runtime/format.cpp @@ -144,6 +144,7 @@ const format_traits& format::traits(type fmt) { FMT_TRAITS(g_os_zyx_is_osv32_isv4, 1, 1, 3, 1, {0, 1, 2, 3, 4, 5}, "gozyxi", "oixyz?g", {{0, 32}, {1, 4}}), FMT_TRAITS(g_os_zyx_is_osv32_isv16, 1, 1, 3, 1, {0, 1, 2, 3, 4, 5}, "gozyxi", "oixyz?g", {{0, 32}, {1, 16}}), FMT_TRAITS(g_os_zyx_is_osv32_isv32, 1, 1, 3, 1, {0, 1, 2, 3, 4, 5}, "gozyxi", "oixyz?g", {{0, 32}, {1, 32}}), + FMT_TRAITS(g_os_is_yx_osa2_isa8_osv8_isv2, 1, 1, 2, 1, {0, 1, 2, 3, 4}, "goiyx", "oixy??g", {{0, 16}, {1, 16}}), FMT_TRAITS(g_os_is_yx_osa4_isa8_osv8_isv4, 1, 1, 2, 1, {0, 1, 2, 3, 4}, "goiyx", "oixy??g", {{0, 32}, {1, 32}}), FMT_TRAITS(g_os_is_zyx_osa4_isa8_osv8_isv4, 1, 1, 3, 1, {0, 1, 2, 3, 4, 5}, "goizyx", "oixyz?g", {{0, 32}, {1, 32}}), FMT_TRAITS(g_os_is_yx_osa4_isa8_osv8_isv2, 1, 1, 2, 1, {0, 1, 2, 3, 4}, "goiyx", "oixy??g", {{0, 32}, {1, 16}}),