S.T.A.L.K.E.R.: Чистое небо. Первые впечатления

Обсуждение статей и новостей сайта
Автор
Повідомлення
Jus
Member
Аватар користувача
Звідки: Запорожье

Повідомлення

-
Особенности национального многопоточного программирования
Н-да... Я не программист, но основную идею понял - костыль, примотанный изолентой. Синей. А если отваливается - примотаем подпорку скотчем.
-
Member
Аватар користувача
Звідки: Откуда и все

Повідомлення

Jus:Н-да... Я не программист, но основную идею понял - костыль, примотанный изолентой. Синей. А если отваливается - примотаем подпорку скотчем.
Э, как бы не совсем...
Там ситуация: Есть две команды, которые запускаются на проц паралельно (проц считаем двухядерным) Стало быть команды разделены на потоки (нити, treads) процессора (если глянуть в Диспетчере задач - там эти потоки тоже есть) И одна команда зависит от результатов другой - она их использует. Значит вторая должна выполнится раньше. Но как? Вариант - запускать последовательно, но тогда нам многопоточность ничего не даёт. Стало быть человек решил так, запускаем одновременно в двух потоках - но одному ставим приоритет повыше. Таким образом сначала он и выполняется, и второй поток данные получит. Вроде всё логично, но...
1. Более приоритетная задача может попасть ПОСЛЕ некоей команды запущеной виндовсом перед ней, и выполнится медленнее...
2. При заборе данных из кеша процессора не факт что он для более приоритетной задачи пройдёт быстрее.
3. при изменении к-ва ядер процессора менее приоритетный поток может выполнится ничуть не медленнее более приоритетного.
4. При значительном увеличении быстродействия процессора - то же самое.
5. При изменении операционной системы - то же самое.

Получаем, что команда в "более медленном" потоке получить данные не смогла, и насчитала чёрти-что. А мы об этом и не знаем...

В результате: у разрабов всё работает. На других компах - как повезёт. У одного мощный проц, но комп фоновыми задачами загружен - работает. У другого - средний комп, но система голая, чисто под игры заточена - работает. В противоположных случаях - глюки. Два одинаковых компа с разными наборами софта - на одном хорошо, на другом - плохо.
Короче, нельзя так программы писать...

Ну так вот: как вот эта вот ситуация подозрительно похожа на Сталкер...

То есть если говорить о костылях - мы костыль приматываем, надеясь на наличие сучка, который костыль попридержит. А сучёк может быть маленьким, или быть не там, где мы примотали...

Вот старая статейка нашего бывшего соотечественника - Матика (в миру - Виктора Картунова.)
Суровый чел был (что-т давно не видать его, видать непубличной работой занялся)
Я его пока он в Украине был - живьём не раз видел : /
А потом он удрал отсюдова.
http://www.fcenter.ru/online.shtml?arti" target="_blank ... sors/15729
Три года назад - а человек так правильно предположил, как оно интересато с многоядерностью будет...
Действительно, встраивая второе ядро в процессор, мы поднимаем производительность практически в два раза. В теории. На практике же это потребует одного мелкого, но важного уточнения. Программное обеспечение должно быть оптимизировано под многоядерность. Причем в общем случае не под SMP, а именно под многоядерность. Ведь ядра в общем случае могут быть вовсе не идентичными друг другу.
Это означает, что все программисты, пишущие программы, должны одним махом взять и вдруг изменить стиль своего программирования.
Это как раз то, во что я могу сразу и безоговорочно поверить.
Jus
Member
Аватар користувача
Звідки: Запорожье

Повідомлення

