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

Function dotcCorrectnessTest

src/tests/correctness/corr-dotc.cpp:73–186  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

71
72template <typename T>
73void
74dotcCorrectnessTest(TestParams *params)
75{
76 cl_int err;
77 T *blasX, *blasY, *clblasDP, *blasDP;
78 cl_mem bufX, bufY, bufDP, scratchBuff;
79 clMath::BlasBase *base;
80 cl_event *events;
81
82 base = clMath::BlasBase::getInstance();
83
84 if ((typeid(T) == typeid(cl_double) ||
85 typeid(T) == typeid(DoubleComplex)) &&
86 !base->isDevSupportDoublePrecision()) {
87
88 std::cerr << ">> WARNING: The target device doesn't support native "
89 "double precision floating point arithmetic" <<
90 std::endl << ">> Test skipped" << std::endl;
91 SUCCEED();
92 return;
93 }
94
95 printf("number of command queues : %d\n\n", params->numCommandQueues);
96
97 events = new cl_event[params->numCommandQueues];
98 memset(events, 0, params->numCommandQueues * sizeof(cl_event));
99
100 size_t lengthX = (1 + ((params->N -1) * abs(params->incx)));
101 size_t lengthY = (1 + ((params->N -1) * abs(params->incy)));
102
103 blasX = new T[lengthX + params->offBX ];
104 blasY = new T[lengthY + params->offCY ];
105 blasDP = new T[1];
106 clblasDP = new T[1 + params->offa];
107
108 if((blasX == NULL) || (blasY == NULL) || (clblasDP == NULL) || (blasDP == NULL))
109 {
110 ::std::cerr << "Cannot allocate memory on host side\n" << "!!!!!!!!!!!!Test skipped.!!!!!!!!!!!!" << ::std::endl;
111 deleteBuffers<T>(blasX, blasY, blasDP, clblasDP);
112 delete[] events;
113 SUCCEED();
114 return;
115 }
116
117 srand(params->seed);
118
119 randomVectors(params->N, (blasX + params->offBX), params->incx, (blasY + params->offCY), params->incy, true);
120
121 // Allocate buffers
122 bufX = base->createEnqueueBuffer(blasX, (lengthX + params->offBX)* sizeof(*blasX), 0, CL_MEM_READ_WRITE);
123 bufY = base->createEnqueueBuffer(blasY, (lengthY + params->offCY)* sizeof(*blasY), 0, CL_MEM_READ_WRITE);
124 bufDP = base->createEnqueueBuffer(NULL, (1 + params->offa) * sizeof(T), 0, CL_MEM_READ_WRITE);
125 scratchBuff = base->createEnqueueBuffer(NULL, (lengthX * sizeof(T)), 0, CL_MEM_READ_WRITE);
126
127 *blasDP = ::clMath::blas::dotc( params->N, blasX, params->offBX, params->incx, blasY, params->offCY, params->incy);
128
129 if ((bufX == NULL) || (bufY == NULL) || (bufDP == NULL) || (scratchBuff == NULL)) {
130 releaseMemObjects(bufX, bufY, bufDP, scratchBuff);

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