Используя Поточную обработку на Четырехъядерной скорости код 65%?

Этот пример кода сравнивает последовательный метод с потоковым методом на Четырехъядерном процессоре. Код просто использует GetPixel () для чтения всех пикселей из 4 изображений. Я нашел, что скорость составляет приблизительно 65%, почему она не равняется 75%, поскольку у меня есть 4 ядра, и все они полностью используются?

P.S.:

Можно ли проверить код, поскольку я не делаю никакого ввода-вывода, и никакие другие процессы не работают над машинами (нормальные процессы окон)

10
задан Ahmed Said 19 May 2010 в 12:34
поделиться

6 ответов

Это может быть любое количество вещей. Несколько, которые приходят на ум

  1. Накладные расходы на администрирование различных потоков.
  2. Другие процессы используют ресурсы системы в то же время.
4
ответ дан 3 December 2019 в 23:12
поделиться

Скорее всего, он должен конкурировать с другими потоками в некоторой структуре данных или файле, так что вы не получите 100% параллельное выполнение.

Например, если вы должны были запустить операцию типа загрузки веб-страницы с веб-сайта в 4-стороннем параллельном режиме на четырехъядерном процессоре, а сервер разрешает только 1 одновременную загрузку с одного и того же IP-адреса за раз, вы вообще не получите никакого ускорения.

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

2
ответ дан 3 December 2019 в 23:12
поделиться

Потому что есть и другие факторы, которые нужно учитывать. Например, пропускная способность памяти и ввода-вывода, накладные расходы на переключение контекста потоков и т.д.

1
ответ дан 3 December 2019 в 23:12
поделиться

Многопоточность имеет накладные расходы, и не всегда все может работать параллельно.

  • Время создавать / запускать / останавливать потоки.
  • Выполнена дополнительная работа (например, блокировка / увеличение)
  • Не каждый ресурс может быть полностью распараллелен, например доступ к памяти или чтение / запись файлов.
  • ОС и другим приложениям время от времени может потребоваться некоторое время процессора.
2
ответ дан 3 December 2019 в 23:12
поделиться
  1. Вы запускаете его в операционной системе. Есть другие запущенные процессы. Это отнимет часть процессорного времени.
  2. Возможно, вы больше не ограничены процессором, а ограничены вводом-выводом (пропускная способность памяти, пропускная способность диска, ...).
  3. Всегда будут некоторые накладные расходы на распараллеливание (и переключение потоков), маршалинг и т. Д.

В целом, исходя из моего опыта параллельного программирования, если вы получите на 65% меньше времени, это очень хорошо.

1
ответ дан 3 December 2019 в 23:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: