1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
/*
-- MAGMA (version 2.9.0) --
Univ. of Tennessee, Knoxville
Univ. of California, Berkeley
Univ. of Colorado, Denver
@date January 2025
@generated from sparse/control/magma_zmshrink.cpp, normal z -> d, Wed Jan 22 14:42:28 2025
@author Hartwig Anzt
*/
#include "magmasparse_internal.h"
/**
Purpose
-------
Shrinks a non-square matrix (m < n) to the smaller dimension.
Arguments
---------
@param[in]
A magma_d_matrix
sparse matrix A
@param[out]
B magma_d_matrix*
sparse matrix A
@param[in]
queue magma_queue_t
Queue to execute in.
@ingroup magmasparse_daux
********************************************************************/
extern "C" magma_int_t
magma_dmshrink(
magma_d_matrix A,
magma_d_matrix *B,
magma_queue_t queue )
{
magma_int_t info = 0;
// make sure the target structure is empty
magma_dmfree( B, queue );
magma_d_matrix hA={Magma_CSR}, hACSR={Magma_CSR}, hB={Magma_CSR}, hBCSR={Magma_CSR};
if( A.num_rows<=A.num_cols){
if( A.memory_location == Magma_CPU && A.storage_type == Magma_CSR ){
CHECK( magma_dmconvert( A, B, Magma_CSR, Magma_CSR, queue ));
for(magma_int_t i=0; i<A.nnz; i++){
if( B->col[i] >= A.num_rows ){
B->val[i] = MAGMA_D_ZERO;
}
}
CHECK( magma_dmcsrcompressor( B, queue ) );
B->num_cols = B->num_rows;
} else {
CHECK( magma_dmtransfer( A, &hA, A.memory_location, Magma_CPU, queue ));
CHECK( magma_dmconvert( hA, &hACSR, A.storage_type, Magma_CSR, queue ));
CHECK( magma_dmshrink( hACSR, &hBCSR, queue ));
CHECK( magma_dmconvert( hBCSR, &hB, Magma_CSR, A.storage_type, queue ));
CHECK( magma_dmtransfer( hB, B, Magma_CPU, A.memory_location, queue ));
}
} else {
printf("%% error: A has too many rows: m > n.\n");
info = MAGMA_ERR_NOT_SUPPORTED;
goto cleanup;
}
cleanup:
magma_dmfree( &hA, queue );
magma_dmfree( &hB, queue );
magma_dmfree( &hACSR, queue );
magma_dmfree( &hBCSR, queue );
return info;
}
|