@@ -239,10 +239,6 @@ TEST_CASE("SilentDependentAsync.SimpleGraph.16threads" * doctest::timeout(300))
239
239
// Simple Graph 2
240
240
// ----------------------------------------------------------------------------
241
241
242
- // --------------------------------------------------------------------
243
- // Graph 2
244
- // --------------------------------------------------------------------
245
- //
246
242
// task dependence :
247
243
// ----------------------------
248
244
// | |--> 3 --| |
@@ -418,6 +414,195 @@ TEST_CASE("SilentDependentAsync.SimpleGraph2.16threads" * doctest::timeout(300))
418
414
silent_dependent_async_simple_graph_2 (16 );
419
415
}
420
416
417
+ // task dependence :
418
+ // ----------------------------
419
+ // | |--> 3 --| |
420
+ // | | --> 7 --->|
421
+ // 0 ---| |--> 4 --| |
422
+ // v ^ v
423
+ // --> 2 --| ---------------------> 9
424
+ // ^ v ^
425
+ // 1 ---| |--> 5 --| |
426
+ // | | --> 8 --->|
427
+ // | |--> 6 --| |
428
+ // -----------------------------
429
+ void dependent_async_simple_graph_2 (unsigned W) {
430
+
431
+ tf::Executor executor (W);
432
+
433
+ size_t count = 10 ;
434
+ std::vector<tf::CachelineAligned<int >> results (count);
435
+ std::vector<tf::AsyncTask> tasks1;
436
+ std::vector<tf::AsyncTask> tasks2;
437
+ std::vector<tf::AsyncTask> tasks3;
438
+ std::vector<tf::AsyncTask> tasks4;
439
+
440
+ for (int id = 0 ; id < 100 ; ++id) {
441
+
442
+ results.resize (count);
443
+
444
+ auto t0 = executor.silent_dependent_async (
445
+ " t0" , [&](){
446
+ results[0 ].data = 100 + id;
447
+ }
448
+ );
449
+
450
+ auto t1 = executor.silent_dependent_async (
451
+ " t1" , [&](){
452
+ results[1 ].data = 6 * id;
453
+ }
454
+ );
455
+
456
+ auto t2 = executor.silent_dependent_async (
457
+ " t2" , [&](){
458
+ results[2 ].data = results[0 ].data + results[1 ].data + id;
459
+ }, t0, t1
460
+ );
461
+
462
+ tasks1.push_back (t2);
463
+
464
+ auto [t3, fu3] = executor.dependent_async (
465
+ " t3" , [&](){
466
+ results[3 ].data = results[2 ].data + id;
467
+ return results[3 ].data ;
468
+ }, tasks1.begin (), tasks1.end ()
469
+ );
470
+
471
+ auto t4 = executor.silent_dependent_async (
472
+ " t4" , [&](){
473
+ results[4 ].data = results[2 ].data + id;
474
+ }, tasks1.begin (), tasks1.end ()
475
+ );
476
+
477
+ auto [t5, fu5] = executor.dependent_async (
478
+ " t5" , [&](){
479
+ results[5 ].data = results[2 ].data + id;
480
+ return results[5 ].data ;
481
+ }, tasks1.begin (), tasks1.end ()
482
+ );
483
+
484
+ auto t6 = executor.silent_dependent_async (
485
+ " t6" , [&](){
486
+ results[6 ].data = results[2 ].data + id;
487
+ }, tasks1.begin (), tasks1.end ()
488
+ );
489
+
490
+ tasks2.push_back (t3);
491
+ tasks2.push_back (t4);
492
+ tasks3.push_back (t5);
493
+ tasks3.push_back (t6);
494
+
495
+ auto [t7, fu7] = executor.dependent_async (
496
+ " t7" , [&](){
497
+ results[7 ].data = results[3 ].data + results[4 ].data + id;
498
+ return results[7 ].data ;
499
+ }, tasks2.begin (), tasks2.end ()
500
+ );
501
+
502
+ auto t8 = executor.silent_dependent_async (
503
+ " t8" , [&](){
504
+ results[8 ].data = results[5 ].data + results[6 ].data + id;
505
+ }, tasks3.begin (), tasks3.end ()
506
+ );
507
+
508
+ tasks4.push_back (t0);
509
+ tasks4.push_back (t1);
510
+ tasks4.push_back (t2);
511
+ tasks4.push_back (t7);
512
+ tasks4.push_back (t8);
513
+
514
+ auto [t9, fu9] = executor.dependent_async (
515
+ " t9" , [&](){
516
+ results[9 ].data = results[0 ].data + results[1 ].data +
517
+ results[2 ].data + results[7 ].data + results[8 ].data + id;
518
+ return results[9 ].data ;
519
+ }, tasks4.begin (), tasks4.end ()
520
+ );
521
+
522
+
523
+ REQUIRE (fu9.get () == results[9 ].data );
524
+
525
+ REQUIRE (fu3.wait_for (std::chrono::microseconds (1 )) == std::future_status::ready);
526
+ REQUIRE (fu3.get () == results[3 ].data );
527
+
528
+ REQUIRE (fu5.wait_for (std::chrono::microseconds (1 )) == std::future_status::ready);
529
+ REQUIRE (fu5.get () == results[5 ].data );
530
+
531
+ REQUIRE (fu7.wait_for (std::chrono::microseconds (1 )) == std::future_status::ready);
532
+ REQUIRE (fu7.get () == results[7 ].data );
533
+
534
+ for (size_t i = 0 ; i < count; ++i) {
535
+ switch (i) {
536
+ case 0 :
537
+ REQUIRE (results[i].data == 100 + id);
538
+ break ;
539
+
540
+ case 1 :
541
+ REQUIRE (results[i].data == 6 * id);
542
+ break ;
543
+
544
+ case 2 :
545
+ REQUIRE (results[i].data == results[0 ].data + results[1 ].data + id);
546
+ break ;
547
+
548
+ case 3 :
549
+ REQUIRE (results[i].data == results[2 ].data + id);
550
+ break ;
551
+
552
+ case 4 :
553
+ REQUIRE (results[i].data == results[2 ].data + id);
554
+ break ;
555
+
556
+ case 5 :
557
+ REQUIRE (results[i].data == results[2 ].data + id);
558
+ break ;
559
+
560
+ case 6 :
561
+ REQUIRE (results[i].data == results[2 ].data + id);
562
+ break ;
563
+
564
+ case 7 :
565
+ REQUIRE (results[i].data == results[3 ].data + results[4 ].data + id);
566
+ break ;
567
+
568
+ case 8 :
569
+ REQUIRE (results[i].data == results[5 ].data + results[5 ].data + id);
570
+ break ;
571
+
572
+ case 9 :
573
+ REQUIRE (results[i].data == results[0 ].data + results[1 ].data +
574
+ results[2 ].data + results[7 ].data + results[8 ].data + id);
575
+ break ;
576
+ }
577
+ }
578
+
579
+ results.clear ();
580
+ tasks1.clear ();
581
+ tasks2.clear ();
582
+ tasks3.clear ();
583
+ tasks4.clear ();
584
+ }
585
+ }
586
+
587
+ TEST_CASE (" DependentAsync.SimpleGraph2.1thread" * doctest::timeout (300 )) {
588
+ dependent_async_simple_graph_2 (1 );
589
+ }
590
+
591
+ TEST_CASE (" DependentAsync.SimpleGraph2.2threads" * doctest::timeout (300 )) {
592
+ dependent_async_simple_graph_2 (2 );
593
+ }
594
+
595
+ TEST_CASE (" DependentAsync.SimpleGraph2.4threads" * doctest::timeout (300 )) {
596
+ dependent_async_simple_graph_2 (4 );
597
+ }
598
+
599
+ TEST_CASE (" DependentAsync.SimpleGraph2.8threads" * doctest::timeout (300 )) {
600
+ dependent_async_simple_graph_2 (8 );
601
+ }
602
+
603
+ TEST_CASE (" DependentAsync.SimpleGraph2.16threads" * doctest::timeout (300 )) {
604
+ dependent_async_simple_graph_2 (16 );
605
+ }
421
606
422
607
// ----------------------------------------------------------------------------
423
608
// Binary Tree
0 commit comments