YAC 3.14.0
Yet Another Coupler
Loading...
Searching...
No Matches
generate_reg2d.c
Go to the documentation of this file.
1// Copyright (c) 2024 The YAC Authors
2//
3// SPDX-License-Identifier: BSD-3-Clause
4
5#include <math.h>
6#include "generate_reg2d.h"
7
9 int num_points[2], int total_num_procs, int * num_procs) {
10
11 int flag = num_points[0] > num_points[1];
12 float ratio = (float)(num_points[flag^1]) / (float)(num_points[flag]);
13
14 int prev_num_procs[2];
15
16 prev_num_procs[!flag] = total_num_procs;
17 prev_num_procs[flag] = 1;
18
19 float prev_proc_ratio = (float)total_num_procs;
20
21 for (int i = total_num_procs-1; i > 0; --i) {
22
23 if (total_num_procs%i == 0) {
24
25 float curr_proc_ratio = (float)(i) / (float)(total_num_procs/i);
26
27 double temp_a = fabs(ratio - curr_proc_ratio);
28 double temp_b = fabs(ratio - prev_proc_ratio);
29 if (temp_a < temp_b) {
30 prev_num_procs[!flag] = i;
31 prev_num_procs[flag] = total_num_procs/i;
32 prev_proc_ratio = curr_proc_ratio;
33 }
34 }
35 }
36
37 num_procs[0] = prev_num_procs[0];
38 num_procs[1] = prev_num_procs[1];
39}
40
void yac_generate_reg2d_decomp(int num_points[2], int total_num_procs, int *num_procs)
static size_t num_points
Definition yac.c:162