Подтвердить что ты не робот

Будет ли многопоточность Multi увеличивать скорость вычисления на одном процессоре

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

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

Пожалуйста, помогите мне. Если у вас есть какие-либо материалы, чтобы узнать больше о потоковании. отправляем.

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

Спасибо заранее, Harsha

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

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

Таким образом, на самом деле это очень конкретная задача - вы можете параллелизировать одну вещь очень легко, в то время как это практически невозможно для других. Возможно, это немного продвинуло чтение для нового человека, но в мире С# есть 2 больших ресурса:

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

Ответ 8

Выше упоминание больше.

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

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

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/Simultaneous_multithreading

Ответ 9

Я занимаюсь интенсивными математическими симуляторами С++ с использованием 24-х основных серверов. Если я буду запускать 24 параллельных параллельных параллелирования на 24 ядрах одного сервера, тогда я получаю время выполнения для каждого из моих симуляций, например, X секунд.

Причудливая вещь, которую я заметил, заключается в том, что при запуске всего 12 симуляций, используя 12 из 24 ядер, а остальные 12 ядер простаивают, то каждое из имитаций выполняется во время выполнения Y секунд, где Y намного больше чем X! При просмотре графика диспетчера задач использования процессора очевидно, что процесс не придерживается только одного ядра, а чередуется между несколькими ядрами. То есть переключение между ядрами на использование всех ядер замедляет процесс вычисления.

То, как я поддерживал среду выполнения при запуске всего 12 симуляций, - запустить еще 12 "мусорных" симуляций сбоку, используя оставшиеся 12 ядер!

Заключение: при использовании многоядерных процессоров используйте их все на 100%, для более низкого использования время выполнения увеличивается!

Ответ 10

Для одноядерного процессора, Фактически производительность зависит от работы, о которой вы говорите. В вашем случае для расчета, выполняемого CPU, в этом случае OverClocking поможет, если ваш parentBoard поддерживает его. В противном случае CPU не сможет выполнять вычисления, которые быстрее, чем скорость процессора.

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

В одноядерном CPU, если потоки реализованы на уровне пользователя, многопоточность будет иметь значение, если в потоке блокируются системные вызовы, такие как операция ввода-вывода. Поскольку ядро ​​не будет знать о потоках пользовательского уровня.

Итак, если процесс выполняет I/O, тогда вы можете реализовать потоки в пространстве ядра, а затем вы можете реализовать различные потоки для разных задач. (Ответ здесь основан на теории.)

Ответ 11

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

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

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

Ответ 12

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

Единственное исключение - если вы выполняете распараллеливаемое расписание, вы можете запускать разные потоки на разных ядрах (это исключение, а не правило).