Files
TheRock/rocm-libraries/projects/miopen/test/gtest/unit_conv_solver_ConvCkGroupedConvFwd.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
9.9 KiB
C++

// Copyright © Advanced Micro Devices, Inc., or its affiliates.
// SPDX-License-Identifier: MIT
#include "unit_conv_solver.hpp"
namespace {
auto GetConvSmokeTestCases(miopenDataType_t datatype)
{
using TestCase = miopen::unit_tests::ConvTestCase;
// Smoke test using a single case with batchsize of 32, 1 channel & group, (2,2) padding,
// (5,5) filter and (7,7) spatial dims.
return std::vector{
// clang-format off
TestCase{{datatype, miopenTensorNCHW, {32, 1, 7, 7}},
{datatype, miopenTensorNCHW, {1, 1, 5, 5}},
datatype, {{2, 2}, {1, 1}, {1, 1}, 1}},
// clang-format on
};
}
auto GetConvDeterministicTestCases(miopenDataType_t datatype)
{
using TestCase = miopen::unit_tests::ConvTestCase;
return std::vector{
// clang-format off
TestCase{{datatype, miopenTensorNHWC, {32, 1, 7, 7}},
{datatype, miopenTensorNHWC, {1, 1, 5, 5}},
datatype, {{2, 2}, {1, 1}, {1, 1}, 1, true}},
// clang-format on
};
}
auto GetConvFullTestCases(miopenDataType_t datatype)
{
using TestCase = miopen::unit_tests::ConvTestCase;
// For every entry in DeviceConvFwdFactory, test with a group count of 1 and with a group count
// greater than 1
return std::vector{
// clang-format off
TestCase{{datatype, miopenTensorNCHW, {64, 1, 7, 7}},
{datatype, miopenTensorNCHW, {1, 1, 5, 5}},
datatype, {{2, 2}, {1, 1}, {1, 1}, 1}},
TestCase{{datatype, miopenTensorNCHW, {64, 2, 7, 7}},
{datatype, miopenTensorNCHW, {2, 1, 5, 5}},
datatype, {{2, 2}, {1, 1}, {1, 1}, 2}},
TestCase{{datatype, miopenTensorNCHW, {64, 1, 14, 14}},
{datatype, miopenTensorNCHW, {1, 1, 5, 5}},
datatype, {{2, 2}, {1, 1}, {1, 1}, 1}},
TestCase{{datatype, miopenTensorNCHW, {64, 3, 14, 14}},
{datatype, miopenTensorNCHW, {3, 1, 5, 5}},
datatype, {{2, 2}, {1, 1}, {1, 1}, 3}},
TestCase{{datatype, miopenTensorNCHW, {64, 1, 28, 28}},
{datatype, miopenTensorNCHW, {1, 1, 5, 5}},
datatype, {{2, 2}, {1, 1}, {1, 1}, 1}},
TestCase{{datatype, miopenTensorNCHW, {64, 4, 28, 28}},
{datatype, miopenTensorNCHW, {4, 1, 5, 5}},
datatype, {{2, 2}, {1, 1}, {1, 1}, 4}},
TestCase{{datatype, miopenTensorNCHW, {64, 1, 14, 14}},
{datatype, miopenTensorNCHW, {1, 1, 5, 5}},
datatype, {{2, 2}, {2, 2}, {1, 1}, 1}},
TestCase{{datatype, miopenTensorNCHW, {64, 2, 14, 14}},
{datatype, miopenTensorNCHW, {2, 1, 5, 5}},
datatype, {{2, 2}, {2, 2}, {1, 1}, 2}},
TestCase{{datatype, miopenTensorNCHW, {64, 1, 28, 28}},
{datatype, miopenTensorNCHW, {1, 1, 5, 5}},
datatype, {{2, 2}, {2, 2}, {1, 1}, 1}},
TestCase{{datatype, miopenTensorNCHW, {64, 2, 28, 28}},
{datatype, miopenTensorNCHW, {2, 1, 5, 5}},
datatype, {{2, 2}, {2, 2}, {1, 1}, 2}},
TestCase{{datatype, miopenTensorNCHW, {64, 1, 56, 56}},
{datatype, miopenTensorNCHW, {1, 1, 5, 5}},
datatype, {{2, 2}, {2, 2}, {1, 1}, 1}},
TestCase{{datatype, miopenTensorNCHW, {64, 2, 56, 56}},
{datatype, miopenTensorNCHW, {2, 1, 5, 5}},
datatype, {{2, 2}, {2, 2}, {1, 1}, 2}},
TestCase{{datatype, miopenTensorNCHW, {64, 1, 7, 7}},
{datatype, miopenTensorNCHW, {1, 1, 3, 3}},
datatype, {{1, 1}, {1, 1}, {1, 1}, 1}},
TestCase{{datatype, miopenTensorNCHW, {64, 3, 7, 7}},
{datatype, miopenTensorNCHW, {3, 1, 3, 3}},
datatype, {{1, 1}, {1, 1}, {1, 1}, 3}},
TestCase{{datatype, miopenTensorNCHW, {64, 1, 14, 14}},
{datatype, miopenTensorNCHW, {1, 1, 3, 3}},
datatype, {{1, 1}, {1, 1}, {1, 1}, 1}},
TestCase{{datatype, miopenTensorNCHW, {64, 4, 14, 14}},
{datatype, miopenTensorNCHW, {4, 1, 3, 3}},
datatype, {{1, 1}, {1, 1}, {1, 1}, 4}},
TestCase{{datatype, miopenTensorNCHW, {64, 1, 56, 56}},
{datatype, miopenTensorNCHW, {1, 1, 3, 3}},
datatype, {{1, 1}, {1, 1}, {1, 1}, 1}},
TestCase{{datatype, miopenTensorNCHW, {64, 5, 56, 56}},
{datatype, miopenTensorNCHW, {5, 1, 3, 3}},
datatype, {{1, 1}, {1, 1}, {1, 1}, 5}},
TestCase{{datatype, miopenTensorNCHW, {64, 1, 112, 112}},
{datatype, miopenTensorNCHW, {1, 1, 3, 3}},
datatype, {{1, 1}, {1, 1}, {1, 1}, 1}},
TestCase{{datatype, miopenTensorNCHW, {64, 2, 112, 112}},
{datatype, miopenTensorNCHW, {2, 1, 3, 3}},
datatype, {{1, 1}, {1, 1}, {1, 1}, 2}},
TestCase{{datatype, miopenTensorNCHW, {64, 1, 28, 28}},
{datatype, miopenTensorNCHW, {1, 1, 3, 3}},
datatype, {{1, 1}, {2, 2}, {1, 1}, 1}},
TestCase{{datatype, miopenTensorNCHW, {64, 6, 28, 28}},
{datatype, miopenTensorNCHW, {6, 1, 3, 3}},
datatype, {{1, 1}, {2, 2}, {1, 1}, 6}},
TestCase{{datatype, miopenTensorNCHW, {64, 1, 112, 112}},
{datatype, miopenTensorNCHW, {1, 1, 3, 3}},
datatype, {{1, 1}, {2, 2}, {1, 1}, 1}},
TestCase{{datatype, miopenTensorNCHW, {64, 3, 112, 112}},
{datatype, miopenTensorNCHW, {3, 1, 3, 3}},
datatype, {{1, 1}, {2, 2}, {1, 1}, 3}},
// 7x7 stride-1 pad-3 (convnext depthwise stages)
TestCase{{datatype, miopenTensorNCHW, {64, 1, 7, 7}},
{datatype, miopenTensorNCHW, {1, 1, 7, 7}},
datatype, {{3, 3}, {1, 1}, {1, 1}, 1}},
TestCase{{datatype, miopenTensorNCHW, {64, 2, 14, 14}},
{datatype, miopenTensorNCHW, {2, 1, 7, 7}},
datatype, {{3, 3}, {1, 1}, {1, 1}, 2}},
TestCase{{datatype, miopenTensorNCHW, {64, 2, 28, 28}},
{datatype, miopenTensorNCHW, {2, 1, 7, 7}},
datatype, {{3, 3}, {1, 1}, {1, 1}, 2}},
TestCase{{datatype, miopenTensorNCHW, {64, 2, 56, 56}},
{datatype, miopenTensorNCHW, {2, 1, 7, 7}},
datatype, {{3, 3}, {1, 1}, {1, 1}, 2}},
// clang-format on
};
}
auto GetTestParams(miopenDataType_t /*datatype*/)
{
// Solution requires 64-lane wavefronts and depends on the CK dynamic library
#if MIOPEN_BACKEND_HIP
Gpu supportedDevices = Gpu::gfx908 | Gpu::gfx90A | Gpu::gfx94X | Gpu::gfx950;
#else
Gpu supportedDevices = Gpu::None;
#endif
auto params = miopen::unit_tests::UnitTestConvSolverParams(supportedDevices);
params.Tunable(5);
params.UsesCKDynamicLib();
return params;
}
} // namespace
using GPU_UnitTestConvSolverConvDepthwiseFwd2D_FP16 = GPU_UnitTestConvSolverFwd_FP16;
using CPU_UnitTestConvSolverConvDepthwiseFwd2DDevApplicability_FP16 =
CPU_UnitTestConvSolverDevApplicabilityFwd_NONE;
using CPU_UnitTestConvSolverConvDepthwiseFwd2DeterministicApplicability_NONE =
CPU_UnitTestConvSolverDevApplicabilityFwd_NONE;
TEST_P(GPU_UnitTestConvSolverConvDepthwiseFwd2D_FP16, ConvDepthwiseFwd2D)
{
this->RunTest(miopen::solver::conv::ConvDepthwiseFwd2D{});
};
TEST_P(CPU_UnitTestConvSolverConvDepthwiseFwd2DDevApplicability_FP16, ConvDepthwiseFwd2D)
{
this->RunTest(miopen::solver::conv::ConvDepthwiseFwd2D{});
};
TEST_P(CPU_UnitTestConvSolverConvDepthwiseFwd2DeterministicApplicability_NONE, ConvDepthwiseFwd2D)
{
this->RunTest(miopen::solver::conv::ConvDepthwiseFwd2D{});
};
// Smoke tests
INSTANTIATE_TEST_SUITE_P(Smoke,
GPU_UnitTestConvSolverConvDepthwiseFwd2D_FP16,
testing::Combine(testing::Values(GetTestParams(miopenHalf)),
testing::Values(miopenConvolutionAlgoDirect),
testing::ValuesIn(GetConvSmokeTestCases(miopenHalf))));
// Full tests
INSTANTIATE_TEST_SUITE_P(Full,
GPU_UnitTestConvSolverConvDepthwiseFwd2D_FP16,
testing::Combine(testing::Values(GetTestParams(miopenHalf)),
testing::Values(miopenConvolutionAlgoDirect),
testing::ValuesIn(GetConvFullTestCases(miopenHalf))));
// Device applicability tests
INSTANTIATE_TEST_SUITE_P(Smoke,
CPU_UnitTestConvSolverConvDepthwiseFwd2DDevApplicability_FP16,
testing::Combine(testing::Values(GetTestParams(miopenHalf)),
testing::Values(GetConvSmokeTestCases(miopenHalf)[0])));
INSTANTIATE_TEST_SUITE_P(
Smoke,
CPU_UnitTestConvSolverConvDepthwiseFwd2DeterministicApplicability_NONE,
testing::Combine(testing::Values(Gpu::None),
testing::Values(GetConvDeterministicTestCases(miopenHalf)[0])));
// bf16 (the instance factories are dtype-templated; on gfx950 this uses the hardware bf16 dot)
using GPU_UnitTestConvSolverConvDepthwiseFwd2D_BFP16 = GPU_UnitTestConvSolverFwd_BFP16;
TEST_P(GPU_UnitTestConvSolverConvDepthwiseFwd2D_BFP16, ConvDepthwiseFwd2D)
{
this->RunTest(miopen::solver::conv::ConvDepthwiseFwd2D{});
};
INSTANTIATE_TEST_SUITE_P(
Smoke,
GPU_UnitTestConvSolverConvDepthwiseFwd2D_BFP16,
testing::Combine(testing::Values(GetTestParams(miopenBFloat16)),
testing::Values(miopenConvolutionAlgoDirect),
testing::ValuesIn(GetConvSmokeTestCases(miopenBFloat16))));
INSTANTIATE_TEST_SUITE_P(Full,
GPU_UnitTestConvSolverConvDepthwiseFwd2D_BFP16,
testing::Combine(testing::Values(GetTestParams(miopenBFloat16)),
testing::Values(miopenConvolutionAlgoDirect),
testing::ValuesIn(GetConvFullTestCases(miopenBFloat16))));