load_ops.h 5.7 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 26 27 28 29 30 31 32 33 34 35 36 37 38
/* 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

#ifdef PADDLE_MOBILE_MALI_GPU
#define LOAD_MALI_GPU_OP(op_type)                                           \
  extern int TouchOpRegistrar_##op_type##_##mali_gpu();                     \
  static int use_op_itself_##op_type##_##mali_gpu __attribute__((unused)) = \
      TouchOpRegistrar_##op_type##_##mali_gpu()
#else
#define LOAD_MALI_GPU_OP(op_type)
#endif

#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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
#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();

#define LOAD_OP(op_type)     \
  LOAD_CPU_OP(op_type);      \
  LOAD_MALI_GPU_OP(op_type); \
  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)
#ifdef BATCHNORM_OP
68
LOAD_OP2(batch_norm, CPU, MALI_GPU);
H
hjchen2 已提交
69 70
#endif
#ifdef BILINEAR_INTERP_OP
71
LOAD_OP1(bilinear_interp, CPU);
H
hjchen2 已提交
72 73
#endif
#ifdef BOXCODER_OP
74
LOAD_OP1(box_coder, CPU);
H
hjchen2 已提交
75 76
#endif
#ifdef CONCAT_OP
77
LOAD_OP3(concat, CPU, MALI_GPU, FPGA);
H
hjchen2 已提交
78 79
#endif
#ifdef CONV_OP
80
LOAD_OP3(conv2d, CPU, MALI_GPU, FPGA);
H
hjchen2 已提交
81 82
#endif
#ifdef LRN_OP
83
LOAD_OP2(lrn, CPU, MALI_GPU);
H
hjchen2 已提交
84 85
#endif
#ifdef SIGMOID_OP
86
LOAD_OP1(sigmoid, CPU);
H
hjchen2 已提交
87 88
#endif
#ifdef FUSION_FC_RELU_OP
89 90
LOAD_OP3(fusion_fc_relu, CPU, MALI_GPU, FPGA);
LOAD_FUSION_MATCHER(fusion_fc_relu);
H
hjchen2 已提交
91 92
#endif
#ifdef FUSION_ELEMENTWISEADDRELU_OP
93 94
LOAD_OP3(fusion_elementwise_add_relu, CPU, MALI_GPU, FPGA);
LOAD_FUSION_MATCHER(fusion_elementwise_add_relu);
H
hjchen2 已提交
95 96
#endif
#ifdef SPLIT_OP
97
LOAD_OP1(split, CPU);
H
hjchen2 已提交
98 99
#endif
#ifdef RESIZE_OP
100
LOAD_OP2(resize, CPU, MALI_GPU);
H
hjchen2 已提交
101 102
#endif
#ifdef FUSION_CONVADDBNRELU_OP
103 104
LOAD_OP2(fusion_conv_add_bn_relu, CPU, FPGA);
LOAD_FUSION_MATCHER(fusion_conv_add_bn_relu);
H
hjchen2 已提交
105 106
#endif
#ifdef RESHAPE_OP
107
LOAD_OP2(reshape, CPU, MALI_GPU);
H
hjchen2 已提交
108 109
#endif
#ifdef TRANSPOSE_OP
110
LOAD_OP1(transpose, CPU);
H
hjchen2 已提交
111 112
#endif
#ifdef PRIORBOX_OP
113
LOAD_OP1(prior_box, CPU);
H
hjchen2 已提交
114 115
#endif
#ifdef FUSION_CONVADDRELU_OP
116 117
LOAD_OP2(fusion_conv_add_relu, CPU, FPGA);
LOAD_FUSION_MATCHER(fusion_conv_add_relu);
H
hjchen2 已提交
118 119
#endif
#ifdef FUSION_CONVADDADDPRELU_OP
120 121
LOAD_OP2(fusion_conv_add_add_prelu, CPU, FPGA);
LOAD_FUSION_MATCHER(fusion_conv_add_add_prelu);
H
hjchen2 已提交
122 123
#endif
#ifdef FUSION_CONVADD_OP
124 125
LOAD_OP2(fusion_conv_add, CPU, MALI_GPU);
LOAD_FUSION_MATCHER(fusion_conv_add);
H
hjchen2 已提交
126 127
#endif
#ifdef SOFTMAX_OP
128
LOAD_OP2(softmax, CPU, MALI_GPU);
H
hjchen2 已提交
129 130
#endif
#ifdef SHAPE_OP
131
LOAD_OP1(shape, CPU);
H
hjchen2 已提交
132 133
#endif
#ifdef DEPTHWISECONV_OP
134
LOAD_OP1(depthwise_conv2d, CPU);
H
hjchen2 已提交
135 136
#endif
#ifdef CONV_TRANSPOSE_OP
137
LOAD_OP1(conv2d_transpose, CPU);
H
hjchen2 已提交
138 139
#endif
#ifdef SCALE_OP
140
LOAD_OP2(scale, CPU, MALI_GPU);
H
hjchen2 已提交
141 142
#endif
#ifdef ELEMENTWISEADD_OP
143
LOAD_OP2(elementwise_add, CPU, MALI_GPU);
H
hjchen2 已提交
144 145
#endif
#ifdef PRELU_OP
146
LOAD_OP2(prelu, CPU, MALI_GPU);
H
hjchen2 已提交
147 148
#endif
#ifdef FLATTEN_OP
149
LOAD_OP1(flatten, CPU);
H
hjchen2 已提交
150 151
#endif
#ifdef FUSION_CONVBNADDRELU_OP
152 153
LOAD_OP2(fusion_conv_bn_add_relu, CPU, FPGA);
LOAD_FUSION_MATCHER(fusion_conv_bn_add_relu);
H
hjchen2 已提交
154 155
#endif
#ifdef FUSION_CONVBNRELU_OP
156 157
LOAD_OP2(fusion_conv_bn_relu, CPU, FPGA);
LOAD_FUSION_MATCHER(fusion_conv_bn_relu);
H
hjchen2 已提交
158 159
#endif
#ifdef GRU_OP
160
LOAD_OP1(gru, CPU);
H
hjchen2 已提交
161 162
#endif
#ifdef FUSION_CONVADDBN_OP
163 164
LOAD_OP2(fusion_conv_add_bn, CPU, FPGA);
LOAD_FUSION_MATCHER(fusion_conv_add_bn);
H
hjchen2 已提交
165 166
#endif
#ifdef DROPOUT_OP
167
LOAD_OP2(dropout, CPU, FPGA);
H
hjchen2 已提交
168 169
#endif
#ifdef FUSION_CONVADDPRELU_OP
170 171
LOAD_OP2(fusion_conv_add_prelu, CPU, FPGA);
LOAD_FUSION_MATCHER(fusion_conv_add_prelu);
H
hjchen2 已提交
172 173
#endif
#ifdef FUSION_DWCONVBNRELU_OP
174 175
LOAD_OP1(fusion_dwconv_bn_relu, CPU);
LOAD_FUSION_MATCHER(fusion_dwconv_bn_relu);
H
hjchen2 已提交
176 177
#endif
#ifdef CRF_OP
178
LOAD_OP1(crf_decoding, CPU);
H
hjchen2 已提交
179 180
#endif
#ifdef MUL_OP
181
LOAD_OP2(mul, CPU, MALI_GPU);
H
hjchen2 已提交
182 183
#endif
#ifdef RELU_OP
184
LOAD_OP2(relu, CPU, MALI_GPU);
H
hjchen2 已提交
185 186
#endif
#ifdef IM2SEQUENCE_OP
187
LOAD_OP1(im2sequence, CPU);
H
hjchen2 已提交
188 189
#endif
#ifdef LOOKUP_OP
190
LOAD_OP1(lookup_table, CPU);
H
hjchen2 已提交
191 192
#endif
#ifdef FUSION_FC_OP
193 194
LOAD_OP3(fusion_fc, CPU, MALI_GPU, FPGA);
LOAD_FUSION_MATCHER(fusion_fc);
H
hjchen2 已提交
195 196
#endif
#ifdef POOL_OP
197
LOAD_OP3(pool2d, CPU, MALI_GPU, FPGA);
H
hjchen2 已提交
198 199
#endif
#ifdef MULTICLASSNMS_OP
200
LOAD_OP1(multiclass_nms, CPU);
H
hjchen2 已提交
201 202
#endif
#ifdef SLICE_OP
203
LOAD_OP2(slice, CPU, MALI_GPU);
H
hjchen2 已提交
204 205
#endif
#ifdef FUSION_CONVBN_OP
206 207
LOAD_OP2(fusion_conv_bn, CPU, FPGA);
LOAD_FUSION_MATCHER(fusion_conv_bn);
H
hjchen2 已提交
208
#endif
209 210 211
#ifdef ELEMENTWISESUB_OP
LOAD_OP1(elementwise_sub, CPU)
#endif
212 213
LOAD_OP1(quantize, CPU);
LOAD_OP1(dequantize, CPU);