libflame  revision_anchor
Functions
FLA_Scal_external_gpu.c File Reference

(r)

Functions

FLA_Error FLA_Scal_external_gpu (FLA_Obj alpha, FLA_Obj A, void *A_gpu)
 

Function Documentation

◆ FLA_Scal_external_gpu()

FLA_Error FLA_Scal_external_gpu ( FLA_Obj  alpha,
FLA_Obj  A,
void *  A_gpu 
)

References FLA_Check_error_level(), FLA_Obj_datatype(), FLA_Obj_equals(), FLA_Obj_has_zero_dim(), FLA_Obj_length(), FLA_Obj_width(), FLA_ONE, FLA_Scal_check(), and i.

Referenced by FLA_Gemm_external_gpu(), and FLASH_Queue_exec_task_gpu().

18 {
19  FLA_Datatype datatype;
20  int m_A, n_A;
21  int ldim_A, inc_A;
22  int i;
23 
24  if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING )
25  FLA_Scal_check( alpha, A );
26 
27  if ( FLA_Obj_has_zero_dim( A ) ) return FLA_SUCCESS;
28 
29  if ( FLA_Obj_equals( alpha, FLA_ONE ) )
30  {
31  return FLA_SUCCESS;
32  }
33 
34  datatype = FLA_Obj_datatype( A );
35 
36  m_A = FLA_Obj_length( A );
37  n_A = FLA_Obj_width( A );
38  ldim_A = FLA_Obj_length( A );
39  inc_A = 1;
40 
41  switch ( datatype ){
42 
43  case FLA_FLOAT:
44  {
45  float* buff_alpha = ( float* ) FLA_FLOAT_PTR( alpha );
46  float* buff_A_gpu = ( float* ) A_gpu;
47 
48  for ( i = 0; i < n_A; i++ )
49  cublasSscal( m_A,
50  *buff_alpha,
51  buff_A_gpu + i * ldim_A, inc_A );
52 
53  break;
54  }
55 
56  case FLA_DOUBLE:
57  {
58  double* buff_alpha = ( double* ) FLA_DOUBLE_PTR( alpha );
59  double* buff_A_gpu = ( double* ) A_gpu;
60 
61  for ( i = 0; i < n_A; i++ )
62  cublasDscal( m_A,
63  *buff_alpha,
64  buff_A_gpu + i * ldim_A, inc_A );
65 
66  break;
67  }
68 
69  case FLA_COMPLEX:
70  {
71  cuComplex* buff_alpha = ( cuComplex* ) FLA_COMPLEX_PTR( alpha );
72  cuComplex* buff_A_gpu = ( cuComplex* ) A_gpu;
73 
74  for ( i = 0; i < n_A; i++ )
75  cublasCscal( m_A,
76  *buff_alpha,
77  buff_A_gpu + i * ldim_A, inc_A );
78 
79  break;
80  }
81 
82  case FLA_DOUBLE_COMPLEX:
83  {
84  cuDoubleComplex* buff_alpha = ( cuDoubleComplex* ) FLA_DOUBLE_COMPLEX_PTR( alpha );
85  cuDoubleComplex* buff_A_gpu = ( cuDoubleComplex* ) A_gpu;
86 
87  for ( i = 0; i < n_A; i++ )
88  cublasZscal( m_A,
89  *buff_alpha,
90  buff_A_gpu + i * ldim_A, inc_A );
91 
92  break;
93  }
94 
95  }
96 
97  return FLA_SUCCESS;
98 }
FLA_Error FLA_Scal_check(FLA_Obj alpha, FLA_Obj A)
Definition: FLA_Scal_check.c:13
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
FLA_Bool FLA_Obj_has_zero_dim(FLA_Obj A)
Definition: FLA_Query.c:400
dim_t FLA_Obj_width(FLA_Obj obj)
Definition: FLA_Query.c:123
FLA_Bool FLA_Obj_equals(FLA_Obj A, FLA_Obj B)
Definition: FLA_Query.c:507
unsigned int FLA_Check_error_level(void)
Definition: FLA_Check.c:18
int FLA_Datatype
Definition: FLA_type_defs.h:49
int i
Definition: bl1_axmyv2.c:145
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116