• Приветствую тебя уважаемый гость на форуме, посвященный компьютерам! В дружелюбной обстановке у вас будет возможность обсудить различные технические вопросы, касаемых: компьютеров, ноутбуков, программ для ПК. Обратите внимание, компьютерный форум Hard-Help.ru не коммерческий ресурс, то есть наши модераторы ничего не продают и не хвалят разные товары за деньги. Если это ваш первый визит, рекомендуем почитать справку по форуму. Для создания тем и размещения сообщений необходимо зарегистрироваться. После регистрации и успешной авторизации в темах не будет видна реклама от компании Google, а также появятся дополнительные функции. Желаем Вам приятного общения и новых друзей!

нужны ли 6 ядер в наше время?

lddontstop

New Member
Регистрация
23 Дек 2012
Сообщения
6
Репутация
0
Баллы
1
Доброго времени суток.
Задался вопросом использования многоядерности процессоров последними вышедшими играми. В Интернетах ничего конкретного не нашел. Полагаю, что на форуме аудитория более компетентна, чем вообще, и надеюсь на Вашу отзывчивость и поддержку в данном "конфликте":
1. AMD Phenom II X6 1075T 3.0ГГц или AMD Phenom II X4 980 Black Edition 3.7ГГц?
Dota 2
StarCraft 2
Witcher 2
FarCry 3
Grand Theft Auto 4
Counter Strike Global Offensive
Diablo 3
Battlefield 3
Metro 2033
Stalker Clear Sky
Skyrim
Что я знаю: Если игра использует 2-4 ядра, то более высокочастотные х4 дадут бОльшую производительность, чем 3.0ГГц х6.
Ядра грузятся ОС, и фоновыми программами. Отсюда еще вопрос:
2. Правильно ли я понимаю, что при 6 ядрах: 4 ядра пойдет на игру, 1 на ОС, 1 на остальной хлам?
П.С. Понимаю, что вопросы глупы, но если не сложно :help:
Заранее благодарен.
П.С.С. В проекте использование Xsplit'a (на который нужно 2 ядра).
Видео hd 7770 или hd 7850
 
Обзорчик и тесты. Все познается в сравнеинии.
 
lddontstop написал(а):
2. Правильно ли я понимаю, что при 6 ядрах: 4 ядра пойдет на игру, 1 на ОС, 1 на остальной хлам?

К сожалению, Вы ошибаетесь. Предсказать заранее как именно ОС распределит процессы по разным ядрам невозможно. Да и не нужно - для Вас от этого в любом случае ничего не меняется.
Определенно можно утверждать только одно: никакого отдельного ядра "для ОС" выделено не будет. И не может быть. Поскольку операционная система сама по себе процессом не является. Она представляет из себя совокупность разнообразных программных модулей, которые могут быть процессами, подпрограммами, обработчиками прерываний и так далее. Разные части диспетчеризуются по-разному. Для некоторых процессов создается несколько копий по числу логических процессоров в системе и каждый из них исполняется на выделенном для него логическом процессоре.
К примеру, такими процессами являются те, которые исполняются во время простоя системы и управляют переводом процессора в энергосберегающие состояния.
Некоторые системные процессы действительно могут исполняться на отдельном ядре, но смысла в этом очень мало - накладные расходы ОС на диспетчеризацию превышают выигрыш от исполнения какого-то кода на отдельном ядре.
В большинстве случаев процедуры ОС вызываются посредством API либо прерываний и исполняются на том же процессоре, на котором работает процесс выполнивший системный вызов или вызвавший прерывание.

К чему я это рассказываю? К тому, чтобы Вы исключили "ядро для ОС" из своих подсчетов.
Да и предположение о том, что "4 ядра пойдет на игру" тоже представляется чрезмерно оптимистичным.
Даже в тех случаях, когда игра действительно создает 4 нити (thread), обычно бывает выгоднее исполнять некоторые из них на одном ядре, а не выделять по ядру на нить. Почему? Потому что нити обычно имеют общие области памяти, а обеспечение когерентности кэша между разными ядрами стоит чересчур дорого.
Поэтому не рассчитывайте, что диспетчер выделит и жестко зафиксирует определенные ядра за определенными процессами. Отнюдь. Он будет тасовать их как колоду карт, перекидывая с одного ядра на другое, причем далеко не всегда его действия будут оправданы с точки зрения повышения производительности.

Резюме: на сегодняшний день никакого выигрыша от самого факта наличия у Вас шести ядер в играх Вы не получите. Как будет завтра, сказать не могу...
 
DDX777 написал(а):
Прочтите Простые советы по оптимизации игр. возможно чем то поможет.


