Kokkos build and numerics support #4451
Conversation
e9a0948 to
63d0098
Compare
roystgnr
left a comment
There was a problem hiding this comment.
We're definitely getting there. I'd say the only thing that really ought to be fixed now is the error macro forwarding direction and (unless there's a good reason not to that I'm missing) the function redundancies.
roystgnr
left a comment
There was a problem hiding this comment.
Make system and error handling look good to go now!
We've still got more duplication than we want in the math operators, though; not all of the "an operator which just shims a custom-named function that doesn't need to exist separately" cases are gone, and there's some more subtle "N operators shim a custom-named function" cases than could be turned into "N-1 operators call the one of them that now has the implementation in it".
| CXXFLAGS="$CXXFLAGS $KOKKOS_CXXFLAGS" | ||
| LDFLAGS="$LDFLAGS $KOKKOS_LDFLAGS" | ||
| LIBS="$LIBS $KOKKOS_LIBS" | ||
| AC_LANG_PUSH([C++]) |
There was a problem hiding this comment.
Split all commits like this in two in the future - the stuff we actually change in the first, and the stuff that bootstrap (or autoreconf, however you do it) changes in the second.
4126ca2 to
3a78e39
Compare
716fbfe to
abab836
Compare
With Kokkos we may have device compilers that can't handle them.
This is necessary for --enable-werror --enable-paranoid-warnings (and possibly just the former?) configurations with Ubuntu 26.4 Kokkos for me.
This looks like more of the sort of redundancy I want to get rid of, but I want to get compiling first.
I can't actually trigger this directly yet, but I needed it in MetaPhysicL for indirectly included Kokkos headers (at least for the version in Ubuntu 26.4) there.
This fixes --enable-werror --enable-paranoid-warnings --enable-kokkos builds for me.
"Should I add a layer of indirection to accomplish X" is one of the hardest questions in software, unless X is "nothing". Then it's easy.
This might become useful again depending on how we change things in the backend, but for now it's redundant with operator().
operator() setters here lets us avoid an indirection layer
If we had to support arbitrary third-party classes directly this would have been helpful, but we're writing our own shims here.
…s-roystgnr-merge-20260716 # Conflicts: # Makefile.in # configure # contrib/Makefile.in # contrib/capnproto/Makefile.in # contrib/eigen/gitshim/Makefile.in # contrib/exodusii/5.22b/exodus/Makefile.in # contrib/exodusii/5.22b/nemesis/Makefile.in # contrib/exodusii/Lib/Makefile.in # contrib/exodusii/v8.11/exodus/Makefile.in # contrib/exodusii/v8.11/nemesis/Makefile.in # contrib/fparser/Makefile.in # contrib/fparser/extrasrc/Makefile.in # contrib/gmv/Makefile.in # contrib/gzstream/Makefile.in # contrib/laspack/Makefile.in # contrib/libHilbert/Makefile.in # contrib/metis/Makefile.in # contrib/nanoflann/Makefile.in # contrib/nemesis/Lib/Makefile.in # contrib/netgen/Makefile.in # contrib/parmetis/Makefile.in # contrib/poly2tri/modified/Makefile.in # contrib/qhull/Makefile.in # contrib/sfcurves/Makefile.in # contrib/tecplot/binary/Makefile.in # contrib/tecplot/tecio/Makefile.in # contrib/tetgen/Makefile.in # contrib/triangle/Makefile.in # doc/Makefile.in # doc/html/Makefile.in # examples/Makefile.in # examples/adaptivity/adaptivity_ex1/Makefile.in # examples/adaptivity/adaptivity_ex2/Makefile.in # examples/adaptivity/adaptivity_ex3/Makefile.in # examples/adaptivity/adaptivity_ex4/Makefile.in # examples/adaptivity/adaptivity_ex5/Makefile.in # examples/adjoints/adjoints_ex1/Makefile.in # examples/adjoints/adjoints_ex2/Makefile.in # examples/adjoints/adjoints_ex3/Makefile.in # examples/adjoints/adjoints_ex4/Makefile.in # examples/adjoints/adjoints_ex5/Makefile.in # examples/adjoints/adjoints_ex6/Makefile.in # examples/adjoints/adjoints_ex7/Makefile.in # examples/eigenproblems/eigenproblems_ex1/Makefile.in # examples/eigenproblems/eigenproblems_ex2/Makefile.in # examples/eigenproblems/eigenproblems_ex3/Makefile.in # examples/eigenproblems/eigenproblems_ex4/Makefile.in # examples/fem_system/fem_system_ex1/Makefile.in # examples/fem_system/fem_system_ex2/Makefile.in # examples/fem_system/fem_system_ex3/Makefile.in # examples/fem_system/fem_system_ex4/Makefile.in # examples/fem_system/fem_system_ex5/Makefile.in # examples/introduction/introduction_ex1/Makefile.in # examples/introduction/introduction_ex2/Makefile.in # examples/introduction/introduction_ex3/Makefile.in # examples/introduction/introduction_ex4/Makefile.in # examples/introduction/introduction_ex5/Makefile.in # examples/miscellaneous/miscellaneous_ex1/Makefile.in # examples/miscellaneous/miscellaneous_ex10/Makefile.in # examples/miscellaneous/miscellaneous_ex11/Makefile.in # examples/miscellaneous/miscellaneous_ex12/Makefile.in # examples/miscellaneous/miscellaneous_ex13/Makefile.in # examples/miscellaneous/miscellaneous_ex14/Makefile.in # examples/miscellaneous/miscellaneous_ex15/Makefile.in # examples/miscellaneous/miscellaneous_ex16/Makefile.in # examples/miscellaneous/miscellaneous_ex17/Makefile.in # examples/miscellaneous/miscellaneous_ex2/Makefile.in # examples/miscellaneous/miscellaneous_ex3/Makefile.in # examples/miscellaneous/miscellaneous_ex4/Makefile.in # examples/miscellaneous/miscellaneous_ex5/Makefile.in # examples/miscellaneous/miscellaneous_ex6/Makefile.in # examples/miscellaneous/miscellaneous_ex7/Makefile.in # examples/miscellaneous/miscellaneous_ex8/Makefile.in # examples/miscellaneous/miscellaneous_ex9/Makefile.in # examples/optimization/optimization_ex1/Makefile.in # examples/optimization/optimization_ex2/Makefile.in # examples/reduced_basis/reduced_basis_ex1/Makefile.in # examples/reduced_basis/reduced_basis_ex2/Makefile.in # examples/reduced_basis/reduced_basis_ex3/Makefile.in # examples/reduced_basis/reduced_basis_ex4/Makefile.in # examples/reduced_basis/reduced_basis_ex5/Makefile.in # examples/reduced_basis/reduced_basis_ex6/Makefile.in # examples/reduced_basis/reduced_basis_ex7/Makefile.in # examples/solution_transfer/solution_transfer_ex1/Makefile.in # examples/subdomains/subdomains_ex1/Makefile.in # examples/subdomains/subdomains_ex2/Makefile.in # examples/subdomains/subdomains_ex3/Makefile.in # examples/systems_of_equations/systems_of_equations_ex1/Makefile.in # examples/systems_of_equations/systems_of_equations_ex2/Makefile.in # examples/systems_of_equations/systems_of_equations_ex3/Makefile.in # examples/systems_of_equations/systems_of_equations_ex4/Makefile.in # examples/systems_of_equations/systems_of_equations_ex5/Makefile.in # examples/systems_of_equations/systems_of_equations_ex6/Makefile.in # examples/systems_of_equations/systems_of_equations_ex7/Makefile.in # examples/systems_of_equations/systems_of_equations_ex8/Makefile.in # examples/systems_of_equations/systems_of_equations_ex9/Makefile.in # examples/transient/transient_ex1/Makefile.in # examples/transient/transient_ex2/Makefile.in # examples/transient/transient_ex3/Makefile.in # examples/vector_fe/vector_fe_ex1/Makefile.in # examples/vector_fe/vector_fe_ex10/Makefile.in # examples/vector_fe/vector_fe_ex2/Makefile.in # examples/vector_fe/vector_fe_ex3/Makefile.in # examples/vector_fe/vector_fe_ex4/Makefile.in # examples/vector_fe/vector_fe_ex5/Makefile.in # examples/vector_fe/vector_fe_ex6/Makefile.in # examples/vector_fe/vector_fe_ex7/Makefile.in # examples/vector_fe/vector_fe_ex8/Makefile.in # examples/vector_fe/vector_fe_ex9/Makefile.in # include/Makefile.in # include/base/libmesh_device.h # include/gpu/kokkos_linalg_base.h # include/gpu/kokkos_storage.h # include/gpu/kokkos_storage_policy.h # include/gpu/kokkos_tensor_ops.h # include/gpu/kokkos_vector_ops.h # include/libmesh/Makefile.in # m4/config_summary.m4 # m4/libmesh_optional_packages.m4 # tests/Makefile.in # tests/numerics/kokkos_numerics_oracle_test_utils.h # tests/numerics/kokkos_tensor_ops_oracle_runners.h # tests/numerics/kokkos_vector_ops_oracle_fixtures.h # tests/numerics/kokkos_vector_ops_oracle_runners.h
…kos-build-numerics
This PR adds the first upstreamable slice of libMesh Kokkos support: build-system integration for .K translation units plus
standalone Kokkos numerics oracle tests.
The scope is intentionally limited to: