load_ops.h 8.2 KB
Newer Older
H
hjchen2 已提交
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
/* Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.

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. */

#pragma once

#ifdef PADDLE_MOBILE_CPU
#define LOAD_CPU_OP(op_type)                                           \
  extern int TouchOpRegistrar_##op_type##_##cpu();                     \
  static int use_op_itself_##op_type##_##cpu __attribute__((unused)) = \
      TouchOpRegistrar_##op_type##_##cpu()
#else
#define LOAD_CPU_OP(op_type)
#endif

26 27 28 29 30 31 32 33 34
#ifdef PADDLE_MOBILE_CL
#define LOAD_GPU_CL_OP(op_type)                                       \
  extern int TouchOpRegistrar_##op_type##_##cl();                     \
  static int use_op_itself_##op_type##_##cl __attribute__((unused)) = \
      TouchOpRegistrar_##op_type##_##cl()
#else
#define LOAD_GPU_CL_OP(op_type)
#endif

H
hjchen2 已提交
35 36 37 38
#ifdef PADDLE_MOBILE_FPGA
#define LOAD_FPGA_OP(op_type)                                           \
  extern int TouchOpRegistrar_##op_type##_##fpga();                     \
  static int use_op_itself_##op_type##_##fpga __attribute__((unused)) = \
H
hjchen2 已提交
39
      TouchOpRegistrar_##op_type##_##fpga()
H
hjchen2 已提交
40 41 42 43 44 45 46 47 48
#else
#define LOAD_FPGA_OP(op_type)
#endif

#define LOAD_FUSION_MATCHER(op_type)                                       \
  extern int TouchFusionMatcherRegistrar_##op_type();                      \
  static int use_fusion_matcher_itself_##op_type __attribute__((unused)) = \
      TouchFusionMatcherRegistrar_##op_type();

49 50 51
#define LOAD_OP(op_type)   \
  LOAD_CPU_OP(op_type);    \
  LOAD_GPU_CL_OP(op_type); \
H
hjchen2 已提交
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
  LOAD_FPGA_OP(op_type);

#define LOAD_OP1(op_type, device_type) LOAD_##device_type##_OP(op_type);

#define LOAD_OP2(op_type, device_type1, device_type2) \
  LOAD_OP1(op_type, device_type1)                     \
  LOAD_OP1(op_type, device_type2)

#define LOAD_OP3(op_type, device_type1, device_type2, device_type3) \
  LOAD_OP2(op_type, device_type1, device_type2)                     \
  LOAD_OP1(op_type, device_type3)

// load requared ops
LOAD_OP(feed)
LOAD_OP(fetch)
L
lijiancheng0614 已提交
67
#ifdef FILL_CONSTANT_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
68
LOAD_OP2(fill_constant, CPU, FPGA)
L
lijiancheng0614 已提交
69
#endif
H
hjchen2 已提交
70
#ifdef BATCHNORM_OP
71
LOAD_OP2(batch_norm, CPU, GPU_CL);
H
hjchen2 已提交
72 73
#endif
#ifdef BILINEAR_INTERP_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
74
LOAD_OP1(bilinear_interp, CPU);
H
hjchen2 已提交
75 76
#endif
#ifdef BOXCODER_OP
77
LOAD_OP2(box_coder, CPU, GPU_CL);
H
hjchen2 已提交
78 79
#endif
#ifdef CONCAT_OP
80
LOAD_OP3(concat, CPU, GPU_CL, FPGA);
H
hjchen2 已提交
81 82
#endif
#ifdef CONV_OP
83
LOAD_OP3(conv2d, CPU, GPU_CL, FPGA);
H
hjchen2 已提交
84 85
#endif
#ifdef LRN_OP
86
LOAD_OP2(lrn, CPU, GPU_CL);
H
hjchen2 已提交
87 88
#endif
#ifdef SIGMOID_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
89
LOAD_OP1(sigmoid, CPU);
H
hjchen2 已提交
90 91
#endif
#ifdef FUSION_FC_RELU_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
92
LOAD_OP2(fusion_fc_relu, CPU, FPGA);
93
LOAD_FUSION_MATCHER(fusion_fc_relu);
H
hjchen2 已提交
94 95
#endif
#ifdef FUSION_ELEMENTWISEADDRELU_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
96
LOAD_OP2(fusion_elementwise_add_relu, CPU, FPGA);
97
LOAD_FUSION_MATCHER(fusion_elementwise_add_relu);
H
hjchen2 已提交
98 99
#endif
#ifdef SPLIT_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
100
LOAD_OP1(split, CPU);
H
hjchen2 已提交
101 102
#endif
#ifdef RESIZE_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
103
LOAD_OP1(resize, CPU);
H
hjchen2 已提交
104 105
#endif
#ifdef FUSION_CONVADDBNRELU_OP
106
LOAD_OP3(fusion_conv_add_bn_relu, CPU, GPU_CL, FPGA);
107
LOAD_FUSION_MATCHER(fusion_conv_add_bn_relu);
H
hjchen2 已提交
108 109
#endif
#ifdef RESHAPE_OP
110
LOAD_OP2(reshape, CPU, GPU_CL);
H
hjchen2 已提交
111
#endif
L
lijiancheng0614 已提交
112
#ifdef RESHAPE2_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
113
LOAD_OP1(reshape2, CPU);
L
lijiancheng0614 已提交
114
#endif
H
hjchen2 已提交
115
#ifdef TRANSPOSE_OP
116
LOAD_OP2(transpose, CPU, GPU_CL);
H
hjchen2 已提交
117
#endif
L
lijiancheng0614 已提交
118
#ifdef TRANSPOSE2_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
119
LOAD_OP1(transpose2, CPU);
L
lijiancheng0614 已提交
120
#endif
H
hjchen2 已提交
121
#ifdef PRIORBOX_OP
122
LOAD_OP2(prior_box, CPU, GPU_CL);
H
hjchen2 已提交
123 124
#endif
#ifdef FUSION_CONVADDRELU_OP
125
LOAD_OP3(fusion_conv_add_relu, CPU, GPU_CL, FPGA);
126
LOAD_FUSION_MATCHER(fusion_conv_add_relu);
H
hjchen2 已提交
127 128
#endif
#ifdef FUSION_CONVADD_OP
129
LOAD_OP2(fusion_conv_add, CPU, GPU_CL);
130
LOAD_FUSION_MATCHER(fusion_conv_add);
H
hjchen2 已提交
131 132
#endif
#ifdef SOFTMAX_OP
133
LOAD_OP2(softmax, CPU, GPU_CL);
H
hjchen2 已提交
134 135
#endif
#ifdef SHAPE_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
136
LOAD_OP1(shape, CPU);
H
hjchen2 已提交
137 138
#endif
#ifdef DEPTHWISECONV_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
139
LOAD_OP1(depthwise_conv2d, CPU);
H
hjchen2 已提交
140 141
#endif
#ifdef CONV_TRANSPOSE_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
142
LOAD_OP1(conv2d_transpose, CPU);
H
hjchen2 已提交
143 144
#endif
#ifdef SCALE_OP
J
Jiaying Zhao 已提交
145
LOAD_OP2(scale, CPU, GPU_CL);
H
hjchen2 已提交
146 147
#endif
#ifdef ELEMENTWISEADD_OP
148
LOAD_OP2(elementwise_add, CPU, GPU_CL);
H
hjchen2 已提交
149 150
#endif
#ifdef PRELU_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
151
LOAD_OP1(prelu, CPU);
H
hjchen2 已提交
152 153
#endif
#ifdef FLATTEN_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
154
LOAD_OP1(flatten, CPU);
155
LOAD_OP1(flatten2, CPU);
H
hjchen2 已提交
156 157
#endif
#ifdef FUSION_CONVBNADDRELU_OP
158
LOAD_OP3(fusion_conv_bn_add_relu, CPU, GPU_CL, FPGA);
159
LOAD_FUSION_MATCHER(fusion_conv_bn_add_relu);
H
hjchen2 已提交
160 161
#endif
#ifdef FUSION_CONVBNRELU_OP
162
LOAD_OP3(fusion_conv_bn_relu, CPU, GPU_CL, FPGA);
163
LOAD_FUSION_MATCHER(fusion_conv_bn_relu);
H
hjchen2 已提交
164 165
#endif
#ifdef GRU_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
166
LOAD_OP1(gru, CPU);
H
hjchen2 已提交
167
#endif
Z
zhaojiaying01 已提交
168
#ifdef GRU_UNIT_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
169
LOAD_OP1(gru_unit, CPU);
Z
zhaojiaying01 已提交
170
#endif
H
hjchen2 已提交
171
#ifdef FUSION_CONVADDBN_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
172
LOAD_OP2(fusion_conv_add_bn, CPU, FPGA);
173
LOAD_FUSION_MATCHER(fusion_conv_add_bn);
H
hjchen2 已提交
174 175
#endif
#ifdef DROPOUT_OP
176
LOAD_OP3(dropout, CPU, GPU_CL, FPGA);
H
hjchen2 已提交
177 178
#endif
#ifdef FUSION_DWCONVBNRELU_OP
179
LOAD_OP2(fusion_dwconv_bn_relu, CPU, GPU_CL);
180
LOAD_FUSION_MATCHER(fusion_dwconv_bn_relu);
H
hjchen2 已提交
181 182
#endif
#ifdef CRF_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
183
LOAD_OP1(crf_decoding, CPU);
H
hjchen2 已提交
184 185
#endif
#ifdef MUL_OP
186
LOAD_OP2(mul, CPU, GPU_CL);
H
hjchen2 已提交
187
#endif
Z
zhaojiaying01 已提交
188
#ifdef NORM_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
189
LOAD_OP1(norm, CPU);
Z
zhaojiaying01 已提交
190
#endif
H
hjchen2 已提交
191
#ifdef RELU_OP
192
LOAD_OP2(relu, CPU, GPU_CL);
xiebaiyuan's avatar
xiebaiyuan 已提交
193
LOAD_OP1(relu6, CPU);
H
hjchen2 已提交
194 195
#endif
#ifdef IM2SEQUENCE_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
196
LOAD_OP1(im2sequence, CPU);
H
hjchen2 已提交
197 198
#endif
#ifdef LOOKUP_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
199
LOAD_OP1(lookup_table, CPU);
H
hjchen2 已提交
200 201
#endif
#ifdef FUSION_FC_OP
202
LOAD_OP3(fusion_fc, CPU, GPU_CL, FPGA);
203
LOAD_FUSION_MATCHER(fusion_fc);
H
hjchen2 已提交
204 205
#endif
#ifdef POOL_OP
206
LOAD_OP3(pool2d, CPU, GPU_CL, FPGA);
H
hjchen2 已提交
207 208
#endif
#ifdef MULTICLASSNMS_OP
209
LOAD_OP2(multiclass_nms, CPU, GPU_CL);
H
hjchen2 已提交
210
#endif
L
lijiancheng0614 已提交
211
#ifdef POLYGONBOXTRANSFORM_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
212
LOAD_OP1(polygon_box_transform, CPU);
L
lijiancheng0614 已提交
213
#endif
E
eclipsess 已提交
214
#ifdef SUM_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
215
LOAD_OP1(sum, CPU);
E
eclipsess 已提交
216 217
#endif
#ifdef ELEMENTWISEMUL_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
218
LOAD_OP1(elementwise_mul, CPU);
E
eclipsess 已提交
219
#endif
H
hjchen2 已提交
220
#ifdef SLICE_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
221
LOAD_OP1(slice, CPU);
H
hjchen2 已提交
222 223
#endif
#ifdef FUSION_CONVBN_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
224
LOAD_OP2(fusion_conv_bn, CPU, FPGA);
225
LOAD_FUSION_MATCHER(fusion_conv_bn);
H
hjchen2 已提交
226
#endif
227
#ifdef ELEMENTWISESUB_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
228
LOAD_OP1(elementwise_sub, CPU)
229
#endif
H
hjchen2 已提交
230
#ifdef TOP_K_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
231
LOAD_OP1(top_k, CPU)
H
hjchen2 已提交
232 233
#endif
#ifdef CAST_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
234
LOAD_OP1(cast, CPU)
H
hjchen2 已提交
235
#endif
H
hjchen2 已提交
236
#ifdef QUANT_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
237
LOAD_OP1(quantize, CPU);
H
hjchen2 已提交
238 239
#endif
#ifdef DEQUANT_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
240
LOAD_OP1(dequantize, CPU);
H
hjchen2 已提交
241
#endif
242
#ifdef FUSION_DEQUANT_BN_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
243
LOAD_OP1(fusion_dequant_bn, CPU);
244 245
LOAD_FUSION_MATCHER(fusion_dequant_bn);
#endif
246
#ifdef FUSION_DEQUANT_ADD_BN_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
247
LOAD_OP1(fusion_dequant_add_bn, CPU);
248 249 250
LOAD_FUSION_MATCHER(fusion_dequant_add_bn);
#endif
#ifdef FUSION_DEQUANT_BN_RELU_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
251
LOAD_OP1(fusion_dequant_bn_relu, CPU);
252 253
LOAD_FUSION_MATCHER(fusion_dequant_bn_relu);
#endif
H
hjchen2 已提交
254
#ifdef FUSION_DEQUANT_ADD_BN_RELU_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
255
LOAD_OP1(fusion_dequant_add_bn_relu, CPU);
H
hjchen2 已提交
256 257
LOAD_FUSION_MATCHER(fusion_dequant_add_bn_relu);
#endif
258
#ifdef FUSION_DEQUANT_ADD_BN_QUANT_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
259
LOAD_OP1(fusion_dequant_add_bn_quant, CPU);
260 261 262
LOAD_FUSION_MATCHER(fusion_dequant_add_bn_quant);
#endif
#ifdef FUSION_DEQUANT_ADD_BN_RELU_QUANT_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
263
LOAD_OP1(fusion_dequant_add_bn_relu_quant, CPU);
264 265
LOAD_FUSION_MATCHER(fusion_dequant_add_bn_relu_quant);
#endif
266
#ifdef SEQUENCE_EXPAND_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
267
LOAD_OP1(sequence_expand, CPU);
268 269
#endif
#ifdef SEQUENCE_POOL_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
270
LOAD_OP1(sequence_pool, CPU);
271
#endif
272 273 274
#ifdef SEQUENCE_SOFTMAX_OP
LOAD_OP1(sequence_softmax, CPU);
#endif
275
#ifdef LOG_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
276
LOAD_OP1(log, CPU);
277
#endif
278
#ifdef LOD_RESET_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
279
LOAD_OP1(lod_reset, CPU);
280 281
#endif
#ifdef LESS_THAN_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
282
LOAD_OP1(less_than, CPU);
283
#endif
Z
zhaojiaying01 已提交
284
#ifdef LOGICAL_AND_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
285
LOAD_OP1(logical_and, CPU);
Z
zhaojiaying01 已提交
286 287
#endif
#ifdef LOGICAL_OR_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
288
LOAD_OP1(logical_or, CPU);
Z
zhaojiaying01 已提交
289 290
#endif
#ifdef LOGICAL_NOT_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
291
LOAD_OP1(logical_not, CPU);
Z
zhaojiaying01 已提交
292 293
#endif
#ifdef LOGICAL_XOR_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
294
LOAD_OP1(logical_xor, CPU);
Z
zhaojiaying01 已提交
295
#endif
296
#ifdef WHILE_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
297
LOAD_OP1(while, CPU);
298 299
#endif
#ifdef WRITE_TO_ARRAY_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
300
LOAD_OP1(write_to_array, CPU);
301 302
#endif
#ifdef READ_FROM_ARRAY_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
303
LOAD_OP1(read_from_array, CPU);
304
#endif
Z
zhaojiaying01 已提交
305
#ifdef IS_EMPTY_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
306
LOAD_OP1(is_empty, CPU);
Z
zhaojiaying01 已提交
307 308
#endif
#ifdef INCREMENT_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
309
LOAD_OP1(increment, CPU);
Z
zhaojiaying01 已提交
310
#endif
311
#ifdef ANCHOR_GENERATOR_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
312
LOAD_OP1(anchor_generator, CPU);
313 314
#endif
#ifdef PROPOSAL_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
315
LOAD_OP1(generate_proposals, CPU);
316 317
#endif
#ifdef PSROI_POOL_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
318
LOAD_OP1(psroi_pool, CPU);
319
#endif
H
hjchen2 已提交
320
#ifdef ROI_PERSPECTIVE_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
321
LOAD_OP1(roi_perspective_transform, CPU);
H
hjchen2 已提交
322
#endif
323
#ifdef BEAM_SEARCH_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
324
LOAD_OP1(beam_search, CPU);
325
#endif
H
update  
hjchen2 已提交
326
#ifdef BEAM_SEARCH_DECODE_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
327
LOAD_OP1(beam_search_decode, CPU);
H
update  
hjchen2 已提交
328
#endif
H
hjchen2 已提交
329
#ifdef PAD2D_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
330
LOAD_OP1(pad2d, CPU);
H
hjchen2 已提交
331
#endif
332
#ifdef ONE_HOT_OP
xiebaiyuan's avatar
xiebaiyuan 已提交
333
LOAD_OP1(one_hot, CPU);
334
#endif
335 336 337
#ifdef ASSIGN_VALUE_OP
LOAD_OP1(assign_value, CPU);
#endif