"scripts/vscode:/vscode.git/clone" did not exist on "a669bc2f74eee618c28c6d3db0ddf74db9ac2d92"
driver.cpp 19.3 KB
Newer Older
Chao Liu's avatar
Chao Liu committed
1
#include <iostream>
Chao Liu's avatar
Chao Liu committed
2
3
#include <numeric>
#include <initializer_list>
Chao Liu's avatar
Chao Liu committed
4
#include <cstdlib>
Chao Liu's avatar
Chao Liu committed
5
#include <stdlib.h>
Chao Liu's avatar
Chao Liu committed
6
7
8
#include "config.hpp"
#include "ConstantTensorDescriptor.hpp"
#include "device.hpp"
Chao Liu's avatar
Chao Liu committed
9
#include "conv_common.hpp"
10
#include "host_conv.hpp"
Chao Liu's avatar
Chao Liu committed
11
//#include "device_convolution_direct_v2_nchw_kcyx_nkhw.hpp"
12
13
//#include "device_convolution_implicit_gemm_v1_chwn_cyxk_khwn.hpp"
//#include "device_convolution_implicit_gemm_v1_chwn_cyxk_khwn_padded.hpp"
14
15
16
//#include "device_convolution_implicit_gemm_v1_nchw_cyxk_nkhw.hpp"
//#include "device_convolution_implicit_gemm_v2_chwn_cyxk_khwn.hpp"
//#include "device_convolution_implicit_gemm_v3_nchw_cyxk_nkhw.hpp"
Chao Liu's avatar
Chao Liu committed
17
#include "device_convolution_implicit_gemm_v4r1_nchw_kcyx_nkhw.hpp"
Chao Liu's avatar
Chao Liu committed
18
#include "device_convolution_implicit_gemm_v4r1_nchw_kcyx_nkhw_padded.hpp"
19
20
//#include "device_convolution_implicit_gemm_v4r2_nchw_kcyx_nkhw.hpp"
//#include "device_convolution_implicit_gemm_v4r3_nchw_kcyx_nkhw.hpp"
Chao Liu's avatar
Chao Liu committed
21
#include "device_convolution_implicit_gemm_v4r4_nchw_kcyx_nkhw.hpp"
Chao Liu's avatar
Chao Liu committed
22
#include "device_convolution_implicit_gemm_v4r4_nchw_kcyx_nkhw_padded.hpp"
23

Chao Liu's avatar
Chao Liu committed
24
struct GeneratorTensor_1
Chao Liu's avatar
Chao Liu committed
25
26
{
    template <class... Is>
Chao Liu's avatar
Chao Liu committed
27
    double operator()(Is... is)
Chao Liu's avatar
Chao Liu committed
28
    {
Chao Liu's avatar
Chao Liu committed
29
        return 1;
Chao Liu's avatar
Chao Liu committed
30
31
32
    }
};

Chao Liu's avatar
Chao Liu committed
33
34
35
36
37
38
39
40
41
42
43
44
struct GeneratorTensor_2
{
    int min_value = 0;
    int max_value = 1;

    template <class... Is>
    double operator()(Is...)
    {
        return (std::rand() % (max_value - min_value)) + min_value;
    }
};

45
46
47
48
49
50
51
struct GeneratorTensor_3
{
    template <class... Is>
    double operator()(Is... is)
    {
        std::array<index_t, sizeof...(Is)> dims = {{static_cast<index_t>(is)...}};

Chao Liu's avatar
bug fix  
Chao Liu committed
52
        auto f_acc = [](auto a, auto b) { return 10 * a + b; };
53

54
        return std::accumulate(dims.begin(), dims.end(), index_t(0), f_acc);
55
56
57
    }
};

Chao Liu's avatar
Chao Liu committed
58
59
60
61
62
struct GeneratorTensor_Checkboard
{
    template <class... Ts>
    double operator()(Ts... Xs) const
    {
Chao Liu's avatar
Chao Liu committed
63
        std::array<index_t, sizeof...(Ts)> dims = {{Xs...}};
Chao Liu's avatar
Chao Liu committed
64
65
66
        return std::accumulate(dims.begin(),
                               dims.end(),
                               true,
Chao Liu's avatar
Chao Liu committed
67
                               [](bool init, index_t x) -> int { return init != (x % 2); })
Chao Liu's avatar
Chao Liu committed
68
69
70
71
72
                   ? 1
                   : -1;
    }
};

