Program Listing for File error.hpp

Return to documentation for file (morpheus/_lib/include/morpheus/utilities/error.hpp)

Copy
Copied!
            

/* * SPDX-FileCopyrightText: Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include <cuda.h> #include <cuda_runtime_api.h> #include <stdexcept> #include <string> namespace morpheus { struct LogicError : public std::logic_error { LogicError(char const* const message) : std::logic_error(message) {} LogicError(std::string const& message) : std::logic_error(message) {} }; struct CudaError : public std::runtime_error { CudaError(std::string const& message) : std::runtime_error(message) {} }; } // namespace morpheus #define STRINGIFY_DETAIL(x) #x #define MORPHEUS_STRINGIFY(x) STRINGIFY_DETAIL(x) #define MORPHEUS_EXPECTS(cond, reason) \ (!!(cond)) \ ? static_cast<void>(0) \ : throw morpheus::LogicError("Morpheus failure at: " __FILE__ ":" MORPHEUS_STRINGIFY(__LINE__) ": " reason) #define MORPHEUS_FAIL(reason) \ throw morpheus::LogicError("Morpheus failure at: " __FILE__ ":" MORPHEUS_STRINGIFY(__LINE__) ": " reason) namespace morpheus::detail { inline void throw_cuda_error(cudaError_t error, const char* file, unsigned int line) { throw morpheus::CudaError(std::string{"CUDA error encountered at: " + std::string{file} + ":" + std::to_string(line) + ": " + std::to_string(error) + " " + cudaGetErrorName(error) + " " + cudaGetErrorString(error)}); } } // namespace morpheus::detail #define CUDA_TRY(call) \ do \ { \ cudaError_t const status = (call); \ if (cudaSuccess != status) \ { \ cudaGetLastError(); \ morpheus::detail::throw_cuda_error(status, __FILE__, __LINE__); \ } \ } while (0); #define CHECK_CUDA(stream) \ do \ { \ CUDA_TRY(cudaStreamSynchronize(stream)); \ CUDA_TRY(cudaPeekAtLastError()); \ } while (0);

© Copyright 2023, NVIDIA. Last updated on Feb 2, 2024.