Skip to content

Commit 13581a3

Browse files
committed
Change "range_kernel" to "nd_range_kernel"
We decided to remove support for `range_kernel` from the free function kernel spec, so change all the examples to use `nd_range_kernel` instead. The proposed `this_kernel` namespace was changed to `this_work_item` and it is no longer in the experimental namespace.
1 parent cd36574 commit 13581a3

File tree

1 file changed

+41
-35
lines changed

1 file changed

+41
-35
lines changed

sycl/doc/extensions/experimental/sycl_ext_oneapi_kernel_compiler.asciidoc

Lines changed: 41 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -681,10 +681,10 @@ For example, if the kernel is defined like this in the source code string:
681681
----
682682
std::string source = R"""(
683683
#include <sycl/sycl.hpp>
684-
namespace syclex = sycl::ext::oneapi::experimental;
684+
namespace syclexp = sycl::ext::oneapi::experimental;
685685
686686
extern "C"
687-
SYCL_EXT_ONEAPI_FUNCTION_PROPERTY((syclex::range_kernel<1>))
687+
SYCL_EXT_ONEAPI_FUNCTION_PROPERTY((syclexp::nd_range_kernel<1>))
688688
void foo(int *in, int *out) {/*...*/}
689689
)""";
690690
----
@@ -712,11 +712,11 @@ To illustrate, consider source code that defines a kernel like this:
712712
----
713713
std::string source = R"""(
714714
#include <sycl/sycl.hpp>
715-
namespace syclex = sycl::ext::oneapi::experimental;
715+
namespace syclexp = sycl::ext::oneapi::experimental;
716716
717717
namespace mykernels {
718718
719-
SYCL_EXT_ONEAPI_FUNCTION_PROPERTY((syclex::range_kernel<1>))
719+
SYCL_EXT_ONEAPI_FUNCTION_PROPERTY((syclexp::nd_range_kernel<1>))
720720
void bar(int *in, int *out) {/*...*/}
721721
722722
} // namespace mykernels
@@ -729,8 +729,8 @@ The host code can compile this and get the kernel's `kernel` object like so:
729729
----
730730
sycl::kernel_bundle<sycl::bundle_state::ext_oneapi_source> kb_src = /*...*/;
731731
732-
sycl::kernel_bundle<sycl::bundle_state::executable> kb = syclex::build(kb_src,
733-
syclex::properties{syclex::registered_kernel_names{"mykernels::bar"}});
732+
sycl::kernel_bundle<sycl::bundle_state::executable> kb = syclexp::build(kb_src,
733+
syclexp::properties{syclexp::registered_kernel_names{"mykernels::bar"}});
734734
735735
sycl::kernel k = kb.ext_oneapi_get_kernel("mykernels::bar");
736736
----
@@ -749,8 +749,8 @@ the kernel by calling `ext_oneapi_get_raw_kernel_name` like this:
749749
----
750750
sycl::kernel_bundle<sycl::bundle_state::ext_oneapi_source> kb_src = /*...*/;
751751
752-
sycl::kernel_bundle<sycl::bundle_state::executable> kb = syclex::build(kb_src,
753-
syclex::properties{syclex::registered_kernel_names{"mykernels::bar"}});
752+
sycl::kernel_bundle<sycl::bundle_state::executable> kb = syclexp::build(kb_src,
753+
syclexp::properties{syclexp::registered_kernel_names{"mykernels::bar"}});
754754
755755
std::string mangled_name = kb.ext_oneapi_get_raw_kernel_name("mykernels::bar");
756756
----
@@ -772,10 +772,10 @@ this:
772772
----
773773
std::string source = R"""(
774774
#include <sycl/sycl.hpp>
775-
namespace syclex = sycl::ext::oneapi::experimental;
775+
namespace syclexp = sycl::ext::oneapi::experimental;
776776
777777
template<typename T>
778-
SYCL_EXT_ONEAPI_FUNCTION_PROPERTY((syclex::range_kernel<1>))
778+
SYCL_EXT_ONEAPI_FUNCTION_PROPERTY((syclexp::nd_range_kernel<1>))
779779
void bartmpl(T *in, T *out) {/*...*/}
780780
)""";
781781
----
@@ -789,8 +789,8 @@ object for each instantiation:
789789
----
790790
sycl::kernel_bundle<sycl::bundle_state::ext_oneapi_source> kb_src = /*...*/;
791791
792-
sycl::kernel_bundle<sycl::bundle_state::executable> kb = syclex::build(kb_src,
793-
syclex::properties{syclex::registered_kernel_names{{"bartmpl<float>", "bartmpl<int>"}});
792+
sycl::kernel_bundle<sycl::bundle_state::executable> kb = syclexp::build(kb_src,
793+
syclexp::properties{syclexp::registered_kernel_names{{"bartmpl<float>", "bartmpl<int>"}});
794794
795795
sycl::kernel k_float = kb.ext_oneapi_get_kernel("bartmpl<float>");
796796
sycl::kernel k_int = kb.ext_oneapi_get_kernel("bartmpl<int>");
@@ -807,36 +807,39 @@ as a string and then compile and launch it.
807807
[source,c++]
808808
----
809809
#include <sycl/sycl.hpp>
810-
namespace syclex = sycl::ext::oneapi::experimental;
810+
namespace syclexp = sycl::ext::oneapi::experimental;
811+
811812
static constexpr size_t NUM = 1024;
813+
static constexpr size_t WGSIZE = 16;
812814
813815
int main() {
814816
sycl::queue q;
815817
816818
// The source code for a kernel, defined as a SYCL "free function kernel".
817819
std::string source = R"""(
818820
#include <sycl/sycl.hpp>
819-
namespace syclex = sycl::ext::oneapi::experimental;
821+
namespace syclext = sycl::ext::oneapi;
822+
namespace syclexp = sycl::ext::oneapi::experimental;
820823
821824
extern "C"
822-
SYCL_EXT_ONEAPI_FUNCTION_PROPERTY((syclex::range_kernel<1>))
825+
SYCL_EXT_ONEAPI_FUNCTION_PROPERTY((syclexp::nd_range_kernel<1>))
823826
void iota(float start, float *ptr) {
824-
size_t id = syclex::this_kernel::get_id();
827+
size_t id = syclext::this_work_item::get_nd_item().get_global_linear_id();
825828
ptr[id] = start + static_cast<float>(id);
826829
}
827830
)""";
828831
829832
// Create a kernel bundle in "source" state.
830833
sycl::kernel_bundle<sycl::bundle_state::ext_oneapi_source> kb_src =
831-
syclex::create_kernel_bundle_from_source(
834+
syclexp::create_kernel_bundle_from_source(
832835
q.get_context(),
833-
syclex::source_language::sycl,
836+
syclexp::source_language::sycl,
834837
source);
835838
836839
// Compile the kernel. There is no need to use the "registered_kernel_names"
837840
// property because the kernel is declared extern "C".
838841
sycl::kernel_bundle<sycl::bundle_state::executable> kb_exe =
839-
syclex::build(kb_src);
842+
syclexp::build(kb_src);
840843
841844
// Get the kernel via its compiler-generated name.
842845
sycl::kernel iota = kb_exe.ext_oneapi_get_kernel("iota");
@@ -846,9 +849,9 @@ int main() {
846849
// Set the values of the kernel arguments.
847850
cgh.set_args(3.14f, ptr);
848851
849-
// Launch the kernel according to its type, in this case a simple
850-
// "range" kernel.
851-
cgh.parallel_for({NUM}, iota);
852+
// Launch the kernel according to its type, in this case an nd-range kernel.
853+
sycl::nd_range ndr{{NUM}, {WGSIZE}};
854+
cgh.parallel_for(ndr, iota);
852855
}).wait();
853856
}
854857
----
@@ -861,43 +864,46 @@ disambiguate a kernel function that has several overloads.
861864
[source,c++]
862865
----
863866
#include <sycl/sycl.hpp>
864-
namespace syclex = sycl::ext::oneapi::experimental;
867+
namespace syclexp = sycl::ext::oneapi::experimental;
868+
865869
static constexpr size_t NUM = 1024;
870+
static constexpr size_t WGSIZE = 16;
866871
867872
int main() {
868873
sycl::queue q;
869874
870875
// The source code for two kernels defined as overloaded functions.
871876
std::string source = R"""(
872877
#include <sycl/sycl.hpp>
873-
namespace syclex = sycl::ext::oneapi::experimental;
878+
namespace syclext = sycl::ext::oneapi;
879+
namespace syclexp = sycl::ext::oneapi::experimental;
874880
875-
SYCL_EXT_ONEAPI_FUNCTION_PROPERTY((syclex::range_kernel<1>))
881+
SYCL_EXT_ONEAPI_FUNCTION_PROPERTY((syclexp::nd_range_kernel<1>))
876882
void iota(float start, float *ptr) {
877-
size_t id = syclex::this_kernel::get_id();
883+
size_t id = syclext::this_work_item::get_nd_item().get_global_linear_id();
878884
ptr[id] = start + static_cast<float>(id);
879885
}
880886
881-
SYCL_EXT_ONEAPI_FUNCTION_PROPERTY((syclex::range_kernel<1>))
887+
SYCL_EXT_ONEAPI_FUNCTION_PROPERTY((syclexp::range_kernel<1>))
882888
void iota(int start, int *ptr) {
883-
size_t id = syclex::this_kernel::get_id();
889+
size_t id = syclext::this_work_item::get_nd_item().get_global_linear_id();
884890
ptr[id] = start + static_cast<int>(id);
885891
}
886892
)""";
887893
888894
// Create a kernel bundle in "source" state.
889895
sycl::kernel_bundle<sycl::bundle_state::ext_oneapi_source> kb_src =
890-
syclex::create_kernel_bundle_from_source(
896+
syclexp::create_kernel_bundle_from_source(
891897
q.get_context(),
892-
syclex::source_language::sycl,
898+
syclexp::source_language::sycl,
893899
source);
894900
895901
// Compile the kernel. Because there are two overloads of "iota", we need to
896902
// use a C++ cast to disambiguate between them. Here, we are selecting the
897903
// "int" overload.
898904
std::string iota_name{"(void(*)(int, int*))iota"};
899-
sycl::kernel_bundle<sycl::bundle_state::executable> kb_exe = syclex::build(kb_src,
900-
syclex::properties{syclex::registered_kernel_names{iota_name}});
905+
sycl::kernel_bundle<sycl::bundle_state::executable> kb_exe = syclexp::build(kb_src,
906+
syclexp::properties{syclexp::registered_kernel_names{iota_name}});
901907
902908
// Get the kernel by passing the same string we used to construct the
903909
// "registered_kernel_names" property.
@@ -908,9 +914,9 @@ int main() {
908914
// Set the values of the kernel arguments.
909915
cgh.set_args(3, ptr);
910916
911-
// Launch the kernel according to its type, in this case a simple
912-
// "range" kernel.
913-
cgh.parallel_for({NUM}, iota);
917+
// Launch the kernel according to its type, in this case an nd-range kernel.
918+
sycl::nd_range ndr{{NUM}, {WGSIZE}};
919+
cgh.parallel_for(ndr, iota);
914920
}).wait();
915921
}
916922
----

0 commit comments

Comments
 (0)