Testing the GPU libc library¶
Note
Running GPU tests with high parallelism is likely to cause spurious failures, out of resource errors, or indefinite hangs. limiting the number of threads used while testing is highly recommended.
Testing Infrastructure¶
The testing support in LLVM’s libc implementation for GPUs is designed to mimic
the standard unit tests as much as possible. We use the remote procedure call support to provide the necessary utilities like printing from
the GPU. Execution is performed by emitting a _start
kernel from the GPU
that is then called by an external loader utility. This is an example of how
this can be done manually:
$> clang++ crt1.o test.cpp --target=amdgcn-amd-amdhsa -mcpu=gfx90a -flto
$> ./amdhsa_loader --threads 1 --blocks 1 a.out
Test Passed!
Unlike the exported libcgpu.a
, the testing architecture can only support a
single architecture at a time. This is either detected automatically, or set
manually by the user using LIBC_GPU_TEST_ARCHITECTURE
. The latter is useful
in cases where the user does not build LLVM’s libc on machine with the GPU to
use for testing.