Форум программистов, компьютерный форум CyberForum.ru

Вопрос про многопоточность и производительность - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.63
Predlegion
3 / 3 / 0
Регистрация: 21.01.2011
Сообщений: 27
28.10.2011, 02:03     Вопрос про многопоточность и производительность #1
Здравствуйте!
Подскажите пожалуйста ответы на следующие вопросы:

1) Правда ли,что многопоточность в программе позволяет увеличить производительность программы, т.е снизить загрузку ЦП?

2)Например есть программный код. Можно ли каким-нибудь образом, используя определенные средства отладки, посмотреть сколько системных ресурсов(а именно загрузка ЦП) едят отдельные куски этого кода? Т.е узнать, на сколько цикл грузит систему или часть определенной подпрограммы?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2011, 02:03     Вопрос про многопоточность и производительность
Посмотрите здесь:

Вопрос про указатели C++
C++ Вопрос про __function
Вопрос про память... C++
вопрос про скобки C++
Вопрос про реестр C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
29.10.2011, 08:27     Вопрос про многопоточность и производительность #21
kravam, при все уважении, Deviaphan только что подтвердил то что я написал выше.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.10.2011, 08:35     Вопрос про многопоточность и производительность #22
Цитата Сообщение от greeezz Посмотреть сообщение
kravam,к примеру ваш одноядерный процессор в состоянии выполнять N операций в секунду. к примеру для чтения файла ваш программа в один поток занимает n/10 операций в секунду. почему бы не добавить еще пару потоков которые займут образно говоря еще 2n/10 операций в секунду. поправьте если я не ошибаюсь.
Поток занимает не число операций в секунду, а просто число операций. А число операций в секунду - это характеристика процессора. Вот представь: тебе надо проехать 1000 км. Не 1000 км/ч, а именно 1000 км, это расстояние. И надо перевести на это расстояние грузы. У тебя есть машина, с грузом едущая со скоростью 100 км/ч, но возвращающаяся порожняком мгновенно. Взять два груза сразу нельзя. Делим расстояние на скорость и получаем время - 10 часов. Чтоб проехать быстрее, надо форсировать двигатель и ехать 120 км/ч (разгон процессора). Но не имеет значение, хочешь ли ты проехать с одним грузом 1000 км (1 поток), или перевести 10 грузов на 100 км (10 потоков), с ограниченной скоростью ты всё равно проедешь 1000 км. А многоядерный процессор - это несколько таких машин. Пусть у тебя их две. Если у тебя одна дорога и один груз (один поток), то ты можешь отправлять обе машины, скорость всё равно 100 км/ч и время 10 ч. Но если ты хочешь перевести два груза на 500 км, или 10 грузов на 100 км, то можно отправить одну машину (один поток), а можешь обе. Первый случай - это тот же одноядерник. А во втором сколько проедет каждая машина? 500 км. И время 500/100=5ч. Но нагрузка на двуядерный процессор - это сумма нагрузок на ядра. Если ты одну машину используешь на 100%, а вторую не используешь, то общая нагрузка 50% (ресурсы то двойные и процентное выражение нагрузки на процесор есть средний процент нагрузки на ядра). А если обе машины использовать на 100%, то и общая нагрузка 100%.

