diff --git a/tests/regression/idle/kernel.cpp b/tests/regression/idle/kernel.cpp index 3d3f0c6f..ccd9bcc5 100644 --- a/tests/regression/idle/kernel.cpp +++ b/tests/regression/idle/kernel.cpp @@ -12,23 +12,28 @@ #define HW_TID() ({uint32_t gtid; asm volatile ("csrr %0, mhartid" : "=r" (gtid)); gtid;}) void kernel_body(int task_id, kernel_arg_t *__UNIFORM__ arg) { - constexpr uint32_t timer = 50000; - uint32_t counter = 0; - while ((counter++) < timer) { - asm(""); - } + // constexpr uint32_t timer = 50000; + // uint32_t counter = 0; + // while ((counter++) < timer) { + // asm(""); + // } + // // to prevent optimize-out // reinterpret_cast(arg->addr_c)[0] = counter; + // call barrier in a divergent branch, which will hang the core + if ((vx_thread_id() % NUM_THREADS) == 0) { + vx_barrier(0, NUM_WARPS); + } + vx_tmc(0); } int main() { kernel_arg_t *arg = (kernel_arg_t *)KERNEL_ARG_DEV_MEM_ADDR; - // const uint32_t num_threads_in_cluster = NUM_THREADS_IN_CLUSTER; - // const uint32_t grid_size = num_threads_in_cluster * NUM_CLUSTERS; - const uint32_t grid_size = 1; + // spawn a single warp in every core + const uint32_t grid_size = NUM_THREADS * NUM_CORES; #ifdef RADIANCE vx_spawn_tasks_cluster(grid_size, (vx_spawn_tasks_cb)kernel_body, arg); #else