3 / 3 / 1
Регистрация: 21.01.2011
Сообщений: 27
|
|
1 | |
Вопрос про многопоточность и производительность28.10.2011, 02:03. Показов 14914. Ответов 40
Метки нет (Все метки)
Здравствуйте!
Подскажите пожалуйста ответы на следующие вопросы: 1) Правда ли,что многопоточность в программе позволяет увеличить производительность программы, т.е снизить загрузку ЦП? 2)Например есть программный код. Можно ли каким-нибудь образом, используя определенные средства отладки, посмотреть сколько системных ресурсов(а именно загрузка ЦП) едят отдельные куски этого кода? Т.е узнать, на сколько цикл грузит систему или часть определенной подпрограммы?
0
|
28.10.2011, 02:03 | |
Ответы с готовыми решениями:
40
Производительность CPU, КЕШ, многопоточность Вопрос про многопоточность Про многопоточность моя первая плата, хедеры - вопрос про eagle или про пайку |
278 / 173 / 21
Регистрация: 10.07.2011
Сообщений: 441
|
|
28.10.2011, 02:39 | 2 |
подозреваю что при увеличении количества потоков загрузка процессора в единицу времени не снижается а увеличивается. с увеличением числа потоков вы можете ускорить работу вашей программы. но не уменьшить загрузку процессора. например у вас есть 100 файлов которые надо прочитать. если вы будете читать файлы в одном потоке то потратите ( в среднем )времени 100*t. Если вы будете делать чтение в 10 потоков. и каждый из потоков будет читать свои 10 файлов то вы теоретически увеличите скорость работы в 10 раз. Теоретически.. это потому что с увеличением загрузки процессора возможно скорость обработки одного файла в отдельно взятом потоке может увеличиться. Конечно в случае с 10тью небольшими файлами это будет незаметно а вот например с парой сотен достаточно больших файлов разницу можно будет увидеть невооружённым глазом.
1
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
28.10.2011, 06:00 | 3 |
Приложения, работающие быстрее, далеют это за счёт большей нагрузки на ЦП. Если эту нагрузку снизить, то приложение будет работать медленнее. Фокус в том, что приложение в любом случае должно выполнить определённую работу, состоящую из определённого числа операций. Каждый ЦП способен выполнить некоторое количество n операций в единицу времени. Нагрузка на ЦП - это количество операций, фактически выполняемых процессором в единицу времени. Чем больше операций ЦП выполняет в единицу времени, тем быстрее о выполнит те операции, из которых состоит его работа по исполнению приложения. Многопоточные же приложения могут работать быстрее только на многоядерных процессорах. Причём, есть определённый придел, до которого чем больше в приложении потоков, тем быстрее оно исполняется. Этот придел у каждого ЦП свой и равен количеству ядер. Если потоков слишком много, то несколько потоков выполняются фактически последовательно одним ядром вместо распараллеливания по индивидуальным ядрам для каждого потока. А в последовательном режиме не имеет значения, один поток выполнять, или несколько, за исключением одного нюанса - на переключение между потоками тоже тратится время. Но этот обратный эффект мал до незаметности.
1
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
28.10.2011, 06:06 | 4 |
Неправильно. Скорость при чтении 100 файлов десятью потоками ВООБЩЕ не увеличится (исключение: двухъядерный процессор, но мы этот случай щас не рассматриваем). В среднем, конечно. А потому, что потоки выполняются не параллельно, на самом деле, а ПСЕВДОПАРАЛЛЕЛЬНО. Для этого примера можно сказать, что потоки будут выполняться последовательно, один за другим. Часть первого потока, часть второго, часть третьего, часть первого и так далее. Так что никакого выигрыша.
1
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
28.10.2011, 06:56 | 5 |
Почему? В контексте связи многопоточности и производительности должны быть рассмотрены в первую очередь именно многоядерные процессоры и многопроцессорные компьютеры.
Добавлено через 1 минуту Нет не так. Первый поток в первом ядре, второй - во втором, третий - в третьем, то есть параллельно, за исключением случаев, когда для этого не хватает ядер, тогда номинально параллельно с точки зрения самого приложения, но фактически последовательно, причём, если ядер больше одного, но меньше, чем потоков, то не все потоки исполняются фактически последовательно, а имеет место фактически последовательное исполнение потоков нескольких действительно параллельно исполняемых групп потоков, число таких групп равно числу ядер, исполняющих данное приложение (может часть ядер занято потоками других приложений?).
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
28.10.2011, 07:11 | 6 |
Ну вы же не будете возражать против тык скыть рассмотрения случая- даже отвечая на данный вопрос-, когда есть ОДИН ПРОЦЕССОР? А тогда получается:
1) В ПЕРВУЮ ОЧЕРЕДЬ рассматриваем работу потоков на нескольких процессорах 2) Во вторую очередь- потоки на одном процессоре Сдаётся мне, кто-то из нас неправ. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ А вообще это не столь уж важно, я greeezz возражал если что. С вами-то я согласен. Надо уж сразу дополнить, что надо УМЕТЬ закрепить поток за определённым процессором (или ядром, не знаю, как сказать), ждать, что это сделает ось- нехорошо. Не по теме: Как сказал Ленин, мы не можем ждать милости от природы, взять их у неё- наша задача Откровенно, говоря, я не знаю, возможно ли это в принципе, ещё не дошли руки уменя до этого.
0
|
28.10.2011, 09:45 | 7 |
Это хорошо но не всё так просто как может показаться. Если есть общий ресурс связан с файлами(ж-диск), потоки будут читать файлы с диска не одновременно, просто в случае многоядерного процессора скорость обработки файлов будет быстрее но никак не считывания с диска.
И сколько времени тратится если они исполняются в одном адресном пространстве процесса( это если говорить про потоки создаваемые на уровне ядра), а здесь не так критично.
1
|
278 / 173 / 21
Регистрация: 10.07.2011
Сообщений: 441
|
|
28.10.2011, 18:25 | 8 |
ну почему-же не рассматриваем. я думаю по умолчанию понятно что при наличии одного процессора в системе так или иначе процессы будут выполнятся синхронно.
И еще могу добавить, что ускорение работы программы во многом зависит от задачи и компонентов программы. К примеру при работе с базой данных при увеличении количества потоков вы можете существенно увеличить скорость обработки данных. но понятно что не до бесконечности. Пример. У вас есть таблица в которой есть пара сотен тысяч строк. Допустим вам надо сделать апдейт значения в каком то поле в большей половине строк. Если вы запустите программу в один поток то вы получите время выполнения t, а если вы сделаете два потока то время сократится раза в полтора. Попробуйте на досуге. Естественно что надо подумать о том что процессы не должны мешать друг другу делать апдейты чтобы не сработал дэдлок таблицы. Простейший способ избежать данной проблемы это наличие поля в таблице по которому вы будете разделять строки по потокам.
1
|
23 / 23 / 4
Регистрация: 05.11.2010
Сообщений: 134
|
|
28.10.2011, 18:36 | 9 |
Для проверки параллельного алгоритма лучше проверять его на многопроцессорной машине, нежели на обычном компе. А если процессор допотопный(как правильно сказали ребята), то параллельный алгоритм будет долгим. Как минимум необходим двухъядерный процессор. А лучше - кластерная система
1
|
3 / 3 / 1
Регистрация: 21.01.2011
Сообщений: 27
|
|
28.10.2011, 23:05 [ТС] | 10 |
ОК, т.е многопоточные приложение едят столько же ресурсов системы как и однопоточные а может даже и чуть больше
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
28.10.2011, 23:23 | 11 |
Требуется более развёрнутый ответ, советую почитать Джефри Ритера. Там вопрос изучается тык скыть во всём его разнообразии.
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
28.10.2011, 23:39 | 12 |
Потоки используют не только ЦП, но и ввод/вывод
однопоточная система в общем случае неэффективна при работе с вводом/выводом, без ухищрений таких как асинхронный ввод, вывод итп Добавлено через 2 минуты профилировщики например
0
|
23 / 23 / 4
Регистрация: 05.11.2010
Сообщений: 134
|
|
29.10.2011, 00:28 | 14 |
Van111, На каком процессоре вы это проверяли?
Если брать сравнивать одноядерный процессор, который работает по очереди с потоками, или несколько ядерный процессор, где каждое ядро обрабатывает по два потока за единицу времени, то спорить бесполезно. Просто вы задали для вашего процессора тяжёлую задачу. Есть такие параллельные алгоритмы, которые гораздо лучше срабатывают по времени на многопроцессорной системе, нежели на наших обычных машинах. А многоядерные процессоры - это уже одна из технологий параллельных алгоритмов работы с потоками. Многоядерные процессоры работают быстрее даже с меньшей тактовой частотой, нежели одноядерный процессор с большей тактовой частотой
1
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
29.10.2011, 07:26 | 15 |
Ответ будет зависеть от архитектуры приложения.
На ОДНО процессорном компьютере потоки МОГУТ выполняться ПАРАЛЛЕЛЬНО в некоторых ситуациях. Как раз такая ситуация и была упомянута: обработка нескольких файлов. Один поток считывает файл, другой В ЭТО ЖЕ ВРЕМЯ обрабатывает файл, который был считан до этого. И т.д.
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
29.10.2011, 07:56 | 16 |
Deviaphan, я всё время считал, что на однопроцессороном компьютере в один момент времени может выполняться один поток. Но вы меня переубедили. И всё бы ничего, но возник вопрос:
А на скольки процессорном компьютере может выполняться ТОЛЬКО один поток? На нолепроцессорном что ли?
0
|
278 / 173 / 21
Регистрация: 10.07.2011
Сообщений: 441
|
|
29.10.2011, 08:17 | 17 |
kravam,к примеру ваш одноядерный процессор в состоянии выполнять N операций в секунду. к примеру для чтения файла ваш программа в один поток занимает n/10 операций в секунду. почему бы не добавить еще пару потоков которые займут образно говоря еще 2n/10 операций в секунду.
поправьте если я не ошибаюсь.
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
29.10.2011, 08:17 | 18 |
Кстати, скорость именно множества файловых операций с одним физическим диском не зависит от числа потоков в любом случае, так как лимитируется характеристиками дисковода, а не процессора.
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
29.10.2011, 08:21 | 19 |
greeezz, при всём уважении, подождём, что скажет девиапан.
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
29.10.2011, 08:26 | 20 |
Речь о том, что в процессе чтения файла процессор простаивает. Если приложение многопоточное, то второй поток может работать одновременно с чтением файла первым потоком.
Один поток может выполняться хоть на сколькипроцессорном компьютере. РЕчь о том, что на однопроцессорном компьютере может выполняться более одного потока в единицу времени. Добавлено через 1 минуту Как я сразу и сказал, ответ зависит от архитектуры приложения. Разделение на потоки не сделает программу быстрее автоматически. Нужно разделять на потоки с умом.
0
|
29.10.2011, 08:26 | |
29.10.2011, 08:26 | |
Помогаю со студенческими работами здесь
20
Вопрос про обратную связь, и про схемотехнику полумоста Книга про многопоточность Книга про многопоточность И снова про многопоточность вопрос про Sape, про поиск площадок Посоветуйте литературу про многопоточность Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |