Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed isfinite implementation and added test #348

Merged
merged 11 commits into from
Sep 23, 2019
Merged

Fixed isfinite implementation and added test #348

merged 11 commits into from
Sep 23, 2019

Conversation

thoasm
Copy link
Member

@thoasm thoasm commented Sep 10, 2019

@yhmtsai discovered that both the implementation and the documentation is wrong for the self-written function isfinite (which is used in certain compiler combinations).
Now, both the implementation and the documentation of isfinite is (at least it should be) correct now.
Additionally, a test was added for the host functions to ensure the behavior is as expected.

In the process of fixing another compiler error, the whole previously created mess was cleaned up, leading to readable and maintainable code.

@thoasm thoasm added is:bug Something looks wrong. mod:core This is related to the core module. 1:ST:ready-for-review This PR is ready for review labels Sep 10, 2019
@thoasm thoasm self-assigned this Sep 10, 2019
Copy link
Member

@yhmtsai yhmtsai left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be great if there is a cuda test for it.

core/test/base/math.cpp Outdated Show resolved Hide resolved
core/test/base/math.cpp Show resolved Hide resolved
@codecov
Copy link

codecov bot commented Sep 11, 2019

Codecov Report

Merging #348 into develop will increase coverage by 0.01%.
The diff coverage is 100%.

Impacted file tree graph

@@             Coverage Diff             @@
##           develop     #348      +/-   ##
===========================================
+ Coverage    98.28%   98.29%   +0.01%     
===========================================
  Files          250      251       +1     
  Lines        18718    18752      +34     
===========================================
+ Hits         18397    18433      +36     
+ Misses         321      319       -2
Impacted Files Coverage Δ
core/test/base/math.cpp 100% <100%> (ø)
include/ginkgo/core/base/math.hpp 100% <100%> (+6.89%) ⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update fbc409d...6f5b017. Read the comment docs.

@yhmtsai
Copy link
Member

yhmtsai commented Sep 12, 2019

For Cuda test, I think comparing CUDA version and reference is okay for testing.
Google tests seems to work with *.cu (exception_helper.cu and executor.cu).
Add a __global__ function to call __device__ finite() in a cuda test file and compare its result and reference result.

@thoasm
Copy link
Member Author

thoasm commented Sep 12, 2019

@yhmtsai I added a CUDA test now.
For some reason, I thought it would not be possible that way, but I should have checked.
Thanks for pointing that out.

@yhmtsai
Copy link
Member

yhmtsai commented Sep 12, 2019

I got this error message with clean install.

ginkgo/cuda/test/base/math.cu(66): error: calling a constexpr __host__ function("isfinite") from a __global__ function("test_real_isfinite") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
          detected during instantiation of "__nv_bool <unnamed>::IsFinite::test_real_isfinite_kernel<T>() [with T=float]" 
(124)

It seems to use the __host__ function not __device__.

cuda/test/base/math.cu Outdated Show resolved Hide resolved
cuda/test/base/math.cu Outdated Show resolved Hide resolved
cuda/test/base/math.cu Outdated Show resolved Hide resolved
@thoasm
Copy link
Member Author

thoasm commented Sep 12, 2019

@yhmtsai What compiler are you using? I had the same issue for some combination of compilers, which is why the the isfinite has quite a few #if defined(...) ....

@yhmtsai
Copy link
Member

yhmtsai commented Sep 12, 2019

I use GCC 5.4 and NVCC 9.2

@thoasm thoasm added 1:ST:WIP This PR is a work in progress. Not ready for review. and removed 1:ST:ready-for-review This PR is ready for review labels Sep 12, 2019
@thoasm
Copy link
Member Author

thoasm commented Sep 12, 2019

@yhmtsai That is weird, I had pretty much the same thing happening with CLang, but never with GCC.
I will test that tomorrow thoroughly with the CI system (since it is too old to install it on my notebook).

Copy link
Member

@pratikvn pratikvn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some questions but otherwise looks good.

core/test/base/math.cpp Show resolved Hide resolved
cuda/test/base/math.cu Show resolved Hide resolved
cuda/test/base/math.cu Outdated Show resolved Hide resolved
@yhmtsai
Copy link
Member

yhmtsai commented Sep 13, 2019

In my environment (GCC 5.4 and NVCC 9.2), it uses std::isfinite function in the cuda code.
In (cuda-cmake)[https://github.com/ginkgo-project/ginkgo/blob/1b9b919d566cab75cee6291f3adf16cd922f06fb/cuda/CMakeLists.txt#L55-L62], we add --expt-relaxed-constexpr, so the compiler does not complain it in par-ilu.

By adding the similar settings in the create_test.cmake, it works in my environment

if(NOT CMAKE_CUDA_COMPILER_VERSION MATCHES "9.0")
    # remove false positive CUDA warnings when calling one<T>() and zero<T>()
    target_compile_options("${TEST_TARGET_NAME}"
        PRIVATE
            $<$<COMPILE_LANGUAGE:CUDA>:--expt-relaxed-constexpr>)
    endif()

However, I do not know why CI system does not face this problem.

@yhmtsai
Copy link
Member

yhmtsai commented Sep 13, 2019

I would like to add the following to test the property of inf

// The followings are true
isfinite(inf - inf) // nan
isfinite(inf/inf) // nan
isfinite(inf * 2) // inf
isfinite(1.0/0.0) // inf
isfinite(0.0/0.0) // nan

@thoasm
Copy link
Member Author

thoasm commented Sep 17, 2019

@yhmtsai could you try the current state again on your laptop at some point again? I changed a lot, and it would be nice if it would work in the current state.
However, if it does not, can you paste in the error that you get? I would assume it is a similar one I got with clang, but I would have to read it to be sure.

For the --expt-relaxed-constexpr option: I am not a big fan of running host code on GPUs if we can prevent it. Host code might be optimized for CPU and might run bad on the GPU, in the worst case, it might result in Undefined Behavior or wrong results. Maybe, we can add it to the special case we have currently with CLang, although, I agree, that is not a very nice solution.

@yhmtsai
Copy link
Member

yhmtsai commented Sep 17, 2019

@thoasm it does not work in my environment.

GCC configuration

Using built-in specs.
COLLECT_GCC=/home/u/mike/gcc-5.4/bin/gcc
COLLECT_LTO_WRAPPER=/home/u/mike/gcc-5.4/libexec/gcc/x86_64-unknown-linux-gnu/5.4.0/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ../gcc-5.4.0/configure --prefix=/home/u/mike/gcc-5.4 --enable-languages=c,c++,fortran --disable-multilib
Thread model: posix
gcc version 5.4.0 (GCC) 
The error message

[ 51%] Linking CXX executable math
[ 51%] Linking CXX executable types
/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(64): error: calling a constexpr __host__ function("isfinite") from a __global__ function("test_real_isfinite") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
          detected during instantiation of "__nv_bool ::IsFinite::test_real_isfinite_kernel() [with T=float]" 
(127): here

/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(64): error: calling a constexpr host function("isfinite") from a global function("test_real_isfinite") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
detected during instantiation of "__nv_bool ::IsFinite::test_real_isfinite_kernel() [with T=float]"
(127): here

/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(65): error: calling a constexpr host function("isfinite") from a global function("test_real_isfinite") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
detected during instantiation of "__nv_bool ::IsFinite::test_real_isfinite_kernel() [with T=float]"
(127): here

/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(65): error: calling a constexpr host function("isfinite") from a global function("test_real_isfinite") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
detected during instantiation of "__nv_bool ::IsFinite::test_real_isfinite_kernel() [with T=float]"
(127): here

/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(66): error: calling a constexpr host function("isfinite") from a global function("test_real_isfinite") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
detected during instantiation of "__nv_bool ::IsFinite::test_real_isfinite_kernel() [with T=float]"
(127): here

/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(63): error: calling a constexpr host function("isfinite") from a global function("test_real_isfinite") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
detected during:
instantiation of "void ::test_real_isfinite(__nv_bool *) [with T=float]"
(108): here
instantiation of "__nv_bool ::IsFinite::test_real_isfinite_kernel() [with T=float]"
(127): here

/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(63): error: calling a constexpr host function("isfinite") from a global function("test_real_isfinite") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
detected during:
instantiation of "void ::test_real_isfinite(__nv_bool *) [with T=float]"
(108): here
instantiation of "__nv_bool ::IsFinite::test_real_isfinite_kernel() [with T=float]"
(127): here

/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(63): error: calling a constexpr host function("isfinite") from a global function("test_real_isfinite") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
detected during:
instantiation of "void ::test_real_isfinite(__nv_bool *) [with T=float]"
(108): here
instantiation of "__nv_bool ::IsFinite::test_real_isfinite_kernel() [with T=float]"
(127): here

/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(66): error: calling a constexpr host function("isfinite") from a global function("test_real_isfinite") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
detected during:
instantiation of "void ::test_real_isfinite(__nv_bool *) [with T=float]"
(108): here
instantiation of "__nv_bool ::IsFinite::test_real_isfinite_kernel() [with T=float]"
(127): here

[ 51%] Linking CXX executable dim
/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(67): error: calling a constexpr host function("isfinite") from a global function("test_real_isfinite") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
detected during:
instantiation of "void ::test_real_isfinite(__nv_bool *) [with T=float]"
(108): here
instantiation of "__nv_bool ::IsFinite::test_real_isfinite_kernel() [with T=float]"
(127): here

/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(67): error: calling a constexpr host function("isfinite") from a global function("test_real_isfinite") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
detected during:
instantiation of "void ::test_real_isfinite(__nv_bool *) [with T=float]"
(108): here
instantiation of "__nv_bool ::IsFinite::test_real_isfinite_kernel() [with T=float]"
(127): here

/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(63): error: calling a constexpr host function("isfinite") from a global function("test_real_isfinite") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
detected during:
instantiation of "void ::test_real_isfinite(__nv_bool *) [with T=double]"
(108): here
instantiation of "__nv_bool ::IsFinite::test_real_isfinite_kernel() [with T=double]"
(130): here

/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(63): error: calling a constexpr host function("isfinite") from a global function("test_real_isfinite") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
detected during:
instantiation of "void ::test_real_isfinite(__nv_bool *) [with T=double]"
(108): here
instantiation of "__nv_bool ::IsFinite::test_real_isfinite_kernel() [with T=double]"
(130): here

/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(63): error: calling a constexpr host function("isfinite") from a global function("test_real_isfinite") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
detected during:
instantiation of "void ::test_real_isfinite(__nv_bool *) [with T=double]"
(108): here
instantiation of "__nv_bool ::IsFinite::test_real_isfinite_kernel() [with T=double]"
(130): here

/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(66): error: calling a constexpr host function("isfinite") from a global function("test_real_isfinite") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
detected during:
instantiation of "void ::test_real_isfinite(__nv_bool *) [with T=double]"
(108): here
instantiation of "__nv_bool ::IsFinite::test_real_isfinite_kernel() [with T=double]"
(130): here

/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(67): error: calling a constexpr host function("isfinite") from a global function("test_real_isfinite") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
detected during:
instantiation of "void ::test_real_isfinite(__nv_bool *) [with T=double]"
(108): here
instantiation of "__nv_bool ::IsFinite::test_real_isfinite_kernel() [with T=double]"
(130): here

/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(67): error: calling a constexpr host function("isfinite") from a global function("test_real_isfinite") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
detected during:
instantiation of "void ::test_real_isfinite(__nv_bool *) [with T=double]"
(108): here
instantiation of "__nv_bool ::IsFinite::test_real_isfinite_kernel() [with T=double]"
(130): here

/home/u/mike/kit/review/ginkgo/include/ginkgo/core/base/math.hpp(546): warning: calling a constexpr host function("isfinite") from a host device function("isfinite") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
detected during:
instantiation of "gko::xstd::enable_if_t<gko::detail::is_complex_impl::value, __nv_bool> gko::isfinite(const T &) [with T=gko::kernels::cuda::cuda_type<thrust::complex>]"
/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(84): here
instantiation of "void ::test_complex_isfinite(__nv_bool *) [with ComplexType=thrust::complex]"
/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(117): here
instantiation of "__nv_bool ::IsFinite::test_complex_isfinite_kernel() [with T=thrust::complex]"
/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(135): here

/home/u/mike/kit/review/ginkgo/include/ginkgo/core/base/math.hpp(546): warning: calling a constexpr host function("isfinite") from a host device function("isfinite") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
detected during:
instantiation of "gko::xstd::enable_if_t<gko::detail::is_complex_impl::value, __nv_bool> gko::isfinite(const T &) [with T=gko::kernels::cuda::cuda_type<thrust::complex>]"
/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(84): here
instantiation of "void ::test_complex_isfinite(__nv_bool *) [with ComplexType=thrust::complex]"
/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(117): here
instantiation of "__nv_bool ::IsFinite::test_complex_isfinite_kernel() [with T=thrust::complex]"
/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(135): here

/home/u/mike/kit/review/ginkgo/include/ginkgo/core/base/math.hpp(546): warning: calling a constexpr host function("isfinite") from a host device function("isfinite") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
detected during:
instantiation of "gko::xstd::enable_if_t<gko::detail::is_complex_impl::value, __nv_bool> gko::isfinite(const T &) [with T=gko::kernels::cuda::cuda_type<thrust::complex>]"
/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(84): here
instantiation of "void ::test_complex_isfinite(__nv_bool *) [with ComplexType=thrust::complex]"
/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(117): here
instantiation of "__nv_bool ::IsFinite::test_complex_isfinite_kernel() [with T=thrust::complex]"
/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(141): here

/home/u/mike/kit/review/ginkgo/include/ginkgo/core/base/math.hpp(546): warning: calling a constexpr host function("isfinite") from a host device function("isfinite") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
detected during:
instantiation of "gko::xstd::enable_if_t<gko::detail::is_complex_impl::value, __nv_bool> gko::isfinite(const T &) [with T=gko::kernels::cuda::cuda_type<thrust::complex>]"
/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(84): here
instantiation of "void ::test_complex_isfinite(__nv_bool *) [with ComplexType=thrust::complex]"
/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(117): here
instantiation of "__nv_bool ::IsFinite::test_complex_isfinite_kernel() [with T=thrust::complex]"
/home/u/mike/kit/review/ginkgo/cuda/test/base/math.cu(141): here

17 errors detected in the compilation of "/tmp/tmpxft_000047a0_00000000-6_math.cpp1.ii".
cuda/test/base/CMakeFiles/cuda_test_base_math.dir/build.make:62: recipe for target 'cuda/test/base/CMakeFiles/cuda_test_base_math.dir/math.cu.o' failed
make[2]: *** [cuda/test/base/CMakeFiles/cuda_test_base_math.dir/math.cu.o] Error 1
CMakeFiles/Makefile2:1330: recipe for target 'cuda/test/base/CMakeFiles/cuda_test_base_math.dir/all' failed
make[1]: *** [cuda/test/base/CMakeFiles/cuda_test_base_math.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 51%] Built target core_test_base_math

@thoasm
Copy link
Member Author

thoasm commented Sep 18, 2019

@yhmtsai I was able to simplify the whole mess with the different isfinite implementations to a point where I am happy with the result. I think the current state should be a lot more robust to different CUDA and compiler versions because it does not depend on them anymore.

I would appreciate it if you could test it again on your system (hopefully the last time).

@thoasm thoasm added 1:ST:do-not-merge Please do not merge PR this yet. 1:ST:ready-for-review This PR is ready for review and removed 1:ST:WIP This PR is a work in progress. Not ready for review. labels Sep 18, 2019
@thoasm thoasm added 1:ST:WIP This PR is a work in progress. Not ready for review. 1:ST:ready-for-review This PR is ready for review and removed 1:ST:ready-for-review This PR is ready for review 1:ST:WIP This PR is a work in progress. Not ready for review. labels Sep 18, 2019
@thoasm
Copy link
Member Author

thoasm commented Sep 19, 2019

Finally, everything seems to compile and work.
@yhmtsai I know I annoy you with this, but could you please try it on your system again, please? In theory, nothing should change for you since you are not using CLang, but at this point, I do not trust my theory.

@yhmtsai
Copy link
Member

yhmtsai commented Sep 20, 2019

@thoasm Sure. It works well in my environment

cuda/base/math.hpp Show resolved Hide resolved
Copy link
Member

@tcojean tcojean left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Some minor comments.

cuda/base/math.hpp Show resolved Hide resolved
cuda/base/math.hpp Outdated Show resolved Hide resolved
Copy link
Member

@yhmtsai yhmtsai left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM.

cuda/base/math.hpp Outdated Show resolved Hide resolved
cuda/base/math.hpp Outdated Show resolved Hide resolved
Thomas Grützmacher added 11 commits September 23, 2019 12:18
Both the implementation and the documentation of the self-written
`isfinite` was wrong and is now fixed.
Also added a test to check the implementation of `isfinite`.
Also: test kernels are now called with complex types instead of the
real-type.
Reimplementation was necessary since wrong results got produced with
some compilers in release mode.
Also, moved all the CUDA kernels in the cuda/base/math.hpp file
instead of leaving them in the public header.
Simplified the dependency of `isfinite` to the CUDA version in both
core and cuda and removed all self-implemented versions of it.
This should both improve readability as well as maintanability.
It was necessary to readd the custom `isfinite` kernel since clang
always replaced the CUDA math function with their builtin version.
Another try to make the clang compiler accept the custom `isfinite`
function by also providing a complex version (calling the regular one).
This only happens for clang and toolkit < 9.2.
@thoasm thoasm merged commit 26b6c44 into develop Sep 23, 2019
@thoasm thoasm added 1:ST:ready-to-merge This PR is ready to merge. and removed 1:ST:do-not-merge Please do not merge PR this yet. 1:ST:ready-for-review This PR is ready for review labels Sep 23, 2019
@thoasm thoasm deleted the fix_isfinite branch September 23, 2019 14:48
tcojean added a commit that referenced this pull request Oct 20, 2019
The Ginkgo team is proud to announce the new minor release of Ginkgo version
1.1.0. This release brings several performance improvements, adds Windows support, 
adds support for factorizations inside Ginkgo and a new ILU preconditioner
based on ParILU algorithm, among other things. For detailed information, check the respective issue.

Supported systems and requirements:
+ For all platforms, cmake 3.9+
+ Linux and MacOS
  + gcc: 5.3+, 6.3+, 7.3+, 8.1+
  + clang: 3.9+
  + Intel compiler: 2017+
  + Apple LLVM: 8.0+
  + CUDA module: CUDA 9.0+
+ Windows
  + MinGW and CygWin: gcc 5.3+, 6.3+, 7.3+, 8.1+
  + Microsoft Visual Studio: VS 2017 15.7+
  + CUDA module: CUDA 9.0+, Microsoft Visual Studio
  + OpenMP module: MinGW or CygWin.


The current known issues can be found in the [known issues
page](https://github.com/ginkgo-project/ginkgo/wiki/Known-Issues).


Additions:
+ Upper and lower triangular solvers ([#327](#327), [#336](#336), [#341](#341), [#342](#342)) 
+ New factorization support in Ginkgo, and addition of the ParILU
  algorithm ([#305](#305), [#315](#315), [#319](#319), [#324](#324))
+ New ILU preconditioner ([#348](#348), [#353](#353))
+ Windows MinGW and Cygwin support ([#347](#347))
+ Windows Visual studio support ([#351](#351))
+ New example showing how to use ParILU as a preconditioner ([#358](#358))
+ New example on using loggers for debugging ([#360](#360))
+ Add two new 9pt and 27pt stencil examples ([#300](#300), [#306](#306))
+ Allow benchmarking CuSPARSE spmv formats through Ginkgo's benchmarks ([#303](#303))
+ New benchmark for sparse matrix format conversions ([#312](#312))
+ Add conversions between CSR and Hybrid formats ([#302](#302), [#310](#310))
+ Support for sorting rows in the CSR format by column idices ([#322](#322))
+ Addition of a CUDA COO SpMM kernel for improved performance ([#345](#345))
+ Addition of a LinOp to handle perturbations of the form (identity + scalar *
  basis * projector) ([#334](#334))
+ New sparsity matrix representation format with Reference and OpenMP
  kernels ([#349](#349), [#350](#350))

Fixes:
+ Accelerate GMRES solver for CUDA executor ([#363](#363))
+ Fix BiCGSTAB solver convergence ([#359](#359))
+ Fix CGS logging by reporting the residual for every sub iteration ([#328](#328))
+ Fix CSR,Dense->Sellp conversion's memory access violation ([#295](#295))
+ Accelerate CSR->Ell,Hybrid conversions on CUDA ([#313](#313), [#318](#318))
+ Fixed slowdown of COO SpMV on OpenMP ([#340](#340))
+ Fix gcc 6.4.0 internal compiler error ([#316](#316))
+ Fix compilation issue on Apple clang++ 10 ([#322](#322))
+ Make Ginkgo able to compile on Intel 2017 and above ([#337](#337))
+ Make the benchmarks spmv/solver use the same matrix formats ([#366](#366))
+ Fix self-written isfinite function ([#348](#348))
+ Fix Jacobi issues shown by cuda-memcheck

Tools and ecosystem:
+ Multiple improvements to the CI system and tools ([#296](#296), [#311](#311), [#365](#365))
+ Multiple improvements to the Ginkgo containers ([#328](#328), [#361](#361))
+ Add sonarqube analysis to Ginkgo ([#304](#304), [#308](#308), [#309](#309))
+ Add clang-tidy and iwyu support to Ginkgo ([#298](#298))
+ Improve Ginkgo's support of xSDK M12 policy by adding the `TPL_` arguments
  to CMake ([#300](#300))
+ Add support for the xSDK R7 policy ([#325](#325))
+ Fix examples in html documentation ([#367](#367))
tcojean added a commit that referenced this pull request Oct 21, 2019
The Ginkgo team is proud to announce the new minor release of Ginkgo version
1.1.0. This release brings several performance improvements, adds Windows support,
adds support for factorizations inside Ginkgo and a new ILU preconditioner
based on ParILU algorithm, among other things. For detailed information, check the respective issue.

Supported systems and requirements:
+ For all platforms, cmake 3.9+
+ Linux and MacOS
  + gcc: 5.3+, 6.3+, 7.3+, 8.1+
  + clang: 3.9+
  + Intel compiler: 2017+
  + Apple LLVM: 8.0+
  + CUDA module: CUDA 9.0+
+ Windows
  + MinGW and Cygwin: gcc 5.3+, 6.3+, 7.3+, 8.1+
  + Microsoft Visual Studio: VS 2017 15.7+
  + CUDA module: CUDA 9.0+, Microsoft Visual Studio
  + OpenMP module: MinGW or Cygwin.


The current known issues can be found in the [known issues
page](https://github.com/ginkgo-project/ginkgo/wiki/Known-Issues).


### Additions
+ Upper and lower triangular solvers ([#327](#327), [#336](#336), [#341](#341), [#342](#342)) 
+ New factorization support in Ginkgo, and addition of the ParILU
  algorithm ([#305](#305), [#315](#315), [#319](#319), [#324](#324))
+ New ILU preconditioner ([#348](#348), [#353](#353))
+ Windows MinGW and Cygwin support ([#347](#347))
+ Windows Visual Studio support ([#351](#351))
+ New example showing how to use ParILU as a preconditioner ([#358](#358))
+ New example on using loggers for debugging ([#360](#360))
+ Add two new 9pt and 27pt stencil examples ([#300](#300), [#306](#306))
+ Allow benchmarking CuSPARSE spmv formats through Ginkgo's benchmarks ([#303](#303))
+ New benchmark for sparse matrix format conversions ([#312](#312))
+ Add conversions between CSR and Hybrid formats ([#302](#302), [#310](#310))
+ Support for sorting rows in the CSR format by column idices ([#322](#322))
+ Addition of a CUDA COO SpMM kernel for improved performance ([#345](#345))
+ Addition of a LinOp to handle perturbations of the form (identity + scalar *
  basis * projector) ([#334](#334))
+ New sparsity matrix representation format with Reference and OpenMP
  kernels ([#349](#349), [#350](#350))

### Fixes
+ Accelerate GMRES solver for CUDA executor ([#363](#363))
+ Fix BiCGSTAB solver convergence ([#359](#359))
+ Fix CGS logging by reporting the residual for every sub iteration ([#328](#328))
+ Fix CSR,Dense->Sellp conversion's memory access violation ([#295](#295))
+ Accelerate CSR->Ell,Hybrid conversions on CUDA ([#313](#313), [#318](#318))
+ Fixed slowdown of COO SpMV on OpenMP ([#340](#340))
+ Fix gcc 6.4.0 internal compiler error ([#316](#316))
+ Fix compilation issue on Apple clang++ 10 ([#322](#322))
+ Make Ginkgo able to compile on Intel 2017 and above ([#337](#337))
+ Make the benchmarks spmv/solver use the same matrix formats ([#366](#366))
+ Fix self-written isfinite function ([#348](#348))
+ Fix Jacobi issues shown by cuda-memcheck

### Tools and ecosystem improvements
+ Multiple improvements to the CI system and tools ([#296](#296), [#311](#311), [#365](#365))
+ Multiple improvements to the Ginkgo containers ([#328](#328), [#361](#361))
+ Add sonarqube analysis to Ginkgo ([#304](#304), [#308](#308), [#309](#309))
+ Add clang-tidy and iwyu support to Ginkgo ([#298](#298))
+ Improve Ginkgo's support of xSDK M12 policy by adding the `TPL_` arguments
  to CMake ([#300](#300))
+ Add support for the xSDK R7 policy ([#325](#325))
+ Fix examples in html documentation ([#367](#367))


Related PR: #370
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
1:ST:ready-to-merge This PR is ready to merge. is:bug Something looks wrong. mod:core This is related to the core module.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants