Н-да... Я не программист, но основную идею понял - костыль, примотанный изолентой. Синей. А если отваливается - примотаем подпорку скотчем.Особенности национального многопоточного программирования
Новости
Последние статьи и обзоры
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 умеет, кризис умеет. А сталкер - нет (((
О! Разжевал все и практически в рот положил. Наглядно очень. Ферштейн. Только на счет Сталкера одно маленькое уточнение: Сталкер аж никак ни разу не многопоточное приложение, ни ТЧ, ни ЧН. Они грузят исключительно одно ядро. А то, что иногда сторонними утилитами разбивают якобы на пару (тройку, четверку) ядер - так это не многопоточность в чистом виде, так как рассчеты выполняются не параллельно, а последовательно, чередуясь. В результате имеем не один по сто, а два по пятьдесят или 4 по 25 примерно. Ибо не умеет сталкер многопоточность, к огроменному сожалению. Вот фаркрай2 умеет, кризис умеет. А сталкер - нет (((
-
-
Member
- Откуда: Откуда и все
Хех, ну у меня двухмониторный конфиг... И запустив на второй монитор отладчик - я видел что нитей Сталкер более десятка создаёт : /Jus:Сталкер аж никак ни разу не многопоточное приложение, ни ТЧ, ни ЧН. Они грузят исключительно одно ядро.
Конечно же, все вторичные нити создают весьма малую нагрузку, по сравнению с основным потоком. Но они есть. Выдача данных на ПЦИ-Е порт, приём данных с консоли (клава/мышь), выдача звука - это всё отдельные потоки.
Хм, а я об сторонних утилитах такого плана даже особо и не слышал... вообще-то винда даже ХП 32бит сама так делает... Чтобы это увидеть - достаточно винрар запустить, запустить в нём "Тест быстродействия и надёжности аппаратуры", убрать галочку "Многопоточность" и посмотреть загрузку в Диспетчере задач - она разделится по ядрам, но всего загруженность на четырёхядернике станет в 25-26% (если других задач не особо запущено)Jus:А то, что иногда сторонними утилитами разбивают якобы на пару (тройку, четверку) ядер - так это не многопоточность в чистом виде, так как рассчеты выполняются не параллельно, а последовательно, чередуясь.
Вот только многопоточности основной нити в ём для полного счастья нам и не хватало...Jus:Ибо не умеет сталкер многопоточность, к огроменному сожалению.
Вот приснопамятный Обливион. В оном тоже в основном загруз одного ядра. Но бежа по местности мы запрашиваем загрузку участков, к которым мы приближаемся. Ну так если включить там отладочную инфу (команда консоли "TDT") - мы увидим что игрушка подгружает и рассчитывает тысячи обьектов. В этот момент на одноядерных игруха может и замереть, на двухядерных - могут быть подёргивания, а на своём кваде - я и этого не вижу. Т.е. могу пробежаться от города к городу по лесу - но ни надписи "Загрузка", ни подёргиваний - не будет. Именно потому, что вот эти вот подгрузки запускаются отдельными потоками и выполняются на др. ядрах. А после того как объект считан с диска и рассчитан - он уже передаётся в основной поток - что не занимает сколь-нибудь заметное время, чтобы на экране последовал рывок (ещё раз: объектов - тысячи, Обливион у меня - Золотое издание плюс ООО плюс с десяток модов...)
-
S0N1C
Member
- Откуда: Dnipro
есть такая чтука как синхронизация ...Э, как бы не совсем...
Там ситуация: Есть две команды, которые запускаются на проц паралельно (проц считаем двухядерным) Стало быть команды разделены на потоки (нити, treads) процессора (если глянуть в Диспетчере задач - там эти потоки тоже есть) И одна команда зависит от результатов другой - она их использует. Значит вторая должна выполнится раньше. Но как? Вариант - запускать последовательно, но тогда нам многопоточность ничего не даёт. Стало быть человек решил так, запускаем одновременно в двух потоках - но одному ставим приоритет повыше. Таким образом сначала он и выполняется, и второй поток данные получит. Вроде всё логично, но...
1. Более приоритетная задача может попасть ПОСЛЕ некоей команды запущеной виндовсом перед ней, и выполнится медленнее...
2. При заборе данных из кеша процессора не факт что он для более приоритетной задачи пройдёт быстрее.
3. при изменении к-ва ядер процессора менее приоритетный поток может выполнится ничуть не медленнее более приоритетного.
4. При значительном увеличении быстродействия процессора - то же самое.
5. При изменении операционной системы - то же самое.
Получаем, что команда в "более медленном" потоке получить данные не смогла, и насчитала чёрти-что. А мы об этом и не знаем...
В результате: у разрабов всё работает. На других компах - как повезёт. У одного мощный проц, но комп фоновыми задачами загружен - работает. У другого - средний комп, но система голая, чисто под игры заточена - работает. В противоположных случаях - глюки. Два одинаковых компа с разными наборами софта - на одном хорошо, на другом - плохо.
Короче, нельзя так программы писать...
Ну так вот: как вот эта вот ситуация подозрительно похожа на Сталкер...
-
-
Member
- Откуда: Откуда и все
Сталкер тоже есть. И шо?S0N1C:есть такая чтука как синхронизация ...
Разжуй подробнее чего сказать хотел. Если о синхронизации целых потоков - смысл есть только когда на SMP одинаковые команды идут, а тут разные. До кучи - ты первую мою ссылку прочёл (про особенности национального многопоточного...)?
ПыСы Поддержим Грузию!
-
S0N1C
Member
- Откуда: Dnipro
-
ты слышал там про всякие семафоры и ижи с ними ? и ваще если бы небыло синхронизации то то что ты описал не то чтобы не работало у кого-то на компе, а не работало вообще
Добавлено спустя 1 минуту 37 секунд:
ну и вот еще http://ru.wikipedia.org/wiki/" target="_blankМьютекс
ты слышал там про всякие семафоры и ижи с ними ? и ваще если бы небыло синхронизации то то что ты описал не то чтобы не работало у кого-то на компе, а не работало вообще
Добавлено спустя 1 минуту 37 секунд:
ну и вот еще http://ru.wikipedia.org/wiki/" target="_blankМьютекс
-
Medved
Junior
ставьте оперативы побольше и никаких дерганий не будет...-:Вот приснопамятный Обливион. В оном тоже в основном загруз одного ядра. Но бежа по местности мы запрашиваем загрузку участков, к которым мы приближаемся. Ну так если включить там отладочную инфу (команда консоли "TDT") - мы увидим что игрушка подгружает и рассчитывает тысячи обьектов. В этот момент на одноядерных игруха может и замереть, на двухядерных - могут быть подёргивания, а на своём кваде - я и этого не вижу. Т.е. могу пробежаться от города к городу по лесу - но ни надписи "Загрузка", ни подёргиваний - не будет. Именно потому, что вот эти вот подгрузки запускаются отдельными потоками и выполняются на др. ядрах. А после того как объект считан с диска и рассчитан - он уже передаётся в основной поток - что не занимает сколь-нибудь заметное время, чтобы на экране последовал рывок (ещё раз: объектов - тысячи, Обливион у меня - Золотое издание плюс ООО плюс с десяток модов...)
-
-
Member
- Откуда: Откуда и все
Да прочитай же ж первую ссылку, что я дал - вот если лень на пред. стр. возвращаться: http://ithappens.ru/story/9" target="_blank . И попытайся понять о чём там вообще речь...S0N1C:ты слышал там про всякие семафоры и ижи с ними ? и ваще если бы небыло синхронизации то то что ты описал не то чтобы не работало у кого-то на компе, а не работало вообще
//Подмигивает. А я в гугле - ищу быстрее!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
-
ты вот споришь, только честно, ты писал что-то многопоточное ?
ты вот споришь, только честно, ты писал что-то многопоточное ?
-
VovaII
Member
Упс.
-
Vlad_35
Member
- Откуда: Запорожье
Что вы о этом пулемете? Какие сложности?
Я вообще побёг не к Сидорычу, а овалом оббежал по быстряку к блокпосту (с другой стороны его) и начал мирно мочить вояк в окна. Половину небось положил, потом придур какой-то ко мне забежал, получил здрасте в виде 2-х зарядов дроби в переносицу. И вот у меня калаш и немного патронов.
Подсоединил найденную оптику (кажись на вышке какой-то) Забежал в комнату с диваном и радушно втречал приходящих.
Итог: Куча аптечек, гранат и патронов, которые снисходительно мне подарили вояки.
Я вообще побёг не к Сидорычу, а овалом оббежал по быстряку к блокпосту (с другой стороны его) и начал мирно мочить вояк в окна. Половину небось положил, потом придур какой-то ко мне забежал, получил здрасте в виде 2-х зарядов дроби в переносицу. И вот у меня калаш и немного патронов.
Подсоединил найденную оптику (кажись на вышке какой-то) Забежал в комнату с диваном и радушно втречал приходящих.
Итог: Куча аптечек, гранат и патронов, которые снисходительно мне подарили вояки.
-
v200971v
Member
- Откуда: Біла Церква
На дворе 2020 год , а Сталкер чистое небо прёт как и в далёком 2008 , качественный продукт

-
7mindfields
Member
Да, только с запуском по прежнему проблемы даже на семерке, тч и зп в этом плане уверенней смотрятсяv200971v:На дворе 2020 год , а Сталкер чистое небо прёт как и в далёком 2008 , качественный продукт![]()
-
alexS123
Member
- Откуда: Washington D.C., USA
не знаю. Шальные пули из ниоткуда, кровопотеря, которую и 10 бинтов не остановят, пулемет на Кордоне, неадекватная реализация войны группировок и скучный сюжет.v200971v:На дворе 2020 год , а Сталкер чистое небо прёт как и в далёком 2008 , качественный продукт![]()
Без модов не играл бы, только ради посмотреть локации, но для этого есть Call of Chernobyl.
-
v200971v
Member
- Откуда: Біла Церква
Не знаю как на 7 обстоят дела , но на 10 без траблов и вылетов зелёного жука всё стабильно , правда лицензию гамаю7mindfields:Да, только с запуском по прежнему проблемы даже на семерке, тч и зп в этом плане уверенней смотрятсяv200971v:На дворе 2020 год , а Сталкер чистое небо прёт как и в далёком 2008 , качественный продукт![]()
-
Andrey2005
Member
- Откуда: UA
У вас совесть есть? Думал новости про новый сталкер, а теперь опять потянет старый ставить 
-
Deadpool
Member
Дааа! давайте еще понекрофилим над ЧН!
(это баг! никаких предрасутков, просто умер неудачно)
- спойлер

-
v200971v
Member
- Откуда: Біла Церква
В таком случае рекомендую поставить Stalker lost alpha - атмосфера суперAndrey2005:У вас совесть есть? Думал новости про новый сталкер, а теперь опять потянет старый ставить
-
Барбарис
Member
- Откуда: Вінниця
Andrey2005, Gunslinger на ЗП попробуйте.