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

Вопрос:

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

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

3 ответа3

3

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

  1. У вас не будет вдвое большей пропускной способности памяти.

  2. Потребуется время для «пинг-понга» между строками кеша между процессорами.

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

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

И так далее.

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

0

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

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .