为什么我的并行代码运行缓慢?

时间:2015-08-08 03:34:25

标签: java parallel-processing timing

我被要求使用ForkJoin编写以下方法:

public static boolean hasOver(int val, int[] arr, int sequentialCutoff)

我的代码必须有一个O(n)的工作,一个O(lgn)的范围并使用sequentialCutoff参数。我认为这个问题相当简单,其中sequentialCutoff将设置阈值,并且递归将发生在数组的一半以上,重复直到达到阈值,然后点击基本情况,该基本情况将在指定的索引上遍历数组,检查是否存在大于val的任何元素。这是我写的内容的并行代码部分:

protected Boolean compute() {
    if(high - lo <= sequentialCutoff) {
        return sequentialCheckHasOver(check, array);
    } else {
        int mid = lo + (high - lo) / 2;
        CheckHasOver left = new CheckHasOver(check, array, lo, mid, cutoff);
        left.fork();
        CheckHasOver right = new CheckHasOver(check, array, mid, high, cutoff);
        return right.compute() || left.join();
    }
}

问题在于,当我现在对我编写的代码运行时序测试时,无论我选择什么门限,顺序代码运行速度都比我的并行代码快,而且我不能,在我的生活中,找出哪里我的推理失败了。任何人都可以看到我所做的错误吗?一些帮助将非常感激。

0 个答案:

没有答案