Matrix¶
Base Matrix¶
hl_matrix.h¶
Functions
-
void
hl_matrix_add
(real *A_d, real *B_d, real *C_d, int dimM, int dimN, real alpha, real beta)¶ Matrix addition: C_d[i] = alpha * A_d[i] + beta * B_d[i].
- Parameters
A_d
-input matrix (M x N).
B_d
-input matrix (M x N).
C_d
-output matrix (M x N).
dimM
-matrix height.
dimN
-matrix width.
alpha
-scalar used for addition.
beta
-scalar used for addition.
-
void
hl_matrix_softmax
(real *A_d, real *C_d, int dimM, int dimN)¶ Matrix Softmax.
- Parameters
A_d
-input maxtrix (M x N).
C_d
-output matrix (M x N).
dimM
-matrix height.
dimN
-matrix width.
-
void
hl_matrix_softmax_derivative
(real *grad_d, real *output_d, real *sftmaxSum_d, int dimM, int dimN)¶ Matrix softmax derivative.
- Parameters
grad_d
-intput matrix (M x N).
output_d
-output matrix (M x N).
sftmaxSum_d
-softmax sum (M * 1).
dimM
-matrix height.
dimN
-matrix width.
-
void
hl_sequence_softmax_forward
(real *A_d, real *C_d, const int *index, int numSequence)¶ Sequence softmax.
- Parameters
A_d
-input vector.
C_d
-output vector.
index
-start positions of sequence.
numSequence
-sequence number.
-
void
hl_matrix_classification_error
(real *A_d, int *B_d, real *C_d, int dimM, int dimN)¶ Matrix classification error.
- Parameters
A_d
-input matrix (M x N).
B_d
-input vector (M x 1).
C_d
-output vector (M x 1).
dimM
-matrix height.
dimN
-matrix width.
-
void
hl_matrix_cross_entropy
(real *A_d, real *C_d, int *label_d, int dimM, int dimN)¶ Matrix cross entropy.
- Parameters
A_d
-input matrix (M x N).
C_d
-output matrix (M X 1).
label_d
-input matrix (M x 1).
dimM
-matrix height.
dimN
-matrix width.
-
void
hl_matrix_cross_entropy_bp
(real *grad_d, real *output_d, int *label_d, int dimM, int dimN)¶ Matrix cross entropy back propagation.
- Parameters
grad_d
-output matrix (M x N).
output_d
-input matrix (M x N).
label_d
-input vector (M x 1).
dimM
-matrix height.
dimN
-matrix width.
-
void
hl_matrix_zero_mem
(real *data, int num)¶ Matrix zero memory.
- Parameters
data
-input data.
num
-length of data.
-
void
hl_param_relu_forward
(real *output, real *input, real *w, int width, int height, int partial_sum)¶ parameter relu forward
- Parameters
output
-output data
input
-input data
w
-parameter data
width
-matrix width
height
-matrix height
partial_sum
-
-
void
hl_param_relu_backward_w
(real *grad_w, real *grad_o, real *input, int width, int height, int partial_sum)¶ parameter relu backward w
- Parameters
grad_w
-w grad
grad_o
-output grad
input
-input data
width
-matrix width
height
-matrix height
partial_sum
-
-
void
hl_param_relu_backward_diff
(real *grad_o, real *input, real *w, real *diff, int width, int height, int partial_sum)¶ parameter relu backward diff
- Parameters
grad_o
-output grad
input
-input data
w
-parameter
diff
-diff
width
-matrix width
height
-matrix height
partial_sum
-
-
void
hl_cossim
(real *output, real *input1, real *input2, int width, int input1_height, int input2_height, real scale)¶ cos sim forward
- Parameters
output
-output data
input1
-input1 data(matrix)
input2
-input2 data(matrix or vector)
width
-matrix width
input1_height
-input1_height
input2_height
-input2_height
scale
-scale factor
-
void
hl_cossim_derivative
(real *grad, real *output, real *prevOutX, real *prevOutY, real *prevGradX, real *prevGradY, int width, int input1_height, int input2_height, real scale)¶ cos sim derivate
- Parameters
grad
-output grad
output
-output data
prevOutX
-input1 data
prevOutY
-input2 data
prevGradX
-input1 grad
prevGradY
-input2 grad
width
-matrix width
input1_height
-input1 height
input2_height
-input2 height
scale
-scale factor
hl_matrix_base.h¶
-
class
BaseOp
¶ Public Functions
-
BaseOp
()¶
-
BaseOp
(const real s1)¶
-
BaseOp
(const real s1, const real s2)¶
-
INLINE vecType BaseOp::vecOp(const vecType a)
const
-
INLINE vecType BaseOp::vecOp(const vecType a, const vecType b)
const
Public Static Attributes
-
const bool
sse
¶
-
-
namespace
aggregate
¶ -
class
sum
¶ Inherits from aggregate::SSESum
Public Functions
-
INLINE real aggregate::sum::init()
-
INLINE real aggregate::sum::operator()(const real a, const real b)
const
-
-
class
max
¶ Inherits from aggregate::SSEMax
Public Functions
-
INLINE real aggregate::max::init()
-
INLINE real aggregate::max::operator()(const real a, const real b)
const
-
-
class
min
¶ Inherits from aggregate::SSEMin
Public Functions
-
INLINE real aggregate::min::init()
-
INLINE real aggregate::min::operator()(const real a, const real b)
const
-
-
class
-
namespace
base
¶ -
namespace
binary
¶ -
class
add
¶ Inherits from base::binary::SSEAdd
Public Functions
-
INLINE real base::binary::add::operator()(const real a, const real b)
const
-
-
class
add2
¶ Inherits from base::binary::SSEAdd2
Public Functions
-
add2
(const real s1, const real s2)¶
-
INLINE real base::binary::add2::operator()(const real a, const real b)
const
-
-
class
sub
¶ Inherits from base::binary::SSESub
Public Functions
-
INLINE real base::binary::sub::operator()(const real a, const real b)
const
-
-
class
mul
¶ Inherits from base::binary::SSEMul
Public Functions
-
INLINE real base::binary::mul::operator()(const real a, const real b)
const
-
-
class
div
¶ Inherits from base::binary::SSEDiv
Public Functions
-
INLINE real base::binary::div::operator()(const real a, const real b)
const
-
-
class
squaredDiff
¶ Inherits from base::binary::SSESquaredDiff
Public Functions
-
INLINE real base::binary::squaredDiff::operator()(const real a, const real b)
const
-
-
class
first
¶ Inherits from base::binary::SSEFirst
Public Functions
-
INLINE real base::binary::first::operator()(const real a, const real b)
const
-
-
class
second
¶ Inherits from base::binary::SSESecond
Public Functions
-
INLINE real base::binary::second::operator()(const real a, const real b)
const
-
-
class
-
namespace
hl_matrix_apply.cuh¶
Defines
-
HL_MATRIX_APPLY_H_
¶
Functions
- template <class T, class Op>
-
void
hl_cpu_apply_unary_op
(Op op, T *A_h, int dimM, int dimN, int lda)¶ CPU element wise unary operator.
element wise op(a) for 0 <= i < dimM & for 0 <= j < dimN.
CPU element wise unary operator.
- Parameters
op
-unary op. see namespace unary
A_h
-matrix.
dimM
-matrix height.
dimN
-matrix width.
lda
-leading dimension of A.
- template <class T, class Op, bool BAsRowVector, bool BAsColVector>
-
void
hl_cpu_apply_binary_op
(Op op, T *A_h, T *B_h, int dimM, int dimN, int lda, int ldb)¶ CPU element wise binary operator.
element wise op(a, b) for 0 <= i < dimM & for 0 <= j < dimN.
if (BAsRowVector == 0 && BAsColVector == 0) op(A[i * lda + j], B[i * ldb + j])
if (BAsRowVector == 1 && BAsColVector == 0) op(A[i * lda + j], B[j])
if (BAsRowVector == 0 && BAsColVector == 1) op(A[i * lda + j], B[i * ldb])
if (BAsRowVector == 1 && BAsColVector == 1) op(A[i * lda + j], B[0])
CPU element wise binary operator.
- Parameters
op
-binary op. see namespace binary.
A_h
-matrix.
B_h
-matrix.
dimM
-matrix height.
dimN
-matrix width.
lda
-leading dimension of A.
ldb
-leading dimension of B.
- template <class T, class Op, bool CAsRowVector, bool CAsColVector>
-
void
hl_cpu_apply_ternary_op
(Op op, T *A_h, T *B_h, T *C_h, int dimM, int dimN, int lda, int ldb, int ldc)¶ CPU element wise ternary operator.
element wise op(a, b, c) for 0 <= i < dimM & for 0 <= j < dimN.
if (CAsRowVector == 0 && CAsColVector == 0) op(A[i*lda + j], B[i*ldb + j], C[i*ldc + j])
if (CAsRowVector == 1 && CAsColVector == 0) op(A[i*lda + j], B[i*ldb + j], C[j])
if (CAsRowVector == 0 && CAsColVector == 1) op(A[i*lda + j], B[i*ldb + j], C[i*ldc])
if (CAsRowVector == 1 && CAsColVector == 1) op(A[i*lda + j], B[i*ldb + j], C[0])
CPU element wise ternary operator.
- Parameters
op
-ternary op. see namespace ternary.
A_h
-matrix.
B_h
-matrix.
C_h
-matrix.
dimM
-matrix height.
dimN
-matrix width.
lda
-leading dimension of A.
ldb
-leading dimension of B.
ldc
-leading dimension of C.
- template <class T, class Op>
-
void
hl_cpu_apply_quaternary_op
(Op op, T *A_h, T *B_h, T *C_h, T *D_h, int dimM, int dimN, int lda, int ldb, int ldc, int ldd)¶ CPU element wise quaternary operator. element wise op(a, b, c, d) for 0 <= i < dimM & for 0 <= j < dimN.
CPU element wise quaternary operator. element wise op(a, b, c, d) for 0 <= i < dimM & for 0 <= j < dimN.
- Parameters
op
-quaternary op. see namespace ternary.
A_h
-matrix.
B_h
-matrix.
C_h
-matrix.
D_h
-matrix.
dimM
-matrix height.
dimN
-matrix width.
lda
-leading dimension of A.
ldb
-leading dimension of B.
ldc
-leading dimension of C.
ldd
-leading dimension of D.
- template <class T, class Op>
-
void
hl_gpu_apply_unary_op
(Op op, T *A_d, int dimM, int dimN, int lda)¶ GPU element wise unary operator. element wise op(a) for 0 <= i < dimM & for 0 <= j < dimN.
- Parameters
op
-unary op. see namespace unary.
A_d
-matrix.
dimM
-matrix height.
dimN
-matrix width.
lda
-leading dimension of A.
- template <class T, class Op, bool BAsRowVector, bool BAsColVector>
-
void
hl_gpu_apply_binary_op
(Op op, T *A_d, T *B_d, int dimM, int dimN, int lda, int ldb)¶ GPU element wise binary operator.
element wise op(a, b) for 0 <= i < dimM & for 0 <= j < dimN
if (BAsRowVector == 0 && BAsColVector == 0) op(A[i * lda + j], B[i * ldb + j])
if (BAsRowVector == 1 && BAsColVector == 0) op(A[i * lda + j], B[j])
if (BAsRowVector == 0 && BAsColVector == 1) op(A[i * lda + j], B[i * ldb])
if (BAsRowVector == 1 && BAsColVector == 1) op(A[i * lda + j], B[0])
- Parameters
op
-binary op. see namespace binary.
A_d
-matrix.
B_d
-matrix.
dimM
-matrix height.
dimN
-matrix width.
lda
-leading dimension of A.
ldb
-leading dimension of B.
- template <class T, class Op, bool CAsRowVector, bool CAsColVector>
-
void
hl_gpu_apply_ternary_op
(Op op, T *A_d, T *B_d, T *C_d, int dimM, int dimN, int lda, int ldb, int ldc)¶ GPU element wise ternary operator.
element wise op(a, b, c) for 0 <= i < dimM & for 0 <= j < dimN.
if (CAsRowVector == 0 && CAsColVector == 0) op(A[i*lda + j], B[i*ldb + j], C[i*ldc + j])
if (CAsRowVector == 1 && CAsColVector == 0) op(A[i*lda + j], B[i*ldb + j], C[j])
if (CAsRowVector == 0 && CAsColVector == 1) op(A[i*lda + j], B[i*ldb + j], C[i*ldc])
if (CAsRowVector == 1 && CAsColVector == 1) op(A[i*lda + j], B[i*ldb + j], C[0])
- Parameters
op
-ternary op. see namespace ternary.
A_d
-matrix.
B_d
-matrix.
C_d
-matrix.
dimM
-matrix height.
dimN
-matrix width.
lda
-leading dimension of A.
ldb
-leading dimension of B.
ldc
-leading dimension of C.
- template <class T, class Op>
-
void
hl_gpu_apply_quaternary_op
(Op op, T *A_d, T *B_d, T *C_d, T *D_d, int dimM, int dimN, int lda, int ldb, int ldc, int ldd)¶ GPU element wise quaternary operator. element wise op(a, b, c, d) for 0 <= i < dimM & for 0 <= j < dimN.
- Parameters
op
-quaternary op. see namespace ternary.
A_d
-matrix.
B_d
-matrix.
C_d
-matrix.
D_d
-matrix.
dimM
-matrix height.
dimN
-matrix width.
lda
-leading dimension of A.
ldb
-leading dimension of B.
ldc
-leading dimension of C.
ldd
-leading dimension of D.
- template <class Agg, class Op, class Saver>
-
void
hl_cpu_matrix_row_op
(Agg agg, Op op, Saver sv, int dimM, int dimN, real *dst, int ld, real *A, int lda)¶ CPU matrix row operator.
- template <class Saver, class Agg, class Op>
-
void
hl_cpu_matrix_row_op
(Agg agg, Op op, int dimM, int dimN, real *dst, int ld, real *A, int lda, real *B, int ldb)¶ CPU matrix row operator.
- Parameters
agg
-aggregate operator expression.
op
-operator expression.
dimM
-matrix height.
dimN
-matrix width.
dst
-destination matrix.
ld
-leading dimension of dst matrix.
*A
-matrix A.
lda
-leading dimension of matrix A.
*B
-matrix B.
ldb
-leading dimension of matrix B.
- template <class Agg, class Op, class Saver>
-
void
hl_cpu_matrix_column_op
(Agg agg, Op op, Saver sv, int dimM, int dimN, real *dst, real *A, int lda)¶ CPU matrix column operator.
- Parameters
agg
-aggregate operator expression.
op
-operator expression.
sv
-assignment operator expression.
dimM
-matrix height.
dimN
-matrix width.
dst
-destination matrix.
*A
-matrix A.
lda
-leading dimension of matrix A.
- template <class Agg, class Op, class Saver>
-
void
hl_cpu_matrix_column_op
(Agg agg, Op op, Saver sv, int dimM, int dimN, real *dst, real *A, int lda, real *B, int ldb)¶ CPU matrix column operator.
- Parameters
agg
-aggregate operator expression.
op
-operator expression.
sv
-assignment operator expression.
dimM
-matrix height.
dimN
-matrix width.
dst
-destination matrix.
*A
-matrix A.
lda
-leading dimension of matrix A.
*B
-matrix B.
ldb
-leading dimension of matrix B.
- template <class Agg, class Op, class Saver>
-
void
hl_gpu_matrix_row_op
(Agg agg, Op op, Saver sv, int dimM, int dimN, real *dst, int ld, real *A, int lda)¶ GPU matrix row operator.
- Parameters
agg
-aggregate operator expression.
op
-operator expression.
sv
-assignment operator expression.
dimM
-matrix height.
dimN
-matrix width.
dst
-destination matrix.
ld
-leading dimension of dst.
*A
-matrix A.
lda
-leading dimension of matrix A.
- template <class Saver, class Agg, class Op>
-
void
hl_gpu_matrix_row_op
(Agg agg, Op op, int dimM, int dimN, real *dst, int ld, real *A, int lda, real *B, int ldb)¶ GPU matrix row operator.
- Parameters
agg
-aggregate operator expression.
op
-operator expression.
dimM
-matrix height.
dimN
-matrix width.
dst
-destination matrix.
ld
-leading dimension of dst matrix.
*A
-matrix A.
lda
-leading dimension of matrix A.
*B
-matrix B.
ldb
-leading dimension of matrix B.
- template <class Agg, class Op, class Saver>
-
void
hl_gpu_matrix_column_op
(Agg agg, Op op, Saver sv, int dimM, int dimN, real *dst, real *A, int lda)¶ GPU matrix column operator.
- Parameters
agg
-aggregate operator expression.
op
-operator expression.
sv
-assignment operator expression.
dimM
-matrix height.
dimN
-matrix width.
dst
-destination matrix.
*A
-matrix A.
lda
-leading dimension of matrix A.
- template <class Agg, class Op, class Saver>
-
void
hl_gpu_matrix_column_op
(Agg agg, Op op, Saver sv, int dimM, int dimN, real *dst, real *A, int lda, real *B, int ldb)¶ GPU matrix column operator.
- Parameters
agg
-aggregate operator expression.
op
-operator expression.
sv
-assignment operator expression.
dimM
-matrix height.
dimN
-matrix width.
dst
-destination matrix.
*A
-matrix A.
lda
-leading dimension of matrix A.
*B
-matrix B.
ldb
-leading dimension of matrix B.
hl_matrix_ops.cuh¶
Defines
-
HL_MATRIX_OPS_CUH_
¶
-
HL_DEVICE
¶
-
ONE_PARAMETER
(name)¶ parameter macro.
-
TWO_PARAMETER
(name)¶
-
THREE_PARAMETER
(name)¶
-
FOUR_PARAMETER
(name)¶
-
DEFINE_MATRIX_UNARY_OP
(name, op)¶ unary operator macro.
- Note
- op format: op supports multiple expressions that are separated by a comma. e.g. a, b
- See
hl_gpu_apply_unary_op
hl_cpu_apply_unary_op
- Parameters
name
-operator name.
op
-operator expression.
-
DEFINE_MATRIX_UNARY_PARAMETER_OP
(name, PARA_MACRO, op)¶ unary operator macro.
- Note
- op format: op supports multiple expressions that are separated by a comma. e.g. a, b
- See
hl_gpu_apply_unary_op
hl_cpu_apply_unary_op
- Parameters
name
-operator name.
PARA_MACRO
-parameter macro.
op
-operator expression.
-
DEFINE_MATRIX_BINARY_OP
(name, op)¶ binary operator macro.
- Note
- op format: op supports multiple expressions that are separated by a comma. e.g. a, b
- See
hl_gpu_apply_unary_op
hl_cpu_apply_unary_op
- Parameters
name
-operator name.
op
-operator expression.
-
DEFINE_MATRIX_BINARY_PARAMETER_OP
(name, PARA_MACRO, op)¶ binary operator macro.
- Note
- op format: op supports multiple expressions that are separated by a comma. e.g. a, b
- See
hl_gpu_apply_binary_op
hl_cpu_apply_binary_op
- Parameters
name
-operator name.
PARA_MACRO
-parameter macro.
op
-operator expression.
-
DEFINE_MATRIX_TERNARY_OP
(name, op)¶ ternary operator macro.
- Note
- op format: op supports multiple expressions that are separated by a comma. e.g. a, b, c
- See
hl_gpu_apply_ternary_op
hl_cpu_apply_ternary_op
- Parameters
name
-operator name.
op
-operator expression.
-
DEFINE_MATRIX_TERNARY_PARAMETER_OP
(name, PARA_MACRO, op)¶ ternary operator macro.
- Note
- op format: op supports multiple expressions that are separated by a comma. e.g. a, b, c
- See
hl_gpu_apply_ternary_op
hl_cpu_apply_ternary_op
- Parameters
name
-operator name.
PARA_MACRO
-parameter macro.
op
-operator expression.
-
DEFINE_MATRIX_QUATERNARY_OP
(name, op)¶ quaternary operator macro.
- Note
- op format: op supports multiple expressions that are separated by a comma. e.g. a, b, c, d
- See
hl_gpu_apply_quaternary_op
hl_cpu_apply_quaternary_op
- Parameters
name
-operator name.
op
-operator expression.
-
DEFINE_MATRIX_QUATERNARY_PARAMETER_OP
(name, PARA_MACRO, op)¶ quaternary operator macro.
- Note
- op format: op supports multiple expressions that are separated by a comma. e.g. a, b, c, d
- See
hl_gpu_apply_quaternary_op
hl_cpu_apply_quaternary_op
- Parameters
name
-operator name.
PARA_MACRO
-parameter macro.
op
-operator expression.
hl_sse_matrix_kernel.cuh¶
Functions
-
bool
hl_check_align
(size_t size)¶
-
bool
hl_check_align
(void *ptr)¶
- template <class Agg, class Op, class Saver>
-
void
hl_sse_matrix_row_op
(Agg agg, Op op, Saver sv, int dimM, int dimN, real *dst, int ld, real *A, int lda)¶
- template <class Agg, class Op, class Saver>
-
void
hl_sse_matrix_row_op
(Agg agg, Op op, Saver sv, int dimM, int dimN, real *dst, int ld, real *A, int lda, real *B, int ldb)¶
- template <class Agg, class Op, class Saver>
-
void
hl_matrix_column_op
(Agg agg, Op op, Saver sv, int dimM, int dimN, real *dst, real *A, int lda)¶
- template <class Agg, class Op, class Saver>
-
void
hl_matrix_column_op
(Agg agg, Op op, Saver sv, int dimM, int dimN, real *dst, real *A, int lda, real *B, int ldb)¶
- template <int MaxRow, class Agg, class Op, class Saver>
-
void
hl_sse_column_op_with_rem
(Agg agg, Op op, Saver sv, int dimM, int dimN, real *dst, real *A, int lda)¶
- template <int Step, class Agg, class Op, class Saver>
-
void
hl_sse_matrix_column_op
(Agg agg, Op op, Saver sv, int dimM, int dimN, real *dst, real *A, int lda)¶
- template <class Agg, class Op, class Saver>
-
void
hl_sse_matrix_column_op
(Agg agg, Op op, Saver sv, int dimM, int dimN, real *dst, real *A, int lda)¶
- template <int MaxRow, class Agg, class Op, class Saver>
-
void
hl_sse_column_op_with_rem
(Agg agg, Op op, Saver sv, int dimM, int dimN, real *dst, real *A, int lda, real *B, int ldb)¶
- template <int Step, class Agg, class Op, class Saver>
-
void
hl_sse_matrix_column_op
(Agg agg, Op op, Saver sv, int dimM, int dimN, real *dst, real *A, int lda, real *B, int ldb)¶
- template <class Agg, class Op, class Saver>
-
void
hl_sse_matrix_column_op
(Agg agg, Op op, Saver sv, int dimM, int dimN, real *dst, real *A, int lda, real *B, int ldb)¶
hl_batch_transpose.h¶
Functions
-
void
batchTranspose
(const real *input, real *output, int width, int height, int batchSize)¶ Perform matrix transpose for each data in the batch.
- Note
- Both the inpt and output are arranged in batch-first order. Each batch has height * width data, which are arranged in height-first (or row-first) manner.
- Parameters
input
-height * width elements in batch.
output
-height * width elements in batch.
width
-width of batch data.
height
-height of batch data.
batchSize
-batch size
Sparse Matrix¶
hl_sparse.h¶
Functions
-
void
hl_malloc_sparse_matrix
(hl_sparse_matrix_s *A_d, hl_matrix_format_t format, hl_matrix_value_t value_type, int dimM, int dimN, int nnz)¶ Malloc a sparse matrix.
- Parameters
A_d
-sparse matrix.
format
-format.
value_type
-valueType.
dimM
-height.
dimN
-width.
nnz
-number of none zero element.
-
void
hl_free_sparse_matrix
(hl_sparse_matrix_s A_d)¶ Free a sparse matrix.
- Parameters
A_d
-GPU sparse matrix.
-
void
hl_construct_sparse_matrix
(hl_sparse_matrix_s *A_d, void *dest_d, size_t size, hl_matrix_format_t format, hl_matrix_value_t value_type, int dimM, int dimN, int nnz)¶ Construct a sparse matrix use input gpu memory.
- Note
- Destruct api is hl_destruct_sparse_matrix.
- Parameters
A_d
-sparse matrix.
dest_d
-gpu memory.
size
-size of dest_d.
format
-format.
value_type
-valueType.
dimM
-height.
dimN
-width.
nnz
-number of none zero element.
-
void
hl_construct_sparse_matrix
(hl_sparse_matrix_s *A_d, real *value_d, int *rows_d, int *cols_d, hl_matrix_format_t format, hl_matrix_value_t value_type, int dimM, int dimN, int nnz)¶ Use three arrays to construct sparse matrix.
if format is HL_SPARSE_CSR, size of rows_d is dimM + 1, and size of cols_d is nnz;
if format is HL_SPARSE_CSC, size of rows_d is nnz, and size of cols_d is dimN + 1.
if valueType is HL_NO_VALUE, size of value_d is zero, else size of value_d is nnz.
- Note
- The corresponding destructor interface is hl_destruct_sparse_matrix.
- Parameters
A_d
-sparse matrix.
value_d
-value.
rows_d
-row.
cols_d
-col.
format
-format.
value_type
-valueType.
dimM
-height.
dimN
-width.
nnz
-number of none zero element.
-
void
hl_destruct_sparse_matrix
(hl_sparse_matrix_s A_d)¶ Destruct sparse matrix.
- Parameters
A_d
-sparse matrix.
-
void
hl_memcpy_csr_matrix
(hl_sparse_matrix_s csr_matrix, real *csr_val, int *csr_row, int *csr_col, hl_stream_t stream)¶ Copy value & index to sparse matrix.
if csr_matrix is HL_FLOAT_VALUE.
- csr_val, csr_row, csr_col three pointers are not null.
- csr_val is not null, csr_row adn csr_col are null.
if csr_matrix is HL_NO_VALUE.
- csr_val will be ignore, csr_row and csr_col are not null.
- Parameters
csr_matrix
-sparse matrix.
csr_val
-point to csr value array(nnz).
csr_row
-point to csr row indices array(dimM+1).
csr_col
-point to csr col indices array(nnz).
stream
-hl_stream_t type.
-
void
hl_memcpy_csc_matrix
(hl_sparse_matrix_s csc_matrix, real *csc_val, int *csc_row, int *csc_col, hl_stream_t stream)¶ Copy value & index to sparse matrix.
if csr_matrix is HL_FLOAT_VALUE.
- csc_val, csc_row, csc_col three pointers are not null.
- csc_val is not null, csc_row and csc_col are null.
if csr_matrix is HL_NO_VALUE.
- csc_val will be ignore, csc_row and csc_col are not null.
- Parameters
csc_matrix
-sparse matrix.
csc_val
-point to csc value array(nnz).
csc_row
-point to csc row indices array(nnz).
csc_col
-point to csc col indices array(dimN+1).
stream
-hl_stream_t type.
-
void
hl_memcpy_sparse_matrix
(hl_sparse_matrix_s dst, hl_sparse_matrix_s src, hl_stream_t stream)¶ Copy sparse matrix to sparse matrix.
- Note
- 1. Format of the src matrix and dst matrix needs to be consistent.
- Source matrix has value, the destination matrix has value or no value can be; the source matrix is no value, then the destination matrix must also be no value;
- Parameters
dst
-sparse matrix.
src
-sparse matrix.
stream
-hl_stream_t type.
-
void
hl_matrix_csr2dense
(hl_sparse_matrix_s A_d, real *C_d, int dimM, int dimN)¶ csr matrix to dense matrix.
- Parameters
A_d
-csr matrix.
C_d
-dense matrix.
dimM
-height.
dimN
-width.
-
void
hl_matrix_csc2dense
(hl_sparse_matrix_s A_d, real *C_d, int dimM, int dimN)¶ csc matrix to dense matrix.
- Parameters
A_d
-csc matrix.
C_d
-dense matrix.
dimM
-height.
dimN
-width.
-
void
hl_matrix_csr_mul_dense
(hl_sparse_matrix_s A_d, hl_trans_op_t transa, real *B_d, hl_trans_op_t transb, real *C_d, int dimM, int dimN, int dimK, real alpha, real beta)¶ C_d = alpha*(op(A_d) * op(B_d)) + beta*C_d.
- Note
- transb is not support HPPL_OP_T.
- Parameters
A_d
-csr sparse matrix.
transa
-operation op(A) that is non-or transpose.
B_d
-dense matrix.
transb
-operation op(B) that is non-or transpose.
C_d
-dense matrix.
dimM
-matrix height of op(A) & C
dimN
-matrix width of op(B) & C
dimK
-width of op(A) & height of op(B)
alpha
-scalar used for multiplication.
beta
-scalar used for multiplication. If beta is zero, C does not have to be a valid input.
-
void
hl_matrix_csc_mul_dense
(hl_sparse_matrix_s A_d, hl_trans_op_t transa, real *B_d, hl_trans_op_t transb, real *C_d, int dimM, int dimN, int dimK, real alpha, real beta)¶ C_d = alpha*(op(A_d) * op(B_d)) + beta*C_d.
- Note
- transb is not support HPPL_OP_T.
- Parameters
A_d
-sparse matrix.
transa
-operation op(A) that is non-or transpose.
B_d
-dense matrix.
transb
-operation op(B) that is non-or transpose.
C_d
-dense matrix.
dimM
-matrix height of op(A) & C
dimN
-matrix width of op(B) & C
dimK
-width of op(A) & height of op(B)
alpha
-scalar used for multiplication.
beta
-scalar used for multiplication. If beta is zero, C does not have to be a valid input.
-
void
hl_matrix_dense_mul_csc
(real *A_d, hl_trans_op_t transa, hl_sparse_matrix_s B_d, hl_trans_op_t transb, real *C_d, int dimM, int dimN, int dimK, real alpha, real beta)¶ C_d = alpha*(op(A_d) * op(B_d)) + beta*C_d.
- Note
- transa is not support HPPL_OP_T.
- Parameters
A_d
-dense matrix.
transa
-operation op(A) that is non-or transpose.
B_d
-csc sparse matrix.
transb
-operation op(B) that is non-or transpose.
C_d
-dense matrix.
dimM
-matrix height of op(A) & C
dimN
-matrix width of op(B) & C
dimK
-width of op(A) & height of op(B)
alpha
-scalar used for multiplication.
beta
-scalar used for multiplication. If beta is zero, C does not have to be a valid input.
-
void
hl_sparse_matrix_mul
(real *A_d, hl_trans_op_t transa, real *B_d, hl_trans_op_t transb, hl_sparse_matrix_s C_d, int dimM, int dimN, int dimK, real alpha, real beta)¶ C_d = alpha*(op(A_d) * op(B_d)) + beta*C_d. Calculated based on the non-zero elements of the matrix C.
- Note
- transb is not support HPPL_OP_T.
- Parameters
A_d
-dense matrix.
transa
-operation op(A) that is non-or transpose.
B_d
-dense matrix.
transb
-operation op(B) that is non-or transpose.
C_d
-sparse matrix.
dimM
-matrix height of op(A) & C
dimN
-matrix width of op(B) & C
dimK
-width of op(A) & height of op(B)
alpha
-scalar used for multiplication.
beta
-scalar used for multiplication.
-
void
hl_matrix_dense_mul_csr
(real *A_d, hl_trans_op_t transa, hl_sparse_matrix_s B_d, hl_trans_op_t transb, real *C_d, int dimM, int dimN, int dimK, real alpha, real beta)¶ C_d = alpha*(op(A_d) * op(B_d)) + beta*C_d.
- Note
- transa is not support HPPL_OP_T.
- Parameters
A_d
-dense matrix.
transa
-operation op(A) that is non-or transpose.
B_d
-sparse matrix.
transb
-operation op(B) that is non-or transpose.
C_d
-dense matrix.
dimM
-matrix height of op(A) & C
dimN
-matrix width of op(B) & C
dimK
-width of op(A) & height of op(B)
alpha
-scalar used for multiplication.
beta
-scalar used for multiplication. If beta is zero, C does not have to be a valid input.
-
void
hl_memcpy_from_csc_matrix
(real *csc_val, size_t val_size, int *csc_row, size_t row_size, int *csc_col, size_t col_size, hl_sparse_matrix_s csc_matrix, hl_stream_t stream)¶ Memcpy csc_matrix to host.
a. according to csc_matrix, update three arrays
- csc_val, csc_row, csc_col are dest Address.
- if type of csc_matrix is HL_NO_VALUE, update csc_row and csc_col
- if type of csc_matrix is HL_FLOAT_VALUE, update csc_row, csc_col and csc_value.
b. The interface is asynchronous copy. To ensure that the data is copied please call the synchronous interface;
- Parameters
csc_val
-point to csc value array(nnz).
val_size
-csc value size.
csc_row
-point to csc row indices array(nnz).
row_size
-csc row size.
csc_col
-point to csc col indices array(dimN + 1).
col_size
-csc column size.
csc_matrix
-sparse matrix.
stream
-hl_stream_t type.
-
void
hl_memcpy_from_csr_matrix
(real *csr_val, size_t val_size, int *csr_row, size_t row_size, int *csr_col, size_t col_size, hl_sparse_matrix_s csr_matrix, hl_stream_t stream)¶ Memcpy sparse matrix to host.
a. according to csr_matrix, update three arrays
- csr_val, csr_row, csr_col are dest Address.
- if type of csr_matrix is HL_NO_VALUE, update csr_row and csr_col
- if type of csr_matrix is HL_FLOAT_VALUE, update csr_row, csr_col and csr_value
b. The interface is asynchronous copy. To ensure that the data is copied please call the synchronous interface;
- Parameters
csr_val
-point to csr value array(nnz).
val_size
-csr value size.
csr_row
-point to csr row indices array(nnz).
row_size
-csr row size.
csr_col
-point to csr col indices array(dimN + 1).
col_size
-csr column size.
csr_matrix
-sparse matrix.
stream
-hl_stream_t type.
-
void
hl_sparse_matrix_column_sum
(real *A_d, hl_sparse_matrix_s B_d, int dimM, int dimN, real scale)¶ A_d[j] += B_d[i,j] for i in range(height)
- Parameters
A_d
-vector, size = width.
B_d
-sparse matrix.
dimM
-height.
dimN
-width.
scale
-scale of B_d
-
void
hl_matrix_csr_column_sum
(real *A_d, hl_sparse_matrix_s B_d, int dimM, int dimN, real scale)¶ implementation of csr sparse matrix in hl_sparse_matirx_column_sum
-
void
hl_sparse_matrix_add_bias
(hl_sparse_matrix_s A_d, real *B_d, real scale)¶ A_d[i,j] += B_d[j].
- Parameters
A_d
-sprare matrix.
B_d
-vector, size = A_d.width.
scale
-scale of B_d.
-
void
hl_matrix_csr_add_bias
(hl_sparse_matrix_s A_d, real *B_d, real scale)¶ implementation of csr sparse matrix in hl_sparse_matrix_add_bias
-
void
hl_sparse_matrix_add_dense
(hl_sparse_matrix_s A_d, real *B_d, int dimM, int dimN, real alpha, real beta)¶ sparseMatrix = alpha * denseMatrix + beta *sparseMatrix A_d[i,j] = alpha * B_d[i,j] + beta * A_d[i,j] Only add value of same (row, col) index in dense matrix and do not use others values whoes postions are not in sparse matirx.
- Parameters
A_d
-sprare matrix.
B_d
-dense matrix.
dimM
-height of B_d.
dimN
-width of B_d.
alpha
-scale of B_d.
beta
-scale of A_d.
-
void
hl_matrix_csr_add_dense
(hl_sparse_matrix_s A_d, real *B_d, int dimM, int dimN, real alpha, real beta)¶ implementation of csr sparse matrix in hl_sparse_matrix_add_dense
-
int *
hl_sparse_matrix_get_rows
(hl_sparse_matrix_s sMat)¶ get rows pionter of GpuSparseMatrix
- Return
- return rows pointer, which is gpu address
- Parameters
sMat
-sparse matrix
-
int *
hl_sparse_matrix_get_cols
(hl_sparse_matrix_s sMat)¶ get cols pionter of GpuSparseMatrix
- Return
- return cols pointer, which is gpu address
- Parameters
sMat
-sparse matrix
-
real *
hl_sparse_matrix_get_value
(hl_sparse_matrix_s sMat)¶ get value pionter of GpuSparseMatrix
- Return
- return value pointer, which is gpu address
- Parameters
sMat
-sparse matrix
hl_sparse.ph¶
Defines
-
HL_SPARSE_PH_
¶
-
__sparse_get_type_return__
(mat, type, field)¶
-
__sparse_get_return__
(mat, field)¶
Typedefs
-
typedef struct _hl_csr_matrix *
hl_csr_matrix
¶
-
typedef struct _hl_csc_matrix *
hl_csc_matrix
¶
-
struct
_hl_csr_matrix
¶ sparse matrix csr format.
- Parameters
*csr_val
-nonzero values of matrix.
*csr_row
-row indices.
*csr_col
-column indices.
nnz_s
-sizeof of csr_val & csr_col.
row_s
-sizeof of csr_row.
sparsity
-sparsity pattern.
-
struct
_hl_csc_matrix
¶ sparse matrix csc format.
- Parameters
*csc_val
-nonzero values of matrix.
*csc_row
-row indices.
*csc_col
-column indices.
nnz_s
-sizeof of csc_val & csc_row.
col_s
-sizeof of csc_col.
sparsity
-sparsity pattern.
Others¶
hl_aggregate.h¶
Functions
-
void
hl_matrix_row_sum
(real *A_d, real *C_d, int dimM, int dimN)¶ Calculate the sum of each row of the matrix A_d.
- Parameters
A_d
-input matrix (M x N).
C_d
-output matrix (M x 1).
dimM
-matrix height.
dimN
-matrix width.
-
void
hl_matrix_row_max
(real *A_d, real *C_d, int dimM, int dimN)¶ Calculate the maximum value of each row of the matrix A_d.
- Parameters
A_d
-input matrix (M x N).
C_d
-output matrix (M x 1).
dimM
-matrix height.
dimN
-matrix width.
-
void
hl_matrix_row_min
(real *A_d, real *C_d, int dimM, int dimN)¶ Calculate the minimum value of each row of the matrix A_d.
- Parameters
A_d
-input matrix (M x N).
C_d
-output matrix (M x 1).
dimM
-matrix height.
dimN
-matrix width.
-
void
hl_matrix_column_sum
(real *A_d, real *C_d, int dimM, int dimN)¶ Calculate the sum of each column of the matrix A_d.
- Parameters
A_d
-input matrix (M x N).
C_d
-output Matrix (1 x N).
dimM
-matrix height.
dimN
-matrix width.
-
void
hl_matrix_column_max
(real *A_d, real *C_d, int dimM, int dimN)¶ Calculate the maximum value of each column of the matrix A_d.
- Parameters
A_d
-input matrix (M x N).
C_d
-output matrix (1 x N).
dimM
-matrix height.
dimN
-matrix width.
-
void
hl_matrix_column_min
(real *A_d, real *C_d, int dimM, int dimN)¶ Calculate the minimum value of each column of the matrix A_d.
- Parameters
A_d
-input matrix (M x N).
C_d
-output matrix (1 x N).
dimM
-matrix height.
dimN
-matrix width.
-
void
hl_vector_sum
(real *A_d, real *C_h, int dimM)¶ C_h = sum(A_d[i]).
- Parameters
A_d
-input(m).
C_h
-output(host memory).
dimM
-size of vector.
-
void
hl_vector_abs_sum
(real *A_d, real *C_h, int dimM)¶ C_h = sum(abs(A_d[i])).
- Parameters
A_d
-input(m).
C_h
-output(host memory).
dimM
-size of vector.
hl_table_apply.h¶
Functions
-
void
hl_matrix_select_rows
(real *output, int ldo, real *table, int ldt, int *ids, int numSamples, int tableSize, int dim)¶ Get row from table. output[i] += table[ids[i]] if ids[i] == -1, it will be ignored.
- Parameters
output
-output matrix.
ldo
-leading dimension of output.
table
-table matrix.
ldt
-leading dimension of table.
ids
-ids vector.
numSamples
-height of output.
tableSize
-height of table.
dim
-width of table.
-
void
hl_matrix_add_to_rows
(real *table, int ldt, real *input, int ldi, int *ids, int numSamples, int tableSize, int dim)¶ Add row to table. table[ids[i]] += output[i] if ids[i] == -1, it will be ignored.
- Parameters
table
-table matrix.
ldt
-leading dimension of table.
input
-input matrix.
ldi
-leading dimension of input.
ids
-ids vector.
numSamples
-height of input.
tableSize
-height of table.
dim
-width of table.
- template <class T>
-
void
hl_vector_select_from
(T *dst, int sized, const T *src, int sizes, const int *ids, int sizei)¶ Select element from vector.
- Parameters
dst
-output vector.
sized
-size of dst.
src
-input vector.
sizes
-size of src.
ids
-index vector.
sizei
-size of ids.
hl_top_k.h¶
Functions
-
void
hl_matrix_top_k
(real *topVal, int ldv, int *topIds, real *src, int lds, int dim, int beamSize, int numSamples)¶ find top k element.
- Parameters
topVal
-top k element.
ldv
-leading dimension of topVal.
topIds
-top k index.
src
-input value.
lds
-leading dimension of src.
dim
-width of input value.
beamSize
-beam size.
numSamples
-height of input value.
-
void
hl_sparse_matrix_top_k
(real *topVal, int ldv, int *topIds, hl_sparse_matrix_s src, int beamSize, int numSamples)¶ find top k element for each row in sparse matrix.
- Note
- Only support HL_SPARSE_CSR format.
- Parameters
topVal
-top k element.
ldv
-leading dimension of topVal.
topIds
-top k index.
src
-sparse matrix.
beamSize
-beam size.
numSamples
-height of input value.