1*6467f958SSadaf Ebrahimi //
2*6467f958SSadaf Ebrahimi // Copyright (c) 2017 The Khronos Group Inc.
3*6467f958SSadaf Ebrahimi //
4*6467f958SSadaf Ebrahimi // Licensed under the Apache License, Version 2.0 (the "License");
5*6467f958SSadaf Ebrahimi // you may not use this file except in compliance with the License.
6*6467f958SSadaf Ebrahimi // You may obtain a copy of the License at
7*6467f958SSadaf Ebrahimi //
8*6467f958SSadaf Ebrahimi // http://www.apache.org/licenses/LICENSE-2.0
9*6467f958SSadaf Ebrahimi //
10*6467f958SSadaf Ebrahimi // Unless required by applicable law or agreed to in writing, software
11*6467f958SSadaf Ebrahimi // distributed under the License is distributed on an "AS IS" BASIS,
12*6467f958SSadaf Ebrahimi // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*6467f958SSadaf Ebrahimi // See the License for the specific language governing permissions and
14*6467f958SSadaf Ebrahimi // limitations under the License.
15*6467f958SSadaf Ebrahimi //
16*6467f958SSadaf Ebrahimi #include "harness/compat.h"
17*6467f958SSadaf Ebrahimi
18*6467f958SSadaf Ebrahimi #include <stdio.h>
19*6467f958SSadaf Ebrahimi #include <string.h>
20*6467f958SSadaf Ebrahimi #include <time.h>
21*6467f958SSadaf Ebrahimi #include <sys/types.h>
22*6467f958SSadaf Ebrahimi #include <sys/stat.h>
23*6467f958SSadaf Ebrahimi
24*6467f958SSadaf Ebrahimi #include "procs.h"
25*6467f958SSadaf Ebrahimi #include "harness/testHarness.h"
26*6467f958SSadaf Ebrahimi
27*6467f958SSadaf Ebrahimi #define TEST_PRIME_INT ((1<<16)+1)
28*6467f958SSadaf Ebrahimi #define TEST_PRIME_UINT ((1U<<16)+1U)
29*6467f958SSadaf Ebrahimi #define TEST_PRIME_LONG ((1LL<<32)+1LL)
30*6467f958SSadaf Ebrahimi #define TEST_PRIME_ULONG ((1ULL<<32)+1ULL)
31*6467f958SSadaf Ebrahimi #define TEST_PRIME_SHORT ((1S<<8)+1S)
32*6467f958SSadaf Ebrahimi #define TEST_PRIME_FLOAT (float)3.40282346638528860e+38
33*6467f958SSadaf Ebrahimi #define TEST_PRIME_HALF 119.f
34*6467f958SSadaf Ebrahimi #define TEST_BOOL true
35*6467f958SSadaf Ebrahimi #define TEST_PRIME_CHAR 0x77
36*6467f958SSadaf Ebrahimi
37*6467f958SSadaf Ebrahimi
38*6467f958SSadaf Ebrahimi #ifndef ulong
39*6467f958SSadaf Ebrahimi typedef unsigned long ulong;
40*6467f958SSadaf Ebrahimi #endif
41*6467f958SSadaf Ebrahimi
42*6467f958SSadaf Ebrahimi #ifndef uchar
43*6467f958SSadaf Ebrahimi typedef unsigned char uchar;
44*6467f958SSadaf Ebrahimi #endif
45*6467f958SSadaf Ebrahimi
46*6467f958SSadaf Ebrahimi #ifndef TestStruct
47*6467f958SSadaf Ebrahimi typedef struct{
48*6467f958SSadaf Ebrahimi int a;
49*6467f958SSadaf Ebrahimi float b;
50*6467f958SSadaf Ebrahimi } TestStruct;
51*6467f958SSadaf Ebrahimi #endif
52*6467f958SSadaf Ebrahimi
53*6467f958SSadaf Ebrahimi
54*6467f958SSadaf Ebrahimi
55*6467f958SSadaf Ebrahimi //--- the code for the kernel executables
56*6467f958SSadaf Ebrahimi static const char *stream_read_int_kernel_code[] = {
57*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_int(__global int *dst)\n"
58*6467f958SSadaf Ebrahimi "{\n"
59*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
60*6467f958SSadaf Ebrahimi "\n"
61*6467f958SSadaf Ebrahimi " dst[tid] = ((1<<16)+1);\n"
62*6467f958SSadaf Ebrahimi "}\n",
63*6467f958SSadaf Ebrahimi
64*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_int2(__global int2 *dst)\n"
65*6467f958SSadaf Ebrahimi "{\n"
66*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
67*6467f958SSadaf Ebrahimi "\n"
68*6467f958SSadaf Ebrahimi " dst[tid] = ((1<<16)+1);\n"
69*6467f958SSadaf Ebrahimi "}\n",
70*6467f958SSadaf Ebrahimi
71*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_int4(__global int4 *dst)\n"
72*6467f958SSadaf Ebrahimi "{\n"
73*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
74*6467f958SSadaf Ebrahimi "\n"
75*6467f958SSadaf Ebrahimi " dst[tid] = ((1<<16)+1);\n"
76*6467f958SSadaf Ebrahimi "}\n",
77*6467f958SSadaf Ebrahimi
78*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_int8(__global int8 *dst)\n"
79*6467f958SSadaf Ebrahimi "{\n"
80*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
81*6467f958SSadaf Ebrahimi "\n"
82*6467f958SSadaf Ebrahimi " dst[tid] = ((1<<16)+1);\n"
83*6467f958SSadaf Ebrahimi "}\n",
84*6467f958SSadaf Ebrahimi
85*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_int16(__global int16 *dst)\n"
86*6467f958SSadaf Ebrahimi "{\n"
87*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
88*6467f958SSadaf Ebrahimi "\n"
89*6467f958SSadaf Ebrahimi " dst[tid] = ((1<<16)+1);\n"
90*6467f958SSadaf Ebrahimi "}\n" };
91*6467f958SSadaf Ebrahimi
92*6467f958SSadaf Ebrahimi static const char *int_kernel_name[] = { "test_stream_read_int", "test_stream_read_int2", "test_stream_read_int4", "test_stream_read_int8", "test_stream_read_int16" };
93*6467f958SSadaf Ebrahimi
94*6467f958SSadaf Ebrahimi const char *stream_read_uint_kernel_code[] = {
95*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_uint(__global uint *dst)\n"
96*6467f958SSadaf Ebrahimi "{\n"
97*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
98*6467f958SSadaf Ebrahimi "\n"
99*6467f958SSadaf Ebrahimi " dst[tid] = ((1U<<16)+1U);\n"
100*6467f958SSadaf Ebrahimi "}\n",
101*6467f958SSadaf Ebrahimi
102*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_uint2(__global uint2 *dst)\n"
103*6467f958SSadaf Ebrahimi "{\n"
104*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
105*6467f958SSadaf Ebrahimi "\n"
106*6467f958SSadaf Ebrahimi " dst[tid] = ((1U<<16)+1U);\n"
107*6467f958SSadaf Ebrahimi "}\n",
108*6467f958SSadaf Ebrahimi
109*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_uint4(__global uint4 *dst)\n"
110*6467f958SSadaf Ebrahimi "{\n"
111*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
112*6467f958SSadaf Ebrahimi "\n"
113*6467f958SSadaf Ebrahimi " dst[tid] = ((1U<<16)+1U);\n"
114*6467f958SSadaf Ebrahimi "}\n",
115*6467f958SSadaf Ebrahimi
116*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_uint8(__global uint8 *dst)\n"
117*6467f958SSadaf Ebrahimi "{\n"
118*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
119*6467f958SSadaf Ebrahimi "\n"
120*6467f958SSadaf Ebrahimi " dst[tid] = ((1U<<16)+1U);\n"
121*6467f958SSadaf Ebrahimi "}\n",
122*6467f958SSadaf Ebrahimi
123*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_uint16(__global uint16 *dst)\n"
124*6467f958SSadaf Ebrahimi "{\n"
125*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
126*6467f958SSadaf Ebrahimi "\n"
127*6467f958SSadaf Ebrahimi " dst[tid] = ((1U<<16)+1U);\n"
128*6467f958SSadaf Ebrahimi "}\n" };
129*6467f958SSadaf Ebrahimi
130*6467f958SSadaf Ebrahimi const char *uint_kernel_name[] = { "test_stream_read_uint", "test_stream_read_uint2", "test_stream_read_uint4", "test_stream_read_uint8", "test_stream_read_uint16" };
131*6467f958SSadaf Ebrahimi
132*6467f958SSadaf Ebrahimi const char *stream_read_long_kernel_code[] = {
133*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_long(__global long *dst)\n"
134*6467f958SSadaf Ebrahimi "{\n"
135*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
136*6467f958SSadaf Ebrahimi "\n"
137*6467f958SSadaf Ebrahimi " dst[tid] = ((1L<<32)+1L);\n"
138*6467f958SSadaf Ebrahimi "}\n",
139*6467f958SSadaf Ebrahimi
140*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_long2(__global long2 *dst)\n"
141*6467f958SSadaf Ebrahimi "{\n"
142*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
143*6467f958SSadaf Ebrahimi "\n"
144*6467f958SSadaf Ebrahimi " dst[tid] = ((1L<<32)+1L);\n"
145*6467f958SSadaf Ebrahimi "}\n",
146*6467f958SSadaf Ebrahimi
147*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_long4(__global long4 *dst)\n"
148*6467f958SSadaf Ebrahimi "{\n"
149*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
150*6467f958SSadaf Ebrahimi "\n"
151*6467f958SSadaf Ebrahimi " dst[tid] = ((1L<<32)+1L);\n"
152*6467f958SSadaf Ebrahimi "}\n",
153*6467f958SSadaf Ebrahimi
154*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_long8(__global long8 *dst)\n"
155*6467f958SSadaf Ebrahimi "{\n"
156*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
157*6467f958SSadaf Ebrahimi "\n"
158*6467f958SSadaf Ebrahimi " dst[tid] = ((1L<<32)+1L);\n"
159*6467f958SSadaf Ebrahimi "}\n",
160*6467f958SSadaf Ebrahimi
161*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_long16(__global long16 *dst)\n"
162*6467f958SSadaf Ebrahimi "{\n"
163*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
164*6467f958SSadaf Ebrahimi "\n"
165*6467f958SSadaf Ebrahimi " dst[tid] = ((1L<<32)+1L);\n"
166*6467f958SSadaf Ebrahimi "}\n" };
167*6467f958SSadaf Ebrahimi
168*6467f958SSadaf Ebrahimi const char *long_kernel_name[] = { "test_stream_read_long", "test_stream_read_long2", "test_stream_read_long4", "test_stream_read_long8", "test_stream_read_long16" };
169*6467f958SSadaf Ebrahimi
170*6467f958SSadaf Ebrahimi const char *stream_read_ulong_kernel_code[] = {
171*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_ulong(__global ulong *dst)\n"
172*6467f958SSadaf Ebrahimi "{\n"
173*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
174*6467f958SSadaf Ebrahimi "\n"
175*6467f958SSadaf Ebrahimi " dst[tid] = ((1UL<<32)+1UL);\n"
176*6467f958SSadaf Ebrahimi "}\n",
177*6467f958SSadaf Ebrahimi
178*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_ulong2(__global ulong2 *dst)\n"
179*6467f958SSadaf Ebrahimi "{\n"
180*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
181*6467f958SSadaf Ebrahimi "\n"
182*6467f958SSadaf Ebrahimi " dst[tid] = ((1UL<<32)+1UL);\n"
183*6467f958SSadaf Ebrahimi "}\n",
184*6467f958SSadaf Ebrahimi
185*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_ulong4(__global ulong4 *dst)\n"
186*6467f958SSadaf Ebrahimi "{\n"
187*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
188*6467f958SSadaf Ebrahimi "\n"
189*6467f958SSadaf Ebrahimi " dst[tid] = ((1UL<<32)+1UL);\n"
190*6467f958SSadaf Ebrahimi "}\n",
191*6467f958SSadaf Ebrahimi
192*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_ulong8(__global ulong8 *dst)\n"
193*6467f958SSadaf Ebrahimi "{\n"
194*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
195*6467f958SSadaf Ebrahimi "\n"
196*6467f958SSadaf Ebrahimi " dst[tid] = ((1UL<<32)+1UL);\n"
197*6467f958SSadaf Ebrahimi "}\n",
198*6467f958SSadaf Ebrahimi
199*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_ulong16(__global ulong16 *dst)\n"
200*6467f958SSadaf Ebrahimi "{\n"
201*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
202*6467f958SSadaf Ebrahimi "\n"
203*6467f958SSadaf Ebrahimi " dst[tid] = ((1UL<<32)+1UL);\n"
204*6467f958SSadaf Ebrahimi "}\n" };
205*6467f958SSadaf Ebrahimi
206*6467f958SSadaf Ebrahimi const char *ulong_kernel_name[] = { "test_stream_read_ulong", "test_stream_read_ulong2", "test_stream_read_ulong4", "test_stream_read_ulong8", "test_stream_read_ulong16" };
207*6467f958SSadaf Ebrahimi
208*6467f958SSadaf Ebrahimi const char *stream_read_short_kernel_code[] = {
209*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_short(__global short *dst)\n"
210*6467f958SSadaf Ebrahimi "{\n"
211*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
212*6467f958SSadaf Ebrahimi "\n"
213*6467f958SSadaf Ebrahimi " dst[tid] = (short)((1<<8)+1);\n"
214*6467f958SSadaf Ebrahimi "}\n",
215*6467f958SSadaf Ebrahimi
216*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_short2(__global short2 *dst)\n"
217*6467f958SSadaf Ebrahimi "{\n"
218*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
219*6467f958SSadaf Ebrahimi "\n"
220*6467f958SSadaf Ebrahimi " dst[tid] = (short)((1<<8)+1);\n"
221*6467f958SSadaf Ebrahimi "}\n",
222*6467f958SSadaf Ebrahimi
223*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_short4(__global short4 *dst)\n"
224*6467f958SSadaf Ebrahimi "{\n"
225*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
226*6467f958SSadaf Ebrahimi "\n"
227*6467f958SSadaf Ebrahimi " dst[tid] = (short)((1<<8)+1);\n"
228*6467f958SSadaf Ebrahimi "}\n",
229*6467f958SSadaf Ebrahimi
230*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_short8(__global short8 *dst)\n"
231*6467f958SSadaf Ebrahimi "{\n"
232*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
233*6467f958SSadaf Ebrahimi "\n"
234*6467f958SSadaf Ebrahimi " dst[tid] = (short)((1<<8)+1);\n"
235*6467f958SSadaf Ebrahimi "}\n",
236*6467f958SSadaf Ebrahimi
237*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_short16(__global short16 *dst)\n"
238*6467f958SSadaf Ebrahimi "{\n"
239*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
240*6467f958SSadaf Ebrahimi "\n"
241*6467f958SSadaf Ebrahimi " dst[tid] = (short)((1<<8)+1);\n"
242*6467f958SSadaf Ebrahimi "}\n" };
243*6467f958SSadaf Ebrahimi
244*6467f958SSadaf Ebrahimi const char *short_kernel_name[] = { "test_stream_read_short", "test_stream_read_short2", "test_stream_read_short4", "test_stream_read_short8", "test_stream_read_short16" };
245*6467f958SSadaf Ebrahimi
246*6467f958SSadaf Ebrahimi
247*6467f958SSadaf Ebrahimi const char *stream_read_ushort_kernel_code[] = {
248*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_ushort(__global ushort *dst)\n"
249*6467f958SSadaf Ebrahimi "{\n"
250*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
251*6467f958SSadaf Ebrahimi "\n"
252*6467f958SSadaf Ebrahimi " dst[tid] = (ushort)((1<<8)+1);\n"
253*6467f958SSadaf Ebrahimi "}\n",
254*6467f958SSadaf Ebrahimi
255*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_ushort2(__global ushort2 *dst)\n"
256*6467f958SSadaf Ebrahimi "{\n"
257*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
258*6467f958SSadaf Ebrahimi "\n"
259*6467f958SSadaf Ebrahimi " dst[tid] = (ushort)((1<<8)+1);\n"
260*6467f958SSadaf Ebrahimi "}\n",
261*6467f958SSadaf Ebrahimi
262*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_ushort4(__global ushort4 *dst)\n"
263*6467f958SSadaf Ebrahimi "{\n"
264*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
265*6467f958SSadaf Ebrahimi "\n"
266*6467f958SSadaf Ebrahimi " dst[tid] = (ushort)((1<<8)+1);\n"
267*6467f958SSadaf Ebrahimi "}\n",
268*6467f958SSadaf Ebrahimi
269*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_ushort8(__global ushort8 *dst)\n"
270*6467f958SSadaf Ebrahimi "{\n"
271*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
272*6467f958SSadaf Ebrahimi "\n"
273*6467f958SSadaf Ebrahimi " dst[tid] = (ushort)((1<<8)+1);\n"
274*6467f958SSadaf Ebrahimi "}\n",
275*6467f958SSadaf Ebrahimi
276*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_ushort16(__global ushort16 *dst)\n"
277*6467f958SSadaf Ebrahimi "{\n"
278*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
279*6467f958SSadaf Ebrahimi "\n"
280*6467f958SSadaf Ebrahimi " dst[tid] = (ushort)((1<<8)+1);\n"
281*6467f958SSadaf Ebrahimi "}\n" };
282*6467f958SSadaf Ebrahimi
283*6467f958SSadaf Ebrahimi static const char *ushort_kernel_name[] = { "test_stream_read_ushort", "test_stream_read_ushort2", "test_stream_read_ushort4", "test_stream_read_ushort8", "test_stream_read_ushort16" };
284*6467f958SSadaf Ebrahimi
285*6467f958SSadaf Ebrahimi
286*6467f958SSadaf Ebrahimi const char *stream_read_float_kernel_code[] = {
287*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_float(__global float *dst)\n"
288*6467f958SSadaf Ebrahimi "{\n"
289*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
290*6467f958SSadaf Ebrahimi "\n"
291*6467f958SSadaf Ebrahimi " dst[tid] = (float)3.40282346638528860e+38;\n"
292*6467f958SSadaf Ebrahimi "}\n",
293*6467f958SSadaf Ebrahimi
294*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_float2(__global float2 *dst)\n"
295*6467f958SSadaf Ebrahimi "{\n"
296*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
297*6467f958SSadaf Ebrahimi "\n"
298*6467f958SSadaf Ebrahimi " dst[tid] = (float)3.40282346638528860e+38;\n"
299*6467f958SSadaf Ebrahimi "}\n",
300*6467f958SSadaf Ebrahimi
301*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_float4(__global float4 *dst)\n"
302*6467f958SSadaf Ebrahimi "{\n"
303*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
304*6467f958SSadaf Ebrahimi "\n"
305*6467f958SSadaf Ebrahimi " dst[tid] = (float)3.40282346638528860e+38;\n"
306*6467f958SSadaf Ebrahimi "}\n",
307*6467f958SSadaf Ebrahimi
308*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_float8(__global float8 *dst)\n"
309*6467f958SSadaf Ebrahimi "{\n"
310*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
311*6467f958SSadaf Ebrahimi "\n"
312*6467f958SSadaf Ebrahimi " dst[tid] = (float)3.40282346638528860e+38;\n"
313*6467f958SSadaf Ebrahimi "}\n",
314*6467f958SSadaf Ebrahimi
315*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_float16(__global float16 *dst)\n"
316*6467f958SSadaf Ebrahimi "{\n"
317*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
318*6467f958SSadaf Ebrahimi "\n"
319*6467f958SSadaf Ebrahimi " dst[tid] = (float)3.40282346638528860e+38;\n"
320*6467f958SSadaf Ebrahimi "}\n" };
321*6467f958SSadaf Ebrahimi
322*6467f958SSadaf Ebrahimi const char *float_kernel_name[] = { "test_stream_read_float", "test_stream_read_float2", "test_stream_read_float4", "test_stream_read_float8", "test_stream_read_float16" };
323*6467f958SSadaf Ebrahimi
324*6467f958SSadaf Ebrahimi
325*6467f958SSadaf Ebrahimi const char *stream_read_half_kernel_code[] = {
326*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_half(__global half *dst)\n"
327*6467f958SSadaf Ebrahimi "{\n"
328*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
329*6467f958SSadaf Ebrahimi "\n"
330*6467f958SSadaf Ebrahimi " dst[tid] = (half)119;\n"
331*6467f958SSadaf Ebrahimi "}\n",
332*6467f958SSadaf Ebrahimi
333*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_half2(__global half2 *dst)\n"
334*6467f958SSadaf Ebrahimi "{\n"
335*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
336*6467f958SSadaf Ebrahimi "\n"
337*6467f958SSadaf Ebrahimi " dst[tid] = (half)119;\n"
338*6467f958SSadaf Ebrahimi "}\n",
339*6467f958SSadaf Ebrahimi
340*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_half4(__global half4 *dst)\n"
341*6467f958SSadaf Ebrahimi "{\n"
342*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
343*6467f958SSadaf Ebrahimi "\n"
344*6467f958SSadaf Ebrahimi " dst[tid] = (half)119;\n"
345*6467f958SSadaf Ebrahimi "}\n",
346*6467f958SSadaf Ebrahimi
347*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_half8(__global half8 *dst)\n"
348*6467f958SSadaf Ebrahimi "{\n"
349*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
350*6467f958SSadaf Ebrahimi "\n"
351*6467f958SSadaf Ebrahimi " dst[tid] = (half)119;\n"
352*6467f958SSadaf Ebrahimi "}\n",
353*6467f958SSadaf Ebrahimi
354*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_half16(__global half16 *dst)\n"
355*6467f958SSadaf Ebrahimi "{\n"
356*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
357*6467f958SSadaf Ebrahimi "\n"
358*6467f958SSadaf Ebrahimi " dst[tid] = (half)119;\n"
359*6467f958SSadaf Ebrahimi "}\n" };
360*6467f958SSadaf Ebrahimi
361*6467f958SSadaf Ebrahimi const char *half_kernel_name[] = { "test_stream_read_half", "test_stream_read_half2", "test_stream_read_half4", "test_stream_read_half8", "test_stream_read_half16" };
362*6467f958SSadaf Ebrahimi
363*6467f958SSadaf Ebrahimi
364*6467f958SSadaf Ebrahimi const char *stream_read_char_kernel_code[] = {
365*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_char(__global char *dst)\n"
366*6467f958SSadaf Ebrahimi "{\n"
367*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
368*6467f958SSadaf Ebrahimi "\n"
369*6467f958SSadaf Ebrahimi " dst[tid] = (char)'w';\n"
370*6467f958SSadaf Ebrahimi "}\n",
371*6467f958SSadaf Ebrahimi
372*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_char2(__global char2 *dst)\n"
373*6467f958SSadaf Ebrahimi "{\n"
374*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
375*6467f958SSadaf Ebrahimi "\n"
376*6467f958SSadaf Ebrahimi " dst[tid] = (char)'w';\n"
377*6467f958SSadaf Ebrahimi "}\n",
378*6467f958SSadaf Ebrahimi
379*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_char4(__global char4 *dst)\n"
380*6467f958SSadaf Ebrahimi "{\n"
381*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
382*6467f958SSadaf Ebrahimi "\n"
383*6467f958SSadaf Ebrahimi " dst[tid] = (char)'w';\n"
384*6467f958SSadaf Ebrahimi "}\n",
385*6467f958SSadaf Ebrahimi
386*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_char8(__global char8 *dst)\n"
387*6467f958SSadaf Ebrahimi "{\n"
388*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
389*6467f958SSadaf Ebrahimi "\n"
390*6467f958SSadaf Ebrahimi " dst[tid] = (char)'w';\n"
391*6467f958SSadaf Ebrahimi "}\n",
392*6467f958SSadaf Ebrahimi
393*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_char16(__global char16 *dst)\n"
394*6467f958SSadaf Ebrahimi "{\n"
395*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
396*6467f958SSadaf Ebrahimi "\n"
397*6467f958SSadaf Ebrahimi " dst[tid] = (char)'w';\n"
398*6467f958SSadaf Ebrahimi "}\n" };
399*6467f958SSadaf Ebrahimi
400*6467f958SSadaf Ebrahimi const char *char_kernel_name[] = { "test_stream_read_char", "test_stream_read_char2", "test_stream_read_char4", "test_stream_read_char8", "test_stream_read_char16" };
401*6467f958SSadaf Ebrahimi
402*6467f958SSadaf Ebrahimi
403*6467f958SSadaf Ebrahimi const char *stream_read_uchar_kernel_code[] = {
404*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_uchar(__global uchar *dst)\n"
405*6467f958SSadaf Ebrahimi "{\n"
406*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
407*6467f958SSadaf Ebrahimi "\n"
408*6467f958SSadaf Ebrahimi " dst[tid] = 'w';\n"
409*6467f958SSadaf Ebrahimi "}\n",
410*6467f958SSadaf Ebrahimi
411*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_uchar2(__global uchar2 *dst)\n"
412*6467f958SSadaf Ebrahimi "{\n"
413*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
414*6467f958SSadaf Ebrahimi "\n"
415*6467f958SSadaf Ebrahimi " dst[tid] = (uchar)'w';\n"
416*6467f958SSadaf Ebrahimi "}\n",
417*6467f958SSadaf Ebrahimi
418*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_uchar4(__global uchar4 *dst)\n"
419*6467f958SSadaf Ebrahimi "{\n"
420*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
421*6467f958SSadaf Ebrahimi "\n"
422*6467f958SSadaf Ebrahimi " dst[tid] = (uchar)'w';\n"
423*6467f958SSadaf Ebrahimi "}\n",
424*6467f958SSadaf Ebrahimi
425*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_uchar8(__global uchar8 *dst)\n"
426*6467f958SSadaf Ebrahimi "{\n"
427*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
428*6467f958SSadaf Ebrahimi "\n"
429*6467f958SSadaf Ebrahimi " dst[tid] = (uchar)'w';\n"
430*6467f958SSadaf Ebrahimi "}\n",
431*6467f958SSadaf Ebrahimi
432*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_uchar16(__global uchar16 *dst)\n"
433*6467f958SSadaf Ebrahimi "{\n"
434*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
435*6467f958SSadaf Ebrahimi "\n"
436*6467f958SSadaf Ebrahimi " dst[tid] = (uchar)'w';\n"
437*6467f958SSadaf Ebrahimi "}\n" };
438*6467f958SSadaf Ebrahimi
439*6467f958SSadaf Ebrahimi const char *uchar_kernel_name[] = { "test_stream_read_uchar", "test_stream_read_uchar2", "test_stream_read_uchar4", "test_stream_read_uchar8", "test_stream_read_uchar16" };
440*6467f958SSadaf Ebrahimi
441*6467f958SSadaf Ebrahimi
442*6467f958SSadaf Ebrahimi const char *stream_read_struct_kernel_code[] = {
443*6467f958SSadaf Ebrahimi "typedef struct{\n"
444*6467f958SSadaf Ebrahimi "int a;\n"
445*6467f958SSadaf Ebrahimi "float b;\n"
446*6467f958SSadaf Ebrahimi "} TestStruct;\n"
447*6467f958SSadaf Ebrahimi "__kernel void test_stream_read_struct(__global TestStruct *dst)\n"
448*6467f958SSadaf Ebrahimi "{\n"
449*6467f958SSadaf Ebrahimi " int tid = get_global_id(0);\n"
450*6467f958SSadaf Ebrahimi "\n"
451*6467f958SSadaf Ebrahimi " dst[tid].a = ((1<<16)+1);\n"
452*6467f958SSadaf Ebrahimi " dst[tid].b = (float)3.40282346638528860e+38;\n"
453*6467f958SSadaf Ebrahimi "}\n" };
454*6467f958SSadaf Ebrahimi
455*6467f958SSadaf Ebrahimi const char *struct_kernel_name[] = { "test_stream_read_struct" };
456*6467f958SSadaf Ebrahimi
457*6467f958SSadaf Ebrahimi
458*6467f958SSadaf Ebrahimi
459*6467f958SSadaf Ebrahimi //--- the verify functions
verify_read_int(void * ptr,int n)460*6467f958SSadaf Ebrahimi static int verify_read_int(void *ptr, int n)
461*6467f958SSadaf Ebrahimi {
462*6467f958SSadaf Ebrahimi int i;
463*6467f958SSadaf Ebrahimi int *outptr = (int *)ptr;
464*6467f958SSadaf Ebrahimi
465*6467f958SSadaf Ebrahimi for (i=0; i<n; i++){
466*6467f958SSadaf Ebrahimi if( outptr[i] != TEST_PRIME_INT )
467*6467f958SSadaf Ebrahimi return -1;
468*6467f958SSadaf Ebrahimi }
469*6467f958SSadaf Ebrahimi
470*6467f958SSadaf Ebrahimi return 0;
471*6467f958SSadaf Ebrahimi }
472*6467f958SSadaf Ebrahimi
473*6467f958SSadaf Ebrahimi
verify_read_uint(void * ptr,int n)474*6467f958SSadaf Ebrahimi static int verify_read_uint(void *ptr, int n)
475*6467f958SSadaf Ebrahimi {
476*6467f958SSadaf Ebrahimi int i;
477*6467f958SSadaf Ebrahimi cl_uint *outptr = (cl_uint *)ptr;
478*6467f958SSadaf Ebrahimi
479*6467f958SSadaf Ebrahimi for (i=0; i<n; i++){
480*6467f958SSadaf Ebrahimi if( outptr[i] != TEST_PRIME_UINT )
481*6467f958SSadaf Ebrahimi return -1;
482*6467f958SSadaf Ebrahimi }
483*6467f958SSadaf Ebrahimi
484*6467f958SSadaf Ebrahimi return 0;
485*6467f958SSadaf Ebrahimi }
486*6467f958SSadaf Ebrahimi
487*6467f958SSadaf Ebrahimi
verify_read_long(void * ptr,int n)488*6467f958SSadaf Ebrahimi static int verify_read_long(void *ptr, int n)
489*6467f958SSadaf Ebrahimi {
490*6467f958SSadaf Ebrahimi int i;
491*6467f958SSadaf Ebrahimi cl_long *outptr = (cl_long *)ptr;
492*6467f958SSadaf Ebrahimi
493*6467f958SSadaf Ebrahimi for (i=0; i<n; i++){
494*6467f958SSadaf Ebrahimi if( outptr[i] != TEST_PRIME_LONG )
495*6467f958SSadaf Ebrahimi return -1;
496*6467f958SSadaf Ebrahimi }
497*6467f958SSadaf Ebrahimi
498*6467f958SSadaf Ebrahimi return 0;
499*6467f958SSadaf Ebrahimi }
500*6467f958SSadaf Ebrahimi
501*6467f958SSadaf Ebrahimi
verify_read_ulong(void * ptr,int n)502*6467f958SSadaf Ebrahimi static int verify_read_ulong(void *ptr, int n)
503*6467f958SSadaf Ebrahimi {
504*6467f958SSadaf Ebrahimi int i;
505*6467f958SSadaf Ebrahimi cl_ulong *outptr = (cl_ulong *)ptr;
506*6467f958SSadaf Ebrahimi
507*6467f958SSadaf Ebrahimi for (i=0; i<n; i++){
508*6467f958SSadaf Ebrahimi if( outptr[i] != TEST_PRIME_ULONG )
509*6467f958SSadaf Ebrahimi return -1;
510*6467f958SSadaf Ebrahimi }
511*6467f958SSadaf Ebrahimi
512*6467f958SSadaf Ebrahimi return 0;
513*6467f958SSadaf Ebrahimi }
514*6467f958SSadaf Ebrahimi
515*6467f958SSadaf Ebrahimi
verify_read_short(void * ptr,int n)516*6467f958SSadaf Ebrahimi static int verify_read_short(void *ptr, int n)
517*6467f958SSadaf Ebrahimi {
518*6467f958SSadaf Ebrahimi int i;
519*6467f958SSadaf Ebrahimi short *outptr = (short *)ptr;
520*6467f958SSadaf Ebrahimi
521*6467f958SSadaf Ebrahimi for (i=0; i<n; i++){
522*6467f958SSadaf Ebrahimi if( outptr[i] != (short)((1<<8)+1) )
523*6467f958SSadaf Ebrahimi return -1;
524*6467f958SSadaf Ebrahimi }
525*6467f958SSadaf Ebrahimi
526*6467f958SSadaf Ebrahimi return 0;
527*6467f958SSadaf Ebrahimi }
528*6467f958SSadaf Ebrahimi
529*6467f958SSadaf Ebrahimi
verify_read_ushort(void * ptr,int n)530*6467f958SSadaf Ebrahimi static int verify_read_ushort(void *ptr, int n)
531*6467f958SSadaf Ebrahimi {
532*6467f958SSadaf Ebrahimi int i;
533*6467f958SSadaf Ebrahimi cl_ushort *outptr = (cl_ushort *)ptr;
534*6467f958SSadaf Ebrahimi
535*6467f958SSadaf Ebrahimi for (i=0; i<n; i++){
536*6467f958SSadaf Ebrahimi if( outptr[i] != (cl_ushort)((1<<8)+1) )
537*6467f958SSadaf Ebrahimi return -1;
538*6467f958SSadaf Ebrahimi }
539*6467f958SSadaf Ebrahimi
540*6467f958SSadaf Ebrahimi return 0;
541*6467f958SSadaf Ebrahimi }
542*6467f958SSadaf Ebrahimi
543*6467f958SSadaf Ebrahimi
verify_read_float(void * ptr,int n)544*6467f958SSadaf Ebrahimi static int verify_read_float( void *ptr, int n )
545*6467f958SSadaf Ebrahimi {
546*6467f958SSadaf Ebrahimi int i;
547*6467f958SSadaf Ebrahimi float *outptr = (float *)ptr;
548*6467f958SSadaf Ebrahimi
549*6467f958SSadaf Ebrahimi for (i=0; i<n; i++){
550*6467f958SSadaf Ebrahimi if( outptr[i] != TEST_PRIME_FLOAT )
551*6467f958SSadaf Ebrahimi return -1;
552*6467f958SSadaf Ebrahimi }
553*6467f958SSadaf Ebrahimi
554*6467f958SSadaf Ebrahimi return 0;
555*6467f958SSadaf Ebrahimi }
556*6467f958SSadaf Ebrahimi
557*6467f958SSadaf Ebrahimi
verify_read_half(void * ptr,int n)558*6467f958SSadaf Ebrahimi static int verify_read_half( void *ptr, int n )
559*6467f958SSadaf Ebrahimi {
560*6467f958SSadaf Ebrahimi int i;
561*6467f958SSadaf Ebrahimi float *outptr = (float *)ptr;
562*6467f958SSadaf Ebrahimi
563*6467f958SSadaf Ebrahimi for( i = 0; i < n / 2; i++ ){
564*6467f958SSadaf Ebrahimi if( outptr[i] != TEST_PRIME_HALF )
565*6467f958SSadaf Ebrahimi return -1;
566*6467f958SSadaf Ebrahimi }
567*6467f958SSadaf Ebrahimi
568*6467f958SSadaf Ebrahimi return 0;
569*6467f958SSadaf Ebrahimi }
570*6467f958SSadaf Ebrahimi
571*6467f958SSadaf Ebrahimi
verify_read_char(void * ptr,int n)572*6467f958SSadaf Ebrahimi static int verify_read_char(void *ptr, int n)
573*6467f958SSadaf Ebrahimi {
574*6467f958SSadaf Ebrahimi int i;
575*6467f958SSadaf Ebrahimi char *outptr = (char *)ptr;
576*6467f958SSadaf Ebrahimi
577*6467f958SSadaf Ebrahimi for (i=0; i<n; i++){
578*6467f958SSadaf Ebrahimi if( outptr[i] != TEST_PRIME_CHAR )
579*6467f958SSadaf Ebrahimi return -1;
580*6467f958SSadaf Ebrahimi }
581*6467f958SSadaf Ebrahimi
582*6467f958SSadaf Ebrahimi return 0;
583*6467f958SSadaf Ebrahimi }
584*6467f958SSadaf Ebrahimi
585*6467f958SSadaf Ebrahimi
verify_read_uchar(void * ptr,int n)586*6467f958SSadaf Ebrahimi static int verify_read_uchar( void *ptr, int n )
587*6467f958SSadaf Ebrahimi {
588*6467f958SSadaf Ebrahimi int i;
589*6467f958SSadaf Ebrahimi uchar *outptr = (uchar *)ptr;
590*6467f958SSadaf Ebrahimi
591*6467f958SSadaf Ebrahimi for (i=0; i<n; i++){
592*6467f958SSadaf Ebrahimi if( outptr[i] != TEST_PRIME_CHAR )
593*6467f958SSadaf Ebrahimi return -1;
594*6467f958SSadaf Ebrahimi }
595*6467f958SSadaf Ebrahimi
596*6467f958SSadaf Ebrahimi return 0;
597*6467f958SSadaf Ebrahimi }
598*6467f958SSadaf Ebrahimi
599*6467f958SSadaf Ebrahimi
verify_read_struct(void * ptr,int n)600*6467f958SSadaf Ebrahimi static int verify_read_struct( void *ptr, int n )
601*6467f958SSadaf Ebrahimi {
602*6467f958SSadaf Ebrahimi int i;
603*6467f958SSadaf Ebrahimi TestStruct *outptr = (TestStruct *)ptr;
604*6467f958SSadaf Ebrahimi
605*6467f958SSadaf Ebrahimi for ( i = 0; i < n; i++ ){
606*6467f958SSadaf Ebrahimi if( ( outptr[i].a != TEST_PRIME_INT ) ||
607*6467f958SSadaf Ebrahimi ( outptr[i].b != TEST_PRIME_FLOAT ) )
608*6467f958SSadaf Ebrahimi return -1;
609*6467f958SSadaf Ebrahimi }
610*6467f958SSadaf Ebrahimi
611*6467f958SSadaf Ebrahimi return 0;
612*6467f958SSadaf Ebrahimi }
613*6467f958SSadaf Ebrahimi
614*6467f958SSadaf Ebrahimi //----- the test functions
test_stream_read(cl_device_id device,cl_context context,cl_command_queue queue,int num_elements,size_t size,const char * type,int loops,const char * kernelCode[],const char * kernelName[],int (* fn)(void *,int))615*6467f958SSadaf Ebrahimi int test_stream_read( cl_device_id device, cl_context context, cl_command_queue queue, int num_elements, size_t size, const char *type, int loops,
616*6467f958SSadaf Ebrahimi const char *kernelCode[], const char *kernelName[], int (*fn)(void *,int) )
617*6467f958SSadaf Ebrahimi {
618*6467f958SSadaf Ebrahimi cl_mem streams[5];
619*6467f958SSadaf Ebrahimi void *outptr[5];
620*6467f958SSadaf Ebrahimi cl_program program[5];
621*6467f958SSadaf Ebrahimi cl_kernel kernel[5];
622*6467f958SSadaf Ebrahimi cl_event readEvent;
623*6467f958SSadaf Ebrahimi cl_ulong queueStart, submitStart, readStart, readEnd;
624*6467f958SSadaf Ebrahimi size_t threads[1];
625*6467f958SSadaf Ebrahimi int err, err_count = 0;
626*6467f958SSadaf Ebrahimi int i;
627*6467f958SSadaf Ebrahimi size_t ptrSizes[5];
628*6467f958SSadaf Ebrahimi
629*6467f958SSadaf Ebrahimi threads[0] = (size_t)num_elements;
630*6467f958SSadaf Ebrahimi
631*6467f958SSadaf Ebrahimi ptrSizes[0] = size;
632*6467f958SSadaf Ebrahimi ptrSizes[1] = ptrSizes[0] << 1;
633*6467f958SSadaf Ebrahimi ptrSizes[2] = ptrSizes[1] << 1;
634*6467f958SSadaf Ebrahimi ptrSizes[3] = ptrSizes[2] << 1;
635*6467f958SSadaf Ebrahimi ptrSizes[4] = ptrSizes[3] << 1;
636*6467f958SSadaf Ebrahimi for( i = 0; i < loops; i++ ){
637*6467f958SSadaf Ebrahimi outptr[i] = malloc( ptrSizes[i] * num_elements );
638*6467f958SSadaf Ebrahimi if( ! outptr[i] ){
639*6467f958SSadaf Ebrahimi log_error( " unable to allocate %d bytes for outptr\n", (int)( ptrSizes[i] * num_elements ) );
640*6467f958SSadaf Ebrahimi return -1;
641*6467f958SSadaf Ebrahimi }
642*6467f958SSadaf Ebrahimi streams[i] = clCreateBuffer(context, CL_MEM_READ_WRITE,
643*6467f958SSadaf Ebrahimi ptrSizes[i] * num_elements, NULL, &err);
644*6467f958SSadaf Ebrahimi if( !streams[i] ){
645*6467f958SSadaf Ebrahimi log_error( " clCreateBuffer failed\n" );
646*6467f958SSadaf Ebrahimi free( outptr[i] );
647*6467f958SSadaf Ebrahimi return -1;
648*6467f958SSadaf Ebrahimi }
649*6467f958SSadaf Ebrahimi err = create_single_kernel_helper( context, &program[i], &kernel[i], 1, &kernelCode[i], kernelName[i] );
650*6467f958SSadaf Ebrahimi if( err ){
651*6467f958SSadaf Ebrahimi log_error( " Error creating program for %s\n", type );
652*6467f958SSadaf Ebrahimi clReleaseMemObject(streams[i]);
653*6467f958SSadaf Ebrahimi free( outptr[i] );
654*6467f958SSadaf Ebrahimi return -1;
655*6467f958SSadaf Ebrahimi }
656*6467f958SSadaf Ebrahimi
657*6467f958SSadaf Ebrahimi err = clSetKernelArg( kernel[i], 0, sizeof( cl_mem ), (void *)&streams[i] );
658*6467f958SSadaf Ebrahimi if( err != CL_SUCCESS ){
659*6467f958SSadaf Ebrahimi print_error( err, "clSetKernelArg failed" );
660*6467f958SSadaf Ebrahimi clReleaseProgram( program[i] );
661*6467f958SSadaf Ebrahimi clReleaseKernel( kernel[i] );
662*6467f958SSadaf Ebrahimi clReleaseMemObject( streams[i] );
663*6467f958SSadaf Ebrahimi free( outptr[i] );
664*6467f958SSadaf Ebrahimi return -1;
665*6467f958SSadaf Ebrahimi }
666*6467f958SSadaf Ebrahimi
667*6467f958SSadaf Ebrahimi err = clEnqueueNDRangeKernel( queue, kernel[i], 1, NULL, threads, NULL, 0, NULL, NULL );
668*6467f958SSadaf Ebrahimi
669*6467f958SSadaf Ebrahimi if( err != CL_SUCCESS ){
670*6467f958SSadaf Ebrahimi print_error( err, "clEnqueueNDRangeKernel failed" );
671*6467f958SSadaf Ebrahimi clReleaseKernel( kernel[i] );
672*6467f958SSadaf Ebrahimi clReleaseProgram( program[i] );
673*6467f958SSadaf Ebrahimi clReleaseMemObject( streams[i] );
674*6467f958SSadaf Ebrahimi free( outptr[i] );
675*6467f958SSadaf Ebrahimi return -1;
676*6467f958SSadaf Ebrahimi }
677*6467f958SSadaf Ebrahimi
678*6467f958SSadaf Ebrahimi err = clEnqueueReadBuffer( queue, streams[i], false, 0, ptrSizes[i]*num_elements, outptr[i], 0, NULL, &readEvent );
679*6467f958SSadaf Ebrahimi if( err != CL_SUCCESS ){
680*6467f958SSadaf Ebrahimi print_error( err, "clEnqueueReadBuffer failed" );
681*6467f958SSadaf Ebrahimi clReleaseKernel( kernel[i] );
682*6467f958SSadaf Ebrahimi clReleaseProgram( program[i] );
683*6467f958SSadaf Ebrahimi clReleaseMemObject( streams[i] );
684*6467f958SSadaf Ebrahimi free( outptr[i] );
685*6467f958SSadaf Ebrahimi return -1;
686*6467f958SSadaf Ebrahimi }
687*6467f958SSadaf Ebrahimi err = clWaitForEvents( 1, &readEvent );
688*6467f958SSadaf Ebrahimi if( err != CL_SUCCESS )
689*6467f958SSadaf Ebrahimi {
690*6467f958SSadaf Ebrahimi print_error( err, "Unable to wait for event completion" );
691*6467f958SSadaf Ebrahimi clReleaseKernel( kernel[i] );
692*6467f958SSadaf Ebrahimi clReleaseProgram( program[i] );
693*6467f958SSadaf Ebrahimi clReleaseMemObject( streams[i] );
694*6467f958SSadaf Ebrahimi free( outptr[i] );
695*6467f958SSadaf Ebrahimi return -1;
696*6467f958SSadaf Ebrahimi }
697*6467f958SSadaf Ebrahimi err = clGetEventProfilingInfo( readEvent, CL_PROFILING_COMMAND_QUEUED, sizeof( cl_ulong ), &queueStart, NULL );
698*6467f958SSadaf Ebrahimi if( err != CL_SUCCESS ){
699*6467f958SSadaf Ebrahimi print_error( err, "clGetEventProfilingInfo failed" );
700*6467f958SSadaf Ebrahimi clReleaseKernel( kernel[i] );
701*6467f958SSadaf Ebrahimi clReleaseProgram( program[i] );
702*6467f958SSadaf Ebrahimi clReleaseMemObject( streams[i] );
703*6467f958SSadaf Ebrahimi free( outptr[i] );
704*6467f958SSadaf Ebrahimi return -1;
705*6467f958SSadaf Ebrahimi }
706*6467f958SSadaf Ebrahimi
707*6467f958SSadaf Ebrahimi err = clGetEventProfilingInfo( readEvent, CL_PROFILING_COMMAND_SUBMIT, sizeof( cl_ulong ), &submitStart, NULL );
708*6467f958SSadaf Ebrahimi if( err != CL_SUCCESS ){
709*6467f958SSadaf Ebrahimi print_error( err, "clGetEventProfilingInfo failed" );
710*6467f958SSadaf Ebrahimi clReleaseKernel( kernel[i] );
711*6467f958SSadaf Ebrahimi clReleaseProgram( program[i] );
712*6467f958SSadaf Ebrahimi clReleaseMemObject( streams[i] );
713*6467f958SSadaf Ebrahimi free( outptr[i] );
714*6467f958SSadaf Ebrahimi return -1;
715*6467f958SSadaf Ebrahimi }
716*6467f958SSadaf Ebrahimi
717*6467f958SSadaf Ebrahimi err = clGetEventProfilingInfo( readEvent, CL_PROFILING_COMMAND_START, sizeof( cl_ulong ), &readStart, NULL );
718*6467f958SSadaf Ebrahimi if( err != CL_SUCCESS ){
719*6467f958SSadaf Ebrahimi print_error( err, "clGetEventProfilingInfo failed" );
720*6467f958SSadaf Ebrahimi clReleaseKernel( kernel[i] );
721*6467f958SSadaf Ebrahimi clReleaseProgram( program[i] );
722*6467f958SSadaf Ebrahimi clReleaseMemObject( streams[i] );
723*6467f958SSadaf Ebrahimi free( outptr[i] );
724*6467f958SSadaf Ebrahimi return -1;
725*6467f958SSadaf Ebrahimi }
726*6467f958SSadaf Ebrahimi
727*6467f958SSadaf Ebrahimi err = clGetEventProfilingInfo( readEvent, CL_PROFILING_COMMAND_END, sizeof( cl_ulong ), &readEnd, NULL );
728*6467f958SSadaf Ebrahimi if( err != CL_SUCCESS ){
729*6467f958SSadaf Ebrahimi print_error( err, "clGetEventProfilingInfo failed" );
730*6467f958SSadaf Ebrahimi clReleaseKernel( kernel[i] );
731*6467f958SSadaf Ebrahimi clReleaseProgram( program[i] );
732*6467f958SSadaf Ebrahimi clReleaseMemObject( streams[i] );
733*6467f958SSadaf Ebrahimi free( outptr[i] );
734*6467f958SSadaf Ebrahimi return -1;
735*6467f958SSadaf Ebrahimi }
736*6467f958SSadaf Ebrahimi
737*6467f958SSadaf Ebrahimi if (fn(outptr[i], num_elements*(1<<i))){
738*6467f958SSadaf Ebrahimi log_error( " %s%d data failed to verify\n", type, 1<<i );
739*6467f958SSadaf Ebrahimi err_count++;
740*6467f958SSadaf Ebrahimi }
741*6467f958SSadaf Ebrahimi else{
742*6467f958SSadaf Ebrahimi log_info( " %s%d data verified\n", type, 1<<i );
743*6467f958SSadaf Ebrahimi }
744*6467f958SSadaf Ebrahimi
745*6467f958SSadaf Ebrahimi if (check_times(queueStart, submitStart, readStart, readEnd, device))
746*6467f958SSadaf Ebrahimi err_count++;
747*6467f958SSadaf Ebrahimi
748*6467f958SSadaf Ebrahimi // cleanup
749*6467f958SSadaf Ebrahimi clReleaseEvent(readEvent);
750*6467f958SSadaf Ebrahimi clReleaseKernel( kernel[i] );
751*6467f958SSadaf Ebrahimi clReleaseProgram( program[i] );
752*6467f958SSadaf Ebrahimi clReleaseMemObject( streams[i] );
753*6467f958SSadaf Ebrahimi free( outptr[i] );
754*6467f958SSadaf Ebrahimi }
755*6467f958SSadaf Ebrahimi
756*6467f958SSadaf Ebrahimi return err_count;
757*6467f958SSadaf Ebrahimi
758*6467f958SSadaf Ebrahimi } // end test_stream_read()
759*6467f958SSadaf Ebrahimi
760*6467f958SSadaf Ebrahimi
test_read_array_int(cl_device_id device,cl_context context,cl_command_queue queue,int num_elements)761*6467f958SSadaf Ebrahimi int test_read_array_int( cl_device_id device, cl_context context, cl_command_queue queue, int num_elements )
762*6467f958SSadaf Ebrahimi {
763*6467f958SSadaf Ebrahimi int (*foo)(void *,int);
764*6467f958SSadaf Ebrahimi foo = verify_read_int;
765*6467f958SSadaf Ebrahimi
766*6467f958SSadaf Ebrahimi return test_stream_read( device, context, queue, num_elements, sizeof( cl_int ), "int", 5,
767*6467f958SSadaf Ebrahimi stream_read_int_kernel_code, int_kernel_name, foo );
768*6467f958SSadaf Ebrahimi }
769*6467f958SSadaf Ebrahimi
770*6467f958SSadaf Ebrahimi
test_read_array_uint(cl_device_id device,cl_context context,cl_command_queue queue,int num_elements)771*6467f958SSadaf Ebrahimi int test_read_array_uint( cl_device_id device, cl_context context, cl_command_queue queue, int num_elements )
772*6467f958SSadaf Ebrahimi {
773*6467f958SSadaf Ebrahimi int (*foo)(void *,int);
774*6467f958SSadaf Ebrahimi foo = verify_read_uint;
775*6467f958SSadaf Ebrahimi
776*6467f958SSadaf Ebrahimi return test_stream_read( device, context, queue, num_elements, sizeof( cl_uint ), "uint", 5,
777*6467f958SSadaf Ebrahimi stream_read_uint_kernel_code, uint_kernel_name, foo );
778*6467f958SSadaf Ebrahimi }
779*6467f958SSadaf Ebrahimi
780*6467f958SSadaf Ebrahimi
test_read_array_long(cl_device_id device,cl_context context,cl_command_queue queue,int num_elements)781*6467f958SSadaf Ebrahimi int test_read_array_long( cl_device_id device, cl_context context, cl_command_queue queue, int num_elements )
782*6467f958SSadaf Ebrahimi {
783*6467f958SSadaf Ebrahimi int (*foo)(void *,int);
784*6467f958SSadaf Ebrahimi foo = verify_read_long;
785*6467f958SSadaf Ebrahimi
786*6467f958SSadaf Ebrahimi if (!gHasLong)
787*6467f958SSadaf Ebrahimi {
788*6467f958SSadaf Ebrahimi log_info("read_long_array: Long types unsupported, skipping.");
789*6467f958SSadaf Ebrahimi return CL_SUCCESS;
790*6467f958SSadaf Ebrahimi }
791*6467f958SSadaf Ebrahimi
792*6467f958SSadaf Ebrahimi return test_stream_read( device, context, queue, num_elements, sizeof( cl_long ), "long", 5,
793*6467f958SSadaf Ebrahimi stream_read_long_kernel_code, long_kernel_name, foo );
794*6467f958SSadaf Ebrahimi }
795*6467f958SSadaf Ebrahimi
796*6467f958SSadaf Ebrahimi
test_read_array_ulong(cl_device_id device,cl_context context,cl_command_queue queue,int num_elements)797*6467f958SSadaf Ebrahimi int test_read_array_ulong( cl_device_id device, cl_context context, cl_command_queue queue, int num_elements )
798*6467f958SSadaf Ebrahimi {
799*6467f958SSadaf Ebrahimi int (*foo)(void *,int);
800*6467f958SSadaf Ebrahimi foo = verify_read_ulong;
801*6467f958SSadaf Ebrahimi
802*6467f958SSadaf Ebrahimi if (!gHasLong)
803*6467f958SSadaf Ebrahimi {
804*6467f958SSadaf Ebrahimi log_info("read_long_array: Long types unsupported, skipping.");
805*6467f958SSadaf Ebrahimi return CL_SUCCESS;
806*6467f958SSadaf Ebrahimi }
807*6467f958SSadaf Ebrahimi
808*6467f958SSadaf Ebrahimi return test_stream_read( device, context, queue, num_elements, sizeof( cl_ulong ), "ulong", 5,
809*6467f958SSadaf Ebrahimi stream_read_ulong_kernel_code, ulong_kernel_name, foo );
810*6467f958SSadaf Ebrahimi }
811*6467f958SSadaf Ebrahimi
812*6467f958SSadaf Ebrahimi
test_read_array_short(cl_device_id device,cl_context context,cl_command_queue queue,int num_elements)813*6467f958SSadaf Ebrahimi int test_read_array_short( cl_device_id device, cl_context context, cl_command_queue queue, int num_elements )
814*6467f958SSadaf Ebrahimi {
815*6467f958SSadaf Ebrahimi int (*foo)(void *,int);
816*6467f958SSadaf Ebrahimi foo = verify_read_short;
817*6467f958SSadaf Ebrahimi
818*6467f958SSadaf Ebrahimi return test_stream_read( device, context, queue, num_elements, sizeof( cl_short ), "short", 5,
819*6467f958SSadaf Ebrahimi stream_read_short_kernel_code, short_kernel_name, foo );
820*6467f958SSadaf Ebrahimi }
821*6467f958SSadaf Ebrahimi
822*6467f958SSadaf Ebrahimi
test_read_array_ushort(cl_device_id device,cl_context context,cl_command_queue queue,int num_elements)823*6467f958SSadaf Ebrahimi int test_read_array_ushort( cl_device_id device, cl_context context, cl_command_queue queue, int num_elements )
824*6467f958SSadaf Ebrahimi {
825*6467f958SSadaf Ebrahimi int (*foo)(void *,int);
826*6467f958SSadaf Ebrahimi foo = verify_read_ushort;
827*6467f958SSadaf Ebrahimi
828*6467f958SSadaf Ebrahimi return test_stream_read( device, context, queue, num_elements, sizeof( cl_ushort ), "ushort", 5,
829*6467f958SSadaf Ebrahimi stream_read_ushort_kernel_code, ushort_kernel_name, foo );
830*6467f958SSadaf Ebrahimi }
831*6467f958SSadaf Ebrahimi
832*6467f958SSadaf Ebrahimi
test_read_array_float(cl_device_id device,cl_context context,cl_command_queue queue,int num_elements)833*6467f958SSadaf Ebrahimi int test_read_array_float( cl_device_id device, cl_context context, cl_command_queue queue, int num_elements )
834*6467f958SSadaf Ebrahimi {
835*6467f958SSadaf Ebrahimi int (*foo)(void *,int);
836*6467f958SSadaf Ebrahimi foo = verify_read_float;
837*6467f958SSadaf Ebrahimi
838*6467f958SSadaf Ebrahimi return test_stream_read( device, context, queue, num_elements, sizeof( cl_float ), "float", 5,
839*6467f958SSadaf Ebrahimi stream_read_float_kernel_code, float_kernel_name, foo );
840*6467f958SSadaf Ebrahimi }
841*6467f958SSadaf Ebrahimi
842*6467f958SSadaf Ebrahimi
test_read_array_half(cl_device_id device,cl_context context,cl_command_queue queue,int num_elements)843*6467f958SSadaf Ebrahimi int test_read_array_half( cl_device_id device, cl_context context, cl_command_queue queue, int num_elements )
844*6467f958SSadaf Ebrahimi {
845*6467f958SSadaf Ebrahimi int (*foo)(void *,int);
846*6467f958SSadaf Ebrahimi foo = verify_read_half;
847*6467f958SSadaf Ebrahimi
848*6467f958SSadaf Ebrahimi return test_stream_read( device, context, queue, num_elements, sizeof( cl_half ), "half", 5,
849*6467f958SSadaf Ebrahimi stream_read_half_kernel_code, half_kernel_name, foo );
850*6467f958SSadaf Ebrahimi }
851*6467f958SSadaf Ebrahimi
852*6467f958SSadaf Ebrahimi
test_read_array_char(cl_device_id device,cl_context context,cl_command_queue queue,int num_elements)853*6467f958SSadaf Ebrahimi int test_read_array_char( cl_device_id device, cl_context context, cl_command_queue queue, int num_elements )
854*6467f958SSadaf Ebrahimi {
855*6467f958SSadaf Ebrahimi int (*foo)(void *,int);
856*6467f958SSadaf Ebrahimi foo = verify_read_char;
857*6467f958SSadaf Ebrahimi
858*6467f958SSadaf Ebrahimi return test_stream_read( device, context, queue, num_elements, sizeof( cl_char ), "char", 5,
859*6467f958SSadaf Ebrahimi stream_read_char_kernel_code, char_kernel_name, foo );
860*6467f958SSadaf Ebrahimi }
861*6467f958SSadaf Ebrahimi
862*6467f958SSadaf Ebrahimi
test_read_array_uchar(cl_device_id device,cl_context context,cl_command_queue queue,int num_elements)863*6467f958SSadaf Ebrahimi int test_read_array_uchar( cl_device_id device, cl_context context, cl_command_queue queue, int num_elements )
864*6467f958SSadaf Ebrahimi {
865*6467f958SSadaf Ebrahimi int (*foo)(void *,int);
866*6467f958SSadaf Ebrahimi foo = verify_read_uchar;
867*6467f958SSadaf Ebrahimi
868*6467f958SSadaf Ebrahimi return test_stream_read( device, context, queue, num_elements, sizeof( cl_uchar ), "uchar", 5,
869*6467f958SSadaf Ebrahimi stream_read_uchar_kernel_code, uchar_kernel_name, foo );
870*6467f958SSadaf Ebrahimi }
871*6467f958SSadaf Ebrahimi
872*6467f958SSadaf Ebrahimi
test_read_array_struct(cl_device_id device,cl_context context,cl_command_queue queue,int num_elements)873*6467f958SSadaf Ebrahimi int test_read_array_struct( cl_device_id device, cl_context context, cl_command_queue queue, int num_elements )
874*6467f958SSadaf Ebrahimi {
875*6467f958SSadaf Ebrahimi int (*foo)(void *,int);
876*6467f958SSadaf Ebrahimi foo = verify_read_struct;
877*6467f958SSadaf Ebrahimi
878*6467f958SSadaf Ebrahimi return test_stream_read( device, context, queue, num_elements, sizeof( TestStruct ), "struct", 1,
879*6467f958SSadaf Ebrahimi stream_read_struct_kernel_code, struct_kernel_name, foo );
880*6467f958SSadaf Ebrahimi }
881