Относится ли -XX: parallelGCThreads = 8 к числу ядер по отношению к закону Амдала?
Вступление:
В настоящее время я работаю над программным обеспечением, в котором я сравниваю последовательную программу с многопоточной. На моем оборудовании доступно 24 ядра и 16 ГБ оперативной памяти. Моя программа написана на Java, но выполнена из MATLAB из-за необходимости построения графиков. При открытии MATLAB отображается следующее сообщение:
Picked up JAVA_TOOL:OPTIONS: -XX:parallelGCThreads = 8 - Xmx8g -Dsun.java2d.pmoffscreen = false
теория
Теперь в соответствии с Законом Амдала максимальное увеличение производительности будет определяться как 1/(B-(1-B)/P), где B - последовательная дробь, а P - количество процессоров. В моем случае это B = 0,01, (1-B = 0,99) и P = 24. Это дает мне теоретическое максимальное увеличение производительности примерно до 20.
Теперь, как я понимаю parallelGCThreads
это максимальное количество доступных потоков сборщика мусора. После некоторого интенсивного тестирования моей программы оказалось, что максимальное увеличение коэффициента, которого я смог достичь, было в 7,5 раза, что далеко не так, как теоретическое значение 20. Однако, если я заменил P = 8, я получу теоретический предел 7.8, что очень близко к полученному в моей программе.
Вопрос
Есть ли parallelGCThreads
на самом деле ограничить количество потоков таким образом, чтобы закон Амдаля использовался с P = 8, а не с P = 24?
Заранее спасибо!
1 ответ
Ограничивает ли parallelGCThreads количество потоков так, чтобы закон Амдала использовался с P = 8, а не с P = 24?
Нет. Количество потоков GC напрямую не влияет на производительность вашей программы при выполнении "реальной" работы. (Это может повлиять на это, если программа сгенерирует много мусора, но анализ будет довольно сложным... и, конечно, он не заменит P
в уравнении Амдаля.)
Вы можете попробовать настроить параметр parallelGCThreads, чтобы увидеть, какой эффект он оказывает, но, возможно, есть что-то еще (не GC), которое влияет на вашу многопоточную производительность, что приводит к более низким коэффициентам ускорения, чем вы ожидали. Скорее всего, это как-то связано с приложением; например, конфликт пропускной способности памяти или конфликт блокировки Java.
FWIW - это необычно для многопоточной программы, чтобы приблизиться к теоретическому пределу, установленному Законом Амдала.