Моя программа:100% на базе ЦП и ОЗУ, выполняетматематические расчеты, вначале считывает данные с жесткого диска в оперативную память.Нет связи между потоками.Нити, все берутв то же времятакже (почти).
Вопрос:
Если моя программа использует потоки, равные количеству потоков ЦП, какую производительность я могу ожидать от системы с двумя ЦП?
Допустим, я использую два 8-ядерных xeon, каждый с 16 потоками, так что 16x2 = 32 потока в общей сложности. Если моя программа использует 32 потока, все с 100% использованием, получу ли я двойную производительность по сравнению с одним тем же процессором?
решение1
На самом деле, лучший ответ, который вы можете дать, это "вероятно, нет, но это зависит от обстоятельств". У вас в два раза больше чистой мощности процессора, но:
На самом деле вы не получите удвоения полезной пропускной способности памяти.
Потребуется время, чтобы «перебросить» несколько строк кэша между процессорами.
Иногда одному потоку приходится ждать другой, и чем больше у вас потоков, тем чаще это происходит.
Иногда, даже если у вас много работы, вы не можете сделать ее всю сразу.
И так далее.
В очень редких случаях вы действительно можете получитьболеепроизводительность более чем в два раза выше. Если операция ограничена кэшем, наличие большего количества ядер может означать, что поток может работать дольше (поскольку у ядра не будет других дел, которые нужно сделать, поскольку их выполняют другие ядра), позволяя кэшам ЦП дольше оставаться горячими.
решение2
Окончательный ответ на вопрос о производительности — не гадайте, а тестируйте!
решение3
Похоже, вы работаете наднеловко параллельновычислительной задачи, в этом случае ответ «да», ваша пропускная способность будет масштабироваться почти линейно с общим количеством используемых потоков ЦП.