// Copyright Advanced Micro Devices, Inc., or its affiliates. // SPDX-License-Identifier: MIT /** * Block scale MX datatypes command. */ #pragma once #include #include #include #include #include #include namespace rocRoller { namespace Operations { /** * A block scale operation for MX datatypes */ class BlockScale : public BaseOperation { public: BlockScale() = delete; /** * @param data Tag of data to-be-scaled * @param dimensions Number of dimensions of `data` * @param scale Optional tag of scale tensor (if not provided, treated as inline block scale) * @param strides Strides of the scale */ explicit BlockScale(OperationTag data, int dimensions, std::optional scale = {}, std::vector strides = {}); std::unordered_set getInputs() const; std::string toString() const; ScaleMode scaleMode() const; const std::vector& strides() const; bool operator==(BlockScale const&) const; OperationTag data() const; std::optional scale() const; private: OperationTag m_data; std::optional m_scale; std::vector m_strides; template friend struct rocRoller::Serialization::MappingTraits; }; class SubTileTranspose : public BaseOperation { public: SubTileTranspose() = delete; explicit SubTileTranspose(OperationTag input, std::vector tileDimensions, bool transpose = false); std::unordered_set getInputs() const; std::string toString() const; std::vector const& tileDimensions() const; bool isTranspose() const; auto operator<=>(SubTileTranspose const&) const = default; bool operator==(SubTileTranspose const& other) const; OperationTag input() const; private: OperationTag m_input; std::vector m_tileDimensions; bool m_transpose; template friend struct rocRoller::Serialization::MappingTraits; }; } }