Какие параметры я должен передать, чтобы равномерно разделить работу между вызовами функций? - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть функция с именем doWork(int a, int b, int c, int amount), которая вычисляет некоторую сумму из общего набора вычислений. В основном я определяю, сколько вычислений должен выполнять каждый вызов функции. Мне нужно знать, как передать a,b,c, чтобы каждый вызов функции выполнял свой собственный фрагмент вычисления.

int nprocs = 2;
int total = 10

public static void main() {
    //total number of calculations to compute
    int totalLoad = ((total*total*total)/6)-(total/6);
    //number of calculations per function call
    int workLoad = totalLoad/nproc;


    for(int i = 0; i < nproc; i++) {
        doWork(a, b, c, workLoad);
    }
}

public void doWork(int i,int j,int k, int amount) {
    boolean start = true;

    for(; i < total && amount != 0; i++) {
        if(!start) {
            j = i+1;
        }
        for(; j < total && amount != 0; j++) {
            if(!start) {
                k = j;
            }
            for(; k < total && amount != 0; k++) {
                if(start) {
                    start = false;
                }

                //some calculation here
                System.out.println(format(i,j,k));
                amount--;
            }
        }
    }

Каждый вызов функции должен обрабатывать отдельный подраздел общего расчета, который необходимо выполнить. Например:

    nproc = 2
    totalLoad = 6

    Total work:       Function call 1:
    calc 1            calc 1
    calc 2            calc 2
    calc 3            calc 3
    calc 4
    calc 5            Function call 2:  
    calc 6            calc 4
                      calc 5
                      calc 6

Кроме того, есть ли более чистый способ написания функции doWork (). Мне это кажется грязным.

...