// Copyright © Advanced Micro Devices, Inc., or its affiliates. // SPDX-License-Identifier: MIT #pragma once #include #include #include #include #include #include #include "HipdnnMiopenHandle.hpp" #include "HipdnnMiopenSettings.hpp" #include "MiopenActivationDescriptor.hpp" #include "MiopenTensor.hpp" namespace miopen_plugin { class BatchnormBwdParams { public: BatchnormBwdParams( const hipdnn_flatbuffers_sdk::data_objects::BatchnormBackwardAttributes& attributes, const std::unordered_map& tensorMap); BatchnormBwdParams( const hipdnn_flatbuffers_sdk::data_objects::BatchnormBackwardAttributes& batchnormBackwardAttributes, const hipdnn_flatbuffers_sdk::data_objects::PointwiseAttributes& pointwiseAttributes, const hipdnn_flatbuffers_sdk::data_objects::BatchnormInferenceAttributes& batchnormInferenceAttributes, const std::unordered_map& tensorMap); BatchnormBwdParams(const BatchnormBwdParams&) = delete; BatchnormBwdParams& operator=(const BatchnormBwdParams&) = delete; BatchnormBwdParams(BatchnormBwdParams&&) = default; BatchnormBwdParams& operator=(BatchnormBwdParams&&) = default; const MiopenTensor& x() const; const MiopenTensor& dy() const; const MiopenTensor& dx() const; const MiopenTensor& scale() const; const MiopenTensor& dscale() const; const MiopenTensor& dbias() const; const std::optional& optMean() const; const std::optional& optInvVariance() const; const std::optional& optActivation() const; const std::optional& optBias() const; private: MiopenTensor _x; MiopenTensor _dy; MiopenTensor _dx; MiopenTensor _scale; MiopenTensor _dscale; MiopenTensor _dbias; std::optional _optMean; std::optional _optInvVariance; std::optional _optActivation; std::optional _optBias; }; class BatchnormBwdPlan : public hipdnn_plugin_sdk::IPlan { public: BatchnormBwdPlan(BatchnormBwdParams&& params, const HipdnnMiopenSettings& executionSettings); BatchnormBwdPlan(const BatchnormBwdPlan&) = delete; BatchnormBwdPlan& operator=(const BatchnormBwdPlan&) = delete; BatchnormBwdPlan(BatchnormBwdPlan&&) = default; BatchnormBwdPlan& operator=(BatchnormBwdPlan&&) = default; size_t getWorkspaceSize(const HipdnnMiopenHandle& handle) const override; void execute(const HipdnnMiopenHandle& handle, const hipdnnPluginDeviceBuffer_t* deviceBuffers, uint32_t numDeviceBuffers, void* workspace = nullptr) const override; private: BatchnormBwdParams _params; HipdnnMiopenSettings _executionSettings; }; } // namespace miopen_plugin