1*4bdc9457SAndroid Build Coastguard Worker // Copyright 2019 Google LLC
2*4bdc9457SAndroid Build Coastguard Worker //
3*4bdc9457SAndroid Build Coastguard Worker // This source code is licensed under the BSD-style license found in the
4*4bdc9457SAndroid Build Coastguard Worker // LICENSE file in the root directory of this source tree.
5*4bdc9457SAndroid Build Coastguard Worker
6*4bdc9457SAndroid Build Coastguard Worker #include <gtest/gtest.h>
7*4bdc9457SAndroid Build Coastguard Worker
8*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/params.h>
9*4bdc9457SAndroid Build Coastguard Worker
10*4bdc9457SAndroid Build Coastguard Worker #include "prelu-operator-tester.h"
11*4bdc9457SAndroid Build Coastguard Worker
12*4bdc9457SAndroid Build Coastguard Worker
TEST(PRELU_NC_F16,unit_batch)13*4bdc9457SAndroid Build Coastguard Worker TEST(PRELU_NC_F16, unit_batch) {
14*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
15*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < xnn_params.f16.prelu.channel_tile * 10; channels += std::max<size_t>(1, xnn_params.f16.prelu.channel_tile - 1)) {
16*4bdc9457SAndroid Build Coastguard Worker PReLUOperatorTester()
17*4bdc9457SAndroid Build Coastguard Worker .batch_size(1)
18*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
19*4bdc9457SAndroid Build Coastguard Worker .iterations(3)
20*4bdc9457SAndroid Build Coastguard Worker .TestF16();
21*4bdc9457SAndroid Build Coastguard Worker }
22*4bdc9457SAndroid Build Coastguard Worker }
23*4bdc9457SAndroid Build Coastguard Worker
TEST(PRELU_NC_F16,small_batch)24*4bdc9457SAndroid Build Coastguard Worker TEST(PRELU_NC_F16, small_batch) {
25*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
26*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < xnn_params.f16.prelu.channel_tile * 10; channels += std::max<size_t>(1, xnn_params.f16.prelu.channel_tile - 1)) {
27*4bdc9457SAndroid Build Coastguard Worker PReLUOperatorTester()
28*4bdc9457SAndroid Build Coastguard Worker .batch_size(xnn_params.f16.prelu.row_tile)
29*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
30*4bdc9457SAndroid Build Coastguard Worker .iterations(3)
31*4bdc9457SAndroid Build Coastguard Worker .TestF16();
32*4bdc9457SAndroid Build Coastguard Worker }
33*4bdc9457SAndroid Build Coastguard Worker }
34*4bdc9457SAndroid Build Coastguard Worker
TEST(PRELU_NC_F16,small_batch_with_x_stride)35*4bdc9457SAndroid Build Coastguard Worker TEST(PRELU_NC_F16, small_batch_with_x_stride) {
36*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
37*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < xnn_params.f16.prelu.channel_tile * 10; channels += std::max<size_t>(1, xnn_params.f16.prelu.channel_tile - 1)) {
38*4bdc9457SAndroid Build Coastguard Worker PReLUOperatorTester()
39*4bdc9457SAndroid Build Coastguard Worker .batch_size(xnn_params.f16.prelu.row_tile)
40*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
41*4bdc9457SAndroid Build Coastguard Worker .x_stride(337)
42*4bdc9457SAndroid Build Coastguard Worker .iterations(3)
43*4bdc9457SAndroid Build Coastguard Worker .TestF16();
44*4bdc9457SAndroid Build Coastguard Worker }
45*4bdc9457SAndroid Build Coastguard Worker }
46*4bdc9457SAndroid Build Coastguard Worker
TEST(PRELU_NC_F16,small_batch_with_y_stride)47*4bdc9457SAndroid Build Coastguard Worker TEST(PRELU_NC_F16, small_batch_with_y_stride) {
48*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
49*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < xnn_params.f16.prelu.channel_tile * 10; channels += std::max<size_t>(1, xnn_params.f16.prelu.channel_tile - 1)) {
50*4bdc9457SAndroid Build Coastguard Worker PReLUOperatorTester()
51*4bdc9457SAndroid Build Coastguard Worker .batch_size(xnn_params.f16.prelu.row_tile)
52*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
53*4bdc9457SAndroid Build Coastguard Worker .y_stride(347)
54*4bdc9457SAndroid Build Coastguard Worker .iterations(3)
55*4bdc9457SAndroid Build Coastguard Worker .TestF16();
56*4bdc9457SAndroid Build Coastguard Worker }
57*4bdc9457SAndroid Build Coastguard Worker }
58*4bdc9457SAndroid Build Coastguard Worker
TEST(PRELU_NC_F16,small_batch_with_x_stride_and_y_stride)59*4bdc9457SAndroid Build Coastguard Worker TEST(PRELU_NC_F16, small_batch_with_x_stride_and_y_stride) {
60*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
61*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < xnn_params.f16.prelu.channel_tile * 10; channels += std::max<size_t>(1, xnn_params.f16.prelu.channel_tile - 1)) {
62*4bdc9457SAndroid Build Coastguard Worker PReLUOperatorTester()
63*4bdc9457SAndroid Build Coastguard Worker .batch_size(xnn_params.f16.prelu.row_tile)
64*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
65*4bdc9457SAndroid Build Coastguard Worker .x_stride(337)
66*4bdc9457SAndroid Build Coastguard Worker .y_stride(347)
67*4bdc9457SAndroid Build Coastguard Worker .iterations(3)
68*4bdc9457SAndroid Build Coastguard Worker .TestF16();
69*4bdc9457SAndroid Build Coastguard Worker }
70*4bdc9457SAndroid Build Coastguard Worker }
71*4bdc9457SAndroid Build Coastguard Worker
TEST(PRELU_NC_F16,large_batch)72*4bdc9457SAndroid Build Coastguard Worker TEST(PRELU_NC_F16, large_batch) {
73*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
74*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < xnn_params.f16.prelu.channel_tile * 10; channels += std::max<size_t>(1, xnn_params.f16.prelu.channel_tile - 1)) {
75*4bdc9457SAndroid Build Coastguard Worker PReLUOperatorTester()
76*4bdc9457SAndroid Build Coastguard Worker .batch_size(3 * xnn_params.f16.prelu.row_tile + 1)
77*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
78*4bdc9457SAndroid Build Coastguard Worker .iterations(1)
79*4bdc9457SAndroid Build Coastguard Worker .TestF16();
80*4bdc9457SAndroid Build Coastguard Worker }
81*4bdc9457SAndroid Build Coastguard Worker }
82*4bdc9457SAndroid Build Coastguard Worker
TEST(PRELU_NC_F16,large_batch_with_x_stride)83*4bdc9457SAndroid Build Coastguard Worker TEST(PRELU_NC_F16, large_batch_with_x_stride) {
84*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
85*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < xnn_params.f16.prelu.channel_tile * 10; channels += std::max<size_t>(1, xnn_params.f16.prelu.channel_tile - 1)) {
86*4bdc9457SAndroid Build Coastguard Worker PReLUOperatorTester()
87*4bdc9457SAndroid Build Coastguard Worker .batch_size(3 * xnn_params.f16.prelu.row_tile + 1)
88*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
89*4bdc9457SAndroid Build Coastguard Worker .x_stride(337)
90*4bdc9457SAndroid Build Coastguard Worker .iterations(1)
91*4bdc9457SAndroid Build Coastguard Worker .TestF16();
92*4bdc9457SAndroid Build Coastguard Worker }
93*4bdc9457SAndroid Build Coastguard Worker }
94*4bdc9457SAndroid Build Coastguard Worker
TEST(PRELU_NC_F16,large_batch_with_y_stride)95*4bdc9457SAndroid Build Coastguard Worker TEST(PRELU_NC_F16, large_batch_with_y_stride) {
96*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
97*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < xnn_params.f16.prelu.channel_tile * 10; channels += std::max<size_t>(1, xnn_params.f16.prelu.channel_tile - 1)) {
98*4bdc9457SAndroid Build Coastguard Worker PReLUOperatorTester()
99*4bdc9457SAndroid Build Coastguard Worker .batch_size(3 * xnn_params.f16.prelu.row_tile + 1)
100*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
101*4bdc9457SAndroid Build Coastguard Worker .y_stride(347)
102*4bdc9457SAndroid Build Coastguard Worker .iterations(1)
103*4bdc9457SAndroid Build Coastguard Worker .TestF16();
104*4bdc9457SAndroid Build Coastguard Worker }
105*4bdc9457SAndroid Build Coastguard Worker }
106*4bdc9457SAndroid Build Coastguard Worker
TEST(PRELU_NC_F16,large_batch_with_x_stride_and_y_stride)107*4bdc9457SAndroid Build Coastguard Worker TEST(PRELU_NC_F16, large_batch_with_x_stride_and_y_stride) {
108*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
109*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < xnn_params.f16.prelu.channel_tile * 10; channels += std::max<size_t>(1, xnn_params.f16.prelu.channel_tile - 1)) {
110*4bdc9457SAndroid Build Coastguard Worker PReLUOperatorTester()
111*4bdc9457SAndroid Build Coastguard Worker .batch_size(3 * xnn_params.f16.prelu.row_tile + 1)
112*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
113*4bdc9457SAndroid Build Coastguard Worker .x_stride(337)
114*4bdc9457SAndroid Build Coastguard Worker .y_stride(347)
115*4bdc9457SAndroid Build Coastguard Worker .iterations(1)
116*4bdc9457SAndroid Build Coastguard Worker .TestF16();
117*4bdc9457SAndroid Build Coastguard Worker }
118*4bdc9457SAndroid Build Coastguard Worker }
119*4bdc9457SAndroid Build Coastguard Worker
TEST(PRELU_NC_F16,fp32_weights)120*4bdc9457SAndroid Build Coastguard Worker TEST(PRELU_NC_F16, fp32_weights) {
121*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
122*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < xnn_params.f16.prelu.channel_tile * 10; channels += std::max<size_t>(1, xnn_params.f16.prelu.channel_tile - 1)) {
123*4bdc9457SAndroid Build Coastguard Worker PReLUOperatorTester()
124*4bdc9457SAndroid Build Coastguard Worker .batch_size(3 * xnn_params.f16.prelu.row_tile + 1)
125*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
126*4bdc9457SAndroid Build Coastguard Worker .x_stride(337)
127*4bdc9457SAndroid Build Coastguard Worker .y_stride(347)
128*4bdc9457SAndroid Build Coastguard Worker .weights_type(PReLUOperatorTester::WeightsType::FP32)
129*4bdc9457SAndroid Build Coastguard Worker .iterations(1)
130*4bdc9457SAndroid Build Coastguard Worker .TestF16();
131*4bdc9457SAndroid Build Coastguard Worker }
132*4bdc9457SAndroid Build Coastguard Worker }
133*4bdc9457SAndroid Build Coastguard Worker
TEST(PRELU_NC_F16,weights_cache_unit_batch)134*4bdc9457SAndroid Build Coastguard Worker TEST(PRELU_NC_F16, weights_cache_unit_batch) {
135*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
136*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < xnn_params.f16.prelu.channel_tile * 10; channels += std::max<size_t>(1, xnn_params.f16.prelu.channel_tile - 1)) {
137*4bdc9457SAndroid Build Coastguard Worker PReLUOperatorTester()
138*4bdc9457SAndroid Build Coastguard Worker .batch_size(1)
139*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
140*4bdc9457SAndroid Build Coastguard Worker .use_weights_cache(true)
141*4bdc9457SAndroid Build Coastguard Worker .iterations(3)
142*4bdc9457SAndroid Build Coastguard Worker .TestF16();
143*4bdc9457SAndroid Build Coastguard Worker }
144*4bdc9457SAndroid Build Coastguard Worker }
145*4bdc9457SAndroid Build Coastguard Worker
TEST(PRELU_NC_F16,weights_cache_fp32_weights)146*4bdc9457SAndroid Build Coastguard Worker TEST(PRELU_NC_F16, weights_cache_fp32_weights) {
147*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
148*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < xnn_params.f16.prelu.channel_tile * 10; channels += std::max<size_t>(1, xnn_params.f16.prelu.channel_tile - 1)) {
149*4bdc9457SAndroid Build Coastguard Worker PReLUOperatorTester()
150*4bdc9457SAndroid Build Coastguard Worker .batch_size(3 * xnn_params.f16.prelu.row_tile + 1)
151*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
152*4bdc9457SAndroid Build Coastguard Worker .x_stride(345)
153*4bdc9457SAndroid Build Coastguard Worker .y_stride(347)
154*4bdc9457SAndroid Build Coastguard Worker .weights_type(PReLUOperatorTester::WeightsType::FP32)
155*4bdc9457SAndroid Build Coastguard Worker .use_weights_cache(true)
156*4bdc9457SAndroid Build Coastguard Worker .iterations(1)
157*4bdc9457SAndroid Build Coastguard Worker .TestF16();
158*4bdc9457SAndroid Build Coastguard Worker }
159*4bdc9457SAndroid Build Coastguard Worker }
160*4bdc9457SAndroid Build Coastguard Worker
TEST(PRELU_NC_F32,unit_batch)161*4bdc9457SAndroid Build Coastguard Worker TEST(PRELU_NC_F32, unit_batch) {
162*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
163*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < xnn_params.f32.prelu.channel_tile * 10; channels += std::max<size_t>(1, xnn_params.f32.prelu.channel_tile - 1)) {
164*4bdc9457SAndroid Build Coastguard Worker PReLUOperatorTester()
165*4bdc9457SAndroid Build Coastguard Worker .batch_size(1)
166*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
167*4bdc9457SAndroid Build Coastguard Worker .iterations(3)
168*4bdc9457SAndroid Build Coastguard Worker .TestF32();
169*4bdc9457SAndroid Build Coastguard Worker }
170*4bdc9457SAndroid Build Coastguard Worker }
171*4bdc9457SAndroid Build Coastguard Worker
TEST(PRELU_NC_F32,small_batch)172*4bdc9457SAndroid Build Coastguard Worker TEST(PRELU_NC_F32, small_batch) {
173*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
174*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < xnn_params.f32.prelu.channel_tile * 10; channels += std::max<size_t>(1, xnn_params.f32.prelu.channel_tile - 1)) {
175*4bdc9457SAndroid Build Coastguard Worker PReLUOperatorTester()
176*4bdc9457SAndroid Build Coastguard Worker .batch_size(xnn_params.f32.prelu.row_tile)
177*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
178*4bdc9457SAndroid Build Coastguard Worker .iterations(3)
179*4bdc9457SAndroid Build Coastguard Worker .TestF32();
180*4bdc9457SAndroid Build Coastguard Worker }
181*4bdc9457SAndroid Build Coastguard Worker }
182*4bdc9457SAndroid Build Coastguard Worker
TEST(PRELU_NC_F32,small_batch_with_x_stride)183*4bdc9457SAndroid Build Coastguard Worker TEST(PRELU_NC_F32, small_batch_with_x_stride) {
184*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
185*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < xnn_params.f32.prelu.channel_tile * 10; channels += std::max<size_t>(1, xnn_params.f32.prelu.channel_tile - 1)) {
186*4bdc9457SAndroid Build Coastguard Worker PReLUOperatorTester()
187*4bdc9457SAndroid Build Coastguard Worker .batch_size(xnn_params.f32.prelu.row_tile)
188*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
189*4bdc9457SAndroid Build Coastguard Worker .x_stride(337)
190*4bdc9457SAndroid Build Coastguard Worker .iterations(3)
191*4bdc9457SAndroid Build Coastguard Worker .TestF32();
192*4bdc9457SAndroid Build Coastguard Worker }
193*4bdc9457SAndroid Build Coastguard Worker }
194*4bdc9457SAndroid Build Coastguard Worker
TEST(PRELU_NC_F32,small_batch_with_y_stride)195*4bdc9457SAndroid Build Coastguard Worker TEST(PRELU_NC_F32, small_batch_with_y_stride) {
196*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
197*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < xnn_params.f32.prelu.channel_tile * 10; channels += std::max<size_t>(1, xnn_params.f32.prelu.channel_tile - 1)) {
198*4bdc9457SAndroid Build Coastguard Worker PReLUOperatorTester()
199*4bdc9457SAndroid Build Coastguard Worker .batch_size(xnn_params.f32.prelu.row_tile)
200*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
201*4bdc9457SAndroid Build Coastguard Worker .y_stride(347)
202*4bdc9457SAndroid Build Coastguard Worker .iterations(3)
203*4bdc9457SAndroid Build Coastguard Worker .TestF32();
204*4bdc9457SAndroid Build Coastguard Worker }
205*4bdc9457SAndroid Build Coastguard Worker }
206*4bdc9457SAndroid Build Coastguard Worker
TEST(PRELU_NC_F32,small_batch_with_x_stride_and_y_stride)207*4bdc9457SAndroid Build Coastguard Worker TEST(PRELU_NC_F32, small_batch_with_x_stride_and_y_stride) {
208*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
209*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < xnn_params.f32.prelu.channel_tile * 10; channels += std::max<size_t>(1, xnn_params.f32.prelu.channel_tile - 1)) {
210*4bdc9457SAndroid Build Coastguard Worker PReLUOperatorTester()
211*4bdc9457SAndroid Build Coastguard Worker .batch_size(xnn_params.f32.prelu.row_tile)
212*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
213*4bdc9457SAndroid Build Coastguard Worker .x_stride(337)
214*4bdc9457SAndroid Build Coastguard Worker .y_stride(347)
215*4bdc9457SAndroid Build Coastguard Worker .iterations(3)
216*4bdc9457SAndroid Build Coastguard Worker .TestF32();
217*4bdc9457SAndroid Build Coastguard Worker }
218*4bdc9457SAndroid Build Coastguard Worker }
219*4bdc9457SAndroid Build Coastguard Worker
TEST(PRELU_NC_F32,large_batch)220*4bdc9457SAndroid Build Coastguard Worker TEST(PRELU_NC_F32, large_batch) {
221*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
222*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < xnn_params.f32.prelu.channel_tile * 10; channels += std::max<size_t>(1, xnn_params.f32.prelu.channel_tile - 1)) {
223*4bdc9457SAndroid Build Coastguard Worker PReLUOperatorTester()
224*4bdc9457SAndroid Build Coastguard Worker .batch_size(3 * xnn_params.f32.prelu.row_tile + 1)
225*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
226*4bdc9457SAndroid Build Coastguard Worker .iterations(1)
227*4bdc9457SAndroid Build Coastguard Worker .TestF32();
228*4bdc9457SAndroid Build Coastguard Worker }
229*4bdc9457SAndroid Build Coastguard Worker }
230*4bdc9457SAndroid Build Coastguard Worker
TEST(PRELU_NC_F32,large_batch_with_x_stride)231*4bdc9457SAndroid Build Coastguard Worker TEST(PRELU_NC_F32, large_batch_with_x_stride) {
232*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
233*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < xnn_params.f32.prelu.channel_tile * 10; channels += std::max<size_t>(1, xnn_params.f32.prelu.channel_tile - 1)) {
234*4bdc9457SAndroid Build Coastguard Worker PReLUOperatorTester()
235*4bdc9457SAndroid Build Coastguard Worker .batch_size(3 * xnn_params.f32.prelu.row_tile + 1)
236*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
237*4bdc9457SAndroid Build Coastguard Worker .x_stride(337)
238*4bdc9457SAndroid Build Coastguard Worker .iterations(1)
239*4bdc9457SAndroid Build Coastguard Worker .TestF32();
240*4bdc9457SAndroid Build Coastguard Worker }
241*4bdc9457SAndroid Build Coastguard Worker }
242*4bdc9457SAndroid Build Coastguard Worker
TEST(PRELU_NC_F32,large_batch_with_y_stride)243*4bdc9457SAndroid Build Coastguard Worker TEST(PRELU_NC_F32, large_batch_with_y_stride) {
244*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
245*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < xnn_params.f32.prelu.channel_tile * 10; channels += std::max<size_t>(1, xnn_params.f32.prelu.channel_tile - 1)) {
246*4bdc9457SAndroid Build Coastguard Worker PReLUOperatorTester()
247*4bdc9457SAndroid Build Coastguard Worker .batch_size(3 * xnn_params.f32.prelu.row_tile + 1)
248*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
249*4bdc9457SAndroid Build Coastguard Worker .y_stride(347)
250*4bdc9457SAndroid Build Coastguard Worker .iterations(1)
251*4bdc9457SAndroid Build Coastguard Worker .TestF32();
252*4bdc9457SAndroid Build Coastguard Worker }
253*4bdc9457SAndroid Build Coastguard Worker }
254*4bdc9457SAndroid Build Coastguard Worker
TEST(PRELU_NC_F32,large_batch_with_x_stride_and_y_stride)255*4bdc9457SAndroid Build Coastguard Worker TEST(PRELU_NC_F32, large_batch_with_x_stride_and_y_stride) {
256*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
257*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < xnn_params.f32.prelu.channel_tile * 10; channels += std::max<size_t>(1, xnn_params.f32.prelu.channel_tile - 1)) {
258*4bdc9457SAndroid Build Coastguard Worker PReLUOperatorTester()
259*4bdc9457SAndroid Build Coastguard Worker .batch_size(3 * xnn_params.f32.prelu.row_tile + 1)
260*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
261*4bdc9457SAndroid Build Coastguard Worker .x_stride(337)
262*4bdc9457SAndroid Build Coastguard Worker .y_stride(347)
263*4bdc9457SAndroid Build Coastguard Worker .iterations(1)
264*4bdc9457SAndroid Build Coastguard Worker .TestF32();
265*4bdc9457SAndroid Build Coastguard Worker }
266*4bdc9457SAndroid Build Coastguard Worker }
267*4bdc9457SAndroid Build Coastguard Worker
TEST(PRELU_NC_F32,weights_cache_unit_batch)268*4bdc9457SAndroid Build Coastguard Worker TEST(PRELU_NC_F32, weights_cache_unit_batch) {
269*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
270*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < xnn_params.f32.prelu.channel_tile * 10; channels += std::max<size_t>(1, xnn_params.f32.prelu.channel_tile - 1)) {
271*4bdc9457SAndroid Build Coastguard Worker PReLUOperatorTester()
272*4bdc9457SAndroid Build Coastguard Worker .batch_size(1)
273*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
274*4bdc9457SAndroid Build Coastguard Worker .use_weights_cache(true)
275*4bdc9457SAndroid Build Coastguard Worker .iterations(3)
276*4bdc9457SAndroid Build Coastguard Worker .TestF32();
277*4bdc9457SAndroid Build Coastguard Worker }
278*4bdc9457SAndroid Build Coastguard Worker }
279