Тема: Запуск сима с привязкой к потоку/ядру многопроцессорной системы.  (Прочитано 12864 раз)

0 Пользователей и 1 Гость просматривают эту тему.


Оффлайн AlexSr

  • Старейшина клуба
  • Сообщений: 4792
  • Покурим и ... Полетели?
    • Александр
    • Сергиенко
  • Город: Санкт-Петербург
« : 10 Март, 2011, 15:49:05 pm »
По крайней мере в отношении Феникса могу сказать, что поведение сима (особенно реакция на стики) сильно зависит от того, как он запущен в многопроцессорной системе.
При простом запуске (по умолчанию), практически всегда наблюдается неадекватность (задержки, "лаги") на управление. И поведение модели (рендеринг скорее), да же при высоком ФПС не совсем адекватные.

Решаю эту проблему "привязкой" (AFFINITY) процесса симулятора к определённому (одному) ядру/потоку процессора.
Но делать это руками каждый раз - задалбывает. >:D

(делается это так: запускаем сим, давим CTRL+SHIFT+ESC, запускается диспетчер задач, на вкладке "приложения" делаем правый клик по приложению сима phoenixRC , или что там у нас запущено, выбираем в открывшемся меню:"перейти к процессам", на открывшейся вкладке "процессы", процесс сима будет уже выделен, опять правый клик мышки и там уже - "задать соответствие" (если склероз не врёт). Откроется окно выбора ядра/потока. Снимаем галку "все", и ставим напротив "0"... уф! Всё, задали привязку. ::))

Долго искал способ "автоматизации" процесса. Есть всякие разные программки, которые это умеют делать... но это - не "камильфо"  :D
И оказалось, что в недрах операционки семейства Виндуоз всё уже есть, на самом деле. ;)
Спасибо KiD0M4N с форума http://www.techenclave.com *BRAVO*

Для начала небольшой экскурс в глубь Вин-системы (любой, хоть 64-х битной, начиная с Вин 2000):

Многие знают про существование "дос окна" в винде. Этим занимается командный процессор CMD.EXE
Но не многие знают, про его скрытые возможности.
Открываем либо в главном меню "выполнить" и вводим CMD + энтер
Либо - просто кликаем ярлык "Командная строка" в меню программ "стандартные".
Откроется "дос окно". (чёрненькое такое  :D )

Набираем в нём: START /?

И видим список команд (опций) запуска приложений.

Нас интересует ключ "/AFFINITY"
Там ещё есть ключи для установки "приоритета" приложения, но нас это в данный момент не интересует.

Обозначение потока/ядра в командной строке начинается с НОМЕРА 1 , а не "0" - как если бы мы делали это в диспетчере задачь, в окне "процессы".
То есть, нумерация "человеческая" : 1, 2, 3, 4, ...

Теперь, как всё это "автоматизировать".

Нужен "ярлык" к экзешнику симулятора. Именно ярлык!
Клик правой кнопкой мыши на ярлыке  откроет нам контекстное меню, там самый последний пункт "свойства"...

В строке "обьект" ярлыка мы увидим что то на подобии: D:\Games\PhoenixRC\phoenixRC.exe
А в строке "рабочая папка" : D:\Games\PhoenixRC

Нам нужно в строку "обьект" вписать ДО имеющейся там строки D:\Games\PhoenixRC\phoenixRC.exe следующее:
(привязка к 1-му (нулевому) ядру процессора)

CMD.EXE /C START /AFFINITY 1



И говорим "ОК". После этого, наш ярлык станет такого же вида, как у ярлыка командной строки. А путь к CMD станет приблизительно такого вида: C:\WINDOWS\system32\cmd.exe

Можно вернуть прежний вид ярлыку, опять открыв "свойства", там нажать кнопку "сменить значёк", выбрать в верхней строке открывшегося окна файл симулятора (ехе) и картинку.

