diff options
author | Thomas White <taw@physics.org> | 2019-05-13 15:41:54 +0200 |
---|---|---|
committer | Thomas White <taw@physics.org> | 2019-05-13 15:41:54 +0200 |
commit | 8aff8c658925f0c7522555ff5907632bcafe4554 (patch) | |
tree | 5d9ec01501d87894537145972dffc7c1e0c1ee9c /src | |
parent | 6121e26bd0282dadcb0090611cb26aceaac1ed30 (diff) |
gpu_sim_check: Succeed if GPU not available
On recent OSes, OpenCL (the API) is always available, but a GPU device
not always. Therefore, this test will always be built, and shouldn't
fail just because a GPU isn't present.
Diffstat (limited to 'src')
-rw-r--r-- | src/cl-utils.c | 38 | ||||
-rw-r--r-- | src/cl-utils.h | 11 |
2 files changed, 45 insertions, 4 deletions
diff --git a/src/cl-utils.c b/src/cl-utils.c index fee2b53e..7c069ed1 100644 --- a/src/cl-utils.c +++ b/src/cl-utils.c @@ -3,11 +3,11 @@ * * OpenCL utility functions * - * Copyright © 2012-2018 Deutsches Elektronen-Synchrotron DESY, + * Copyright © 2012-2019 Deutsches Elektronen-Synchrotron DESY, * a research centre of the Helmholtz Association. * * Authors: - * 2010-2018 Thomas White <taw@physics.org> + * 2010-2019 Thomas White <taw@physics.org> * * This file is part of CrystFEL. * @@ -43,6 +43,40 @@ #include "utils.h" +/* Return 1 if a GPU device is present, 0 if not, 2 on error. */ +int have_gpu_device() +{ + cl_uint nplat; + cl_platform_id platforms[8]; + cl_context_properties prop[3]; + cl_int err; + int i; + + err = clGetPlatformIDs(8, platforms, &nplat); + if ( err != CL_SUCCESS ) return 2; + if ( nplat == 0 ) return 0; + + /* Find a GPU platform in the list */ + for ( i=0; i<nplat; i++ ) { + + prop[0] = CL_CONTEXT_PLATFORM; + prop[1] = (cl_context_properties)platforms[i]; + prop[2] = 0; + + clCreateContextFromType(prop, CL_DEVICE_TYPE_GPU, + NULL, NULL, &err); + + if ( err != CL_SUCCESS ) { + if ( err != CL_DEVICE_NOT_FOUND ) return 2; + } else { + return 1; + } + } + + return 0; +} + + const char *clError(cl_int err) { switch ( err ) { diff --git a/src/cl-utils.h b/src/cl-utils.h index fcaf1380..92bea562 100644 --- a/src/cl-utils.h +++ b/src/cl-utils.h @@ -3,11 +3,11 @@ * * OpenCL utility functions * - * Copyright © 2012-2018 Deutsches Elektronen-Synchrotron DESY, + * Copyright © 2012-2019 Deutsches Elektronen-Synchrotron DESY, * a research centre of the Helmholtz Association. * * Authors: - * 2010-2018 Thomas White <taw@physics.org> + * 2010-2019 Thomas White <taw@physics.org> * * This file is part of CrystFEL. * @@ -34,6 +34,13 @@ #endif +#ifdef HAVE_CL_CL_H +#include <CL/cl.h> +#else +#include <cl.h> +#endif + +extern int have_gpu_device(void); extern const char *clError(cl_int err); extern cl_device_id get_cl_dev(cl_context ctx, int n); extern cl_program load_program_from_string(const char *source_in, size_t len, |