Commit f7f182b9 authored by Andreas Marek's avatar Andreas Marek

Merge branch 'master_pre_stage' into loh/autotuning

parents a8c5c927 a94fb86d
This diff is collapsed.
Changelog for ELPA 2017.11.001.rc1
- added new compute kernels for IBM Power8 and Fujistu Sparc64
processors
- a first implementation of autotuning capability
Changelog for ELPA 2017.05.003
- remove bug in invert_triangular, which had been introduced
......
......@@ -18,11 +18,11 @@ In order to unfiy the namespace of the *ELPA* public interfaces, several interfa
have been replaced by new names. The old interfaces will be removed
Deprecated interface Replacement Comment
================================================================================
get_elpa_row_col_coms elpa_get_communicators (removed)
get_elpa_communicators elpa_get_communicators (removed)
solve_evp_real elpa_solve_evp_real_1stage_double (removed)
solve_evp_complex elpa_solve_evp_complex_1stage_double (removed)
==================================================================================================
get_elpa_row_col_coms elpa_get_communicators (removed since 2017.11.001)
get_elpa_communicators elpa_get_communicators (removed since 2017.11.001)
solve_evp_real elpa_solve_evp_real_1stage_double (removed since 2017.11.001)
solve_evp_complex elpa_solve_evp_complex_1stage_double (removed since 2017.11.001)
solve_evp_real_1stage elpa_solve_evp_real_1stage_double
solve_evp_complex_1stage elpa_solve_evp_complex_1stage_double
solve_evp_real_2stage elpa_solve_evp_real_2stage_double
......
# Installation guide for the *ELPA* library#
## Preamle ##
## Preamble ##
This file provides documentation on how to build the *ELPA* library in **version ELPA-2017.05.003**.
This file provides documentation on how to build the *ELPA* library in **version ELPA-2017.11.001.rc1**.
With release of **version ELPA-2017.05.001** the build process has been significantly simplified,
which makes it easier to install the *ELPA* library
......
......@@ -3,6 +3,12 @@
For more details and recent updates please visit the online [issue system] (https://gitlab.mpcdf.mpg.de/elpa/elpa/issues)
Issues which are not mentioned in a newer release are (considered as) solved
### ELPA 2017.11.001.rc1 release ###
- the elpa autotune print functions cannot print at the moment
### ELPA 2017.05.003 release ###
- at the moment no issues are known
### ELPA 2017.05.002 release ###
- at the moment no issues are known
......
......@@ -73,3 +73,9 @@ https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
NO incompatible API changes w.r.t. to the previous version. Only some functions have
been added. The state of release 2017.05.001 defines this interface
- 11
Incompatible API changes w.r.t. to the previous version (only in the so called
"legacy interface", since as anounced some deprecated function aliases have been
removed). For the current interface all changes since 2017.05.001 are
compatible, since only some functions have been added.
The state of release 2017.11.001.rc1 defines this interface
......@@ -2,10 +2,19 @@
## Current Release ##
The current release is ELPA 2017.05.003. The current supported API version
is 20170403. This release supports the earliest API version 20170403.
The current release is ELPA 2017.11.001.rc1. The current supported API version
is 20171201. This release supports the earliest API version 20170403.
## About *ELPA*
[![Build
status](https://gitlab.mpcdf.mpg.de/elpa/elpa/badges/master/build.svg)](https://gitlab.mpcdf.mpg.de/elpa/elpa/commits/master)
[![Code
coverage](https://gitlab.mpcdf.mpg.de/elpa/badges/master/coverage.svg)](http://elpa.pages.mpcdf.de/elpa/coverage_summary
[![License: LGPL v3][license-badge]](LICENSE)
[license-badge]: https://img.shields.io/badge/License-LGPL%20v3-blue.svg
## About *ELPA* ##
The computation of selected or all eigenvalues and eigenvectors of a symmetric
(Hermitian) matrix has high relevance for various scientific disciplines.
......
This file contains the release notes for the ELPA 2017.05.003 version
This file contains the release notes for the ELPA 2017.11.001.rc1 version
What is new?
-------------
For detailed information about changes since release ELPA 2017.05.002 please have a look at the Changelog file
For detailed information about changes since release ELPA 2017.05.03 please have a look at the Changelog file
- This release contains a fix for a bug introduced in ELPA 2017.05.002
- This release contains new compute kernels for IBM Power 8 and Fujistu Sparc64 processors
- A first version of autotuning has been implemented
ABI change
---------------------
Since release 2017.05.001 the ABI has not changed.
Since release 2017.05.003 the ABI has changed.
Any incompatibilities to previous version?
---------------------------------------
As mentioned before, the ABI of ELPA was not changed; There is no
incompatibility with the previous version ELPA 2017.05.002.
As mentioned before, the ABI of ELPA was changed;
This change only affectes the old "lecgacy interface", since as
anounced some deprecated function aliases have been removed.
For the current interface there is no incompatibility with the
previous version ELPA 2017.05.003.
......@@ -149,7 +149,7 @@ Local documentation (via man pages) should be available (if *ELPA* has been inst
For example "man elpa2_print_kernels" should provide the documentation for the *ELPA* program which prints all
the available kernels.
Also a [online doxygen documentation] (http://elpa.mpcdf.mpg.de/html/Documentation/ELPA-2017.05.003/html/index.html)
Also a [online doxygen documentation] (http://elpa.mpcdf.mpg.de/html/Documentation/ELPA-2017.11.001.rc1/html/index.html)
for each *ELPA* release is available.
......@@ -9,7 +9,7 @@ Local documentation (via man pages) should be available (if *ELPA* has been inst
For example "man elpa2_print_kernels" should provide the documentation for the *ELPA* program which prints all
the available kernels.
Also a [online doxygen documentation] (http://elpa.mpcdf.mpg.de/html/Documentation/ELPA-2017.05.003/html/index.html)
Also a [online doxygen documentation] (http://elpa.mpcdf.mpg.de/html/Documentation/ELPA-2017.11.001.rc1/html/index.html)
for each *ELPA* release is available.
......
......@@ -27,12 +27,13 @@ AM_SILENT_RULES([yes])
# by the current interface, as they are ABI compatible (e.g. only new symbols
# were added by the new interface)
#
AC_SUBST([ELPA_SO_VERSION], [10:1:2])
AC_SUBST([ELPA_SO_VERSION], [11:0:0])
# API Version
AC_DEFINE([EARLIEST_API_VERSION], [20170403], [Earliest supported ELPA API version])
AC_DEFINE([CURRENT_API_VERSION], [20170403], [Current ELPA API version])
AC_DEFINE([CURRENT_API_VERSION], [20171201], [Current ELPA API version])
# Autotune Version
AC_DEFINE([EARLIEST_AUTOTUNE_VERSION], [20171201], [Earliest ELPA API version, which supports autotuning])
AX_CHECK_GNU_MAKE()
if test x$_cv_gnu_make_command = x ; then
......@@ -1138,12 +1139,13 @@ m4_foreach_w([elpa_m4_kind],[real complex],[
])
])
#echo " "
#echo "***********************************************************************"
#echo "* This is a the release of ELPA 2017.05.003 *"
#echo "* It mainly contains bugfixes to ELPA 2017.05.001 *"
#echo "***********************************************************************"
#echo " "
echo " "
echo "***********************************************************************"
echo "* This is a the first release candidate of ELPA 2017.11.001 *"
echo "* There might be still some changes until the final release of *"
echo "* ELPA 2017.11.001 *"
echo "***********************************************************************"
echo " "
if test x"$enable_kcomputer" = x"yes" ; then
echo " "
......
......@@ -32,7 +32,7 @@
%endif
Name: elpa
Version: 2017.05.003
Version: 2017.11.001.rc1
Release: 1
Summary: A massively parallel eigenvector solver
License: LGPL-3.0
......
This diff is collapsed.
......@@ -20,7 +20,7 @@ class(elpa_t), pointer :: elpa
.RI "With the definitions of the input and output variables:"
.br
.RI "integer, intent(in) :: \fBapi_version\fP ! the api version that you want to initialize, currently the version is 20170403"
.RI "integer, intent(in) :: \fBapi_version\fP ! the api version that you want to initialize, currently the version is 20171201"
.br
.RI "integer :: \fBerror\fP ! the return code. If the function returns without an error, the error code will be ELPA_OK."
.br
......@@ -40,7 +40,7 @@ elpa_t handle;
.br
.br
.RI "int \fBapi_version\fP; // the api version that you want to initialize currently the version is 20170403"
.RI "int \fBapi_version\fP; // the api version that you want to initialize currently the version is 20171201"
.br
.RI "int \fBerror\fP; // the return code. If the function returns without an error, the error code will be ELPA_OK."
......
......@@ -109,7 +109,7 @@
!> class(elpa_t), pointer :: elpa
!> integer :: success
!>
!> if (elpa_init(20170403) /= ELPA_OK) then
!> if (elpa_init(20171201) /= ELPA_OK) then
!> print *, "ELPA API version not supported"
!> stop
!> endif
......@@ -153,7 +153,7 @@
!> elpa_t handle;
!> int error;
!>
!> if (elpa_init(20170403) != ELPA_OK) {
!> if (elpa_init(20171201) != ELPA_OK) {
!> fprintf(stderr, "Error: ELPA API version not supported");
!> exit(1);
!> }
......
......@@ -60,7 +60,10 @@ module elpa_api
!< with the current release
integer, private, parameter :: current_api_version = CURRENT_API_VERSION !< Definition of the current API version
logical, private :: initDone = .false.
integer, private, parameter :: earliest_autotune_version = EARLIEST_AUTOTUNE_VERSION !< Definition of the earliest API version
!< which supports autotuning
integer, private :: api_version_set
logical, private :: initDone = .false.
public :: elpa_t, &
c_int, &
......@@ -71,6 +74,7 @@ module elpa_api
type, abstract :: elpa_t
private
!< these have to be public for proper bounds checking, sadly
integer(kind=c_int), public, pointer :: na => NULL()
integer(kind=c_int), public, pointer :: nev => NULL()
......@@ -226,12 +230,17 @@ module elpa_api
!> \param domain integer: domain (real/complex) which should be tuned
!> \result tune_state class(elpa_autotune_t): the autotuning object
abstract interface
function elpa_autotune_setup_i(self, level, domain) result(tune_state)
function elpa_autotune_setup_i(self, level, domain, error) result(tune_state)
import elpa_t, elpa_autotune_t
implicit none
class(elpa_t), intent(inout), target :: self
integer, intent(in) :: level, domain
class(elpa_autotune_t), pointer :: tune_state
integer, intent(in) :: level, domain
class(elpa_autotune_t), pointer :: tune_state
#ifdef USE_FORTRAN2008
integer , optional :: error
#else
integer :: error
#endif
end function
end interface
......@@ -1374,6 +1383,7 @@ module elpa_api
if (earliest_api_version <= api_version .and. api_version <= current_api_version) then
initDone = .true.
api_version_set = api_version
error = ELPA_OK
else
write(error_unit, "(a,i0,a)") "ELPA: Error API version ", api_version," is not supported by this library"
......@@ -1394,6 +1404,12 @@ module elpa_api
endif
end function
function elpa_get_api_version() result(api_version)
integer :: api_version
api_version = api_version_set
end function
!> \brief subroutine to uninit the ELPA library. Does nothing at the moment. Might do sth. later
!
......
......@@ -2609,11 +2609,35 @@ module elpa_impl
!> \param level integer: the "thoroughness" of the planed autotuning
!> \param domain integer: the domain (real/complex) which should be tuned
!> \result tune_state class(elpa_autotune_t): the created autotuning object
function elpa_autotune_setup(self, level, domain) result(tune_state)
function elpa_autotune_setup(self, level, domain, error) result(tune_state)
class(elpa_impl_t), intent(inout), target :: self
integer, intent(in) :: level, domain
type(elpa_autotune_impl_t), pointer :: ts_impl
class(elpa_autotune_t), pointer :: tune_state
#ifdef USE_FORTRAN2008
integer(kind=c_int), optional :: error
#else
integer(kind=c_int) :: error
#endif
#ifdef USE_FORTRAN2008
if (present(error)) then
error = ELPA_OK
endif
#else
error = ELPA_OK
#endif
if (elpa_get_api_version() < EARLIEST_AUTOTUNE_VERSION) then
write(error_unit, "(a,i0,a)") "ELPA: Error API version: Autotuning does not support ", elpa_get_api_version()
#ifdef USE_FORTRAN2008
if (present(error)) then
error = ELPA_ERROR
endif
#else
error = ELPA_ERROR
#endif
return
endif
allocate(ts_impl)
ts_impl%parent => self
......@@ -2638,8 +2662,8 @@ module elpa_impl
!c> * \param int domain: real/complex autotuning
!c> * \result elpa_autotune_t handle: on the autotune object
!c> */
!c> elpa_autotune_t elpa_autotune_setup(elpa_t handle, int level, int domain);
function elpa_autotune_setup_c(handle ,level, domain) result(ptr) bind(C, name="elpa_autotune_setup")
!c> elpa_autotune_t elpa_autotune_setup(elpa_t handle, int level, int domain, int *error);
function elpa_autotune_setup_c(handle ,level, domain, error) result(ptr) bind(C, name="elpa_autotune_setup")
type(c_ptr), intent(in), value :: handle
type(elpa_impl_t), pointer :: self
class(elpa_autotune_t), pointer :: tune_state
......@@ -2647,14 +2671,18 @@ module elpa_impl
integer(kind=c_int), intent(in), value :: level
integer(kind=c_int), intent(in), value :: domain
type(c_ptr) :: ptr
#ifdef USE_FORTRAN2008
integer(kind=c_int) , intent(in), optional :: error
#else
integer(kind=c_int) , intent(in) :: error
#endif
print *,"Calling c_f_pointer handle"
call c_f_pointer(handle, self)
print *,"Calling setup"
print *,level,domain
tune_state => self%autotune_setup(level, domain)
tune_state => self%autotune_setup(level, domain, error)
print *,"After setup"
select type(tune_state)
class is (elpa_autotune_impl_t)
......
......@@ -197,13 +197,14 @@ program test
assert_elpa_ok(error)
#endif
call e%set("timings",1)
call e%set("debug",1)
!call e%set("debug",1)
assert_elpa_ok(e%setup())
if (myid == 0) print *, ""
tune_state => e%autotune_setup(ELPA_AUTOTUNE_FAST, AUTOTUNE_DOMAIN)
tune_state => e%autotune_setup(ELPA_AUTOTUNE_FAST, AUTOTUNE_DOMAIN, error)
assert_elpa_ok(error)
do while (e%autotune_step(tune_state))
call e%eigenvectors(a, ev, z, error)
......
AC_PREREQ([2.69])
AC_INIT([elpa_test_project],[2017.05.003], elpa-library@rzg.mpg.de)
elpaversion="2017.05.003"
AC_INIT([elpa_test_project],[2017.11.001.rc1], elpa-library@rzg.mpg.de)
elpaversion="2017.11.001.rc1"
AC_CONFIG_SRCDIR([src/test_real.F90])
AM_INIT_AUTOMAKE([foreign -Wall subdir-objects])
......
......@@ -191,7 +191,7 @@ program test_real_example
!-------------------------------------------------------------------------------
if (elpa_init(20170403) /= elpa_ok) then
if (elpa_init(20171201) /= elpa_ok) then
print *, "ELPA API version not supported"
stop
endif
......
AC_PREREQ([2.69])
AC_INIT([elpa_test_project],[2017.05.003], elpa-library@rzg.mpg.de)
elpaversion="2017.05.003"
AC_INIT([elpa_test_project],[2017.11.001.rc1], elpa-library@rzg.mpg.de)
elpaversion="2017.11.001.rc1"
AC_CONFIG_SRCDIR([src/test_real.F90])
AM_INIT_AUTOMAKE([foreign -Wall subdir-objects])
......
AC_PREREQ([2.69])
AC_INIT([elpa_test_project],[2017.05.003], elpa-library@rzg.mpg.de)
elpaversion="2017.05.003"
AC_INIT([elpa_test_project],[2017.11.001.rc1], elpa-library@rzg.mpg.de)
elpaversion="2017.11.001.rc1"
AC_CONFIG_SRCDIR([src/test_real2.F90])
AM_INIT_AUTOMAKE([foreign -Wall subdir-objects])
......
......@@ -191,7 +191,7 @@ program test_real_example
!-------------------------------------------------------------------------------
if (elpa_init(20170403) /= elpa_ok) then
if (elpa_init(20171201) /= elpa_ok) then
print *, "ELPA API version not supported"
stop
endif
......
AC_PREREQ([2.69])
AC_INIT([elpa2_test_project],[2017.05.003], elpa-library@rzg.mpg.de)
elpaversion="2017.05.003"
AC_INIT([elpa2_test_project],[2017.11.001.rc1], elpa-library@rzg.mpg.de)
elpaversion="2017.11.001.rc1"
AC_CONFIG_SRCDIR([src/test_real2.F90])
AM_INIT_AUTOMAKE([foreign -Wall subdir-objects])
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment