MCPcopy Create free account
hub / github.com/arrayfire/arrayfire / MatMulCheck

Function MatMulCheck

test/blas.cpp:51–111  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

49
50template<typename T, bool isBVector>
51void MatMulCheck(string TestFile) {
52 SUPPORTED_TYPE_CHECK(T);
53
54 vector<dim4> numDims;
55
56 vector<vector<T>> hData;
57 vector<vector<T>> tests;
58 readTests<T, T, int>(TestFile, numDims, hData, tests);
59
60 af_array a, aT, b, bT;
61 ASSERT_SUCCESS(af_create_array(&a, &hData[0].front(), numDims[0].ndims(),
62 numDims[0].get(),
63 (af_dtype)dtype_traits<T>::af_type));
64 dim4 atdims = numDims[0];
65 {
66 dim_t f = atdims[0];
67 atdims[0] = atdims[1];
68 atdims[1] = f;
69 }
70 ASSERT_SUCCESS(af_moddims(&aT, a, atdims.ndims(), atdims.get()));
71 ASSERT_SUCCESS(af_create_array(&b, &hData[1].front(), numDims[1].ndims(),
72 numDims[1].get(),
73 (af_dtype)dtype_traits<T>::af_type));
74 dim4 btdims = numDims[1];
75 {
76 dim_t f = btdims[0];
77 btdims[0] = btdims[1];
78 btdims[1] = f;
79 }
80 ASSERT_SUCCESS(af_moddims(&bT, b, btdims.ndims(), btdims.get()));
81
82 vector<af_array> out(tests.size(), 0);
83 if (isBVector) {
84 ASSERT_SUCCESS(af_matmul(&out[0], aT, b, AF_MAT_NONE, AF_MAT_NONE));
85 ASSERT_SUCCESS(af_matmul(&out[1], bT, a, AF_MAT_NONE, AF_MAT_NONE));
86 ASSERT_SUCCESS(af_matmul(&out[2], b, a, AF_MAT_TRANS, AF_MAT_NONE));
87 ASSERT_SUCCESS(af_matmul(&out[3], bT, aT, AF_MAT_NONE, AF_MAT_TRANS));
88 ASSERT_SUCCESS(af_matmul(&out[4], b, aT, AF_MAT_TRANS, AF_MAT_TRANS));
89 } else {
90 ASSERT_SUCCESS(af_matmul(&out[0], a, b, AF_MAT_NONE, AF_MAT_NONE));
91 ASSERT_SUCCESS(af_matmul(&out[1], a, bT, AF_MAT_NONE, AF_MAT_TRANS));
92 ASSERT_SUCCESS(af_matmul(&out[2], a, bT, AF_MAT_TRANS, AF_MAT_NONE));
93 ASSERT_SUCCESS(af_matmul(&out[3], aT, bT, AF_MAT_TRANS, AF_MAT_TRANS));
94 }
95
96 for (size_t i = 0; i < tests.size(); i++) {
97 dim4 dd;
98 dim_t *d = dd.get();
99 af_get_dims(&d[0], &d[1], &d[2], &d[3], out[i]);
100 ASSERT_VEC_ARRAY_NEAR(tests[i], dd, out[i], 1e-3);
101 }
102
103 ASSERT_SUCCESS(af_release_array(a));
104 ASSERT_SUCCESS(af_release_array(aT));
105 ASSERT_SUCCESS(af_release_array(b));
106 ASSERT_SUCCESS(af_release_array(bT));
107
108 for (size_t i = 0; i < out.size(); i++) {

Callers

nothing calls this directly

Calls 7

af_create_arrayFunction · 0.50
af_moddimsFunction · 0.50
af_matmulFunction · 0.50
af_get_dimsFunction · 0.50
af_release_arrayFunction · 0.50
ndimsMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected