MCPcopy Create free account
hub / github.com/KhronosGroup/OpenCL-CTS / REGISTER_TEST

Function REGISTER_TEST

test_conformance/SVM/test_byte_granularity.cpp:51–162  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

49
50
51REGISTER_TEST(svm_byte_granularity)
52{
53 clContextWrapper contextWrapper;
54 clProgramWrapper program;
55 clKernelWrapper k1, k2;
56 clCommandQueueWrapper queues[MAXQ];
57
58 cl_uint num_devices = 0;
59 cl_int err = CL_SUCCESS;
60
61 err = create_cl_objects(device, &byte_manipulation_kernels[0],
62 &contextWrapper, &program, &queues[0], &num_devices,
63 CL_DEVICE_SVM_FINE_GRAIN_BUFFER);
64 context = contextWrapper;
65 if (err == 1)
66 return 0; // no devices capable of requested SVM level, so don't execute
67 // but count test as passing.
68 if (err < 0) return -1; // fail test.
69
70 cl_uint num_devices_plus_host = num_devices + 1;
71
72 k1 = clCreateKernel(program, "write_owned_locations", &err);
73 test_error(err, "clCreateKernel failed");
74 k2 = clCreateKernel(program, "sum_neighbor_locations", &err);
75 test_error(err, "clCreateKernel failed");
76
77
78 cl_char *pA = (cl_char *)clSVMAlloc(
79 context, CL_MEM_READ_WRITE | CL_MEM_SVM_FINE_GRAIN_BUFFER,
80 sizeof(cl_char) * num_elements, 0);
81
82 cl_uint **error_counts = (cl_uint **)malloc(sizeof(void *) * num_devices);
83
84 for (cl_uint i = 0; i < num_devices; i++)
85 {
86 error_counts[i] = (cl_uint *)clSVMAlloc(
87 context, CL_MEM_READ_WRITE | CL_MEM_SVM_FINE_GRAIN_BUFFER,
88 sizeof(cl_uint), 0);
89 *error_counts[i] = 0;
90 }
91 for (int i = 0; i < num_elements; i++) pA[i] = -1;
92
93 err |= clSetKernelArgSVMPointer(k1, 0, pA);
94 err |= clSetKernelArg(k1, 1, sizeof(cl_uint), &num_devices_plus_host);
95 test_error(err, "clSetKernelArg failed");
96
97 // get all the devices going simultaneously
98 size_t element_num = num_elements;
99 for (cl_uint d = 0; d < num_devices; d++) // device ids starting at 1.
100 {
101 err = clSetKernelArg(k1, 2, sizeof(cl_uint), &d);
102 test_error(err, "clSetKernelArg failed");
103 err = clEnqueueNDRangeKernel(queues[d], k1, 1, NULL, &element_num, NULL,
104 0, NULL, NULL);
105 test_error(err, "clEnqueueNDRangeKernel failed");
106 }
107
108 for (cl_uint d = 0; d < num_devices; d++) clFlush(queues[d]);

Callers

nothing calls this directly

Calls 1

create_cl_objectsFunction · 0.85

Tested by

no test coverage detected