Использование Threading on Quad core ускоряет код 65%?

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

P.S:

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

Ответ 1

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

  • Накладные расходы при администрировании различных потоков.
  • Другие процессы используют ресурсы в системе одновременно.

Ответ 3

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

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

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

Ответ 4

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

  • Время создания/запуска/остановки потоков.
  • Дополнительная работа (например, блокировка/увеличение)
  • Не каждый ресурс может быть идеально параллелизуемым, например. доступ к памяти или чтение/запись файлов.
  • Операционная система и другие приложения могут время от времени нуждаться в части процессорного времени.

Ответ 5

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

Ответ 6

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

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