Вы там даете интересный совет:
"Для того чтобы заставить работать игрушку на всех наших ядрах мы должны нажать правой кнопкой мыши по процессу игры и выбрать CPU 1+2 т.д. в зависимости от количества ядер на нашем компьютере."
То есть, Вы считаете, что любой процесс (игра, в данном случае) будет работать на стольких ядрах, сколько Вы ему выделите?
DDX777 написал(а):
Не забывайте ставить галочку 4 ядра в настройках программы если у вас 4 ядра.
 
DDX777 написал(а):
Я проверял на практите (и кстати вы можете тоже) сначала запускаете просто игру и играете минут 5, потом ее же запускаете с использованием CPU Control разницу сами увидите.

Попробовал на игре Quake 2. Разницы никакой... :blum:
 
Stranger написал(а):
Попробовал на игре Quake 2.
Вы бы еще Doom2 вспомнили..Речь идет о современных играх.
 
zix написал(а):
Вы бы еще Doom2 вспомнили..Речь идет о современных играх.

Разве? В описании про это ни слова не было. Но, хорошо, пусть будут современные. Вы полагаете, что сейчас что-нибудь изменилось? Каждая игра создает какое-то количество нитей. Я для примера специально выбрал игру, относительно которой никто не станет возражать, что она работает с единственной нитью.
Допустим, какая-то современная игра создает 2, 3 или 4 нити. Хорошо, выделю я под неё все 12 логических процессоров. Ей от этого лучше станет? Она сама себя на 12 нитей распараллелит? Сами же знаете, что нет.
В то же время, автор рекомендует выделять игре все ядра и полагает, что это "заставит работать игрушку на всех наших ядрах".
Согласитесь, это не вполне соответствует действительности, что и было наглядно продемонстрировано на примере Quake 2.

P.S. Если бы существовала возможность "заставить игру использовать все процессоры", то AMD FX-8xxx были бы одними из самых быстрых игровых процессоров в мире, а core i7 оставляли бы в играх далеко позади своих собратьев серии i5.
Но сами же знаете, что этого не происходит и сами неоднократно отговаривали людей от покупки i7 для игровых компьютеров. Разве не так?
 
Соглашусь. Но все-таки в современных программах предусмотрена многопоточность - некоторые симуляторы, например, просто не запускаются в системе, имеющую два ядра процессора. Тонкостей я не знаю, но факт остается фактом. А игры старых поколений греют одно ядро, это я давно заметил. И не зная, кто там отвечает за это, спорить не буду. Вероятно, системе видней, куда и как распределить ресурсы.
 
Я согласен с Stranger
Ну вот скрин работы Аваста и процессора
Что-то как-то неравномерно нагрузка идет...
Нельзя процессору присобачить так, что вот это ядро работает, а это нет. Он сам распределяет нагрузку
А игр для 6-ти ядер вроде вообще нет...
 
zix написал(а):
Но все-таки в современных пргораммах предусмотрена многопоточность - некоторые симуляторы, например, просто не запускаются в системе, имеющую два ядра процессора.

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

А по поводу многопоточности, тут всё очень просто. Представьте себе, CPU как транспортную компанию. Ей нужно перевезти какое-то количество контейнеров с грузом.
Причем количество контейнеров задается отправителем груза. А Вы, как перевозчик, можете указать номера грузовиков, которые будут выделены для перевозки.
И выделять больше грузовиков, чем имеется контейнеров совершенно бессмысленно. В большинстве случаев бессмысленно даже выделять по грузовику на контейнер, если на один грузовик спокойно помещается два контейнера.
 
Я, в общем-то и не спорю - системе оно видней. Просто однажды у ребят взял лицензионный диск с профессиональной программой-авиасимулятором. Прога провела проверку системы и доложила: "Видео - норм, память - норм, число ядер процессора недостаточно для работы программы". Я тогда еще на Е6700 сидел. На этом установка и закончилась.
АleXO, у меня похожая картинка, только нагрузка на два ядра.
 
zix написал(а):
только нагрузка на два ядра.
Но у вас четное число ядер... а у меня нет

Добавлено спустя 3 минуты 10 секунд:
Я как-то слышал, что есть какая-то прога, которая принудительно принуждает проц (ядра) работать как им сказали. Но ведь это бред. Программа не может повлиять на аппаратную часть... Проц сам по себе+ОС распределяют нагрузку... Я, если честно, особо не вникал в этот процесс... но то, что проц это сам делает, видю сам на скрине. И что за прога может распределить нагрузку по ядрам, честно, не знаю...
 
Сам или под управлением оси - какая разница? Главное что? Работает! Нагрузку тянет. А внутрь лучше не заглядывать. :biggrin:
Когда едешь на машине и представляешь, как крутится кардан (а он тоненький :scratch_one-s_head: ) - становится страшно :crazy:
 
DDX777 написал(а):
Но когда вы сами можете выставить к примеру все процессы на 1 ядро а игру на все ядра производительность все равно чувствуется и отсюда же вывод когда вы играете в игру вы же ничего другого не делаете, максимум некоторые музыку слушают, так зачем ядрам простаивать???

