MAGMA  1.2.0
MatrixAlgebraonGPUandMulticoreArchitectures
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
zplghe.c
Go to the documentation of this file.
1 
16 #include "common.h"
17 
18 /***************************************************************************/
59 int MAGMA_zplghe( double bump, int N,
60  PLASMA_Complex64_t *A, int LDA,
61  unsigned long long int seed )
62 {
63  int NB;
64  int status;
66  magma_sequence_t *sequence = NULL;
68  magma_desc_t descA;
69 
70  magma = magma_context_self();
71  if (magma == NULL) {
72  magma_fatal_error("MAGMA_zplghe", "MAGMA not initialized");
74  }
75  /* Check input arguments */
76  if (N < 0) {
77  magma_error("MAGMA_zplghe", "illegal value of N");
78  return -2;
79  }
80  if (LDA < max(1, N)) {
81  magma_error("MAGMA_zplghe", "illegal value of LDA");
82  return -4;
83  }
84  /* Quick return */
85  if (max(0, N) == 0)
86  return MAGMA_SUCCESS;
87 
88  /* Tune NB depending on M, N && NRHS; Set NBNB */
89  /* status = magma_tune(MAGMA_FUNC_ZGEMM, N, N, 0); */
90  /* if (status != MAGMA_SUCCESS) { */
91  /* magma_error("MAGMA_zplghe", "magma_tune() failed"); */
92  /* return status; */
93  /* } */
94 
95  /* Set NT */
96  NB = MAGMA_NB;
97  magma_sequence_create(magma, &sequence);
98 
99  magma_zdesc_alloc( descA, NB, NB, LDA, N, 0, 0, N, N, magma_desc_mat_free(&(descA)) );
100 
101  /* Call the tile interface */
102  MAGMA_zplghe_Tile_Async( bump, &descA, seed, sequence, &request );
103 
104  morse_barrier( magma );
105  magma_zooptile2lap( descA, A, NB, NB, LDA, N );
106  morse_barrier( magma );
107 
108  status = sequence->status;
109  magma_sequence_destroy(magma, sequence);
110 
111  return status;
112 }
113 
114 /***************************************************************************/
152 int MAGMA_zplghe_Tile( double bump, magma_desc_t *A,
153  unsigned long long int seed )
154 {
156  magma_sequence_t *sequence = NULL;
158  int status;
159 
160  magma = magma_context_self();
161  if (magma == NULL) {
162  magma_fatal_error("MAGMA_zplghe_Tile", "MAGMA not initialized");
164  }
165  magma_sequence_create(magma, &sequence);
166  MAGMA_zplghe_Tile_Async( bump, A, seed, sequence, &request );
167  morse_barrier( magma );
168  morse_desc_getoncpu( A );
169  status = sequence->status;
170  magma_sequence_destroy(magma, sequence);
171  return status;
172 }
173 
174 /***************************************************************************/
203 int MAGMA_zplghe_Tile_Async( double bump,
204  magma_desc_t *A,
205  unsigned long long int seed,
206  magma_sequence_t *sequence,
207  magma_request_t *request)
208 {
209  PLASMA_desc descA = A->desc;
211 
212  magma = magma_context_self();
213  if (magma == NULL) {
214  magma_fatal_error("MAGMA_zplghe_Tile", "MAGMA not initialized");
216  }
217  if (sequence == NULL) {
218  magma_fatal_error("MAGMA_zplghe_Tile", "NULL sequence");
219  return MAGMA_ERR_UNALLOCATED;
220  }
221  if (request == NULL) {
222  magma_fatal_error("MAGMA_zplghe_Tile", "NULL request");
223  return MAGMA_ERR_UNALLOCATED;
224  }
225  /* Check sequence status */
226  if (sequence->status == MAGMA_SUCCESS)
227  request->status = MAGMA_SUCCESS;
228  else
229  return magma_request_fail(sequence, request, MAGMA_ERR_SEQUENCE_FLUSHED);
230 
231  /* Check descriptors for correctness */
232  if (magma_desc_check( A ) != MAGMA_SUCCESS) {
233  magma_error("MAGMA_zplghe_Tile", "invalid descriptor");
234  return magma_request_fail(sequence, request, MAGMA_ERR_ILLEGAL_VALUE);
235  }
236  /* Check input arguments */
237  if (descA.nb != descA.mb) {
238  magma_error("MAGMA_zplghe_Tile", "only square tiles supported");
239  return magma_request_fail(sequence, request, MAGMA_ERR_ILLEGAL_VALUE);
240  }
241 
242  /* Quick return */
243  if (min( descA.m, descA.n ) == 0)
244  return MAGMA_SUCCESS;
245 
246  magma_pzplghe( bump, A, seed, sequence, request);
247 
248  return MAGMA_SUCCESS;
249 }