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

Intel compiler compilation issue #177

Closed
hashmenow opened this issue Aug 29, 2016 · 30 comments
Closed

Intel compiler compilation issue #177

hashmenow opened this issue Aug 29, 2016 · 30 comments
Assignees

Comments

@hashmenow
Copy link

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).

[ 13%] /home/mselvam/tools/cmake/cmake-3.0.2/bin/cmake:Building CXX object CMakeFiles/El.dir/src/blas_like/blocksizes.cpp.o
In file included from /home/mselvam/Elemental/include/El/core.hpp(259),
from /home/mselvam/Elemental/include/El-lite.hpp(13),
from /home/mselvam/Elemental/src/blas_like/blocksizes.cpp(9):
/home/mselvam/Elemental/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/mselvam/Elemental/include/El/core.hpp(259),
from /home/mselvam/Elemental/include/El-lite.hpp(13),
from /home/mselvam/Elemental/src/blas_like/blocksizes.cpp(9):
/home/mselvam/Elemental/include/El/core/random/decl.hpp(92): error: no instance of overloaded function "El::SampleNormal" mat
ches the specified type
Complex SampleNormal( const Complex& mean, const Quad& stddev );
^

compilation aborted for /home/mselvam/Elemental/src/blas_like/blocksizes.cpp (code 2)
make[2]: *** [CMakeFiles/El.dir/src/blas_like/blocksizes.cpp.o] Error 2
make[1]: *** [CMakeFiles/El.dir/all] Error 2
make: *** [all] Error 2

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

@jeffhammond jeffhammond self-assigned this Aug 29, 2016
@poulson
Copy link
Member

poulson commented Aug 31, 2016

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).

@jeffhammond
Copy link
Member

jeffhammond commented Aug 31, 2016

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.

level1-C.cpp.i.txt
level1-C.cpp.log.txt

@jeffhammond
Copy link
Member

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

@jeffhammond
Copy link
Member

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

@poulson
Copy link
Member

poulson commented Aug 31, 2016

@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.

@hashmenow
Copy link
Author

@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"

@jeffhammond
Copy link
Member

jeffhammond commented Aug 31, 2016

@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.

@jeffhammond
Copy link
Member

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

@jeffhammond
Copy link
Member

jeffhammond commented Sep 6, 2016

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 EL_HAVE_QUAD?
(I found -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

@hashmenow
Copy link
Author

@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

@jeffhammond
Copy link
Member

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

@jeffhammond
Copy link
Member

@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.

@poulson
Copy link
Member

poulson commented Sep 7, 2016

@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.

poulson added a commit that referenced this issue Sep 7, 2016
…ssenbergSchurCtrl; fixing a mistake in the previous, overzealous commit to fix an Intel compilation issue reported in Issue #177
@poulson
Copy link
Member

poulson commented Sep 7, 2016

@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.

@jeffhammond
Copy link
Member

@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.

@jeffhammond
Copy link
Member

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

@poulson
Copy link
Member

poulson commented Sep 7, 2016

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.

@jeffhammond
Copy link
Member

I created IPS6000162739 for this issue. I will post an update when I hear back from the compiler support people.

@hashmenow
Copy link
Author

@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.

@jeffhammond
Copy link
Member

@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.

@hashmenow
Copy link
Author

@jeffhammond
Unfortunate to hear that, but thanks for reporting it.!

@jeffhammond
Copy link
Member

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.

@hashmenow
Copy link
Author

hashmenow commented Sep 23, 2016

@jeffhammond
Thank you much!

@jeffhammond
Copy link
Member

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.

@jeffhammond
Copy link
Member

@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.

@hashmenow
Copy link
Author

hashmenow commented Nov 3, 2016

@jeffhammond - Great news, thank you for the timely update.

Update - Compiled it flawlessly. Special thanks, great working with you..! @jeffhammond

@ingutheil
Copy link

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

@jeffhammond
Copy link
Member

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.

@jeffhammond jeffhammond reopened this Mar 10, 2017
@poulson
Copy link
Member

poulson commented Mar 10, 2017

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.

@jeffhammond
Copy link
Member

I'm going to close this in favor of #215, which focuses on more recent compilers.

For posterity, #215 (comment) notes that Elemental 0.87.7 compiles with Intel 18 beta. That is the newest working pairing of Elemental and Intel compiler versions.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants