Browse Source

Iterate over all platforms displaying their information and number of devices when --ndevs is called.

nfactor-troky
ckolivas 13 years ago
parent
commit
a4f47812ff
  1. 2
      device-gpu.c
  2. 77
      ocl.c
  3. 2
      ocl.h

2
device-gpu.c

@ -425,7 +425,7 @@ char *print_ndevs_and_exit(int *ndevs)
opt_log_output = true; opt_log_output = true;
opencl_api.api_detect(); opencl_api.api_detect();
clear_adl(*ndevs); clear_adl(*ndevs);
applog(LOG_INFO, "%i GPU devices detected", *ndevs); applog(LOG_INFO, "%i GPU devices max detected", *ndevs);
exit(*ndevs); exit(*ndevs);
} }
#endif #endif

77
ocl.c

@ -68,65 +68,60 @@ char *file_contents(const char *filename, int *length)
return (char*)buffer; return (char*)buffer;
} }
int clDevicesNum() { int clDevicesNum(void) {
cl_int status; cl_int status;
char pbuff[256]; char pbuff[256];
cl_uint numDevices; cl_uint numDevices;
cl_uint numPlatforms; cl_uint numPlatforms;
cl_platform_id *platforms;
cl_platform_id platform = NULL; cl_platform_id platform = NULL;
unsigned int most_devices = 0, i;
status = clGetPlatformIDs(0, NULL, &numPlatforms); status = clGetPlatformIDs(0, NULL, &numPlatforms);
/* If this fails, assume no GPUs. */ /* If this fails, assume no GPUs. */
if (status != CL_SUCCESS) { if (status != CL_SUCCESS) {
applog(LOG_INFO, "clGetPlatformsIDs failed (no GPU?)"); applog(LOG_ERR, "clGetPlatformsIDs failed (no OpenCL SDK installed?)");
return 0; return -1;
}
if (numPlatforms > 0) {
cl_platform_id* platforms = (cl_platform_id *)malloc(numPlatforms*sizeof(cl_platform_id));
unsigned int i;
status = clGetPlatformIDs(numPlatforms, platforms, NULL);
if (status != CL_SUCCESS) {
applog(LOG_ERR, "Error: Getting Platform Ids. (clGetPlatformsIDs)");
return -1;
}
for (i = 0; i < numPlatforms; ++i) {
status = clGetPlatformInfo( platforms[i], CL_PLATFORM_VENDOR, sizeof(pbuff), pbuff, NULL);
if (status != CL_SUCCESS) {
applog(LOG_ERR, "Error: Getting Platform Info. (clGetPlatformInfo)");
free(platforms);
return -1;
}
platform = platforms[i];
if (!strcmp(pbuff, "Advanced Micro Devices, Inc.") ||
!strcmp(pbuff, "NVIDIA Corporation"))
break;
}
free(platforms);
} }
if (platform == NULL) { if (numPlatforms == 0) {
perror("NULL platform found!\n"); applog(LOG_ERR, "clGetPlatformsIDs returned no platforms (no OpenCL SDK installed?)");
return -1; return -1;
} }
applog(LOG_INFO, "CL Platform vendor: %s", pbuff); platforms = (cl_platform_id *)alloca(numPlatforms*sizeof(cl_platform_id));
status = clGetPlatformInfo(platform, CL_PLATFORM_NAME, sizeof(pbuff), pbuff, NULL); status = clGetPlatformIDs(numPlatforms, platforms, NULL);
if (status == CL_SUCCESS)
applog(LOG_INFO, "CL Platform name: %s", pbuff);
status = clGetPlatformInfo(platform, CL_PLATFORM_VERSION, sizeof(pbuff), pbuff, NULL);
if (status == CL_SUCCESS)
applog(LOG_INFO, "CL Platform version: %s", pbuff);
status = clGetDeviceIDs(platform, CL_DEVICE_TYPE_GPU, 0, NULL, &numDevices);
if (status != CL_SUCCESS) { if (status != CL_SUCCESS) {
applog(LOG_ERR, "Error: Getting Device IDs (num)"); applog(LOG_ERR, "Error: Getting Platform Ids. (clGetPlatformsIDs)");
return -1; return -1;
} }
return numDevices; for (i = 0; i < numPlatforms; i++) {
status = clGetPlatformInfo( platforms[i], CL_PLATFORM_VENDOR, sizeof(pbuff), pbuff, NULL);
if (status != CL_SUCCESS) {
applog(LOG_ERR, "Error: Getting Platform Info. (clGetPlatformInfo)");
free(platforms);
return -1;
}
platform = platforms[i];
applog(LOG_INFO, "CL Platform vendor: %s", pbuff);
status = clGetPlatformInfo(platform, CL_PLATFORM_NAME, sizeof(pbuff), pbuff, NULL);
if (status == CL_SUCCESS)
applog(LOG_INFO, "CL Platform name: %s", pbuff);
status = clGetPlatformInfo(platform, CL_PLATFORM_VERSION, sizeof(pbuff), pbuff, NULL);
if (status == CL_SUCCESS)
applog(LOG_INFO, "CL Platform version: %s", pbuff);
status = clGetDeviceIDs(platform, CL_DEVICE_TYPE_GPU, 0, NULL, &numDevices);
if (status != CL_SUCCESS) {
applog(LOG_ERR, "Error: Getting Device IDs (num)");
return -1;
}
applog(LOG_INFO, "Platform devices: %d", numDevices);
if (numDevices > most_devices)
most_devices = numDevices;
}
return most_devices;
} }
static int advance(char **area, unsigned *remaining, const char *marker) static int advance(char **area, unsigned *remaining, const char *marker)

2
ocl.h

@ -24,7 +24,7 @@ typedef struct {
} _clState; } _clState;
extern char *file_contents(const char *filename, int *length); extern char *file_contents(const char *filename, int *length);
extern int clDevicesNum(); extern int clDevicesNum(void);
extern _clState *initCl(unsigned int gpu, char *name, size_t nameSize); extern _clState *initCl(unsigned int gpu, char *name, size_t nameSize);
#endif /* HAVE_OPENCL */ #endif /* HAVE_OPENCL */
#endif /* __OCL_H__ */ #endif /* __OCL_H__ */

Loading…
Cancel
Save