|
|
|
Канал Игры Мечты: «Вопрос по программингу (C#)» |
|
|
DIMOSUS.X
997 EGP
        Рейтинг канала: 4(67) : 188 Posts: 3252 Location: Vilnius/Minsk Joined: 06 Aug 2008
 |
|
Такая ситуация - физический движок весьма чувствителен к частоте вызова процедуры обновления физического мира.
Нужно фиксировать частоту вызова этой процедуры на отметке порядка 100 раз в секунду.
Для этого хочу создать отдельный поток.
Но вот проблема - как получить стабильное срабатывание 100 раз в секунду? Таймерами больше 20 не получишь.
_________________ Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом. |
|
|
ТехноМаг
360 EGP
     Рейтинг канала: 2(19) : 93 Posts: 2521 Location: Кронштадт Joined: 09 Apr 2007
 |
|
попробуй тиками (1 тик = 1 ms)
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей." |
|
|
DIMOSUS.X
997 EGP
        Рейтинг канала: 4(67) : 188 Posts: 3252 Location: Vilnius/Minsk Joined: 06 Aug 2008
 |
|
А мона подробней? Просто ни когда не слышал...
_________________ Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом. |
|
|
Crimson
560 EGP
    Рейтинг канала: 4(83) : 130 Posts: 3041
Joined: 03 Sep 2003
 |
|
Таймеров, которые гарантированно будет вызывать процедуру 100 раз в секунду, не бывает. Собственно, на обычной оси вообще нет никаких гарантий того, с какой частотой твой поток будет получать управление. По хорошему движок должен уметь менять длительность шага на ходу.
|
|
|
ТехноМаг
360 EGP
     Рейтинг канала: 2(19) : 93 Posts: 2521 Location: Кронштадт Joined: 09 Apr 2007
 |
|
http://programmersforum.ru/showthread.php?t=35272
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей." |
|
|
DIMOSUS.X
997 EGP
        Рейтинг канала: 4(67) : 188 Posts: 3252 Location: Vilnius/Minsk Joined: 06 Aug 2008
 |
|
Решил проблему
Создал отдельный поток. В нем бесконечный цикл. А в цикле ставлю поток в ожидание:
Thread.Sleep(5);
_________________ Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом. |
|
|
бухой джедай
183 EGP
  Рейтинг канала: 2(19) : 70 Posts: 7906 Предупреждений: 1 Location: Одесса:) Joined: 08 Sep 2007
 |
|
квант процессорного времени 10~12 ms , а в реальности надо учитывать квант времени ОС так что меньше 30-50 ms ставить бесполезно
добавлено спустя 3 минуты:
http://www.rsdn.ru/forum/dotnet/3257597.flat.aspx
там в самом низу есть вариант решения проблемы
_________________ Так Добрый вечер...Превед с большого Бодуна...
Магистр Непросыхаемость...
Злобный Рецедивист...
Last edited by бухой джедай on 13:55 02-08-2010; edited 2 times in total |
|
|
DIMOSUS.X
997 EGP
        Рейтинг канала: 4(67) : 188 Posts: 3252 Location: Vilnius/Minsk Joined: 06 Aug 2008
 |
|
у меня минимальный квант порядка 6 мс(150-160 срабатываний в секунду), что я делаю не так?
Хотя возможно сказывается двойная кора на частоте свыше 4ГГЦ
_________________ Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом. |
|
|
Minx
1025 EGP
        Рейтинг канала: 6(332) : 139 Posts: 10551 Location: Gomel, Belarus Joined: 19 Nov 2005
 |
|
Чаще всего частота не при чем.
Больше зависит от оси, нагрузки процессора, архитектуры запущенного ПО.
Например у нас на боевых системах стабильно получалось делать реакцию на события в "обычных осях" 10 мс для WinXP и 1 мс для никсов в случае использования нескольких многопоточных приложений с загрузкой ЦП до 30%.
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
Crimson
560 EGP
    Рейтинг канала: 4(83) : 130 Posts: 3041
Joined: 03 Sep 2003
 |
|
Ну, писать так чтобы работало конкретно на твоей боевой системе при загрузе не выше 30% - это одно. Но если в планах давать другим поиграться...
добавлено спустя 14 минут:
DIMOSUS.X wrote: |
у меня минимальный квант порядка 6 мс(150-160 срабатываний в секунду), что я делаю не так?
|
Ты пытаешься писать под Винду так, как будто это real-time операционка. На самом деле Sleep(5) означает только то, что поток "разбудят" не раньше чем через 5 миллисекунд. А там уже как у винды руки дойдут, может через 6, а может и через 60, зависит от всего чего угодно и контроля над этим у тебя, в общем-то, нет (выставлять себе эксклюзивный приоритет черевато заклиниванием по всей системе, что тебе тоже обратно аукнется).
Поэтому по хорошему после Sleep надо смотреть, сколько реально прошло времени (GetTickCount'ом, QueryPerformanceCounter'ом или чем там в шарпе удобнее), и исходя из этого просчитывать шаг на столько-то миллисекунд вперед. Иначе при серьезном использовании у тебя фреймрейт будет плавать в зависимости от погоды на Марсе - причем не экранный, а физический, что вдвойне паршиво.
Last edited by Crimson on 17:18 02-08-2010; edited 2 times in total |
|
|
Варсик
546 EGP
    Рейтинг канала: 4(81) : 117 Posts: 4041 Location: Москва Joined: 22 Dec 2002
 |
