MCPcopy Create free account
hub / github.com/clMathLibraries/clBLAS / copyCorrectnessTest

Function copyCorrectnessTest

src/tests/correctness/corr-copy.cpp:62–177  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

60
61template <typename T>
62void
63copyCorrectnessTest(TestParams *params)
64{
65 cl_int err;
66 T *blasX, *blasY, *clblasY;
67 cl_mem bufX, bufY;
68 clMath::BlasBase *base;
69 cl_event *events;
70
71 base = clMath::BlasBase::getInstance();
72
73 if ((typeid(T) == typeid(cl_double) ||
74 typeid(T) == typeid(DoubleComplex)) &&
75 !base->isDevSupportDoublePrecision()) {
76
77 std::cerr << ">> WARNING: The target device doesn't support native "
78 "double precision floating point arithmetic" <<
79 std::endl << ">> Test skipped" << std::endl;
80 SUCCEED();
81 return;
82 }
83
84 printf("number of command queues : %d\n\n", params->numCommandQueues);
85
86 events = new cl_event[params->numCommandQueues];
87 memset(events, 0, params->numCommandQueues * sizeof(cl_event));
88
89 size_t lengthX = (1 + ((params->N -1) * abs(params->incx)));
90 size_t lengthY = (1 + ((params->N -1) * abs(params->incy)));
91
92 blasX = new T[lengthX + params->offBX ];
93 blasY = new T[lengthY + params->offCY ];
94 clblasY = new T[lengthY + params->offCY ];
95
96 if((blasX == NULL) || (blasY == NULL) || (clblasY == NULL))
97 {
98 ::std::cerr << "Cannot allocate memory on host side\n" << "!!!!!!!!!!!!Test skipped.!!!!!!!!!!!!" << ::std::endl;
99 deleteBuffers<T>(blasX, blasY, clblasY);
100 delete[] events;
101 SUCCEED();
102 return;
103 }
104
105 srand(params->seed);
106
107 // Populate A and blasX
108 randomVectors( params->N, (blasX+params->offBX), params->incx, (blasY+params->offCY), params->incy );
109 memcpy(clblasY, blasY, (lengthY + params->offCY)* sizeof(*blasY));
110
111 // Allocate buffers
112 bufX = base->createEnqueueBuffer(blasX, (lengthX + params->offBX)* sizeof(*blasX), 0, CL_MEM_READ_WRITE);
113 bufY = base->createEnqueueBuffer(blasY, (lengthY + params->offCY)* sizeof(*blasY), 0, CL_MEM_READ_WRITE);
114
115 ::clMath::blas::copy( params->N, blasX, params->offBX, params->incx, blasY, params->offCY, params->incy);
116
117 if ((bufX == NULL) || (bufY == NULL)) {
118 /* Skip the test, the most probable reason is
119 * matrix too big for a device.

Callers

nothing calls this directly

Calls 7

randomVectorsFunction · 0.85
printTestParamsFunction · 0.85
createEnqueueBufferMethod · 0.80
commandQueuesMethod · 0.80
releaseMemObjectsFunction · 0.70
waitForSuccessfulFinishFunction · 0.50

Tested by

no test coverage detected