index
:
mc2-scripts-and-benchmarks.git
master
rtas20-wip
rtas21-ae
rtas22
rtas22-casestudy
sd-vbs
Benchmarks and execution scripts for testing spatial isolation and SMT interference in MC^2
Joshua J Bakita
summary
refs
log
tree
commit
diff
stats
log msg
author
committer
range
path:
root
/
SD-VBS
/
common
/
toolbo
/* Copyright 2021-2023 Joshua Bakita
* Header for miscellaneous experimental helper functions.
*/
// cudaError_t and CUResult can both safely be cast to an unsigned int
static
__thread
unsigned int
__SAFE_err
;
// The very strange cast in these macros is to satisfy two goals at tension:
// 1. This file should be able to be included in non-CUDA-using files, and thus
// should use no CUDA types outside of this macro.
// 2. We want to typecheck uses of these macros. The driver and runtime APIs
// do not have identical error numbers and/or meanings, so runtime library
// calls should use SAFE, and driver library calls should use SAFE_D.
// These macros allow typechecking, but keep a generic global error variable.
#define SAFE(x) \
if ((*(cudaError_t*)(&__SAFE_err) = (x)) != 0) { \
printf(
"(
%s
:
%d
) CUDA error
%d
:
%s
i.e.
\"
%s
\"
returned by
%s
. Aborting...
\n
"
, \
__FILE__, __LINE__, __SAFE_err, cudaGetErrorName((cudaError_t)__SAFE_err), cudaGetErrorString((cudaError_t)__SAFE_err), #x); \
exit(1); \
}
#define SAFE_D(x) \
if ((*(CUresult*)&(__SAFE_err) = (x)) != 0) { \
const char* name; \
const char* desc; \
cuGetErrorName((CUresult)__SAFE_err, &name); \
cuGetErrorString((CUresult)__SAFE_err, &desc); \
printf(
"(
%s
:
%d
) CUDA error
%d
:
%s
i.e.
\"
%s
\"
returned by
%s
. Aborting...
\n
"
, \
__FILE__, __LINE__, __SAFE_err, name, desc, #x); \
exit(1); \
}