// 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 "MiopenConvDescriptor.hpp" #include "MiopenTensor.hpp" namespace miopen_plugin { class ConvWrwParams { public: ConvWrwParams( const hipdnn_flatbuffers_sdk::data_objects::ConvolutionWrwAttributes& attributes, const std::unordered_map& tensorMap, bool deterministicEnabled = false); ConvWrwParams(const ConvWrwParams&) = delete; ConvWrwParams& operator=(const ConvWrwParams&) = delete; ConvWrwParams(ConvWrwParams&&) = default; ConvWrwParams& operator=(ConvWrwParams&&) = default; const MiopenTensor& x() const; const MiopenTensor& dw() const; const MiopenTensor& dy() const; const MiopenConvDescriptor& conv() const; bool validTensors() const; private: size_t _spatialDimCount; MiopenTensor _x; MiopenTensor _dw; MiopenTensor _dy; MiopenConvDescriptor _conv; bool _tensorsValid; }; class ConvWrwPlan : public hipdnn_plugin_sdk::IPlan { public: ConvWrwPlan(const HipdnnMiopenHandle& handle, ConvWrwParams&& params, const HipdnnMiopenSettings& executionSettings); ~ConvWrwPlan() override = default; ConvWrwPlan(const ConvWrwPlan&) = delete; ConvWrwPlan& operator=(const ConvWrwPlan&) = delete; ConvWrwPlan(ConvWrwPlan&& other) = delete; ConvWrwPlan& operator=(ConvWrwPlan&& other) = delete; 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: ConvWrwParams _params; mutable std::mutex _algorithmMutex; mutable std::optional _algorithm; mutable size_t _workspaceSize = 0; HipdnnMiopenSettings _executionSettings; }; } // namespace miopen_plugin