Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 25 additions & 5 deletions include/oneapi/dpl/pstl/hetero/dpcpp/execution_sycl_defs.h
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,20 @@ __get_default_queue()
return __q;
}

inline sycl::queue
__get_gpu_queue()
{
static sycl::queue __q{sycl::gpu_selector_v};
return __q;
}

inline sycl::queue
__get_cpu_queue()
{
static sycl::queue __q{sycl::cpu_selector_v};
return __q;
}

#if _ONEDPL_FPGA_DEVICE
inline sycl::queue
__get_fpga_default_queue()
Expand Down Expand Up @@ -171,11 +185,8 @@ class device_policy
}

#if _ONEDPL_PREDEFINED_POLICIES
explicit device_policy(__internal::__global_instance_tag __t)
: __qh(__t, /*factory*/__internal::__get_default_queue) {}

protected:
device_policy(__internal::__global_instance_tag __t, __internal::__queue_factory __f) : __qh(__t, __f) {}
explicit device_policy(__internal::__global_instance_tag __t,
__internal::__queue_factory __f = __internal::__get_default_queue) : __qh(__t, __f) {}
#endif

private:
Expand Down Expand Up @@ -225,6 +236,15 @@ inline const fpga_policy<> dpcpp_fpga{__internal::__global_instance_tag{}};

#endif // _ONEDPL_PREDEFINED_POLICIES

template <typename KernelName = DefaultKernelName>
const device_policy<KernelName> dpdefault {__internal::__global_instance_tag{}};

template <typename KernelName = DefaultKernelName>
const device_policy<KernelName> dpgpu {__internal::__global_instance_tag{}, __internal::__get_gpu_queue};

template <typename KernelName = DefaultKernelName>
const device_policy<KernelName> dpcpu {__internal::__global_instance_tag{}, __internal::__get_cpu_queue};

// make_policy functions
template <typename KernelName = DefaultKernelName>
device_policy<KernelName>
Expand Down
2 changes: 1 addition & 1 deletion test/general/dpl_namespace.pass.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ int main()
std::get<1>(x) = (2 * std::get<0>(x)) / n;
});
// val_buf = {0,1,2,...,n-1}
std::transform(TestUtils::make_device_policy<Transform>(dpl::execution::dpcpp_default),
std::transform(TestUtils::make_device_policy<Transform>(dpl::execution::dpdefault<>),
counting_first, counting_first + n, val_first, dpl::identity());
auto result = dpl::inclusive_scan_by_segment(
TestUtils::make_device_policy<Scan>(dpl::execution::dpcpp_default),
Expand Down
19 changes: 17 additions & 2 deletions test/general/test_policies.pass.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -78,13 +78,28 @@ main()

test_policy_instance(dpcpp_default);

test_policy_instance(dpdefault<>);
test_policy_instance(dpdefault<Kernel<1>>);

if (sycl::device::get_devices(sycl::info::device_type::cpu).size() > 0)
{
test_policy_instance(dpcpu<>);
test_policy_instance(dpcpu<Kernel<2>>);
}

if (sycl::device::get_devices(sycl::info::device_type::gpu).size() > 0)
{
test_policy_instance(dpgpu<>);
test_policy_instance(dpgpu<Kernel<3>>);
}

// make_device_policy
test_policy_instance(TestUtils::make_device_policy<Kernel<11>>(q));
#if TEST_LIBSYCL_VERSION && TEST_LIBSYCL_VERSION < 60000
// make_device_policy requires a sycl::queue as an argument.
// Currently, there is no implicit conversion (implicit syc::queue constructor by a device selector)
// from a device selector to a queue.
// The same test call with explicit queue creation we have below in line 78.
// The same test call with explicit queue creation we have below.
test_policy_instance(TestUtils::make_device_policy<Kernel<12>>(TestUtils::default_selector));
#endif
test_policy_instance(TestUtils::make_device_policy<Kernel<13>>(sycl::device{TestUtils::default_selector}));
Expand All @@ -94,7 +109,7 @@ main()
test_policy_instance(oneapi::dpl::execution::make_device_policy<Kernel<16>>());

// device_policy
EXPECT_TRUE(device_policy<Kernel<1>>(q).queue() == q, "wrong result for queue()");
EXPECT_TRUE(device_policy<Kernel<20>>(q).queue() == q, "wrong result for queue()");
test_policy_instance(device_policy<Kernel<21>>(q));
test_policy_instance(device_policy<Kernel<22>>(sycl::device{TestUtils::default_selector}));
test_policy_instance(device_policy<Kernel<23>>(dpcpp_default));
Expand Down
Loading