Несколько ЦП, многопоточная производительность

Несколько ЦП, многопоточная производительность

Моя программа:100% на базе ЦП и ОЗУ, выполняетматематические расчеты, вначале считывает данные с жесткого диска в оперативную память.Нет связи между потоками.Нити, все берутв то же времятакже (почти).

Вопрос:

Если моя программа использует потоки, равные количеству потоков ЦП, какую производительность я могу ожидать от системы с двумя ЦП?

Допустим, я использую два 8-ядерных xeon, каждый с 16 потоками, так что 16x2 = 32 потока в общей сложности. Если моя программа использует 32 потока, все с 100% использованием, получу ли я двойную производительность по сравнению с одним тем же процессором?

решение1

На самом деле, лучший ответ, который вы можете дать, это "вероятно, нет, но это зависит от обстоятельств". У вас в два раза больше чистой мощности процессора, но:

  1. На самом деле вы не получите удвоения полезной пропускной способности памяти.

  2. Потребуется время, чтобы «перебросить» несколько строк кэша между процессорами.

  3. Иногда одному потоку приходится ждать другой, и чем больше у вас потоков, тем чаще это происходит.

  4. Иногда, даже если у вас много работы, вы не можете сделать ее всю сразу.

И так далее.

В очень редких случаях вы действительно можете получитьболеепроизводительность более чем в два раза выше. Если операция ограничена кэшем, наличие большего количества ядер может означать, что поток может работать дольше (поскольку у ядра не будет других дел, которые нужно сделать, поскольку их выполняют другие ядра), позволяя кэшам ЦП дольше оставаться горячими.

решение2

Окончательный ответ на вопрос о производительности — не гадайте, а тестируйте!

решение3

Похоже, вы работаете наднеловко параллельновычислительной задачи, в этом случае ответ «да», ваша пропускная способность будет масштабироваться почти линейно с общим количеством используемых потоков ЦП.

Связанный контент