onednn-src 0.1.13

Source of oneAPI Deep Neural Network Library (oneDNN)
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
/*******************************************************************************
* Copyright 2022 Intel Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
#include "gpu/intel/bnorm/lookup_table.hpp"
#include "gpu/intel/engine.hpp"

#include <string>
#include <vector>
#include <unordered_map>

namespace dnnl {
namespace impl {
namespace gpu {
namespace intel {
namespace bnorm {
namespace lookup_table {

using namespace compute;

// Gets bnorm parameters from BN_PARAMS env value
// Only used during tuning procedure, BN_TUNING env var must be set
void maybe_override_bn_conf_params_env(params_t &conf) {
    auto s_params = getenv_str("BN_PARAMS", "");
    assert(!s_params.empty());
    assert(conf.bn_tuning);
    conf.override_set(s_params, /*is_env*/ true);
}

// Gets bnorm parameters from a lookup table
// BN_TUNING env var must be unset or zero;
void maybe_override_bn_conf_params_table(
        params_t &conf, impl::engine_t *engine) {
    assert(!conf.bn_tuning);
    auto *intel_engine = utils::downcast<intel::engine_t *>(engine);
    auto gpu_arch = intel_engine->device_info()->gpu_arch();
    static lookup_table_t table(conf.use_stats_one_pass);
    auto *s_params = table.find(conf, gpu_arch);
    if (s_params) {
        conf.override_set(s_params, /*is_env*/ false);
        conf.found_in_table = true;
    }
}

void maybe_override_bn_conf_params(params_t &conf, impl::engine_t *engine) {
    // Environment var BN_TUNING turns ON/OFF tuning mode
    conf.bn_tuning = getenv_int("BN_TUNING", 0);

    if (conf.bn_tuning) {
        maybe_override_bn_conf_params_env(conf);
    } else {
        // for performance debugging/analysis purposes
        if (getenv_int("BN_ENABLE_LOOKUP_TABLE", 1))
            maybe_override_bn_conf_params_table(conf, engine);
    }
}

gpu_arch_t to_hw(const std::string &s) {

#define CASE(name) \
    if (s == #name) return gpu_arch_t::name;
    CASE(xe_hp)
    CASE(xe_hpg)
    CASE(xe_hpc)
#undef CASE
    gpu_error_not_expected();
    return gpu_arch_t::unknown;
}

impl_t to_impl(const std::string &s) {
#define CASE(name) \
    if (s == #name) return impl_t::name;
    CASE(ref)
    CASE(simple)
    CASE(reusable)
    CASE(xe)
    CASE(nhwc_opt)
    CASE(nhwc_reusable)
#undef CASE
    gpu_error_not_expected();
    return impl_t::unknown;
}

int_filter_t::int_filter_t(const std::string &s) : cmp_op_(op_kind_t::_eq) {
    if (s.empty()) {
        value_ = 0;
        return;
    }
    auto end = s.size();
    auto last = s[end - 1];
    if (last == '+') {
        cmp_op_ = op_kind_t::_ge;
        end--;
    }
    value_ = std::stoi(s.substr(0, end));
}

bool int_filter_t::matches(int value) const {
    switch (cmp_op_) {
        case op_kind_t::_eq: return value == value_;
        case op_kind_t::_le: return value <= value_;
        case op_kind_t::_ge: return value >= value_;
        case op_kind_t::_lt: return value < value_;
        case op_kind_t::_gt: return value > value_;
        default: gpu_error_not_expected();
    }
    return false;
}

type_filter_t::type_filter_t(const std::string &s) {
    for (auto &p : all_patterns()) {
        if (s == p) {
            pattern_ = p;
            break;
        }
    }
}

bool type_filter_t::matches(const data_type_t &dt) const {
    if (pattern_.empty())
        return (dt == data_type::f32);
    else if (pattern_ == "s8")
        return (dt == data_type::s8);
    else if (pattern_ == "f32")
        return (dt == data_type::f32);
    else if (pattern_ == "f16")
        return (dt == data_type::f16);
    else if (pattern_ == "bf16")
        return (dt == data_type::bf16);
    else
        gpu_error_not_expected();
    return true;
}

std::vector<std::string> &type_filter_t::all_patterns() {
    static std::vector<std::string> ret = {
            "s8",
            "bf16",
            "f16",
            "f32",
    };
    return ret;
}

static std::vector<std::pair<char, normalization_flags_t>> all_patterns = {
        {'G', normalization_flags::use_global_stats},
        {'C', normalization_flags::use_scale},
        {'H', normalization_flags::use_shift},
        {'R', normalization_flags::fuse_norm_relu},
        {'A', normalization_flags::fuse_norm_add_relu},
};

static bool is_nhwc_impl(const params_t &conf) {
    return conf.impl == impl_t::nhwc_reusable || conf.impl == impl_t::nhwc_opt;
}

normalization_flags_t flags_from_string(const std::string &s) {
    int ret = 0;
    for (const auto &pattern : all_patterns) {
        if (s.find(pattern.first) != std::string::npos) {
            ret |= pattern.second;
        }
    }
    return normalization_flags_t(ret);
}

std::string string_from_flags(normalization_flags_t flags) {
    std::string ret;
    for (const auto &pattern : all_patterns) {
        if (flags & pattern.second) { ret += pattern.first; }
    }
    return ret;
}

problem_filter_t::problem_filter_t(const std::string &s) {
    auto parts = split(s, " ");
    const std::string sep = "=";
    for (auto &part : parts) {
        auto sub_parts = split(part, sep);
        assert(sub_parts.size() == 2);
        auto &name = sub_parts[0];
        auto &value = sub_parts[1];
        if (name == "hw") {
            hw_ = to_hw(value);
        } else if (name == "impl") {
            impl_ = to_impl(value);
        } else if (name == "dt") {
            type_filter_ = type_filter_t(value);
        } else if (name == "dir") {
            dir_ = value;
        } else if (name == "tag") {
            tag_ = value;
        } else if (name == "flags") {
            flags_filter_ = flags_from_string(value);
        } else if (name == "desc") {
            desc_ = value;
        } else if (name == "nhwc_desc") {
            nhwc_desc_ = value;
        } else {
            gpu_error_not_expected();
        }
    }
}

bool problem_filter_t::matches(
        const params_t &conf, const gpu_arch_t &gpu_arch) const {
    if (gpu_arch != hw_) return false;
    if (!matches_impl(conf)) return false;
    if (!matches_dir(conf)) return false;
    if (!matches_tag(conf)) return false;
    if (!type_filter_.matches({conf.data_type})) return false;
    if (flags_filter_ != conf.flags) return false;
    if (!matches_desc(conf)) return false;
    return true;
}

bool problem_filter_t::matches_dir(const params_t &conf) const {
    // --dir={FWD_D [default], FWD_I, BWD_D, BWD_DW}
    if (dir_.empty()) return conf.is_forward;
    if (dir_ == "FWD_D" || dir_ == "FWD_I" || dir_ == "fwd_d"
            || dir_ == "fwd_i") {
        return conf.is_forward;
    } else if (dir_ == "BWD_D" || dir_ == "BWD_DW" || dir_ == "bwd_d"
            || dir_ == "bwd_dw") {
        return conf.is_backward;
    } else {
        gpu_error_not_expected();
    }
    return false;
}

bool problem_filter_t::matches_tag(const params_t &conf) const {
    // --tag={nchw [default], ...}
    bool default_tag = !(conf.is_nhwc || conf.is_blocked_16c
            || conf.is_blocked_16n16c || conf.is_blocked_32n16c);
    if (tag_.empty()) return default_tag;
    if (tag_ == "ab" || tag_ == "acb" || tag_ == "acdb" || tag_ == "acdeb"
            || tag_ == "axb") {
        return conf.is_nhwc;
    } else if (tag_ == "aBcd16b" || tag_ == "ABcd16a16b"
            || tag_ == "ABcde16a16b") {
        return conf.is_blocked_16n16c;
    } else if (tag_ == "ABcd32a16b" || tag_ == "ABcde32a16b") {
        return conf.is_blocked_32n16c;
    } else {
        gpu_error_not_expected();
    }
    return false;
}

bool problem_filter_t::matches_impl(const params_t &conf) const {
    return conf.impl == impl_;
}

bool problem_filter_t::matches_desc(const params_t &conf) const {
    return is_nhwc_impl(conf) ? get_nhwc_desc_str(conf) == nhwc_desc_
                              : get_desc_str(conf) == desc_;
}

// Lookup table is a result of tuning procedure which can be implemented by
// some script that runs some given testcase with many different values of
// tunable parameters and then parses the best results.
// Env varibles BN_TUNING and BN_PARAMS must be set.
// BN_PARAMS syntax is {key=val,...}, for example
// BN_PARAMS="far=0 mv=4 sspb=14 uspb=4 uspu=4"
lookup_table_t::lookup_table_t(bool use_stat_one_pass) {
    if (use_stat_one_pass) {
        // clang-format off
        // nhwc_opt version
        // resnet-50.tr.fp32.pt.mb16_pvc
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic1024ih14iw14 nhwc_desc=ic1024sp3136", "far=0 mv=8 icb=32 sspb=14 uspb=8 uspu=4"); //, 0.028000
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic128ih28iw28 nhwc_desc=ic128sp12544", "far=0 mv=8 icb=32 sspb=49 uspb=8 uspu=4"); //, 0.020320
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic128ih56iw56 nhwc_desc=ic128sp50176", "far=1 mv=8 icb=64 sspb=28 uspb=4 uspu=4"); //, 0.048000
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic2048ih7iw7 nhwc_desc=ic2048sp784", "far=0 mv=8 icb=32 sspb=14 uspb=8 uspu=2"); //, 0.019680
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic256ih14iw14 nhwc_desc=ic256sp3136", "far=0 mv=8 icb=64 sspb=14 uspb=4 uspu=4"); //, 0.016960
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic256ih28iw28 nhwc_desc=ic256sp12544", "far=0 mv=8 icb=64 sspb=49 uspb=4 uspu=4"); //, 0.029600
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic256ih56iw56 nhwc_desc=ic256sp50176", "far=0 mv=8 icb=32 sspb=98 uspb=8 uspu=4"); //, 0.081280
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic512ih14iw14 nhwc_desc=ic512sp3136", "far=0 mv=8 icb=32 sspb=7 uspb=8 uspu=4"); //, 0.020160
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic512ih28iw28 nhwc_desc=ic512sp12544", "far=0 mv=8 icb=32 sspb=49 uspb=8 uspu=4"); //, 0.044960
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic512ih7iw7 nhwc_desc=ic512sp784", "far=0 mv=8 icb=32 sspb=28 uspb=4 uspu=4"); //, 0.013440
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic64ih112iw112 nhwc_desc=ic64sp200704", "far=1 mv=8 icb=64 sspb=49 uspb=16 uspu=4"); //, 0.082880
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic64ih56iw56 nhwc_desc=ic64sp50176", "far=1 mv=8 icb=32 sspb=16 uspb=8 uspu=4"); //, 0.031360
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic1024ih14iw14 nhwc_desc=ic1024sp3136", "far=0 mv=8 icb=32 sspb=28 uspb=8 uspu=4"); //, 0.019520
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic128ih28iw28 nhwc_desc=ic128sp12544", "far=0 mv=8 icb=32 sspb=49 uspb=4 uspu=4"); //, 0.017440
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic128ih56iw56 nhwc_desc=ic128sp50176", "far=0 mv=8 icb=32 sspb=98 uspb=16 uspu=4"); //, 0.032960
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic2048ih7iw7 nhwc_desc=ic2048sp784", "far=0 mv=8 icb=64 sspb=14 uspb=16 uspu=4"); //, 0.016480
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic256ih14iw14 nhwc_desc=ic256sp3136", "far=0 mv=8 icb=32 sspb=14 uspb=4 uspu=4"); //, 0.014880
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic256ih28iw28 nhwc_desc=ic256sp12544", "far=0 mv=8 icb=32 sspb=28 uspb=8 uspu=4"); //, 0.021440
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic256ih56iw56 nhwc_desc=ic256sp50176", "far=0 mv=8 icb=32 sspb=98 uspb=8 uspu=4"); //, 0.047680
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic512ih14iw14 nhwc_desc=ic512sp3136", "far=0 mv=8 icb=32 sspb=14 uspb=-1 uspu=2"); //, 0.016000
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic512ih28iw28 nhwc_desc=ic512sp12544", "far=0 mv=8 icb=32 sspb=49 uspb=8 uspu=4"); //, 0.029760
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic512ih7iw7 nhwc_desc=ic512sp784", "far=0 mv=8 icb=32 sspb=28 uspb=4 uspu=4"); //, 0.011680
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic64ih112iw112 nhwc_desc=ic64sp200704", "far=0 mv=8 icb=32 sspb=196 uspb=8 uspu=4"); //, 0.057760
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic64ih56iw56 nhwc_desc=ic64sp50176", "far=1 mv=8 icb=32 sspb=28 uspb=16 uspu=4"); //, 0.024000
        // resnet-50.tr.bf16.pt.mb256_pvc
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic1024ih14iw14 nhwc_desc=ic1024sp50176", "far=0 mv=8 icb=64 sspb=196 uspb=16 uspu=2"); //, 0.313760
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic128ih28iw28 nhwc_desc=ic128sp200704", "far=1 mv=8 icb=32 sspb=196 uspb=-1 uspu=4"); //, 0.099040
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic128ih56iw56 nhwc_desc=ic128sp802816", "far=1 mv=8 icb=128 sspb=196 uspb=4 uspu=4"); //, 0.949280
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic2048ih7iw7 nhwc_desc=ic2048sp12544", "far=0 mv=8 icb=128 sspb=49 uspb=-1 uspu=1"); //, 0.092960
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic256ih14iw14 nhwc_desc=ic256sp50176", "far=0 mv=8 icb=32 sspb=98 uspb=16 uspu=4"); //, 0.060320
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic256ih28iw28 nhwc_desc=ic256sp200704", "far=0 mv=8 icb=128 sspb=392 uspb=16 uspu=2"); //, 0.317440
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic256ih56iw56 nhwc_desc=ic256sp802816", "far=1 mv=8 icb=128 sspb=392 uspb=4 uspu=4"); //, 1.978720
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic512ih14iw14 nhwc_desc=ic512sp50176", "far=0 mv=8 icb=32 sspb=196 uspb=-1 uspu=4"); //, 0.094720
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic512ih28iw28 nhwc_desc=ic512sp200704", "far=0 mv=8 icb=64 sspb=392 uspb=4 uspu=4"); //, 0.923520
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic512ih7iw7 nhwc_desc=ic512sp12544", "far=0 mv=8 icb=64 sspb=28 uspb=-1 uspu=4"); //, 0.034400
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic64ih112iw112 nhwc_desc=ic64sp3211264", "far=1 mv=8 icb=256 sspb=196 uspb=4 uspu=2"); //, 2.047040
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic64ih56iw56 nhwc_desc=ic64sp802816", "far=1 mv=8 icb=128 sspb=196 uspb=16 uspu=4"); //, 0.323680
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic1024ih14iw14 nhwc_desc=ic1024sp50176", "far=0 mv=8 icb=32 sspb=392 uspb=-1 uspu=4"); //, 0.096640
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic128ih28iw28 nhwc_desc=ic128sp200704", "far=0 mv=8 icb=32 sspb=196 uspb=-1 uspu=4"); //, 0.059040
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic128ih56iw56 nhwc_desc=ic128sp802816", "far=0 mv=8 icb=64 sspb=392 uspb=8 uspu=4"); //, 0.492960
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic2048ih7iw7 nhwc_desc=ic2048sp12544", "far=0 mv=8 icb=32 sspb=196 uspb=-1 uspu=4"); //, 0.053120
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic256ih14iw14 nhwc_desc=ic256sp50176", "far=0 mv=8 icb=32 sspb=98 uspb=16 uspu=4"); //, 0.036480
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic256ih28iw28 nhwc_desc=ic256sp200704", "far=0 mv=8 icb=32 sspb=392 uspb=-1 uspu=4"); //, 0.096320
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic256ih56iw56 nhwc_desc=ic256sp802816", "far=1 mv=8 icb=128 sspb=392 uspb=4 uspu=2"); //, 1.179840
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic512ih14iw14 nhwc_desc=ic512sp50176", "far=0 mv=8 icb=32 sspb=196 uspb=-1 uspu=4"); //, 0.054240
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic512ih28iw28 nhwc_desc=ic512sp200704", "far=0 mv=8 icb=64 sspb=392 uspb=8 uspu=4"); //, 0.458880
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic512ih7iw7 nhwc_desc=ic512sp12544", "far=0 mv=8 icb=64 sspb=28 uspb=8 uspu=4"); //, 0.023840
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic64ih112iw112 nhwc_desc=ic64sp3211264", "far=1 mv=8 icb=128 sspb=196 uspb=4 uspu=4"); //, 1.209120
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic64ih56iw56 nhwc_desc=ic64sp802816", "far=1 mv=8 icb=32 sspb=392 uspb=-1 uspu=4"); //, 0.106880
        // resnet-50.tr.fp32.pt.mb256_pvc_aurora
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic1024ih14iw14 nhwc_desc=ic1024sp50176", "far=0 mv=8 icb=32 sspb=392 uspb=4 uspu=4"); //, 0.920960
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic128ih28iw28 nhwc_desc=ic128sp200704", "far=0 mv=8 icb=64 sspb=392 uspb=4 uspu=4"); //, 0.294080
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic128ih56iw56 nhwc_desc=ic128sp802816", "far=1 mv=8 icb=32 sspb=64 uspb=4 uspu=4"); //, 1.992000
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic2048ih7iw7 nhwc_desc=ic2048sp12544", "far=0 mv=8 icb=32 sspb=196 uspb=8 uspu=4"); //, 0.293600
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic256ih14iw14 nhwc_desc=ic256sp50176", "far=0 mv=8 icb=32 sspb=98 uspb=8 uspu=4"); //, 0.082240
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic256ih28iw28 nhwc_desc=ic256sp200704", "far=0 mv=8 icb=32 sspb=392 uspb=4 uspu=2"); //, 0.919040
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic256ih56iw56 nhwc_desc=ic256sp802816", "far=1 mv=8 icb=32 sspb=28 uspb=4 uspu=1"); //, 3.945280
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic512ih14iw14 nhwc_desc=ic512sp50176", "far=0 mv=8 icb=32 sspb=196 uspb=16 uspu=4"); //, 0.289280
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic512ih28iw28 nhwc_desc=ic512sp200704", "far=0 mv=8 icb=64 sspb=392 uspb=4 uspu=4"); //, 1.987680
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic512ih7iw7 nhwc_desc=ic512sp12544", "far=0 mv=8 icb=32 sspb=49 uspb=8 uspu=4"); //, 0.045280
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic64ih112iw112 nhwc_desc=ic64sp3211264", "far=1 mv=8 icb=32 sspb=64 uspb=4 uspu=1"); //, 3.997280
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic64ih56iw56 nhwc_desc=ic64sp802816", "far=0 mv=8 icb=32 sspb=392 uspb=4 uspu=4"); //, 0.954560
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic1024ih14iw14 nhwc_desc=ic1024sp50176", "far=0 mv=8 icb=64 sspb=196 uspb=4 uspu=2"); //, 0.458400
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic128ih28iw28 nhwc_desc=ic128sp200704", "far=0 mv=8 icb=32 sspb=196 uspb=16 uspu=4"); //, 0.088800
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic128ih56iw56 nhwc_desc=ic128sp802816", "far=0 mv=8 icb=64 sspb=392 uspb=4 uspu=2"); //, 1.143680
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic2048ih7iw7 nhwc_desc=ic2048sp12544", "far=0 mv=8 icb=32 sspb=196 uspb=16 uspu=4"); //, 0.081600
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic256ih14iw14 nhwc_desc=ic256sp50176", "far=0 mv=8 icb=32 sspb=98 uspb=8 uspu=4"); //, 0.047680
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic256ih28iw28 nhwc_desc=ic256sp200704", "far=0 mv=8 icb=32 sspb=392 uspb=8 uspu=4"); //, 0.455840
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic256ih56iw56 nhwc_desc=ic256sp802816", "far=1 mv=8 icb=32 sspb=98 uspb=4 uspu=1"); //, 2.330240
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic512ih14iw14 nhwc_desc=ic512sp50176", "far=0 mv=8 icb=32 sspb=196 uspb=16 uspu=4"); //, 0.082400
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic512ih28iw28 nhwc_desc=ic512sp200704", "far=0 mv=8 icb=64 sspb=392 uspb=4 uspu=2"); //, 1.126560
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic512ih7iw7 nhwc_desc=ic512sp12544", "far=0 mv=8 icb=32 sspb=49 uspb=8 uspu=4"); //, 0.029600
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic64ih112iw112 nhwc_desc=ic64sp3211264", "far=1 mv=8 icb=32 sspb=98 uspb=4 uspu=1"); //, 2.359040
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic64ih56iw56 nhwc_desc=ic64sp802816", "far=0 mv=8 icb=32 sspb=392 uspb=4 uspu=4"); //, 0.477120
        // nhwc_reusable version
        // resnet-50.tr.fp32.pt.mb16_pvc
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic1024ih14iw14 nhwc_desc=ic1024sp3136", "far=1 mv=8 icb=64 sspb=14 uspb=-1 uspu=-1"); //, 0.036640
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic128ih28iw28 nhwc_desc=ic128sp12544", "far=1 mv=8 icb=64 sspb=14 uspb=8 uspu=-1"); //, 0.028000
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic128ih56iw56 nhwc_desc=ic128sp50176", "far=1 mv=8 icb=64 sspb=28 uspb=-1 uspu=-1"); //, 0.058560
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic2048ih7iw7 nhwc_desc=ic2048sp784", "far=0 mv=8 icb=64 sspb=7 uspb=-1 uspu=-1"); //, 0.025760
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic256ih14iw14 nhwc_desc=ic256sp3136", "far=0 mv=8 icb=32 sspb=16 uspb=8 uspu=-1"); //, 0.024160
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic256ih28iw28 nhwc_desc=ic256sp12544", "far=1 mv=8 icb=64 sspb=14 uspb=-1 uspu=-1"); //, 0.037440
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic256ih56iw56 nhwc_desc=ic256sp50176", "far=0 mv=8 icb=64 sspb=49 uspb=-1 uspu=-1"); //, 0.093600
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic512ih14iw14 nhwc_desc=ic512sp3136", "far=0 mv=8 icb=64 sspb=16 uspb=8 uspu=-1"); //, 0.028160
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic512ih28iw28 nhwc_desc=ic512sp12544", "far=1 mv=8 icb=64 sspb=28 uspb=-1 uspu=-1"); //, 0.057120
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic512ih7iw7 nhwc_desc=ic512sp784", "far=0 mv=8 icb=32 sspb=7 uspb=-1 uspu=-1"); //, 0.020640
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic64ih112iw112 nhwc_desc=ic64sp200704", "far=1 mv=8 icb=64 sspb=49 uspb=-1 uspu=-1"); //, 0.093440
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic64ih56iw56 nhwc_desc=ic64sp50176", "far=1 mv=8 icb=64 sspb=14 uspb=-1 uspu=-1"); //, 0.036640
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic1024ih14iw14 nhwc_desc=ic1024sp3136", "far=1 mv=8 icb=64 sspb=14 uspb=-1 uspu=-1"); //, 0.030400
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic128ih28iw28 nhwc_desc=ic128sp12544", "far=1 mv=8 icb=32 sspb=14 uspb=-1 uspu=-1"); //, 0.026400
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic128ih56iw56 nhwc_desc=ic128sp50176", "far=1 mv=8 icb=64 sspb=28 uspb=-1 uspu=-1"); //, 0.047200
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic2048ih7iw7 nhwc_desc=ic2048sp784", "far=0 mv=8 icb=64 sspb=7 uspb=8 uspu=-1"); //, 0.023520
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic256ih14iw14 nhwc_desc=ic256sp3136", "far=0 mv=8 icb=32 sspb=16 uspb=8 uspu=-1"); //, 0.024000
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic256ih28iw28 nhwc_desc=ic256sp12544", "far=1 mv=8 icb=64 sspb=14 uspb=16 uspu=-1"); //, 0.031840
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic256ih56iw56 nhwc_desc=ic256sp50176", "far=0 mv=8 icb=64 sspb=49 uspb=-1 uspu=-1"); //, 0.072160
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic512ih14iw14 nhwc_desc=ic512sp3136", "far=1 mv=8 icb=64 sspb=7 uspb=4 uspu=-1"); //, 0.026080
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic512ih28iw28 nhwc_desc=ic512sp12544", "far=1 mv=8 icb=64 sspb=28 uspb=-1 uspu=-1"); //, 0.044640
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic512ih7iw7 nhwc_desc=ic512sp784", "far=0 mv=8 icb=32 sspb=7 uspb=4 uspu=-1"); //, 0.019680
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic64ih112iw112 nhwc_desc=ic64sp200704", "far=1 mv=8 icb=64 sspb=49 uspb=16 uspu=-1"); //, 0.077280
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic64ih56iw56 nhwc_desc=ic64sp50176", "far=1 mv=8 icb=128 sspb=14 uspb=16 uspu=-1"); //, 0.032480
        // resnet-50.tr.bf16.pt.mb256_pvc
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic1024ih14iw14 nhwc_desc=ic1024sp50176", "far=0 mv=8 icb=128 sspb=98 uspb=16 uspu=-1"); //, 0.396800
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic128ih28iw28 nhwc_desc=ic128sp200704", "far=1 mv=8 icb=128 sspb=49 uspb=-1 uspu=-1"); //, 0.124960
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic128ih56iw56 nhwc_desc=ic128sp802816", "far=1 mv=8 icb=128 sspb=196 uspb=8 uspu=-1"); //, 1.011040
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic2048ih7iw7 nhwc_desc=ic2048sp12544", "far=0 mv=8 icb=128 sspb=49 uspb=-1 uspu=-1"); //, 0.120320
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic256ih14iw14 nhwc_desc=ic256sp50176", "far=1 mv=8 icb=128 sspb=28 uspb=-1 uspu=-1"); //, 0.080320
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic256ih28iw28 nhwc_desc=ic256sp200704", "far=1 mv=8 icb=64 sspb=196 uspb=16 uspu=-1"); //, 0.403840
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic256ih56iw56 nhwc_desc=ic256sp802816", "far=0 mv=8 icb=128 sspb=392 uspb=4 uspu=-1"); //, 2.110560
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic512ih14iw14 nhwc_desc=ic512sp50176", "far=0 mv=8 icb=128 sspb=49 uspb=-1 uspu=-1"); //, 0.123040
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic512ih28iw28 nhwc_desc=ic512sp200704", "far=0 mv=8 icb=64 sspb=392 uspb=8 uspu=-1"); //, 1.018720
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic512ih7iw7 nhwc_desc=ic512sp12544", "far=1 mv=8 icb=64 sspb=28 uspb=-1 uspu=-1"); //, 0.050880
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic64ih112iw112 nhwc_desc=ic64sp3211264", "far=1 mv=8 icb=128 sspb=196 uspb=16 uspu=-1"); //, 2.164160
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic64ih56iw56 nhwc_desc=ic64sp802816", "far=1 mv=8 icb=64 sspb=196 uspb=16 uspu=-1"); //, 0.413600
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic1024ih14iw14 nhwc_desc=ic1024sp50176", "far=0 mv=8 icb=64 sspb=196 uspb=-1 uspu=-1"); //, 0.204320
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic128ih28iw28 nhwc_desc=ic128sp200704", "far=1 mv=8 icb=64 sspb=98 uspb=-1 uspu=-1"); //, 0.114400
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic128ih56iw56 nhwc_desc=ic128sp802816", "far=0 mv=8 icb=128 sspb=196 uspb=16 uspu=-1"); //, 0.624640
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic2048ih7iw7 nhwc_desc=ic2048sp12544", "far=0 mv=8 icb=64 sspb=98 uspb=-1 uspu=-1"); //, 0.107520
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic256ih14iw14 nhwc_desc=ic256sp50176", "far=0 mv=8 icb=64 sspb=49 uspb=-1 uspu=-1"); //, 0.064800
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic256ih28iw28 nhwc_desc=ic256sp200704", "far=0 mv=8 icb=64 sspb=196 uspb=-1 uspu=-1"); //, 0.208000
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic256ih56iw56 nhwc_desc=ic256sp802816", "far=0 mv=8 icb=128 sspb=392 uspb=4 uspu=-1"); //, 1.306880
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic512ih14iw14 nhwc_desc=ic512sp50176", "far=0 mv=8 icb=64 sspb=98 uspb=-1 uspu=-1"); //, 0.105120
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic512ih28iw28 nhwc_desc=ic512sp200704", "far=0 mv=8 icb=128 sspb=196 uspb=16 uspu=-1"); //, 0.616320
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic512ih7iw7 nhwc_desc=ic512sp12544", "far=1 mv=8 icb=64 sspb=28 uspb=-1 uspu=-1"); //, 0.043040
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic64ih112iw112 nhwc_desc=ic64sp3211264", "far=0 mv=8 icb=128 sspb=392 uspb=8 uspu=-1"); //, 1.424320
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic64ih56iw56 nhwc_desc=ic64sp802816", "far=1 mv=8 icb=64 sspb=196 uspb=-1 uspu=-1"); //, 0.217120
        // resnet-50.tr.fp32.pt.mb256_pvc_aurora
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic1024ih14iw14 nhwc_desc=ic1024sp50176", "far=0 mv=8 icb=64 sspb=196 uspb=4 uspu=-1"); //, 0.985440
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic128ih28iw28 nhwc_desc=ic128sp200704", "far=0 mv=8 icb=64 sspb=98 uspb=16 uspu=-1"); //, 0.349760
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic128ih56iw56 nhwc_desc=ic128sp802816", "far=1 mv=8 icb=32 sspb=49 uspb=4 uspu=-1"); //, 2.046240
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic2048ih7iw7 nhwc_desc=ic2048sp12544", "far=0 mv=8 icb=64 sspb=98 uspb=8 uspu=-1"); //, 0.337440
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic256ih14iw14 nhwc_desc=ic256sp50176", "far=1 mv=8 icb=64 sspb=49 uspb=-1 uspu=-1"); //, 0.092640
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic256ih28iw28 nhwc_desc=ic256sp200704", "far=1 mv=8 icb=64 sspb=196 uspb=8 uspu=-1"); //, 0.974560
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic256ih56iw56 nhwc_desc=ic256sp802816", "far=1 mv=8 icb=32 sspb=64 uspb=4 uspu=-1"); //, 4.052640
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic512ih14iw14 nhwc_desc=ic512sp50176", "far=0 mv=8 icb=64 sspb=98 uspb=4 uspu=-1"); //, 0.343520
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic512ih28iw28 nhwc_desc=ic512sp200704", "far=1 mv=8 icb=32 sspb=14 uspb=4 uspu=-1"); //, 2.043840
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic512ih7iw7 nhwc_desc=ic512sp12544", "far=1 mv=8 icb=64 sspb=28 uspb=-1 uspu=-1"); //, 0.056800
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic64ih112iw112 nhwc_desc=ic64sp3211264", "far=1 mv=8 icb=32 sspb=196 uspb=4 uspu=-1"); //, 4.126560
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic64ih56iw56 nhwc_desc=ic64sp802816", "far=0 mv=8 icb=128 sspb=196 uspb=4 uspu=-1"); //, 0.987040
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic1024ih14iw14 nhwc_desc=ic1024sp50176", "far=1 mv=8 icb=64 sspb=196 uspb=16 uspu=-1"); //, 0.501440
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic128ih28iw28 nhwc_desc=ic128sp200704", "far=1 mv=8 icb=64 sspb=98 uspb=16 uspu=-1"); //, 0.132000
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic128ih56iw56 nhwc_desc=ic128sp802816", "far=1 mv=8 icb=64 sspb=392 uspb=4 uspu=-1"); //, 1.201440
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic2048ih7iw7 nhwc_desc=ic2048sp12544", "far=0 mv=8 icb=64 sspb=98 uspb=-1 uspu=-1"); //, 0.121760
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic256ih14iw14 nhwc_desc=ic256sp50176", "far=0 mv=8 icb=64 sspb=49 uspb=-1 uspu=-1"); //, 0.072000
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic256ih28iw28 nhwc_desc=ic256sp200704", "far=1 mv=8 icb=64 sspb=196 uspb=16 uspu=-1"); //, 0.506400
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic256ih56iw56 nhwc_desc=ic256sp802816", "far=1 mv=8 icb=64 sspb=98 uspb=4 uspu=-1"); //, 2.495840
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic512ih14iw14 nhwc_desc=ic512sp50176", "far=0 mv=8 icb=64 sspb=98 uspb=-1 uspu=-1"); //, 0.117280
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic512ih28iw28 nhwc_desc=ic512sp200704", "far=0 mv=8 icb=64 sspb=392 uspb=4 uspu=-1"); //, 1.191840
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic512ih7iw7 nhwc_desc=ic512sp12544", "far=1 mv=8 icb=64 sspb=28 uspb=-1 uspu=-1"); //, 0.044640
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic64ih112iw112 nhwc_desc=ic64sp3211264", "far=1 mv=8 icb=128 sspb=392 uspb=4 uspu=-1"); //, 2.535680
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic64ih56iw56 nhwc_desc=ic64sp802816", "far=1 mv=8 icb=64 sspb=196 uspb=8 uspu=-1"); //, 0.520000
    } else { // for regular algorithm
        // resnet-50.tr.fp32.pt.mb16_pvc
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic1024ih14iw14 nhwc_desc=ic1024sp3136", "far=0 mv=8 icb=32 sspb=14 uspb=8 uspu=4"); //, 0.028000
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic128ih28iw28 nhwc_desc=ic128sp12544", "far=0 mv=8 icb=32 sspb=49 uspb=8 uspu=4"); //, 0.020160
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic128ih56iw56 nhwc_desc=ic128sp50176", "far=1 mv=8 icb=64 sspb=28 uspb=4 uspu=4"); //, 0.048160
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic2048ih7iw7 nhwc_desc=ic2048sp784", "far=0 mv=8 icb=32 sspb=14 uspb=8 uspu=4"); //, 0.019200
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic256ih14iw14 nhwc_desc=ic256sp3136", "far=0 mv=8 icb=32 sspb=7 uspb=-1 uspu=1"); //, 0.017120
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic256ih28iw28 nhwc_desc=ic256sp12544", "far=0 mv=8 icb=64 sspb=49 uspb=4 uspu=4"); //, 0.029440
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic256ih56iw56 nhwc_desc=ic256sp50176", "far=0 mv=8 icb=32 sspb=98 uspb=8 uspu=4"); //, 0.080480
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic512ih14iw14 nhwc_desc=ic512sp3136", "far=0 mv=8 icb=32 sspb=7 uspb=8 uspu=4"); //, 0.020160
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic512ih28iw28 nhwc_desc=ic512sp12544", "far=0 mv=8 icb=32 sspb=49 uspb=8 uspu=4"); //, 0.045120
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic512ih7iw7 nhwc_desc=ic512sp784", "far=0 mv=8 icb=64 sspb=7 uspb=4 uspu=4"); //, 0.013920
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic64ih112iw112 nhwc_desc=ic64sp200704", "far=1 mv=8 icb=64 sspb=49 uspb=16 uspu=4"); //, 0.082720
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic64ih56iw56 nhwc_desc=ic64sp50176", "far=1 mv=8 icb=32 sspb=16 uspb=8 uspu=4"); //, 0.031200
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic1024ih14iw14 nhwc_desc=ic1024sp3136", "far=0 mv=8 icb=32 sspb=14 uspb=16 uspu=4"); //, 0.028480
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic128ih28iw28 nhwc_desc=ic128sp12544", "far=0 mv=8 icb=32 sspb=32 uspb=4 uspu=2"); //, 0.024320
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic128ih56iw56 nhwc_desc=ic128sp50176", "far=1 mv=8 icb=32 sspb=49 uspb=8 uspu=4"); //, 0.046080
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic2048ih7iw7 nhwc_desc=ic2048sp784", "far=0 mv=8 icb=64 sspb=14 uspb=-1 uspu=4"); //, 0.025440
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic256ih14iw14 nhwc_desc=ic256sp3136", "far=0 mv=8 icb=64 sspb=16 uspb=-1 uspu=4"); //, 0.021600
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic256ih28iw28 nhwc_desc=ic256sp12544", "far=0 mv=8 icb=32 sspb=28 uspb=4 uspu=4"); //, 0.029760
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic256ih56iw56 nhwc_desc=ic256sp50176", "far=0 mv=8 icb=32 sspb=98 uspb=8 uspu=4"); //, 0.066880
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic512ih14iw14 nhwc_desc=ic512sp3136", "far=0 mv=8 icb=64 sspb=28 uspb=4 uspu=4"); //, 0.024320
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic512ih28iw28 nhwc_desc=ic512sp12544", "far=0 mv=8 icb=32 sspb=49 uspb=8 uspu=4"); //, 0.041120
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic512ih7iw7 nhwc_desc=ic512sp784", "far=0 mv=8 icb=64 sspb=7 uspb=16 uspu=2"); //, 0.019520
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic64ih112iw112 nhwc_desc=ic64sp200704", "far=1 mv=8 icb=64 sspb=49 uspb=16 uspu=4"); //, 0.072800
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic64ih56iw56 nhwc_desc=ic64sp50176", "far=0 mv=8 icb=32 sspb=98 uspb=4 uspu=4"); //, 0.032160
        // resnet-50.tr.bf16.pt.mb256_pvc
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic1024ih14iw14 nhwc_desc=ic1024sp50176", "far=0 mv=8 icb=64 sspb=196 uspb=16 uspu=2"); //, 0.311040
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic128ih28iw28 nhwc_desc=ic128sp200704", "far=1 mv=8 icb=32 sspb=196 uspb=-1 uspu=4"); //, 0.097920
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic128ih56iw56 nhwc_desc=ic128sp802816", "far=1 mv=8 icb=64 sspb=392 uspb=4 uspu=2"); //, 0.950880
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic2048ih7iw7 nhwc_desc=ic2048sp12544", "far=0 mv=8 icb=128 sspb=49 uspb=-1 uspu=1"); //, 0.092800
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic256ih14iw14 nhwc_desc=ic256sp50176", "far=0 mv=8 icb=32 sspb=98 uspb=-1 uspu=2"); //, 0.059680
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic256ih28iw28 nhwc_desc=ic256sp200704", "far=0 mv=8 icb=128 sspb=392 uspb=8 uspu=2"); //, 0.317440
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic256ih56iw56 nhwc_desc=ic256sp802816", "far=1 mv=8 icb=128 sspb=392 uspb=4 uspu=4"); //, 1.981120
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic512ih14iw14 nhwc_desc=ic512sp50176", "far=0 mv=8 icb=32 sspb=196 uspb=-1 uspu=4"); //, 0.095520
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic512ih28iw28 nhwc_desc=ic512sp200704", "far=0 mv=8 icb=64 sspb=392 uspb=4 uspu=4"); //, 0.929760
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic512ih7iw7 nhwc_desc=ic512sp12544", "far=0 mv=8 icb=64 sspb=28 uspb=-1 uspu=4"); //, 0.034560
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic64ih112iw112 nhwc_desc=ic64sp3211264", "far=1 mv=8 icb=256 sspb=196 uspb=4 uspu=4"); //, 2.051520
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic64ih56iw56 nhwc_desc=ic64sp802816", "far=1 mv=8 icb=64 sspb=196 uspb=8 uspu=4"); //, 0.324000
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic1024ih14iw14 nhwc_desc=ic1024sp50176", "far=0 mv=8 icb=32 sspb=392 uspb=-1 uspu=4"); //, 0.115200
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic128ih28iw28 nhwc_desc=ic128sp200704", "far=1 mv=8 icb=32 sspb=196 uspb=-1 uspu=4"); //, 0.069280
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic128ih56iw56 nhwc_desc=ic128sp802816", "far=1 mv=8 icb=256 sspb=196 uspb=8 uspu=4"); //, 0.537920
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic2048ih7iw7 nhwc_desc=ic2048sp12544", "far=0 mv=8 icb=32 sspb=196 uspb=-1 uspu=4"); //, 0.064480
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic256ih14iw14 nhwc_desc=ic256sp50176", "far=0 mv=8 icb=32 sspb=98 uspb=16 uspu=4"); //, 0.044160
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic256ih28iw28 nhwc_desc=ic256sp200704", "far=0 mv=8 icb=32 sspb=392 uspb=-1 uspu=4"); //, 0.115520
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic256ih56iw56 nhwc_desc=ic256sp802816", "far=1 mv=8 icb=128 sspb=392 uspb=4 uspu=2"); //, 1.543680
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic512ih14iw14 nhwc_desc=ic512sp50176", "far=0 mv=8 icb=32 sspb=196 uspb=-1 uspu=4"); //, 0.065120
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic512ih28iw28 nhwc_desc=ic512sp200704", "far=1 mv=8 icb=128 sspb=196 uspb=8 uspu=4"); //, 0.522720
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic512ih7iw7 nhwc_desc=ic512sp12544", "far=0 mv=8 icb=32 sspb=49 uspb=16 uspu=4"); //, 0.030080
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic64ih112iw112 nhwc_desc=ic64sp3211264", "far=1 mv=8 icb=128 sspb=392 uspb=4 uspu=1"); //, 1.655040
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic64ih56iw56 nhwc_desc=ic64sp802816", "far=1 mv=8 icb=32 sspb=392 uspb=-1 uspu=4"); //, 0.120640
        // resnet-50.tr.fp32.pt.mb256_pvc_aurora
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic1024ih14iw14 nhwc_desc=ic1024sp50176", "far=0 mv=8 icb=32 sspb=392 uspb=4 uspu=2"); //, 0.925440
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic128ih28iw28 nhwc_desc=ic128sp200704", "far=0 mv=8 icb=64 sspb=392 uspb=4 uspu=4"); //, 0.290880
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic128ih56iw56 nhwc_desc=ic128sp802816", "far=1 mv=8 icb=32 sspb=64 uspb=4 uspu=2"); //, 1.998720
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic2048ih7iw7 nhwc_desc=ic2048sp12544", "far=0 mv=8 icb=32 sspb=196 uspb=8 uspu=4"); //, 0.292800
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic256ih14iw14 nhwc_desc=ic256sp50176", "far=0 mv=8 icb=32 sspb=98 uspb=8 uspu=4"); //, 0.080960
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic256ih28iw28 nhwc_desc=ic256sp200704", "far=0 mv=8 icb=32 sspb=392 uspb=4 uspu=1"); //, 0.925760
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic256ih56iw56 nhwc_desc=ic256sp802816", "far=1 mv=8 icb=32 sspb=49 uspb=4 uspu=1"); //, 3.960640
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic512ih14iw14 nhwc_desc=ic512sp50176", "far=0 mv=8 icb=32 sspb=196 uspb=8 uspu=4"); //, 0.288640
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic512ih28iw28 nhwc_desc=ic512sp200704", "far=1 mv=8 icb=32 sspb=16 uspb=4 uspu=1"); //, 1.968960
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic512ih7iw7 nhwc_desc=ic512sp12544", "far=0 mv=8 icb=32 sspb=49 uspb=8 uspu=4"); //, 0.045600
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic64ih112iw112 nhwc_desc=ic64sp3211264", "far=1 mv=8 icb=32 sspb=196 uspb=4 uspu=2"); //, 4.016320
        add("hw=xe_hpc impl=nhwc_opt dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic64ih56iw56 nhwc_desc=ic64sp802816", "far=1 mv=8 icb=128 sspb=196 uspb=4 uspu=4"); //, 0.941760
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic1024ih14iw14 nhwc_desc=ic1024sp50176", "far=0 mv=8 icb=64 sspb=196 uspb=4 uspu=2"); //, 0.511520
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic128ih28iw28 nhwc_desc=ic128sp200704", "far=1 mv=8 icb=64 sspb=98 uspb=8 uspu=2"); //, 0.125280
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic128ih56iw56 nhwc_desc=ic128sp802816", "far=1 mv=8 icb=64 sspb=392 uspb=4 uspu=1"); //, 1.561600
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic2048ih7iw7 nhwc_desc=ic2048sp12544", "far=0 mv=8 icb=64 sspb=98 uspb=8 uspu=4"); //, 0.112000
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic256ih14iw14 nhwc_desc=ic256sp50176", "far=0 mv=8 icb=32 sspb=98 uspb=8 uspu=4"); //, 0.066880
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic256ih28iw28 nhwc_desc=ic256sp200704", "far=1 mv=8 icb=32 sspb=392 uspb=4 uspu=4"); //, 0.514720
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic256ih56iw56 nhwc_desc=ic256sp802816", "far=1 mv=8 icb=32 sspb=49 uspb=4 uspu=1"); //, 3.154240
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic512ih14iw14 nhwc_desc=ic512sp50176", "far=0 mv=8 icb=32 sspb=196 uspb=8 uspu=4"); //, 0.113760
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic512ih28iw28 nhwc_desc=ic512sp200704", "far=1 mv=8 icb=32 sspb=32 uspb=4 uspu=1"); //, 1.556960
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic512ih7iw7 nhwc_desc=ic512sp12544", "far=0 mv=8 icb=32 sspb=49 uspb=8 uspu=4"); //, 0.040480
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic64ih112iw112 nhwc_desc=ic64sp3211264", "far=1 mv=8 icb=32 sspb=98 uspb=4 uspu=1"); //, 3.230880
        add("hw=xe_hpc impl=nhwc_opt dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic64ih56iw56 nhwc_desc=ic64sp802816", "far=1 mv=8 icb=128 sspb=196 uspb=4 uspu=2"); //, 0.527360
        // nhwc_reusable version
        // resnet-50.tr.fp32.pt.mb16_pvc
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic1024ih14iw14 nhwc_desc=ic1024sp3136", "far=1 mv=8 icb=64 sspb=14 uspb=-1 uspu=-1"); //, 0.036480
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic128ih28iw28 nhwc_desc=ic128sp12544", "far=1 mv=8 icb=64 sspb=7 uspb=8 uspu=-1"); //, 0.027680
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic128ih56iw56 nhwc_desc=ic128sp50176", "far=1 mv=8 icb=64 sspb=28 uspb=-1 uspu=-1"); //, 0.058720
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic2048ih7iw7 nhwc_desc=ic2048sp784", "far=0 mv=8 icb=64 sspb=7 uspb=-1 uspu=-1"); //, 0.025920
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic256ih14iw14 nhwc_desc=ic256sp3136", "far=0 mv=8 icb=32 sspb=16 uspb=8 uspu=-1"); //, 0.024160
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic256ih28iw28 nhwc_desc=ic256sp12544", "far=1 mv=8 icb=64 sspb=14 uspb=-1 uspu=-1"); //, 0.037280
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic256ih56iw56 nhwc_desc=ic256sp50176", "far=1 mv=8 icb=64 sspb=49 uspb=-1 uspu=-1"); //, 0.093280
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic512ih14iw14 nhwc_desc=ic512sp3136", "far=0 mv=8 icb=64 sspb=16 uspb=8 uspu=-1"); //, 0.027840
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic512ih28iw28 nhwc_desc=ic512sp12544", "far=1 mv=8 icb=64 sspb=28 uspb=-1 uspu=-1"); //, 0.056960
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic512ih7iw7 nhwc_desc=ic512sp784", "far=0 mv=8 icb=32 sspb=7 uspb=4 uspu=-1"); //, 0.020640
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic64ih112iw112 nhwc_desc=ic64sp200704", "far=1 mv=8 icb=128 sspb=49 uspb=-1 uspu=-1"); //, 0.093120
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb16ic64ih56iw56 nhwc_desc=ic64sp50176", "far=1 mv=8 icb=128 sspb=14 uspb=-1 uspu=-1"); //, 0.036320
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic1024ih14iw14 nhwc_desc=ic1024sp3136", "far=0 mv=8 icb=64 sspb=16 uspb=-1 uspu=-1"); //, 0.038720
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic128ih28iw28 nhwc_desc=ic128sp12544", "far=0 mv=8 icb=64 sspb=7 uspb=8 uspu=-1"); //, 0.035360
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic128ih56iw56 nhwc_desc=ic128sp50176", "far=1 mv=8 icb=128 sspb=14 uspb=8 uspu=-1"); //, 0.055680
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic2048ih7iw7 nhwc_desc=ic2048sp784", "far=0 mv=8 icb=64 sspb=7 uspb=16 uspu=-1"); //, 0.035840
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic256ih14iw14 nhwc_desc=ic256sp3136", "far=0 mv=8 icb=128 sspb=7 uspb=4 uspu=-1"); //, 0.034400
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic256ih28iw28 nhwc_desc=ic256sp12544", "far=0 mv=8 icb=64 sspb=16 uspb=16 uspu=-1"); //, 0.042080
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic256ih56iw56 nhwc_desc=ic256sp50176", "far=1 mv=8 icb=128 sspb=28 uspb=4 uspu=-1"); //, 0.086720
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic512ih14iw14 nhwc_desc=ic512sp3136", "far=0 mv=8 icb=64 sspb=16 uspb=8 uspu=-1"); //, 0.035840
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic512ih28iw28 nhwc_desc=ic512sp12544", "far=0 mv=8 icb=128 sspb=16 uspb=8 uspu=-1"); //, 0.053120
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic512ih7iw7 nhwc_desc=ic512sp784", "far=0 mv=8 icb=64 sspb=14 uspb=4 uspu=-1"); //, 0.034720
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic64ih112iw112 nhwc_desc=ic64sp200704", "far=1 mv=8 icb=64 sspb=49 uspb=8 uspu=-1"); //, 0.093440
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb16ic64ih56iw56 nhwc_desc=ic64sp50176", "far=1 mv=8 icb=64 sspb=14 uspb=-1 uspu=-1"); //, 0.043200
        // resnet-50.tr.bf16.pt.mb256_pvc
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic1024ih14iw14 nhwc_desc=ic1024sp50176", "far=1 mv=8 icb=128 sspb=98 uspb=8 uspu=-1"); //, 0.396960
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic128ih28iw28 nhwc_desc=ic128sp200704", "far=1 mv=8 icb=128 sspb=49 uspb=-1 uspu=-1"); //, 0.124640
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic128ih56iw56 nhwc_desc=ic128sp802816", "far=1 mv=8 icb=128 sspb=196 uspb=8 uspu=-1"); //, 1.023840
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic2048ih7iw7 nhwc_desc=ic2048sp12544", "far=0 mv=8 icb=128 sspb=49 uspb=-1 uspu=-1"); //, 0.120480
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic256ih14iw14 nhwc_desc=ic256sp50176", "far=1 mv=8 icb=128 sspb=28 uspb=-1 uspu=-1"); //, 0.080160
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic256ih28iw28 nhwc_desc=ic256sp200704", "far=0 mv=8 icb=128 sspb=196 uspb=8 uspu=-1"); //, 0.408160
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic256ih56iw56 nhwc_desc=ic256sp802816", "far=0 mv=8 icb=128 sspb=392 uspb=4 uspu=-1"); //, 2.111840
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic512ih14iw14 nhwc_desc=ic512sp50176", "far=0 mv=8 icb=128 sspb=49 uspb=-1 uspu=-1"); //, 0.123360
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic512ih28iw28 nhwc_desc=ic512sp200704", "far=1 mv=8 icb=128 sspb=196 uspb=4 uspu=-1"); //, 1.015360
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic512ih7iw7 nhwc_desc=ic512sp12544", "far=0 mv=8 icb=128 sspb=16 uspb=16 uspu=-1"); //, 0.051360
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic64ih112iw112 nhwc_desc=ic64sp3211264", "far=1 mv=8 icb=128 sspb=196 uspb=16 uspu=-1"); //, 2.179360
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=bf16 tag=acdb flags=CH desc=mb256ic64ih56iw56 nhwc_desc=ic64sp802816", "far=1 mv=8 icb=64 sspb=196 uspb=16 uspu=-1"); //, 0.406240
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic1024ih14iw14 nhwc_desc=ic1024sp50176", "far=0 mv=8 icb=128 sspb=98 uspb=-1 uspu=-1"); //, 0.167840
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic128ih28iw28 nhwc_desc=ic128sp200704", "far=1 mv=8 icb=128 sspb=49 uspb=-1 uspu=-1"); //, 0.098240
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic128ih56iw56 nhwc_desc=ic128sp802816", "far=1 mv=8 icb=128 sspb=196 uspb=4 uspu=-1"); //, 0.662560
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic2048ih7iw7 nhwc_desc=ic2048sp12544", "far=0 mv=8 icb=128 sspb=49 uspb=-1 uspu=-1"); //, 0.088480
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic256ih14iw14 nhwc_desc=ic256sp50176", "far=1 mv=8 icb=128 sspb=28 uspb=-1 uspu=-1"); //, 0.065600
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic256ih28iw28 nhwc_desc=ic256sp200704", "far=1 mv=8 icb=128 sspb=98 uspb=-1 uspu=-1"); //, 0.173280
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic256ih56iw56 nhwc_desc=ic256sp802816", "far=1 mv=8 icb=128 sspb=392 uspb=4 uspu=-1"); //, 1.704160
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic512ih14iw14 nhwc_desc=ic512sp50176", "far=0 mv=8 icb=128 sspb=49 uspb=-1 uspu=-1"); //, 0.092480
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic512ih28iw28 nhwc_desc=ic512sp200704", "far=0 mv=8 icb=128 sspb=196 uspb=8 uspu=-1"); //, 0.639360
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic512ih7iw7 nhwc_desc=ic512sp12544", "far=1 mv=8 icb=128 sspb=14 uspb=-1 uspu=-1"); //, 0.044000
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic64ih112iw112 nhwc_desc=ic64sp3211264", "far=0 mv=8 icb=128 sspb=392 uspb=8 uspu=-1"); //, 1.865120
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=bf16 tag=acdb flags=CH desc=mb256ic64ih56iw56 nhwc_desc=ic64sp802816", "far=1 mv=8 icb=64 sspb=196 uspb=-1 uspu=-1"); //, 0.274400
        // resnet-50.tr.fp32.pt.mb256_pvc_aurora
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic1024ih14iw14 nhwc_desc=ic1024sp50176", "far=0 mv=8 icb=32 sspb=392 uspb=8 uspu=-1"); //, 0.984640
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic128ih28iw28 nhwc_desc=ic128sp200704", "far=0 mv=8 icb=64 sspb=98 uspb=8 uspu=-1"); //, 0.353440
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic128ih56iw56 nhwc_desc=ic128sp802816", "far=1 mv=8 icb=32 sspb=98 uspb=4 uspu=-1"); //, 2.055200
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic2048ih7iw7 nhwc_desc=ic2048sp12544", "far=0 mv=8 icb=64 sspb=98 uspb=16 uspu=-1"); //, 0.341280
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic256ih14iw14 nhwc_desc=ic256sp50176", "far=0 mv=8 icb=64 sspb=49 uspb=-1 uspu=-1"); //, 0.093760
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic256ih28iw28 nhwc_desc=ic256sp200704", "far=0 mv=8 icb=32 sspb=392 uspb=4 uspu=-1"); //, 0.973920
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic256ih56iw56 nhwc_desc=ic256sp802816", "far=1 mv=8 icb=32 sspb=32 uspb=4 uspu=-1"); //, 4.031360
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic512ih14iw14 nhwc_desc=ic512sp50176", "far=0 mv=8 icb=64 sspb=98 uspb=8 uspu=-1"); //, 0.336800
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic512ih28iw28 nhwc_desc=ic512sp200704", "far=1 mv=8 icb=32 sspb=32 uspb=4 uspu=-1"); //, 2.054240
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic512ih7iw7 nhwc_desc=ic512sp12544", "far=0 mv=8 icb=64 sspb=32 uspb=-1 uspu=-1"); //, 0.057760
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic64ih112iw112 nhwc_desc=ic64sp3211264", "far=1 mv=8 icb=32 sspb=64 uspb=8 uspu=-1"); //, 4.064320
        add("hw=xe_hpc impl=nhwc_reusable dir=BWD_DW dt=f32 tag=acdb flags=CH desc=mb256ic64ih56iw56 nhwc_desc=ic64sp802816", "far=1 mv=8 icb=128 sspb=196 uspb=8 uspu=-1"); //, 0.978240
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic1024ih14iw14 nhwc_desc=ic1024sp50176", "far=0 mv=8 icb=128 sspb=98 uspb=4 uspu=-1"); //, 0.588960
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic128ih28iw28 nhwc_desc=ic128sp200704", "far=1 mv=8 icb=128 sspb=49 uspb=8 uspu=-1"); //, 0.144640
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic128ih56iw56 nhwc_desc=ic128sp802816", "far=1 mv=8 icb=64 sspb=392 uspb=4 uspu=-1"); //, 1.653440
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic2048ih7iw7 nhwc_desc=ic2048sp12544", "far=0 mv=8 icb=128 sspb=49 uspb=-1 uspu=-1"); //, 0.136000
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic256ih14iw14 nhwc_desc=ic256sp50176", "far=1 mv=8 icb=128 sspb=28 uspb=16 uspu=-1"); //, 0.086720
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic256ih28iw28 nhwc_desc=ic256sp200704", "far=0 mv=8 icb=128 sspb=98 uspb=4 uspu=-1"); //, 0.586080
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic256ih56iw56 nhwc_desc=ic256sp802816", "far=1 mv=8 icb=64 sspb=64 uspb=4 uspu=-1"); //, 3.301600
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic512ih14iw14 nhwc_desc=ic512sp50176", "far=0 mv=8 icb=128 sspb=49 uspb=8 uspu=-1"); //, 0.138720
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic512ih28iw28 nhwc_desc=ic512sp200704", "far=1 mv=8 icb=64 sspb=28 uspb=4 uspu=-1"); //, 1.634400
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic512ih7iw7 nhwc_desc=ic512sp12544", "far=0 mv=8 icb=128 sspb=16 uspb=8 uspu=-1"); //, 0.053280
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic64ih112iw112 nhwc_desc=ic64sp3211264", "far=1 mv=8 icb=128 sspb=196 uspb=4 uspu=-1"); //, 3.386400
        add("hw=xe_hpc impl=nhwc_reusable dir=FWD_D dt=f32 tag=acdb flags=CH desc=mb256ic64ih56iw56 nhwc_desc=ic64sp802816", "far=1 mv=8 icb=64 sspb=196 uspb=8 uspu=-1"); //, 0.643360
        // clang-format on
    }
}

std::string get_desc_str(const params_t &conf) {
    ostringstream_t oss;
    oss << "mb" << conf.mb;
    oss << "ic" << conf.ic;
    oss << "ih" << conf.ih;
    oss << "iw" << conf.iw;
    return oss.str();
}
std::string get_nhwc_desc_str(const params_t &conf) {
    ostringstream_t oss;
    oss << "ic" << conf.ic;
    oss << "sp" << conf.mb * conf.ih * conf.iw * conf.id;
    return oss.str();
}

const char *lookup_table_t::find(
        const params_t &conf, const gpu_arch_t &gpu_arch) const {
    const auto &key
            = is_nhwc_impl(conf) ? get_nhwc_desc_str(conf) : get_desc_str(conf);
    auto it = map_.find(key);
    if (it == map_.end()) return nullptr;
    for (auto &e : it->second) {
        if (e.filter.matches(conf, gpu_arch)) { return e.s_params; }
    }
    return nullptr;
}

void lookup_table_t::add(const char *s_prb, const char *s_params) {
    problem_filter_t filter(s_prb);
    map_[filter.key()].push_back(entry_t {filter, s_params});
}

int params_t::sort_key(const param_t *param) const {
    static const char *ordered_params[] = {
            "far",
            "icb",
            "mv",
            "sspb",
            "uspb",
            "uspu",
            nullptr,
    };
    for (const char **p = ordered_params; *p; p++) {
        if (param->short_name() == *p)
            return static_cast<int>(p - ordered_params);
    }
    return (int)(sizeof(ordered_params) / sizeof(ordered_params[0]));
}

std::string params_t::str() const {
    ostringstream_t oss;
    oss << "Fused atomic reduction: " << use_fused_atomics_reduction_.str()
        << std::endl;
    oss << "IC block: " << ic_block_.str() << std::endl;
    oss << "Max vector size: " << max_vect_size_.str() << std::endl;
    oss << "Stat spatial blocking: " << stat_sp_block_.str() << std::endl;
    oss << "Update spatial blocking: " << update_sp_block_.str() << std::endl;
    oss << "Update spatial unrolling: " << update_sp_unroll_.str() << std::endl;
    return oss.str();
}

} // namespace lookup_table
} // namespace bnorm
} // namespace intel
} // namespace gpu
} // namespace impl
} // namespace dnnl