Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
elpa
elpa
Commits
e1c2c811
Commit
e1c2c811
authored
Jul 16, 2018
by
Pavel Kus
Browse files
using cannons algorithm for real singe as well
parent
f20ce4de
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
src/elpa_generalized/cannon_forw.c
View file @
e1c2c811
...
...
@@ -38,7 +38,7 @@ int numroc_(int*, int*, int*, int*, int*);
//***********************************************************************************************************
/*
!f> interface
!f> subroutine cannons_reduction(A, U, local_rows, local_cols, a_desc, Res, toStore, row_comm, col_comm) &
!f> subroutine cannons_reduction
_d
(A, U, local_rows, local_cols, a_desc, Res, toStore, row_comm, col_comm) &
!f> bind(C, name="cannons_reduction_c_d")
!f> use, intrinsic :: iso_c_binding
!f> real(c_double) :: A(local_rows, local_cols), U(local_rows, local_cols), Res(local_rows, local_cols)
...
...
@@ -52,10 +52,40 @@ int numroc_(int*, int*, int*, int*, int*);
void
cannons_reduction_c_d
(
double
*
A
,
double
*
U
,
int
local_rows
,
int
local_cols
,
int
*
a_desc
,
double
*
Res
,
int
ToStore
,
int
row_comm
,
int
col_comm
);
#define REALCASE 1
#define SINGLE_PRECISION 1
#include
"../general/precision_macros.h"
#include
"cannon_forw_template.c"
#undef SINGLE_PRECISION
#undef REALCASE
//***********************************************************************************************************
/*
!f> interface
!f> subroutine cannons_reduction_f(A, U, local_rows, local_cols, a_desc, Res, toStore, row_comm, col_comm) &
!f> bind(C, name="cannons_reduction_c_f")
!f> use, intrinsic :: iso_c_binding
!f> real(c_float) :: A(local_rows, local_cols), U(local_rows, local_cols), Res(local_rows, local_cols)
!f> !type(c_ptr), value :: A, U, Res
!f> integer(kind=c_int) :: a_desc(9)
!f> integer(kind=c_int),value :: local_rows, local_cols
!f> integer(kind=c_int),value :: row_comm, col_comm, ToStore
!f> end subroutine
!f> end interface
*/
void
cannons_reduction_c_f
(
float
*
A
,
float
*
U
,
int
local_rows
,
int
local_cols
,
int
*
a_desc
,
float
*
Res
,
int
ToStore
,
int
row_comm
,
int
col_comm
);
#else
// Just because of the Intel preprocessor
// TODO do something with it
void
cannons_reduction_c_d
(
double
*
A
,
double
*
U
,
int
local_rows
,
int
local_cols
,
int
*
a_desc
,
double
*
Res
,
int
ToStore
,
int
row_comm
,
int
col_comm
)
{
}
void
cannons_reduction_c_f
(
float
*
A
,
float
*
U
,
int
local_rows
,
int
local_cols
,
int
*
a_desc
,
float
*
Res
,
int
ToStore
,
int
row_comm
,
int
col_comm
)
{
}
#endif
src/elpa_generalized/cannon_forw_template.c
View file @
e1c2c811
This diff is collapsed.
Click to expand it.
src/elpa_impl_generalized_transform_template.F90
View file @
e1c2c811
...
...
@@ -34,9 +34,9 @@
call
self
%
timer_start
(
"transform_generalized()"
)
call
self
%
get
(
"cannon_for_generalized"
,
use_cannon
,
error
)
#if !defined(REALCASE)
|| !defined(DOUBLE_PRECISION)
#if !defined(REALCASE)
if
(
my_p
==
0
)
then
write
(
*
,
*
)
"Cannons algorithm can be used only for real
double
at the moment"
write
(
*
,
*
)
"Cannons algorithm can be used only for real at the moment"
write
(
*
,
*
)
"Switching to elpa Hermitian and scalapack"
end
if
use_cannon
=
0
...
...
@@ -81,10 +81,12 @@
call
self
%
timer_start
(
"cannons_reduction"
)
#if defined(REALCASE)
&& defined(DOUBLE_PRECISION)
#if defined(REALCASE)
! BEWARE! even though tmp is output from the routine, it has to be zero on input!
tmp
=
0.0_rck
call
cannons_reduction
(
a
,
b
,
self
%
local_nrows
,
self
%
local_ncols
,
&
call
cannons_reduction_
&
&
ELPA_IMPL_SUFFIX
&
&(
a
,
b
,
self
%
local_nrows
,
self
%
local_ncols
,
&
sc_desc
,
tmp
,
BuffLevelInt
,
mpi_comm_rows
,
mpi_comm_cols
)
#endif
call
self
%
timer_stop
(
"cannons_reduction"
)
...
...
src/general/precision_macros.h
View file @
e1c2c811
...
...
@@ -11,6 +11,11 @@
#undef REAL_DATATYPE
#undef C_REAL_DATATYPE
#undef C_GEMM
#undef C_LACPY
#undef C_PLACPY
#undef C_PTRAN
#undef PRECISION_TRTRI
#undef PRECISION_POTRF
#undef PRECISION_TRSM
...
...
@@ -48,6 +53,7 @@
#undef MPI_REAL_PRECISION
#undef MPI_MATH_DATATYPE_PRECISION
#undef MPI_MATH_DATATYPE_PRECISION_C
#undef MPI_MATH_DATATYPE_PRECISION_EXPL
#undef C_DATATYPE_KIND
#undef THRESHOLD
...
...
@@ -103,9 +109,15 @@
#define scal_PRECISION_LASET PDLASET
#define MPI_REAL_PRECISION MPI_REAL8
#define MPI_MATH_DATATYPE_PRECISION MPI_REAL8
#define MPI_MATH_DATATYPE_PRECISION_C MPI_DOUBLE
#define MPI_MATH_DATATYPE_PRECISION_EXPL MPI_REAL8
#define C_DATATYPE_KIND c_double
#define C_GEMM dgemm_
#define C_LACPY dlacpy_
#define C_PLACPY pdlacpy_
#define C_PTRAN pdtran_
#define THRESHOLD 1e-11_rk8
#endif
/* DOUBLE_PRECISION */
...
...
@@ -157,9 +169,15 @@
#define scal_PRECISION_LASET PSLASET
#define MPI_REAL_PRECISION MPI_REAL4
#define MPI_MATH_DATATYPE_PRECISION MPI_REAL4
#define MPI_MATH_DATATYPE_PRECISION_C MPI_FLOAT
#define MPI_MATH_DATATYPE_PRECISION_EXPL MPI_REAL4
#define C_DATATYPE_KIND c_float
#define C_GEMM sgemm_
#define C_LACPY slacpy_
#define C_PLACPY pslacpy_
#define C_PTRAN pstran_
#define THRESHOLD 1e-4_rk4
#endif
/* SINGLE_PRECISION */
...
...
@@ -179,6 +197,11 @@
#undef REAL_DATATYPE
#undef C_REAL_DATATYPE
#undef C_GEMM
#undef C_LACPY
#undef C_PLACPY
#undef C_PTRAN
#undef PRECISION_TRTRI
#undef PRECISION_POTRF
#undef PRECISION_TRSM
...
...
@@ -216,6 +239,7 @@
#undef ELPA_IMPL_SUFFIX
#undef MPI_COMPLEX_PRECISION
#undef MPI_MATH_DATATYPE_PRECISION
#undef MPI_MATH_DATATYPE_PRECISION_C
#undef MPI_MATH_DATATYPE_PRECISION_EXPL
#undef MPI_COMPLEX_EXPLICIT_PRECISION
#undef MPI_REAL_PRECISION
...
...
@@ -244,6 +268,11 @@
#define REAL_DATATYPE RK8
#define C_REAL_DATATYPE c_double
#define C_GEMM zgemm_
#define C_LACPY zlacpy_
#define C_PLACPY pzlacpy_
#define C_PTRAN pztran_
#define PRECISION_TRTRI ZTRTRI
#define PRECISION_POTRF ZPOTRF
#define PRECISION_TRSM ZTRSM
...
...
@@ -278,6 +307,7 @@
#define scal_PRECISION_LASET PZLASET
#define MPI_COMPLEX_PRECISION MPI_DOUBLE_COMPLEX
#define MPI_MATH_DATATYPE_PRECISION MPI_DOUBLE_COMPLEX
#define MPI_MATH_DATATYPE_PRECISION_C MPI_DOUBLE_COMPLEX
#define MPI_MATH_DATATYPE_PRECISION_EXPL MPI_COMPLEX16
#define MPI_COMPLEX_EXPLICIT_PRECISION MPI_COMPLEX16
#define MPI_REAL_PRECISION MPI_REAL8
...
...
@@ -302,6 +332,11 @@
#define REAL_DATATYPE RK4
#define C_REAL_DATATYPE c_float
#define C_GEMM cgemm_
#define C_LACPY clacpy_
#define C_PLACPY pclacpy_
#define C_PTRAN pctran_
#define PRECISION_TRTRI CTRTRI
#define PRECISION_POTRF CPOTRF
#define PRECISION_TRSM CTRSM
...
...
@@ -336,6 +371,7 @@
#define scal_PRECISION_LASET PCLASET
#define MPI_COMPLEX_PRECISION MPI_COMPLEX
#define MPI_MATH_DATATYPE_PRECISION MPI_COMPLEX
#define MPI_MATH_DATATYPE_PRECISION_C MPI_COMPLEX
#define MPI_MATH_DATATYPE_PRECISION_EXPL MPI_COMPLEX8
#define MPI_COMPLEX_EXPLICIT_PRECISION MPI_COMPLEX8
#define MPI_REAL_PRECISION MPI_REAL4
...
...
src/general/precision_typedefs.h
0 → 100644
View file @
e1c2c811
#ifdef REALCASE
#ifdef DOUBLE_PRECISION
//typedef double math_type;
#define math_type double
#endif
#ifdef SINGLE_PRECISION
//typedef float math_type;
#define math_type float
#endif
#endif
#ifdef COMPLEXCASE
#ifdef DOUBLE_PRECISION
#endif
#ifdef SINGLE_PRECISION
#endif
#endif
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment