本文整理汇总了C++中MAGMA_D_MAKE函数的典型用法代码示例。如果您正苦于以下问题:C++ MAGMA_D_MAKE函数的具体用法?C++ MAGMA_D_MAKE怎么用?C++ MAGMA_D_MAKE使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了MAGMA_D_MAKE函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: magma_d_applyprecond
magma_int_t
magma_d_applyprecond( magma_d_sparse_matrix A, magma_d_vector b,
magma_d_vector *x, magma_d_preconditioner *precond )
{
if( precond->solver == Magma_JACOBI ){
magma_djacobi_diagscal( A.num_rows, precond->d.val, b.val, x->val );
return MAGMA_SUCCESS;
}
else if( precond->solver == Magma_PASTIX ){
magma_dapplypastix( b, x, precond );
return MAGMA_SUCCESS;
}
else if( precond->solver == Magma_ILU ){
magma_d_vector tmp;
magma_d_vinit( &tmp, Magma_DEV, A.num_rows, MAGMA_D_MAKE(1.0, 0.0) );
// magma_dapplycuilu_l( b, &tmp, precond );
// magma_dapplycuilu_r( tmp, x, precond );
magma_d_vfree( &tmp );
return MAGMA_SUCCESS;
}
else if( precond->solver == Magma_ICC ){
magma_d_vector tmp;
magma_d_vinit( &tmp, Magma_DEV, A.num_rows, MAGMA_D_MAKE(1.0, 0.0) );
// magma_dtrisv_l_nu( precond->L, b, &tmp );
// magma_dtrisv_r_nu( precond->L, tmp, x );
magma_d_vfree( &tmp );
return MAGMA_SUCCESS;
}
else{
printf( "error: preconditioner type not yet supported.\n" );
return MAGMA_ERR_NOT_SUPPORTED;
}
}
示例2: magma_dvread
magma_int_t
magma_dvread(
magma_d_matrix *x,
magma_int_t length,
char * filename,
magma_queue_t queue )
{
magma_int_t info = 0;
magma_int_t nnz=0, i=0;
FILE *fid;
x->memory_location = Magma_CPU;
x->storage_type = Magma_DENSE;
x->num_rows = length;
x->num_cols = 1;
x->major = MagmaColMajor;
CHECK( magma_dmalloc_cpu( &x->val, length ));
fid = fopen(filename, "r");
while( i<length ) // eof() is 'true' at the end of data
{
double VAL1;
double VAL;
#define REAL
#ifdef COMPLEX
double VAL2;
fscanf(fid, " %lf %lf \n", &VAL1, &VAL2);
VAL = MAGMA_D_MAKE(VAL1, VAL2);
#else
fscanf(fid, " %lf \n", &VAL1);
VAL = MAGMA_D_MAKE(VAL1, 0.0);
#endif
if ( VAL != MAGMA_D_ZERO )
nnz++;
x->val[i] = VAL;
i++;
}
fclose(fid);
x->nnz = nnz;
cleanup:
return info;
}
示例3: magma_dapplycuicc_l
magma_int_t
magma_dapplycuicc_l( magma_d_vector b, magma_d_vector *x,
magma_d_preconditioner *precond ){
double one = MAGMA_D_MAKE( 1.0, 0.0);
// CUSPARSE context //
cusparseHandle_t cusparseHandle;
cusparseStatus_t cusparseStatus;
cusparseStatus = cusparseCreate(&cusparseHandle);
if(cusparseStatus != 0) printf("error in Handle.\n");
cusparseMatDescr_t descrL;
cusparseStatus = cusparseCreateMatDescr(&descrL);
if(cusparseStatus != 0) printf("error in MatrDescr.\n");
cusparseStatus =
cusparseSetMatType(descrL,CUSPARSE_MATRIX_TYPE_TRIANGULAR);
if(cusparseStatus != 0) printf("error in MatrType.\n");
cusparseStatus =
cusparseSetMatDiagType (descrL, CUSPARSE_DIAG_TYPE_NON_UNIT);
if(cusparseStatus != 0) printf("error in DiagType.\n");
cusparseStatus =
cusparseSetMatFillMode(descrL,CUSPARSE_FILL_MODE_LOWER);
if(cusparseStatus != 0) printf("error in fillmode.\n");
cusparseStatus =
cusparseSetMatIndexBase(descrL,CUSPARSE_INDEX_BASE_ZERO);
if(cusparseStatus != 0) printf("error in IndexBase.\n");
// end CUSPARSE context //
cusparseStatus =
cusparseDcsrsv_solve( cusparseHandle,
CUSPARSE_OPERATION_NON_TRANSPOSE,
precond->M.num_rows, &one,
descrL,
precond->M.val,
precond->M.row,
precond->M.col,
precond->cuinfoL,
b.val,
x->val );
if(cusparseStatus != 0) printf("error in L triangular solve:%p.\n", precond->cuinfoL );
cusparseDestroyMatDescr( descrL );
cusparseDestroy( cusparseHandle );
magma_device_sync();
return MAGMA_SUCCESS;
}
示例4: init_matrix
// fill matrix with entries Aij = offset + (i+1) + (j+1)/10000,
// which makes it easy to identify which rows & cols have been swapped.
static void init_matrix( magma_int_t m, magma_int_t n, double *A, magma_int_t lda, magma_int_t offset )
{
assert( lda >= m );
for( magma_int_t j = 0; j < n; ++j ) {
for( magma_int_t i=0; i < m; ++i ) {
A[i + j*lda] = MAGMA_D_MAKE( offset + (i+1) + (j+1)/10000., 0 );
}
}
}
示例5: magma_dmake_hpd
void magma_dmake_hpd( magma_int_t N, double* A, magma_int_t lda )
{
magma_int_t i, j;
for( i=0; i<N; ++i ) {
A(i,i) = MAGMA_D_MAKE( MAGMA_D_REAL( A(i,i) ) + N, 0. );
for( j=0; j<i; ++j ) {
A(j,i) = MAGMA_D_CNJG( A(i,j) );
}
}
}
示例6: init_matrix
void init_matrix( magma_int_t N, double *h_A, magma_int_t lda )
{
magma_int_t ione = 1, n2 = N*lda;
magma_int_t ISEED[4] = {0,0,0,1};
lapackf77_dlarnv( &ione, ISEED, &n2, h_A );
/* Symmetrize and increase the diagonal */
for (magma_int_t i = 0; i < N; ++i) {
h_A(i,i) = MAGMA_D_MAKE( MAGMA_D_REAL(h_A(i,i)) + N, 0 );
for (magma_int_t j = 0; j < i; ++j)
h_A(i, j) = MAGMA_D_CNJG( h_A(j, i) );
}
}
示例7: magma_dmLdiagadd
magma_int_t
magma_dmLdiagadd(
magma_d_matrix *L,
magma_queue_t queue )
{
magma_int_t info = 0;
magma_d_matrix LL={Magma_CSR};
if( L->row[1]==1 ){ // lower triangular with unit diagonal
//printf("L lower triangular.\n");
LL.diagorder_type = Magma_UNITY;
CHECK( magma_dmconvert( *L, &LL, Magma_CSR, Magma_CSRL, queue ));
}
else if( L->row[1]==0 ){ // strictly lower triangular
//printf("L strictly lower triangular.\n");
CHECK( magma_dmtransfer( *L, &LL, Magma_CPU, Magma_CPU, queue ));
magma_free_cpu( LL.col );
magma_free_cpu( LL.val );
LL.nnz = L->nnz+L->num_rows;
CHECK( magma_dmalloc_cpu( &LL.val, LL.nnz ));
CHECK( magma_index_malloc_cpu( &LL.col, LL.nnz ));
magma_int_t z=0;
for( magma_int_t i=0; i<L->num_rows; i++){
LL.row[i] = z;
for( magma_int_t j=L->row[i]; j<L->row[i+1]; j++){
LL.val[z] = L->val[j];
LL.col[z] = L->col[j];
z++;
}
// add unit diagonal
LL.val[z] = MAGMA_D_MAKE(1.0, 0.0);
LL.col[z] = i;
z++;
}
LL.row[LL.num_rows] = z;
LL.nnz = z;
}
else{
printf("error: L neither lower nor strictly lower triangular!\n");
}
magma_dmfree( L, queue );
CHECK( magma_dmtransfer(LL, L, Magma_CPU, Magma_CPU, queue ));
cleanup:
if( info != 0 ){
magma_dmfree( L, queue );
}
magma_dmfree( &LL, queue );
return info;
}
示例8: main
/* ////////////////////////////////////////////////////////////////////////////
-- Testing dprint
*/
int main( int argc, char** argv)
{
TESTING_INIT();
double *hA;
magmaDouble_ptr dA;
//magma_int_t ione = 1;
//magma_int_t ISEED[4] = {0,0,0,1};
magma_int_t M, N, lda, ldda; //size
magma_int_t status = 0;
magma_opts opts;
opts.parse_opts( argc, argv );
for( int itest = 0; itest < opts.ntest; ++itest ) {
for( int iter = 0; iter < opts.niter; ++iter ) {
M = opts.msize[itest];
N = opts.nsize[itest];
lda = M;
ldda = magma_roundup( M, opts.align ); // multiple of 32 by default
//size = lda*N;
/* Allocate host memory for the matrix */
TESTING_MALLOC_CPU( hA, double, lda *N );
TESTING_MALLOC_DEV( dA, double, ldda*N );
//lapackf77_dlarnv( &ione, ISEED, &size, hA );
for( int j = 0; j < N; ++j ) {
for( int i = 0; i < M; ++i ) {
hA[i + j*lda] = MAGMA_D_MAKE( i + j*0.01, 0. );
}
}
magma_dsetmatrix( M, N, hA, lda, dA, ldda );
printf( "A=" );
magma_dprint( M, N, hA, lda );
printf( "dA=" );
magma_dprint_gpu( M, N, dA, ldda );
TESTING_FREE_CPU( hA );
TESTING_FREE_DEV( dA );
}
}
opts.cleanup();
TESTING_FINALIZE();
return status;
}
示例9: get_LU_error
// On input, LU and ipiv is LU factorization of A. On output, LU is overwritten.
// Works for any m, n.
// Uses init_matrix() to re-generate original A as needed.
// Returns error in factorization, |PA - LU| / (n |A|)
// This allocates 3 more matrices to store A, L, and U.
double get_LU_error(magma_int_t M, magma_int_t N,
double *LU, magma_int_t lda,
magma_int_t *ipiv)
{
magma_int_t min_mn = min(M,N);
magma_int_t ione = 1;
magma_int_t i, j;
double alpha = MAGMA_D_ONE;
double beta = MAGMA_D_ZERO;
double *A, *L, *U;
double work[1], matnorm, residual;
TESTING_MALLOC_CPU( A, double, lda*N );
TESTING_MALLOC_CPU( L, double, M*min_mn );
TESTING_MALLOC_CPU( U, double, min_mn*N );
memset( L, 0, M*min_mn*sizeof(double) );
memset( U, 0, min_mn*N*sizeof(double) );
// set to original A
init_matrix( M, N, A, lda );
lapackf77_dlaswp( &N, A, &lda, &ione, &min_mn, ipiv, &ione);
// copy LU to L and U, and set diagonal to 1
lapackf77_dlacpy( MagmaLowerStr, &M, &min_mn, LU, &lda, L, &M );
lapackf77_dlacpy( MagmaUpperStr, &min_mn, &N, LU, &lda, U, &min_mn );
for(j=0; j<min_mn; j++)
L[j+j*M] = MAGMA_D_MAKE( 1., 0. );
matnorm = lapackf77_dlange("f", &M, &N, A, &lda, work);
blasf77_dgemm("N", "N", &M, &N, &min_mn,
&alpha, L, &M, U, &min_mn, &beta, LU, &lda);
for( j = 0; j < N; j++ ) {
for( i = 0; i < M; i++ ) {
LU[i+j*lda] = MAGMA_D_SUB( LU[i+j*lda], A[i+j*lda] );
}
}
residual = lapackf77_dlange("f", &M, &N, LU, &lda, work);
TESTING_FREE_CPU( A );
TESTING_FREE_CPU( L );
TESTING_FREE_CPU( U );
return residual / (matnorm * N);
}
示例10: get_LU_error
double get_LU_error(magma_int_t M, magma_int_t N,
double *A, magma_int_t lda,
double *LU, magma_int_t *IPIV)
{
magma_int_t min_mn = min(M,N);
magma_int_t ione = 1;
magma_int_t i, j;
double alpha = MAGMA_D_ONE;
double beta = MAGMA_D_ZERO;
double *L, *U;
double work[1], matnorm, residual;
TESTING_MALLOC( L, double, M*min_mn);
TESTING_MALLOC( U, double, min_mn*N);
memset( L, 0, M*min_mn*sizeof(double) );
memset( U, 0, min_mn*N*sizeof(double) );
lapackf77_dlaswp( &N, A, &lda, &ione, &min_mn, IPIV, &ione);
lapackf77_dlacpy( MagmaLowerStr, &M, &min_mn, LU, &lda, L, &M );
lapackf77_dlacpy( MagmaUpperStr, &min_mn, &N, LU, &lda, U, &min_mn );
for(j=0; j<min_mn; j++)
L[j+j*M] = MAGMA_D_MAKE( 1., 0. );
matnorm = lapackf77_dlange("f", &M, &N, A, &lda, work);
blasf77_dgemm("N", "N", &M, &N, &min_mn,
&alpha, L, &M, U, &min_mn, &beta, LU, &lda);
for( j = 0; j < N; j++ ) {
for( i = 0; i < M; i++ ) {
LU[i+j*lda] = MAGMA_D_SUB( LU[i+j*lda], A[i+j*lda] );
}
}
residual = lapackf77_dlange("f", &M, &N, LU, &lda, work);
TESTING_FREE(L);
TESTING_FREE(U);
return residual / (matnorm * N);
}
示例11: magma_dinitrecursiveLU
magma_int_t
magma_dinitrecursiveLU(
magma_d_matrix A,
magma_d_matrix *B,
magma_queue_t queue ){
magma_int_t i,j,k;
for(i=0; i<A.num_rows; i++){
for(j=B->row[i]; j<B->row[i+1]; j++){
B->val[j] = MAGMA_D_MAKE(0.0, 0.0);
magma_index_t localcol = B->col[j];
for( k=A.row[i]; k<A.row[i+1]; k++){
if(A.col[k] == localcol){
B->val[j] = A.val[k];
}
}
}
}
return MAGMA_SUCCESS;
}
示例12: dimension
//.........这里部分代码省略.........
where d and e denote diagonal and off-diagonal elements of B, vi
denotes an element of the vector defining H(i), and ui an element of
the vector defining G(i).
@ingroup magma_dgesvd_comp
********************************************************************/
extern "C" magma_int_t
magma_dgebrd(magma_int_t m, magma_int_t n,
double *A, magma_int_t lda, double *d, double *e,
double *tauq, double *taup,
double *work, magma_int_t lwork,
magma_int_t *info)
{
#define A(i, j) (A + (j)*lda + (i))
#define dA(i, j) (dA + (j)*ldda + (i))
double c_neg_one = MAGMA_D_NEG_ONE;
double c_one = MAGMA_D_ONE;
double *dA, *dwork;
magma_int_t ncol, nrow, jmax, nb, ldda;
magma_int_t i, j, nx;
magma_int_t iinfo;
magma_int_t minmn;
magma_int_t ldwrkx, ldwrky, lwkopt;
magma_int_t lquery;
nb = magma_get_dgebrd_nb(n);
ldda = m;
lwkopt = (m + n) * nb;
work[0] = MAGMA_D_MAKE( lwkopt, 0. );
lquery = (lwork == -1);
/* Check arguments */
*info = 0;
if (m < 0) {
*info = -1;
} else if (n < 0) {
*info = -2;
} else if (lda < max(1,m)) {
*info = -4;
} else if (lwork < lwkopt && (! lquery) ) {
*info = -10;
}
if (*info < 0) {
magma_xerbla( __func__, -(*info) );
return *info;
}
else if (lquery)
return *info;
/* Quick return if possible */
minmn = min(m,n);
if (minmn == 0) {
work[0] = c_one;
return *info;
}
if (MAGMA_SUCCESS != magma_dmalloc( &dA, n*ldda + (m + n)*nb )) {
fprintf (stderr, "!!!! device memory allocation error in dgebrd\n" );
*info = MAGMA_ERR_DEVICE_ALLOC;
return *info;
}
示例13: main
/* ////////////////////////////////////////////////////////////////////////////
-- Testing ssyrk
*/
int main( int argc, char** argv)
{
TESTING_INIT();
real_Double_t gflops, cublas_perf, cublas_time, cpu_perf, cpu_time;
float cublas_error, Cnorm, work[1];
magma_int_t N, K;
magma_int_t Ak, An;
magma_int_t sizeA, sizeC;
magma_int_t lda, ldc, ldda, lddc;
magma_int_t ione = 1;
magma_int_t ISEED[4] = {0,0,0,1};
float *h_A, *h_C, *h_Ccublas;
float *d_A, *d_C;
float c_neg_one = MAGMA_S_NEG_ONE;
float alpha = MAGMA_D_MAKE( 0.29, -0.86 );
float beta = MAGMA_D_MAKE( -0.48, 0.38 );
magma_opts opts;
parse_opts( argc, argv, &opts );
printf("If running lapack (option --lapack), MAGMA and CUBLAS error are both computed\n"
"relative to CPU BLAS result. Else, MAGMA error is computed relative to CUBLAS result.\n\n"
"uplo = %c, transA = %c\n", opts.uplo, opts.transA );
printf(" N K CUBLAS Gflop/s (ms) CPU Gflop/s (ms) CUBLAS error\n");
printf("==================================================================\n");
for( int i = 0; i < opts.ntest; ++i ) {
for( int iter = 0; iter < opts.niter; ++iter ) {
N = opts.nsize[i];
K = opts.ksize[i];
gflops = FLOPS_SSYRK(K, N) / 1e9;
if ( opts.transA == MagmaNoTrans ) {
lda = An = N;
Ak = K;
} else {
lda = An = K;
Ak = N;
}
ldc = N;
ldda = ((lda+31)/32)*32;
lddc = ((ldc+31)/32)*32;
sizeA = lda*Ak;
sizeC = ldc*N;
TESTING_MALLOC( h_A, float, lda*Ak );
TESTING_MALLOC( h_C, float, ldc*N );
TESTING_MALLOC( h_Ccublas, float, ldc*N );
TESTING_DEVALLOC( d_A, float, ldda*Ak );
TESTING_DEVALLOC( d_C, float, lddc*N );
/* Initialize the matrices */
lapackf77_slarnv( &ione, ISEED, &sizeA, h_A );
lapackf77_slarnv( &ione, ISEED, &sizeC, h_C );
/* =====================================================================
Performs operation using CUDA-BLAS
=================================================================== */
magma_ssetmatrix( An, Ak, h_A, lda, d_A, ldda );
magma_ssetmatrix( N, N, h_C, ldc, d_C, lddc );
cublas_time = magma_sync_wtime( NULL );
cublasSsyrk( opts.uplo, opts.transA, N, K,
alpha, d_A, ldda,
beta, d_C, lddc );
cublas_time = magma_sync_wtime( NULL ) - cublas_time;
cublas_perf = gflops / cublas_time;
magma_sgetmatrix( N, N, d_C, lddc, h_Ccublas, ldc );
/* =====================================================================
Performs operation using CPU BLAS
=================================================================== */
if ( opts.lapack ) {
cpu_time = magma_wtime();
blasf77_ssyrk( &opts.uplo, &opts.transA, &N, &K,
&alpha, h_A, &lda,
&beta, h_C, &ldc );
cpu_time = magma_wtime() - cpu_time;
cpu_perf = gflops / cpu_time;
}
/* =====================================================================
Check the result
=================================================================== */
if ( opts.lapack ) {
// compute relative error for both magma & cublas, relative to lapack,
// |C_magma - C_lapack| / |C_lapack|
Cnorm = lapackf77_slansy("fro", &opts.uplo, &N, h_C, &ldc, work);
blasf77_saxpy( &sizeC, &c_neg_one, h_C, &ione, h_Ccublas, &ione );
cublas_error = lapackf77_slansy( "fro", &opts.uplo, &N, h_Ccublas, &ldc, work ) / Cnorm;
//.........这里部分代码省略.........
示例14: magma_dgeqp3
//.........这里部分代码省略.........
#define A(i, j) (A + (i) + (j)*(lda ))
#define dA(i, j) (dwork + (i) + (j)*(ldda))
double *dwork, *df;
magma_int_t ione = 1;
magma_int_t n_j, ldda, ldwork;
magma_int_t j, jb, na, nb, sm, sn, fjb, nfxd, minmn;
magma_int_t topbmn, sminmn, lwkopt, lquery;
*info = 0;
lquery = (lwork == -1);
if (m < 0) {
*info = -1;
} else if (n < 0) {
*info = -2;
} else if (lda < max(1,m)) {
*info = -4;
}
nb = magma_get_dgeqp3_nb(min(m, n));
if (*info == 0) {
minmn = min(m,n);
if (minmn == 0) {
lwkopt = 1;
} else {
lwkopt = (n + 1)*nb;
#if defined(PRECISION_d) || defined(PRECISION_s)
lwkopt += 2*n;
#endif
}
work[0] = MAGMA_D_MAKE( lwkopt, 0. );
if (lwork < lwkopt && ! lquery) {
*info = -8;
}
}
if (*info != 0) {
magma_xerbla( __func__, -(*info) );
return *info;
} else if (lquery) {
return *info;
}
if (minmn == 0)
return *info;
#if defined(PRECISION_d) || defined(PRECISION_s)
double *rwork = work + (n + 1)*nb;
#endif
ldda = ((m+31)/32)*32;
ldwork = n*ldda + (n+1)*nb;
if (MAGMA_SUCCESS != magma_dmalloc( &dwork, ldwork )) {
*info = MAGMA_ERR_DEVICE_ALLOC;
return *info;
}
df = dwork + n*ldda;
// dwork used for dA
magma_queue_t stream;
magma_queue_create( &stream );
示例15: main
/* ////////////////////////////////////////////////////////////////////////////
-- Testing zher2k
*/
int main( int argc, char** argv)
{
TESTING_INIT();
real_Double_t gflops, cublas_perf, cublas_time, cpu_perf, cpu_time;
double cublas_error, Cnorm, work[1];
magma_int_t N, K;
magma_int_t Ak, An, Bk, Bn;
magma_int_t sizeA, sizeB, sizeC;
magma_int_t lda, ldb, ldc, ldda, lddb, lddc;
magma_int_t ione = 1;
magma_int_t ISEED[4] = {0,0,0,1};
magmaDoubleComplex *h_A, *h_B, *h_C, *h_Ccublas;
magmaDoubleComplex *d_A, *d_B, *d_C;
magmaDoubleComplex c_neg_one = MAGMA_Z_NEG_ONE;
magmaDoubleComplex alpha = MAGMA_Z_MAKE( 0.29, -0.86 );
double beta = MAGMA_D_MAKE( -0.48, 0.38 );
magma_int_t status = 0;
magma_opts opts;
parse_opts( argc, argv, &opts );
opts.lapack |= opts.check; // check (-c) implies lapack (-l)
double tol = opts.tolerance * lapackf77_dlamch("E");
printf("If running lapack (option --lapack), CUBLAS error is computed\n"
"relative to CPU BLAS result.\n\n");
printf("uplo = %s, transA = %s\n",
lapack_uplo_const(opts.uplo), lapack_trans_const(opts.transA) );
printf(" N K CUBLAS Gflop/s (ms) CPU Gflop/s (ms) CUBLAS error\n");
printf("==================================================================\n");
for( int itest = 0; itest < opts.ntest; ++itest ) {
for( int iter = 0; iter < opts.niter; ++iter ) {
N = opts.msize[itest];
K = opts.ksize[itest];
gflops = FLOPS_ZHER2K(K, N) / 1e9;
if ( opts.transA == MagmaNoTrans ) {
lda = An = N;
Ak = K;
ldb = Bn = N;
Bk = K;
} else {
lda = An = K;
Ak = N;
ldb = Bn = K;
Bk = N;
}
ldc = N;
ldda = ((lda+31)/32)*32;
lddb = ((ldb+31)/32)*32;
lddc = ((ldc+31)/32)*32;
sizeA = lda*Ak;
sizeB = ldb*Ak;
sizeC = ldc*N;
TESTING_MALLOC_CPU( h_A, magmaDoubleComplex, lda*Ak );
TESTING_MALLOC_CPU( h_B, magmaDoubleComplex, ldb*Bk );
TESTING_MALLOC_CPU( h_C, magmaDoubleComplex, ldc*N );
TESTING_MALLOC_CPU( h_Ccublas, magmaDoubleComplex, ldc*N );
TESTING_MALLOC_DEV( d_A, magmaDoubleComplex, ldda*Ak );
TESTING_MALLOC_DEV( d_B, magmaDoubleComplex, lddb*Bk );
TESTING_MALLOC_DEV( d_C, magmaDoubleComplex, lddc*N );
/* Initialize the matrices */
lapackf77_zlarnv( &ione, ISEED, &sizeA, h_A );
lapackf77_zlarnv( &ione, ISEED, &sizeB, h_B );
lapackf77_zlarnv( &ione, ISEED, &sizeC, h_C );
/* =====================================================================
Performs operation using CUBLAS
=================================================================== */
magma_zsetmatrix( An, Ak, h_A, lda, d_A, ldda );
magma_zsetmatrix( Bn, Bk, h_B, ldb, d_B, lddb );
magma_zsetmatrix( N, N, h_C, ldc, d_C, lddc );
cublas_time = magma_sync_wtime( NULL );
cublasZher2k( handle, cublas_uplo_const(opts.uplo), cublas_trans_const(opts.transA), N, K,
&alpha, d_A, ldda,
d_B, lddb,
&beta, d_C, lddc );
cublas_time = magma_sync_wtime( NULL ) - cublas_time;
cublas_perf = gflops / cublas_time;
magma_zgetmatrix( N, N, d_C, lddc, h_Ccublas, ldc );
/* =====================================================================
Performs operation using CPU BLAS
=================================================================== */
if ( opts.lapack ) {
cpu_time = magma_wtime();
blasf77_zher2k( lapack_uplo_const(opts.uplo), lapack_trans_const(opts.transA), &N, &K,
//.........这里部分代码省略.........