mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-18 12:16:49 +00:00
[libcxx] Add testing configuration for GPU targets (#104515)
Summary: The GPU runs these tests using the files built from the `libc` project. These will be placed in `include/<triple>` and `lib/<triple>`. We use the `amdhsa-loader` and `nvptx-loader` tools, which are also provided by `libc`. These launch a kernel called `_start` which calls `main` so we can pretend like GPU programs are normal terminal applications. We force serial exeuction here, because `llvm-lit` runs way too many processes in parallel, which has a bad habit of making the GPU drivers hang or run out of resources. This allows the compilation to be run in parallel while the jobs themselves are serialized via a file lock. In the future this can likely be refined to accept user specified architectures, or better handle including the root directory by exposing that instead of just `include/<triple>/c++/v1/`. This currently fails ~1% of the tests on AMDGPU and ~3% of the tests on NVPTX. This will hopefully be reduced further, and later patches can XFAIL a lot of them once it's down to a reasonable number. Future support will likely want to allow passing in a custom architecture instead of simply relying on `-mcpu=native`.
This commit is contained in:
parent
002a0a27bc
commit
95a2eb70cf
@ -27,6 +27,10 @@ set(LIBCXXABI_ENABLE_SHARED OFF CACHE BOOL "")
|
||||
set(LIBCXXABI_ENABLE_THREADS OFF CACHE BOOL "")
|
||||
set(LIBCXXABI_USE_LLVM_UNWINDER OFF CACHE BOOL "")
|
||||
|
||||
# Test configuration.
|
||||
set(LIBCXX_TEST_CONFIG "amdgpu-libc++-shared.cfg.in" CACHE STRING "")
|
||||
set(LIBCXX_TEST_PARAMS "optimization=none;long_tests=False;executor=amdhsa-loader" CACHE STRING "")
|
||||
|
||||
# Necessary compile flags for AMDGPU.
|
||||
set(LIBCXX_ADDITIONAL_COMPILE_FLAGS
|
||||
"-nogpulib;-flto;-fconvergent-functions;SHELL:-Xclang -mcode-object-version=none" CACHE STRING "")
|
||||
|
@ -27,6 +27,10 @@ set(LIBCXXABI_ENABLE_SHARED OFF CACHE BOOL "")
|
||||
set(LIBCXXABI_ENABLE_THREADS OFF CACHE BOOL "")
|
||||
set(LIBCXXABI_USE_LLVM_UNWINDER OFF CACHE BOOL "")
|
||||
|
||||
# Test configuration.
|
||||
set(LIBCXX_TEST_CONFIG "nvptx-libc++-shared.cfg.in" CACHE STRING "")
|
||||
set(LIBCXX_TEST_PARAMS "optimization=none;long_tests=False;executor=nvptx-loader" CACHE STRING "")
|
||||
|
||||
# Necessary compile flags for NVPTX.
|
||||
set(LIBCXX_ADDITIONAL_COMPILE_FLAGS
|
||||
"-nogpulib;-flto;-fconvergent-functions;--cuda-feature=+ptx63" CACHE STRING "")
|
||||
|
29
libcxx/test/configs/amdgpu-libc++-shared.cfg.in
Normal file
29
libcxx/test/configs/amdgpu-libc++-shared.cfg.in
Normal file
@ -0,0 +1,29 @@
|
||||
lit_config.load_config(config, '@CMAKE_CURRENT_BINARY_DIR@/cmake-bridge.cfg')
|
||||
|
||||
config.substitutions.append(('%{flags}',
|
||||
f'--target={config.target_triple} -Wno-multi-gpu -flto -mcpu=native'))
|
||||
config.substitutions.append(('%{compile_flags}',
|
||||
'-nogpulib -fno-builtin-printf -I %{include-dir} '
|
||||
'-I %{target-include-dir} -I %{libcxx-dir}/test/support'
|
||||
))
|
||||
config.substitutions.append(('%{link_flags}',
|
||||
'-nostdlib++ -startfiles -stdlib '
|
||||
'-Wl,-mllvm,-amdgpu-lower-global-ctor-dtor=0 '
|
||||
'-L %{lib-dir} -lc++ -lc++abi -lclang_rt.builtins'
|
||||
))
|
||||
|
||||
config.substitutions.append(('%{exec}',
|
||||
'%{executor}'
|
||||
))
|
||||
|
||||
config.stdlib = 'llvm-libc++'
|
||||
|
||||
import os, site
|
||||
site.addsitedir(os.path.join('@LIBCXX_SOURCE_DIR@', 'utils'))
|
||||
import libcxx.test.params, libcxx.test.config
|
||||
libcxx.test.config.configure(
|
||||
libcxx.test.params.DEFAULT_PARAMETERS,
|
||||
libcxx.test.features.DEFAULT_FEATURES,
|
||||
config,
|
||||
lit_config
|
||||
)
|
30
libcxx/test/configs/nvptx-libc++-shared.cfg.in
Normal file
30
libcxx/test/configs/nvptx-libc++-shared.cfg.in
Normal file
@ -0,0 +1,30 @@
|
||||
lit_config.load_config(config, '@CMAKE_CURRENT_BINARY_DIR@/cmake-bridge.cfg')
|
||||
|
||||
config.substitutions.append(('%{flags}',
|
||||
f'--target={config.target_triple} -Wno-multi-gpu -flto -march=native'))
|
||||
config.substitutions.append(('%{compile_flags}',
|
||||
'-nogpulib -fno-builtin-printf -I %{include-dir} '
|
||||
'-I %{target-include-dir} -I %{libcxx-dir}/test/support'
|
||||
))
|
||||
config.substitutions.append(('%{link_flags}',
|
||||
'-nostdlib++ -startfiles -stdlib '
|
||||
'-L %{lib-dir} -lc++ -lc++abi '
|
||||
'-Wl,--suppress-stack-size-warning '
|
||||
'-Wl,-mllvm,-nvptx-lower-global-ctor-dtor=1 '
|
||||
'-Wl,-mllvm,-nvptx-emit-init-fini-kernel'
|
||||
))
|
||||
config.substitutions.append(('%{exec}',
|
||||
'%{executor} --no-parallelism'
|
||||
))
|
||||
|
||||
config.stdlib = 'llvm-libc++'
|
||||
|
||||
import os, site
|
||||
site.addsitedir(os.path.join('@LIBCXX_SOURCE_DIR@', 'utils'))
|
||||
import libcxx.test.params, libcxx.test.config
|
||||
libcxx.test.config.configure(
|
||||
libcxx.test.params.DEFAULT_PARAMETERS,
|
||||
libcxx.test.features.DEFAULT_FEATURES,
|
||||
config,
|
||||
lit_config
|
||||
)
|
@ -6,6 +6,10 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// FIXME: This takes over an hour to compile, disable for now.
|
||||
// UNSUPPORTED: LIBCXX-AMDGPU-FIXME
|
||||
// UNSUPPORTED: LIBCXX-NVPTX-FIXME
|
||||
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20
|
||||
// UNSUPPORTED: GCC-ALWAYS_INLINE-FIXME
|
||||
|
||||
|
@ -6,6 +6,10 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// FIXME: This takes over an hour to compile, disable for now.
|
||||
// UNSUPPORTED: LIBCXX-AMDGPU-FIXME
|
||||
// UNSUPPORTED: LIBCXX-NVPTX-FIXME
|
||||
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20
|
||||
// ADDITIONAL_COMPILE_FLAGS(has-fconstexpr-steps): -fconstexpr-steps=10000000
|
||||
// ADDITIONAL_COMPILE_FLAGS(has-fconstexpr-ops-limit): -fconstexpr-ops-limit=70000000
|
||||
|
@ -496,6 +496,14 @@ DEFAULT_FEATURES += [
|
||||
""",
|
||||
),
|
||||
),
|
||||
Feature(
|
||||
name="LIBCXX-AMDGPU-FIXME",
|
||||
when=lambda cfg: "__AMDGPU__" in compilerMacros(cfg),
|
||||
),
|
||||
Feature(
|
||||
name="LIBCXX-NVPTX-FIXME",
|
||||
when=lambda cfg: "__NVPTX__" in compilerMacros(cfg),
|
||||
),
|
||||
Feature(
|
||||
name="can-create-symlinks",
|
||||
when=lambda cfg: "_WIN32" not in compilerMacros(cfg)
|
||||
|
Loading…
x
Reference in New Issue
Block a user