-
О! Разжевал все и практически в рот положил. Наглядно очень. Ферштейн. Только на счет Сталкера одно маленькое уточнение: Сталкер аж никак ни разу не многопоточное приложение, ни ТЧ, ни ЧН. Они грузят исключительно одно ядро. А то, что иногда сторонними утилитами разбивают якобы на пару (тройку, четверку) ядер - так это не многопоточность в чистом виде, так как рассчеты выполняются не параллельно, а последовательно, чередуясь. В результате имеем не один по сто, а два по пятьдесят или 4 по 25 примерно. Ибо не умеет сталкер многопоточность, к огроменному сожалению. Вот фаркрай2 умеет, кризис умеет. А сталкер - нет (((
-
Member
Аватар користувача
Звідки: Откуда и все

Повідомлення

Jus:Сталкер аж никак ни разу не многопоточное приложение, ни ТЧ, ни ЧН. Они грузят исключительно одно ядро.
Хех, ну у меня двухмониторный конфиг... И запустив на второй монитор отладчик - я видел что нитей Сталкер более десятка создаёт : /
Конечно же, все вторичные нити создают весьма малую нагрузку, по сравнению с основным потоком. Но они есть. Выдача данных на ПЦИ-Е порт, приём данных с консоли (клава/мышь), выдача звука - это всё отдельные потоки.
Jus:А то, что иногда сторонними утилитами разбивают якобы на пару (тройку, четверку) ядер - так это не многопоточность в чистом виде, так как рассчеты выполняются не параллельно, а последовательно, чередуясь.
Хм, а я об сторонних утилитах такого плана даже особо и не слышал... вообще-то винда даже ХП 32бит сама так делает... Чтобы это увидеть - достаточно винрар запустить, запустить в нём "Тест быстродействия и надёжности аппаратуры", убрать галочку "Многопоточность" и посмотреть загрузку в Диспетчере задач - она разделится по ядрам, но всего загруженность на четырёхядернике станет в 25-26% (если других задач не особо запущено)
Jus:Ибо не умеет сталкер многопоточность, к огроменному сожалению.
Вот только многопоточности основной нити в ём для полного счастья нам и не хватало...

Вот приснопамятный Обливион. В оном тоже в основном загруз одного ядра. Но бежа по местности мы запрашиваем загрузку участков, к которым мы приближаемся. Ну так если включить там отладочную инфу (команда консоли "TDT") - мы увидим что игрушка подгружает и рассчитывает тысячи обьектов. В этот момент на одноядерных игруха может и замереть, на двухядерных - могут быть подёргивания, а на своём кваде - я и этого не вижу. Т.е. могу пробежаться от города к городу по лесу - но ни надписи "Загрузка", ни подёргиваний - не будет. Именно потому, что вот эти вот подгрузки запускаются отдельными потоками и выполняются на др. ядрах. А после того как объект считан с диска и рассчитан - он уже передаётся в основной поток - что не занимает сколь-нибудь заметное время, чтобы на экране последовал рывок (ещё раз: объектов - тысячи, Обливион у меня - Золотое издание плюс ООО плюс с десяток модов...)
S0N1C
Member
Аватар користувача
Звідки: Dnipro

Повідомлення

Э, как бы не совсем...
Там ситуация: Есть две команды, которые запускаются на проц паралельно (проц считаем двухядерным) Стало быть команды разделены на потоки (нити, treads) процессора (если глянуть в Диспетчере задач - там эти потоки тоже есть) И одна команда зависит от результатов другой - она их использует. Значит вторая должна выполнится раньше. Но как? Вариант - запускать последовательно, но тогда нам многопоточность ничего не даёт. Стало быть человек решил так, запускаем одновременно в двух потоках - но одному ставим приоритет повыше. Таким образом сначала он и выполняется, и второй поток данные получит. Вроде всё логично, но...
1. Более приоритетная задача может попасть ПОСЛЕ некоей команды запущеной виндовсом перед ней, и выполнится медленнее...
2. При заборе данных из кеша процессора не факт что он для более приоритетной задачи пройдёт быстрее.
3. при изменении к-ва ядер процессора менее приоритетный поток может выполнится ничуть не медленнее более приоритетного.
4. При значительном увеличении быстродействия процессора - то же самое.
5. При изменении операционной системы - то же самое.

Получаем, что команда в "более медленном" потоке получить данные не смогла, и насчитала чёрти-что. А мы об этом и не знаем...

В результате: у разрабов всё работает. На других компах - как повезёт. У одного мощный проц, но комп фоновыми задачами загружен - работает. У другого - средний комп, но система голая, чисто под игры заточена - работает. В противоположных случаях - глюки. Два одинаковых компа с разными наборами софта - на одном хорошо, на другом - плохо.
Короче, нельзя так программы писать...

Ну так вот: как вот эта вот ситуация подозрительно похожа на Сталкер...
есть такая чтука как синхронизация ... :shuffle:
-
Member
Аватар користувача
Звідки: Откуда и все

Повідомлення

S0N1C:есть такая чтука как синхронизация ...
Сталкер тоже есть. И шо?

Разжуй подробнее чего сказать хотел. Если о синхронизации целых потоков - смысл есть только когда на SMP одинаковые команды идут, а тут разные. До кучи - ты первую мою ссылку прочёл (про особенности национального многопоточного...)?
ПыСы Поддержим Грузию!
S0N1C
Member
Аватар користувача
Звідки: Dnipro

Повідомлення

-
ты слышал там про всякие семафоры и ижи с ними ? и ваще если бы небыло синхронизации то то что ты описал не то чтобы не работало у кого-то на компе, а не работало вообще :-/

Добавлено спустя 1 минуту 37 секунд:
ну и вот еще http://ru.wikipedia.org/wiki/" target="_blankМьютекс
Medved
Junior

Повідомлення

-:Вот приснопамятный Обливион. В оном тоже в основном загруз одного ядра. Но бежа по местности мы запрашиваем загрузку участков, к которым мы приближаемся. Ну так если включить там отладочную инфу (команда консоли "TDT") - мы увидим что игрушка подгружает и рассчитывает тысячи обьектов. В этот момент на одноядерных игруха может и замереть, на двухядерных - могут быть подёргивания, а на своём кваде - я и этого не вижу. Т.е. могу пробежаться от города к городу по лесу - но ни надписи "Загрузка", ни подёргиваний - не будет. Именно потому, что вот эти вот подгрузки запускаются отдельными потоками и выполняются на др. ядрах. А после того как объект считан с диска и рассчитан - он уже передаётся в основной поток - что не занимает сколь-нибудь заметное время, чтобы на экране последовал рывок (ещё раз: объектов - тысячи, Обливион у меня - Золотое издание плюс ООО плюс с десяток модов...)
ставьте оперативы побольше и никаких дерганий не будет...
-
Member
Аватар користувача
Звідки: Откуда и все

Повідомлення

S0N1C:ты слышал там про всякие семафоры и ижи с ними ? и ваще если бы небыло синхронизации то то что ты описал не то чтобы не работало у кого-то на компе, а не работало вообще
Да прочитай же ж первую ссылку, что я дал - вот если лень на пред. стр. возвращаться: http://ithappens.ru/story/9" target="_blank . И попытайся понять о чём там вообще речь...
S0N1C:Добавлено спустя 1 минуту 37 секунд:
//Подмигивает. А я в гугле - ищу быстрее!
А своими словами, так как я вверху - слабо?
S0N1C:ну и вот еще http://ru.wikipedia.org/wiki/" target="_blankМьютекс
Знаешь шо... Ты сам-то читай, что даёшь...
Многопото?чность — свойство операционной системы или приложения, состоящее в том, что процесс, порождённый в операционной системе, может состоять из нескольких потоков, выполняющихся «параллельно», то есть без предписанного порядка во времени.
(выделено мной)Так что это, без мьютексов работать должно и может? Ведь при установке семафоров потоки как-то зависимы становятся...
Взаимоисключения (mutex, мьютекс) — это объект синхронизации, который устанавливается в особое сигнальное состояние, когда не занят каким-либо потоком. Только один поток владеет этим объектом в любой момент времени,
То есть - конвертация видео хавая данные из памяти в четыре горла и формируя на выхлопе один видеопоток - мьютексы не пользует, так? Какая досада. Как же оно работает, ведь не должно...

То есть изпользуя семафор мы засталбливаем кецик памяти, забивая использование другим куском кода, который успело прожевать другое ядро.
А вот о чём речь по ссылке:
Из метода передавался в объект ( который работает в ДРУГОМ потоке ) адрес локальной переменной. Представляешь, что случается, когда метод завершает работу?

То есть человек ИНАЧЕ решил проблему, не заморачиваясь с синхронизацией и неизбежной потерей скорости, ибо ему в данном случае выходом было либо создание общей, а не локальной переменной, либо команды должны были быть последовательно, в одном потоке.
И речь о том, что таки через жопу он проблему решил..


Ну так я и пояснил, что эффекты от такого решения могут быть ну очень разными в зависимости от ситуации с железом/софтом. И добавил, что как-то подозрительно всё это Сталкер нгапоминает...

Соник, давай-ка включай мозги и внимательность...
Ещё что хочешь написать по данному вопросу - открывай новую тему, здесь я больше не отвечу.
Medved:ставьте оперативы побольше и никаких дерганий не будет...

Это ты маленьких учи.
Смотри сюда:
-:Конкретно у меня - мой конфиг (MSIP35Neo-F+Квад6600@3.2+4GB+8800GT+ВинХРСП3)
-:посему неплохо так он на вполне себе одноядерноим атлоне3000@2600+1Г+R1800XL

Потом на Атлоне стало 2Г мемори.
А перед квадом был 6300+2Г мемори.

Итого: А3000@2600+2Г, CoreDuo6300+2Г, Квад6600+2Г, Квад6600+4Г

Первый вариант - может замереть
Второй - подёргивания.
Третий, четвёртый - одинаково без подёргиваний.

Ты же хотел сказать, что при большем к-ве мемори Обливион подгружает куда большее к-во местности вокруг.

Я хочу сказать, что подгружать, формировать и рассчитывать объекты - всё равно приходится.
И занят этим проц.
S0N1C
Member
Аватар користувача
Звідки: Dnipro

Повідомлення

-
ты вот споришь, только честно, ты писал что-то многопоточное ?
Vlad_35
Member
Аватар користувача
Звідки: Запорожье

Повідомлення

Что вы о этом пулемете? Какие сложности?
Я вообще побёг не к Сидорычу, а овалом оббежал по быстряку к блокпосту (с другой стороны его) и начал мирно мочить вояк в окна. Половину небось положил, потом придур какой-то ко мне забежал, получил здрасте в виде 2-х зарядов дроби в переносицу. И вот у меня калаш и немного патронов.
Подсоединил найденную оптику (кажись на вышке какой-то) Забежал в комнату с диваном и радушно втречал приходящих. :)
Итог: Куча аптечек, гранат и патронов, которые снисходительно мне подарили вояки. :)
v200971v
Member
Аватар користувача
Звідки: Біла Церква

Повідомлення

На дворе 2020 год , а Сталкер чистое небо прёт как и в далёком 2008 , качественный продукт :beer: :up:
7mindfields
Member
Аватар користувача

Повідомлення

v200971v:На дворе 2020 год , а Сталкер чистое небо прёт как и в далёком 2008 , качественный продукт :beer: :up:
Да, только с запуском по прежнему проблемы даже на семерке, тч и зп в этом плане уверенней смотрятся
alexS123
Member
Аватар користувача
Звідки: Washington D.C., USA

Повідомлення

v200971v:На дворе 2020 год , а Сталкер чистое небо прёт как и в далёком 2008 , качественный продукт :beer: :up:
не знаю. Шальные пули из ниоткуда, кровопотеря, которую и 10 бинтов не остановят, пулемет на Кордоне, неадекватная реализация войны группировок и скучный сюжет.
Без модов не играл бы, только ради посмотреть локации, но для этого есть Call of Chernobyl. :)
v200971v
Member
Аватар користувача
Звідки: Біла Церква

