Mentions légales du service

Skip to content
Snippets Groups Projects
Commit 528ac10f authored by hhakim's avatar hhakim
Browse files

Implement MatBSR<FPP, GPU2>::bsrgemm and update to gpu_mod@a1dd1ade.

parent b85f96fd
No related branches found
No related tags found
No related merge requests found
Subproject commit 0f2c75e43083e6bacc0fae9e1ce5ce23873b75ed
Subproject commit a1dd1adebe85d108efe6576f35192fe39f81d885
......@@ -112,11 +112,24 @@ namespace Faust
char2gm_Op(opThis, gop_this);
auto bsr_funcs = GPUModHandler::get_singleton()->bsr_funcs((@FAUST_SCALAR_FOR_GM@)(0));
auto dsm_funcs = GPUModHandler::get_singleton()->dsm_funcs((@FAUST_SCALAR_FOR_GM@)(0));
auto gpu_dmat = bsr_funcs->mul_gpu_dsm_ext(gpu_mat, M.gpu_mat, nullptr, gop_this, OP_NOTRANSP);
auto gpu_dmat = bsr_funcs->mul_gpu_dsm_ext(gpu_mat, M.gpu_mat, nullptr, gop_this, OP_NOTRANSP, /*alpha*/ nullptr, /*beta*/ nullptr);
dsm_funcs->free(M.get_gpu_mat_ptr());
M.gpu_mat = gpu_dmat;
}
template<>
void MatBSR<@FAUST_SCALAR_FOR_GM@,GPU2>::bsrgemm(const MatBSR<@FAUST_SCALAR_FOR_GM@,GPU2>& A, const MatDense<@FAUST_SCALAR_FOR_GM@,GPU2>& B, MatDense<@FAUST_SCALAR_FOR_GM@,GPU2>& C, const @FAUST_SCALAR_FOR_GM@& alpha, const @FAUST_SCALAR_FOR_GM@& beta, const char opA/*='N'*/, const char opB /*= 'N'*/)
{
gm_Op gop_A;
gm_Op gop_B;
char2gm_Op(opA, gop_A);
char2gm_Op(opB, gop_B);
auto bsr_funcs = GPUModHandler::get_singleton()->bsr_funcs((@FAUST_SCALAR_FOR_GM@)(0));
auto dsm_funcs = GPUModHandler::get_singleton()->dsm_funcs((@FAUST_SCALAR_FOR_GM@)(0));
auto gpu_dmat = bsr_funcs->mul_gpu_dsm_ext(A.gpu_mat, B.gpu_mat, C.gpu_mat, gop_A, gop_B, (const @GM_SCALAR@*) reinterpret_cast<const @GM_REINTERPRET_CAST_SCALAR@*>(&alpha), (const @GM_SCALAR@*) reinterpret_cast<const @GM_REINTERPRET_CAST_SCALAR@*>(&beta));
dsm_funcs->free(C.get_gpu_mat_ptr());
}
template<>
void MatBSR<@FAUST_SCALAR_FOR_GM@,GPU2>::multiply(Vect<@FAUST_SCALAR_FOR_GM@,GPU2>& vec, char opThis/*='N'*/) const
{
......@@ -125,7 +138,7 @@ namespace Faust
auto bsr_funcs = GPUModHandler::get_singleton()->bsr_funcs((@FAUST_SCALAR_FOR_GM@)(0));
auto dsm_funcs = GPUModHandler::get_singleton()->dsm_funcs((@FAUST_SCALAR_FOR_GM@)(0));
// the backend code is specialized for vector (the number of columns is tested to call another function, see gpu_mod)
auto gpu_dmat = bsr_funcs->mul_gpu_dsm_ext(gpu_mat, vec.gpu_mat, nullptr, gop_this, OP_NOTRANSP);
auto gpu_dmat = bsr_funcs->mul_gpu_dsm_ext(gpu_mat, vec.gpu_mat, nullptr, gop_this, OP_NOTRANSP, nullptr, nullptr);
dsm_funcs->free(vec.get_gpu_mat_ptr());
vec.gpu_mat = gpu_dmat;
}
......
......@@ -79,6 +79,7 @@ namespace Faust
/*********** own member functions **************/
void multiply(MatDense<FPP,GPU2>& M, char opThis='N') const;
void multiply(Vect<FPP,GPU2>& vec, char opThis='N') const;
static void bsrgemm(const MatBSR<FPP, GPU2>& A, const MatDense<FPP,GPU2>& B, MatDense<FPP,GPU2>& C, const FPP& alpha, const FPP& beta, const char opThis/*='N'*/, const char opB /*= 'N'*/);
void tocpu(int32_t* browptr, int32_t* bcolinds, FPP* bdata, int32_t* nrows=nullptr, int32_t* ncols=nullptr, int32_t *bnrows=nullptr, int32_t *bncol=nullptr, int32_t* bnnz=nullptr) const;
void tocpu(MatBSR<FPP, Cpu> &cpu_mat) const;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment