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

Function gemmCorrectnessTest

src/tests/correctness/corr-gemm.cpp:51–206  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

49
50template <typename T>
51void
52gemmCorrectnessTest(TestParams *params)
53{
54 cl_int err;
55 T *A, *B, *blasC, *clblasC;
56 T alpha, beta;
57 cl_mem bufA, bufB, bufC;
58 clMath::BlasBase *base;
59 bool useAlpha;
60 bool useBeta;
61 cl_event *events;
62 bool isComplex;
63
64 base = clMath::BlasBase::getInstance();
65 if ((typeid(T) == typeid(cl_double) ||
66 typeid(T) == typeid(DoubleComplex)) &&
67 !base->isDevSupportDoublePrecision()) {
68
69 std::cerr << ">> WARNING: The target device doesn't support native "
70 "double precision floating point arithmetic" <<
71 std::endl << ">> Test skipped" << std::endl;
72 SUCCEED();
73 return;
74 }
75
76 isComplex = ((typeid(T) == typeid(FloatComplex)) ||
77 (typeid(T) == typeid(DoubleComplex)));
78
79 if (canCaseBeSkipped(params, isComplex)) {
80 std::cerr << ">> Test is skipped" << std::endl;
81 SUCCEED();
82 return;
83 }
84
85 useAlpha = base->useAlpha();
86 useBeta = base->useBeta();
87 alpha = ZERO<T>();
88 beta = ZERO<T>();
89
90 events = new cl_event[params->numCommandQueues];
91 memset(events, 0, params->numCommandQueues * sizeof(cl_event));
92
93 A = new T[params->rowsA * params->columnsA];
94 B = new T[params->rowsB * params->columnsB];
95 blasC = new T[params->rowsC * params->columnsC];
96 clblasC = new T[params->rowsC * params->columnsC];
97
98 srand(params->seed);
99 if (useAlpha) {
100 alpha = convertMultiplier<T>(params->alpha);
101 }
102 if (useBeta) {
103 beta = convertMultiplier<T>(params->beta);
104 }
105
106 randomGemmMatrices<T>(params->order, params->transA, params->transB,
107 params->M, params->N, params->K, useAlpha, &alpha, A, params->lda,
108 B, params->ldb, useBeta, &beta, blasC, params->ldc);

Callers

nothing calls this directly

Calls 12

canCaseBeSkippedFunction · 0.85
printTestParamsFunction · 0.85
useAlphaMethod · 0.80
useBetaMethod · 0.80
createEnqueueBufferMethod · 0.80
commandQueuesMethod · 0.80
alphaMethod · 0.80
betaMethod · 0.80
releaseMemObjectsFunction · 0.70
gemmFunction · 0.50
waitForSuccessfulFinishFunction · 0.50

Tested by

no test coverage detected