7
#define SUPPORTED_PLATFORMS 4
8
#define SUPPORTED_DEVICES 16
9
#define MAX_PARAM_SIZE 1024
16
cl_uint num_platforms;
17
cl_platform_id platforms[SUPPORTED_PLATFORMS];
20
cl_device_id devices[SUPPORTED_DEVICES];
22
char param[MAX_PARAM_SIZE];
24
err = clGetPlatformIDs(SUPPORTED_PLATFORMS, platforms, &num_platforms);
25
if (err != CL_SUCCESS) {
26
printf("Can't identify platforms");
30
for (i = 0; i < num_platforms; i++) {
31
err = clGetPlatformInfo (platforms[i], CL_PLATFORM_NAME, sizeof(param), param, NULL);
32
if (err != CL_SUCCESS) {
33
puts("Unidentified platform");
35
} else printf("Platform: %s", param);
37
err = clGetPlatformInfo (platforms[i], CL_PLATFORM_VERSION, sizeof(param), param, NULL);
38
if (err == CL_SUCCESS) {
39
printf(", Version: %s", param);
42
err = clGetPlatformInfo (platforms[i], CL_PLATFORM_PROFILE, sizeof(param), param, NULL);
43
if (err == CL_SUCCESS) {
44
printf(", Profile: %s", param);
49
err = clGetDeviceIDs (platforms[i], CL_DEVICE_TYPE_ALL, SUPPORTED_DEVICES, devices, &num_devices);
50
if (err != CL_SUCCESS) {
51
puts(" Device enumeration failed");
55
for (j = 0; j < num_devices; j++) {
56
err = clGetDeviceInfo(devices[j], CL_DEVICE_TYPE, sizeof(param), param, NULL);
57
if (err != CL_SUCCESS) {
58
puts(" Unknown device");
62
switch (*param&(CL_DEVICE_TYPE_CPU|CL_DEVICE_TYPE_GPU|CL_DEVICE_TYPE_ACCELERATOR)) {
63
case CL_DEVICE_TYPE_CPU:
66
case CL_DEVICE_TYPE_GPU:
69
case CL_DEVICE_TYPE_ACCELERATOR:
70
printf(" ACCELERATOR");
74
if ((*param)&CL_DEVICE_TYPE_DEFAULT) printf(" (*)");
76
err = clGetDeviceInfo(devices[j], CL_DEVICE_NAME, sizeof(param), param, NULL);
77
if (err != CL_SUCCESS) {
78
puts(" Unknown device");
84
err = clGetDeviceInfo(devices[j], CL_DEVICE_MAX_CLOCK_FREQUENCY, sizeof(param), param, NULL);
85
if (err == CL_SUCCESS) {
86
printf(", %u MHZ", *(cl_uint*)param);
89
err = clGetDeviceInfo(devices[j], CL_DEVICE_ERROR_CORRECTION_SUPPORT, sizeof(param), param, NULL);
90
if ((err == CL_SUCCESS)&&(*(cl_bool*)param)) {
96
err = clGetDeviceInfo(devices[j], CL_DEVICE_GLOBAL_MEM_SIZE, sizeof(param), param, NULL);
97
if (err == CL_SUCCESS) {
98
printf(" Global Memory: %u MB\n", (*(cl_ulong*)param)/1024/1024);
101
err = clGetDeviceInfo(devices[j], CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof(param), param, NULL);
102
if (err == CL_SUCCESS) {
103
printf(" Maximum Allocation: %u MB\n", (*(cl_ulong*)param)/1024/1024);
106
err = clGetDeviceInfo(devices[j], CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE, sizeof(param), param, NULL);
107
if (err == CL_SUCCESS) {
108
printf(" Sufficient Alignment: %u\n", (*(cl_uint*)param));
111
err = clGetDeviceInfo(devices[j], CL_DEVICE_LOCAL_MEM_TYPE, sizeof(param), param, NULL);
112
if ((err == CL_SUCCESS)&&(*(cl_device_local_mem_type*)param == CL_LOCAL)) {
113
printf(" Local Memory");
114
err = clGetDeviceInfo(devices[j], CL_DEVICE_LOCAL_MEM_SIZE, sizeof(param), param, NULL);
115
if (err == CL_SUCCESS) {
116
printf(": %u KB", (*(cl_ulong*)param)/1024);
121
printf(" Constant Memory: ");
122
err = clGetDeviceInfo(devices[j], CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE, sizeof(param), param, NULL);
123
if (err == CL_SUCCESS) {
124
printf("%u KB", *(((cl_ulong*)param))/1024);
126
err = clGetDeviceInfo(devices[j], CL_DEVICE_MAX_CONSTANT_ARGS, sizeof(param), param, NULL);
127
if (err == CL_SUCCESS) {
128
printf(" %u parameters max", *(((cl_uint*)param)));
133
err = clGetDeviceInfo(devices[j], CL_DEVICE_ENDIAN_LITTLE, sizeof(param), param, NULL);
134
if (err == CL_SUCCESS) {
135
printf(" Endianess: %s\n", (*(cl_bool*)param)?"Little":"Big");
138
err = clGetDeviceInfo(devices[j], CL_DRIVER_VERSION, sizeof(param), param, NULL);
139
if (err == CL_SUCCESS) {
140
printf(" Driver Version: %s\n", param);
143
err = clGetDeviceInfo(devices[j], CL_DEVICE_VERSION, sizeof(param), param, NULL);
144
if (err == CL_SUCCESS) {
145
printf(" OpenCL Version: %s\n", param);
148
err = clGetDeviceInfo(devices[j], CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(param), param, NULL);
149
if (err == CL_SUCCESS) {
150
printf(" Compute Units: %u\n", *(cl_uint*)param);
153
err = clGetDeviceInfo(devices[j], CL_DEVICE_ADDRESS_BITS, sizeof(param), param, NULL);
154
if (err == CL_SUCCESS) {
155
printf(" Maximum Work-items: 2^%u (global, in one dimmension)\n", *(cl_uint*)param);
158
err = clGetDeviceInfo(devices[j], CL_DEVICE_MAX_WORK_GROUP_SIZE, sizeof(param), param, NULL);
159
if (err == CL_SUCCESS) {
160
printf(" Group Size: %u\n", *(size_t*)param);
163
err = clGetDeviceInfo(devices[j], CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS, sizeof(param), param, NULL);
164
if (err == CL_SUCCESS) {
165
dim = *(cl_uint*)param;
167
err = clGetDeviceInfo(devices[j], CL_DEVICE_MAX_WORK_ITEM_SIZES, sizeof(param), param, NULL);
168
if (err == CL_SUCCESS) {
169
printf(" Dimensions: ");
170
for (k = 0; k < dim; k++) {
172
printf("%u", *(((size_t*)param)+k));
178
err = clGetDeviceInfo(devices[j], CL_DEVICE_EXTENSIONS, sizeof(param), param, NULL);
179
if (err == CL_SUCCESS) {
180
printf(" Double Support: ");
181
if (strstr(param, "cl_khr_fp64"))
187
// printf(" Extensions: %s\n", param);
190
printf(" Double Support: No\n");