Будет Много увеличение поточной обработки скорость вычисления на Единственном Процессоре

На единственном процессоре, Будет многопоточность увеличить скорость вычисления. Поскольку все мы знаем, что, многопоточность используется для того, чтобы Повысить Пользовательскую оперативность реагирования и достигается sepating потоком UI и потоком вычисления. Но позволяет разговору только о консольном приложении. Будет многопоточность увеличивать скорость вычисления. Мы получаем результат culculation быстрее, когда мы вычисляем посредством многопоточности.

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

Пожалуйста, помогите мне. Если у Вас есть какой-либо материал для получения дополнительной информации о поточной обработке. отправьте.

Править: Меня задали вопрос, В любой момент времени, только одному потоку позволяют работать на одноядерном. Если так, почему люди используют многопоточность в консольном приложении.

Заранее спасибо, Harsha

21
задан Harsha 19 May 2010 в 11:09
поделиться

9 ответов

Что делают ваши вычисления? Вы не сможете ускорить его с помощью многопоточности, если это связано с процессором, но если по какой-то причине ваши вычисления записываются на диск или ждут какого-либо другого типа ввода-вывода, вы можете улучшить производительность с помощью потоковой передачи. Однако, когда вы говорите «вычисление», я предполагаю, что вы имеете в виду какой-то алгоритм, интенсивно использующий процессор, поэтому добавление потоков вряд ли поможет и даже может замедлить вас, поскольку переключение контекста между потоками добавляет дополнительную работу.

8
ответ дан 29 November 2019 в 06:56
поделиться

В общих чертах, нет, это ничего не ускорит.

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

На одном процессоре с HyperThreading (два виртуальных процессора) ответ становится «возможно».

Наконец, несмотря на то, что есть только один процессор, возможно, некоторые потоки могут быть перенесены на GPU или другое оборудование? Это своего рода отход от сценария «одного процессора», но технически может быть способом достижения увеличения скорости от многопоточности на одноядерном ПК.

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

20
ответ дан 29 November 2019 в 06:56
поделиться

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

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

5
ответ дан 29 November 2019 в 06:56
поделиться

Нет, нет и нет.

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

1
ответ дан 29 November 2019 в 06:56
поделиться

Точно так же, как в примере с пользовательским вводом, один поток может ожидать завершения дисковой операции, а другие потоки могут занять это процессорное время.

1
ответ дан 29 November 2019 в 06:56
поделиться

Как описано в других ответах, многопоточность на одном ядре не даст вам дополнительной производительности (несмотря на гиперпоточность). Однако, если ваша машина оснащена графическим процессором Nvidia, вы сможете использовать CUDA для передачи вычислений на графический процессор. См. http://www.hoopoe-cloud.com/Solutions/CUDA.NET/Default.aspx и C #: выполнение операций на графическом процессоре, а не на процессоре (вычисление числа Пи) .

1
ответ дан 29 November 2019 в 06:56
поделиться

Несколько потоков на 1 ЦП:

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

Мало потоков на N процессорах:

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

На самом деле это очень специфическая задача - вы можете очень легко распараллеливать одни вещи, в то время как другие практически невозможно. Возможно, это немного продвинутое чтение для новичка, но в мире C # есть 2 отличных ресурса по этой теме:

13
ответ дан 29 November 2019 в 06:56
поделиться

Вышеупомянутое большинство.

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

Что касается нескольких ядер, то многопоточность может значительно улучшить производительность. Однако многое зависит от того, как найти горячие точки и не переборщить. Повсеместное использование потоков и необходимость синхронизации могут даже снизить производительность. Оптимизация использования потоков с несколькими ядрами требует много предварительных исследований и планирования, чтобы получить хороший результат. Например, вам нужно подумать о том, сколько потоков использовать в разных ситуациях. Вы не хотите, чтобы потоки сидели и ожидали информации, используемой другим потоком.

http://www.intel.com/intelpress/samples/mcp_samplech01.pdf
https://computing.llnl.gov/tutorials/parallel_comp/
https://computing.llnl.gov/ tutorials / pthreads /
http://en.wikipedia.org/wiki/Superscalar
http://en.wikipedia.org/wiki/Simporary_multithreading

1
ответ дан 29 November 2019 в 06:56
поделиться

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

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

Вы, безусловно, можете разработать многопоточную программу, которая будет быстрее, чем однопоточная.

0
ответ дан 29 November 2019 в 06:56
поделиться
Другие вопросы по тегам:

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