19template<
class T, GlobalVariableType redop>
20T int_reduce_get_start_var();
23f32 int_reduce_get_start_var<f32, GlobalVariableType::min>() {
28f64 int_reduce_get_start_var<f64, GlobalVariableType::min>() {
33f32 int_reduce_get_start_var<f32, GlobalVariableType::max>() {
38f64 int_reduce_get_start_var<f64, GlobalVariableType::max>() {
43f32 int_reduce_get_start_var<f32, GlobalVariableType::sum>() {
48f64 int_reduce_get_start_var<f64, GlobalVariableType::sum>() {
52template<
class T, GlobalVariableType redop>
53T int_reduce_val_loc(T a, T b);
56f32 int_reduce_val_loc<f32, GlobalVariableType::min>(
f32 a,
f32 b) {
57 return sycl::min(a, b);
61f32 int_reduce_val_loc<f32, GlobalVariableType::max>(
f32 a,
f32 b) {
62 return sycl::max(a, b);
66f32 int_reduce_val_loc<f32, GlobalVariableType::sum>(
f32 a,
f32 b) {
70template<
class T, GlobalVariableType redop>
71T int_reduce_val_mpi(T val_acc_loc);
74f32 int_reduce_val_mpi<f32, GlobalVariableType::min>(
f32 val_acc_loc) {
81f32 int_reduce_val_mpi<f32, GlobalVariableType::max>(
f32 val_acc_loc) {
88f32 int_reduce_val_mpi<f32, GlobalVariableType::sum>(
f32 val_acc_loc) {
94template<
class T, GlobalVariableType redop>
95T int_reduce(std::unordered_map<u64, T> &val_map) {
96 T val_acc_loc = int_reduce_get_start_var<T, redop>();
97 for (
auto &[k, val] : val_map) {
98 val_acc_loc = int_reduce_val_loc<T, redop>(val_acc_loc, val);
101 return int_reduce_val_mpi<T, redop>(val_acc_loc);
107 final_val = int_reduce<f32, GlobalVariableType::min>(val_map);
115 final_val = int_reduce<f32, GlobalVariableType::max>(val_map);
123 final_val = int_reduce<f32, GlobalVariableType::sum>(val_map);
double f64
Alias for double.
float f32
Alias for float.
void Allreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
MPI wrapper for MPI_Allreduce.