static inline void error_win(error *e) { char msgbuf[512]; DWORD err = GetLastError(); DWORD len = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM| FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err, 0, msgbuf, 512, NULL); if (len == 0) error_fmt(e, GA_LOAD_ERROR, "Could not load \"%s\": error code %X", name, err); else error_fmt(e, GA_LOAD_ERROR, "Could not load \"%s\": %s", name, msgbuf); }
int gpucontext_props_sched(gpucontext_props *p, int sched) { switch (sched) { case GA_CTX_SCHED_MULTI: case GA_CTX_SCHED_AUTO: case GA_CTX_SCHED_SINGLE: p->sched = sched; break; default: return error_fmt(global_err, GA_INVALID_ERROR, "Invalid value for sched: %d", sched); } if (sched == GA_CTX_SCHED_MULTI) FLSET(p->flags, GA_CTX_MULTI_THREAD); else FLCLR(p->flags, GA_CTX_MULTI_THREAD); return GA_NO_ERROR; }
static inline int error_clblast(error *e, const char *msg, CLBlastStatusCode err) { return error_fmt(e, GA_BLAS_ERROR, "%s: %s", msg, estr(err)); }
void *ga_func_ptr(void *h, const char *name, error *e) { void *res = dlsym(h, name); if (res == NULL) error_fmt(e, GA_LOAD_ERROR, "Could not find synbol \"%s\": %s", name, dlerror()); return res; }
void *ga_load_library(const char *name, error *e) { void *res = dlopen(name, RTLD_LAZY|RTLD_LOCAL); if (res == NULL) error_fmt(e, GA_LOAD_ERROR, "Could not load \"%s\": %s", name, dlerror()); return res; }
static inline int error_nccl(error *e, const char *msg, ncclResult_t err) { return error_fmt(e, GA_COMM_ERROR, "%s: %s", msg, ncclGetErrorString(err)); }