Добавлено через 2 минуты
Цитата Сообщение от Deviaphan Посмотреть сообщение
РЕчь о том, что на однопроцессорном компьютере может выполняться более одного потока в единицу времени.
Не может.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.10.2011, 08:40     Вопрос про многопоточность и производительность #23
Цитата Сообщение от taras atavin Посмотреть сообщение
Не может.
Повторяю. В процессе чтения файла процессор практически не используется. Т.е. он простаивает. Если программа многопоточная, то в это же самое время (не после а прям именно в это же время) может работать другой поток. Если другого потока нет, то в это время может выполняться другой процесс.
Именно благодаря этому многие идиомы параллельного программирования появились задолго до появления многопроцессорных компьютеров.
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
29.10.2011, 08:43     Вопрос про многопоточность и производительность #24
taras atavin, я понимаю о чем вы говорите... но все дело в том что процессор действительно простаивает и когда он простаивает то другой поток занимает "свободное время". я не говорю что в одном ядре два потока работаю асинхронно. они работаю синхронно. но при наличии более одного потока у вас есть возможность использовать процессор более эффективно за счет использования времени "простоя" процессора. понятное дело что нельзя до бесконечности увеличивать количество потоков потому что время простоя с каждым новым потоком уменьшается.
LosAngeles
Заблокирован
29.10.2011, 08:51     Вопрос про многопоточность и производительность #25
kravam, есть такая штука Hyper-Threading, и она впервые появилась в одноядерном пентиуме4. Вот что пишут сами интеловцы
Each
logical processor consists of a full set of IA-32 data registers, segment registers,
control registers, debug registers, and most of the MSRs. Each also has its own
advanced programmable interrupt controller (APIC).
Unlike a traditional MP system configuration that uses two or more separate physical
IA-32 processors, the logical processors in an IA-32 processor supporting Intel HT
Technology share the core resources of the physical processor
.
This configuration allows two or more
threads to be executed simultaneously on each a physical processor
.
а один поток может выполняется на машине с одним или более процессоров, про нольпроцессорные это сарказм?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.10.2011, 08:54     Вопрос про многопоточность и производительность #26
Цитата Сообщение от Deviaphan Посмотреть сообщение
Если программа многопоточная, то в это же самое время (не после а прям именно в это же время) может работать другой поток.
Одноядерник не может исполнять несколько потоков в единицу времени. Процессор простаивает ан файловой и может выполнять другой поток? Эйси. И что? В многопоточном приложении любой процессор выполняет только другие потоки во время файловой операции.
LosAngeles
Заблокирован
29.10.2011, 08:57     Вопрос про многопоточность и производительность #27
Цитата Сообщение от taras atavin Посмотреть сообщение
Одноядерник не может исполнять несколько потоков в единицу времени
с хипертредингом может!
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
29.10.2011, 09:01     Вопрос про многопоточность и производительность #28
Цитата Сообщение от LosAngeles Посмотреть сообщение
с хипертредингом может!
Не может. С HT другой поток выполняется во время простоя первого
LosAngeles
Заблокирован
29.10.2011, 09:06     Вопрос про многопоточность и производительность #29
Цитата Сообщение от mimicria Посмотреть сообщение
Не может. С HT другой поток выполняется во время простоя первого
конечно, но для операционной системе это прозрачно и я придерживаюсь терминологии интел, а они дали недвусмысленный ответ, что два или более потоков могут одновременно выполняться на одном физическом процессоре!
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.10.2011, 09:18     Вопрос про многопоточность и производительность #30
Цитата Сообщение от taras atavin Посмотреть сообщение
многопоточном приложении любой процессор выполняет только другие потоки во время файловой операции.
Операции чтения/записи выполняются не процессором, а контроллером (условно говоря). Программа ожидает прерывание от контроллера, чтобы продолжить работу (тоже условно говоря). Во время этого ожидания процессор ничем не занят. И его можно занять.
Мне уже скучно...

Добавлено через 1 минуту
PS. HT работает только для "слабо загруженных" приложений. Если приложение на 100% загружает конвеер команд и процессор, то HT бесполезен.
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
29.10.2011, 09:20     Вопрос про многопоточность и производительность #31
Цитата Сообщение от LosAngeles Посмотреть сообщение
конечно, но для операционной системе это прозрачно
Всё равно следует понимать, что поскольку процессор один на два потока (за исключением своих регистров и прерываний), то и используется он в каждый момент времени только одним потоком
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.10.2011, 09:37     Вопрос про многопоточность и производительность #32
Цитата Сообщение от mimicria Посмотреть сообщение
то и используется он в каждый момент времени только одним потоком
У меня никогда не было процессора с НТ, поэтому я сильно не вдавался, но насколько помнится, там параллельность основывается на использовании конвеера команд. Пока один поток конвеер заполняет, второй поток вторым конвеером пользуется. Т.е. параллельность достигается за счёт того, что во время исполнения комманд одного потока происходит декодирование команд второго потока. Как-то так вроде.
Надо этой технологии побольше внимания уделить, раз интел её опять внедрило.)
LosAngeles
Заблокирован
29.10.2011, 09:39     Вопрос про многопоточность и производительность #33
Цитата Сообщение от mimicria Посмотреть сообщение
Всё равно следует понимать, что поскольку процессор один на два потока (за исключением своих регистров и прерываний), то и используется он в каждый момент времени только одним потоком
читай внимательней, в одной из моих цитат об этом написано и выделенно жирным шрифтом
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
29.10.2011, 10:47     Вопрос про многопоточность и производительность #34
LosAngeles, так-то я в английсколм не силён.
the logical processors in an IA-32 processor supporting Intel HT
Technology share the core resources of the physical processor
.