Одно важное замечание, касаемое ПУТИ к файлу!
К сожалению, CMD имеет проблемы с длинными путями с пробелами и русскими буквами.
В ярлыке такие пути заключены в кавычки, скажем: "C:\Documents and Settings\" - такой путь (с пробелами) просто так не передать в командный процессор.
По этому, самый простой выход из этой ситуации - вообще не передавать никакого пути туда  ;D

То есть, нужно сам ЯРЛЫК - положить в папку, где находится симулятор. Тогда, путь к симулятору - будет путём по умолчанию для командного процессора.
И строка запуска будет иметь следующий вид:
C:\WINDOWS\system32\cmd.exe /C START /AFFINITY 1 phoenixRC.exe

Усё! Наслаждаемся новыми впечатлениями  ;)
С уважением, Александр Сергиенко  - Пилот Клуба HELI-SPB

Оффлайн Громовержец

  • Сообщений: 59
  • Москва, Ульянково.
    • Святослав
    • РусХВ
« Ответ #1 : 10 Март, 2011, 17:08:29 pm »
Real Flight имеет ту же проблему. Огромное спасибо за подсказку!!!!
Заморочен сменой вертолетного парка...

Оффлайн vitkor

  • Старейшина клуба
  • Сообщений: 2526
    • Виктор
    • Козаченко
    • Радиоуправляемые вертолеты в Новосибирске
  • Город: Новосибирск
« Ответ #2 : 10 Март, 2011, 17:09:08 pm »
Саша, ты про какую версию Феникса говоришь?

Кстати, попробуй еще вместо привязки к ядру поставить v-sync в настройках видео.
Виктор. Вертолетный дневник - http://www.heli-spb.ru/forumheli/index.php?board=139.0

Оффлайн AlexSr

  • Старейшина клуба
  • Сообщений: 4792
  • Покурим и ... Полетели?
    • Александр
    • Сергиенко
  • Город: Санкт-Петербург
« Ответ #3 : 10 Март, 2011, 17:27:24 pm »
Вить, практически любая версия.
И основная проблема не в синхронизации (чё только не пробовал, при этом фпс более 120....), а именно в "нелинейности" поведения, каких то "лаганиях" непонятных, задержках в реакции на стики...

Как только привязываю - всё становится адекватно!

К стати, вот ещё один эффект на ноуте присутствует забавный http://www.heli-spb.ru/forumheli/index.php?topic=4918.msg80688#msg80688
С уважением, Александр Сергиенко  - Пилот Клуба HELI-SPB

Оффлайн vitkor

  • Старейшина клуба
  • Сообщений: 2526
    • Виктор
    • Козаченко
    • Радиоуправляемые вертолеты в Новосибирске
  • Город: Новосибирск
« Ответ #4 : 10 Март, 2011, 17:32:50 pm »
Видимо по разному работает. У меня проблема в Фениксе решилась установкой v-sync и в симе, и в драйверах. До этого тоже был неадекватен.
Я думал что только у меня такая фигня. У меня же этот, как его... CrossFireX - две карты на 3D используются. Оказывается это у многих так.  :D
Спасибо за инфу. Как привязывать процесс к ядру в виндовс, я как-то не знал.  
Виктор. Вертолетный дневник - http://www.heli-spb.ru/forumheli/index.php?board=139.0

GanGan

  • Гость
« Ответ #5 : 10 Март, 2011, 18:24:35 pm »
Странно. Никакой разницы. 7х64 I7 - всё идеально работает как не переставляй приоритеты и процы .

Оффлайн ilyxa

  • Старейшина клуба
  • Сообщений: 4645
  • Foto & RC Hobby
  • Город: Rostov-na-Donu
« Ответ #6 : 10 Март, 2011, 18:55:23 pm »
Вообще-то привязка к процессору - это сугубо индивидуально. Мне, например, это бесполезно делать - стоит голая винда (даже руссификации нет) для Феникса и Солида. Из внешних раздражителей - сетевая карточка. Для меня аффинити ничего не решит.

Кстати, Александр, можно еще и с приоритезацией процесса поиграть (realtime, priority 24, high, priority 13, normal, priority 8
low, priority 4, abovenormal 10 (Windows 2000 only), belownormal 6 (Windows 2000 only)).

V-SYNC на современных карточках я вообще толком не понимаю, как работает ;)

Оффлайн AlexSr

  • Старейшина клуба
  • Сообщений: 4792
  • Покурим и ... Полетели?
    • Александр
    • Сергиенко
  • Город: Санкт-Петербург
« Ответ #7 : 10 Март, 2011, 21:46:46 pm »
Ребят, тут вся "фишка" в том, что сим НЕ заточен под много поточность выполнения.
(таких программ пока, реально - единицы, грамотно сделанных)

От этого, начинают проявляться разные эффекты, типа конкуренции за нитки в кеше, холостые вытеснения и прочее.
Сильно зависит от конфига, объёма кеша, наличия других процессов и прочих факторов.

Но, упрямая практика говорит однозначно: если не хотите "непоняток", (особенно связанных с реалтаймом, коим является ввод данных с пульта), то однопоточное приложение должно работать - в одном потоке  :D
С уважением, Александр Сергиенко  - Пилот Клуба HELI-SPB

Оффлайн ilyxa

  • Старейшина клуба
  • Сообщений: 4645
  • Foto & RC Hobby
  • Город: Rostov-na-Donu
« Ответ #8 : 10 Март, 2011, 22:06:04 pm »
Ребят, тут вся "фишка" в том, что сим НЕ заточен под много поточность выполнения.
(таких программ пока, реально - единицы, грамотно сделанных)

Но, упрямая практика говорит однозначно: если не хотите "непоняток", (особенно связанных с реалтаймом, коим является ввод данных с пульта), то однопоточное приложение должно работать - в одном потоке  :D

Не обольщайся, говоря реалтайм в контексте винды ;) Это очень условное и спорное понятие. В целом - я согласен с выводами. Но - как ты и написал - сугубо индивидуально :)

А что за процессор, если не секрет - так, для сведения - современные процессора (я говорю про Intel) имеют очень небольшием накладные расходы на перегрузку контекста (ну или кроссколл)? У вопроса, собственно, ноги растут из т.н. "мега"-технологии Hyper Threading, убогой поделки от Интела - которую в общем случае на старых "камнях" лучше попросту отключить. Современный CMT (ok, HT, если угодно) имеет другую архитектуру и действительно улучшает утилизацию конвеера процессора. Как-то так - технически ;)

Оффлайн AlexSr

  • Старейшина клуба
  • Сообщений: 4792
  • Покурим и ... Полетели?
    • Александр
    • Сергиенко
  • Город: Санкт-Петербург
« Ответ #9 : 10 Март, 2011, 22:45:26 pm »
Я не питаю никаких иллюзий, в отношении винды  :D Слава богу, в своё время работал на машинах заточенных именно под реалтайм.
Винда безусловно к реал-тайму отношения не имеет никакого. Но ситуация с много-ядерностью только усугубляет эту ситуацию, приводя к полному рассогласованию временных задержек.

Был и коре 2 дуо как он там..., сечас core i3 ...
Дело не столько в проце, хотя и это играет роль. Дело в большей степени в программах (и програмистах  ;) ), и кеше который занимают данные.
Если данные не попадают в кеш - время работы (перезагрузки кеша) резко возрастает.
Вот и получается, что часть приложения исполняется быстро, а часть - тормозит.
Драйвак видео - жрёт память (сидит плотно), а драйвер ввода с шины юсб - должен каждый раз "всасываться".. для обработки ввода.

Вообще, в Фениксе в частности, ФПС - почти не отражает реальных "тормозов". У меня на слабой машине может быть стабильные 60 ФПС, а при этом тупит так, что мама не горюй! Летать невозможно. Обычно это именно "подтормаживания", кратковременные, но очень неприятные.
С уважением, Александр Сергиенко  - Пилот Клуба HELI-SPB

