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