Skip to content

Commit

Permalink
use workaround for old dpcpp version
Browse files Browse the repository at this point in the history
  • Loading branch information
MarcelKoch committed Jul 5, 2023
1 parent ace6b8a commit b0ceff1
Showing 1 changed file with 20 additions and 0 deletions.
20 changes: 20 additions & 0 deletions dpcpp/distributed/partition_helpers_kernels.dp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,11 +74,31 @@ void sort_by_range_start(
range_start_ends.get_data(), stride{});
auto end_it = oneapi::dpl::make_permutation_iterator(
range_start_ends.get_data() + 1, stride{});

// older versions of oneDPL have a bug when sorting permutation iterators
#if GINKGO_DPCPP_VERSION >= 20230320
auto zip_it =
oneapi::dpl::make_zip_iterator(start_it, end_it, part_ids.get_data());
std::stable_sort(policy, zip_it, zip_it + num_ranges, [](auto a, auto b) {
return std::get<0>(a) < std::get<0>(b);
});
#else
array<GlobalIndexType> starts(exec, num_ranges);
array<GlobalIndexType> ends(exec, num_ranges);

std::copy(policy, start_it, start_it + num_ranges, starts.get_data());
std::copy(policy, end_it, end_it + num_ranges, ends.get_data());

auto zip_it = oneapi::dpl::make_zip_iterator(
starts.get_data(), ends.get_data(), part_ids.get_data());
std::stable_sort(policy, zip_it, zip_it + num_ranges, [](auto a, auto b) {
return std::get<0>(a) < std::get<0>(b);
});

std::copy(policy, starts.get_data(), starts.get_data() + num_ranges,
start_it);
std::copy(policy, ends.get_data(), ends.get_data() + num_ranges, end_it);
#endif
}

GKO_INSTANTIATE_FOR_EACH_INDEX_TYPE(
Expand Down

0 comments on commit b0ceff1

Please sign in to comment.