Оффлайн ilyxa

  • Старейшина клуба
  • Сообщений: 4645
  • Foto & RC Hobby
  • Город: Rostov-na-Donu
« Ответ #10 : 10 Март, 2011, 23:08:59 pm »
Был и коре 2 дуо как он там..., сечас core i3 ...
Дело не столько в проце, хотя и это играет роль. Дело в большей степени в программах (и програмистах  ;) ), и кеше который занимают данные.
Если данные не попадают в кеш - время работы (перезагрузки кеша) резко возрастает.
Вот и получается, что часть приложения исполняется быстро, а часть - тормозит.
Драйвак видео - жрёт память (сидит плотно), а драйвер ввода с шины юсб - должен каждый раз "всасываться".. для обработки ввода.

ну, факты - это ДА  O0

Оффлайн SERGINIO

  • Старейшина клуба
  • Сообщений: 2208
    • Сергей
  • Город: Самара
« Ответ #11 : 19 Март, 2011, 21:21:35 pm »
Винда безусловно к реал-тайму отношения не имеет никакого.

Александр,мнится мне что наши "реалтаймы" настолько в глубокой оппе ,по сравнению с реальными прерываниями в любом проце,начиная с 12 серии,что рассуждать об этом,как минимум вводить в заблуждение соратников, к сожалению не все адекватно определяют реалтайм ,без кавычек работы процессора,чаще всего путают ,процу к великой радости есть чем заняться ,кроме нашей заботы,чаще всего прерывания по сети,его тормозят, :(
...я в Бога не верю, но он верит в меня и поэтому я его не могу подвести....

Оффлайн ilyxa

  • Старейшина клуба
  • Сообщений: 4645
  • Foto & RC Hobby
  • Город: Rostov-na-Donu
« Ответ #12 : 19 Март, 2011, 22:13:33 pm »
Ну я почти все понял ;) Сетевая карточка поддерживает поллинг, что резко снижает сетевую нагрузку - если в фоне не крутить торренты (либо что-то иное с массивной сетевой нагрузкой, характерной для домашней машины) - в расчет можно не брать. Тем более - по поводы о..ы на многоядерной система - прерывания на этапе загрузки жестко привязаны к ядру (потоку), так что можно удачно выбрать ядро ;)

В общем - по теме -  в win xp  на mbp 2010 - привязка к CPU  и подъем приоритета (до т.н. реального времени) дало порядка 190-210 кадров (против обычных 150-170), что в целом добавило гладкости (smoothing) приложению.

Оффлайн SERGINIO

  • Старейшина клуба
  • Сообщений: 2208
    • Сергей
  • Город: Самара
« Ответ #13 : 19 Март, 2011, 22:27:24 pm »
Не настаиваю,но кадры нужны скорее всего монику,а не нам,если его частота обновления не совпадает,с тем что предоставил сим-жди прерываний,не факт что они совпадут ,скорее где-то дернется разок-другой,человеку глубоко фиолетово что там меняется за пределом восприятия-10-20 гц,подсознание уловит -типа некомфорт,зрение скажет-: от..тесь,все хоккей :), а там 534 гц,или 892 гц, это всё от лукавого,у нас в сервисе наш типо дирехтор пытался ,блин отспорить у мастеров что блю -рей куда круче двд,имея на борту сжатие в 4 раза сильнее ..... :o,наивный, :P
...я в Бога не верю, но он верит в меня и поэтому я его не могу подвести....

Оффлайн ilyxa

  • Старейшина клуба
  • Сообщений: 4645
  • Foto & RC Hobby
  • Город: Rostov-na-Donu
« Ответ #14 : 19 Март, 2011, 23:00:32 pm »
нас в сервисе наш типо дирехтор пытался ,блин отспорить у мастеров что блю -рей куда круче двд,имея на борту сжатие в 4 раза сильнее ..... :o,наивный, :P

просмотр аватара на двд (оригинальном) и блюрее (аналогично) для меня расставил все точки над i.