第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Parallel Mergesort 基準(zhǔn)測試 - 確定找到的閾值

Parallel Mergesort 基準(zhǔn)測試 - 確定找到的閾值

慕的地8271018 2022-11-02 10:31:22
我正在嘗試確定停止細(xì)分我的 Mergesort 實現(xiàn)的合理閾值。但是,我得到的結(jié)果是閾值應(yīng)該在 10 7 < x < 10 8之間,這是荒謬的,因為 java 使用的默認(rèn)閾值約為 8192。它基本上告訴我細(xì)分幾乎總是不好的,更高的閾值更好,因為它執(zhí)行的拆分更少。它目前所做的工作是對一個大小為 10 8且隨機(jī)范圍為0to的浮點數(shù)數(shù)組進(jìn)行排序1000。對每個測試的閾值重復(fù)使用相同的隨機(jī)數(shù)組。public class ParallelMergeSort extends SortStrategy {    @Override    public long sort(float[] a, int cores, int threshold) {        System.gc();        long start = System.nanoTime();        RecursiveAction mainTask = new SortTask(a, 0, a.length - 1);        SortTask.threshold = threshold;        ForkJoinPool pool = new ForkJoinPool(cores);        pool.invoke(mainTask);        return System.nanoTime() - start;    }    private static class SortTask extends RecursiveAction {        private float[] a;        private int left, right;        private static int threshold;        SortTask(float[] a, int left, int right) {            this.a = a;            this.left = left;            this.right = right;        }        @Override        protected void compute() {            if (left < right) {                if ((right - left) < threshold) {                    Arrays.sort(a, left, right + 1);                } else {                    int mid = (left + right)/2;                    invokeAll(                        new SortTask(a, left, mid),                        new SortTask(a, mid + 1, right)                    );                    // Merge                    int n1 = mid - left + 1;                    int n2 = right - mid;                    float a1[] = new float[n1];                    float a2[] = new float[n2];                    // Fill sub arrays                    for (int i = 0; i < n1; ++i)                        a1[i] = a[left + i];                    for (int j = 0; j < n2; ++j)                        a2[j] = a[mid + 1 + j];                }            }        }    }}我知道由于 JIT,JVM 可能不可靠,但它應(yīng)該只影響前幾次迭代,不是嗎?尋找有關(guān)算法的建議或為什么我的結(jié)果與我的預(yù)期相差甚遠(yuǎn)。
查看完整描述

1 回答

?
慕森王

TA貢獻(xiàn)1777條經(jīng)驗 獲得超3個贊

最佳閾值是允許與系統(tǒng)中的內(nèi)核一樣多的線程并行運(yùn)行的閾值。

如果你的系統(tǒng)有cores核心,閾值應(yīng)該是 test 應(yīng)該初始化為

SortTask.threshold = cores > 0 ? (a.length + cores - 1) / cores : a.length;

由于最后幾個合并階段不能并行運(yùn)行,因此速度提升將小于內(nèi)核數(shù)量。

由于您正在對包含 10 8個元素的數(shù)組進(jìn)行排序,因此最佳閾值確實在 10 7和 10 8之間,除非您有 10 個以上的內(nèi)核。


查看完整回答
反對 回復(fù) 2022-11-02
  • 1 回答
  • 0 關(guān)注
  • 111 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號