2121
2222using namespace sycl ;
2323
24+ namespace oneapiext = ext::oneapi::experimental;
25+
2426size_t GEventsWaitCounter = 0 ;
2527
2628inline ur_result_t redefinedEventsWaitWithBarrier (void *pParams) {
@@ -49,20 +51,20 @@ TEST_F(SchedulerTest, InOrderQueueHostTaskDeps) {
4951}
5052
5153enum class CommandType { KERNEL = 1 , MEMSET = 2 , HOST_TASK = 3 };
52- std::vector<std::pair <CommandType, size_t >> ExecutedCommands;
54+ std::vector<std::tuple <CommandType, size_t , size_t >> ExecutedCommands;
5355
5456inline ur_result_t customEnqueueKernelLaunchWithArgsExp (void *pParams) {
5557 auto params =
5658 *static_cast <ur_enqueue_kernel_launch_with_args_exp_params_t *>(pParams);
57- ExecutedCommands.push_back (
58- {CommandType::KERNEL, * params.pnumEventsInWaitList });
59+ ExecutedCommands.push_back ({CommandType::KERNEL, *params. pnumEventsInWaitList ,
60+ ** params.ppGlobalWorkSize });
5961 return UR_RESULT_SUCCESS;
6062}
6163
6264inline ur_result_t customEnqueueUSMFill (void *pParams) {
6365 auto params = *static_cast <ur_enqueue_usm_fill_params_t *>(pParams);
6466 ExecutedCommands.push_back (
65- {CommandType::MEMSET, *params.pnumEventsInWaitList });
67+ {CommandType::MEMSET, *params.pnumEventsInWaitList , 0 });
6668 return UR_RESULT_SUCCESS;
6769}
6870
@@ -92,6 +94,7 @@ TEST_F(SchedulerTest, InOrderQueueCrossDeps) {
9294 CGH.host_task ([&] {
9395 std::unique_lock<std::mutex> lk (CvMutex);
9496 Cv.wait (lk, [&ready] { return ready; });
97+ ExecutedCommands.push_back ({CommandType::HOST_TASK, 0 , 0 });
9598 });
9699 });
97100
@@ -113,11 +116,15 @@ TEST_F(SchedulerTest, InOrderQueueCrossDeps) {
113116
114117 InOrderQueue.wait ();
115118
116- ASSERT_EQ (ExecutedCommands.size (), 2u );
117- EXPECT_EQ (ExecutedCommands[0 ].first /* CommandType*/ , CommandType::MEMSET);
118- EXPECT_EQ (ExecutedCommands[0 ].second /* EventsCount*/ , 0u );
119- EXPECT_EQ (ExecutedCommands[1 ].first /* CommandType*/ , CommandType::KERNEL);
120- EXPECT_EQ (ExecutedCommands[1 ].second /* EventsCount*/ , 0u );
119+ ASSERT_EQ (ExecutedCommands.size (), 3u );
120+ EXPECT_EQ (std::get<0 >(ExecutedCommands[0 ]) /* CommandType*/ ,
121+ CommandType::HOST_TASK);
122+ EXPECT_EQ (std::get<0 >(ExecutedCommands[1 ]) /* CommandType*/ ,
123+ CommandType::MEMSET);
124+ EXPECT_EQ (std::get<1 >(ExecutedCommands[1 ]) /* EventsCount*/ , 0u );
125+ EXPECT_EQ (std::get<0 >(ExecutedCommands[2 ]) /* CommandType*/ ,
126+ CommandType::KERNEL);
127+ EXPECT_EQ (std::get<1 >(ExecutedCommands[2 ]) /* EventsCount*/ , 0u );
121128}
122129
123130TEST_F (SchedulerTest, InOrderQueueCrossDepsShortcutFuncs) {
@@ -142,6 +149,7 @@ TEST_F(SchedulerTest, InOrderQueueCrossDepsShortcutFuncs) {
142149 CGH.host_task ([&] {
143150 std::unique_lock<std::mutex> lk (CvMutex);
144151 Cv.wait (lk, [&ready] { return ready; });
152+ ExecutedCommands.push_back ({CommandType::HOST_TASK, 0 , 0 });
145153 });
146154 });
147155
@@ -159,11 +167,15 @@ TEST_F(SchedulerTest, InOrderQueueCrossDepsShortcutFuncs) {
159167
160168 InOrderQueue.wait ();
161169
162- ASSERT_EQ (ExecutedCommands.size (), 2u );
163- EXPECT_EQ (ExecutedCommands[0 ].first /* CommandType*/ , CommandType::MEMSET);
164- EXPECT_EQ (ExecutedCommands[0 ].second /* EventsCount*/ , 0u );
165- EXPECT_EQ (ExecutedCommands[1 ].first /* CommandType*/ , CommandType::KERNEL);
166- EXPECT_EQ (ExecutedCommands[1 ].second /* EventsCount*/ , 0u );
170+ ASSERT_EQ (ExecutedCommands.size (), 3u );
171+ EXPECT_EQ (std::get<0 >(ExecutedCommands[0 ]) /* CommandType*/ ,
172+ CommandType::HOST_TASK);
173+ EXPECT_EQ (std::get<0 >(ExecutedCommands[1 ]) /* CommandType*/ ,
174+ CommandType::MEMSET);
175+ EXPECT_EQ (std::get<1 >(ExecutedCommands[1 ]) /* EventsCount*/ , 0u );
176+ EXPECT_EQ (std::get<0 >(ExecutedCommands[2 ]) /* CommandType*/ ,
177+ CommandType::KERNEL);
178+ EXPECT_EQ (std::get<1 >(ExecutedCommands[2 ]) /* EventsCount*/ , 0u );
167179}
168180
169181TEST_F (SchedulerTest, InOrderQueueCrossDepsShortcutFuncsParallelFor) {
@@ -186,7 +198,7 @@ TEST_F(SchedulerTest, InOrderQueueCrossDepsShortcutFuncsParallelFor) {
186198 CGH.host_task ([&] {
187199 std::unique_lock<std::mutex> lk (CvMutex);
188200 Cv.wait (lk, [&ready] { return ready; });
189- ExecutedCommands.push_back ({CommandType::HOST_TASK, 0 });
201+ ExecutedCommands.push_back ({CommandType::HOST_TASK, 0 , 0 });
190202 });
191203 });
192204
@@ -202,8 +214,61 @@ TEST_F(SchedulerTest, InOrderQueueCrossDepsShortcutFuncsParallelFor) {
202214 InOrderQueue.wait ();
203215
204216 ASSERT_EQ (ExecutedCommands.size (), 2u );
205- EXPECT_EQ (ExecutedCommands[0 ].first /* CommandType*/ , CommandType::HOST_TASK);
206- EXPECT_EQ (ExecutedCommands[0 ].second /* EventsCount*/ , 0u );
207- EXPECT_EQ (ExecutedCommands[1 ].first /* CommandType*/ , CommandType::KERNEL);
208- EXPECT_EQ (ExecutedCommands[1 ].second /* EventsCount*/ , 0u );
217+ EXPECT_EQ (std::get<0 >(ExecutedCommands[0 ]) /* CommandType*/ ,
218+ CommandType::HOST_TASK);
219+ EXPECT_EQ (std::get<1 >(ExecutedCommands[0 ]) /* EventsCount*/ , 0u );
220+ EXPECT_EQ (std::get<0 >(ExecutedCommands[1 ]) /* CommandType*/ ,
221+ CommandType::KERNEL);
222+ EXPECT_EQ (std::get<1 >(ExecutedCommands[1 ]) /* EventsCount*/ , 0u );
223+ }
224+
225+ TEST_F (SchedulerTest, InOrderQueueCrossDepsEnqueueFunctions) {
226+ ExecutedCommands.clear ();
227+ sycl::unittest::UrMock<> Mock;
228+ mock::getCallbacks ().set_before_callback (
229+ " urEnqueueKernelLaunchWithArgsExp" ,
230+ &customEnqueueKernelLaunchWithArgsExp);
231+
232+ sycl::platform Plt = sycl::platform ();
233+
234+ context Ctx{Plt};
235+ queue InOrderQueue{Ctx, default_selector_v, property::queue::in_order ()};
236+
237+ std::mutex CvMutex;
238+ std::condition_variable Cv;
239+ bool ready = false ;
240+
241+ InOrderQueue.submit ([&](sycl::handler &CGH) {
242+ CGH.host_task ([&] {
243+ std::unique_lock<std::mutex> lk (CvMutex);
244+ Cv.wait (lk, [&ready] { return ready; });
245+ ExecutedCommands.push_back ({CommandType::HOST_TASK, 0 , 0 });
246+ });
247+ });
248+
249+ oneapiext::nd_launch<TestKernel>(
250+ InOrderQueue, nd_range<1 >{range<1 >{32 }, range<1 >{32 }}, [](nd_item<1 >) {});
251+
252+ oneapiext::nd_launch<TestKernel>(
253+ InOrderQueue, nd_range<1 >{range<1 >{64 }, range<1 >{32 }}, [](nd_item<1 >) {});
254+
255+ {
256+ std::unique_lock<std::mutex> lk (CvMutex);
257+ ready = true ;
258+ }
259+ Cv.notify_one ();
260+
261+ InOrderQueue.wait ();
262+
263+ ASSERT_EQ (ExecutedCommands.size (), 3u );
264+ EXPECT_EQ (std::get<0 >(ExecutedCommands[0 ]) /* CommandType*/ ,
265+ CommandType::HOST_TASK);
266+ EXPECT_EQ (std::get<0 >(ExecutedCommands[1 ]) /* CommandType*/ ,
267+ CommandType::KERNEL);
268+ EXPECT_EQ (std::get<1 >(ExecutedCommands[1 ]) /* EventsCount*/ , 0u );
269+ EXPECT_EQ (std::get<2 >(ExecutedCommands[1 ]) /* GlobalWorkSize*/ , 32u );
270+ EXPECT_EQ (std::get<0 >(ExecutedCommands[2 ]) /* CommandType*/ ,
271+ CommandType::KERNEL);
272+ EXPECT_EQ (std::get<1 >(ExecutedCommands[2 ]) /* EventsCount*/ , 0u );
273+ EXPECT_EQ (std::get<2 >(ExecutedCommands[2 ]) /* GlobalWorkSize*/ , 64u );
209274}
0 commit comments