Я так понял какая-то технология разделяет ядерные ресурсы физического процессора.
То есть дядьки создали физический процессор, а потом создали технологию, которая позволяет из него одного сделать два?

А чё бы сразу два-то не сделать?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.10.2011, 11:03     Вопрос про многопоточность и производительность #35
Принцип действия Hyper-Threading основывается на том, что в каждый момент времени только часть ресурсов процессора используется при выполнении программного кода. Неиспользуемые ресурсы также можно загрузить работой -- например, задействовать для параллельного выполнения еще одного приложения (либо другого потока этого же приложения).
Чтобы много не копипастить.
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
29.10.2011, 12:14     Вопрос про многопоточность и производительность #36
Тоже скопипастю
Когда при исполнении потока одним из логических процессоров возникает пауза (в результате кэш-промаха, ошибки предсказания ветвлений, ожидания результата предыдущей инструкции), то управление передаётся потоку в другом логическом процессоре. Таким образом пока один процесс ждёт, например данные из памяти, вычислительные ресурсы физического процессора используются для обработки другого процесса.
Итог всё равно такой - не одновременно, а пока один из потоков на паузе.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.10.2011, 12:24     Вопрос про многопоточность и производительность #37
Цитата Сообщение от mimicria Посмотреть сообщение
а пока один из потоков на паузе
Цитата Сообщение от mimicria Посмотреть сообщение
один процесс ждёт, например данные из памяти
В том числе дисковой памяти. О чём и идёт речь. Пока один поток ждёт завершения чтения, второй выполняет работу. При этом, первый поток только считывает данные из файла и не делает с ними ничего другого. То, что поток в процессе чтения не загружает процесор, это не наша проблема. Факт в другом, пока первый поток читает данные из файла, второй использует свободные ресурсы процессора.
В контексте чтения файла, я говорил о многопоточном приложении на однопроцессорном компьютере без НТ, разумеется.

Добавлено через 2 минуты
Цитата Сообщение от Deviaphan Посмотреть сообщение
Пока один поток ждёт завершения чтения, второй выполняет работу
Причём, первый поток не бездействует, в нём осуществляется чтение файла, но процессор не используется. Одновременно с чтением файла выполняется работа вторым потоком.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.10.2011, 12:40     Вопрос про многопоточность и производительность #38
Цитата Сообщение от Deviaphan Посмотреть сообщение
Причём, первый поток не бездействует, в нём осуществляется чтение файла, но процессор не используется.
Ну а я о чём? Файловый поток исполняет не процессор, процессор не исполняет.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.10.2011, 12:44     Вопрос про многопоточность и производительность #39
Цитата Сообщение от taras atavin Посмотреть сообщение
Ну а я о чём? Файловый поток исполняет не процессор, процессор не исполняет.
Я это в первом сообщении ещё сказал. Что чтение выполняется "контроллером", поток ожидает прерывания. Второй в это время работает. Но ведь разговор не о том, процессор или кто-то ещё работает, разговор о том, что чтение файла и работа второго процессора происходит одновременно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2011, 13:00     Вопрос про многопоточность и производительность
Еще ссылки по теме:

Вопрос про табуляцию в C++ C++
C++ Производительность CPU, КЕШ, многопоточность
C++ Книга про многопоточность

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.10.2011, 13:00     Вопрос про многопоточность и производительность #40
А я пишу о том, что скорость наращивается за счёт большей нарузки на процессор. Или уменьшение простоев - это снижение нагрузки? И конкретно время загрузки не зависит ни от потоков, ни от ядер. Если кроме загрузки надо делать что то ещё, то можно те операции вынести в отдельный поток, но делить саму загрузку на несколько потоков бессмысленно, быстрее она не произойдёт, если только не с разных дисков.
Yandex
Объявления
29.10.2011, 13:00     Вопрос про многопоточность и производительность
Ответ Создать тему
Опции темы

Текущее время: 21:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru