JCublasJava/src/main/java/jcuda/jcublas/JCublas.java
public static void cublasCher2k(char uplo, char trans, int n, int k, cuComplex alpha, Pointer A, int lda, Pointer B, int ldb, float beta, Pointer C, int ldc)
    {
        cublasCher2kNative(uplo, trans, n, k, alpha, A, lda, B, ldb, beta, C, ldc);
        checkResultBLAS();
    }
public static void cublasCher2k(char uplo, char trans, int n, int k, cuComplex alpha, Pointer A, int lda, Pointer B, int ldb, float beta, Pointer C, int ldc)
    {
        cublasCher2kNative(uplo, trans, n, k, alpha, A, lda, B, ldb, beta, C, ldc);
        checkResultBLAS();
    }
public static void cublasCher2k ( char uplo , char trans , int n , int k , cuComplex alpha , Pointer A , int lda , Pointer B , int ldb , float beta , Pointer C , int ldc ) { cublasCher2kNative ( uplo , trans , n , k , alpha , A , lda , B , ldb , beta , C , ldc ) ; checkResultBLAS ( ) ; }
<pre>
void
cublasCher2k (char uplo, char trans, int n, int k, cuComplex alpha,
const cuComplex *A, int lda, const cuComplex *B, int ldb,
float beta, cuComplex *C, int ldc)

performs one of the hermitian rank 2k operations

C =   alpha * A * conjugate(transpose(B))
+ conjugate(alpha) * B * conjugate(transpose(A))
+ beta * C ,
or
C =  alpha * conjugate(transpose(A)) * B
+ conjugate(alpha) * conjugate(transpose(B)) * A
+ beta * C.

Alpha is single precision complex scalar whereas Beta is a single preocision real scalar.
C is an n x n hermitian matrix consisting of single precision complex elements
and stored in either lower or upper storage mode. A and B are matrices consisting
of single precision complex elements with dimension of n x k in the first case,
and k x n in the second case.

Input
-----
uplo   specifies whether the hermitian matrix C is stored in upper or lower
storage mode, as follows. If uplo == 'U' or 'u', only the upper
triangular part of the hermitian matrix is to be referenced, and the
elements of the strictly lower triangular part are to be infered from
those in the upper triangular part. If uplo == 'L' or 'l', only the
lower triangular part of the hermitian matrix is to be references,
and the elements of the strictly upper triangular part are to be
infered from those in the lower triangular part.
trans  specifies the operation to be performed. If trans == 'N' or 'n',
C =   alpha * A * conjugate(transpose(B))
+ conjugate(alpha) * B * conjugate(transpose(A))
+ beta * C .
If trans == 'T', 't', 'C', or 'c',
C =  alpha * conjugate(transpose(A)) * B
+ conjugate(alpha) * conjugate(transpose(B)) * A
+ beta * C.
n      specifies the number of rows and the number columns of matrix C. If
trans == 'N' or 'n', n specifies the number of rows of matrix A. If
trans == 'T', 't', 'C', or 'c', n specifies the columns of matrix A.
n must be at least zero.
k      If trans == 'N' or 'n', k specifies the number of rows of matrix A.
If trans == 'T', 't', 'C', or 'c', k specifies the number of rows of
matrix A. k must be at least zero.
alpha  single precision complex scalar multiplier.
A      single precision complex array of dimensions (lda, ka), where ka is k when
trans == 'N' or 'n', and is n otherwise. When trans == 'N' or 'n',
the leading n x k part of array A must contain the matrix A,
otherwise the leading k x n part of the array must contain the matrix
A.
lda    leading dimension of A. When trans == 'N' or 'n' then lda must be at
least max(1, n). Otherwise lda must be at least max(1,k).
B      single precision complex array of dimensions (lda, kb), where kb is k when
trans == 'N' or 'n', and is n otherwise. When trans == 'N' or 'n',
the leading n x k part of array B must contain the matrix B,
otherwise the leading k x n part of the array must contain the matrix
B.
ldb    leading dimension of N. When trans == 'N' or 'n' then ldb must be at
least max(1, n). Otherwise ldb must be at least max(1, k).
beta   single precision scalar multiplier applied to C. If beta is zero, C
does not have to be a valid input.
C      single precision complex array of dimensions (ldc, n). If uplo == 'U' or 'u',
the leading n x n triangular part of the array C must contain the
upper triangular part of the hermitian matrix C and the strictly
lower triangular part of C is not referenced. On exit, the upper
triangular part of C is overwritten by the upper triangular part of
the updated matrix. If uplo == 'L' or 'l', the leading n x n
triangular part of the array C must contain the lower triangular part
of the hermitian matrix C and the strictly upper triangular part of C
is not referenced. On exit, the lower triangular part of C is
overwritten by the lower triangular part of the updated matrix.
The imaginary parts of the diagonal elements need
not be set,  they are assumed to be zero,  and on exit they
are set to zero.
ldc    leading dimension of C. Must be at least max(1, n).

Output
------
C      updated according to alpha*A*conjugate(transpose(B)) +
+ conjugate(alpha)*B*conjugate(transpose(A)) + beta*C or
alpha*conjugate(transpose(A))*B + conjugate(alpha)*conjugate(transpose(B))*A
+ beta*C.

Reference:   http://www.netlib.org/blas/cher2k.f

Error status for this function can be retrieved via cublasGetError().

Error Status
------------
CUBLAS_STATUS_NOT_INITIALIZED  if CUBLAS library has not been initialized
CUBLAS_STATUS_INVALID_VALUE    if n < 0 or k < 0
CUBLAS_STATUS_EXECUTION_FAILED if function failed to launch on GPU
</pre>
<pre > void cublasCher2k ( char uplo char trans int n int k cuComplex alpha const cuComplex * A int lda const cuComplex * B int ldb float beta cuComplex * C int ldc )