Files
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

189 lines
7.1 KiB
C++

/*******************************************************************************
*
* MIT License
*
* Copyright (C) 2019-2022 Advanced Micro Devices, Inc. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
*******************************************************************************/
#ifndef GEMM_KERNEL_TEST_HPP
#define GEMM_KERNEL_TEST_HPP
#include <Tensile/ContractionProblem.hpp>
#include <Tensile/ContractionSolution.hpp>
#include <Tensile/SolutionLibrary.hpp>
#include <Tensile/Tensile.hpp>
#include "TestData.hpp"
#include "TestUtils.hpp"
#include <iostream>
#include <unordered_map>
using namespace Tensile;
/* Test interface:
* This is the driving interface
* for setting up and invoking
* Tensile GEMM type problems on a
* particular device backend.
* E.g. HIP
*/
template <typename DeviceBackend>
struct GEMMKernelTest
{
/* Setup test component types that will
* stay constant for each Device Backend.
*/
template <typename T>
using BufferObj = typename DeviceBackend::template BufferObj<T>;
using ContractionProblem = ::ContractionProblem;
using ContractionSolution = typename ContractionProblem::Solution;
enum class MemoryPageAlignment : int
{
BEGIN = 0,
END = 1
};
using SolutionAdapter = typename DeviceBackend::SolutionAdapter;
using SolutionLibrary = ::SolutionLibrary<ContractionProblem, ContractionSolution>;
using ProblemParams = std::tuple<bool, // transA
bool, // transB
size_t, // m
size_t, // n
size_t, // k
size_t, // lda
size_t, // ldb
size_t, // ldc
double, // beta
size_t>; // batchCount
using SolutionParams = std::tuple<std::shared_ptr<SolutionLibrary>,
std::shared_ptr<SolutionAdapter>,
bool>; // is a solution required?
static constexpr ProblemParams RandomGEMMParams
= std::make_tuple(false, false, -1, -1, -1, -1, -1, -1, -1.0, -1);
virtual void SetUp(ProblemParams const&, SolutionParams const&, MemoryPageAlignment const&) = 0;
virtual void TestBestSolution() = 0;
virtual void TestAllSolutions() = 0;
virtual void TearDown() = 0;
virtual void OverrideAlpha(double) = 0;
virtual void NullifyAPtr() = 0;
virtual void NullifyBPtr() = 0;
virtual std::string ToString() const = 0;
virtual ~GEMMKernelTest() {}
};
template <typename DeviceBackend>
inline std::ostream& operator<<(std::ostream& stream,
std::shared_ptr<GEMMKernelTest<DeviceBackend>> const& ptr);
/* Typed test implementation:
* Setup and invocation of Tensile GEMM problems with
* specific controls for input generation
* on different device backends.
*/
template <typename TypedInputs, typename DeviceBackend>
struct TypedGEMMKernelTest : public GEMMKernelTest<DeviceBackend>
{
// Extract base component configuration
using Base = GEMMKernelTest<DeviceBackend>;
template <typename T>
using BufferObj = typename Base::template BufferObj<T>;
using ContractionProblem = typename Base::ContractionProblem;
using ContractionSolution = typename Base::ContractionSolution;
using MemoryPageAlignment = typename Base::MemoryPageAlignment;
using SolutionAdapter = typename Base::SolutionAdapter;
using SolutionLibrary = typename Base::SolutionLibrary;
// Extract testing params
using SolutionParams = typename Base::SolutionParams;
using ProblemParams = typename Base::ProblemParams;
// Extract input types
using AType = typename TypedInputs::AType;
using BType = typename TypedInputs::BType;
using CType = typename TypedInputs::CType;
using DType = typename TypedInputs::DType;
using AlphaType = typename TypedInputs::AlphaType;
using BetaType = typename TypedInputs::BetaType;
// Host data buffers
std::vector<AType> a_h;
std::vector<BType> b_h;
std::vector<CType> c_h;
std::vector<DType> d_h;
std::vector<DType> d_in_h;
std::vector<DType> d_ref_h;
// Device data buffers
BufferObj<AType> a_d_alloc = nullptr;
BufferObj<BType> b_d_alloc = nullptr;
BufferObj<CType> c_d_alloc = nullptr;
BufferObj<DType> d_d_alloc = nullptr;
std::array<size_t, 4> bufferOffsets = {0, 0, 0, 0};
TypedInputs inputs_h;
TypedInputs inputs_d;
std::shared_ptr<Hardware> hardware;
// Testing components
ContractionProblem problem;
std::shared_ptr<SolutionLibrary> library;
std::shared_ptr<SolutionAdapter> adapter;
std::shared_ptr<ContractionSolution> solution;
bool requiredMatch;
MemoryPageAlignment memoryAlignment;
static std::unordered_map<size_t, std::vector<DType>> referenceCache;
static ContractionProblem createProblem(ProblemParams const& props);
void SetUp(ProblemParams const& probParams,
SolutionParams const& solParams,
MemoryPageAlignment const& alignment) override;
void OverrideAlpha(double val) override;
void NullifyAPtr() override;
void NullifyBPtr() override;
void calcCPU();
void calcGPU();
void TestBestSolution() override;
void TestAllSolutions() override;
void TearDown() override;
inline std::string ToString() const override;
};
#include "GEMMKernelTest_impl.hpp"
#endif // GEMM_KERNEL_TEST_HPP