Я хотел бы чтобы Вы меня правильно поняли. К сожалению, они так или иначе будут простаивать. Для них просто не будет потока, который можно было бы обрабатывать.
По умолчанию диспетчер операционной системы (раньше участки ядра, отвечающие за процесс распределения ресурсов, называли супервизорами) распределяет процессы между ядрами тем способом, который представляется ему наиболее оптимальным.
То есть, любой процесс может исполняться на любом ядре. Если игра запускает несколько процессов, они могут быть либо распределены между разными ядрами, либо некоторые из них могут быть сгруппированы для исполнения на одном ядре.
Я сам, как уже неоднократно упоминал, не пользуюсь Windows, но в Unix есть аналогичная утилита - taskset.
Она позволяет привязать определенные процессы к определенным ядрам.
Естественно, все пользуются ей с единственной целью - запретить, допустим, какой-нибудь игре пользоваться частью ядер процессора. Насильно привязать её к какому-нибудь одному ядру. Или диапазону ядер.
Дело в том, что распределение потоков по большому числу ядер может либо замедлить работу программы (игры), либо даже привести к ошибкам и аварийному окончанию работы приложения.
Выдавать команду, которая позволяла бы процессу исполняться на любом ядре, я не вижу ни малейшего смысла.
Он и так это может (неужели Вы думаете, что ОС специально придерживает какие-то ядра в резерве?).

Вы не хотите чтобы ядра простаивали. Но они в любом случае будут простаивать. Если у Вас есть три контейнера и Вы выделили под них 8 грузовиков, 5 грузовиков всё равно останутся в гараже.
Если есть три нити и 8 логических процессоров, 5 процессоров при всем желании нечем будет занять.

Добавлено спустя 2 минуты 2 секунды:
zix написал(а):
однажды у ребят взял лицензионный диск с профессиональной программой-авиасимулятором. Прога провела проверку системы и доложила: "Видео - норм, память - норм, число ядер процессора недостаточно для работы программы". Я тогда еще на Е6700 сидел. На этом установка и закончилась.

О чем я и говорил - установщик произвел проверку числа ядер, пришел к выводу, что оно недостаточно и отказался устанавливать программу. Это не операционная система не смогла программу запустить, а программист в явном виде запретил работу программы на Вашей конфигурации.

Добавлено спустя 5 минут 48 секунд:
AleXO написал(а):
И что за прога может распределить нагрузку по ядрам, честно, не знаю...

Такое вполне возможно и подобные программы действительно есть для всех ОС поддерживающих SMP.
Диспетчеру задач дается указание: исполнять такой-то процесс только на таком-то ядре. Или диапазоне ядер.
Но это не означает, что ОС действительно будет использовать все ядра из указанного диапазона для заданного процесса. Она просто знает, что ни на какие другие ядра, кроме тех, номера которых ей передали в команде, данный процесс диспетчеризовать нельзя.
Команда "используй все ядра для данного процесса" эквивалентна отмене предыдущих ограничений. Если таких ограничений не было (по умолчанию), она эквивалентна пустой команде.
 
DDX777 написал(а):
Stranger вы это на практике проверяли??? Если игра рассчитана только на одно ядро то она возможно не будет выполняться на всех ядрах, но есть исключения... К примеру:
Распределённые вычисления


Скажу больше - я эти диспетчеры сам писал, когда занимался системным программированием. :wink:
Если игра рассчитана на одно ядро, на одном ядре она и будет исполняться. Исключений из этого правила быть не может.
Однако, если программы, которые изначально рассчитаны на распределение нагрузки по неопределенному числу ядер. К примеру, известный уже лет 30 или 40 тест решения системы линейных уравнений Linpack.
Программы, предназначенные для GPGPU вычислений также рассчитаны на заранее неизвестное число ядер.
Но игр способных распределять нагрузку между произвольным числом ядер не существует в природе.
К сожалению, алгоритмы используемые в играх плохо поддаются распараллеливанию.
Поэтому в игре вычленяют какие-то составные части и выносят каждую из них в отдельную нить.
К примеру (условно), AI считается на одном ядре, физика на другом (если это не PhysX, который может обрабатываться на видеокарте производства NVidia), геометрия - на третьем.
А дальше делить уже не получается. Всё, что можно разделить на части в части обработки изображения исполняется на GPU и там же распараллеливается. Попытка распараллелить это на CPU повлечет за собой только падение производительности (GPU быстрее работает с графикой, чем CPU).
Я надеюсь, со временем эти проблемы будут решены. Но и тогда смысла в явном виде задавать ядра не появится - диспетчер сделает всё сам, причем лучше человека. Разве только найдется человек, способный выдавать команды быстрее, чем это делает операционная система... :crazy:
 
Сверху