Почему программа с 4 потоками работает на 1-ядерной виртуальной машине быстрее, чем на той же 4-ядерной? - PullRequest
0 голосов
/ 04 февраля 2019
  • Я использую процессор i7 с 4 ядрами (8 логических ядер), Debian Linux
  • Виртуальная машина также Debian Linux
  • Программа скомпилирована с GCC без специальногооптимизации (настройки компиляции по умолчанию)
  • Я зацикливаюсь 1000 раз в программе.Это занимает более чем в 2 раза больше, когда виртуальная машина имеет 4 ядра.Почему?

Примечание. Программа, которую я запускаю, является программой на C и порождает 4 потока (pthread) и присоединяется к ним после небольшого количества вычислений.Это делает параллелизм (не параллелизм).

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Некоторые проблемы смущают параллельно;некоторые из них "смущающе серийные".Возможно, вы столкнулись с последним, но не нажимая на ваш код, мы можем только догадываться.

Решения BigLock, например деревья, списки, которые могут быть обновлены только путем блокировки всей структуры, не выигрывают от нескольких процессоров,Хуже того, несколько процессоров могут вызвать сбой замков, который ничего не даст.

0 голосов
/ 04 февраля 2019

В I7 все ядра имеют общий кэш L3.Потерять скорость можно, добавляя ядра, если дополнительная строка выполнения вызывает больше пропусков кеша в кеше L3.

...