MCPcopy Create free account
hub / github.com/NGSolve/ngsolve / MultAdd

Method MultAdd

ngscuda/cuda_linalg.cpp:236–268  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

234
235
236 void DevSparseMatrix :: MultAdd (double s, const BaseVector & x, BaseVector & y) const
237 {
238 static Timer tmv("DevSparseMatrix :: MultAdd");
239 CudaRegionTimer rt(tmv);
240 // RegionTimer reg(tmv);
241
242 UnifiedVectorWrapper ux(x);
243 UnifiedVectorWrapper uy(y);
244
245 ux.UpdateDevice();
246 uy.UpdateDevice();
247
248 double alpha= s;
249 double beta = 1;
250
251 cusparseDnVecDescr_t descr_x, descr_y;
252 cusparseCreateDnVec (&descr_x, ux.Size(), ux.DevData(), CUDA_R_64F);
253 cusparseCreateDnVec (&descr_y, uy.Size(), uy.DevData(), CUDA_R_64F);
254
255 { cudaStreamCaptureStatus cap_status;
256 cudaStreamIsCapturing(ngs_cuda::ngs_cuda_stream, &cap_status);
257// std::cerr << "[SpMV] capture status before SpMV: " << cap_status << " (1=capturing)" << std::endl; }
258 }
259 cusparseSetStream(Get_CuSparse_Handle(), ngs_cuda::ngs_cuda_stream);
260 cusparseSpMV(Get_CuSparse_Handle(),
261 CUSPARSE_OPERATION_NON_TRANSPOSE, &alpha, descr,
262 descr_x, &beta, descr_y, CUDA_R_64F,
263 CUSPARSE_SPMV_ALG_DEFAULT, spmv_buffer);
264
265 cusparseDestroyDnVec(descr_x);
266 cusparseDestroyDnVec(descr_y);
267 uy.InvalidateHost();
268 }
269
270
271 void DevSparseMatrix :: MultTransAdd (double s, const BaseVector & x, BaseVector & y) const

Callers

nothing calls this directly

Calls 7

Get_CuSparse_HandleFunction · 0.85
DeviceParallelForFunction · 0.85
InvalidateHostMethod · 0.80
SizeMethod · 0.45
DevDataMethod · 0.45
WidthMethod · 0.45
DataMethod · 0.45

Tested by

no test coverage detected