Chao Liu's avatar
Chao Liu committed
73
int main(int argc, char* argv[])
Chao Liu's avatar
Chao Liu committed
74
{
Chao Liu's avatar
Chao Liu committed
75
76
    using namespace ck;

Chao Liu's avatar
Chao Liu committed
77
#if 0
Chao Liu's avatar
Chao Liu committed
78
79
80
81
82
    constexpr index_t N  = 128;
    constexpr index_t C  = 128;
    constexpr index_t HI = 17;
    constexpr index_t WI = 17;
    constexpr index_t K  = 128;
Chao Liu's avatar
Chao Liu committed
83
    constexpr index_t Y  = 1;
Chao Liu's avatar
Chao Liu committed
84
    constexpr index_t X  = 7;
Chao Liu's avatar
Chao Liu committed
85
86
87

    using ConvStrides   = Sequence<1, 1>;
    using ConvDilations = Sequence<1, 1>;
Chao Liu's avatar
Chao Liu committed
88

Chao Liu's avatar
Chao Liu committed
89
90
    using LeftPads  = Sequence<0, 3>;
    using RightPads = Sequence<0, 3>;
Chao Liu's avatar
Chao Liu committed
91
#elif 0
92
    // 3x3, 34x34
Chao Liu's avatar
Chao Liu committed
93
    constexpr index_t N  = 64;
94
    constexpr index_t C  = 256;
95
96
    constexpr index_t HI = 34;
    constexpr index_t WI = 34;
97
98
99
    constexpr index_t K  = 128;
    constexpr index_t Y  = 3;
    constexpr index_t X  = 3;
Chao Liu's avatar
Chao Liu committed
100

Chao Liu's avatar
Chao Liu committed
101
    using ConvStrides   = Sequence<1, 1>;
102
103
    using ConvDilations = Sequence<1, 1>;

104
105
    using LeftPads  = Sequence<0, 0>;
    using RightPads = Sequence<0, 0>;
Chao Liu's avatar
Chao Liu committed
106
#elif 0
Chao Liu's avatar
Chao Liu committed
107
    // 1x1 filter, 8x8 image
Chao Liu's avatar
Chao Liu committed
108
    // cudnn@V100 68%, ck@V100 72%, ck@P100 52%, ck@VII 42%
Chao Liu's avatar
Chao Liu committed
109
110
111
112
113
114
115
116
117
118
119
    constexpr index_t N  = 64;
    constexpr index_t C  = 1536;
    constexpr index_t HI = 8;
    constexpr index_t WI = 8;
    constexpr index_t K  = 256;
    constexpr index_t Y  = 1;
    constexpr index_t X  = 1;

    using ConvStrides   = Sequence<1, 1>;
    using ConvDilations = Sequence<1, 1>;

Chao Liu's avatar
Chao Liu committed
120
121
    using LeftPads  = Sequence<0, 0>;
    using RightPads = Sequence<0, 0>;
Chao Liu's avatar
Chao Liu committed
122
#elif 0
Chao Liu's avatar
Chao Liu committed
123
    // 1x1 filter, 8x8 image
Chao Liu's avatar
Chao Liu committed
124
    // cudnn@V100 77%, ck@V100 76%, ck@P100 79%, ck@VII 51%
Chao Liu's avatar
Chao Liu committed
125
126
127
128
129
130
131
132
133
134
135
    constexpr index_t N  = 128;
    constexpr index_t C  = 2048;
    constexpr index_t HI = 8;
    constexpr index_t WI = 8;
    constexpr index_t K  = 384;
    constexpr index_t Y  = 1;
    constexpr index_t X  = 1;

    using ConvStrides   = Sequence<1, 1>;
    using ConvDilations = Sequence<1, 1>;

Chao Liu's avatar
Chao Liu committed
136
137
    using LeftPads  = Sequence<0, 0>;
    using RightPads = Sequence<0, 0>;
Chao Liu's avatar
Chao Liu committed
138
#elif 0
Chao Liu's avatar
Chao Liu committed
139
    // 1x1 filter, 7x7 image
Chao Liu's avatar
Chao Liu committed
140
    // cudnn@V100 82%, ck@V100 76%, ck@P100 67%, ck@VII 64%
Chao Liu's avatar
Chao Liu committed
141
142
143
144
145
146
147
148
149
150
151
    constexpr index_t N  = 128;
    constexpr index_t C  = 832;
    constexpr index_t HI = 7;
    constexpr index_t WI = 7;
    constexpr index_t K  = 384;
    constexpr index_t Y  = 1;
    constexpr index_t X  = 1;

    using ConvStrides   = Sequence<1, 1>;
    using ConvDilations = Sequence<1, 1>;

Chao Liu's avatar
Chao Liu committed
152
153
    using LeftPads  = Sequence<0, 0>;
    using RightPads = Sequence<0, 0>;
Chao Liu's avatar
Chao Liu committed
154
#elif 0
Chao Liu's avatar
Chao Liu committed
155
    // 1x1 filter, 8x8 image
Chao Liu's avatar
Chao Liu committed
156
    // cudnn@V100 83%, ck@V100 75%, ck@P100 78%, ck@VII 65%
Chao Liu's avatar
Chao Liu committed
157
158
159
160
161
162
163
164
165
166
167
    constexpr index_t N  = 128;
    constexpr index_t C  = 1280;
    constexpr index_t HI = 8;
    constexpr index_t WI = 8;
    constexpr index_t K  = 384;
    constexpr index_t Y  = 1;
    constexpr index_t X  = 1;

    using ConvStrides   = Sequence<1, 1>;
    using ConvDilations = Sequence<1, 1>;

Chao Liu's avatar
Chao Liu committed
168
169
    using LeftPads  = Sequence<0, 0>;
    using RightPads = Sequence<0, 0>;
Chao Liu's avatar
Chao Liu committed
170
#elif 0
Chao Liu's avatar
Chao Liu committed
171
    // 1x1 filter, 14x14 image
Chao Liu's avatar
Chao Liu committed
172
    // cudnn@V100 62%, ck@V100 68%, ck@P100 70%, ck@VII 50%
Chao Liu's avatar
Chao Liu committed
173
174
175
176
177
178
179
180
181
182
183
    constexpr index_t N  = 128;
    constexpr index_t C  = 512;
    constexpr index_t HI = 14;
    constexpr index_t WI = 14;
    constexpr index_t K  = 128;
    constexpr index_t Y  = 1;
    constexpr index_t X  = 1;

    using ConvStrides   = Sequence<1, 1>;
    using ConvDilations = Sequence<1, 1>;

Chao Liu's avatar
Chao Liu committed
184
185
    using LeftPads  = Sequence<0, 0>;
    using RightPads = Sequence<0, 0>;
Chao Liu's avatar
Chao Liu committed
186
#elif 0
Chao Liu's avatar
Chao Liu committed
187
    // 1x1 filter, 8x8 image
Chao Liu's avatar
Chao Liu committed
188
    // cudnn@V100 74%, ck@V100 57%, ck@P100 78%, ck@VII 61%
Chao Liu's avatar
Chao Liu committed
189
190
191
192
193
194
195
196
197
198
199
    constexpr index_t N  = 64;
    constexpr index_t C  = 1536;
    constexpr index_t HI = 8;
    constexpr index_t WI = 8;
    constexpr index_t K  = 384;
    constexpr index_t Y  = 1;
    constexpr index_t X  = 1;

    using ConvStrides   = Sequence<1, 1>;
    using ConvDilations = Sequence<1, 1>;

Chao Liu's avatar
Chao Liu committed
200
201
    using LeftPads  = Sequence<0, 0>;
    using RightPads = Sequence<0, 0>;
Chao Liu's avatar
Chao Liu committed
202
#elif 0
Chao Liu's avatar
Chao Liu committed
203
    // 1x1 filter, 28x28 image
Chao Liu's avatar
Chao Liu committed
204
    // cudnn@V100 86%, ck@V100 84%, ck@P100 80%, ck@VII 69%
Chao Liu's avatar
Chao Liu committed
205
206
207
208
209
210
211
212
213
214
215
    constexpr index_t N  = 128;
    constexpr index_t C  = 256;
    constexpr index_t HI = 28;
    constexpr index_t WI = 28;
    constexpr index_t K  = 128;
    constexpr index_t Y  = 1;
    constexpr index_t X  = 1;

    using ConvStrides   = Sequence<1, 1>;
    using ConvDilations = Sequence<1, 1>;

Chao Liu's avatar
Chao Liu committed
216
217
    using LeftPads  = Sequence<0, 0>;
    using RightPads = Sequence<0, 0>;
Chao Liu's avatar
Chao Liu committed
218
#elif 0
Chao Liu's avatar
Chao Liu committed
219
    // 1x1 filter, 7x7 image
Chao Liu's avatar
Chao Liu committed
220
    // cudnn@V100 71%, ck@V100 55%, ck@P100 70%, ck@VII 62%
Chao Liu's avatar
Chao Liu committed
221
222
223
224
225
226
227
228
229
230
231
    constexpr index_t N  = 128;
    constexpr index_t C  = 832;
    constexpr index_t HI = 7;
    constexpr index_t WI = 7;
    constexpr index_t K  = 256;
    constexpr index_t Y  = 1;
    constexpr index_t X  = 1;

    using ConvStrides   = Sequence<1, 1>;
    using ConvDilations = Sequence<1, 1>;

Chao Liu's avatar
Chao Liu committed
232
233
    using LeftPads  = Sequence<0, 0>;
    using RightPads = Sequence<0, 0>;
234
#elif 0
Chao Liu's avatar
Chao Liu committed
235
    // 1x1 filter, 17x17 input
Chao Liu's avatar
Chao Liu committed
236
    // cudnn@V100 81%, ck@V100 76%, ck@P100 70%, ck@VII 76%
Chao Liu's avatar
Chao Liu committed
237
238
239
240
241
242
243
244
245
246
247
    constexpr index_t N  = 128;
    constexpr index_t C  = 768;
    constexpr index_t HI = 17;
    constexpr index_t WI = 17;
    constexpr index_t K  = 128;
    constexpr index_t Y  = 1;
    constexpr index_t X  = 1;

    using ConvStrides   = Sequence<1, 1>;
    using ConvDilations = Sequence<1, 1>;

Chao Liu's avatar
Chao Liu committed
248
249
    using LeftPads  = Sequence<0, 0>;
    using RightPads = Sequence<0, 0>;
Chao Liu's avatar
Chao Liu committed
250
#elif 0
Chao Liu's avatar
Chao Liu committed
251
    // 1x1 filter, 14x14 image
Chao Liu's avatar
Chao Liu committed
252
    // cudnn@V100 73%, ck@V100 71%, ck@P100 70%, ck@VII 64%
Chao Liu's avatar
Chao Liu committed
253
254
255
256
257
258
259
260
261
262
263
    constexpr index_t N  = 128;
    constexpr index_t C  = 528;
    constexpr index_t HI = 14;
    constexpr index_t WI = 14;
    constexpr index_t K  = 128;
    constexpr index_t Y  = 1;
    constexpr index_t X  = 1;

    using ConvStrides   = Sequence<1, 1>;
    using ConvDilations = Sequence<1, 1>;

Chao Liu's avatar
Chao Liu committed
264
265
    using LeftPads  = Sequence<0, 0>;
    using RightPads = Sequence<0, 0>;
Chao Liu's avatar
Chao Liu committed
266
267
#elif 0
    // 1x1 filter, 14x14 image
Chao Liu's avatar
Chao Liu committed
268
    // cudnn@V100 73%, ck@V100 72%, ck@P100 79%, ck@VII 75%
Chao Liu's avatar
Chao Liu committed
269
270
271
272
273
274
275
276
277
278
279
    constexpr index_t N  = 128;
    constexpr index_t C  = 528;
    constexpr index_t HI = 14;
    constexpr index_t WI = 14;
    constexpr index_t K  = 256;
    constexpr index_t Y  = 1;
    constexpr index_t X  = 1;

    using ConvStrides   = Sequence<1, 1>;
    using ConvDilations = Sequence<1, 1>;

Chao Liu's avatar
Chao Liu committed
280
281
    using LeftPads  = Sequence<0, 0>;
    using RightPads = Sequence<0, 0>;
Chao Liu's avatar
Chao Liu committed
282
#elif 0
Chao Liu's avatar
Chao Liu committed
283
    // 1x1 filter, 7x7 image
Chao Liu's avatar
Chao Liu committed
284
    // cudnn@V100 49%, ck@V100 50%, ck@P100 61%, ck@VII 52%
Chao Liu's avatar
Chao Liu committed
285
286
287
288
    constexpr index_t N  = 128;
    constexpr index_t C  = 832;
    constexpr index_t HI = 7;
    constexpr index_t WI = 7;
Chao Liu's avatar
Chao Liu committed
289
290
291
    constexpr index_t K  = 128;
    constexpr index_t Y  = 1;
    constexpr index_t X  = 1;
Chao Liu's avatar
Chao Liu committed
292
293
294
295

    using ConvStrides   = Sequence<1, 1>;
    using ConvDilations = Sequence<1, 1>;

Chao Liu's avatar
Chao Liu committed
296
297
    using LeftPads  = Sequence<0, 0>;
    using RightPads = Sequence<0, 0>;
Chao Liu's avatar
Chao Liu committed
298
#elif 0
Chao Liu's avatar
Chao Liu committed
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
    // 3x3 filter, 2x2 stride, 35x35 input, 17x17 output
    // cudnn@V100 90%, ck@V100 93%, ck@P100 83%, ck@VII 81%
    constexpr index_t N  = 128;
    constexpr index_t C  = 288;
    constexpr index_t HI = 35;
    constexpr index_t WI = 35;
    constexpr index_t K  = 384;
    constexpr index_t Y  = 3;
    constexpr index_t X  = 3;

    using ConvStrides   = Sequence<2, 2>;
    using ConvDilations = Sequence<1, 1>;

    using LeftPads  = Sequence<0, 0>;
    using RightPads = Sequence<0, 0>;
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
#elif 0
    // 5x5 filter, 2x2 pad, 7x7 input
    constexpr index_t N  = 128;
    constexpr index_t C  = 48;
    constexpr index_t HI = 7;
    constexpr index_t WI = 7;
    constexpr index_t K  = 128;
    constexpr index_t Y  = 5;
    constexpr index_t X  = 5;

    using ConvStrides   = Sequence<1, 1>;
    using ConvDilations = Sequence<1, 1>;

    using LeftPads  = Sequence<2, 2>;
    using RightPads = Sequence<2, 2>;
#elif 0
    // 7x1 filter, 3x0 pad, 17x17 input
    constexpr index_t N  = 128;
    constexpr index_t C  = 128;
    constexpr index_t HI = 17;
    constexpr index_t WI = 17;
    constexpr index_t K  = 128;
    constexpr index_t Y  = 7;
    constexpr index_t X  = 1;

    using ConvStrides   = Sequence<1, 1>;
    using ConvDilations = Sequence<1, 1>;

    using LeftPads  = Sequence<3, 0>;
    using RightPads = Sequence<3, 0>;
Chao Liu's avatar
Chao Liu committed
344
#elif 1
345
346
347
348
349
350
351
352
353
354
355
356
357
358
    // 1x7 filter, 0x3 pad, 17x17 input
    constexpr index_t N  = 128;
    constexpr index_t C  = 128;
    constexpr index_t HI = 17;
    constexpr index_t WI = 17;
    constexpr index_t K  = 128;
    constexpr index_t Y  = 1;
    constexpr index_t X  = 7;

    using ConvStrides   = Sequence<1, 1>;
    using ConvDilations = Sequence<1, 1>;

    using LeftPads  = Sequence<0, 3>;
    using RightPads = Sequence<0, 3>;
Chao Liu's avatar
Chao Liu committed
359
#endif
Chao Liu's avatar
Chao Liu committed
360

Chao Liu's avatar
Chao Liu committed
361
362
    auto in_nchw_desc  = make_ConstantTensorDescriptor_packed(Sequence<N, C, HI, WI>{});
    auto wei_kcyx_desc = make_ConstantTensorDescriptor_packed(Sequence<K, C, Y, X>{});
363
    auto out_nkhw_desc = get_convolution_with_padding_output_default_4d_tensor_descriptor(
Chao Liu's avatar
Chao Liu committed
364
        in_nchw_desc, wei_kcyx_desc, ConvStrides{}, ConvDilations{}, LeftPads{}, RightPads{});
Chao Liu's avatar
Chao Liu committed
365

Chao Liu's avatar
Chao Liu committed
366
    ostream_ConstantTensorDescriptor(in_nchw_desc, std::cout << "in_nchw_desc: ");
Chao Liu's avatar
Chao Liu committed
367
    ostream_ConstantTensorDescriptor(wei_kcyx_desc, std::cout << "wei_kcyx_desc: ");
Chao Liu's avatar
Chao Liu committed
368
    ostream_ConstantTensorDescriptor(out_nkhw_desc, std::cout << "out_nkhw_desc: ");
369
370
371
372
    print_sequence("LeftPads", LeftPads{});
    print_sequence("RightPads", RightPads{});
    print_sequence("ConvStrides", ConvStrides{});
    print_sequence("ConvDilations", ConvDilations{});
Chao Liu's avatar
Chao Liu committed
373

Chao Liu's avatar
Chao Liu committed
374
375
    using in_data_t  = float;
    using out_data_t = float;
376
377
378
379
    Tensor<in_data_t> in_nchw(make_TensorDescriptor(in_nchw_desc));
    Tensor<in_data_t> wei_kcyx(make_TensorDescriptor(wei_kcyx_desc));
    Tensor<out_data_t> out_nkhw_host(make_TensorDescriptor(out_nkhw_desc));
    Tensor<out_data_t> out_nkhw_device(make_TensorDescriptor(out_nkhw_desc));
Chao Liu's avatar
Chao Liu committed
380

Chao Liu's avatar
Chao Liu committed
381
    std::size_t num_thread = std::thread::hardware_concurrency();
Chao Liu's avatar
Chao Liu committed
382

Chao Liu's avatar
Chao Liu committed
383
384
385
386
387
388
389
    if(argc != 3)
    {
        printf("arg1: do_verification, arg2: nrepeat\n");
        exit(1);
    }

    bool do_verification = atoi(argv[1]);
Chao Liu's avatar
Chao Liu committed
390
    index_t nrepeat      = atoi(argv[2]);
391
392
393

    if(do_verification)
    {
Chao Liu's avatar
Chao Liu committed
394
#if 0
395
        in_nchw.GenerateTensorValue(GeneratorTensor_1{}, num_thread);
Chao Liu's avatar
Chao Liu committed
396
        wei_kcyx.GenerateTensorValue(GeneratorTensor_1{}, num_thread);
Chao Liu's avatar
Chao Liu committed
397
398
#elif 0
        in_nchw.GenerateTensorValue(GeneratorTensor_1{}, num_thread);
Chao Liu's avatar
bug fix  
Chao Liu committed
399
        wei_kcyx.GenerateTensorValue(GeneratorTensor_3{}, num_thread);
400
401
402
#elif 0
        in_nchw.GenerateTensorValue(GeneratorTensor_3{}, num_thread);
        wei_kcyx.GenerateTensorValue(GeneratorTensor_1{}, num_thread);
Chao Liu's avatar
Chao Liu committed
403
#elif 1
404
        in_nchw.GenerateTensorValue(GeneratorTensor_2{-5, 5}, num_thread);
Chao Liu's avatar
Chao Liu committed
405
        wei_kcyx.GenerateTensorValue(GeneratorTensor_2{-5, 5}, num_thread);
Chao Liu's avatar
Chao Liu committed
406
#elif 0
407
408
409
410
411
412
        in_nchw.GenerateTensorValue(GeneratorTensor_2{1, 5}, num_thread);

        auto gen_wei = [](auto... is) {
            return GeneratorTensor_2{1, 5}(is...) * GeneratorTensor_Checkboard{}(is...);
        };
        wei_kcyx.GenerateTensorValue(gen_wei, num_thread);
Chao Liu's avatar
Chao Liu committed
413
#endif
414
    }
Chao Liu's avatar
Chao Liu committed
415

Chao Liu's avatar
Chao Liu committed
416
#if 0
Chao Liu's avatar
Chao Liu committed
417
    device_convolution_direct_v2_nchw_kcyx_nkhw
Chao Liu's avatar
Chao Liu committed
418
        (in_nchw_desc, in_nchw, wei_kcyx_desc, wei_kcyx, out_nkhw_desc, out_nkhw_device, nrepeat);
Chao Liu's avatar
Chao Liu committed
419
#elif 0
Chao Liu's avatar
Chao Liu committed
420
    device_convolution_implicit_gemm_v1_chwn_cyxk_khwn(
Chao Liu's avatar
Chao Liu committed
421
        in_nchw_desc, in_nchw, wei_kcyx_desc, wei_kcyx, out_nkhw_desc, out_nkhw_device, nrepeat);
Chao Liu's avatar
Chao Liu committed
422
#elif 0
423
424
425
426
427
428
    device_convolution_implicit_gemm_v1_chwn_cyxk_khwn_padded(in_nchw_desc,
                                                              in_nchw,
                                                              wei_kcyx_desc,
                                                              wei_kcyx,
                                                              out_nkhw_desc,
                                                              out_nkhw_device,
Chao Liu's avatar
Chao Liu committed
429
430
                                                              LeftPads{},
                                                              RightPads{},
431
                                                              nrepeat);
Chao Liu's avatar
Chao Liu committed
432
#elif 0
Chao Liu's avatar
Chao Liu committed
433
    device_convolution_implicit_gemm_v1_nchw_cyxk_nkhw(
Chao Liu's avatar
Chao Liu committed
434
        in_nchw_desc, in_nchw, wei_kcyx_desc, wei_kcyx, out_nkhw_desc, out_nkhw_device, nrepeat);
435
#elif 0
Chao Liu's avatar
Chao Liu committed
436
    device_convolution_implicit_gemm_v2_chwn_cyxk_khwn(
Chao Liu's avatar
Chao Liu committed
437
        in_nchw_desc, in_nchw, wei_kcyx_desc, wei_kcyx, out_nkhw_desc, out_nkhw_device, nrepeat);
Chao Liu's avatar
Chao Liu committed
438
#elif 0
Chao Liu's avatar
Chao Liu committed
439
    device_convolution_implicit_gemm_v3_nchw_cyxk_nkhw(
Chao Liu's avatar
Chao Liu committed
440
        (in_nchw_desc, in_nchw, wei_kcyx_desc, wei_kcyx, out_nkhw_desc, out_nkhw_device, nrepeat);
Chao Liu's avatar
Chao Liu committed
441
#elif 0
Chao Liu's avatar
Chao Liu committed
442
443
444
445
446
447
448
449
450
    device_convolution_implicit_gemm_v4r1_nchw_kcyx_nkhw(in_nchw_desc,
                                                         in_nchw,
                                                         wei_kcyx_desc,
                                                         wei_kcyx,
                                                         out_nkhw_desc,
                                                         out_nkhw_device,
                                                         ConvStrides{},
                                                         ConvDilations{},
                                                         nrepeat);
Chao Liu's avatar
Chao Liu committed
451
#elif 1
Chao Liu's avatar
Chao Liu committed
452
453
454
455
456
457
458
459
460
461
462
    device_convolution_implicit_gemm_v4r1_nchw_kcyx_nkhw_padded(in_nchw_desc,
                                                                in_nchw,
                                                                wei_kcyx_desc,
                                                                wei_kcyx,
                                                                out_nkhw_desc,
                                                                out_nkhw_device,
                                                                ConvStrides{},
                                                                ConvDilations{},
                                                                LeftPads{},
                                                                RightPads{},
                                                                nrepeat);
Chao Liu's avatar
Chao Liu committed
463
#elif 0
Chao Liu's avatar
Chao Liu committed
464
465
466
467
468
469
    device_convolution_implicit_gemm_v4r2_nchw_kcyx_nkhw(in_nchw_desc,
                                                         in_nchw,
                                                         wei_kcyx_desc,
                                                         wei_kcyx,
                                                         out_nkhw_desc,
                                                         out_nkhw_device,
Chao Liu's avatar
Chao Liu committed
470
471
472
                                                         ConvStrides{},
                                                         ConvDilations{},
                                                         nrepeat);
Chao Liu's avatar
Chao Liu committed
473
#elif 0
Chao Liu's avatar
Chao Liu committed
474
475
476
477
478
479
    device_convolution_implicit_gemm_v4r3_nchw_kcyx_nkhw(in_nchw_desc,
                                                         in_nchw,
                                                         wei_kcyx_desc,
                                                         wei_kcyx,
                                                         out_nkhw_desc,
                                                         out_nkhw_device,
Chao Liu's avatar
Chao Liu committed
480
481
482
                                                         ConvStrides{},
                                                         ConvDilations{},
                                                         nrepeat);
Chao Liu's avatar
Chao Liu committed
483
#elif 0
Chao Liu's avatar
Chao Liu committed
484
485
486
487
488
489
    device_convolution_implicit_gemm_v4r4_nchw_kcyx_nkhw(in_nchw_desc,
                                                         in_nchw,
                                                         wei_kcyx_desc,
                                                         wei_kcyx,
                                                         out_nkhw_desc,
                                                         out_nkhw_device,
Chao Liu's avatar
Chao Liu committed
490
491
492
                                                         ConvStrides{},
                                                         ConvDilations{},
                                                         nrepeat);
Chao Liu's avatar
Chao Liu committed
493
#elif 1
Chao Liu's avatar
Chao Liu committed
494
495
496
497
498
499
500
501
502
503
504
    device_convolution_implicit_gemm_v4r4_nchw_kcyx_nkhw_padded(in_nchw_desc,
                                                                in_nchw,
                                                                wei_kcyx_desc,
                                                                wei_kcyx,
                                                                out_nkhw_desc,
                                                                out_nkhw_device,
                                                                ConvStrides{},
                                                                ConvDilations{},
                                                                LeftPads{},
                                                                RightPads{},
                                                                nrepeat);
505
#endif
Chao Liu's avatar
Chao Liu committed
506

507
    if(do_verification)
508
    {
Chao Liu's avatar
Chao Liu committed
509
#if 1
510
511
        if(Y == 3 && X == 3 && ConvStrides{}[0] == 1 && ConvStrides{}[1] == 1 &&
           ConvDilations{}[0] == 1 && ConvDilations{}[1] == 1)
512
        {
Chao Liu's avatar
Chao Liu committed
513
514
            host_winograd_3x3_convolution(
                in_nchw, wei_kcyx, out_nkhw_host, LeftPads{}, RightPads{});
515
516
        }
        else
Chao Liu's avatar
Chao Liu committed
517
#endif
518
        {
519
520
521
522
523
            host_direct_convolution(in_nchw,
                                    wei_kcyx,
                                    out_nkhw_host,
                                    ConvStrides{},
                                    ConvDilations{},
Chao Liu's avatar
Chao Liu committed
524
525
                                    LeftPads{},
                                    RightPads{});
526
527
        }
        check_error(out_nkhw_host, out_nkhw_device);
Chao Liu's avatar
Chao Liu committed
528

Chao Liu's avatar
Chao Liu committed
529
#if 0
530
        LogRange(std::cout << "in_nchw : ", in_nchw.mData, ",") << std::endl;
Chao Liu's avatar
Chao Liu committed
531
        LogRange(std::cout << "wei_kcyx: ", wei_kcyx.mData, ",") << std::endl;
532
533
        LogRange(std::cout << "out_nkhw_host  : ", out_nkhw_host.mData, ",") << std::endl;
        LogRange(std::cout << "out_nkhw_device: ", out_nkhw_device.mData, ",") << std::endl;
Chao Liu's avatar
Chao Liu committed
534
#endif
535
    }
536
}