@@ -576,22 +576,22 @@ class __SYCL_EXPORT handler {
576
576
577
577
// For 'id, item w/wo offset, nd_item' kernel arguments
578
578
template <class KernelType , class NormalizedKernelType , int Dims,
579
- typename KernelName >
579
+ bool StoreLocation >
580
580
KernelType *ResetHostKernelHelper (const KernelType &KernelFunc) {
581
581
NormalizedKernelType NormalizedKernel (KernelFunc);
582
582
auto NormalizedKernelFunc =
583
583
std::function<void (const sycl::nd_item<Dims> &)>(NormalizedKernel);
584
584
auto HostKernelPtr =
585
585
new detail::HostKernel<decltype (NormalizedKernelFunc),
586
- sycl::nd_item<Dims>, Dims, KernelName >(
586
+ sycl::nd_item<Dims>, Dims, StoreLocation >(
587
587
NormalizedKernelFunc);
588
588
MHostKernel.reset (HostKernelPtr);
589
589
return &HostKernelPtr->MKernel .template target <NormalizedKernelType>()
590
590
->MKernelFunc ;
591
591
}
592
592
593
593
// For 'sycl::id<Dims>' kernel argument
594
- template <class KernelType , typename ArgT, int Dims, typename KernelName >
594
+ template <class KernelType , typename ArgT, int Dims, bool StoreLocation >
595
595
typename std::enable_if<std::is_same<ArgT, sycl::id<Dims>>::value,
596
596
KernelType *>::type
597
597
ResetHostKernel (const KernelType &KernelFunc) {
@@ -604,11 +604,11 @@ class __SYCL_EXPORT handler {
604
604
}
605
605
};
606
606
return ResetHostKernelHelper<KernelType, struct NormalizedKernelType , Dims,
607
- KernelName >(KernelFunc);
607
+ StoreLocation >(KernelFunc);
608
608
}
609
609
610
610
// For 'sycl::nd_item<Dims>' kernel argument
611
- template <class KernelType , typename ArgT, int Dims, typename KernelName >
611
+ template <class KernelType , typename ArgT, int Dims, bool StoreLocation >
612
612
typename std::enable_if<std::is_same<ArgT, sycl::nd_item<Dims>>::value,
613
613
KernelType *>::type
614
614
ResetHostKernel (const KernelType &KernelFunc) {
@@ -621,11 +621,11 @@ class __SYCL_EXPORT handler {
621
621
}
622
622
};
623
623
return ResetHostKernelHelper<KernelType, struct NormalizedKernelType , Dims,
624
- KernelName >(KernelFunc);
624
+ StoreLocation >(KernelFunc);
625
625
}
626
626
627
627
// For 'sycl::item<Dims, without_offset>' kernel argument
628
- template <class KernelType , typename ArgT, int Dims, typename KernelName >
628
+ template <class KernelType , typename ArgT, int Dims, bool StoreLocation >
629
629
typename std::enable_if<std::is_same<ArgT, sycl::item<Dims, false >>::value,
630
630
KernelType *>::type
631
631
ResetHostKernel (const KernelType &KernelFunc) {
@@ -640,11 +640,11 @@ class __SYCL_EXPORT handler {
640
640
}
641
641
};
642
642
return ResetHostKernelHelper<KernelType, struct NormalizedKernelType , Dims,
643
- KernelName >(KernelFunc);
643
+ StoreLocation >(KernelFunc);
644
644
}
645
645
646
646
// For 'sycl::item<Dims, with_offset>' kernel argument
647
- template <class KernelType , typename ArgT, int Dims, typename KernelName >
647
+ template <class KernelType , typename ArgT, int Dims, bool StoreLocation >
648
648
typename std::enable_if<std::is_same<ArgT, sycl::item<Dims, true >>::value,
649
649
KernelType *>::type
650
650
ResetHostKernel (const KernelType &KernelFunc) {
@@ -659,7 +659,7 @@ class __SYCL_EXPORT handler {
659
659
}
660
660
};
661
661
return ResetHostKernelHelper<KernelType, struct NormalizedKernelType , Dims,
662
- KernelName >(KernelFunc);
662
+ StoreLocation >(KernelFunc);
663
663
}
664
664
665
665
/* 'wrapper'-based approach using 'NormalizedKernelType' struct is
@@ -669,13 +669,14 @@ class __SYCL_EXPORT handler {
669
669
* not supported in ESIMD.
670
670
*/
671
671
// For 'void' and 'sycl::group<Dims>' kernel argument
672
- template <class KernelType , typename ArgT, int Dims, typename KernelName >
672
+ template <class KernelType , typename ArgT, int Dims, bool StoreLocation >
673
673
typename std::enable_if<std::is_same<ArgT, void >::value ||
674
674
std::is_same<ArgT, sycl::group<Dims>>::value,
675
675
KernelType *>::type
676
676
ResetHostKernel (const KernelType &KernelFunc) {
677
677
MHostKernel.reset (
678
- new detail::HostKernel<KernelType, ArgT, Dims, KernelName>(KernelFunc));
678
+ new detail::HostKernel<KernelType, ArgT, Dims, StoreLocation>(
679
+ KernelFunc));
679
680
return (KernelType *)(MHostKernel->getPtr ());
680
681
}
681
682
@@ -697,6 +698,9 @@ class __SYCL_EXPORT handler {
697
698
template <typename KernelName, typename KernelType, int Dims,
698
699
typename LambdaArgType>
699
700
void StoreLambda (KernelType KernelFunc) {
701
+ using KI = detail::KernelInfo<KernelName>;
702
+ constexpr bool StoreLocation = KI::callsAnyThisFreeFunction ();
703
+
700
704
constexpr bool IsCallableWithKernelHandler =
701
705
detail::KernelLambdaHasKernelHandlerArgT<KernelType,
702
706
LambdaArgType>::value;
@@ -707,7 +711,7 @@ class __SYCL_EXPORT handler {
707
711
PI_INVALID_OPERATION);
708
712
}
709
713
KernelType *KernelPtr =
710
- ResetHostKernel<KernelType, LambdaArgType, Dims, KernelName >(
714
+ ResetHostKernel<KernelType, LambdaArgType, Dims, StoreLocation >(
711
715
KernelFunc);
712
716
713
717
using KI = sycl::detail::KernelInfo<KernelName>;
@@ -1481,7 +1485,7 @@ class __SYCL_EXPORT handler {
1481
1485
1482
1486
MArgs = std::move (MAssociatedAccesors);
1483
1487
MHostKernel.reset (
1484
- new detail::HostKernel<FuncT, void , 1 , void >(std::move (Func)));
1488
+ new detail::HostKernel<FuncT, void , 1 , false >(std::move (Func)));
1485
1489
setType (detail::CG::RunOnHostIntel);
1486
1490
}
1487
1491
0 commit comments