Повідомлення

7mindfields:
v200971v:На дворе 2020 год , а Сталкер чистое небо прёт как и в далёком 2008 , качественный продукт :beer: :up:
Да, только с запуском по прежнему проблемы даже на семерке, тч и зп в этом плане уверенней смотрятся
Не знаю как на 7 обстоят дела , но на 10 без траблов и вылетов зелёного жука всё стабильно , правда лицензию гамаю :beer:
Andrey2005
Member
Аватар користувача
Звідки: UA

Повідомлення

У вас совесть есть? Думал новости про новый сталкер, а теперь опять потянет старый ставить :gigi:
Deadpool
Member
Аватар користувача

Повідомлення

Дааа! давайте еще понекрофилим над ЧН! :laugh: (это баг! никаких предрасутков, просто умер неудачно)
спойлер
Зображення
v200971v
Member
Аватар користувача
Звідки: Біла Церква

Повідомлення

Andrey2005:У вас совесть есть? Думал новости про новый сталкер, а теперь опять потянет старый ставить :gigi:
В таком случае рекомендую поставить Stalker lost alpha - атмосфера супер :up: :super:
Барбарис
Member
Аватар користувача
Звідки: Вінниця

Повідомлення

Andrey2005, Gunslinger на ЗП попробуйте.
Відповісти