// 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 ConvBwdParams { public: ConvBwdParams( const hipdnn_flatbuffers_sdk::data_objects::ConvolutionBwdAttributes& attributes, const std::unordered_map& tensorMap, bool deterministicEnabled = false); ConvBwdParams(const ConvBwdParams&) = delete; ConvBwdParams& operator=(const ConvBwdParams&) = delete; ConvBwdParams(ConvBwdParams&&) = default; ConvBwdParams& operator=(ConvBwdParams&&) = default; const MiopenTensor& dx() const; const MiopenTensor& w() const; const MiopenTensor& dy() const; const MiopenConvDescriptor& conv() const; bool validTensors() const; private: size_t _spatialDimCount; MiopenTensor _dx; MiopenTensor _w; MiopenTensor _dy; MiopenConvDescriptor _conv; bool _tensorsValid; }; class ConvBwdPlan : public hipdnn_plugin_sdk::IPlan { public: ConvBwdPlan(const HipdnnMiopenHandle& handle, ConvBwdParams&& params, const HipdnnMiopenSettings& executionSettings); ~ConvBwdPlan() override = default; ConvBwdPlan(const ConvBwdPlan&) = delete; ConvBwdPlan& operator=(const ConvBwdPlan&) = delete; ConvBwdPlan(ConvBwdPlan&& other) = delete; ConvBwdPlan& operator=(ConvBwdPlan&& 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: ConvBwdParams _params; mutable std::mutex _algorithmMutex; mutable std::optional _algorithm; mutable size_t _workspaceSize = 0; HipdnnMiopenSettings _executionSettings; }; } // namespace miopen_plugin