[GPU] Onednn 3.4pc (#21064)

* Update onednn to 3.4pc branch
* [GPU] Add os_yx_is_osv16_isv2 for onednn weight format.
* Add os_y_is_x_osv16_isv4, g_os_yx_is_osv16_isv2

Signed-off-by: hyunback <hyunback.kim@intel.com>
Co-authored-by: hyunback <hyunback.kim@intel.com>
This commit is contained in:
Mingyu Kimandhyunback authored and GitHub committed 2023-11-22 20:54:20 +09:00
1 parent 5bab612ecc
commit 712c5fbd39
9 files changed
+43 -1

No files matched your search

@@ -232,8 +232,10 @@ struct format {
os_i_osv8__ai8, ///< format used only for fully connected weights
os_y_is_x_osv8_isv2,
os_y_is_x_osv8_isv4,
os_y_is_x_osv16_isv4,
os_yx_is_osv8_isv2,
os_yx_is_osv8_isv4,
os_yx_is_osv16_isv2,
os_zyx_is_osv8_isv2,
os_zyx_is_osv8_isv4,
os_zy_is_x_osv8_isv2,
@@ -294,6 +296,7 @@ struct format {
g_os_is_zyx_isa8_osv8_isv4,
g_os_yx_is_osv8_isv2,
g_os_yx_is_osv8_isv4,
g_os_yx_is_osv16_isv2,
g_os_y_is_x_osv8_isv2,
g_os_y_is_x_osv8_isv4,
@@ -694,10 +694,14 @@ kernel_selector::weights_layout to_weights_layout(format f, bool is_grouped) {
return kernel_selector::weights_layout::os_y_is_x_osv8_isv2;
case format::os_y_is_x_osv8_isv4:
return kernel_selector::weights_layout::os_y_is_x_osv8_isv4;
case format::os_y_is_x_osv16_isv4:
return kernel_selector::weights_layout::os_y_is_x_osv16_isv4;
case format::os_yx_is_osv8_isv2:
return kernel_selector::weights_layout::os_yx_is_osv8_isv2;
case format::os_yx_is_osv8_isv4:
return kernel_selector::weights_layout::os_yx_is_osv8_isv4;
case format::os_yx_is_osv16_isv2:
return kernel_selector::weights_layout::os_yx_is_osv16_isv2;
case format::os_zyx_is_osv8_isv2:
return kernel_selector::weights_layout::os_zyx_is_osv8_isv2;
case format::os_zyx_is_osv8_isv4:
@@ -710,6 +714,8 @@ kernel_selector::weights_layout to_weights_layout(format f, bool is_grouped) {
return kernel_selector::weights_layout::g_os_yx_is_osv8_isv2;
case format::g_os_yx_is_osv8_isv4:
return kernel_selector::weights_layout::g_os_yx_is_osv8_isv4;
case format::g_os_yx_is_osv16_isv2:
return kernel_selector::weights_layout::g_os_yx_is_osv16_isv2;
case format::g_os_y_is_x_osv8_isv2:
return kernel_selector::weights_layout::g_os_y_is_x_osv8_isv2;
case format::g_os_y_is_x_osv8_isv4:
@@ -1014,10 +1020,14 @@ cldnn::format::type from_weights_layout(kernel_selector::weights_layout l) {
return cldnn::format::os_y_is_x_osv8_isv2;
case kernel_selector::weights_layout::os_y_is_x_osv8_isv4:
return cldnn::format::os_y_is_x_osv8_isv4;
case kernel_selector::weights_layout::os_y_is_x_osv16_isv4:
return cldnn::format::os_y_is_x_osv16_isv4;
case kernel_selector::weights_layout::os_yx_is_osv8_isv2:
return cldnn::format::os_yx_is_osv8_isv2;
case kernel_selector::weights_layout::os_yx_is_osv8_isv4:
return cldnn::format::os_yx_is_osv8_isv4;
case kernel_selector::weights_layout::os_yx_is_osv16_isv2:
return cldnn::format::os_yx_is_osv16_isv2;
case kernel_selector::weights_layout::os_zyx_is_osv8_isv2:
return cldnn::format::os_zyx_is_osv8_isv2;
case kernel_selector::weights_layout::os_zyx_is_osv8_isv4:
@@ -1030,6 +1040,8 @@ cldnn::format::type from_weights_layout(kernel_selector::weights_layout l) {
return cldnn::format::g_os_yx_is_osv8_isv2;
case kernel_selector::weights_layout::g_os_yx_is_osv8_isv4:
return cldnn::format::g_os_yx_is_osv8_isv4;
case kernel_selector::weights_layout::g_os_yx_is_osv16_isv2:
return cldnn::format::g_os_yx_is_osv16_isv2;
case kernel_selector::weights_layout::g_os_y_is_x_osv8_isv2:
return cldnn::format::g_os_y_is_x_osv8_isv2;
case kernel_selector::weights_layout::g_os_y_is_x_osv8_isv4:
@@ -1840,10 +1840,12 @@ inline uint get_g_os_zyx_is_osv_isv_index(uint g, uint o, uint i, uint z, uint y
#define GET_FILTER_OS_YX_IS_OSV8_ISV2_INDEX(tensor, o, i, y, x) GET_FILTER_G_OS_ZYX_IS_OSV_ISV_INDEX(tensor, 0, o, i, 0, y, x, 8, 2)
#define GET_FILTER_OS_YX_IS_OSV8_ISV4_INDEX(tensor, o, i, y, x) GET_FILTER_G_OS_ZYX_IS_OSV_ISV_INDEX(tensor, 0, o, i, 0, y, x, 8, 4)
#define GET_FILTER_OS_YX_IS_OSV16_ISV2_INDEX(tensor, o, i, y, x) GET_FILTER_G_OS_ZYX_IS_OSV_ISV_INDEX(tensor, 0, o, i, 0, y, x, 16, 2)
#define GET_FILTER_OS_ZYX_IS_OSV8_ISV2_INDEX(tensor, o, i, z, y, x) GET_FILTER_G_OS_ZYX_IS_OSV_ISV_INDEX(tensor, 0, o, i, z, y, x, 8, 2)
#define GET_FILTER_OS_ZYX_IS_OSV8_ISV4_INDEX(tensor, o, i, z, y, x) GET_FILTER_G_OS_ZYX_IS_OSV_ISV_INDEX(tensor, 0, o, i, z, y, x, 8, 4)
#define GET_FILTER_G_OS_YX_IS_OSV8_ISV2_INDEX(tensor, g, o, i, y, x) GET_FILTER_G_OS_ZYX_IS_OSV_ISV_INDEX(tensor, g, o, i, z, y, x, 8, 2)
#define GET_FILTER_G_OS_YX_IS_OSV8_ISV4_INDEX(tensor, g, o, i, y, x) GET_FILTER_G_OS_ZYX_IS_OSV_ISV_INDEX(tensor, g, o, i, z, y, x, 8, 4)
#define GET_FILTER_G_OS_YX_IS_OSV16_ISV2_INDEX(tensor, g, o, i, y, x) GET_FILTER_G_OS_ZYX_IS_OSV_ISV_INDEX(tensor, g, o, i, z, y, x, 16, 2)
#define GET_FILTER_G_OS_ZYX_IS_OSV8_ISV2_INDEX(tensor, g, o, i, z, y, x) GET_FILTER_G_OS_ZYX_IS_OSV_ISV_INDEX(tensor, g, o, i, z, y, x, 8, 2)
#define GET_FILTER_G_OS_ZYX_IS_OSV8_ISV4_INDEX(tensor, g, o, i, z, y, x) GET_FILTER_G_OS_ZYX_IS_OSV_ISV_INDEX(tensor, g, o, i, z, y, x, 8, 4)
@@ -1912,6 +1914,7 @@ inline uint get_g_os_y_is_x_osv_isv_index(uint g, uint o, uint i, uint y, uint x
#define GET_FILTER_OS_Y_IS_X_OSV8_ISV2_INDEX(tensor, o, i, y, x) GET_FILTER_G_OS_Y_IS_X_OSV_ISV_INDEX(tensor, 0, o, i, y, x, 8, 2)
#define GET_FILTER_OS_Y_IS_X_OSV8_ISV4_INDEX(tensor, o, i, y, x) GET_FILTER_G_OS_Y_IS_X_OSV_ISV_INDEX(tensor, 0, o, i, y, x, 8, 4)
#define GET_FILTER_OS_Y_IS_X_OSV16_ISV4_INDEX(tensor, o, i, y, x) GET_FILTER_G_OS_Y_IS_X_OSV_ISV_INDEX(tensor, 0, o, i, y, x, 16, 4)
#define GET_FILTER_G_OS_Y_IS_X_OSV8_ISV2_INDEX(tensor, g, o, i, y, x) GET_FILTER_G_OS_Y_IS_X_OSV_ISV_INDEX(tensor, g, o, i, y, x, 8, 2)
#define GET_FILTER_G_OS_Y_IS_X_OSV8_ISV4_INDEX(tensor, g, o, i, y, x) GET_FILTER_G_OS_Y_IS_X_OSV_ISV_INDEX(tensor, g, o, i, y, x, 8, 4)
@@ -372,6 +372,8 @@ inline uint FUNC(get_input_index)(uint g, uint o, uint i, uint z, uint y, uint x
return GET_FILTER_OS_YX_IS_OSV8_ISV2_INDEX(INPUT0, o, i, y, x);
#elif defined INPUT0_LAYOUT_OS_YX_IS_OSV8_ISV4
return GET_FILTER_OS_YX_IS_OSV8_ISV4_INDEX(INPUT0, o, i, y, x);
#elif defined INPUT0_LAYOUT_OS_YX_IS_OSV16_ISV2
return GET_FILTER_OS_YX_IS_OSV16_ISV2_INDEX(INPUT0, o, i, y, x);
#elif defined INPUT0_LAYOUT_OS_ZYX_IS_OSV8_ISV2
return GET_FILTER_OS_ZYX_IS_OSV8_ISV2_INDEX(INPUT0, o, i, z, y, x);
#elif defined INPUT0_LAYOUT_OS_ZYX_IS_OSV8_ISV4
@@ -468,10 +470,14 @@ inline uint FUNC(get_input_index)(uint g, uint o, uint i, uint z, uint y, uint x
return GET_FILTER_G_OS_YX_IS_OSV8_ISV2_INDEX(INPUT0, g, o, i, y, x);
#elif defined INPUT0_LAYOUT_G_OS_YX_IS_OSV8_ISV4
return GET_FILTER_G_OS_YX_IS_OSV8_ISV4_INDEX(INPUT0, g, o, i, y, x);
#elif defined INPUT0_LAYOUT_G_OS_YX_IS_OSV16_ISV2
return GET_FILTER_G_OS_YX_IS_OSV16_ISV2_INDEX(INPUT0, g, o, i, y, x);
#elif defined INPUT0_LAYOUT_G_OS_Y_IS_X_OSV8_ISV2
return GET_FILTER_G_OS_Y_IS_X_OSV8_ISV2_INDEX(INPUT0, g, o, i, y, x);
#elif defined INPUT0_LAYOUT_G_OS_Y_IS_X_OSV8_ISV4
return GET_FILTER_G_OS_Y_IS_X_OSV8_ISV4_INDEX(INPUT0, g, o, i, y, x);
#elif defined INPUT0_LAYOUT_G_OS_Y_IS_X_OSV16_ISV4
return GET_FILTER_G_OS_Y_IS_X_OSV16_ISV4_INDEX(INPUT0, g, o, i, y, x);
#elif defined INPUT0_LAYOUT_G_OS_ZY_IS_X_OSV8_ISV2
return GET_FILTER_G_OS_ZY_IS_X_OSV8_ISV2_INDEX(INPUT0, g, o, i, z, y, x);
#elif defined INPUT0_LAYOUT_G_OS_ZYX_IS_OSV8_ISV2
@@ -651,10 +657,14 @@ inline uint FUNC(get_output_index)(uint g, uint o, uint i, uint z, uint y, uint
return GET_FILTER_OS_Y_IS_X_OSV8_ISV2_INDEX(OUTPUT, o, i, y, x);
#elif defined OUTPUT_LAYOUT_OS_Y_IS_X_OSV8_ISV4
return GET_FILTER_OS_Y_IS_X_OSV8_ISV4_INDEX(OUTPUT, o, i, y, x);
#elif defined OUTPUT_LAYOUT_OS_Y_IS_X_OSV16_ISV4
return GET_FILTER_OS_Y_IS_X_OSV16_ISV4_INDEX(OUTPUT, o, i, y, x);
#elif defined OUTPUT_LAYOUT_OS_YX_IS_OSV8_ISV2
return GET_FILTER_OS_YX_IS_OSV8_ISV2_INDEX(OUTPUT, o, i, y, x);
#elif defined OUTPUT_LAYOUT_OS_YX_IS_OSV8_ISV4
return GET_FILTER_OS_YX_IS_OSV8_ISV4_INDEX(OUTPUT, o, i, y, x);
#elif defined OUTPUT_LAYOUT_OS_YX_IS_OSV16_ISV2
return GET_FILTER_OS_YX_IS_OSV16_ISV2_INDEX(OUTPUT, o, i, y, x);
#elif defined OUTPUT_LAYOUT_OS_ZYX_IS_OSV8_ISV2
return GET_FILTER_OS_ZYX_IS_OSV8_ISV2_INDEX(OUTPUT, o, i, z, y, x);
#elif defined OUTPUT_LAYOUT_OS_ZYX_IS_OSV8_ISV4
@@ -745,6 +755,8 @@ inline uint FUNC(get_output_index)(uint g, uint o, uint i, uint z, uint y, uint
return GET_FILTER_G_OS_YX_IS_OSV8_ISV2_INDEX(OUTPUT, g, o, i, y, x);
#elif defined OUTPUT_LAYOUT_G_OS_YX_IS_OSV8_ISV4
return GET_FILTER_G_OS_YX_IS_OSV8_ISV4_INDEX(OUTPUT, g, o, i, y, x);
#elif defined OUTPUT_LAYOUT_G_OS_YX_IS_OSV16_ISV2
return GET_FILTER_G_OS_YX_IS_OSV16_ISV2_INDEX(OUTPUT, g, o, i, y, x);
#elif defined OUTPUT_LAYOUT_G_OS_Y_IS_X_OSV8_ISV2
return GET_FILTER_G_OS_Y_IS_X_OSV8_ISV2_INDEX(OUTPUT, g, o, i, y, x);
#elif defined OUTPUT_LAYOUT_G_OS_Y_IS_X_OSV8_ISV4
@@ -447,8 +447,10 @@ std::string toString(WeightsLayout layout) {
case WeightsLayout::g_os_zyx_is_osv32_isv32: return "G_OS_ZYX_IS_OSV32_ISV32";
case WeightsLayout::os_y_is_x_osv8_isv2: return "OS_Y_IS_X_OSV8_ISV2";
case WeightsLayout::os_y_is_x_osv8_isv4: return "OS_Y_IS_X_OSV8_ISV4";
case WeightsLayout::os_y_is_x_osv16_isv4: return "OS_Y_IS_X_OSV16_ISV4";
case WeightsLayout::os_yx_is_osv8_isv2: return "OS_YX_IS_OSV8_ISV2";
case WeightsLayout::os_yx_is_osv8_isv4: return "OS_YX_IS_OSV8_ISV4";
case WeightsLayout::os_yx_is_osv16_isv2: return "OS_YX_IS_OSV16_ISV2";
case WeightsLayout::os_zyx_is_osv8_isv2: return "OS_ZYX_IS_OSV8_ISV2";
case WeightsLayout::os_zyx_is_osv8_isv4: return "OS_ZYX_IS_OSV8_ISV4";
@@ -457,6 +459,7 @@ std::string toString(WeightsLayout layout) {
case WeightsLayout::g_os_yx_is_osv8_isv2: return "G_OS_YX_IS_OSV8_ISV2";
case WeightsLayout::g_os_yx_is_osv8_isv4: return "G_OS_YX_IS_OSV8_ISV4";
case WeightsLayout::g_os_yx_is_osv16_isv2: return "G_OS_YX_IS_OSV16_ISV2";
case WeightsLayout::g_os_y_is_x_osv8_isv2: return "G_OS_Y_IS_X_OSV8_ISV2";
case WeightsLayout::g_os_y_is_x_osv8_isv4: return "G_OS_Y_IS_X_OSV8_ISV4";
default: throw std::invalid_argument("Failed to convert WeightsLayout " + std::to_string(layout) + " to string");
@@ -175,8 +175,10 @@ WeightsTensor::WeightsChannelArray WeightsTensor::weightsChannelArray {{
{ WeightsLayout::os_i_yxs_osv4_yxsv4, { 0, 1, -1, 2, 3, -1 } },
{ WeightsLayout::os_y_is_x_osv8_isv2, { 0, 2, -1, 1, 3, -1 } },
{ WeightsLayout::os_y_is_x_osv8_isv4, { 0, 2, -1, 1, 3, -1 } },
{ WeightsLayout::os_y_is_x_osv16_isv4, { 0, 2, -1, 1, 3, -1 } },
{ WeightsLayout::os_yx_is_osv8_isv2, { 1, 2, -1, 0, 3, -1 } },
{ WeightsLayout::os_yx_is_osv8_isv4, { 1, 2, -1, 0, 3, -1 } },
{ WeightsLayout::os_yx_is_osv16_isv2, { 1, 2, -1, 0, 3, -1 } },
{ WeightsLayout::os_zyx_is_osv8_isv2, { 1, 2, 3, 0, 4, -1 } },
{ WeightsLayout::os_zyx_is_osv8_isv4, { 1, 2, 3, 0, 4, -1 } },
{ WeightsLayout::os_zy_is_x_osv8_isv2, { 0, 2, 3, 1, 4, -1 } },
@@ -224,6 +226,7 @@ WeightsTensor::WeightsChannelArray WeightsTensor::weightsChannelArray {{
{ WeightsLayout::g_os_zyx_is_osv32_isv32, { 1, 2, 3, 0, 4, 5 } },
{ WeightsLayout::g_os_yx_is_osv8_isv2, { 1, 2, -1, 0, 3, 4 } },
{ WeightsLayout::g_os_yx_is_osv8_isv4, { 1, 2, -1, 0, 3, 4 } },
{ WeightsLayout::g_os_yx_is_osv16_isv2, { 1, 2, -1, 0, 3, 4 } },
{ WeightsLayout::g_os_y_is_x_osv8_isv2, { 0, 2, -1, 1, 3, 4 } },
{ WeightsLayout::g_os_y_is_x_osv8_isv4, { 0, 2, -1, 1, 3, 4 } },
}};
@@ -194,8 +194,10 @@ enum WeightsLayout {
os_i_yxs_osv4_yxsv4, // for weights for depthwise IMAD convolution
os_y_is_x_osv8_isv2,
os_y_is_x_osv8_isv4,
os_y_is_x_osv16_isv4,
os_yx_is_osv8_isv2,
os_yx_is_osv8_isv4,
os_yx_is_osv16_isv2,
os_zyx_is_osv8_isv2,
os_zyx_is_osv8_isv4,
os_zy_is_x_osv8_isv2,
@@ -247,6 +249,7 @@ enum WeightsLayout {
g_os_yx_is_osv8_isv2,
g_os_yx_is_osv8_isv4,
g_os_yx_is_osv16_isv2,
g_os_y_is_x_osv8_isv2,
g_os_y_is_x_osv8_isv4,
@@ -168,8 +168,10 @@ static const std::map<format::type, format_traits> format_traits_map {
FMT_TRAITS(os_i_osv8__ai8, 1, 1, 0, 0, {0, 1}, "oi", "oi", {{1, 8}, {0, 8}}),
FMT_TRAITS(os_y_is_x_osv8_isv2, 1, 1, 2, 0, {0, 2, 1, 3}, "oyix", "oixy", {{0, 8}, {1, 2}}),
FMT_TRAITS(os_y_is_x_osv8_isv4, 1, 1, 2, 0, {0, 2, 1, 3}, "oyix", "oixy", {{0, 8}, {1, 4}}),
FMT_TRAITS(os_y_is_x_osv16_isv4, 1, 1, 2, 0, {0, 2, 1, 3}, "oyix", "oixy", {{0, 16}, {1, 4}}),
FMT_TRAITS(os_yx_is_osv8_isv2, 1, 1, 2, 0, {0, 2, 3, 1}, "oyxi", "oixy", {{0, 8}, {1, 2}}),
FMT_TRAITS(os_yx_is_osv8_isv4, 1, 1, 2, 0, {0, 2, 3, 1}, "oyxi", "oixy", {{0, 8}, {1, 4}}),
FMT_TRAITS(os_yx_is_osv16_isv2, 1, 1, 2, 0, {0, 2, 3, 1}, "oyxi", "oixy", {{0, 16}, {1, 2}}),
FMT_TRAITS(os_zyx_is_osv8_isv2, 1, 1, 3, 0, {0, 2, 3, 4, 1}, "ozyxi", "oixyz", {{0, 8}, {1, 2}}),
FMT_TRAITS(os_zyx_is_osv8_isv4, 1, 1, 3, 0, {0, 2, 3, 4, 1}, "ozyxi", "oixyz", {{0, 8}, {1, 4}}),
FMT_TRAITS(os_zy_is_x_osv8_isv2, 1, 1, 3, 0, {0, 2, 3, 1, 4}, "ozyix", "oixyz", {{0, 8}, {1, 2}}),
@@ -228,6 +230,7 @@ static const std::map<format::type, format_traits> format_traits_map {
FMT_TRAITS(giy_xs_os_xsv2_osv16__ao32, 1, 1, 2, 1, {0, 2, 3, 4, 1}, "giyxo", "oixy????g", {{2, 2}, {0, 16}}),
FMT_TRAITS(g_os_yx_is_osv8_isv2, 1, 1, 2, 1, {0, 1, 3, 4, 2}, "goyxi", "oixy????g", {{0, 8}, {1, 2}}),
FMT_TRAITS(g_os_yx_is_osv8_isv4, 1, 1, 2, 1, {0, 1, 3, 4, 2}, "goyxi", "oixy????g", {{0, 8}, {1, 4}}),
FMT_TRAITS(g_os_yx_is_osv16_isv2, 1, 1, 2, 1, {0, 1, 3, 4, 2}, "goyxi", "oixy????g", {{0, 16}, {1, 4}}),
FMT_TRAITS(g_os_y_is_x_osv8_isv2, 1, 1, 2, 1, {0, 1, 3, 2, 4}, "goyix", "oixy????g", {{0, 8}, {1, 2}}),
FMT_TRAITS(g_os_y_is_x_osv8_isv4, 1, 1, 2, 1, {0, 1, 3, 2, 4}, "goyix", "oixy????g", {{0, 8}, {1, 4}}),
};