Internal Compiler Error (codegen):
OpenLB – Open Source Lattice Boltzmann Code › Forums › on OpenLB › Bug Reports › Internal Compiler Error (codegen):
- This topic has 3 replies, 2 voices, and was last updated 3 months, 2 weeks ago by Adrian.
-
AuthorPosts
-
May 24, 2024 at 2:43 pm #8747aseidlerParticipant
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
May 24, 2024 at 2:47 pm #8748AdrianKeymasterThis 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.
May 27, 2024 at 1:30 pm #8751aseidlerParticipantHi 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
May 29, 2024 at 10:35 am #8753AdrianKeymasterSorry, 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).
-
AuthorPosts
- You must be logged in to reply to this topic.