// Copyright © Advanced Micro Devices, Inc., or its affiliates. // SPDX-License-Identifier: MIT #pragma once #include #include #include namespace hipdnn_gpu_ref { // GPU-based floating-point tensor validator implementing IReferenceValidation. // Launches a HipRTC kernel to perform element-wise tolerance comparison on the GPU // using a single atomic failure flag. Supports both packed and strided tensors. template class GpuFpReferenceValidation : public hipdnn_test_sdk::utilities::IReferenceValidation { public: // NOLINTNEXTLINE(readability-redundant-casting) - cast needed for non-float T types explicit GpuFpReferenceValidation(float absoluteTolerance = float(std::numeric_limits::epsilon()), // NOLINTNEXTLINE(readability-redundant-casting) float relativeTolerance = float(std::numeric_limits::epsilon())); ~GpuFpReferenceValidation() override = default; // NOLINTNEXTLINE(portability-template-virtual-member-function) - explicit instantiation in .cpp bool allClose(hipdnn_data_sdk::utilities::ITensor& reference, hipdnn_data_sdk::utilities::ITensor& implementation) const override; private: bool gpuAllClose(hipdnn_data_sdk::utilities::ITensor& reference, hipdnn_data_sdk::utilities::ITensor& implementation) const; float _absoluteTolerance; float _relativeTolerance; }; // Suppress implicit instantiation — definitions are in GpuFpReferenceValidation.cpp extern template class GpuFpReferenceValidation; extern template class GpuFpReferenceValidation; extern template class GpuFpReferenceValidation; extern template class GpuFpReferenceValidation; } // namespace hipdnn_gpu_ref