MAGMA  1.2.0
MatrixAlgebraonGPUandMulticoreArchitectures
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
transpose.h
Go to the documentation of this file.
1 
20 #ifndef _MAGMA_TRANSPOSE_H_
21 #define _MAGMA_TRANSPOSE_H_
22 
23 #define magmablas_sgetmo_in( dA, dAT, ldda, m, n ) \
24  dAT = dA; \
25  if ( ( (m) == (n) ) && ( (m)%32 == 0) && ( (ldda)%32 == 0) ){ \
26  magmablas_sinplace_transpose( dAT, ldda, ldda ); \
27  } else { \
28  cublasStatus status = cublasAlloc( (m)*(n), sizeof(float), (void**)&dAT); \
29  if (status != CUBLAS_STATUS_SUCCESS) \
30  return -7; \
31  magmablas_stranspose2( dAT, ldda, dA, ldda, m, n ); \
32  }
33 
34 #define magmablas_sgetmo_out( dA, dAT, ldda, m, n ) \
35  if ( ( (m) == (n) ) && ( (m)%32 == 0) && ( (ldda)%32 == 0) ){ \
36  magmablas_sinplace_transpose( dAT, ldda, ldda ); \
37  } else { \
38  magmablas_stranspose2( dA, ldda, dAT, ldda, n, m ); \
39  cublasFree(dAT); \
40  }
41 
42 #define magmablas_dgetmo_in( dA, dAT, ldda, m, n ) \
43  dAT = dA; \
44  if ( ( (m) == (n) ) && ( (m)%32 == 0) && ( (ldda)%32 == 0) ){ \
45  magmablas_dinplace_transpose( dAT, ldda, ldda ); \
46  } else { \
47  cublasStatus status = cublasAlloc( (m)*(n), sizeof(double), (void**)&dAT); \
48  if (status != CUBLAS_STATUS_SUCCESS) \
49  return -7; \
50  magmablas_dtranspose2( dAT, ldda, dA, ldda, m, n ); \
51  }
52 
53 #define magmablas_dgetmo_out( dA, dAT, ldda, m, n ) \
54  if ( ( (m) == (n) ) && ( (m)%32 == 0) && ( (ldda)%32 == 0) ){ \
55  magmablas_dinplace_transpose( dAT, ldda, ldda ); \
56  } else { \
57  magmablas_dtranspose2( dA, ldda, dAT, ldda, n, m ); \
58  cublasFree(dAT); \
59  }
60 
61 #define magmablas_cgetmo_in( dA, dAT, ldda, m, n ) \
62  dAT = dA; \
63  if ( ( (m) == (n) ) && ( (m)%32 == 0) && ( (ldda)%32 == 0) ){ \
64  magmablas_cinplace_transpose( dAT, ldda, ldda ); \
65  } else { \
66  cublasStatus status = cublasAlloc( (m)*(n), sizeof(cuFloatComplex), (void**)&dAT); \
67  if (status != CUBLAS_STATUS_SUCCESS) \
68  return -7; \
69  magmablas_ctranspose2( dAT, ldda, dA, ldda, m, n ); \
70  }
71 
72 #define magmablas_cgetmo_out( dA, dAT, ldda, m, n ) \
73  if ( ( (m) == (n) ) && ( (m)%32 == 0) && ( (ldda)%32 == 0) ){ \
74  magmablas_cinplace_transpose( dAT, ldda, ldda ); \
75  } else { \
76  magmablas_ctranspose2( dA, ldda, dAT, ldda, n, m ); \
77  cublasFree(dAT); \
78  }
79 
80 #define magmablas_zgetmo_in( dA, dAT, ldda, m, n ) \
81  dAT = dA; \
82  if ( ( (m) == (n) ) && ( (m)%32 == 0) && ( (ldda)%32 == 0) ){ \
83  magmablas_zinplace_transpose( dAT, ldda, ldda ); \
84  } else { \
85  cublasStatus status = cublasAlloc( (m)*(n), sizeof(cuDoubleComplex), (void**)&dAT); \
86  if (status != CUBLAS_STATUS_SUCCESS) \
87  return -7; \
88  magmablas_ztranspose2( dAT, ldda, dA, ldda, m, n ); \
89  }
90 
91 #define magmablas_zgetmo_out( dA, dAT, ldda, m, n ) \
92  if ( ( (m) == (n) ) && ( (m)%32 == 0) && ( (ldda)%32 == 0) ){ \
93  magmablas_zinplace_transpose( dAT, ldda, ldda ); \
94  } else { \
95  magmablas_ztranspose2( dA, ldda, dAT, ldda, n, m ); \
96  cublasFree(dAT); \
97  }
98 
99 #endif /* _MAGMA_TRANSPOSE_H_ */