[libcxx-commits] [libcxx] [libc++] Reduce the compilation time required by SIMD tests (PR #72602)
Louis Dionne via libcxx-commits
libcxx-commits at lists.llvm.org
Thu Nov 16 18:50:31 PST 2023
https://github.com/ldionne created https://github.com/llvm/llvm-project/pull/72602
Testing all the SIMD widths exhaustively is nice in theory, however in practice it leads to extremely slow tests. Given that
1. our testing resources are finite and actually pretty costly
2. we have thousands of other tests we also need to run
3. the value of executing these SIMD tests for absolutely all supported SIMD widths is fairly small compared to cherry-picking a few relevant widths
I think it makes a lot of sense to reduce the exhaustiveness of these tests. I'm getting a ~4x speedup for the worst offender (reference_assignment.pass.cpp) after this patch.
I'd also like to make this a reminder to anyone seeing this PR that tests impact everyone's productivity. Slow unit tests contribute to making the CI slower as a whole, and that has a direct impact on everyone's ability to iterate quickly during PRs. Even though we have a pretty robust CI setup in place, we should remember that it doesn't come for free and should strive to keep our tests at a good bang for the buck ratio.
>From ecb8baef66e76e0e55a7a7cb44416a03198ea32d Mon Sep 17 00:00:00 2001
From: Louis Dionne <ldionne.2 at gmail.com>
Date: Thu, 16 Nov 2023 21:40:56 -0500
Subject: [PATCH] [libc++] Reduce the compilation time required by SIMD tests
Testing all the SIMD widths exhaustively is nice in theory, however in
practice it leads to extremely slow tests. Given that
1. our testing resources are finite and actually pretty costly
2. we have thousands of other tests we also need to run
3. the value of executing these SIMD tests for absolutely all supported
SIMD widths is fairly small compared to cherry-picking a few relevant
widths
I think it makes a lot of sense to reduce the exhaustiveness of these
tests. I'm getting a ~4x speedup for the worst offender (reference_assignment.pass.cpp)
after this patch.
I'd also like to make this a reminder to anyone seeing this PR that
tests impact everyone's productivity. Slow unit tests contribute to
making the CI slower as a whole, and that has a direct impact on
everyone's ability to iterate quickly during PRs. Even though we have
a pretty robust CI setup in place, we should remember that it doesn't
come for free and should strive to keep our tests at a good bang for
the buck ratio.
---
libcxx/test/std/experimental/simd/test_utils.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/libcxx/test/std/experimental/simd/test_utils.h b/libcxx/test/std/experimental/simd/test_utils.h
index a478a43a87271cf..6954689d0876da7 100644
--- a/libcxx/test/std/experimental/simd/test_utils.h
+++ b/libcxx/test/std/experimental/simd/test_utils.h
@@ -28,7 +28,7 @@ struct TestAllSimdAbiFunctor {
template <class T, std::size_t... Ns>
void instantiate_with_n(std::index_sequence<Ns...>) {
- (types::for_each(sized_abis<T, Ns + 1>{}, F<T, Ns + 1>{}), ...);
+ (types::for_each(sized_abis<T, Ns>{}, F<T, Ns>{}), ...);
}
template <class T>
@@ -36,7 +36,7 @@ struct TestAllSimdAbiFunctor {
using abis = types::type_list<ex::simd_abi::scalar, ex::simd_abi::native<T>, ex::simd_abi::compatible<T>>;
types::for_each(abis{}, F<T, 1>());
- instantiate_with_n<T>(std::make_index_sequence<max_simd_size - 1>{});
+ instantiate_with_n<T>(std::index_sequence<1, 2, 8, 16, max_simd_size - 2, max_simd_size - 1, max_simd_size>{});
}
};
More information about the libcxx-commits
mailing list