blob: 53cb167a8bde61db178b60d57438607704733882 [file] [log] [blame]
XNNPACK Teamb455b122019-09-27 18:10:33 -07001// Copyright (c) Facebook, Inc. and its affiliates.
2// All rights reserved.
3//
4// Copyright 2019 Google LLC
5//
6// This source code is licensed under the BSD-style license found in the
7// LICENSE file in the root directory of this source tree.
8
9#include <gtest/gtest.h>
10
Marat Dukhanfd8e6892020-01-27 15:25:25 -080011#include "softmax-operator-tester.h"
XNNPACK Teamb455b122019-09-27 18:10:33 -070012
XNNPACK Teamb455b122019-09-27 18:10:33 -070013
Marat Dukhan08b7a972020-07-14 18:17:29 -070014TEST(SOFTMAX_NC_QU8, single_class) {
Marat Dukhanfd8e6892020-01-27 15:25:25 -080015 SoftMaxOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -070016 .batch_size(1)
17 .channels(1)
18 .iterations(100)
Marat Dukhan08b7a972020-07-14 18:17:29 -070019 .TestQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -070020}
21
Marat Dukhan08b7a972020-07-14 18:17:29 -070022TEST(SOFTMAX_NC_QU8, two_classes) {
Marat Dukhanfd8e6892020-01-27 15:25:25 -080023 SoftMaxOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -070024 .batch_size(1)
25 .channels(2)
26 .iterations(100)
Marat Dukhan08b7a972020-07-14 18:17:29 -070027 .TestQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -070028}
29
Marat Dukhan08b7a972020-07-14 18:17:29 -070030TEST(SOFTMAX_NC_QU8, many_classes) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070031 for (size_t channels = 3; channels < 100; channels++) {
Marat Dukhanfd8e6892020-01-27 15:25:25 -080032 SoftMaxOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -070033 .batch_size(1)
34 .channels(channels)
35 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -070036 .TestQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -070037 }
38}
39
Marat Dukhan08b7a972020-07-14 18:17:29 -070040TEST(SOFTMAX_NC_QU8, cifar_classes) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070041 // CIFAR-10
Marat Dukhanfd8e6892020-01-27 15:25:25 -080042 SoftMaxOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -070043 .batch_size(1)
44 .channels(10)
45 .iterations(15)
Marat Dukhan08b7a972020-07-14 18:17:29 -070046 .TestQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -070047 // CIFAR-100
Marat Dukhanfd8e6892020-01-27 15:25:25 -080048 SoftMaxOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -070049 .batch_size(1)
50 .channels(100)
51 .iterations(15)
Marat Dukhan08b7a972020-07-14 18:17:29 -070052 .TestQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -070053}
54
Marat Dukhan08b7a972020-07-14 18:17:29 -070055TEST(SOFTMAX_NC_QU8, imagenet_classes) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070056 // ImageNet-1K
Marat Dukhanfd8e6892020-01-27 15:25:25 -080057 SoftMaxOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -070058 .batch_size(1)
59 .channels(1000)
60 .iterations(10)
Marat Dukhan08b7a972020-07-14 18:17:29 -070061 .TestQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -070062 // ImageNet-1K+1
Marat Dukhanfd8e6892020-01-27 15:25:25 -080063 SoftMaxOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -070064 .batch_size(1)
65 .channels(1001)
66 .iterations(10)
Marat Dukhan08b7a972020-07-14 18:17:29 -070067 .TestQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -070068 // ImageNet-22K
Marat Dukhanfd8e6892020-01-27 15:25:25 -080069 SoftMaxOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -070070 .batch_size(1)
71 .channels(21841)
72 .iterations(10)
Marat Dukhan08b7a972020-07-14 18:17:29 -070073 .TestQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -070074}
75
Marat Dukhan08b7a972020-07-14 18:17:29 -070076TEST(SOFTMAX_NC_QU8, many_channels_with_input_scale) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070077 for (size_t channels = 1; channels < 100; channels += 5) {
78 for (float input_scale = 1.0e-2f; input_scale < 1.0e+2f; input_scale *= 3.14159265f) {
Marat Dukhanfd8e6892020-01-27 15:25:25 -080079 SoftMaxOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -070080 .batch_size(1)
81 .channels(channels)
82 .input_scale(input_scale)
83 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -070084 .TestQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -070085 }
86 }
87}
88
Marat Dukhan08b7a972020-07-14 18:17:29 -070089TEST(SOFTMAX_NC_QU8, many_channels_with_input_zero_point) {
XNNPACK Teamb455b122019-09-27 18:10:33 -070090 for (size_t channels = 1; channels < 100; channels += 5) {
91 for (int32_t input_zero_point = 0; input_zero_point <= 255; input_zero_point += 51) {
Marat Dukhanfd8e6892020-01-27 15:25:25 -080092 SoftMaxOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -070093 .batch_size(1)
94 .channels(channels)
95 .input_zero_point(uint8_t(input_zero_point))
96 .iterations(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -070097 .TestQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -070098 }
99 }
100}
101
Marat Dukhan08b7a972020-07-14 18:17:29 -0700102TEST(SOFTMAX_NC_QU8, small_batch) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700103 for (size_t channels = 1; channels < 100; channels += 5) {
Marat Dukhanfd8e6892020-01-27 15:25:25 -0800104 SoftMaxOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700105 .batch_size(3)
106 .channels(channels)
107 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700108 .TestQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700109 }
110}
111
Marat Dukhan08b7a972020-07-14 18:17:29 -0700112TEST(SOFTMAX_NC_QU8, small_batch_with_input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700113 for (size_t channels = 1; channels < 100; channels += 5) {
Marat Dukhanfd8e6892020-01-27 15:25:25 -0800114 SoftMaxOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700115 .batch_size(3)
116 .channels(channels)
117 .input_stride(129)
118 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700119 .TestQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700120 }
121}
122
Marat Dukhan08b7a972020-07-14 18:17:29 -0700123TEST(SOFTMAX_NC_QU8, small_batch_with_output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700124 for (size_t channels = 1; channels < 100; channels += 5) {
Marat Dukhanfd8e6892020-01-27 15:25:25 -0800125 SoftMaxOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700126 .batch_size(3)
127 .channels(channels)
128 .output_stride(117)
129 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700130 .TestQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700131 }
132}
133
Marat Dukhan08b7a972020-07-14 18:17:29 -0700134TEST(SOFTMAX_NC_QU8, strided_batch_with_input_and_output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -0700135 for (size_t channels = 1; channels < 100; channels += 5) {
Marat Dukhanfd8e6892020-01-27 15:25:25 -0800136 SoftMaxOperatorTester()
XNNPACK Teamb455b122019-09-27 18:10:33 -0700137 .batch_size(3)
138 .channels(channels)
139 .input_stride(129)
140 .output_stride(117)
141 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -0700142 .TestQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -0700143 }
144}
Marat Dukhan1edc4542020-01-27 12:40:13 -0800145
Marat Dukhanfd8e6892020-01-27 15:25:25 -0800146TEST(SOFTMAX_NC_F32, single_class) {
147 SoftMaxOperatorTester()
Marat Dukhan1edc4542020-01-27 12:40:13 -0800148 .batch_size(1)
149 .channels(1)
150 .iterations(100)
151 .TestF32();
152}
153
Marat Dukhanfd8e6892020-01-27 15:25:25 -0800154TEST(SOFTMAX_NC_F32, two_classes) {
155 SoftMaxOperatorTester()
Marat Dukhan1edc4542020-01-27 12:40:13 -0800156 .batch_size(1)
157 .channels(2)
158 .iterations(100)
159 .TestF32();
160}
161
Marat Dukhanfd8e6892020-01-27 15:25:25 -0800162TEST(SOFTMAX_NC_F32, many_classes) {
Marat Dukhan1edc4542020-01-27 12:40:13 -0800163 for (size_t channels = 3; channels < 100; channels++) {
Marat Dukhanfd8e6892020-01-27 15:25:25 -0800164 SoftMaxOperatorTester()
Marat Dukhan1edc4542020-01-27 12:40:13 -0800165 .batch_size(1)
166 .channels(channels)
167 .iterations(1)
168 .TestF32();
169 }
170}
171
Marat Dukhanfd8e6892020-01-27 15:25:25 -0800172TEST(SOFTMAX_NC_F32, cifar_classes) {
Marat Dukhan1edc4542020-01-27 12:40:13 -0800173 // CIFAR-10
Marat Dukhanfd8e6892020-01-27 15:25:25 -0800174 SoftMaxOperatorTester()
Marat Dukhan1edc4542020-01-27 12:40:13 -0800175 .batch_size(1)
176 .channels(10)
177 .iterations(15)
178 .TestF32();
179 // CIFAR-100
Marat Dukhanfd8e6892020-01-27 15:25:25 -0800180 SoftMaxOperatorTester()
Marat Dukhan1edc4542020-01-27 12:40:13 -0800181 .batch_size(1)
182 .channels(100)
183 .iterations(15)
184 .TestF32();
185}
186
Marat Dukhanfd8e6892020-01-27 15:25:25 -0800187TEST(SOFTMAX_NC_F32, imagenet_classes) {
Marat Dukhan1edc4542020-01-27 12:40:13 -0800188 // ImageNet-1K
Marat Dukhanfd8e6892020-01-27 15:25:25 -0800189 SoftMaxOperatorTester()
Marat Dukhan1edc4542020-01-27 12:40:13 -0800190 .batch_size(1)
191 .channels(1000)
192 .iterations(10)
193 .TestF32();
194 // ImageNet-1K+1
Marat Dukhanfd8e6892020-01-27 15:25:25 -0800195 SoftMaxOperatorTester()
Marat Dukhan1edc4542020-01-27 12:40:13 -0800196 .batch_size(1)
197 .channels(1001)
198 .iterations(10)
199 .TestF32();
200 // ImageNet-22K
Marat Dukhanfd8e6892020-01-27 15:25:25 -0800201 SoftMaxOperatorTester()
Marat Dukhan1edc4542020-01-27 12:40:13 -0800202 .batch_size(1)
203 .channels(21841)
204 .iterations(10)
205 .TestF32();
206}
207
Marat Dukhanfd8e6892020-01-27 15:25:25 -0800208TEST(SOFTMAX_NC_F32, small_batch) {
Marat Dukhan1edc4542020-01-27 12:40:13 -0800209 for (size_t channels = 1; channels < 100; channels += 5) {
Marat Dukhanfd8e6892020-01-27 15:25:25 -0800210 SoftMaxOperatorTester()
Marat Dukhan1edc4542020-01-27 12:40:13 -0800211 .batch_size(3)
212 .channels(channels)
213 .iterations(3)
214 .TestF32();
215 }
216}
217
Marat Dukhanfd8e6892020-01-27 15:25:25 -0800218TEST(SOFTMAX_NC_F32, small_batch_with_input_stride) {
Marat Dukhan1edc4542020-01-27 12:40:13 -0800219 for (size_t channels = 1; channels < 100; channels += 5) {
Marat Dukhanfd8e6892020-01-27 15:25:25 -0800220 SoftMaxOperatorTester()
Marat Dukhan1edc4542020-01-27 12:40:13 -0800221 .batch_size(3)
222 .channels(channels)
223 .input_stride(129)
224 .iterations(3)
225 .TestF32();
226 }
227}
228
Marat Dukhanfd8e6892020-01-27 15:25:25 -0800229TEST(SOFTMAX_NC_F32, small_batch_with_output_stride) {
Marat Dukhan1edc4542020-01-27 12:40:13 -0800230 for (size_t channels = 1; channels < 100; channels += 5) {
Marat Dukhanfd8e6892020-01-27 15:25:25 -0800231 SoftMaxOperatorTester()
Marat Dukhan1edc4542020-01-27 12:40:13 -0800232 .batch_size(3)
233 .channels(channels)
234 .output_stride(117)
235 .iterations(3)
236 .TestF32();
237 }
238}
239
Marat Dukhanfd8e6892020-01-27 15:25:25 -0800240TEST(SOFTMAX_NC_F32, strided_batch_with_input_and_output_stride) {
Marat Dukhan1edc4542020-01-27 12:40:13 -0800241 for (size_t channels = 1; channels < 100; channels += 5) {
Marat Dukhanfd8e6892020-01-27 15:25:25 -0800242 SoftMaxOperatorTester()
Marat Dukhan1edc4542020-01-27 12:40:13 -0800243 .batch_size(3)
244 .channels(channels)
245 .input_stride(129)
246 .output_stride(117)
247 .iterations(3)
248 .TestF32();
249 }
250}