CUBは子供の白熊

Java SE 8 実践プログラミングの練習問題を解く

第6章 並行処理の機能強化 : 問題 8 : parallelSort と sort

問題

あなたのコンピュータではArrays.parallelSortは、配列のサイズがどのくらいになればArrays.sortより速くなるか?

解答

Arrays.parallelSortはサイズが 8K 以下のときはマルチで動作しない

そこで 8K から始めて 1K づつサイズを増やして計測してみる

■ 計測用コード

// 大きい配列を用意
String[] bigArray = new String[16*1024];
Random random = new Random();
for (int i = 0; i < bigArray.length; i++) {
    bigArray[i] = Double.toString(random.nextDouble());
}
// 計測
final int COUNT = 64;  // 何回繰り返すか
for (int n = 8*1024; n <= bigArray.length; n += 1024) {
    String[] array;
    long startTime;
    System.out.println("要素数 : " + n);
    // シングルスレッド
    long totalTime = 0;
    for (int i = 0; i < COUNT; i++) {
        array = Arrays.copyOf(bigArray, n);
        startTime = System.nanoTime();
        Arrays.sort(array);
        totalTime += System.nanoTime() - startTime;
    }
    System.out.println("Single : " + (totalTime/COUNT)/1E9 + "秒");
    // マルチスレッド
    totalTime = 0;
    for (int i = 0; i < COUNT; i++) {
        array = Arrays.copyOf(bigArray, n);
        startTime = System.nanoTime();
        Arrays.parallelSort(array);
        totalTime += System.nanoTime() - startTime;
    }
    System.out.println("Multi  : " + (totalTime/COUNT)/1E9 + "秒");
}

計測結果にはバラツキがあるが、私のマシン(Core-i7 2.90GHz)ではだいたい 10K ぐらいからparallelSortの方がsortより速くなる