![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#21 | |||
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]() Цитата:
Цитата:
И что значит "одинаково загружены"? По условию объем вычислений в разных потоках различается. Почитайте, что пишет об этом ТС. В разных потоках решаются разные задачи. Цитата:
Отимальное распределение существенно зависит от того, как соотносятся объемы вычислений в разных потоках. Если нам это неизвестно, то целесообразно (при возможности) подробить задачу на большее количество потоков (и сделать это не на Делфи, а на WinAPI), а также (при возможности) начинать вычисления с более ресурсоемких фрагментов, а заканчивать менее ресурсремкими. |
|||
![]() |
![]() |
![]() |
#22 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
![]()
> Я делал тест не на Делфи.
если не лень, портируйте в вашу среду код из поста #18 (там 94% чистого WinAPI, никаких средств Дельфи (кроме writeln() и IntToStr()) не используется, так что проблем быть не должно) и скиньте сюда результат, спасибо.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
![]() |
![]() |
![]() |
#23 | |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]() Цитата:
Код:
Да, CPU Atom-1600, 1 ядро, гипертрединг. |
|
![]() |
![]() |
![]() |
#24 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
![]()
спасибо, я понял. эта читерская винда даёт больше тому, у кого больше потоков ) надо под линухом потестить, может там не всё так плохо )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
![]() |
![]() |
![]() |
#25 |
Форумчанин
Регистрация: 16.10.2008
Сообщений: 205
|
![]()
Сделал так:
Код:
Спасибо всем за помощь. |
![]() |
![]() |
![]() |
#26 | |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]() Цитата:
А по поводу "все так плохо" - категорически не согласен: накладные затраты на организацию потоков и переключение между ними оказались существенно меньше ожидаемого - чего ж тут плохого? |
|
![]() |
![]() |
![]() |
#27 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
![]()
gusluk, только не забывайте, что процедура потока должна быть объявлена так:
Код:
Код:
> чего ж тут плохого плохо, что самый наглый получает больше других ) по-идее процессы с 2 и с 64 потоками должны получать одинаковые кванты процессорного времени на свою работу. Реально же, даже по грубым тестам, выходит, что чем больше потоков ты создал, тем больше цпу отжал у других. Это ерунда.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
![]() |
![]() |
![]() |
#28 |
Форумчанин
Регистрация: 16.10.2008
Сообщений: 205
|
![]()
Есть еще один вопрос по другой задаче. Вернее задача все та же, методика её решения другая. В этой мы считали перенос вещества, энергии и прочее в узлах регулярной сетки, во втором варианте моделируем уже сами частицы и их движение.
Движение частиц считал так: Код:
Код:
Чтобы уменьшить объем вычислений все сразу пересчитывается на скорость по осям. Теперь, при попытке разбить расчеты на потоки, в первом варианте вопросов не возникает, если потоков k, а частиц N, то каждый поток рассчитывает свои N/k частиц и все хорошо работает. Во втором случае могут возникнуть ситуации когда два разных потока будут рассчитывать свои частицы и их ответное влияние на одну и туже частицу. Соответственно придется как то делать синхронизацию, что в свою очередь приведет к замедлению. Так вот как именно тут сделать синхронизацию, и не приведет ли она к тому что первый вариант будет быстрее чем второй? |
![]() |
![]() |
![]() |
#29 | |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]() Цитата:
Другое дело - ОС серверная. Но и в этом случае ресурсы должны делиться между пользователями, а не между процессами. И, кроме того, внутри ресурса одного пользователя, опять же, не вижу ничего плохого в том, чтобы раздавать ресурс по потокам. |
|
![]() |
![]() |
![]() |
#30 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]()
gusluk, посмотрел на реализацию.
Первое, что озадачило, обычно интегрирование по времени производится с определенным шагом DeltaT. Ничего подобного я в Вашем коде не обнаружил. Я крайне надеюсь, что Вы привели не весь код процедур, а только его фрагменты. В коде то появляются, то исчезают какие-то странные константы типа: Код:
Код:
Код:
Ну и главный вопрос: Вам нужно распараллелить задачу или сделать, чтобы задача работала быстрее? |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
оптимальный план замены оборудования | DampuL | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 23.12.2010 16:04 |
Оптимальный поиск и сравнение строк | Utkin | Общие вопросы по программированию, компьютерный форум | 19 | 30.06.2010 14:54 |
нужно найти оптимальный путь | Marina87 | Фриланс | 16 | 29.04.2010 16:01 |
оптимальный размер окна программы | street-walker | Общие вопросы Delphi | 10 | 06.01.2010 00:04 |