Open ysh329 opened 4 years ago
// tensorflow/tensorflow/lite/delegates/gpu/cl/selectors/convolution_selector.cc // https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/delegates/gpu/cl/selectors/convolution_selector.cc#L40 std::unique_ptr<GPUOperation> SelectConvolution( const Convolution2DAttributes& attr, const BHWC& dst_shape, const DeviceInfo& device_info, const OperationDef& op_def, ModelHints hints) { if (device_info.IsAdreno()) { return SelectConvolutionAdreno(attr, dst_shape, device_info, op_def, hints); } else if (device_info.IsPowerVR() || device_info.IsAMD() || device_info.IsIntel()) { return SelectConvolutionPowerVR(attr, device_info, op_def); } else if (device_info.IsNvidia()) { return SelectConvolutionNVidia(attr, dst_shape, device_info, op_def); } else if (device_info.IsMali()) { return SelectConvolutionMali(attr, dst_shape, device_info, op_def); } else { return SelectConvolutionAdreno(attr, dst_shape, device_info, op_def, hints); } } std::unique_ptr<GPUOperation> SelectConvolutionForWinograd( const Convolution2DAttributes& attr, const BHWC& dst_shape, const DeviceInfo& device_info, const OperationDef& op_def, ModelHints hints) { if (device_info.IsAdreno()) { return SelectConvolutionWinogradAdreno(attr, dst_shape, device_info, op_def, hints); } else if (device_info.IsPowerVR() || device_info.IsAMD() || device_info.IsNvidia() || device_info.IsIntel()) { ConvPowerVR conv = CreateConvPowerVRWino4x4To6x6(device_info, op_def, attr, &dst_shape); return absl::make_unique<ConvPowerVR>(std::move(conv)); } else if (device_info.IsMali()) { return SelectConvolutionWinogradMali(attr, dst_shape, device_info, op_def); } else { return SelectConvolutionWinogradAdreno(attr, dst_shape, device_info, op_def, hints); } } std::unique_ptr<GPUOperation> SelectConvolutionWithDynamicWeights( const Convolution2DAttributes& attr, const BHWC& weights_shape, const BHWC& dst_shape, const DeviceInfo& device_info, const OperationDef& op_def, ModelHints hints, ConvWeightsDescription* weights_desc) { if (device_info.IsAdreno()) { return SelectConvolutionDynamicWeightsAdreno(attr, weights_shape, dst_shape, device_info, op_def, hints, weights_desc); } else if (device_info.IsMali()) { return SelectConvolutionDynamicWeightsMali(attr, weights_shape, dst_shape, device_info, op_def, hints, weights_desc); } else { ConvPowerVR conv = CreateConvPowerVRDynamicWeights( device_info, op_def, attr, weights_shape, &dst_shape); *weights_desc = conv.GetConvWeightsDescription(); return absl::make_unique<ConvPowerVR>(std::move(conv)); } }