Adelsbach/VSIPL
Core Programming Reference Guide
DD-00016-015
Core

This manual is preliminary and incomplete.
While our Core implementation implements all functions given in the standard we are still working on completing this documentation.

Please refer to the VSIPL standard for a complete function reference of the Core profile until we have completed work on this documentation.

6.1.6 vsip_dgemp_p - General Matrix Product

typedef enum _vsip_mat_op { 
  VSIP_MAT_NTRANS = 0, // op(A) = A 
  VSIP_MAT_TRANS  = 1, // op(A) = A^T 
  VSIP_MAT_HERM   = 2, // op(A) = A^H (complex only) 
  VSIP_MAT_CONJ   = 3  // op(X) = A^* (complex only) 
} vsip_mat_op; 
 
void vsip_gemp_f(vsip_scalar_f alpha, const vsip_mview_f *a, vsip_mat_op OpA, const vsip_mview_f *b, vsip_mat_op OpB, vsip_scalar_f beta, const vsip_mview_f *r); 
void vsip_cgemp_f(vsip_cscalar_f alpha, const vsip_cmview_f *a, vsip_mat_op OpA, const vsip_cmview_f *b, vsip_mat_op OpB, vsip_cscalar_f beta, const vsip_cmview_f *r);
Description

This function performs a generalized matrix-matrix operation of the form:

R = α·op(A)·op(B)+β ·R

where op(X) can be X, XT, or XH.

Parameters
Example

vsip_mview_f *A, *B, *R; 
vsip_length m = 3, n = 2, p = 4; 
 
// Create matrices 
A = vsip_mcreate_f(m, n, VSIP_ROW, VSIP_MEM_NONE); 
B = vsip_mcreate_f(n, p, VSIP_ROW, VSIP_MEM_NONE); 
R = vsip_mcreate_f(m, p, VSIP_ROW, VSIP_MEM_NONE); 
 
// Initialize matrices with some values 
 
// Basic matrix multiplication: R = A * B 
vsip_gemp_f(1.0f, A, VSIP_MAT_NTRANS, B, VSIP_MAT_NTRANS, 0.0f, R); 
 
// Matrix multiplication with scaling: R = 2.0*A*B + R 
vsip_gemp_f(2.0f, A, VSIP_MAT_NTRANS, B, VSIP_MAT_NTRANS, 1.0f, R); 
 
// Transpose operations: R = A^T * B 
vsip_gemp_f(1.0f, A, VSIP_MAT_TRANS, B, VSIP_MAT_NTRANS, 0.0f, R); 
 
// Both transposed: R = A^T * B^T 
vsip_gemp_f(1.0f, A, VSIP_MAT_TRANS, B, VSIP_MAT_TRANS, 0.0f, R); 
 
// Clean up 
vsip_malldestroy_f(A); 
vsip_malldestroy_f(B); 
vsip_malldestroy_f(R);
Notes