166 lines
7.4 KiB
C++
166 lines
7.4 KiB
C++
/*
|
|
* Copyright (C) 2022 The Android Open Source Project
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
#define LOG_TAG "OperationConverterResolver"
|
|
|
|
#include "OperationConverterResolver.h"
|
|
|
|
#include "OperationsUtils.h"
|
|
|
|
namespace android {
|
|
namespace nn {
|
|
|
|
#define NN_FORWARD_DECLARE_OPERATION_CONVERTER_REGISTRATION_FUNCTION(opType) \
|
|
const IOperationConverter* registerConverter_##opType();
|
|
|
|
NN_FOR_EACH_OPERATION(NN_FORWARD_DECLARE_OPERATION_CONVERTER_REGISTRATION_FUNCTION)
|
|
|
|
#undef NN_FORWARD_DECLARE_OPERATION_CONVERTER_REGISTRATION_FUNCTION
|
|
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(AVERAGE_POOL_2D);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(CONCATENATION);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(DEPTH_TO_SPACE);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(DEQUANTIZE);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(EMBEDDING_LOOKUP);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(FLOOR);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(FULLY_CONNECTED);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(HASHTABLE_LOOKUP);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(L2_NORMALIZATION);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(L2_POOL_2D);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(LOCAL_RESPONSE_NORMALIZATION);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(LSH_PROJECTION);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(LSTM);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(MAX_POOL_2D);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(MUL);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(RELU);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(RELU1);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(RELU6);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(RESHAPE);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(RESIZE_BILINEAR);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(RNN);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(SOFTMAX);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(SPACE_TO_DEPTH);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(SVDF);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(TANH);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(BATCH_TO_SPACE_ND);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(DIV);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(MEAN);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(PAD);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(SPACE_TO_BATCH_ND);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(SQUEEZE);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(STRIDED_SLICE);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(SUB);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(TRANSPOSE);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(ABS);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(ARGMAX);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(ARGMIN);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(AXIS_ALIGNED_BBOX_TRANSFORM);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(BIDIRECTIONAL_SEQUENCE_LSTM);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(BIDIRECTIONAL_SEQUENCE_RNN);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(BOX_WITH_NMS_LIMIT);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(CAST);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(CHANNEL_SHUFFLE);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(DENSIFY);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(DETECTION_POSTPROCESSING);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(EQUAL);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(EXP);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(EXPAND_DIMS);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(GATHER);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(GENERATE_PROPOSALS);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(GREATER);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(GREATER_EQUAL);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(GROUPED_CONV_2D);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(HEATMAP_MAX_KEYPOINT);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(INSTANCE_NORMALIZATION);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(LESS);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(LESS_EQUAL);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(LOG);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(LOGICAL_AND);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(LOGICAL_NOT);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(LOGICAL_OR);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(LOG_SOFTMAX);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(MAXIMUM);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(MINIMUM);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(NEG);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(NOT_EQUAL);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(PAD_V2);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(POW);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(PRELU);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(QUANTIZE);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(QUANTIZED_16BIT_LSTM);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(RANDOM_MULTINOMIAL);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(REDUCE_ALL);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(REDUCE_ANY);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(REDUCE_MAX);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(REDUCE_MIN);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(REDUCE_PROD);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(REDUCE_SUM);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(ROI_ALIGN);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(ROI_POOLING);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(RSQRT);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(SELECT);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(SIN);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(SLICE);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(SPLIT);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(SQRT);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(TILE);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(TOPK_V2);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(TRANSPOSE_CONV_2D);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(UNIDIRECTIONAL_SEQUENCE_LSTM);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(UNIDIRECTIONAL_SEQUENCE_RNN);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(RESIZE_NEAREST_NEIGHBOR);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(QUANTIZED_LSTM);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(IF);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(WHILE);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(ELU);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(HARD_SWISH);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(FILL);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(RANK);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(BATCH_MATMUL);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(PACK);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(MIRROR_PAD);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(REVERSE);
|
|
NN_OPERATION_CONVERTER_NOT_IMPLEMENTED(OEM_OPERATION);
|
|
|
|
OperationConverterResolver::OperationConverterResolver() {
|
|
#define NN_REGISTER_OPERATION_CONVERTER_TO_RESOLVER(operationType) \
|
|
registerOperationConverter(registerConverter_##operationType(), OperationType::operationType);
|
|
NN_FOR_EACH_OPERATION(NN_REGISTER_OPERATION_CONVERTER_TO_RESOLVER)
|
|
#undef NN_REGISTER_OPERATION_CONVERTER_TO_RESOLVER
|
|
}
|
|
|
|
const IOperationConverter* OperationConverterResolver::findOperationConverter(
|
|
OperationType operationType) const {
|
|
int32_t index = static_cast<int32_t>(operationType);
|
|
if (index >= 0 && index < kNumberOfOperationTypes) {
|
|
return mConverters[index];
|
|
}
|
|
return nullptr;
|
|
}
|
|
|
|
void OperationConverterResolver::registerOperationConverter(
|
|
const IOperationConverter* operationConverter, OperationType operationType) {
|
|
if (operationConverter == nullptr) {
|
|
return;
|
|
}
|
|
|
|
int32_t index = static_cast<int32_t>(operationType);
|
|
CHECK(mConverters[index] == nullptr);
|
|
mConverters[index] = operationConverter;
|
|
}
|
|
|
|
} // namespace nn
|
|
} // namespace android
|