2015-12-30 1 views
1

Я пытался использовать инфраструктуру Java ForkJoin и написал программу для обработки большого списка данных.Какое число пороговых значений будет лучше в Java7 ForkJoinTask

Хорошо известно, что порог поля всегда установлен в ForkJoinTask, чтобы указать минимальное число для раздела списка данных.

Вопрос в том, как большой или малый порог повысит производительность или будет гибким и связан только с базовым числом поддержки процессоров или потоков?

Есть ли наилучшая практика для порога в параллельной вычислительной структуре, такой как Forkjointask?

ответ

1

Для порога нет установленного правила. Хорошее число зависит от количества элементов в массиве (N), тип обработки для каждого элемента (Q) (простой анализ двух чисел - это низкий Q, выполнение сложного вычисления - высокое Q.)

Я использую общую формулу, которая работает довольно хорошо в большинстве случаев, когда я не всегда знаю Q: Я хочу генерировать примерно в 8 раз больше задач, чем потоки или минимальный порог 32k (в зависимости от N, конечно.)

int temp = count/(threads << 3); 
threshold = (temp < 32768) ? 32768 : temp; 

Где количество N и количество потоков - это количество потоков.

+0

привет, спасибо за ваш ответ. Должна ли 32768 быть пятнадцатой мощностью 2? Почему этот номер может быть верхним пределом для порога? – Vincent

+0

Выберите свой номер. 32k предназначался для конкретной операции. Как я уже сказал, нет правила для порога. – edharned

Смежные вопросы