|
Или считать физику на видюхе (ну фанат я этого, хотя еще нифига не написал, да...) Там можно заранее сказать сколько оно будет занимать по времени. Вернее там можно заранее сказать что это будет гораздо быстрее ЦПУ.
добавлено спустя 1 минуту:
А вообще, для Win98 - 1/16 секунды тик времени. То есть если вы получили квант времени, то максимум он будет 1/16 секунды. Но это 98. С тех пор дофига утекло этих самых квантов.
_________________ WARNING: By reading this post you accept that this post is genius.
Last edited by Варсик on 17:56 02-08-2010; edited 1 time in total |
|
|
DIMOSUS.X
997 EGP
        Рейтинг канала: 4(67) : 188 Posts: 3252 Location: Vilnius/Minsk Joined: 06 Aug 2008
 |
|
Соседний (основной) поток считает прошедшее время с предыдущего рендера физики и передает значение в поток физики, где передается функции расчета. Так что думаю разброс времени задержки не страшен.
Такой вопрос - запускаю поиложение из визуал студии - загрузка проца 60%. Просто из проводника - 100%. Откомпилено в режиме дебага. Из-за чего разброс?
Если включить вертикальную синхронизацию - в обоих случаях загрузка не более 5%.
добавлено спустя 2 минуты:
ЗЫ Фзика на гпу для космосима не пригодна.
_________________ Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом.
Last edited by DIMOSUS.X on 18:49 02-08-2010; edited 1 time in total |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) : 14 Posts: 1426
Joined: 27 Jul 2005
 |
|
DIMOSUS.X wrote: |
ЗЫ Фзика на гпу для космосима не пригодна.
|
ога, превед физиксу или PhysX "для космосима не пригодна"?
_________________ This is what you get ...
(c) Radiohead |
|
|
DIMOSUS.X
997 EGP
        Рейтинг канала: 4(67) : 188 Posts: 3252 Location: Vilnius/Minsk Joined: 06 Aug 2008
 |
|
Не так выразился - любая физика, не работающая с двойной точностью, для космосима не пригодна. Хотя если вам достаточно постранства в сотню км то да.
_________________ Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом. |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) : 14 Posts: 1426
Joined: 27 Jul 2005
 |
|
двойная точность это слишком тупо и прямолинейно
будущее безусловно за бесхитростностью, ибо, скажем, уже есть экспериментальное железо работающее на частоте 100ГГц
есть масса клёвых алгоритмов разбиения пространства, таких, что двойная точность и не нужна, к тому же как я уже заметил, аппаратная поддержка вычислений рулит и педалит, а она пока что развита лишь для обычных флоатов, так что выводы делайте сами
_________________ This is what you get ...
(c) Radiohead |
|
|
DIMOSUS.X
997 EGP
        Рейтинг канала: 4(67) : 188 Posts: 3252 Location: Vilnius/Minsk Joined: 06 Aug 2008
 |
|
while (_doRender)
{
Thread.Sleep(1);
NewtonWrapper.Update(_double_world, (float)(time_phys / 1000));
time_phys = 0;
}
Частота срабатываний - 510 раз в секунду
_________________ Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом. |
|
|
Варсик
546 EGP
    Рейтинг канала: 4(81) : 117 Posts: 4041 Location: Москва Joined: 22 Dec 2002
 |
|
DIMOSUS.X wrote: |
Частота срабатываний - 510 раз в секунду
|
ОСь? Кстати, почему не 512?.. Не тру системка!
добавлено спустя 1 минуту:
Sh.Tac. wrote: |
уже есть экспериментальное железо работающее на частоте 100ГГц
|
Можно поподробнее? А то там при 5-10ГГц длинна волны будет меньше чем диаметр кристалла - наводки пойдут.
_________________ WARNING: By reading this post you accept that this post is genius.
Last edited by Варсик on 15:02 03-08-2010; edited 2 times in total |
|
|
Pinocchio
1900 EGP
           Рейтинг канала: 2(12) : 434 Posts: 7312 Location: Universita degli studi di Pale Joined: 17 May 2004
 |
|
Warstone wrote: |
А то там при 5-10ГГц длинна волны будет меньше чем диаметр кристалла - наводки пойдут.
|
Ну это вряд ли Тут нужно не с размерами кристалла сранивать, а с характерной длиной проводников. Т.е., можно сделать большоооооой кристалл, но все связи внутри у него будут мелкими, и он будет отлично работать на высоких частотах. Ну, утрированно говоря, комп в целом вон какой ящик, больше длины двух гигагерцовой волны волны, и ничего, работает
_________________ И пали ученики ниц, и воскликнули: Чудо!
- Да нет, - ответил он. - Я просто знаю, как это делается. |
|
|
DIMOSUS.X
997 EGP
        Рейтинг канала: 4(67) : 188 Posts: 3252 Location: Vilnius/Minsk Joined: 06 Aug 2008
 |
|
7 x86
_________________ Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом. |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) : 14 Posts: 1426
Joined: 27 Jul 2005
 |
|
DIMOSUS.X wrote: |
Можно поподробнее?
|
http://www.eetimes.com/electronics-news/4087495/IBM-demos-100-GHz-graphene-transistor
_________________ This is what you get ...
(c) Radiohead |
|
|
|
|
|
Канал Игры Мечты: «Вопрос по программингу (C#)» |
|