xref: /aosp_15_r20/external/clpeak/src/transfer_bandwidth.cpp (revision 1cd03ba3888297bc945f2c84574e105e3ced3e34)
1*1cd03ba3SJeremy Kemp #include <clpeak.h>
2*1cd03ba3SJeremy Kemp 
runTransferBandwidthTest(cl::CommandQueue & queue,cl::Program & prog,device_info_t & devInfo)3*1cd03ba3SJeremy Kemp int clPeak::runTransferBandwidthTest(cl::CommandQueue &queue, cl::Program &prog, device_info_t &devInfo)
4*1cd03ba3SJeremy Kemp {
5*1cd03ba3SJeremy Kemp   if (!isTransferBW)
6*1cd03ba3SJeremy Kemp     return 0;
7*1cd03ba3SJeremy Kemp 
8*1cd03ba3SJeremy Kemp   float timed, gbps;
9*1cd03ba3SJeremy Kemp   cl::NDRange globalSize, localSize;
10*1cd03ba3SJeremy Kemp   cl::Context ctx = queue.getInfo<CL_QUEUE_CONTEXT>();
11*1cd03ba3SJeremy Kemp   uint iters = devInfo.transferBWIters;
12*1cd03ba3SJeremy Kemp   Timer timer;
13*1cd03ba3SJeremy Kemp   float *arr = NULL;
14*1cd03ba3SJeremy Kemp 
15*1cd03ba3SJeremy Kemp   uint64_t maxItems = devInfo.maxAllocSize / sizeof(float) / 2;
16*1cd03ba3SJeremy Kemp   uint64_t numItems = roundToMultipleOf(maxItems, devInfo.maxWGSize, devInfo.transferBWMaxSize);
17*1cd03ba3SJeremy Kemp 
18*1cd03ba3SJeremy Kemp   try
19*1cd03ba3SJeremy Kemp   {
20*1cd03ba3SJeremy Kemp     arr = new float[numItems];
21*1cd03ba3SJeremy Kemp     memset(arr, 0, numItems * sizeof(float));
22*1cd03ba3SJeremy Kemp     cl::Buffer clBuffer = cl::Buffer(ctx, (CL_MEM_READ_WRITE | CL_MEM_ALLOC_HOST_PTR), (numItems * sizeof(float)));
23*1cd03ba3SJeremy Kemp 
24*1cd03ba3SJeremy Kemp     log->print(NEWLINE TAB TAB "Transfer bandwidth (GBPS)" NEWLINE);
25*1cd03ba3SJeremy Kemp     log->xmlOpenTag("transfer_bandwidth");
26*1cd03ba3SJeremy Kemp     log->xmlAppendAttribs("unit", "gbps");
27*1cd03ba3SJeremy Kemp 
28*1cd03ba3SJeremy Kemp     ///////////////////////////////////////////////////////////////////////////
29*1cd03ba3SJeremy Kemp     // enqueueWriteBuffer
30*1cd03ba3SJeremy Kemp     log->print(TAB TAB TAB "enqueueWriteBuffer              : ");
31*1cd03ba3SJeremy Kemp 
32*1cd03ba3SJeremy Kemp     // Dummy warm-up
33*1cd03ba3SJeremy Kemp     queue.enqueueWriteBuffer(clBuffer, CL_TRUE, 0, (numItems * sizeof(float)), arr);
34*1cd03ba3SJeremy Kemp     queue.finish();
35*1cd03ba3SJeremy Kemp 
36*1cd03ba3SJeremy Kemp     timed = 0;
37*1cd03ba3SJeremy Kemp 
38*1cd03ba3SJeremy Kemp     if (useEventTimer)
39*1cd03ba3SJeremy Kemp     {
40*1cd03ba3SJeremy Kemp       for (uint i = 0; i < iters; i++)
41*1cd03ba3SJeremy Kemp       {
42*1cd03ba3SJeremy Kemp         cl::Event timeEvent;
43*1cd03ba3SJeremy Kemp         queue.enqueueWriteBuffer(clBuffer, CL_TRUE, 0, (numItems * sizeof(float)), arr, NULL, &timeEvent);
44*1cd03ba3SJeremy Kemp         queue.finish();
45*1cd03ba3SJeremy Kemp         timed += timeInUS(timeEvent);
46*1cd03ba3SJeremy Kemp       }
47*1cd03ba3SJeremy Kemp     }
48*1cd03ba3SJeremy Kemp     else
49*1cd03ba3SJeremy Kemp     {
50*1cd03ba3SJeremy Kemp       Timer timer;
51*1cd03ba3SJeremy Kemp 
52*1cd03ba3SJeremy Kemp       timer.start();
53*1cd03ba3SJeremy Kemp       for (uint i = 0; i < iters; i++)
54*1cd03ba3SJeremy Kemp       {
55*1cd03ba3SJeremy Kemp         queue.enqueueWriteBuffer(clBuffer, CL_TRUE, 0, (numItems * sizeof(float)), arr);
56*1cd03ba3SJeremy Kemp       }
57*1cd03ba3SJeremy Kemp       queue.finish();
58*1cd03ba3SJeremy Kemp       timed = timer.stopAndTime();
59*1cd03ba3SJeremy Kemp     }
60*1cd03ba3SJeremy Kemp     timed /= static_cast<float>(iters);
61*1cd03ba3SJeremy Kemp 
62*1cd03ba3SJeremy Kemp     gbps = ((float)numItems * sizeof(float)) / timed / 1e3f;
63*1cd03ba3SJeremy Kemp     log->print(gbps);
64*1cd03ba3SJeremy Kemp     log->print(NEWLINE);
65*1cd03ba3SJeremy Kemp     log->xmlRecord("enqueuewritebuffer", gbps);
66*1cd03ba3SJeremy Kemp     ///////////////////////////////////////////////////////////////////////////
67*1cd03ba3SJeremy Kemp     // enqueueReadBuffer
68*1cd03ba3SJeremy Kemp     log->print(TAB TAB TAB "enqueueReadBuffer               : ");
69*1cd03ba3SJeremy Kemp 
70*1cd03ba3SJeremy Kemp     // Dummy warm-up
71*1cd03ba3SJeremy Kemp     queue.enqueueReadBuffer(clBuffer, CL_TRUE, 0, (numItems * sizeof(float)), arr);
72*1cd03ba3SJeremy Kemp     queue.finish();
73*1cd03ba3SJeremy Kemp 
74*1cd03ba3SJeremy Kemp     timed = 0;
75*1cd03ba3SJeremy Kemp     if (useEventTimer)
76*1cd03ba3SJeremy Kemp     {
77*1cd03ba3SJeremy Kemp       for (uint i = 0; i < iters; i++)
78*1cd03ba3SJeremy Kemp       {
79*1cd03ba3SJeremy Kemp         cl::Event timeEvent;
80*1cd03ba3SJeremy Kemp         queue.enqueueReadBuffer(clBuffer, CL_TRUE, 0, (numItems * sizeof(float)), arr, NULL, &timeEvent);
81*1cd03ba3SJeremy Kemp         queue.finish();
82*1cd03ba3SJeremy Kemp         timed += timeInUS(timeEvent);
83*1cd03ba3SJeremy Kemp       }
84*1cd03ba3SJeremy Kemp     }
85*1cd03ba3SJeremy Kemp     else
86*1cd03ba3SJeremy Kemp     {
87*1cd03ba3SJeremy Kemp       Timer timer;
88*1cd03ba3SJeremy Kemp 
89*1cd03ba3SJeremy Kemp       timer.start();
90*1cd03ba3SJeremy Kemp       for (uint i = 0; i < iters; i++)
91*1cd03ba3SJeremy Kemp       {
92*1cd03ba3SJeremy Kemp         queue.enqueueReadBuffer(clBuffer, CL_TRUE, 0, (numItems * sizeof(float)), arr);
93*1cd03ba3SJeremy Kemp       }
94*1cd03ba3SJeremy Kemp       queue.finish();
95*1cd03ba3SJeremy Kemp       timed = timer.stopAndTime();
96*1cd03ba3SJeremy Kemp     }
97*1cd03ba3SJeremy Kemp     timed /= static_cast<float>(iters);
98*1cd03ba3SJeremy Kemp 
99*1cd03ba3SJeremy Kemp     gbps = ((float)numItems * sizeof(float)) / timed / 1e3f;
100*1cd03ba3SJeremy Kemp     log->print(gbps);
101*1cd03ba3SJeremy Kemp     log->print(NEWLINE);
102*1cd03ba3SJeremy Kemp     log->xmlRecord("enqueuereadbuffer", gbps);
103*1cd03ba3SJeremy Kemp     ///////////////////////////////////////////////////////////////////////////
104*1cd03ba3SJeremy Kemp     // enqueueWriteBuffer non-blocking
105*1cd03ba3SJeremy Kemp     log->print(TAB TAB TAB "enqueueWriteBuffer non-blocking : ");
106*1cd03ba3SJeremy Kemp 
107*1cd03ba3SJeremy Kemp     // Dummy warm-up
108*1cd03ba3SJeremy Kemp     queue.enqueueWriteBuffer(clBuffer, CL_FALSE, 0, (numItems * sizeof(float)), arr);
109*1cd03ba3SJeremy Kemp     queue.finish();
110*1cd03ba3SJeremy Kemp 
111*1cd03ba3SJeremy Kemp     timed = 0;
112*1cd03ba3SJeremy Kemp 
113*1cd03ba3SJeremy Kemp     if (useEventTimer)
114*1cd03ba3SJeremy Kemp     {
115*1cd03ba3SJeremy Kemp       for (uint i = 0; i < iters; i++)
116*1cd03ba3SJeremy Kemp       {
117*1cd03ba3SJeremy Kemp         cl::Event timeEvent;
118*1cd03ba3SJeremy Kemp         queue.enqueueWriteBuffer(clBuffer, CL_FALSE, 0, (numItems * sizeof(float)), arr, NULL, &timeEvent);
119*1cd03ba3SJeremy Kemp         queue.finish();
120*1cd03ba3SJeremy Kemp         timed += timeInUS(timeEvent);
121*1cd03ba3SJeremy Kemp       }
122*1cd03ba3SJeremy Kemp     }
123*1cd03ba3SJeremy Kemp     else
124*1cd03ba3SJeremy Kemp     {
125*1cd03ba3SJeremy Kemp       Timer timer;
126*1cd03ba3SJeremy Kemp 
127*1cd03ba3SJeremy Kemp       timer.start();
128*1cd03ba3SJeremy Kemp       for (uint i = 0; i < iters; i++)
129*1cd03ba3SJeremy Kemp       {
130*1cd03ba3SJeremy Kemp         queue.enqueueWriteBuffer(clBuffer, CL_FALSE, 0, (numItems * sizeof(float)), arr);
131*1cd03ba3SJeremy Kemp       }
132*1cd03ba3SJeremy Kemp       queue.finish();
133*1cd03ba3SJeremy Kemp       timed = timer.stopAndTime();
134*1cd03ba3SJeremy Kemp     }
135*1cd03ba3SJeremy Kemp     timed /= static_cast<float>(iters);
136*1cd03ba3SJeremy Kemp 
137*1cd03ba3SJeremy Kemp     gbps = ((float)numItems * sizeof(float)) / timed / 1e3f;
138*1cd03ba3SJeremy Kemp     log->print(gbps);
139*1cd03ba3SJeremy Kemp     log->print(NEWLINE);
140*1cd03ba3SJeremy Kemp     log->xmlRecord("enqueuewritebuffer_nonblocking", gbps);
141*1cd03ba3SJeremy Kemp     ///////////////////////////////////////////////////////////////////////////
142*1cd03ba3SJeremy Kemp     // enqueueReadBuffer non-blocking
143*1cd03ba3SJeremy Kemp     log->print(TAB TAB TAB "enqueueReadBuffer non-blocking  : ");
144*1cd03ba3SJeremy Kemp 
145*1cd03ba3SJeremy Kemp     // Dummy warm-up
146*1cd03ba3SJeremy Kemp     queue.enqueueReadBuffer(clBuffer, CL_FALSE, 0, (numItems * sizeof(float)), arr);
147*1cd03ba3SJeremy Kemp     queue.finish();
148*1cd03ba3SJeremy Kemp 
149*1cd03ba3SJeremy Kemp     timed = 0;
150*1cd03ba3SJeremy Kemp     if (useEventTimer)
151*1cd03ba3SJeremy Kemp     {
152*1cd03ba3SJeremy Kemp       for (uint i = 0; i < iters; i++)
153*1cd03ba3SJeremy Kemp       {
154*1cd03ba3SJeremy Kemp         cl::Event timeEvent;
155*1cd03ba3SJeremy Kemp         queue.enqueueReadBuffer(clBuffer, CL_FALSE, 0, (numItems * sizeof(float)), arr, NULL, &timeEvent);
156*1cd03ba3SJeremy Kemp         queue.finish();
157*1cd03ba3SJeremy Kemp         timed += timeInUS(timeEvent);
158*1cd03ba3SJeremy Kemp       }
159*1cd03ba3SJeremy Kemp     }
160*1cd03ba3SJeremy Kemp     else
161*1cd03ba3SJeremy Kemp     {
162*1cd03ba3SJeremy Kemp       Timer timer;
163*1cd03ba3SJeremy Kemp 
164*1cd03ba3SJeremy Kemp       timer.start();
165*1cd03ba3SJeremy Kemp       for (uint i = 0; i < iters; i++)
166*1cd03ba3SJeremy Kemp       {
167*1cd03ba3SJeremy Kemp         queue.enqueueReadBuffer(clBuffer, CL_FALSE, 0, (numItems * sizeof(float)), arr);
168*1cd03ba3SJeremy Kemp       }
169*1cd03ba3SJeremy Kemp       queue.finish();
170*1cd03ba3SJeremy Kemp       timed = timer.stopAndTime();
171*1cd03ba3SJeremy Kemp     }
172*1cd03ba3SJeremy Kemp     timed /= static_cast<float>(iters);
173*1cd03ba3SJeremy Kemp 
174*1cd03ba3SJeremy Kemp     gbps = ((float)numItems * sizeof(float)) / timed / 1e3f;
175*1cd03ba3SJeremy Kemp     log->print(gbps);
176*1cd03ba3SJeremy Kemp     log->print(NEWLINE);
177*1cd03ba3SJeremy Kemp     log->xmlRecord("enqueuereadbuffer_nonblocking", gbps);
178*1cd03ba3SJeremy Kemp     ///////////////////////////////////////////////////////////////////////////
179*1cd03ba3SJeremy Kemp     // enqueueMapBuffer
180*1cd03ba3SJeremy Kemp     log->print(TAB TAB TAB "enqueueMapBuffer(for read)      : ");
181*1cd03ba3SJeremy Kemp 
182*1cd03ba3SJeremy Kemp     queue.finish();
183*1cd03ba3SJeremy Kemp 
184*1cd03ba3SJeremy Kemp     timed = 0;
185*1cd03ba3SJeremy Kemp     if (useEventTimer)
186*1cd03ba3SJeremy Kemp     {
187*1cd03ba3SJeremy Kemp       for (uint i = 0; i < iters; i++)
188*1cd03ba3SJeremy Kemp       {
189*1cd03ba3SJeremy Kemp         cl::Event timeEvent;
190*1cd03ba3SJeremy Kemp         void *mapPtr;
191*1cd03ba3SJeremy Kemp 
192*1cd03ba3SJeremy Kemp         mapPtr = queue.enqueueMapBuffer(clBuffer, CL_TRUE, CL_MAP_READ, 0, (numItems * sizeof(float)), NULL, &timeEvent);
193*1cd03ba3SJeremy Kemp         queue.finish();
194*1cd03ba3SJeremy Kemp         queue.enqueueUnmapMemObject(clBuffer, mapPtr);
195*1cd03ba3SJeremy Kemp         queue.finish();
196*1cd03ba3SJeremy Kemp         timed += timeInUS(timeEvent);
197*1cd03ba3SJeremy Kemp       }
198*1cd03ba3SJeremy Kemp     }
199*1cd03ba3SJeremy Kemp     else
200*1cd03ba3SJeremy Kemp     {
201*1cd03ba3SJeremy Kemp       for (uint i = 0; i < iters; i++)
202*1cd03ba3SJeremy Kemp       {
203*1cd03ba3SJeremy Kemp         Timer timer;
204*1cd03ba3SJeremy Kemp         void *mapPtr;
205*1cd03ba3SJeremy Kemp 
206*1cd03ba3SJeremy Kemp         timer.start();
207*1cd03ba3SJeremy Kemp         mapPtr = queue.enqueueMapBuffer(clBuffer, CL_TRUE, CL_MAP_READ, 0, (numItems * sizeof(float)));
208*1cd03ba3SJeremy Kemp         queue.finish();
209*1cd03ba3SJeremy Kemp         timed += timer.stopAndTime();
210*1cd03ba3SJeremy Kemp 
211*1cd03ba3SJeremy Kemp         queue.enqueueUnmapMemObject(clBuffer, mapPtr);
212*1cd03ba3SJeremy Kemp         queue.finish();
213*1cd03ba3SJeremy Kemp       }
214*1cd03ba3SJeremy Kemp     }
215*1cd03ba3SJeremy Kemp     timed /= static_cast<float>(iters);
216*1cd03ba3SJeremy Kemp 
217*1cd03ba3SJeremy Kemp     gbps = ((float)numItems * sizeof(float)) / timed / 1e3f;
218*1cd03ba3SJeremy Kemp     log->print(gbps);
219*1cd03ba3SJeremy Kemp     log->print(NEWLINE);
220*1cd03ba3SJeremy Kemp     log->xmlRecord("enqueuemapbuffer", gbps);
221*1cd03ba3SJeremy Kemp     ///////////////////////////////////////////////////////////////////////////
222*1cd03ba3SJeremy Kemp 
223*1cd03ba3SJeremy Kemp     // memcpy from mapped ptr
224*1cd03ba3SJeremy Kemp     log->print(TAB TAB TAB TAB "memcpy from mapped ptr        : ");
225*1cd03ba3SJeremy Kemp     queue.finish();
226*1cd03ba3SJeremy Kemp 
227*1cd03ba3SJeremy Kemp     timed = 0;
228*1cd03ba3SJeremy Kemp     for (uint i = 0; i < iters; i++)
229*1cd03ba3SJeremy Kemp     {
230*1cd03ba3SJeremy Kemp       cl::Event timeEvent;
231*1cd03ba3SJeremy Kemp       void *mapPtr;
232*1cd03ba3SJeremy Kemp 
233*1cd03ba3SJeremy Kemp       mapPtr = queue.enqueueMapBuffer(clBuffer, CL_TRUE, CL_MAP_READ, 0, (numItems * sizeof(float)));
234*1cd03ba3SJeremy Kemp       queue.finish();
235*1cd03ba3SJeremy Kemp 
236*1cd03ba3SJeremy Kemp       timer.start();
237*1cd03ba3SJeremy Kemp       memcpy(arr, mapPtr, (numItems * sizeof(float)));
238*1cd03ba3SJeremy Kemp       timed += timer.stopAndTime();
239*1cd03ba3SJeremy Kemp 
240*1cd03ba3SJeremy Kemp       queue.enqueueUnmapMemObject(clBuffer, mapPtr);
241*1cd03ba3SJeremy Kemp       queue.finish();
242*1cd03ba3SJeremy Kemp     }
243*1cd03ba3SJeremy Kemp     timed /= static_cast<float>(iters);
244*1cd03ba3SJeremy Kemp 
245*1cd03ba3SJeremy Kemp     gbps = ((float)numItems * sizeof(float)) / timed / 1e3f;
246*1cd03ba3SJeremy Kemp     log->print(gbps);
247*1cd03ba3SJeremy Kemp     log->print(NEWLINE);
248*1cd03ba3SJeremy Kemp     log->xmlRecord("memcpy_from_mapped_ptr", gbps);
249*1cd03ba3SJeremy Kemp 
250*1cd03ba3SJeremy Kemp     ///////////////////////////////////////////////////////////////////////////
251*1cd03ba3SJeremy Kemp 
252*1cd03ba3SJeremy Kemp     // enqueueUnmap
253*1cd03ba3SJeremy Kemp     log->print(TAB TAB TAB "enqueueUnmap(after write)       : ");
254*1cd03ba3SJeremy Kemp 
255*1cd03ba3SJeremy Kemp     queue.finish();
256*1cd03ba3SJeremy Kemp 
257*1cd03ba3SJeremy Kemp     timed = 0;
258*1cd03ba3SJeremy Kemp     if (useEventTimer)
259*1cd03ba3SJeremy Kemp     {
260*1cd03ba3SJeremy Kemp       for (uint i = 0; i < iters; i++)
261*1cd03ba3SJeremy Kemp       {
262*1cd03ba3SJeremy Kemp         cl::Event timeEvent;
263*1cd03ba3SJeremy Kemp         void *mapPtr;
264*1cd03ba3SJeremy Kemp 
265*1cd03ba3SJeremy Kemp         mapPtr = queue.enqueueMapBuffer(clBuffer, CL_TRUE, CL_MAP_WRITE, 0, (numItems * sizeof(float)));
266*1cd03ba3SJeremy Kemp         queue.finish();
267*1cd03ba3SJeremy Kemp         queue.enqueueUnmapMemObject(clBuffer, mapPtr, NULL, &timeEvent);
268*1cd03ba3SJeremy Kemp         queue.finish();
269*1cd03ba3SJeremy Kemp         timed += timeInUS(timeEvent);
270*1cd03ba3SJeremy Kemp       }
271*1cd03ba3SJeremy Kemp     }
272*1cd03ba3SJeremy Kemp     else
273*1cd03ba3SJeremy Kemp     {
274*1cd03ba3SJeremy Kemp       for (uint i = 0; i < iters; i++)
275*1cd03ba3SJeremy Kemp       {
276*1cd03ba3SJeremy Kemp         Timer timer;
277*1cd03ba3SJeremy Kemp         void *mapPtr;
278*1cd03ba3SJeremy Kemp 
279*1cd03ba3SJeremy Kemp         mapPtr = queue.enqueueMapBuffer(clBuffer, CL_TRUE, CL_MAP_WRITE, 0, (numItems * sizeof(float)));
280*1cd03ba3SJeremy Kemp         queue.finish();
281*1cd03ba3SJeremy Kemp 
282*1cd03ba3SJeremy Kemp         timer.start();
283*1cd03ba3SJeremy Kemp         queue.enqueueUnmapMemObject(clBuffer, mapPtr);
284*1cd03ba3SJeremy Kemp         queue.finish();
285*1cd03ba3SJeremy Kemp         timed += timer.stopAndTime();
286*1cd03ba3SJeremy Kemp       }
287*1cd03ba3SJeremy Kemp     }
288*1cd03ba3SJeremy Kemp     timed /= static_cast<float>(iters);
289*1cd03ba3SJeremy Kemp     gbps = ((float)numItems * sizeof(float)) / timed / 1e3f;
290*1cd03ba3SJeremy Kemp 
291*1cd03ba3SJeremy Kemp     log->print(gbps);
292*1cd03ba3SJeremy Kemp     log->print(NEWLINE);
293*1cd03ba3SJeremy Kemp     log->xmlRecord("enqueueunmap", gbps);
294*1cd03ba3SJeremy Kemp     ///////////////////////////////////////////////////////////////////////////
295*1cd03ba3SJeremy Kemp 
296*1cd03ba3SJeremy Kemp     // memcpy to mapped ptr
297*1cd03ba3SJeremy Kemp     log->print(TAB TAB TAB TAB "memcpy to mapped ptr          : ");
298*1cd03ba3SJeremy Kemp     queue.finish();
299*1cd03ba3SJeremy Kemp 
300*1cd03ba3SJeremy Kemp     timed = 0;
301*1cd03ba3SJeremy Kemp     for (uint i = 0; i < iters; i++)
302*1cd03ba3SJeremy Kemp     {
303*1cd03ba3SJeremy Kemp       cl::Event timeEvent;
304*1cd03ba3SJeremy Kemp       void *mapPtr;
305*1cd03ba3SJeremy Kemp 
306*1cd03ba3SJeremy Kemp       mapPtr = queue.enqueueMapBuffer(clBuffer, CL_TRUE, CL_MAP_WRITE, 0, (numItems * sizeof(float)));
307*1cd03ba3SJeremy Kemp       queue.finish();
308*1cd03ba3SJeremy Kemp 
309*1cd03ba3SJeremy Kemp       timer.start();
310*1cd03ba3SJeremy Kemp       memcpy(mapPtr, arr, (numItems * sizeof(float)));
311*1cd03ba3SJeremy Kemp       timed += timer.stopAndTime();
312*1cd03ba3SJeremy Kemp 
313*1cd03ba3SJeremy Kemp       queue.enqueueUnmapMemObject(clBuffer, mapPtr);
314*1cd03ba3SJeremy Kemp       queue.finish();
315*1cd03ba3SJeremy Kemp     }
316*1cd03ba3SJeremy Kemp     timed /= static_cast<float>(iters);
317*1cd03ba3SJeremy Kemp 
318*1cd03ba3SJeremy Kemp     gbps = ((float)numItems * sizeof(float)) / timed / 1e3f;
319*1cd03ba3SJeremy Kemp     log->print(gbps);
320*1cd03ba3SJeremy Kemp     log->print(NEWLINE);
321*1cd03ba3SJeremy Kemp     log->xmlRecord("memcpy_to_mapped_ptr", gbps);
322*1cd03ba3SJeremy Kemp 
323*1cd03ba3SJeremy Kemp     ///////////////////////////////////////////////////////////////////////////
324*1cd03ba3SJeremy Kemp     log->xmlCloseTag(); // transfer_bandwidth
325*1cd03ba3SJeremy Kemp 
326*1cd03ba3SJeremy Kemp     if (arr)
327*1cd03ba3SJeremy Kemp       delete[] arr;
328*1cd03ba3SJeremy Kemp   }
329*1cd03ba3SJeremy Kemp   catch (cl::Error &error)
330*1cd03ba3SJeremy Kemp   {
331*1cd03ba3SJeremy Kemp     stringstream ss;
332*1cd03ba3SJeremy Kemp     ss << error.what() << " (" << error.err() << ")" NEWLINE
333*1cd03ba3SJeremy Kemp        << TAB TAB TAB "Tests skipped" NEWLINE;
334*1cd03ba3SJeremy Kemp     log->print(ss.str());
335*1cd03ba3SJeremy Kemp 
336*1cd03ba3SJeremy Kemp     if (arr)
337*1cd03ba3SJeremy Kemp     {
338*1cd03ba3SJeremy Kemp       delete[] arr;
339*1cd03ba3SJeremy Kemp     }
340*1cd03ba3SJeremy Kemp     return -1;
341*1cd03ba3SJeremy Kemp   }
342*1cd03ba3SJeremy Kemp 
343*1cd03ba3SJeremy Kemp   return 0;
344*1cd03ba3SJeremy Kemp }
345