Skip to content

Commit bb99d97

Browse files
committed
check non-trivial signal sending
1 parent 452f228 commit bb99d97

1 file changed

Lines changed: 25 additions & 4 deletions

File tree

test/ck_tile/gemm_persistent_async_input/test_gemm_persistent_async_input.cpp

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
#include "ck_tile/host/kernel_launch.hpp"
1010
#include "ck_tile/core/utility/persistent_async_input_scheduler.hpp"
1111

12+
#include <chrono>
13+
#include <thread>
14+
1215
using Row = ck_tile::tensor_layout::gemm::RowMajor;
1316
using Col = ck_tile::tensor_layout::gemm::ColumnMajor;
1417
using F16 = ck_tile::fp16_t;
@@ -193,15 +196,33 @@ class TestGemmPersistentAsyncInput : public ::testing::Test
193196
return;
194197
}
195198

199+
// Create a separate stream for setting signals
200+
// Using the same stream would deadlock - memcpy waits for kernel, kernel waits for signal
201+
hipStream_t signal_stream;
202+
HIP_CHECK_ERROR(hipStreamCreateWithFlags(&signal_stream, hipStreamNonBlocking));
203+
196204
// Launch kernel
197205
ck_tile::ignore = ck_tile::launch_kernel(
198206
stream_cfg,
199207
ck_tile::make_kernel<kBlockPerCu>(Kernel{}, grids, blocks, 0, kargs));
200208

201-
// Simulate setting chunk signals (would normally be done by producer)
202-
// For testing, we just set all signals to allow kernel completion
203-
std::vector<uint32_t> host_signals(num_chunks, 1);
204-
signal_buf.ToDevice(host_signals.data());
209+
// Simulate producer setting chunk signals with interleaved sleep
210+
// This simulates async input becoming available over time
211+
const int sleep_us = 100; // microseconds between chunks
212+
for(ck_tile::index_t i = 0; i < num_chunks; ++i)
213+
{
214+
std::this_thread::sleep_for(std::chrono::microseconds(sleep_us));
215+
const uint32_t signal_val = 1;
216+
HIP_CHECK_ERROR(hipMemcpyAsync(d_chunk_signals + i,
217+
&signal_val,
218+
sizeof(uint32_t),
219+
hipMemcpyHostToDevice,
220+
signal_stream));
221+
}
222+
223+
// Wait for all signals to be set
224+
HIP_CHECK_ERROR(hipStreamSynchronize(signal_stream));
225+
HIP_CHECK_ERROR(hipStreamDestroy(signal_stream));
205226

206227
// Wait for kernel completion
207228
HIP_CHECK_ERROR(hipDeviceSynchronize());

0 commit comments

Comments
 (0)