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

Function mm

src/backend/opencl/cpu/cpu_sparse_blas.cpp:354–386  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

352
353template<typename T, bool conjugate>
354void mm(Array<T> output, const Array<T> values, const Array<int> rowIdx,
355 const Array<int> colIdx, const Array<T> right, int M, int N, int ldb,
356 int ldc) {
357 UNUSED(M);
358 mapped_ptr<T> oPtr = output.getMappedPtr();
359 mapped_ptr<T> rhtPtr = right.getMappedPtr();
360 mapped_ptr<T> vPtr = values.getMappedPtr();
361 mapped_ptr<int> rPtr = rowIdx.getMappedPtr();
362 mapped_ptr<int> cPtr = colIdx.getMappedPtr();
363
364 T const *const valPtr = vPtr.get();
365 int const *const rowPtr = rPtr.get();
366 int const *const colPtr = cPtr.get();
367 T const *rhsPtr = rhtPtr.get();
368 T *outPtr = oPtr.get();
369
370 for (int o = 0; o < N; ++o) {
371 for (int i = 0; i < rowIdx.dims()[0] - 1; ++i) {
372 outPtr[i] = scalar<T>(0);
373 for (int j = rowPtr[i]; j < rowPtr[i + 1]; ++j) {
374 // If stride[0] of right is not 1 then rhsPtr[colPtr[j]*stride]
375 if (conjugate) {
376 outPtr[i] =
377 outPtr[i] + getConjugate(valPtr[j]) * rhsPtr[colPtr[j]];
378 } else {
379 outPtr[i] = outPtr[i] + valPtr[j] * rhsPtr[colPtr[j]];
380 }
381 }
382 }
383 rhsPtr += ldb;
384 outPtr += ldc;
385 }
386}
387
388template<typename T, bool conjugate>
389void mtm(Array<T> output, const Array<T> values, const Array<int> rowIdx,

Callers

nothing calls this directly

Calls 4

getConjugateFunction · 0.70
getMappedPtrMethod · 0.45
getMethod · 0.45
dimsMethod · 0.45

Tested by

no test coverage detected