Files
TheRock/rocm-libraries/projects/miopen/test/gtest/unit_conv_solver_ConvHipImplicitGemmGroupWrwXdlops.cpp
T
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

215 lines
8.3 KiB
C++

// Copyright © Advanced Micro Devices, Inc., or its affiliates.
// SPDX-License-Identifier: MIT
#include "unit_conv_solver_group_xdlops.hpp"
namespace {
// numeric part of test case
using TestCase = miopen::unit_tests::GroupXdlopsNumericData;
using TestDataType = miopen::unit_tests::TestDataType;
template <TestDataType type>
std::vector<TestCase> GetConvSmokeTestCases()
{
const bool tf32_compute = type == TestDataType::TF32;
return {
// clang-format off
TestCase{{1, 64, 8, 8}, {96, 64, 1, 1}, {0, 0}, {1, 1}, {1, 1}, 1, false, tf32_compute}
// clang-format on
};
}
template <TestDataType type>
std::vector<TestCase> GetConvFullTestCases()
{
const bool tf32_compute = type == TestDataType::TF32;
return {
// clang-format off
TestCase{{1, 64, 8, 8}, {96, 64, 1, 1}, {1, 1}, {1, 1}, {1, 1}, 1, false, tf32_compute}, // non-zero padding
TestCase{{1, 64, 8, 8}, {96, 64, 1, 1}, {0, 0}, {2, 2}, {1, 1}, 1, false, tf32_compute}, // stride > 1
// Group count = 2 and 4
TestCase{{1, 64, 8, 8}, {96, 32, 1, 1}, {0, 0}, {1, 1}, {2, 2}, 2, false, tf32_compute}, // dilation > 1
TestCase{{1, 64, 8, 8}, {96, 16, 1, 1}, {0, 0}, {2, 2}, {1, 1}, 4, false, tf32_compute}, // stride > 1
// clang-format on
};
}
auto GetDevApplicabilityConvCase()
{
// For device applicability checks
return GetConvTestForGroupXdlops<miopenHalf>(
miopenTensorNHWC, std::move(GetConvSmokeTestCases<TestDataType::FP16>()[0]));
}
// Deterministic test case (for CPU deterministic applicability test)
auto GetDeterministicConvCase()
{
TestCase test_case = {
// clang-format off
TestCase{{1, 64, 8, 8}, {96, 64, 1, 1}, {0, 0}, {1, 1}, {1, 1}, 1, true}
// clang-format on
};
return GetConvTestForGroupXdlops<miopenHalf>(miopenTensorNHWC, std::move(test_case));
}
template <TestDataType type>
miopen::unit_tests::UnitTestConvSolverParams GetTestParams()
{
// CK dynamic-library tests are HIP-only; runtime plugin availability is checked by the harness.
#if MIOPEN_BACKEND_HIP
Gpu supportedDevices;
if constexpr(type == TestDataType::FP32)
{
supportedDevices = Gpu::gfx908 | Gpu::gfx90A | Gpu::gfx94X | Gpu::gfx950;
}
else if constexpr(type == TestDataType::TF32 || type == TestDataType::BF16)
{
supportedDevices = Gpu::gfx94X | Gpu::gfx950;
}
else
{
supportedDevices = Gpu::gfx908 | Gpu::gfx90A | Gpu::gfx94X | Gpu::gfx950 | Gpu::gfx110X |
Gpu::gfx115X | Gpu::gfx120X;
}
#else
Gpu supportedDevices = Gpu::None;
#endif
miopen::unit_tests::UnitTestConvSolverParams p(supportedDevices);
p.ExcludeDevice("gfx1103");
p.Tunable(5);
p.UsesCKDynamicLib();
return p;
}
} // namespace
// Solver itself supports I8 in isApplicable, but CK returns 0 compatible kernels
using GPU_UnitTestConvSolverImplicitGemmGroupWrwXdlops_FP16 =
miopen::unit_tests::UnitTestConvSolverGroupXDlops<miopen::conv::Direction::BackwardWeights,
miopenHalf>;
using GPU_UnitTestConvSolverImplicitGemmGroupWrwXdlops_BFP16 =
miopen::unit_tests::UnitTestConvSolverGroupXDlops<miopen::conv::Direction::BackwardWeights,
miopenBFloat16>;
using GPU_UnitTestConvSolverImplicitGemmGroupWrwXdlops_FP32 =
miopen::unit_tests::UnitTestConvSolverGroupXDlops<miopen::conv::Direction::BackwardWeights,
miopenFloat>;
using GPU_UnitTestConvSolverImplicitGemmGroupWrwXdlops_TF32 =
miopen::unit_tests::UnitTestConvSolverGroupXDlops<miopen::conv::Direction::BackwardWeights,
miopenFloat>;
using CPU_UnitTestConvSolverImplicitGemmGroupWrwXdlopsDevApplicability_FP16 =
CPU_UnitTestConvSolverDevApplicabilityWrw_NONE;
using CPU_UnitTestConvSolverImplicitGemmGroupWrwXdlopsDeterministicApplicability_NONE =
CPU_UnitTestConvSolverDevApplicabilityWrw_NONE;
TEST_P(GPU_UnitTestConvSolverImplicitGemmGroupWrwXdlops_FP16, ConvHipImplicitGemmGroupWrwXdlops)
{
this->RunTest(miopen::solver::conv::ConvHipImplicitGemmGroupWrwXdlops{});
};
TEST_P(GPU_UnitTestConvSolverImplicitGemmGroupWrwXdlops_BFP16, ConvHipImplicitGemmGroupWrwXdlops)
{
this->RunTest(miopen::solver::conv::ConvHipImplicitGemmGroupWrwXdlops{});
};
TEST_P(GPU_UnitTestConvSolverImplicitGemmGroupWrwXdlops_FP32, ConvHipImplicitGemmGroupWrwXdlops)
{
this->RunTest(miopen::solver::conv::ConvHipImplicitGemmGroupWrwXdlops{});
};
TEST_P(GPU_UnitTestConvSolverImplicitGemmGroupWrwXdlops_TF32, ConvHipImplicitGemmGroupWrwXdlops)
{
this->RunTest(miopen::solver::conv::ConvHipImplicitGemmGroupWrwXdlops{});
};
TEST_P(CPU_UnitTestConvSolverImplicitGemmGroupWrwXdlopsDevApplicability_FP16,
ConvHipImplicitGemmGroupWrwXdlops)
{
this->RunTest(miopen::solver::conv::ConvHipImplicitGemmGroupWrwXdlops{});
};
TEST_P(CPU_UnitTestConvSolverImplicitGemmGroupWrwXdlopsDeterministicApplicability_NONE,
ConvHipImplicitGemmGroupWrwXdlops)
{
this->RunTest(miopen::solver::conv::ConvHipImplicitGemmGroupWrwXdlops{});
};
// Smoke tests
INSTANTIATE_TEST_SUITE_P(
Smoke,
GPU_UnitTestConvSolverImplicitGemmGroupWrwXdlops_FP16,
testing::Combine(testing::Values(GetTestParams<TestDataType::FP16>()),
testing::Values(miopenTensorNHWC, miopenTensorNCHW),
testing::ValuesIn(GetConvSmokeTestCases<TestDataType::FP16>())));
INSTANTIATE_TEST_SUITE_P(
Smoke,
GPU_UnitTestConvSolverImplicitGemmGroupWrwXdlops_BFP16,
testing::Combine(testing::Values(GetTestParams<TestDataType::BF16>()),
testing::Values(miopenTensorNHWC, miopenTensorNCHW),
testing::ValuesIn(GetConvSmokeTestCases<TestDataType::BF16>())));
INSTANTIATE_TEST_SUITE_P(
Smoke,
GPU_UnitTestConvSolverImplicitGemmGroupWrwXdlops_FP32,
testing::Combine(testing::Values(GetTestParams<TestDataType::FP32>()),
testing::Values(miopenTensorNHWC, miopenTensorNCHW),
testing::ValuesIn(GetConvSmokeTestCases<TestDataType::FP32>())));
INSTANTIATE_TEST_SUITE_P(
Smoke,
GPU_UnitTestConvSolverImplicitGemmGroupWrwXdlops_TF32,
testing::Combine(testing::Values(GetTestParams<TestDataType::TF32>()),
testing::Values(miopenTensorNHWC, miopenTensorNCHW),
testing::ValuesIn(GetConvSmokeTestCases<TestDataType::TF32>())));
// Full tests
INSTANTIATE_TEST_SUITE_P(
Full,
GPU_UnitTestConvSolverImplicitGemmGroupWrwXdlops_FP16,
testing::Combine(testing::Values(GetTestParams<TestDataType::FP16>()),
testing::Values(miopenTensorNHWC, miopenTensorNCHW),
testing::ValuesIn(GetConvFullTestCases<TestDataType::FP16>())));
INSTANTIATE_TEST_SUITE_P(
Full,
GPU_UnitTestConvSolverImplicitGemmGroupWrwXdlops_BFP16,
testing::Combine(testing::Values(GetTestParams<TestDataType::BF16>()),
testing::Values(miopenTensorNHWC, miopenTensorNCHW),
testing::ValuesIn(GetConvFullTestCases<TestDataType::BF16>())));
INSTANTIATE_TEST_SUITE_P(
Full,
GPU_UnitTestConvSolverImplicitGemmGroupWrwXdlops_FP32,
testing::Combine(testing::Values(GetTestParams<TestDataType::FP32>()),
testing::Values(miopenTensorNHWC, miopenTensorNCHW),
testing::ValuesIn(GetConvFullTestCases<TestDataType::FP32>())));
INSTANTIATE_TEST_SUITE_P(
Full,
GPU_UnitTestConvSolverImplicitGemmGroupWrwXdlops_TF32,
testing::Combine(testing::Values(GetTestParams<TestDataType::TF32>()),
testing::Values(miopenTensorNHWC, miopenTensorNCHW),
testing::ValuesIn(GetConvFullTestCases<TestDataType::TF32>())));
// Device applicability tests
INSTANTIATE_TEST_SUITE_P(Smoke,
CPU_UnitTestConvSolverImplicitGemmGroupWrwXdlopsDevApplicability_FP16,
testing::Combine(testing::Values(GetTestParams<TestDataType::FP16>()),
testing::Values(GetDevApplicabilityConvCase())));
INSTANTIATE_TEST_SUITE_P(
Smoke,
CPU_UnitTestConvSolverImplicitGemmGroupWrwXdlopsDeterministicApplicability_NONE,
testing::Combine(testing::Values(GetTestParams<TestDataType::FP16>()),
testing::Values(GetDeterministicConvCase())));