1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "poclu.h"
#define MAX_PLATFORMS 32
#define MAX_DEVICES 32
int
main(void)
{
cl_int err;
cl_platform_id platforms[MAX_PLATFORMS];
cl_uint nplatforms;
cl_device_id devices[MAX_DEVICES];
cl_uint ndevices;
cl_uint i, j;
err = clGetPlatformIDs(MAX_PLATFORMS, platforms, &nplatforms);
CHECK_OPENCL_ERROR_IN("clGetPlatformIDs");
if (!nplatforms)
return EXIT_FAILURE;
for (i = 0; i < nplatforms; i++)
{
err = clGetDeviceIDs(platforms[i], CL_DEVICE_TYPE_ALL, MAX_DEVICES,
devices, &ndevices);
CHECK_OPENCL_ERROR_IN("clGetDeviceIDs");
for (j = 0; j < ndevices; j++)
{
cl_long global_memsize, max_mem_alloc_size, min_max_mem_alloc_size;
err = clGetDeviceInfo(devices[j], CL_DEVICE_GLOBAL_MEM_SIZE,
sizeof(global_memsize), &global_memsize, NULL);
CHECK_OPENCL_ERROR_IN("clGetDeviceInfo");
err = clGetDeviceInfo(devices[j], CL_DEVICE_MAX_MEM_ALLOC_SIZE,
sizeof(max_mem_alloc_size), &max_mem_alloc_size,
NULL);
CHECK_OPENCL_ERROR_IN("clGetDeviceInfo");
TEST_ASSERT(global_memsize > 0);
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
min_max_mem_alloc_size = MAX (
MIN (1024 * 1024 * 1024, global_memsize / 4), 32 * 1024 * 1024);
TEST_ASSERT(max_mem_alloc_size >= min_max_mem_alloc_size);
#if CL_VERSION_3_0
char device_version[1000];
err = clGetDeviceInfo (devices[j], CL_DEVICE_VERSION, 1000,
device_version, NULL);
CHECK_OPENCL_ERROR_IN ("clGetDeviceInfo");
if (strncmp (device_version, "OpenCL 3.0", 9) == 0)
{
/* OpenCL 3.0 queries */
cl_device_atomic_capabilities atomic_memory_capability;
err = clGetDeviceInfo (devices[j],
CL_DEVICE_ATOMIC_MEMORY_CAPABILITIES,
sizeof (cl_device_atomic_capabilities),
&atomic_memory_capability, NULL);
CHECK_OPENCL_ERROR_IN ("clGetDeviceInfo");
cl_device_atomic_capabilities mask
= (CL_DEVICE_ATOMIC_ORDER_RELAXED
| CL_DEVICE_ATOMIC_SCOPE_WORK_GROUP);
/* atleast minimum mandated capability is reported */
TEST_ASSERT ((mask & atomic_memory_capability) == mask);
cl_device_atomic_capabilities atomic_fence_capability;
err = clGetDeviceInfo (devices[j],
CL_DEVICE_ATOMIC_FENCE_CAPABILITIES,
sizeof (cl_device_atomic_capabilities),
&atomic_fence_capability, NULL);
CHECK_OPENCL_ERROR_IN ("clGetDeviceInfo");
mask = (CL_DEVICE_ATOMIC_ORDER_RELAXED
| CL_DEVICE_ATOMIC_ORDER_ACQ_REL
| CL_DEVICE_ATOMIC_SCOPE_WORK_GROUP);
/* atleast minimum mandated capability is reported */
TEST_ASSERT ((mask & atomic_fence_capability) == mask);
}
#endif
CHECK_CL_ERROR (clUnloadPlatformCompiler (platforms[i]));
}
}
printf ("OK\n");
return EXIT_SUCCESS;
}
|