Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
Alex9
Заблокирован
1

При изменении числа потоков время выполнения не изменяется

23.09.2013, 22:30. Просмотров 515. Ответов 9
Метки нет (Все метки)

Произвожу арифметические расчеты, однотипные в множестве потоков. N расчетов всегои К потоков. Если К=1, время выполнения N расчетов получается равным времени выполнения при K=100. В чём может быть причина ? Теоретическая оценка такова, что при большем числе потоков общий расчет займет меньшее время. Могу прислать проект, но он великоват и никакой ценности не представляет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2013, 22:30
Ответы с готовыми решениями:

Разделить время выполнения потоков
Я только начал изучать потоки, так что возможно это нубский вопрос, но как...

При выборе из выпадающего списка Items во время выполнения, мне необходимо изменить Combobox.Text
У меня возникло затруднение с Сombobox: при выборе из выпадающего списка Items...

Калькулятор: побороть крошение программы при изменении числа + на -, если поле ввода пустое
Дали задание создать простейший калькулятор на windows forms. Не могу побороть...

Дождаться полного выполнения пула потоков
У меня пул потоков выполняет сортировку временных файлов: for (int...

Странный результат выполнения нескольких потоков
internal class Program { private static void Main() {...

9
kolorotur
Эксперт .NET
10492 / 8680 / 2159
Регистрация: 17.09.2011
Сообщений: 14,900
Завершенные тесты: 1
23.09.2013, 23:15 2
Большее количество потоков требует большего оверхеда на их создание и переключение контекста между ними.
По мере увеличения количества этих потоков, в какой-то момент оверхед сводит на нет выигрыш в производительности, после чего дальнейшее увеличение их количества будет приводить к падению производительности.

Ну и очень много зависит от метода синхронизации, который тоже может свести на нет весь выигрыш от распараллеливания.
1
Psilon
Master of Orion
Эксперт .NET
6000 / 4850 / 902
Регистрация: 10.07.2011
Сообщений: 14,460
Записей в блоге: 5
Завершенные тесты: 4
24.09.2013, 00:38 3
Alex9, поэтому была изобретена такая вещь, как пул потоков. С которым работает вся внутренняя кухня шарпа, начиная с незапамятных времен (TPL, PLINQ, Task/Task<T>,async/await)
0
MrGladus
169 / 169 / 50
Регистрация: 06.01.2013
Сообщений: 392
24.09.2013, 10:45 4
А еще есть такое понятие как Context Switching. В любой данный момент времени, Windows "закрепляет" один поток за одним CPU, если CPU двух-ядерный, то в один момент времени он будет обрабатывать 2 потока. Рихтер в книге писал что Windows производит Context Switching примерно каждые 30 ms. Итого если у нас 100 потоков, то только 2 из них будут выполняться одновременно в один момент времени, при условии что установлен 2х-ядерный CPU.
0
Psilon
Master of Orion
Эксперт .NET
6000 / 4850 / 902
Регистрация: 10.07.2011
Сообщений: 14,460
Записей в блоге: 5
Завершенные тесты: 4
24.09.2013, 12:06 5
MrGladus, это называется псевдопараллельная многозадачность
1
Alex9
Заблокирован
24.09.2013, 18:02  [ТС] 6
Странно, нам на лабе сказали, что 10 потоков будут вычислять быстрее 4.
0
kolorotur
Эксперт .NET
10492 / 8680 / 2159
Регистрация: 17.09.2011
Сообщений: 14,900
Завершенные тесты: 1
24.09.2013, 18:18 7
Цитата Сообщение от Alex9 Посмотреть сообщение
нам на лабе сказали, что 10 потоков будут вычислять быстрее 4.
Цитата Сообщение от Alex9 Посмотреть сообщение
Если К=1, время выполнения N расчетов получается равным времени выполнения при K=100
А 100 потоков будут вычислять так же, как 1. А 101 поток будет вычислять медленнее, чем 1.
0
Psilon
Master of Orion
Эксперт .NET
6000 / 4850 / 902
Регистрация: 10.07.2011
Сообщений: 14,460
Записей в блоге: 5
Завершенные тесты: 4
24.09.2013, 18:48 8
kolorotur, если у нас GPGPU, то не факт

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

Добавлено через 1 минуту
так что для какого-нибудь зеона утверждение
нам на лабе сказали, что 10 потоков будут вычислять быстрее 4.
будет верно, т.к. там 12 логических ядер
0
kolorotur
Эксперт .NET
10492 / 8680 / 2159
Регистрация: 17.09.2011
Сообщений: 14,900
Завершенные тесты: 1
24.09.2013, 18:52 9
Цитата Сообщение от Psilon Посмотреть сообщение
если у нас GPGPU, то не факт
Ну ок, со 102-го потока падать начнет.
Ладно, пусть будет со 110-го
0
Psilon
Master of Orion
Эксперт .NET
6000 / 4850 / 902
Регистрация: 10.07.2011
Сообщений: 14,460
Записей в блоге: 5
Завершенные тесты: 4
24.09.2013, 18:58 10
kolorotur,
HD 8990 обладает 5,1 млрд. транзисторов, 5210 потоковыми процессорами, 160 текстурными блоками и 48 блоками растеризации.
0
24.09.2013, 18:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2013, 18:58

BackgroundWorker, несколько потоков и процент выполнения
Здравствуйте, На форме есть кнопка и label (из примера...

Как стартовать несколько потоков и дождаться их выполнения
привет есть 4 метода хочу стартовать их и дождаться когда они все закончат...

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


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

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

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