/** Perform matrix-vector product. \f$ y = \alpha A x + \beta y \f$ (transA == MagmaNoTrans), or \n \f$ y = \alpha A^T x + \beta y \f$ (transA == MagmaTrans), or \n \f$ y = \alpha A^H x + \beta y \f$ (transA == MagmaConjTrans). @param[in] transA Operation to perform on A. @param[in] m Number of rows of A. m >= 0. @param[in] n Number of columns of A. n >= 0. @param[in] alpha Scalar \f$ \alpha \f$ @param[in] dA COMPLEX array of dimension (ldda,n), ldda >= max(1,m). The m-by-n matrix A, on GPU device. @param[in] ldda Leading dimension of dA. @param[in] dx COMPLEX array on GPU device. If transA == MagmaNoTrans, the n element vector x of dimension (1 + (n-1)*incx); \n otherwise, the m element vector x of dimension (1 + (m-1)*incx). @param[in] incx Stride between consecutive elements of dx. incx != 0. @param[in] beta Scalar \f$ \beta \f$ @param[in,out] dy COMPLEX array on GPU device. If transA == MagmaNoTrans, the m element vector y of dimension (1 + (m-1)*incy); \n otherwise, the n element vector y of dimension (1 + (n-1)*incy). @param[in] incy Stride between consecutive elements of dy. incy != 0. @ingroup magma_cblas2 */ extern "C" void magma_cgemv( magma_trans_t transA, magma_int_t m, magma_int_t n, magmaFloatComplex alpha, magmaFloatComplex_const_ptr dA, size_t dA_offset, magma_int_t ldda, magmaFloatComplex_const_ptr dx, size_t dx_offset, magma_int_t incx, magmaFloatComplex beta, magmaFloatComplex_ptr dy, size_t dy_offset, magma_int_t incy, magma_queue_t queue ) { if ( m <= 0 || n <= 0 ) return; cl_int err = clblasCgemv( clblasColumnMajor, clblas_trans_const( transA ), m, n, alpha, dA, dA_offset, ldda, dx, dx_offset, incx, beta, dy, dy_offset, incy, 1, &queue, 0, NULL, g_event ); clFlush(queue); check_error( err ); }
void xGemv<cl_float2>:: call_func() { timer.Start(timer_id); clblasCgemv(order_, buffer_.trans_a_, buffer_.m_, buffer_.n_, buffer_.alpha_, buffer_.buf_a_, buffer_.offA_, buffer_.lda_, buffer_.buf_x_, 0, 1, buffer_.beta_, buffer_.buf_y_, 0, 1, numQueues, queues_, 0, NULL, &event_); clWaitForEvents(1, &event_); timer.Stop(timer_id); }