Fork Join-Optimierung

Was ich will

Ich möchte an der Optimierung des Fork / Join-Algorithmus arbeiten. Mit Optimierung meine ich nur die Berechnung der optimalen Anzahl von Threads, oder wenn Sie wollen - die Berechnung vonSEQUENTIAL_THRESHOLD (siehe Code unten).

// PSEUDOCODE
Result solve(Problem problem) { 
    if (problem.size < SEQUENTIAL_THRESHOLD)
        return solveSequentially(problem);
    else {
        Result left, right;
        INVOKE-IN-PARALLEL { 
            left = solve(extractLeftHalf(problem));
            right = solve(extractRightHalf(problem));
        }
        return combine(left, right);
    }
}

Wie stelle ich mir das vor?

Zum Beispiel möchte ich das Produkt eines großen Arrays berechnen. Dann bewerte ich einfach alle Komponenten und bekomme die optimale Gewindemenge:

SEQUENTIAL_THRESHOLD = PC * IS / MC (nur ein Beispiel)

PC - Anzahl der Prozessorkerne;IS - Konstante, die die optimale Arraygröße mit einem Prozessorkern und den einfachsten Vorgang für Daten angibt (z. B. Lesen);MC - Betriebskosten multiplizieren;

Angenommen, MC = 15; PC = 4 und IS = 10000;SEQUENTIAL_THRESHOLD = 2667. Wenn das Subtask-Array größer als 2667 ist, wird es gegabelt.

Breite Fragen

Ist es möglich, eine SEQUENTIAL_THRESHOLD-Formel auf diese Weise zu erstellen?Ist es möglich, dasselbe für komplexere Berechnungen zu erreichen: nicht nur für Operationen an Arrays / Sammlungen und Sortieren?

Schmale Frage:

Es existieren bereits einige Untersuchungen zur Berechnung vonSEQUENTIAL_THRESHOLD für Arrays / Sammlungen / Sortierungen? Wie schaffen sie das?

Aktualisiert am 07. März 2014:

Wenn es nicht möglich ist, eine einzige Formel für die Schwellenwertberechnung zu schreiben, kann ich ein Dienstprogramm schreiben, das vordefinierte Tests auf dem PC durchführt und dann den optimalen Schwellenwert erhält? Ist das auch unmöglich oder nicht?Was kann die Java 8 Streams-API? Kann es mir helfen? Beseitigt die Java 8 Streams-API eine Notwendigkeit in Fork / Join?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage