MCPcopy Create free account
hub / github.com/creatale/node-dv / GEMMStore

Function GEMMStore

deps/opencv/modules/core/src/matmul.cpp:490–560  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

488
489
490template<typename T, typename WT> static void
491GEMMStore( const T* c_data, size_t c_step,
492 const WT* d_buf, size_t d_buf_step,
493 T* d_data, size_t d_step, Size d_size,
494 double alpha, double beta, int flags )
495{
496 const T* _c_data = c_data;
497 int j;
498 size_t c_step0, c_step1;
499
500 c_step /= sizeof(c_data[0]);
501 d_buf_step /= sizeof(d_buf[0]);
502 d_step /= sizeof(d_data[0]);
503
504 if( !c_data )
505 c_step0 = c_step1 = 0;
506 else if( !(flags & GEMM_3_T) )
507 c_step0 = c_step, c_step1 = 1;
508 else
509 c_step0 = 1, c_step1 = c_step;
510
511 for( ; d_size.height--; _c_data += c_step0, d_buf += d_buf_step, d_data += d_step )
512 {
513 if( _c_data )
514 {
515 c_data = _c_data;
516 j=0;
517 #if CV_ENABLE_UNROLLED
518 for(; j <= d_size.width - 4; j += 4, c_data += 4*c_step1 )
519 {
520 WT t0 = alpha*d_buf[j];
521 WT t1 = alpha*d_buf[j+1];
522 t0 += beta*WT(c_data[0]);
523 t1 += beta*WT(c_data[c_step1]);
524 d_data[j] = T(t0);
525 d_data[j+1] = T(t1);
526 t0 = alpha*d_buf[j+2];
527 t1 = alpha*d_buf[j+3];
528 t0 += beta*WT(c_data[c_step1*2]);
529 t1 += beta*WT(c_data[c_step1*3]);
530 d_data[j+2] = T(t0);
531 d_data[j+3] = T(t1);
532 }
533 #endif
534 for( ; j < d_size.width; j++, c_data += c_step1 )
535 {
536 WT t0 = alpha*d_buf[j];
537 d_data[j] = T(t0 + WT(c_data[0])*beta);
538 }
539 }
540 else
541 {
542 j = 0;
543 #if CV_ENABLE_UNROLLED
544 for( ; j <= d_size.width - 4; j += 4 )
545 {
546 WT t0 = alpha*d_buf[j];
547 WT t1 = alpha*d_buf[j+1];

Callers 4

GEMMStore_32fFunction · 0.85
GEMMStore_64fFunction · 0.85
GEMMStore_32fcFunction · 0.85
GEMMStore_64fcFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected