Skip to content

Internal Compiler Error (codegen):

OpenLB – Open Source Lattice Boltzmann Code Forums on OpenLB Bug Reports Internal Compiler Error (codegen):

Viewing 4 posts - 1 through 4 (of 4 total)
  • Author
    Posts
  • #8747
    aseidler
    Participant

    Hi,

    i was trying to compile channel3D on GPU but it is crashing with the following error message:

    ../../../src/functors/lattice/timeAveraged/superLatticeTimeAveraged3D.hh(126): error: Internal Compiler Error (codegen): “variable length arrays are not supported!”

    I know that there was a similar problem, but the solution offered there did not work.

    Thank you for the help.

    -Alex

    #8748
    Adrian
    Keymaster

    This compiler error was fixed after the release of 1.7 – you can fetch it from the public git repository.

    The reason is that the nvcc compiler correctly rejects the non-standard dynamically-sized array construction supported by Clang and GCC.

    #8751
    aseidler
    Participant

    Hi Adrian,

    thank you for the quick reply.

    Unforthunatly this solution is leeding to more problems:

    In file included from /usr/include/crt/math_functions.h:10703,
    from /usr/include/crt/common_functions.h:303,
    from /usr/include/crt/host_runtime.h:267,
    from /tmp/tmpxft_00194e41_00000000-6_channel3d.cudafe1.stub.c:9,
    from tmpxft_00194e41_00000000-6_channel3d.cudafe1.stub.c:1:
    /usr/include/crt/math_functions.hpp: In function ‘double rcbrt(double)’:
    /usr/include/crt/math_functions.hpp:2960:32: error: call of overloaded ‘log2(double&)’ is ambiguous
    2960 | t = exp2(-CUDART_THIRD * log2(s)); /* initial approximation */
    | ~~~~^~~
    /usr/include/x86_64-linux-gnu/bits/mathcalls.h:133:15: note: candidate: ‘double log2(double)’
    133 | __MATHCALL_VEC (log2,, (_Mdouble_ __x));
    | ^~~~
    /usr/include/c++/11/cmath:1574:23: note: candidate: ‘constexpr long double std::log2(long double)’
    1574 | log2(long double __x)
    | ^
    /usr/include/c++/11/cmath:1570:17: note: candidate: ‘constexpr float std::log2(float)’
    1570 | log2(float __x)
    | ^
    ../../../src/utilities/omath.h:197:14: note: candidate: ‘float olb::util::log2(float)’
    197 | inline float log2(float arg)
    | ^~~~
    ../../../src/utilities/omath.h:207:15: note: candidate: ‘double olb::util::log2(double)’
    207 | inline double log2(double arg)
    | ^~~~
    ../../../src/utilities/omath.h:212:20: note: candidate: ‘long double olb::util::log2(long double)’
    212 | inline long double log2(long double arg)
    | ^~~~
    In file included from /usr/include/crt/math_functions.h:10703,
    from /usr/include/crt/common_functions.h:303,
    from /usr/include/crt/host_runtime.h:267,
    from /tmp/tmpxft_00194e41_00000000-6_channel3d.cudafe1.stub.c:9,
    from tmpxft_00194e41_00000000-6_channel3d.cudafe1.stub.c:1:
    /usr/include/crt/math_functions.hpp: In function ‘double sinpi(double)’:
    /usr/include/crt/math_functions.hpp:2981:16: error: call of overloaded ‘sin(double&)’ is ambiguous
    2981 | return sin (a);
    | ~~~~^~~
    /usr/include/x86_64-linux-gnu/bits/mathcalls.h:64:15: note: candidate: ‘double sin(double)’
    64 | __MATHCALL_VEC (sin,, (_Mdouble_ __x));
    | ^~~
    /usr/include/c++/11/cmath:429:23: note: candidate: ‘constexpr long double std::sin(long double)’
    429 | sin(long double __x)
    | ^
    /usr/include/c++/11/cmath:425:17: note: candidate: ‘constexpr float std::sin(float)’
    425 | sin(float __x)
    | ^
    ../../../src/utilities/omath.h:296:14: note: candidate: ‘float olb::util::sin(float)’
    296 | inline float sin(float arg)
    | ^~~
    ../../../src/utilities/omath.h:306:15: note: candidate: ‘double olb::util::sin(double)’
    306 | inline double sin(double arg)
    | ^~~
    ../../../src/utilities/omath.h:311:20: note: candidate: ‘long double olb::util::sin(long double)’
    311 | inline long double sin(long double arg)
    | ^~~
    In file included from /usr/include/crt/math_functions.h:10703,
    from /usr/include/crt/common_functions.h:303,
    from /usr/include/crt/host_runtime.h:267,
    from /tmp/tmpxft_00194e41_00000000-6_channel3d.cudafe1.stub.c:9,
    from tmpxft_00194e41_00000000-6_channel3d.cudafe1.stub.c:1:
    /usr/include/crt/math_functions.hpp:2983:17: error: call of overloaded ‘floor(double&)’ is ambiguous
    2983 | if (a == floor(a)) {
    | ~~~~~^~~
    /usr/include/x86_64-linux-gnu/bits/mathcalls.h:165:15: note: candidate: ‘double floor(double)’
    165 | __MATHCALLX (floor,, (_Mdouble_ __x), (__const__));
    | ^~~~~
    /usr/include/c++/11/cmath:264:23: note: candidate: ‘constexpr long double std::floor(long double)’
    264 | floor(long double __x)
    | ^~
    /usr/include/c++/11/cmath:260:17: note: candidate: ‘constexpr float std::floor(float)’
    260 | floor(float __x)
    | ^~
    ../../../src/utilities/omath.h:714:14: note: candidate: ‘float olb::util::floor(float)’
    714 | inline float floor(float arg)
    | ^~~~~
    ../../../src/utilities/omath.h:719:15: note: candidate: ‘double olb::util::floor(double)’
    719 | inline double floor(double arg)
    | ^~~~~
    ../../../src/utilities/omath.h:724:20: note: candidate: ‘long double olb::util::floor(long double)’
    724 | inline long double floor(long double arg)
    | ^~~~~
    In file included from /usr/include/crt/math_functions.h:10703,
    from /usr/include/crt/common_functions.h:303,
    from /usr/include/crt/host_runtime.h:267,
    from /tmp/tmpxft_00194e41_00000000-6_channel3d.cudafe1.stub.c:9,
    from tmpxft_00194e41_00000000-6_channel3d.cudafe1.stub.c:1:
    /usr/include/crt/math_functions.hpp:2987:23: error: call of overloaded ‘round(double&)’ is ambiguous
    2987 | double rtwoa = round(twoa);
    | ~~~~~^~~~~~
    /usr/include/x86_64-linux-gnu/bits/mathcalls.h:301:15: note: candidate: ‘double round(double)’
    301 | __MATHCALLX (round,, (_Mdouble_ __x), (__const__));
    | ^~~~~
    /usr/include/c++/11/cmath:1760:23: note: candidate: ‘constexpr long double std::round(long double)’
    1760 | round(long double __x)
    | ^~
    /usr/include/c++/11/cmath:1756:17: note: candidate: ‘constexpr float std::round(float)’
    1756 | round(float __x)
    | ^~
    ../../../src/utilities/omath.h:816:14: note: candidate: ‘float olb::util::round(float)’
    816 | inline float round(float arg)
    | ^~~~~
    ../../../src/utilities/omath.h:821:15: note: candidate: ‘double olb::util::round(double)’
    821 | inline double round(double arg)
    | ^~~~~
    ../../../src/utilities/omath.h:826:20: note: candidate: ‘long double olb::util::round(long double)’
    826 | inline long double round(long double arg)
    | ^~~~~
    In file included from /usr/include/crt/math_functions.h:10703,
    from /usr/include/crt/common_functions.h:303,
    from /usr/include/crt/host_runtime.h:267,
    from /tmp/tmpxft_00194e41_00000000-6_channel3d.cudafe1.stub.c:9,
    from tmpxft_00194e41_00000000-6_channel3d.cudafe1.stub.c:1:
    /usr/include/crt/math_functions.hpp:2993:13: error: call of overloaded ‘cos(double&)’ is ambiguous
    2993 | a = cos (a);
    | ~~~~^~~
    /usr/include/x86_64-linux-gnu/bits/mathcalls.h:62:15: note: candidate: ‘double cos(double)’
    62 | __MATHCALL_VEC (cos,, (_Mdouble_ __x));
    | ^~~
    /usr/include/c++/11/cmath:188:23: note: candidate: ‘constexpr long double std::cos(long double)’
    188 | cos(long double __x)
    | ^
    /usr/include/c++/11/cmath:184:17: note: candidate: ‘constexpr float std::cos(float)’
    184 | cos(float __x)
    | ^
    ../../../src/utilities/omath.h:360:14: note: candidate: ‘float olb::util::cos(float)’
    360 | inline float cos(float arg)
    | ^~~
    ../../../src/utilities/omath.h:370:15: note: candidate: ‘double olb::util::cos(double)’
    370 | inline double cos(double arg)
    | ^~~
    ../../../src/utilities/omath.h:375:20: note: candidate: ‘long double olb::util::cos(long double)’
    375 | inline long double cos(long double arg)
    | ^~~
    In file included from /usr/include/crt/math_functions.h:10703,
    from /usr/include/crt/common_functions.h:303,
    from /usr/include/crt/host_runtime.h:267,
    from /tmp/tmpxft_00194e41_00000000-6_channel3d.cudafe1.stub.c:9,
    from tmpxft_00194e41_00000000-6_channel3d.cudafe1.stub.c:1:
    /usr/include/crt/math_functions.hpp:2995:13: error: call of overloaded ‘sin(double&)’ is ambiguous
    2995 | a = sin (a);
    | ~~~~^~~
    /usr/include/x86_64-linux-gnu/bits/mathcalls.h:64:15: note: candidate: ‘double sin(double)’
    64 | __MATHCALL_VEC (sin,, (_Mdouble_ __x));
    | ^~~
    /usr/include/c++/11/cmath:429:23: note: candidate: ‘constexpr long double std::sin(long double)’
    429 | sin(long double __x)
    | ^
    /usr/include/c++/11/cmath:425:17: note: candidate: ‘constexpr float std::sin(float)’
    425 | sin(float __x)
    | ^
    ../../../src/utilities/omath.h:296:14: note: candidate: ‘float olb::util::sin(float)’
    296 | inline float sin(float arg)
    | ^~~
    ../../../src/utilities/omath.h:306:15: note: candidate: ‘double olb::util::sin(double)’
    306 | inline double sin(double arg)
    | ^~~
    ../../../src/utilities/omath.h:311:20: note: candidate: ‘long double olb::util::sin(long double)’
    311 | inline long double sin(long double arg)
    | ^~~
    In file included from /usr/include/crt/math_functions.h:10703,
    from /usr/include/crt/common_functions.h:303,
    from /usr/include/crt/host_runtime.h:267,
    from /tmp/tmpxft_00194e41_00000000-6_channel3d.cudafe1.stub.c:9,
    from tmpxft_00194e41_00000000-6_channel3d.cudafe1.stub.c:1:
    /usr/include/crt/math_functions.hpp: In function ‘double cospi(double)’:
    /usr/include/crt/math_functions.hpp:3011:16: error: call of overloaded ‘cos(double&)’ is ambiguous
    3011 | return cos (a);
    | ~~~~^~~
    /usr/include/x86_64-linux-gnu/bits/mathcalls.h:62:15: note: candidate: ‘double cos(double)’
    62 | __MATHCALL_VEC (cos,, (_Mdouble_ __x));
    | ^~~
    /usr/include/c++/11/cmath:188:23: note: candidate: ‘constexpr long double std::cos(long double)’
    188 | cos(long double __x)
    | ^
    /usr/include/c++/11/cmath:184:17: note: candidate: ‘constexpr float std::cos(float)’
    184 | cos(float __x)
    | ^
    ../../../src/utilities/omath.h:360:14: note: candidate: ‘float olb::util::cos(float)’
    360 | inline float cos(float arg)
    | ^~~
    ../../../src/utilities/omath.h:370:15: note: candidate: ‘double olb::util::cos(double)’
    370 | inline double cos(double arg)
    | ^~~
    ../../../src/utilities/omath.h:375:20: note: candidate: ‘long double olb::util::cos(long double)’
    375 | inline long double cos(long double arg)
    | ^~~
    In file included from /usr/include/crt/math_functions.h:10703,
    from /usr/include/crt/common_functions.h:303,
    from /usr/include/crt/host_runtime.h:267,
    from /tmp/tmpxft_00194e41_00000000-6_channel3d.cudafe1.stub.c:9,
    from tmpxft_00194e41_00000000-6_channel3d.cudafe1.stub.c:1:
    /usr/include/crt/math_functions.hpp:3017:23: error: call of overloaded ‘round(double&)’ is ambiguous
    3017 | double rtwoa = round(twoa);
    | ~~~~~^~~~~~
    /usr/include/x86_64-linux-gnu/bits/mathcalls.h:301:15: note: candidate: ‘double round(double)’
    301 | __MATHCALLX (round,, (_Mdouble_ __x), (__const__));
    | ^~~~~
    /usr/include/c++/11/cmath:1760:23: note: candidate: ‘constexpr long double std::round(long double)’
    1760 | round(long double __x)
    | ^~
    /usr/include/c++/11/cmath:1756:17: note: candidate: ‘constexpr float std::round(float)’
    1756 | round(float __x)
    | ^~
    ../../../src/utilities/omath.h:816:14: note: candidate: ‘float olb::util::round(float)’
    816 | inline float round(float arg)
    | ^~~~~
    ../../../src/utilities/omath.h:821:15: note: candidate: ‘double olb::util::round(double)’
    821 | inline double round(double arg)
    | ^~~~~
    ../../../src/utilities/omath.h:826:20: note: candidate: ‘long double olb::util::round(long double)’
    826 | inline long double round(long double arg)
    | ^~~~~
    In file included from /usr/include/crt/math_functions.h:10703,
    from /usr/include/crt/common_functions.h:303,
    from /usr/include/crt/host_runtime.h:267,
    from /tmp/tmpxft_00194e41_00000000-6_channel3d.cudafe1.stub.c:9,
    from tmpxft_00194e41_00000000-6_channel3d.cudafe1.stub.c:1:
    /usr/include/crt/math_functions.hpp:3024:13: error: call of overloaded ‘cos(double&)’ is ambiguous
    3024 | a = cos (a);
    | ~~~~^~~
    /usr/include/x86_64-linux-gnu/bits/mathcalls.h:62:15: note: candidate: ‘double cos(double)’
    62 | __MATHCALL_VEC (cos,, (_Mdouble_ __x));
    | ^~~
    /usr/include/c++/11/cmath:188:23: note: candidate: ‘constexpr long double std::cos(long double)’
    188 | cos(long double __x)
    | ^
    /usr/include/c++/11/cmath:184:17: note: candidate: ‘constexpr float std::cos(float)’
    184 | cos(float __x)
    | ^
    ../../../src/utilities/omath.h:360:14: note: candidate: ‘float olb::util::cos(float)’
    360 | inline float cos(float arg)
    | ^~~
    ../../../src/utilities/omath.h:370:15: note: candidate: ‘double olb::util::cos(double)’
    370 | inline double cos(double arg)
    | ^~~
    ../../../src/utilities/omath.h:375:20: note: candidate: ‘long double olb::util::cos(long double)’
    375 | inline long double cos(long double arg)
    | ^~~
    In file included from /usr/include/crt/math_functions.h:10703,
    from /usr/include/crt/common_functions.h:303,
    from /usr/include/crt/host_runtime.h:267,
    from /tmp/tmpxft_00194e41_00000000-6_channel3d.cudafe1.stub.c:9,
    from tmpxft_00194e41_00000000-6_channel3d.cudafe1.stub.c:1:
    /usr/include/crt/math_functions.hpp:3026:13: error: call of overloaded ‘sin(double&)’ is ambiguous
    3026 | a = sin (a);
    | ~~~~^~~
    /usr/include/x86_64-linux-gnu/bits/mathcalls.h:64:15: note: candidate: ‘double sin(double)’
    64 | __MATHCALL_VEC (sin,, (_Mdouble_ __x));
    | ^~~
    /usr/include/c++/11/cmath:429:23: note: candidate: ‘constexpr long double std::sin(long double)’
    429 | sin(long double __x)
    | ^
    /usr/include/c++/11/cmath:425:17: note: candidate: ‘constexpr float std::sin(float)’
    425 | sin(float __x)
    | ^
    ../../../src/utilities/omath.h:296:14: note: candidate: ‘float olb::util::sin(float)’
    296 | inline float sin(float arg)
    | ^~~
    ../../../src/utilities/omath.h:306:15: note: candidate: ‘double olb::util::sin(double)’
    306 | inline double sin(double arg)
    | ^~~
    ../../../src/utilities/omath.h:311:20: note: candidate: ‘long double olb::util::sin(long double)’
    311 | inline long double sin(long double arg)
    | ^~~
    In file included from /usr/include/crt/math_functions.h:10703,
    from /usr/include/crt/common_functions.h:303,
    from /usr/include/crt/host_runtime.h:267,
    from /tmp/tmpxft_00194e41_00000000-6_channel3d.cudafe1.stub.c:9,
    from tmpxft_00194e41_00000000-6_channel3d.cudafe1.stub.c:1:
    /usr/include/crt/math_functions.hpp: In function ‘double erfinv(double)’:
    /usr/include/crt/math_functions.hpp:3060:14: error: call of overloaded ‘log1p(double)’ is ambiguous
    3060 | t = log1p(-fa);
    | ~~~~~^~~~~
    /usr/include/x86_64-linux-gnu/bits/mathcalls.h:122:15: note: candidate: ‘double log1p(double)’
    122 | __MATHCALL_VEC (log1p,, (_Mdouble_ __x));
    | ^~~~~
    /usr/include/c++/11/cmath:1555:23: note: candidate: ‘constexpr long double std::log1p(long double)’
    1555 | log1p(long double __x)
    | ^~
    /usr/include/c++/11/cmath:1551:17: note: candidate: ‘constexpr float std::log1p(float)’
    1551 | log1p(float __x)
    | ^~
    ../../../src/utilities/omath.h:229:14: note: candidate: ‘float olb::util::log1p(float)’
    229 | inline float log1p(float arg)
    | ^~~~~
    ../../../src/utilities/omath.h:239:15: note: candidate: ‘double olb::util::log1p(double)’
    239 | inline double log1p(double arg)
    | ^~~~~
    ../../../src/utilities/omath.h:244:20: note: candidate: ‘long double olb::util::log1p(long double)’
    244 | inline long double log1p(long double arg)
    | ^~~~~
    In file included from /usr/include/crt/math_functions.h:10703,
    from /usr/include/crt/common_functions.h:303,
    from /usr/include/crt/host_runtime.h:267,
    from /tmp/tmpxft_00194e41_00000000-6_channel3d.cudafe1.stub.c:9,
    from tmpxft_00194e41_00000000-6_channel3d.cudafe1.stub.c:1:
    /usr/include/crt/math_functions.hpp: In function ‘double erfcinv(double)’:
    /usr/include/crt/math_functions.hpp:3160:12: error: call of overloaded ‘log(const double&)’ is ambiguous
    3160 | t = log(a);
    | ~~~^~~
    /usr/include/x86_64-linux-gnu/bits/mathcalls.h:104:15: note: candidate: ‘double log(double)’
    104 | __MATHCALL_VEC (log,, (_Mdouble_ __x));
    | ^~~
    /usr/include/c++/11/cmath:342:23: note: candidate: ‘constexpr long double std::log(long double)’
    342 | log(long double __x)
    | ^
    /usr/include/c++/11/cmath:338:17: note: candidate: ‘constexpr float std::log(float)’
    338 | log(float __x)
    | ^
    ../../../src/utilities/omath.h:133:14: note: candidate: ‘float olb::util::log(float)’
    133 | inline float log(float arg)
    | ^~~
    ../../../src/utilities/omath.h:143:15: note: candidate: ‘double olb::util::log(double)’
    143 | inline double log(double arg)
    | ^~~
    ../../../src/utilities/omath.h:148:20: note: candidate: ‘long double olb::util::log(long double)’
    148 | inline long double log(long double arg)
    | ^~~
    In file included from /usr/include/crt/math_functions.h:10703,
    from /usr/include/crt/common_functions.h:303,
    from /usr/include/crt/host_runtime.h:267,
    from /tmp/tmpxft_00194e41_00000000-6_channel3d.cudafe1.stub.c:9,
    from tmpxft_00194e41_00000000-6_channel3d.cudafe1.stub.c:1:
    /usr/include/crt/math_functions.hpp:3191:12: error: call of overloaded ‘log(const double&)’ is ambiguous
    3191 | t = log(a);
    | ~~~^~~
    /usr/include/x86_64-linux-gnu/bits/mathcalls.h:104:15: note: candidate: ‘double log(double)’
    104 | __MATHCALL_VEC (log,, (_Mdouble_ __x));
    | ^~~
    /usr/include/c++/11/cmath:342:23: note: candidate: ‘constexpr long double std::log(long double)’
    342 | log(long double __x)
    | ^
    /usr/include/c++/11/cmath:338:17: note: candidate: ‘constexpr float std::log(float)’
    338 | log(float __x)
    | ^
    ../../../src/utilities/omath.h:133:14: note: candidate: ‘float olb::util::log(float)’
    133 | inline float log(float arg)
    | ^~~
    ../../../src/utilities/omath.h:143:15: note: candidate: ‘double olb::util::log(double)’
    143 | inline double log(double arg)
    | ^~~
    ../../../src/utilities/omath.h:148:20: note: candidate: ‘long double olb::util::log(long double)’
    148 | inline long double log(long double arg)
    | ^~~
    make: *** [../../../default.single.mk:35: channel3d.o] Error 1

    -Alex

    #8753
    Adrian
    Keymaster

    Sorry, I forgot myself that channel3d is one of the cases that is not yet adapted to the new GPU-supporting style even in 1.7 (you can see a list of all verified examples in the Release Notes.

    The reason for this is that the wall function used there is written in a particularly porting-unfriendly way. One of my colleagues is actually focused on remedying this right now, so keep a look out for the next release (should you be interested particularly in having wall function on GPUs in OpenLB).

Viewing 4 posts - 1 through 4 (of 4 total)
  • You must be logged in to reply to this topic.