Mila
Deep Neural Network Library
Loading...
Searching...
No Matches
CudaUtils.h
Go to the documentation of this file.
1#pragma once
2#include <cuda_runtime.h>
3#include <cstdio>
4#include <cstdlib>
5#include <stdexcept>
6#include <string>
7#include <source_location>
8
9// Convenience function for calculating grid/block dimensions for kernels
10constexpr int ceil_div(int M, int N) {
11 return (M + N - 1) / N;
12}
13
14class CudaException : public std::runtime_error {
15public:
16 CudaException( cudaError_t error, const std::string& file, int line )
17 : std::runtime_error( buildMessage( error, file, line ) )
18 , m_error( error ) {}
19
20 cudaError_t getError() const { return m_error; }
21
22private:
23 static std::string buildMessage( cudaError_t error, const std::string& file, int line ) {
24 return "[CUDA ERROR] at file " + file + ":" + std::to_string( line ) +
25 ":\n" + cudaGetErrorString( error );
26 }
27
28 cudaError_t m_error;
29};
30
31inline void cudaCheck( cudaError_t error, const std::source_location& loc = std::source_location::current() ) {
32 if ( error != cudaSuccess ) {
33 throw CudaException( error, loc.file_name(), loc.line() );
34 }
35}
constexpr int ceil_div(int M, int N)
Definition CudaUtils.h:10
void cudaCheck(cudaError_t error, const std::source_location &loc=std::source_location::current())
Definition CudaUtils.h:31
Definition CudaUtils.h:14
static std::string buildMessage(cudaError_t error, const std::string &file, int line)
Definition CudaUtils.h:23
CudaException(cudaError_t error, const std::string &file, int line)
Definition CudaUtils.h:16
cudaError_t getError() const
Definition CudaUtils.h:20
cudaError_t m_error
Definition CudaUtils.h:28