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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.63
Predlegion
3 / 3 / 0
Регистрация: 21.01.2011
Сообщений: 27
#1

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

28.10.2011, 02:03. Просмотров 3814. Ответов 40
Метки нет (Все метки)

Здравствуйте!
Подскажите пожалуйста ответы на следующие вопросы:

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

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

Производительность CPU, КЕШ, многопоточность - C++
Доброго времени суток! Суть проблемы - есть курсовой по системному программированию но я не знаю с чего и начать ( Тема:...

Книга про многопоточность - C++
Подскажите пожалуйста, в какой книге лучше написано про многопоточность, синхронизацию. И где есть хорошие примеры. Например, работа с...

Вопрос про палиндромы - C++
Такая вот задачка по програмированию С++: Ввести рядок символов и составить масив слов-палиндромов (читаются одинаково с права на лево и...

Вопрос про ф-ию mul - C++
Расскажите пожалуйста про ф-ию mul, перегружаемую в классе. Что она делает?

Вопрос про указатели - C++
#include <iostream.h> int main() { int x; int *Pointer; pointer = &x; cout << pointer; cout << *ponter; return 0; ...

Вопрос про outtextxy() - C++
Если в графическом режиме выводить текст с помощью функции outtextxy() поверх другого текста, то новый текст сливается со старым. Прошу...

40
kravam
быдлокодер
1697 / 884 / 45
Регистрация: 04.06.2008
Сообщений: 5,484
29.10.2011, 07:56 #16
Deviaphan, я всё время считал, что на однопроцессороном компьютере в один момент времени может выполняться один поток. Но вы меня переубедили. И всё бы ничего, но возник вопрос:

А на скольки процессорном компьютере может выполняться ТОЛЬКО один поток? На нолепроцессорном что ли?
0
greeezz
273 / 166 / 4
Регистрация: 10.07.2011
Сообщений: 441
29.10.2011, 08:17 #17
kravam,к примеру ваш одноядерный процессор в состоянии выполнять N операций в секунду. к примеру для чтения файла ваш программа в один поток занимает n/10 операций в секунду. почему бы не добавить еще пару потоков которые займут образно говоря еще 2n/10 операций в секунду.
поправьте если я не ошибаюсь.
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.10.2011, 08:17 #18
Кстати, скорость именно множества файловых операций с одним физическим диском не зависит от числа потоков в любом случае, так как лимитируется характеристиками дисковода, а не процессора.
0
kravam
быдлокодер
1697 / 884 / 45
Регистрация: 04.06.2008
Сообщений: 5,484
29.10.2011, 08:21 #19
greeezz, при всём уважении, подождём, что скажет девиапан.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.10.2011, 08:26 #20
Цитата Сообщение от kravam Посмотреть сообщение
А на скольки процессорном компьютере может выполняться ТОЛЬКО один поток?
Речь о том, что в процессе чтения файла процессор простаивает. Если приложение многопоточное, то второй поток может работать одновременно с чтением файла первым потоком.
Один поток может выполняться хоть на сколькипроцессорном компьютере. РЕчь о том, что на однопроцессорном компьютере может выполняться более одного потока в единицу времени.

Добавлено через 1 минуту
Как я сразу и сказал, ответ зависит от архитектуры приложения. Разделение на потоки не сделает программу быстрее автоматически. Нужно разделять на потоки с умом.
0
greeezz
273 / 166 / 4
Регистрация: 10.07.2011
Сообщений: 441
29.10.2011, 08:27 #21
kravam, при все уважении, Deviaphan только что подтвердил то что я написал выше.
0
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 Посмотреть сообщение
РЕчь о том, что на однопроцессорном компьютере может выполняться более одного потока в единицу времени.
Не может.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.10.2011, 08:40 #23
Цитата Сообщение от taras atavin Посмотреть сообщение
Не может.
Повторяю. В процессе чтения файла процессор практически не используется. Т.е. он простаивает. Если программа многопоточная, то в это же самое время (не после а прям именно в это же время) может работать другой поток. Если другого потока нет, то в это время может выполняться другой процесс.
Именно благодаря этому многие идиомы параллельного программирования появились задолго до появления многопроцессорных компьютеров.
0
greeezz
273 / 166 / 4
Регистрация: 10.07.2011
Сообщений: 441
29.10.2011, 08:43 #24
taras atavin, я понимаю о чем вы говорите... но все дело в том что процессор действительно простаивает и когда он простаивает то другой поток занимает "свободное время". я не говорю что в одном ядре два потока работаю асинхронно. они работаю синхронно. но при наличии более одного потока у вас есть возможность использовать процессор более эффективно за счет использования времени "простоя" процессора. понятное дело что нельзя до бесконечности увеличивать количество потоков потому что время простоя с каждым новым потоком уменьшается.
0
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
.
а один поток может выполняется на машине с одним или более процессоров, про нольпроцессорные это сарказм?
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.10.2011, 08:54 #26
Цитата Сообщение от Deviaphan Посмотреть сообщение
Если программа многопоточная, то в это же самое время (не после а прям именно в это же время) может работать другой поток.
Одноядерник не может исполнять несколько потоков в единицу времени. Процессор простаивает ан файловой и может выполнять другой поток? Эйси. И что? В многопоточном приложении любой процессор выполняет только другие потоки во время файловой операции.
0
LosAngeles
Заблокирован
29.10.2011, 08:57 #27
Цитата Сообщение от taras atavin Посмотреть сообщение
Одноядерник не может исполнять несколько потоков в единицу времени
с хипертредингом может!
0
mimicria
return (true);
1958 / 1095 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
29.10.2011, 09:01 #28
Цитата Сообщение от LosAngeles Посмотреть сообщение
с хипертредингом может!
Не может. С HT другой поток выполняется во время простоя первого
1
LosAngeles
Заблокирован
29.10.2011, 09:06 #29
Цитата Сообщение от mimicria Посмотреть сообщение
Не может. С HT другой поток выполняется во время простоя первого
конечно, но для операционной системе это прозрачно и я придерживаюсь терминологии интел, а они дали недвусмысленный ответ, что два или более потоков могут одновременно выполняться на одном физическом процессоре!
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.10.2011, 09:18 #30
Цитата Сообщение от taras atavin Посмотреть сообщение
многопоточном приложении любой процессор выполняет только другие потоки во время файловой операции.
Операции чтения/записи выполняются не процессором, а контроллером (условно говоря). Программа ожидает прерывание от контроллера, чтобы продолжить работу (тоже условно говоря). Во время этого ожидания процессор ничем не занят. И его можно занять.
Мне уже скучно...

Добавлено через 1 минуту
PS. HT работает только для "слабо загруженных" приложений. Если приложение на 100% загружает конвеер команд и процессор, то HT бесполезен.
0
29.10.2011, 09:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2011, 09:18
Привет! Вот еще темы с ответами:

Вопрос про наследование. - C++
Добрый день всем! Возможно ли создать производный класс в который будут помещены 2 объекта базового класса с возможностью...

Вопрос про реестр - C++
Здравствуйте господа програмисты!У меня есть программа,честно сознаюсь скачал с интернета и переделал не много,поэтому не доконца...

вопрос про скобки - C++
Здравствуйте, получил задание написать программу, смысл которой заключается в умножении матрицы на столбец. Матрица статическая, функция...

Вопрос про char - C++
Пожалуйста обьясните доступным языком в чем разница между объявлениями, и какие когда лучше использовать char a; char *c; char b=new...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru