@@ -38,21 +38,19 @@ struct LaunchKernelTestBase : OffloadQueueTest {
3838 ol_kernel_launch_size_args_t LaunchArgs{};
3939};
4040
41- struct olLaunchKernelTest : LaunchKernelTestBase {
42- void SetUp () override {
43- RETURN_ON_FATAL_FAILURE (LaunchKernelTestBase::SetUpKernel (" foo" ));
44- }
45- };
46- OFFLOAD_TESTS_INSTANTIATE_DEVICE_FIXTURE (olLaunchKernelTest);
47-
48- struct olLaunchKernelNoArgsTest : LaunchKernelTestBase {
49- void SetUp () override {
50- RETURN_ON_FATAL_FAILURE (LaunchKernelTestBase::SetUpKernel (" noargs" ));
51- }
52- };
53- OFFLOAD_TESTS_INSTANTIATE_DEVICE_FIXTURE (olLaunchKernelNoArgsTest);
54-
55- TEST_P (olLaunchKernelTest, Success) {
41+ #define KERNEL_TEST (NAME, KERNEL ) \
42+ struct olLaunchKernel ##NAME##Test : LaunchKernelTestBase { \
43+ void SetUp () override { LaunchKernelTestBase::SetUpKernel (#KERNEL); } \
44+ }; \
45+ OFFLOAD_TESTS_INSTANTIATE_DEVICE_FIXTURE (olLaunchKernel##NAME##Test);
46+
47+ KERNEL_TEST (Foo, foo)
48+ KERNEL_TEST(NoArgs, noargs)
49+ KERNEL_TEST(LocalMem, localmem)
50+ KERNEL_TEST(LocalMemReduction, localmem_reduction)
51+ KERNEL_TEST(LocalMemStatic, localmem_static)
52+
53+ TEST_P(olLaunchKernelFooTest, Success) {
5654 void *Mem;
5755 ASSERT_SUCCESS (olMemAlloc (Device, OL_ALLOC_TYPE_MANAGED,
5856 LaunchArgs.GroupSize .x * sizeof (uint32_t ), &Mem));
@@ -80,7 +78,7 @@ TEST_P(olLaunchKernelNoArgsTest, Success) {
8078 ASSERT_SUCCESS (olWaitQueue (Queue));
8179}
8280
83- TEST_P (olLaunchKernelTest , SuccessSynchronous) {
81+ TEST_P (olLaunchKernelFooTest , SuccessSynchronous) {
8482 void *Mem;
8583 ASSERT_SUCCESS (olMemAlloc (Device, OL_ALLOC_TYPE_MANAGED,
8684 LaunchArgs.GroupSize .x * sizeof (uint32_t ), &Mem));
@@ -99,3 +97,74 @@ TEST_P(olLaunchKernelTest, SuccessSynchronous) {
9997
10098 ASSERT_SUCCESS (olMemFree (Mem));
10199}
100+
101+ TEST_P (olLaunchKernelLocalMemTest, Success) {
102+ LaunchArgs.NumGroups .x = 4 ;
103+ LaunchArgs.DynSharedMemory = 64 * sizeof (uint32_t );
104+
105+ void *Mem;
106+ ASSERT_SUCCESS (olMemAlloc (Device, OL_ALLOC_TYPE_MANAGED,
107+ LaunchArgs.GroupSize .x * LaunchArgs.NumGroups .x *
108+ sizeof (uint32_t ),
109+ &Mem));
110+ struct {
111+ void *Mem;
112+ } Args{Mem};
113+
114+ ASSERT_SUCCESS (olLaunchKernel (Queue, Device, Kernel, &Args, sizeof (Args),
115+ &LaunchArgs, nullptr ));
116+
117+ ASSERT_SUCCESS (olWaitQueue (Queue));
118+
119+ uint32_t *Data = (uint32_t *)Mem;
120+ for (uint32_t i = 0 ; i < LaunchArgs.GroupSize .x * LaunchArgs.NumGroups .x ; i++)
121+ ASSERT_EQ (Data[i], (i % 64 ) * 2 );
122+
123+ ASSERT_SUCCESS (olMemFree (Mem));
124+ }
125+
126+ TEST_P (olLaunchKernelLocalMemReductionTest, Success) {
127+ LaunchArgs.NumGroups .x = 4 ;
128+ LaunchArgs.DynSharedMemory = 64 * sizeof (uint32_t );
129+
130+ void *Mem;
131+ ASSERT_SUCCESS (olMemAlloc (Device, OL_ALLOC_TYPE_MANAGED,
132+ LaunchArgs.NumGroups .x * sizeof (uint32_t ), &Mem));
133+ struct {
134+ void *Mem;
135+ } Args{Mem};
136+
137+ ASSERT_SUCCESS (olLaunchKernel (Queue, Device, Kernel, &Args, sizeof (Args),
138+ &LaunchArgs, nullptr ));
139+
140+ ASSERT_SUCCESS (olWaitQueue (Queue));
141+
142+ uint32_t *Data = (uint32_t *)Mem;
143+ for (uint32_t i = 0 ; i < LaunchArgs.NumGroups .x ; i++)
144+ ASSERT_EQ (Data[i], 2 * LaunchArgs.GroupSize .x );
145+
146+ ASSERT_SUCCESS (olMemFree (Mem));
147+ }
148+
149+ TEST_P (olLaunchKernelLocalMemStaticTest, Success) {
150+ LaunchArgs.NumGroups .x = 4 ;
151+ LaunchArgs.DynSharedMemory = 0 ;
152+
153+ void *Mem;
154+ ASSERT_SUCCESS (olMemAlloc (Device, OL_ALLOC_TYPE_MANAGED,
155+ LaunchArgs.NumGroups .x * sizeof (uint32_t ), &Mem));
156+ struct {
157+ void *Mem;
158+ } Args{Mem};
159+
160+ ASSERT_SUCCESS (olLaunchKernel (Queue, Device, Kernel, &Args, sizeof (Args),
161+ &LaunchArgs, nullptr ));
162+
163+ ASSERT_SUCCESS (olWaitQueue (Queue));
164+
165+ uint32_t *Data = (uint32_t *)Mem;
166+ for (uint32_t i = 0 ; i < LaunchArgs.NumGroups .x ; i++)
167+ ASSERT_EQ (Data[i], 2 * LaunchArgs.GroupSize .x );
168+
169+ ASSERT_SUCCESS (olMemFree (Mem));
170+ }
0 commit comments