Почему Fork/Join из JDK7 медленно работает?
В-нулевых, вы померили стартап, компиляцию и поднятие потоков в FJP, с чем вас и поздравляю. 

Во-первых, сделайте уход в секвенциальную версию, начиная с некоторого маленького threshold'а. Иначе накладные расходы на распиливание и менеджмент задач всё сожрут.

Во-вторых, способа джойнить хуже, чем «t1.fork(); t2.fork(); t1.join(); t2.join()» не придумаешь. Лучший из известных способов делает «t1.fork(); t2.compute(); t1.join()».
Я не разбираюсь в смысле задачи, поэтому по коду ничего сказать не могу (смущает меня некоторое рекурсивное создание ForkJoinPoolов, которое явно выходит за количество равное 1ому), но есть общее правило. Если у вас вычисления, которые нужно производить на процессоре, то имеет смысл пул задавать равным количеству доступных для JVM ядер. Поэтому, я бы создал 1 ForkJoinPool (дефолтный конструктор делает параллелизм равным количеству ядер), и туда сабмитил таски. а не создавал каждый раз новый пул на каждое дробление (или что там у вас делается).