Нелинейность прироста производительности от количества потоков

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

Ситуация такая. Работаю в Geant4 - это такой пакет для моделирования взаимодействия элементарных частиц с веществом, разработанный в CERN. Весь код в нём открыт, находится в свободном доступе. Грубо говоря, это набор библиотек, написанных на языке C++. Geant4 поддерживает мультитрейдинг.

В общем, запускал я ради теста одну и ту же задачу на слабом ноутбуке и на сильном. Вычисления ведутся на процессоре. Я не помню точно что за процессор на слабом ноутбуке, сейчас его нет под рукой, но это довольно новый Core i3 с базовой частотой 2 ГГц и L3 кэш 3 или 4 Мб, 2 физических и 4 физических ядер. Второй это Ryzen 7 4800h с базовой частотой 2.9 ГГц, и 8 Мб L3 кэша, 8 физических и 16 физических ядер. В общем, первый справился с задачей за 16 минут 44 секунды, а второй всего лишь за 5 минут 40 секунд. То есть прирост оказался даже чуть меньше, чем в 3 раза, хотя количество ядер отличается в 4 раза, не говоря уже о тактовой частоте. Та же задача на сильном ноутбуке, запущенная на 4 потоках посчиталась за 12 минут 30 секунд.

У меня возникает вопрос из-за чего прирост производительности оказался таким слабым? Я ожидал прирост минимум в 4 раза, так как на сильном ноутбуке ещё и тактовая частота выше. Может ли быть проблема в нехватке L3 кэша? Или это плохая оптимизация под много поточность? Или вовсе другая причина? Хотя вроде они заявляют о хорошей линейности, на сколько я понял:

https://twiki.cern.ch/twiki/bi... gTaskForce

https://indico.cern.ch/event/7... eading.pdf

Хотя, как я понял, в тесте на Intel Xeon Phi, тест сначала шёл в однопоточном режиме и показывал хорошую линейность от числа задействованных физических ядер. Но в моём случае в обоих случая задействовано максимальное число потоков.

Если я допустил ошибки или не туда написал, подскажите где ошибки или в какой раздел нужно писать.