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

220 lines
9.0 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, 4, 14, 28, 28}, {4, 4, 3, 3, 3}, {1, 1, 1}, {1, 1, 1}, {1, 1, 1}, 1}
TestCase {{1, 4, 8, 28, 28}, {4, 4, 3, 3, 3}, {0, 0, 0}, {1, 1, 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
// Group Count = 1
TestCase {{1, 1, 8, 8, 8}, {1, 1, 2, 2, 2}, {0, 0, 0}, {2, 2, 2}, {1, 1, 1}, 1, false, tf32_compute},
TestCase {{6, 448, 3, 118, 182}, {896, 448, 1, 1, 1}, {0, 0, 0}, {1, 2, 2}, {1, 1, 1}, 1, false, tf32_compute},
// Group Count > 1 (2, 3, 4)
TestCase {{128, 2, 28, 28, 28}, {2, 1, 3, 3, 3}, {1, 1, 1}, {1, 1, 1}, {1, 1, 1}, 2, false, tf32_compute},
TestCase {{128, 2, 28, 28, 28}, {2, 1, 3, 3, 3}, {1, 1, 1}, {2, 2, 2}, {1, 1, 1}, 2, false, tf32_compute},
TestCase {{256, 9, 2, 14, 14}, {27, 3, 2, 14, 14}, {1, 1, 1}, {1, 1, 1}, {1, 1, 1}, 3, false, tf32_compute},
TestCase {{128, 4, 28, 28, 28}, {8, 1, 3, 3, 3}, {1, 1, 1}, {2, 2, 2}, {1, 1, 1}, 4, false, tf32_compute}
// clang-format on
};
}
auto GetDevApplicabilityConvCase()
{
// For device applicability checks
return GetConvTestForGroupXdlops<miopenHalf>(
miopenTensorNDHWC, std::move(GetConvSmokeTestCases<TestDataType::FP16>()[0]));
}
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)
{
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;
}
// Deterministic test case (for CPU deterministic applicability test)
auto GetDeterministicConvCase()
{
TestCase test_case = {
// clang-format off
TestCase {{1, 4, 8, 28, 28}, {4, 4, 3, 3, 3}, {0, 0, 0}, {1, 1, 1}, {1, 1, 1}, 1, true}
// clang-format on
};
return GetConvTestForGroupXdlops<miopenHalf>(miopenTensorNDHWC, std::move(test_case));
}
} // namespace
// CK Applicability checks fail on I8 type
// ie for this case: TestCase {{1, 4, 8, 28, 28}, {4, 4, 3, 3, 3}, {0, 0, 0}, {1, 1, 1}, {1, 1, 1},
// 1} using GPU_UnitTestConvSolverImplicitGemm3DGroupBwdXdlops_I8 =
// miopen::unit_tests::UnitTestConvSolverGroupXDlops<miopen::conv::Direction::BackwardData,
// miopenInt8>;
using GPU_UnitTestConvSolverImplicitGemm3DGroupBwdXdlops_FP16 =
miopen::unit_tests::UnitTestConvSolverGroupXDlops<miopen::conv::Direction::BackwardData,
miopenHalf>;
using GPU_UnitTestConvSolverImplicitGemm3DGroupBwdXdlops_BFP16 =
miopen::unit_tests::UnitTestConvSolverGroupXDlops<miopen::conv::Direction::BackwardData,
miopenBFloat16>;
using GPU_UnitTestConvSolverImplicitGemm3DGroupBwdXdlops_FP32 =
miopen::unit_tests::UnitTestConvSolverGroupXDlops<miopen::conv::Direction::BackwardData,
miopenFloat>;
using GPU_UnitTestConvSolverImplicitGemm3DGroupBwdXdlops_TF32 =
miopen::unit_tests::UnitTestConvSolverGroupXDlops<miopen::conv::Direction::BackwardData,
miopenFloat>;
using CPU_UnitTestConvSolverImplicitGemm3DGroupBwdXdlopsDevApplicability_FP16 =
CPU_UnitTestConvSolverDevApplicabilityBwd_NONE;
using CPU_UnitTestConvSolverImplicitGemm3DGroupBwdXdlopsDeterministicApplicability_NONE =
CPU_UnitTestConvSolverDevApplicabilityBwd_NONE;
TEST_P(GPU_UnitTestConvSolverImplicitGemm3DGroupBwdXdlops_FP16, ConvHipImplicitGemm3DGroupBwdXdlops)
{
this->RunTest(miopen::solver::conv::ConvHipImplicitGemm3DGroupBwdXdlops{});
};
TEST_P(GPU_UnitTestConvSolverImplicitGemm3DGroupBwdXdlops_BFP16,
ConvHipImplicitGemm3DGroupBwdXdlops)
{
this->RunTest(miopen::solver::conv::ConvHipImplicitGemm3DGroupBwdXdlops{});
};
TEST_P(GPU_UnitTestConvSolverImplicitGemm3DGroupBwdXdlops_FP32, ConvHipImplicitGemm3DGroupBwdXdlops)
{
this->RunTest(miopen::solver::conv::ConvHipImplicitGemm3DGroupBwdXdlops{});
};
TEST_P(GPU_UnitTestConvSolverImplicitGemm3DGroupBwdXdlops_TF32, ConvHipImplicitGemm3DGroupBwdXdlops)
{
this->RunTest(miopen::solver::conv::ConvHipImplicitGemm3DGroupBwdXdlops{});
};
TEST_P(CPU_UnitTestConvSolverImplicitGemm3DGroupBwdXdlopsDevApplicability_FP16,
ConvHipImplicitGemm3DGroupBwdXdlops)
{
this->RunTest(miopen::solver::conv::ConvHipImplicitGemm3DGroupBwdXdlops{});
};
TEST_P(CPU_UnitTestConvSolverImplicitGemm3DGroupBwdXdlopsDeterministicApplicability_NONE,
ConvHipImplicitGemm3DGroupBwdXdlops)
{
this->RunTest(miopen::solver::conv::ConvHipImplicitGemm3DGroupBwdXdlops{});
};
// Smoke tests
INSTANTIATE_TEST_SUITE_P(
Smoke,
GPU_UnitTestConvSolverImplicitGemm3DGroupBwdXdlops_FP16,
testing::Combine(testing::Values(GetTestParams<TestDataType::FP16>()),
testing::Values(miopenTensorNDHWC, miopenTensorNCDHW),
testing::ValuesIn(GetConvSmokeTestCases<TestDataType::FP16>())));
INSTANTIATE_TEST_SUITE_P(
Smoke,
GPU_UnitTestConvSolverImplicitGemm3DGroupBwdXdlops_BFP16,
testing::Combine(testing::Values(GetTestParams<TestDataType::BF16>()),
testing::Values(miopenTensorNDHWC, miopenTensorNCDHW),
testing::ValuesIn(GetConvSmokeTestCases<TestDataType::BF16>())));
INSTANTIATE_TEST_SUITE_P(
Smoke,
GPU_UnitTestConvSolverImplicitGemm3DGroupBwdXdlops_FP32,
testing::Combine(testing::Values(GetTestParams<TestDataType::FP32>()),
testing::Values(miopenTensorNDHWC, miopenTensorNCDHW),
testing::ValuesIn(GetConvSmokeTestCases<TestDataType::FP32>())));
INSTANTIATE_TEST_SUITE_P(
Smoke,
GPU_UnitTestConvSolverImplicitGemm3DGroupBwdXdlops_TF32,
testing::Combine(testing::Values(GetTestParams<TestDataType::TF32>()),
testing::Values(miopenTensorNDHWC, miopenTensorNCDHW),
testing::ValuesIn(GetConvSmokeTestCases<TestDataType::TF32>())));
// Full tests
INSTANTIATE_TEST_SUITE_P(
Full,
GPU_UnitTestConvSolverImplicitGemm3DGroupBwdXdlops_FP16,
testing::Combine(testing::Values(GetTestParams<TestDataType::FP16>()),
testing::Values(miopenTensorNDHWC, miopenTensorNCDHW),
testing::ValuesIn(GetConvFullTestCases<TestDataType::FP16>())));
INSTANTIATE_TEST_SUITE_P(
Full,
GPU_UnitTestConvSolverImplicitGemm3DGroupBwdXdlops_BFP16,
testing::Combine(testing::Values(GetTestParams<TestDataType::BF16>()),
testing::Values(miopenTensorNDHWC, miopenTensorNCDHW),
testing::ValuesIn(GetConvFullTestCases<TestDataType::BF16>())));
INSTANTIATE_TEST_SUITE_P(
Full,
GPU_UnitTestConvSolverImplicitGemm3DGroupBwdXdlops_FP32,
testing::Combine(testing::Values(GetTestParams<TestDataType::FP32>()),
testing::Values(miopenTensorNDHWC, miopenTensorNCDHW),
testing::ValuesIn(GetConvFullTestCases<TestDataType::FP32>())));
INSTANTIATE_TEST_SUITE_P(
Full,
GPU_UnitTestConvSolverImplicitGemm3DGroupBwdXdlops_TF32,
testing::Combine(testing::Values(GetTestParams<TestDataType::TF32>()),
testing::Values(miopenTensorNDHWC, miopenTensorNCDHW),
testing::ValuesIn(GetConvFullTestCases<TestDataType::TF32>())));
// Device applicability tests
INSTANTIATE_TEST_SUITE_P(Smoke,
CPU_UnitTestConvSolverImplicitGemm3DGroupBwdXdlopsDevApplicability_FP16,
testing::Combine(testing::Values(GetTestParams<TestDataType::FP16>()),
testing::Values(GetDevApplicabilityConvCase())));
INSTANTIATE_TEST_SUITE_P(
Smoke,
CPU_UnitTestConvSolverImplicitGemm3DGroupBwdXdlopsDeterministicApplicability_NONE,
testing::Combine(testing::Values(GetTestParams<TestDataType::FP16>()),
testing::Values(GetDeterministicConvCase())));