Closed hashmenow closed 7 years ago
Hi Muku,
This is the same bug in the Intel compilers deducing template parameters from arguments to functions. This compiler bug has been well known to effect Elemental for some time. I'm sure that this fact isn't comforting, but it is something that needs to be fixed on Intel's end rather than in Elemental (it would be tremendously painful/silly to work around it in what is likely thousands of lines of effected code).
Update: This issue was specific to Intel 16.0.2 and is resolved in Intel 17.0.0.
I filed an Intel Premier Support ticket against the Intel 16.0.2 C++ compiler based upon the failure I observed when trying to compiler src/blas_like/level1-C.cpp
.
Note that the error I reported appears to be different from yours, although they may have the same root cause.
The command I used to generate those files is below. GitHub will not allow me to update the previous comment to include them.
icpc -g -O3 -qopenmp -xHOST -std=c++11 -c level1-C.cpp.i -o level1-C.cpp.o >& level1-C.cpp.log
Also, I configured as follows:
cd build-intel16 && rm -rf * ; cmake .. \
-DCMAKE_C_COMPILER=/opt/mpich/dev/intel/default/bin/mpicc \
-DCMAKE_CXX_COMPILER=/opt/mpich/dev/intel/default/bin/mpicxx \
-DCMAKE_Fortran_COMPILER=/opt/mpich/dev/intel/default/bin/mpif90 \
-DMPI_C_COMPILER=/opt/mpich/dev/intel/default/bin/mpicc \
-DMPI_CXX_COMPILER=/opt/mpich/dev/intel/default/bin/mpicxx \
-DMPI_Fortran_COMPILER=/opt/mpich/dev/intel/default/bin/mpif90 \
-DMATH_LIBS="-mkl" -DCMAKE_BUILD_TYPE=HybridRelease \
-DCXX_FLAGS="-O3 -qopenmp -xHOST" \
-DCMAKE_INSTALL_PREFIX=$HOME/Work/Elemental/install-intel16
@jeffhammond The log file you posted seems to be a separate compilation issue related to std::function
. This also looks to be an icpc
issue, but I haven't had a chance to investigate it closely yet.
@poulson
Thank you, I wanted to address those issues to you so that we could put a ticket to Intel once you reproduce it on your end.
@jeffhammond Thank you for reporting it under Intel 16.0.2. We strongly hope that these patches are applied in the future updates/releases as well. As i mentioned earlier, each Intel compiler version (15,16) combined with different GNU headers (4.7.3, 4.9.1, 5.3.0) produced different errors. However, it is much greatly appreciated if Intel 16.0.2 can make it work flawless.
For the record, here is my cmake build command.
cmake .. -G"Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/home/mselvam/Elemental/intel_debug -DCMAKE_CXX_COMPILER=/opt/intel/compilers_and_libraries_2016.2.181/linux/bin/intel64/icpc -DCMAKE_C_COMPILER=/opt/intel/compilers_and_libraries_2016.2.181/linux/bin/intel64/icc -DCMAKE_Fortran_COMPILER=/opt/intel/compilers_and_libraries_2016.2.181/linux/bin/intel64/ifort -DCMAKE_CXX_FLAGS="-DMKL_ILP64 -qopenmp -mkl=parallel " -DCMAKE_C_FLAGS="-DMKL_ILP64 -qopenmp -mkl=parallel " -DMPI_CXX_COMPILER=/opt/intel/compilers_and_libraries_2016.1.150/linux/mpi/intel64/bin/mpiicpc -DMPI_C_COMPILER=/opt/intel/compilers_and_libraries_2016.1.150/linux/mpi/intel64/bin/mpiicc -DMPI_Fortran_COMPILER=/opt/intel/compilers_and_libraries_2016.1.150/linux/mpi/intel64/bin/mpiifort -DEL_HYBRID=TRUE -DEL_DISABLE_PARMETIS=TRUE -DCMAKE_BUILD_TYPE=Debug -DEL_USE_64BIT_INTS=ON -DEL_USE_64BIT_BLAS_INTS=ON -DINSTALL_PYTHON_PACKAGE=OFF -DMATH_LIBS="-lmkl_scalapack_ilp64 -lmkl_blacs_intelmpi_ilp64 -lpthread -lm -ldl"
@poulson https://github.com/poulson Yeah I know it's not the same bug but I reported the first bug I saw using my laptop. I have to switch machines to reproduce Linux issues. Sorry. I was hoping I could reproduce without ssh but it seems not.
Intel 17 compilers were released recently. I tried my build options again and it fails due to simple errors in PMRRR. I assume these are easily fixed, but I am surprised that no one has seen them before.
Do I need to do a clean checkout to update the subprojects? I see there are two copies of the source file, with small differences.
$ find .. -name rrr.c
../external/pmrrr/src/core/rrr.c
../external/pmrrr/src/rrr.c
$ make -j16
[ 0%] Built target El_config
[ 1%] Built target project_parmetis
[ 3%] Built target ElSuiteSparse
[ 4%] Built target project_scalapack
Linking C shared library libpmrrr.so
CMakeFiles/pmrrr.dir/src/core/queue.c.o: In function `PMR_create_empty_queue':
queue.c:(.text+0x0): multiple definition of `PMR_create_empty_queue'
CMakeFiles/pmrrr.dir/src/queue.c.o:queue.c:(.text+0x0): first defined here
CMakeFiles/pmrrr.dir/src/core/queue.c.o: In function `PMR_destroy_queue':
queue.c:(.text+0x50): multiple definition of `PMR_destroy_queue'
CMakeFiles/pmrrr.dir/src/queue.c.o:queue.c:(.text+0x80): first defined here
CMakeFiles/pmrrr.dir/src/core/queue.c.o: In function `PMR_insert_task_at_front':
queue.c:(.text+0x80): multiple definition of `PMR_insert_task_at_front'
CMakeFiles/pmrrr.dir/src/queue.c.o:queue.c:(.text+0xa0): first defined here
CMakeFiles/pmrrr.dir/src/core/queue.c.o: In function `PMR_insert_task_at_back':
queue.c:(.text+0xe0): multiple definition of `PMR_insert_task_at_back'
CMakeFiles/pmrrr.dir/src/queue.c.o:queue.c:(.text+0x130): first defined here
CMakeFiles/pmrrr.dir/src/core/queue.c.o: In function `PMR_remove_task_at_front':
queue.c:(.text+0x130): multiple definition of `PMR_remove_task_at_front'
CMakeFiles/pmrrr.dir/src/queue.c.o:queue.c:(.text+0x1d0): first defined here
CMakeFiles/pmrrr.dir/src/core/queue.c.o: In function `PMR_remove_task_at_back':
queue.c:(.text+0x180): multiple definition of `PMR_remove_task_at_back'
CMakeFiles/pmrrr.dir/src/queue.c.o:queue.c:(.text+0x270): first defined here
CMakeFiles/pmrrr.dir/src/core/queue.c.o: In function `PMR_get_num_tasks':
queue.c:(.text+0x1d0): multiple definition of `PMR_get_num_tasks'
CMakeFiles/pmrrr.dir/src/queue.c.o:queue.c:(.text+0x310): first defined here
CMakeFiles/pmrrr.dir/src/counter.c.o: In function `PMR_create_counter':
counter.c:(.text+0x0): multiple definition of `PMR_create_counter'
CMakeFiles/pmrrr.dir/src/core/counter.c.o:counter.c:(.text+0x0): first defined here
CMakeFiles/pmrrr.dir/src/counter.c.o: In function `PMR_destroy_counter':
counter.c:(.text+0x50): multiple definition of `PMR_destroy_counter'
CMakeFiles/pmrrr.dir/src/core/counter.c.o:counter.c:(.text+0x30): first defined here
CMakeFiles/pmrrr.dir/src/counter.c.o: In function `PMR_get_counter_value':
counter.c:(.text+0x70): multiple definition of `PMR_get_counter_value'
CMakeFiles/pmrrr.dir/src/core/counter.c.o:counter.c:(.text+0x60): first defined here
CMakeFiles/pmrrr.dir/src/counter.c.o: In function `PMR_decrement_counter':
counter.c:(.text+0xe0): multiple definition of `PMR_decrement_counter'
CMakeFiles/pmrrr.dir/src/core/counter.c.o:counter.c:(.text+0xb0): first defined here
CMakeFiles/pmrrr.dir/src/counter.c.o: In function `PMR_increment_counter':
counter.c:(.text+0x160): multiple definition of `PMR_increment_counter'
CMakeFiles/pmrrr.dir/src/core/counter.c.o:counter.c:(.text+0xe0): first defined here
CMakeFiles/pmrrr.dir/src/tasks.c.o: In function `PMR_create_s_task':
tasks.c:(.text+0x0): multiple definition of `PMR_create_s_task'
CMakeFiles/pmrrr.dir/src/core/tasks.c.o:tasks.c:(.text+0x0): first defined here
CMakeFiles/pmrrr.dir/src/tasks.c.o: In function `PMR_create_c_task':
tasks.c:(.text+0xf0): multiple definition of `PMR_create_c_task'
CMakeFiles/pmrrr.dir/src/core/tasks.c.o:tasks.c:(.text+0xf0): first defined here
CMakeFiles/pmrrr.dir/src/tasks.c.o: In function `PMR_create_r_task':
tasks.c:(.text+0x200): multiple definition of `PMR_create_r_task'
CMakeFiles/pmrrr.dir/src/core/tasks.c.o:tasks.c:(.text+0x230): first defined here
CMakeFiles/pmrrr.dir/src/rrr.c.o: In function `PMR_create_rrr':
rrr.c:(.text+0x0): multiple definition of `PMR_create_rrr'
CMakeFiles/pmrrr.dir/src/core/rrr.c.o:rrr.c:(.text+0x0): first defined here
CMakeFiles/pmrrr.dir/src/rrr.c.o: In function `PMR_reset_rrr':
rrr.c:(.text+0xc0): multiple definition of `PMR_reset_rrr'
CMakeFiles/pmrrr.dir/src/core/rrr.c.o:rrr.c:(.text+0x90): first defined here
CMakeFiles/pmrrr.dir/src/rrr.c.o: In function `PMR_increment_rrr_dependencies':
rrr.c:(.text+0xf0): multiple definition of `PMR_increment_rrr_dependencies'
CMakeFiles/pmrrr.dir/src/core/rrr.c.o:rrr.c:(.text+0xc0): first defined here
CMakeFiles/pmrrr.dir/src/rrr.c.o: In function `PMR_set_parent_processed_flag':
rrr.c:(.text+0x170): multiple definition of `PMR_set_parent_processed_flag'
CMakeFiles/pmrrr.dir/src/core/rrr.c.o:rrr.c:(.text+0x110): first defined here
CMakeFiles/pmrrr.dir/src/rrr.c.o: In function `PMR_set_copied_parent_rrr_flag':
rrr.c:(.text+0x1e0): multiple definition of `PMR_set_copied_parent_rrr_flag'
CMakeFiles/pmrrr.dir/src/core/rrr.c.o:rrr.c:(.text+0x140): first defined here
CMakeFiles/pmrrr.dir/src/rrr.c.o: In function `PMR_try_destroy_rrr':
rrr.c:(.text+0x260): multiple definition of `PMR_try_destroy_rrr'
CMakeFiles/pmrrr.dir/src/core/rrr.c.o:rrr.c:(.text+0x170): first defined here
make[2]: *** [external/pmrrr/libpmrrr.so] Error 1
make[1]: *** [external/pmrrr/CMakeFiles/pmrrr.dir/all] Error 2
make: *** [all] Error 2
I did a clean checkout and can reproduce the error.
@mukunthh Do you actually need Quad
support?
@poulson What is the CMake option to disable
(I found EL_HAVE_QUAD
?-DEL_DISABLE_QUAD=TRUE
on http://libelemental.org/documentation/dev/build.html#id6)
$ make
[ 0%] Built target El_config
[ 9%] Built target pmrrr
[ 11%] Built target ElSuiteSparse
[ 11%] Building CXX object CMakeFiles/El.dir/src/blas_like/level3-C.cpp.o
In file included from /home/jrhammon/Work/Elemental/new/include/El/core.hpp(259),
from /home/jrhammon/Work/Elemental/new/include/El-lite.hpp(13),
from /home/jrhammon/Work/Elemental/new/src/blas_like/level3-C.cpp(9):
/home/jrhammon/Work/Elemental/new/include/El/core/random/decl.hpp(90): error: no instance of overloaded function "El::SampleNormal" matches the specified type
Quad SampleNormal( const Quad& mean, const Quad& stddev );
^
In file included from /home/jrhammon/Work/Elemental/new/include/El/core.hpp(259),
from /home/jrhammon/Work/Elemental/new/include/El-lite.hpp(13),
from /home/jrhammon/Work/Elemental/new/src/blas_like/level3-C.cpp(9):
/home/jrhammon/Work/Elemental/new/include/El/core/random/decl.hpp(92): error: no instance of overloaded function "El::SampleNormal" matches the specified type
Complex<Quad> SampleNormal( const Complex<Quad>& mean, const Quad& stddev );
^
compilation aborted for /home/jrhammon/Work/Elemental/new/src/blas_like/level3-C.cpp (code 2)
make[2]: *** [CMakeFiles/El.dir/src/blas_like/level3-C.cpp.o] Error 2
make[1]: *** [CMakeFiles/El.dir/all] Error 2
make: *** [all] Error 2
@jeffhammond Thank you, we don't need QUAD support now. However, I am unable to find the EL_DISABLE_QUAD in the latest cmakelists.txt
Disabling quadruple precision gets me farther.
@poulson Can you confirm this is a bug in Intel C++, i.e. the code is strictly ISO compliant?
$ make
[ 0%] Built target El_config
[ 2%] Built target ElSuiteSparse
[ 11%] Built target pmrrr
[ 11%] Building CXX object CMakeFiles/El.dir/src/blas_like/level2/ApplyGivensSequence.cpp.o
/home/jrhammon/Work/Elemental/new/src/blas_like/level2/ApplyGivensSequence.cpp(446): error: more than one instance of overloaded function "El::ApplyVariableLeft" matches the argument list:
function template "void El::ApplyVariableLeft(El::Int={long long}, const El::Base<F> &, const F &, El::Matrix<F> &, F &, const El::Base<F> &, const F &)"
function template "void El::ApplyVariableLeft(El::Int={long long}, const El::Base<F> &, const El::Base<F> &, El::Matrix<F> &, F &, const El::Base<F> &, const El::Base<F> &)"
argument types are: (El::Int, const float, const float, El::Matrix<float>, float, const Real, const Real)
ApplyVariableLeft
^
detected during instantiation of "void El::ApplyGivensSequence(El::LeftOrRightNS::LeftOrRight, El::GivensSequenceType, El::ForwardOrBackwardNS::ForwardOrBackward, const El::Matrix<El::Base<F>> &, const El::Matrix<El::Base<F>> &, El::Matrix<F> &) [with F=float]" at line 96 of "/home/jrhammon/Work/Elemental/new/include/El/macros/Instantiate.h"
/home/jrhammon/Work/Elemental/new/src/blas_like/level2/ApplyGivensSequence.cpp(454): error: more than one instance of overloaded function "El::ApplyVariableLeft" matches the argument list:
function template "void El::ApplyVariableLeft(El::Int={long long}, const El::Base<F> &, const F &, El::Matrix<F> &, F &, const El::Base<F> &, const F &)"
function template "void El::ApplyVariableLeft(El::Int={long long}, const El::Base<F> &, const El::Base<F> &, El::Matrix<F> &, F &, const El::Base<F> &, const El::Base<F> &)"
argument types are: (El::Int, const float, const float, El::Matrix<float>, float, const Real, const Real)
ApplyVariableLeft
^
detected during instantiation of "void El::ApplyGivensSequence(El::LeftOrRightNS::LeftOrRight, El::GivensSequenceType, El::ForwardOrBackwardNS::ForwardOrBackward, const El::Matrix<El::Base<F>> &, const El::Matrix<El::Base<F>> &, El::Matrix<F> &) [with F=float]" at line 96 of "/home/jrhammon/Work/Elemental/new/include/El/macros/Instantiate.h"
/home/jrhammon/Work/Elemental/new/src/blas_like/level2/ApplyGivensSequence.cpp(465): error: more than one instance of overloaded function "El::ApplyTopLeft" matches the argument list:
function template "void El::ApplyTopLeft(El::Int={long long}, const El::Base<F> &, const F &, El::Matrix<F> &, F &, const El::Base<F> &, const F &)"
function template "void El::ApplyTopLeft(El::Int={long long}, const El::Base<F> &, const El::Base<F> &, El::Matrix<F> &, F &, const El::Base<F> &, const El::Base<F> &)"
argument types are: (El::Int, const float, const float, El::Matrix<float>, float, const Real, const Real)
ApplyTopLeft
^
detected during instantiation of "void El::ApplyGivensSequence(El::LeftOrRightNS::LeftOrRight, El::GivensSequenceType, El::ForwardOrBackwardNS::ForwardOrBackward, const El::Matrix<El::Base<F>> &, const El::Matrix<El::Base<F>> &, El::Matrix<F> &) [with F=float]" at line 96 of "/home/jrhammon/Work/Elemental/new/include/El/macros/Instantiate.h"
/home/jrhammon/Work/Elemental/new/src/blas_like/level2/ApplyGivensSequence.cpp(473): error: more than one instance of overloaded function "El::ApplyTopLeft" matches the argument list:
function template "void El::ApplyTopLeft(El::Int={long long}, const El::Base<F> &, const F &, El::Matrix<F> &, F &, const El::Base<F> &, const F &)"
function template "void El::ApplyTopLeft(El::Int={long long}, const El::Base<F> &, const El::Base<F> &, El::Matrix<F> &, F &, const El::Base<F> &, const El::Base<F> &)"
argument types are: (El::Int, const float, const float, El::Matrix<float>, float, const Real, const Real)
ApplyTopLeft
^
detected during instantiation of "void El::ApplyGivensSequence(El::LeftOrRightNS::LeftOrRight, El::GivensSequenceType, El::ForwardOrBackwardNS::ForwardOrBackward, const El::Matrix<El::Base<F>> &, const El::Matrix<El::Base<F>> &, El::Matrix<F> &) [with F=float]" at line 96 of "/home/jrhammon/Work/Elemental/new/include/El/macros/Instantiate.h"
/home/jrhammon/Work/Elemental/new/src/blas_like/level2/ApplyGivensSequence.cpp(484): error: more than one instance of overloaded function "El::ApplyBottomLeft" matches the argument list:
function template "void El::ApplyBottomLeft(El::Int={long long}, const El::Base<F> &, const F &, El::Matrix<F> &, F &, const El::Base<F> &, const F &)"
function template "void El::ApplyBottomLeft(El::Int={long long}, const El::Base<F> &, const El::Base<F> &, El::Matrix<F> &, F &, const El::Base<F> &, const El::Base<F> &)"
argument types are: (El::Int, const float, const float, El::Matrix<float>, float, const Real, const Real)
ApplyBottomLeft
^
detected during instantiation of "void El::ApplyGivensSequence(El::LeftOrRightNS::LeftOrRight, El::GivensSequenceType, El::ForwardOrBackwardNS::ForwardOrBackward, const El::Matrix<El::Base<F>> &, const El::Matrix<El::Base<F>> &, El::Matrix<F> &) [with F=float]" at line 96 of "/home/jrhammon/Work/Elemental/new/include/El/macros/Instantiate.h"
/home/jrhammon/Work/Elemental/new/src/blas_like/level2/ApplyGivensSequence.cpp(492): error: more than one instance of overloaded function "El::ApplyBottomLeft" matches the argument list:
function template "void El::ApplyBottomLeft(El::Int={long long}, const El::Base<F> &, const F &, El::Matrix<F> &, F &, const El::Base<F> &, const F &)"
function template "void El::ApplyBottomLeft(El::Int={long long}, const El::Base<F> &, const El::Base<F> &, El::Matrix<F> &, F &, const El::Base<F> &, const El::Base<F> &)"
argument types are: (El::Int, const float, const float, El::Matrix<float>, float, const Real, const Real)
ApplyBottomLeft
^
detected during instantiation of "void El::ApplyGivensSequence(El::LeftOrRightNS::LeftOrRight, El::GivensSequenceType, El::ForwardOrBackwardNS::ForwardOrBackward, const El::Matrix<El::Base<F>> &, const El::Matrix<El::Base<F>> &, El::Matrix<F> &) [with F=float]" at line 96 of "/home/jrhammon/Work/Elemental/new/include/El/macros/Instantiate.h"
/home/jrhammon/Work/Elemental/new/src/blas_like/level2/ApplyGivensSequence.cpp(506): error: more than one instance of overloaded function "El::ApplyVariableRight" matches the argument list:
function template "void El::ApplyVariableRight(El::Int={long long}, const El::Base<F> &, const F &, El::Matrix<F> &, F &, const El::Base<F> &, const F &)"
function template "void El::ApplyVariableRight(El::Int={long long}, const El::Base<F> &, const El::Base<F> &, El::Matrix<F> &, F &, const El::Base<F> &, const El::Base<F> &)"
argument types are: (El::Int, const float, const float, El::Matrix<float>, float, const Real, const Real)
ApplyVariableRight
^
detected during instantiation of "void El::ApplyGivensSequence(El::LeftOrRightNS::LeftOrRight, El::GivensSequenceType, El::ForwardOrBackwardNS::ForwardOrBackward, const El::Matrix<El::Base<F>> &, const El::Matrix<El::Base<F>> &, El::Matrix<F> &) [with F=float]" at line 96 of "/home/jrhammon/Work/Elemental/new/include/El/macros/Instantiate.h"
/home/jrhammon/Work/Elemental/new/src/blas_like/level2/ApplyGivensSequence.cpp(514): error: more than one instance of overloaded function "El::ApplyVariableRight" matches the argument list:
function template "void El::ApplyVariableRight(El::Int={long long}, const El::Base<F> &, const F &, El::Matrix<F> &, F &, const El::Base<F> &, const F &)"
function template "void El::ApplyVariableRight(El::Int={long long}, const El::Base<F> &, const El::Base<F> &, El::Matrix<F> &, F &, const El::Base<F> &, const El::Base<F> &)"
argument types are: (El::Int, const float, const float, El::Matrix<float>, float, const Real, const Real)
ApplyVariableRight
^
detected during instantiation of "void El::ApplyGivensSequence(El::LeftOrRightNS::LeftOrRight, El::GivensSequenceType, El::ForwardOrBackwardNS::ForwardOrBackward, const El::Matrix<El::Base<F>> &, const El::Matrix<El::Base<F>> &, El::Matrix<F> &) [with F=float]" at line 96 of "/home/jrhammon/Work/Elemental/new/include/El/macros/Instantiate.h"
/home/jrhammon/Work/Elemental/new/src/blas_like/level2/ApplyGivensSequence.cpp(525): error: more than one instance of overloaded function "El::ApplyTopRight" matches the argument list:
function template "void El::ApplyTopRight(El::Int={long long}, const El::Base<F> &, const F &, El::Matrix<F> &, F &, const El::Base<F> &, const F &)"
function template "void El::ApplyTopRight(El::Int={long long}, const El::Base<F> &, const El::Base<F> &, El::Matrix<F> &, F &, const El::Base<F> &, const El::Base<F> &)"
argument types are: (El::Int, const float, const float, El::Matrix<float>, float, const Real, const Real)
ApplyTopRight
^
detected during instantiation of "void El::ApplyGivensSequence(El::LeftOrRightNS::LeftOrRight, El::GivensSequenceType, El::ForwardOrBackwardNS::ForwardOrBackward, const El::Matrix<El::Base<F>> &, const El::Matrix<El::Base<F>> &, El::Matrix<F> &) [with F=float]" at line 96 of "/home/jrhammon/Work/Elemental/new/include/El/macros/Instantiate.h"
/home/jrhammon/Work/Elemental/new/src/blas_like/level2/ApplyGivensSequence.cpp(533): error: more than one instance of overloaded function "El::ApplyTopRight" matches the argument list:
function template "void El::ApplyTopRight(El::Int={long long}, const El::Base<F> &, const F &, El::Matrix<F> &, F &, const El::Base<F> &, const F &)"
function template "void El::ApplyTopRight(El::Int={long long}, const El::Base<F> &, const El::Base<F> &, El::Matrix<F> &, F &, const El::Base<F> &, const El::Base<F> &)"
argument types are: (El::Int, const float, const float, El::Matrix<float>, float, const Real, const Real)
ApplyTopRight
^
detected during instantiation of "void El::ApplyGivensSequence(El::LeftOrRightNS::LeftOrRight, El::GivensSequenceType, El::ForwardOrBackwardNS::ForwardOrBackward, const El::Matrix<El::Base<F>> &, const El::Matrix<El::Base<F>> &, El::Matrix<F> &) [with F=float]" at line 96 of "/home/jrhammon/Work/Elemental/new/include/El/macros/Instantiate.h"
/home/jrhammon/Work/Elemental/new/src/blas_like/level2/ApplyGivensSequence.cpp(544): error: more than one instance of overloaded function "El::ApplyBottomRight" matches the argument list:
function template "void El::ApplyBottomRight(El::Int={long long}, const El::Base<F> &, const F &, El::Matrix<F> &, F &, const El::Base<F> &, const F &)"
function template "void El::ApplyBottomRight(El::Int={long long}, const El::Base<F> &, const El::Base<F> &, El::Matrix<F> &, F &, const El::Base<F> &, const El::Base<F> &)"
argument types are: (El::Int, const float, const float, El::Matrix<float>, float, const Real, const Real)
ApplyBottomRight
^
detected during instantiation of "void El::ApplyGivensSequence(El::LeftOrRightNS::LeftOrRight, El::GivensSequenceType, El::ForwardOrBackwardNS::ForwardOrBackward, const El::Matrix<El::Base<F>> &, const El::Matrix<El::Base<F>> &, El::Matrix<F> &) [with F=float]" at line 96 of "/home/jrhammon/Work/Elemental/new/include/El/macros/Instantiate.h"
/home/jrhammon/Work/Elemental/new/src/blas_like/level2/ApplyGivensSequence.cpp(552): error: more than one instance of overloaded function "El::ApplyBottomRight" matches the argument list:
function template "void El::ApplyBottomRight(El::Int={long long}, const El::Base<F> &, const F &, El::Matrix<F> &, F &, const El::Base<F> &, const F &)"
function template "void El::ApplyBottomRight(El::Int={long long}, const El::Base<F> &, const El::Base<F> &, El::Matrix<F> &, F &, const El::Base<F> &, const El::Base<F> &)"
argument types are: (El::Int, const float, const float, El::Matrix<float>, float, const Real, const Real)
ApplyBottomRight
^
detected during instantiation of "void El::ApplyGivensSequence(El::LeftOrRightNS::LeftOrRight, El::GivensSequenceType, El::ForwardOrBackwardNS::ForwardOrBackward, const El::Matrix<El::Base<F>> &, const El::Matrix<El::Base<F>> &, El::Matrix<F> &) [with F=float]" at line 96 of "/home/jrhammon/Work/Elemental/new/include/El/macros/Instantiate.h"
/home/jrhammon/Work/Elemental/new/src/blas_like/level2/ApplyGivensSequence.cpp(446): error: more than one instance of overloaded function "El::ApplyVariableLeft" matches the argument list:
function template "void El::ApplyVariableLeft(El::Int={long long}, const El::Base<F> &, const F &, El::Matrix<F> &, F &, const El::Base<F> &, const F &)"
function template "void El::ApplyVariableLeft(El::Int={long long}, const El::Base<F> &, const El::Base<F> &, El::Matrix<F> &, F &, const El::Base<F> &, const El::Base<F> &)"
argument types are: (El::Int, const double, const double, El::Matrix<double>, double, const Real, const Real)
ApplyVariableLeft
^
detected during instantiation of "void El::ApplyGivensSequence(El::LeftOrRightNS::LeftOrRight, El::GivensSequenceType, El::ForwardOrBackwardNS::ForwardOrBackward, const El::Matrix<El::Base<F>> &, const El::Matrix<El::Base<F>> &, El::Matrix<F> &) [with F=double]" at line 99 of "/home/jrhammon/Work/Elemental/new/include/El/macros/Instantiate.h"
/home/jrhammon/Work/Elemental/new/src/blas_like/level2/ApplyGivensSequence.cpp(454): error: more than one instance of overloaded function "El::ApplyVariableLeft" matches the argument list:
function template "void El::ApplyVariableLeft(El::Int={long long}, const El::Base<F> &, const F &, El::Matrix<F> &, F &, const El::Base<F> &, const F &)"
function template "void El::ApplyVariableLeft(El::Int={long long}, const El::Base<F> &, const El::Base<F> &, El::Matrix<F> &, F &, const El::Base<F> &, const El::Base<F> &)"
argument types are: (El::Int, const double, const double, El::Matrix<double>, double, const Real, const Real)
ApplyVariableLeft
^
detected during instantiation of "void El::ApplyGivensSequence(El::LeftOrRightNS::LeftOrRight, El::GivensSequenceType, El::ForwardOrBackwardNS::ForwardOrBackward, const El::Matrix<El::Base<F>> &, const El::Matrix<El::Base<F>> &, El::Matrix<F> &) [with F=double]" at line 99 of "/home/jrhammon/Work/Elemental/new/include/El/macros/Instantiate.h"
/home/jrhammon/Work/Elemental/new/src/blas_like/level2/ApplyGivensSequence.cpp(465): error: more than one instance of overloaded function "El::ApplyTopLeft" matches the argument list:
function template "void El::ApplyTopLeft(El::Int={long long}, const El::Base<F> &, const F &, El::Matrix<F> &, F &, const El::Base<F> &, const F &)"
function template "void El::ApplyTopLeft(El::Int={long long}, const El::Base<F> &, const El::Base<F> &, El::Matrix<F> &, F &, const El::Base<F> &, const El::Base<F> &)"
argument types are: (El::Int, const double, const double, El::Matrix<double>, double, const Real, const Real)
ApplyTopLeft
^
detected during instantiation of "void El::ApplyGivensSequence(El::LeftOrRightNS::LeftOrRight, El::GivensSequenceType, El::ForwardOrBackwardNS::ForwardOrBackward, const El::Matrix<El::Base<F>> &, const El::Matrix<El::Base<F>> &, El::Matrix<F> &) [with F=double]" at line 99 of "/home/jrhammon/Work/Elemental/new/include/El/macros/Instantiate.h"
/home/jrhammon/Work/Elemental/new/src/blas_like/level2/ApplyGivensSequence.cpp(473): error: more than one instance of overloaded function "El::ApplyTopLeft" matches the argument list:
function template "void El::ApplyTopLeft(El::Int={long long}, const El::Base<F> &, const F &, El::Matrix<F> &, F &, const El::Base<F> &, const F &)"
function template "void El::ApplyTopLeft(El::Int={long long}, const El::Base<F> &, const El::Base<F> &, El::Matrix<F> &, F &, const El::Base<F> &, const El::Base<F> &)"
argument types are: (El::Int, const double, const double, El::Matrix<double>, double, const Real, const Real)
ApplyTopLeft
^
detected during instantiation of "void El::ApplyGivensSequence(El::LeftOrRightNS::LeftOrRight, El::GivensSequenceType, El::ForwardOrBackwardNS::ForwardOrBackward, const El::Matrix<El::Base<F>> &, const El::Matrix<El::Base<F>> &, El::Matrix<F> &) [with F=double]" at line 99 of "/home/jrhammon/Work/Elemental/new/include/El/macros/Instantiate.h"
/home/jrhammon/Work/Elemental/new/src/blas_like/level2/ApplyGivensSequence.cpp(484): error: more than one instance of overloaded function "El::ApplyBottomLeft" matches the argument list:
function template "void El::ApplyBottomLeft(El::Int={long long}, const El::Base<F> &, const F &, El::Matrix<F> &, F &, const El::Base<F> &, const F &)"
function template "void El::ApplyBottomLeft(El::Int={long long}, const El::Base<F> &, const El::Base<F> &, El::Matrix<F> &, F &, const El::Base<F> &, const El::Base<F> &)"
argument types are: (El::Int, const double, const double, El::Matrix<double>, double, const Real, const Real)
ApplyBottomLeft
^
detected during instantiation of "void El::ApplyGivensSequence(El::LeftOrRightNS::LeftOrRight, El::GivensSequenceType, El::ForwardOrBackwardNS::ForwardOrBackward, const El::Matrix<El::Base<F>> &, const El::Matrix<El::Base<F>> &, El::Matrix<F> &) [with F=double]" at line 99 of "/home/jrhammon/Work/Elemental/new/include/El/macros/Instantiate.h"
/home/jrhammon/Work/Elemental/new/src/blas_like/level2/ApplyGivensSequence.cpp(492): error: more than one instance of overloaded function "El::ApplyBottomLeft" matches the argument list:
function template "void El::ApplyBottomLeft(El::Int={long long}, const El::Base<F> &, const F &, El::Matrix<F> &, F &, const El::Base<F> &, const F &)"
function template "void El::ApplyBottomLeft(El::Int={long long}, const El::Base<F> &, const El::Base<F> &, El::Matrix<F> &, F &, const El::Base<F> &, const El::Base<F> &)"
argument types are: (El::Int, const double, const double, El::Matrix<double>, double, const Real, const Real)
ApplyBottomLeft
^
detected during instantiation of "void El::ApplyGivensSequence(El::LeftOrRightNS::LeftOrRight, El::GivensSequenceType, El::ForwardOrBackwardNS::ForwardOrBackward, const El::Matrix<El::Base<F>> &, const El::Matrix<El::Base<F>> &, El::Matrix<F> &) [with F=double]" at line 99 of "/home/jrhammon/Work/Elemental/new/include/El/macros/Instantiate.h"
/home/jrhammon/Work/Elemental/new/src/blas_like/level2/ApplyGivensSequence.cpp(506): error: more than one instance of overloaded function "El::ApplyVariableRight" matches the argument list:
function template "void El::ApplyVariableRight(El::Int={long long}, const El::Base<F> &, const F &, El::Matrix<F> &, F &, const El::Base<F> &, const F &)"
function template "void El::ApplyVariableRight(El::Int={long long}, const El::Base<F> &, const El::Base<F> &, El::Matrix<F> &, F &, const El::Base<F> &, const El::Base<F> &)"
argument types are: (El::Int, const double, const double, El::Matrix<double>, double, const Real, const Real)
ApplyVariableRight
^
detected during instantiation of "void El::ApplyGivensSequence(El::LeftOrRightNS::LeftOrRight, El::GivensSequenceType, El::ForwardOrBackwardNS::ForwardOrBackward, const El::Matrix<El::Base<F>> &, const El::Matrix<El::Base<F>> &, El::Matrix<F> &) [with F=double]" at line 99 of "/home/jrhammon/Work/Elemental/new/include/El/macros/Instantiate.h"
/home/jrhammon/Work/Elemental/new/src/blas_like/level2/ApplyGivensSequence.cpp(514): error: more than one instance of overloaded function "El::ApplyVariableRight" matches the argument list:
function template "void El::ApplyVariableRight(El::Int={long long}, const El::Base<F> &, const F &, El::Matrix<F> &, F &, const El::Base<F> &, const F &)"
function template "void El::ApplyVariableRight(El::Int={long long}, const El::Base<F> &, const El::Base<F> &, El::Matrix<F> &, F &, const El::Base<F> &, const El::Base<F> &)"
argument types are: (El::Int, const double, const double, El::Matrix<double>, double, const Real, const Real)
ApplyVariableRight
^
detected during instantiation of "void El::ApplyGivensSequence(El::LeftOrRightNS::LeftOrRight, El::GivensSequenceType, El::ForwardOrBackwardNS::ForwardOrBackward, const El::Matrix<El::Base<F>> &, const El::Matrix<El::Base<F>> &, El::Matrix<F> &) [with F=double]" at line 99 of "/home/jrhammon/Work/Elemental/new/include/El/macros/Instantiate.h"
/home/jrhammon/Work/Elemental/new/src/blas_like/level2/ApplyGivensSequence.cpp(525): error: more than one instance of overloaded function "El::ApplyTopRight" matches the argument list:
function template "void El::ApplyTopRight(El::Int={long long}, const El::Base<F> &, const F &, El::Matrix<F> &, F &, const El::Base<F> &, const F &)"
function template "void El::ApplyTopRight(El::Int={long long}, const El::Base<F> &, const El::Base<F> &, El::Matrix<F> &, F &, const El::Base<F> &, const El::Base<F> &)"
argument types are: (El::Int, const double, const double, El::Matrix<double>, double, const Real, const Real)
ApplyTopRight
^
detected during instantiation of "void El::ApplyGivensSequence(El::LeftOrRightNS::LeftOrRight, El::GivensSequenceType, El::ForwardOrBackwardNS::ForwardOrBackward, const El::Matrix<El::Base<F>> &, const El::Matrix<El::Base<F>> &, El::Matrix<F> &) [with F=double]" at line 99 of "/home/jrhammon/Work/Elemental/new/include/El/macros/Instantiate.h"
/home/jrhammon/Work/Elemental/new/src/blas_like/level2/ApplyGivensSequence.cpp(533): error: more than one instance of overloaded function "El::ApplyTopRight" matches the argument list:
function template "void El::ApplyTopRight(El::Int={long long}, const El::Base<F> &, const F &, El::Matrix<F> &, F &, const El::Base<F> &, const F &)"
function template "void El::ApplyTopRight(El::Int={long long}, const El::Base<F> &, const El::Base<F> &, El::Matrix<F> &, F &, const El::Base<F> &, const El::Base<F> &)"
argument types are: (El::Int, const double, const double, El::Matrix<double>, double, const Real, const Real)
ApplyTopRight
^
detected during instantiation of "void El::ApplyGivensSequence(El::LeftOrRightNS::LeftOrRight, El::GivensSequenceType, El::ForwardOrBackwardNS::ForwardOrBackward, const El::Matrix<El::Base<F>> &, const El::Matrix<El::Base<F>> &, El::Matrix<F> &) [with F=double]" at line 99 of "/home/jrhammon/Work/Elemental/new/include/El/macros/Instantiate.h"
/home/jrhammon/Work/Elemental/new/src/blas_like/level2/ApplyGivensSequence.cpp(544): error: more than one instance of overloaded function "El::ApplyBottomRight" matches the argument list:
function template "void El::ApplyBottomRight(El::Int={long long}, const El::Base<F> &, const F &, El::Matrix<F> &, F &, const El::Base<F> &, const F &)"
function template "void El::ApplyBottomRight(El::Int={long long}, const El::Base<F> &, const El::Base<F> &, El::Matrix<F> &, F &, const El::Base<F> &, const El::Base<F> &)"
argument types are: (El::Int, const double, const double, El::Matrix<double>, double, const Real, const Real)
ApplyBottomRight
^
detected during instantiation of "void El::ApplyGivensSequence(El::LeftOrRightNS::LeftOrRight, El::GivensSequenceType, El::ForwardOrBackwardNS::ForwardOrBackward, const El::Matrix<El::Base<F>> &, const El::Matrix<El::Base<F>> &, El::Matrix<F> &) [with F=double]" at line 99 of "/home/jrhammon/Work/Elemental/new/include/El/macros/Instantiate.h"
/home/jrhammon/Work/Elemental/new/src/blas_like/level2/ApplyGivensSequence.cpp(552): error: more than one instance of overloaded function "El::ApplyBottomRight" matches the argument list:
function template "void El::ApplyBottomRight(El::Int={long long}, const El::Base<F> &, const F &, El::Matrix<F> &, F &, const El::Base<F> &, const F &)"
function template "void El::ApplyBottomRight(El::Int={long long}, const El::Base<F> &, const El::Base<F> &, El::Matrix<F> &, F &, const El::Base<F> &, const El::Base<F> &)"
argument types are: (El::Int, const double, const double, El::Matrix<double>, double, const Real, const Real)
ApplyBottomRight
^
detected during instantiation of "void El::ApplyGivensSequence(El::LeftOrRightNS::LeftOrRight, El::GivensSequenceType, El::ForwardOrBackwardNS::ForwardOrBackward, const El::Matrix<El::Base<F>> &, const El::Matrix<El::Base<F>> &, El::Matrix<F> &) [with F=double]" at line 99 of "/home/jrhammon/Work/Elemental/new/include/El/macros/Instantiate.h"
compilation aborted for /home/jrhammon/Work/Elemental/new/src/blas_like/level2/ApplyGivensSequence.cpp (code 2)
make[2]: *** [CMakeFiles/El.dir/src/blas_like/level2/ApplyGivensSequence.cpp.o] Error 2
make[1]: *** [CMakeFiles/El.dir/all] Error 2
make: *** [all] Error 2
@mukunthh All I know is -DEL_DISABLE_QUAD=TRUE
is documented and has an effect on the latest version, which I cloned from scratch less than an hour ago.
@jeffhammond There is no src/queue.c
in external/pmrrr
(see https://github.com/elemental/Elemental/tree/master/external/pmrrr/src), so I'm a bit confused by the build error you were seeing with PMRRR.
As for QUAD
: yes, EL_DISABLE_QUADMATH
is the right solution and should be documented but isn't.
@jeffhammond The last two commits should work around that compilation issue. I am not enough of a language lawyer to know if the previous code was ISO C++ compliant, but it was an easy fix to add a constraint on the template types to avoid any ambiguity.
@poulson I think the PMRRR issues were the result of a rather old git directory. A clean checkout resolved them (git clean -dfx
did not fix it).
Thanks for resolving the template ambiguity. I don't know enough C++ to know what is right and not, and I am reluctant to file bugs without developer attestation of correctness (even thought this is unreliable) in hopes of not reducing my standing with the Intel compiler team.
Unfortunately, there is a new template issue 😭
$ make
[ 9%] Built target pmrrr
[ 11%] Built target ElSuiteSparse
[ 11%] Built target El_config
[ 12%] Building CXX object CMakeFiles/El.dir/src/blas_like/level1/Instantiate.cpp.o
[ 12%] Building CXX object CMakeFiles/El.dir/src/core/FlamePart/Merge.cpp.o
[ 12%] Building CXX object CMakeFiles/El.dir/src/core/DistMatrix/Block/MR_STAR.cpp.o
[ 12%] Building CXX object CMakeFiles/El.dir/src/core/DistMatrix/Block/STAR_VR.cpp.o
[ 12%] Building CXX object CMakeFiles/El.dir/src/core/DistMatrix/Block/MC_MR.cpp.o
[ 13%] Building CXX object CMakeFiles/El.dir/src/core/DistMatrix/Block/MR_MC.cpp.o
[ 13%] Building CXX object CMakeFiles/El.dir/src/core/DistMatrix/Block/STAR_VC.cpp.o
[ 13%] Building CXX object CMakeFiles/El.dir/src/core/DistMatrix/Block.cpp.o
[ 13%] Building CXX object CMakeFiles/El.dir/src/core/DistMatrix/Element.cpp.o
[ 13%] Building CXX object CMakeFiles/El.dir/src/core/Instantiate.cpp.o
[ 14%] Building CXX object CMakeFiles/El.dir/src/core/imports/blas.cpp.o
In file included from /home/jrhammon/Work/Elemental/new/src/core/imports/blas.cpp(29):
/home/jrhammon/Work/Elemental/new/src/core/imports/./blas/Syr.hpp(90): error: no instance of overloaded function "El::blas::Her" matches the specified type
template void Her
^
In file included from /home/jrhammon/Work/Elemental/new/src/core/imports/blas.cpp(37):
/home/jrhammon/Work/Elemental/new/src/core/imports/./blas/Syrk.hpp(166): error: no instance of overloaded function "El::blas::Herk" matches the specified type
template void Herk
^
In file included from /home/jrhammon/Work/Elemental/new/src/core/imports/blas.cpp(38):
/home/jrhammon/Work/Elemental/new/src/core/imports/./blas/Syr2k.hpp(202): error: no instance of overloaded function "El::blas::Her2k" matches the specified type
template void Her2k
^
compilation aborted for /home/jrhammon/Work/Elemental/new/src/core/imports/blas.cpp (code 2)
make[2]: *** [CMakeFiles/El.dir/src/core/imports/blas.cpp.o] Error 2
make[1]: *** [CMakeFiles/El.dir/all] Error 2
make: *** [all] Error 2
The first issue seems to be caused by the following code segment starting at line 49 of src/core/imports/blas/Syr.hpp
:
template<typename T>
void Her
( char uplo, BlasInt m,
const Base<T>& alpha,
const T* x, BlasInt incx,
T* A, BlasInt ALDim )
{
// NOTE: Temporaries are avoided since constructing a BigInt/BigFloat
// involves a memory allocation
T gamma, delta;
if( std::toupper(uplo) == 'L' )
{
for( BlasInt j=0; j<m; ++j )
{
Conj( x[j*incx], gamma );
gamma *= alpha;
for( BlasInt i=j; i<m; ++i )
{
// A[i+j*ALDim] += alpha*x[i*incx]*Conj(x[j*incx]);
delta = x[i*incx];
delta *= gamma;
A[i+j*ALDim] += delta;
}
}
}
else
{
for( BlasInt j=0; j<m; ++j )
{
Conj( x[j*incx], gamma );
gamma *= alpha;
for( BlasInt i=0; i<=j; ++i )
{
// A[i+j*ALDim] += alpha*x[i*incx]*Conj(x[j*incx]);
delta = x[i*incx];
delta *= gamma;
A[i+j*ALDim] += delta;
}
}
}
}
template void Her
( char uplo, BlasInt m,
const Int& alpha,
const Int* x, BlasInt incx,
Int* A, BlasInt ALDim );
It would appear that the compiler is not recognizing that El::Base<El::Int>
is equal to El::Int
. But, as can be seen from the following segment, which starts at line 591 of include/El/core/Elemental/Complex/decl.hpp
, Base<Int>
is most certainly a typedef to Int
:
// Returning the underlying, or "base", real field
// -----------------------------------------------
// Note: The following is for internal usage only; please use Base
template<typename Real> struct BaseHelper { typedef Real type; };
template<typename Real> struct BaseHelper<Complex<Real>> { typedef Real type; };
template<typename F> using Base = typename BaseHelper<F>::type;
So I am going to assume that this is related to the already-reported issue that the Intel compiler has issues with resolving template aliases in arguments to template functions.
I created IPS6000162739 for this issue. I will post an update when I hear back from the compiler support people.
@jeffhammond @poulson Thank you for your time.! I created another ticket #6000162697 as i have been stuck in a compilation error in "her" rather than "syr". Despite that, I have the "syr" functions successfully compiled.
I have the Intel compilers working for Elemental, a compromised solution by removing the support for hermitian matrices.
@mukunthh I see multiple template errors when compiling blas.cpp
with Intel 17. Rot
fails on Mac and Syr
and others fail on both Mac and Linux.
Intel support is working on these. I do not have an ETA yet.
@jeffhammond Unfortunate to hear that, but thanks for reporting it.!
This bug has been fixed in the upcoming Intel 17.0 update 1 compiler. I have verified with the engineering build. I do not have an estimate for when it will be released.
@jeffhammond Thank you much!
All 141 tests are passing with Intel 17.0.1. I am going to close this ticket now. If we discover that the Intel 17 update 1 release does not compile Elemental, we can reopen the ticket.
@mukunthh Intel 17 update 1 is now available: https://software.intel.com/en-us/articles/intel-parallel-studio-xe-release-notes. Please try it with Elemental and let me know if you have any issues.
@jeffhammond - Great news, thank you for the timely update.
Update - Compiled it flawlessly. Special thanks, great working with you..! @jeffhammond
I still have problems with the intel compiler, now not in the core routines butIn file included from /homea/software/mathprod/JURECA/Elemental/Elemental-0.87.7/src/optimization/prox/SVT.cpp(100): /homea/software/mathprod/JURECA/Elemental/Elemental-0.87.7/include/El/macros/Instantiate.h(96): error: no instance of overloaded function "El::svt::Cross" matches the specified type PROTO_FLOAT ^
In file included from /homea/software/mathprod/JURECA/Elemental/Elemental-0.87.7/src/optimization/prox/SVT.cpp(100): /homea/software/mathprod/JURECA/Elemental/Elemental-0.87.7/include/El/macros/Instantiate.h(99): error: no instance of overloaded function "El::svt::Cross" matches the specified type PROTO_DOUBLE ^
In file included from /homea/software/mathprod/JURECA/Elemental/Elemental-0.87.7/src/optimization/prox/SVT.cpp(100): /homea/software/mathprod/JURECA/Elemental/Elemental-0.87.7/include/El/macros/Instantiate.h(117): error: no instance of overloaded function "El::svt::Cross" matches the specified type PROTO_COMPLEX_FLOAT ^
In file included from /homea/software/mathprod/JURECA/Elemental/Elemental-0.87.7/src/optimization/prox/SVT.cpp(100): /homea/software/mathprod/JURECA/Elemental/Elemental-0.87.7/include/El/macros/Instantiate.h(120): error: no instance of overloaded function "El::svt::Cross" matches the specified type PROTO_COMPLEX_DOUBLE ^ I use Intel/2017.1.132 on our JURECA cluster at JSC. log_install_icc_2017a_2.gz JURECA_install_icc_2017a.sh.gz Jureca_2017a.cmake.gz
I don't know what SVT is but can you live without it? I will reproduce and report as soon as possible but it might be a while.
SVT is Singular Value soft-Thresholding and is the soft-thresholding function applied to each singular value (which results from minimizing the nuclear norm plus a Frobenius norm penalty centered about the input matrix). Think of it as a "soft" alternative to projecting onto the highest modes.
But my assumption is that Inge is not making use of this routine.
I'm going to close this in favor of https://github.com/elemental/Elemental/issues/215, which focuses on more recent compilers.
For posterity, https://github.com/elemental/Elemental/issues/215#issuecomment-321289919 notes that Elemental 0.87.7 compiles with Intel 18 beta. That is the newest working pairing of Elemental and Intel compiler versions.
Greetings, Intel 2015 compilers with GNU headers (4.4.6) as well as GNU (4.9.1) headers produced different compilation errors during Elemental build.
However, the below compilation error is with latest Intel 2016 (precisely 2016.2.181 with GNU headers 5.3.0).
It is greatly appreciated for your time in bringing a fix towards this. Let me know if you need more information about the build environments.
Thank you. @jeffhammond @poulson