第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
より速くなる