[libc-commits] [libc] a080798 - [libc] Test the RPC interface with multiple blocks
Joseph Huber via libc-commits
libc-commits at lists.llvm.org
Wed Apr 19 18:02:44 PDT 2023
Author: Joseph Huber
Date: 2023-04-19T20:02:33-05:00
New Revision: a080798fb2d2343704512ad6adbf9fe1e13eec96
URL: https://github.com/llvm/llvm-project/commit/a080798fb2d2343704512ad6adbf9fe1e13eec96
DIFF: https://github.com/llvm/llvm-project/commit/a080798fb2d2343704512ad6adbf9fe1e13eec96.diff
LOG: [libc] Test the RPC interface with multiple blocks
The RPC interface can support multiple independent clients. This support
currently only supports many single-thread warps / workgroups
coordinating over a single lock. This patch uses the support added in
the previous patch to test the RPC interface with multiple blocks.
Note that this does not work with multiple threads currently because of
the effect of warps / workgroups executing in lockstep incorrectly. This
will be added later.
Depends on D148485
Reviewed By: lntue, sivachandra
Differential Revision: https://reviews.llvm.org/D148486
Added:
Modified:
libc/cmake/modules/LLVMLibCTestRules.cmake
libc/test/integration/startup/gpu/CMakeLists.txt
libc/test/integration/startup/gpu/rpc_test.cpp
Removed:
################################################################################
diff --git a/libc/cmake/modules/LLVMLibCTestRules.cmake b/libc/cmake/modules/LLVMLibCTestRules.cmake
index f9da04c37c7fb..0ce5c80d7734a 100644
--- a/libc/cmake/modules/LLVMLibCTestRules.cmake
+++ b/libc/cmake/modules/LLVMLibCTestRules.cmake
@@ -421,7 +421,7 @@ function(add_integration_test test_name)
"INTEGRATION_TEST"
"" # No optional arguments
"SUITE" # Single value arguments
- "SRCS;HDRS;DEPENDS;ARGS;ENV;COMPILE_OPTIONS" # Multi-value arguments
+ "SRCS;HDRS;DEPENDS;ARGS;ENV;COMPILE_OPTIONS;LOADER_ARGS" # Multi-value arguments
${ARGN}
)
@@ -533,6 +533,7 @@ function(add_integration_test test_name)
${fq_target_name}
COMMAND ${INTEGRATION_TEST_ENV}
$<$<BOOL:${LIBC_TARGET_ARCHITECTURE_IS_GPU}>:${gpu_loader_exe}>
+ ${INTEGRATION_TEST_LOADER_ARGS}
$<TARGET_FILE:${fq_build_target_name}> ${INTEGRATION_TEST_ARGS}
COMMENT "Running integration test ${fq_target_name}"
)
diff --git a/libc/test/integration/startup/gpu/CMakeLists.txt b/libc/test/integration/startup/gpu/CMakeLists.txt
index a68873c539c18..bc44fe14bb313 100644
--- a/libc/test/integration/startup/gpu/CMakeLists.txt
+++ b/libc/test/integration/startup/gpu/CMakeLists.txt
@@ -20,4 +20,8 @@ add_integration_test(
rpc_test.cpp
DEPENDS
libc.src.__support.RPC.rpc_client
+ libc.src.__support.GPU.utils
+ LOADER_ARGS
+ --blocks 16
+ --threads 1
)
diff --git a/libc/test/integration/startup/gpu/rpc_test.cpp b/libc/test/integration/startup/gpu/rpc_test.cpp
index 3f823aecb15f9..0d3f13718d594 100644
--- a/libc/test/integration/startup/gpu/rpc_test.cpp
+++ b/libc/test/integration/startup/gpu/rpc_test.cpp
@@ -6,15 +6,16 @@
//
//===----------------------------------------------------------------------===//
+#include "src/__support/GPU/utils.h"
#include "src/__support/RPC/rpc_client.h"
#include "test/IntegrationTest/test.h"
using namespace __llvm_libc;
static void test_add_simple() {
- constexpr int num_additions = 10000;
+ uint32_t num_additions = 1000 + 10 * get_block_id_x();
uint64_t cnt = 0;
- for (int i = 0; i < num_additions; ++i) {
+ for (uint32_t i = 0; i < num_additions; ++i) {
rpc::Port port = rpc::client.open(rpc::TEST_INCREMENT);
port.send_and_recv(
[=](rpc::Buffer *buffer) {
@@ -30,5 +31,6 @@ static void test_add_simple() {
TEST_MAIN(int argc, char **argv, char **envp) {
test_add_simple();
+
return 0;
}
More information about the libc-commits
mailing list