Покупка нового компьютера. Выбор модели и комплектации

Тема в разделе "Машинное отделение", создана пользователем Crest, 5 май 2009.

  1. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    8.872
    Симпатии:
    2.061
    Репутация:
    84
    Адрес:
    Москва
    Оффлайн
    Поток - это абстракция уровня операционной системы или приложения. На одноядерной системе все потоки могут исполняться на одном ядре. С точки зрения пользователя их работа будет выглядеть одновременной. В случае четырёх ядер планировщик потоков, скорее всего, равномерно распределит их по всем ядрам, так что в среднем каждое ядро будет исполнять одновременно по два потока (в чередующихся квантах времени).
    Как всегда, возможны отклонения и особенности, в зависимости от настроек конкретной системы. Но в общем случае так.
  2. pk27pk Учаcтник

    • Участник
    Рег.:
    02.04.2008
    Сообщения:
    901
    Симпатии:
    39
    Репутация:
    2
    Оффлайн
    WinPooh Сколько движков в Aquarium 2018 можно будет задействовать в компьютере с процессором 4 ядра и 8 потоков?!
  3. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    8.872
    Симпатии:
    2.061
    Репутация:
    84
    Адрес:
    Москва
    Оффлайн
    Windows будет видеть такой процессор как восьмиядерный. Так что ответ - без замедления работы одновременно можно запустить восемь движков. Можно и больше, но уже с замедлением.
  4. pk27pk Учаcтник

    • Участник
    Рег.:
    02.04.2008
    Сообщения:
    901
    Симпатии:
    39
    Репутация:
    2
    Оффлайн
    Благодарю!
  5. nh2008 Учаcтник

    • Участник
    Рег.:
    01.12.2013
    Сообщения:
    2.255
    Симпатии:
    2.499
    Репутация:
    241
    Адрес:
    Украина
    Оффлайн
    Без замедленя работы чего?
    Интерфейс, система, антивирус, фоновые процессы, другие приложения?
  6. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    8.872
    Симпатии:
    2.061
    Репутация:
    84
    Адрес:
    Москва
    Оффлайн
    Имеется в виду - без замедления поиска в каждом отдельном потоке движка.
    До восьми движков, скажем, каждый будет выдавать по 1000 килонодов в секунду - а если их станет 9 и больше, то эта скорость начнёт плавно уменьшаться. При 16-ти движках будет по 500 килонодов, и т.д. Потому что отдельные движки начнут разделять между собой время одного ядра, а не работать на нём монопольно.
    Про другие приложения вообще ничего сказать нельзя, тут всё очень индивидуально.
  7. nh2008 Учаcтник

    • Участник
    Рег.:
    01.12.2013
    Сообщения:
    2.255
    Симпатии:
    2.499
    Репутация:
    241
    Адрес:
    Украина
    Оффлайн
    И во сколько раз будет увеличиватья скорость расчёта по сравнению с одним потоком? Что выгоднее с точки зрения прироста скорости рассчёта: увеличение тактовой частоты отдельного, единсвтенного, ядра процессора, на котором работает движок, в N раз или увеличение в те же N раз количества ядер, отданных в распоряжение движка?
    Мне кажется, что первый вариант всегда предпочтительнее.
  8. WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    8.872
    Симпатии:
    2.061
    Репутация:
    84
    Адрес:
    Москва
    Оффлайн
    Да, это именно так. Производительность с увеличением числа ядер растёт нелинейно, т.е. 2 ядра дают прирост скорости не в 2, а в 1.7 (например) раз, 4 ядра - в 2.5, и т.п. От конкретного движка ещё зависит, некоторые параллелятся лучше, некоторые хуже...
    Правда, количество ядер увеличивать всё-таки проще, чем тактовую частоту одного ядра - для частоты предел наступает довольно быстро.
  9. Scaramuccia Учаcтник

    • Участник
    Рег.:
    12.01.2012
    Сообщения:
    1.896
    Симпатии:
    748
    Репутация:
    33
    Оффлайн
    В случае с Hyperthreading это не совсем верно - 8 потоков будут чуть слабее чем 4 потока - что-то вроде по 1000 килонодов на 4 потоках и по 800 на 8 поскольку логические ядра не идеальные, но максимум производительности все равно будет на 8.
    WinPooh нравится это.
  10. nh2008 Учаcтник

    • Участник
    Рег.:
    01.12.2013
    Сообщения:
    2.255
    Симпатии:
    2.499
    Репутация:
    241
    Адрес:
    Украина
    Оффлайн
    А если ядер будет много очень много, не возможна ли такая ситуация, что абсолютное количество просчитанных узлов окажется при N задействованных ядрах (по одному на поток) меньше, чем при N-1 при том, что останутся ещё свободные ядра для работы системы и прочих приложений?
  11. EugeneZ Начинающий

    • Начинающий
    Рег.:
    23.11.2016
    Сообщения:
    4
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    А если есть два схожих процессора (техпроцесс, частота, TDP одинаковые), но один 4х4, а другой 4х8, то не получится ли, что с точки зрения эффективности работы шахматного движка второй (4х8) будет хуже ? Ведь во втором случае, чтобы использовать всю мощь процессора из 4 ядер, придется гонять 8 потоков, а это кажется менее эффективным при распараллеливании, чем честных 4 ?
  12. Rom Учаcтник

    • Участник
    Рег.:
    12.02.2012
    Сообщения:
    540
    Симпатии:
    199
    Репутация:
    21
    Оффлайн
    Второй будет лучше. Современные движки хорошо параллелятся.

    Но, вообще говоря, выбирать между процессорами не нужно. Гипертрейдинг легко отключается BIOS'е
    Комсюк нравится это.
  13. Комсюк народный модератор

    • Заслуженный
    • Ветеран
    Рег.:
    17.07.2011
    Сообщения:
    12.479
    Симпатии:
    12.692
    Репутация:
    856
    Нарушения:
    6
    Оффлайн
    Rom, никогда не заморачивался этим, играя адванс на двух ядрах без НТ :)
    Какая фактическая разница между четырьмя с гипером и восемью в анализе?
    Циферки скорости будет показывать приблизительно одинаковые, эт я знаю
  14. Rom Учаcтник

    • Участник
    Рег.:
    12.02.2012
    Сообщения:
    540
    Симпатии:
    199
    Репутация:
    21
    Оффлайн
    Вообще-то гипертрейдинг должен заметно поднять скорость движка, от 30 до 70% (см. бенчмарки у ипмана) за счет большей загрузки процессора. Это касается современных движков с распараллеливанием методом LazySMP, то есть почти всех топовых.

    Если такого не происходит, значит либо Гипертрейдинг работает не очень, либо Турбобуст на вашем процессоре компенсирует недозагруз повышением частоты. В таком случае особой разницы нет - увеличение числа потоков повышает "ширину" поиска, а увеличение частоты повышает глубину. Правда, за сверхдолгий анализ не поручусь - данных нет.
    Комсюк нравится это.
  15. EugeneZ Начинающий

    • Начинающий
    Рег.:
    23.11.2016
    Сообщения:
    4
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Именно лучше, а не эквивалентен? За счет чего лучше?
    И ведь 4х8 будет хуже для старых движков, которые умеют работать только на одном потоке, т.к. на нем смогут получить только 1/8 мощи, так ?
    (про отключение HT я понял, обязательно попробую у себя, спасибо)
  16. Rom Учаcтник

    • Участник
    Рег.:
    12.02.2012
    Сообщения:
    540
    Симпатии:
    199
    Репутация:
    21
    Оффлайн
    Потому что на 30-70% быстрее. Уже проведено немало тестов показывающих, что при включении гипертрейдинга движки попросту сильнее играют.
    Однопоточный движок получит в своё распоряжение одно ядро целиком, если конечно вы не перегрузите свой компьютер иными задачами. Таким образом это будет 1/4 производительности машины. Или даже 1/3, поскольку турбобуст обычно повышает частоту недозагруженного процессора.
  17. nh2008 Учаcтник

    • Участник
    Рег.:
    01.12.2013
    Сообщения:
    2.255
    Симпатии:
    2.499
    Репутация:
    241
    Адрес:
    Украина
    Оффлайн
    Что такое "ширина" поиска?
  18. Rom Учаcтник

    • Участник
    Рег.:
    12.02.2012
    Сообщения:
    540
    Симпатии:
    199
    Репутация:
    21
    Оффлайн
    Branching Factor - среднее количество продолжений, рассматриваемых в каждом узле. Долгое время считалось, что чем меньше мы смотрим продолжений в каждом узле, тем лучше, поскольку таким образом достигается бОльшая глубина и решения становятся более обоснованными. Но современные движки, по-видимому, отсекают так агрессивно, что многим неплохим ходам уделяется слишком мало внимания, поэтому увеличение Branching Factor (сопутствующее использованию метода распараллеливания LazySMP), неожиданно оказалось эффективным.
  19. EugeneZ Начинающий

    • Начинающий
    Рег.:
    23.11.2016
    Сообщения:
    4
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Ой!!! По вашему получается, что при распараллеливании движок играет по другому!? Ой!

    Почему быстрее, сможете объяснить? Почему комп 4х8 может считать быстрее компа 4х4 при прочих равных?
  20. Rom Учаcтник

    • Участник
    Рег.:
    12.02.2012
    Сообщения:
    540
    Симпатии:
    199
    Репутация:
    21
    Оффлайн
    Да, а что такого? :cool: Главное, и удвоение ядер и удвоение скорости/контроля заметно усиливает игру. Порядка нескольких десятков пунктов при любом из удвоений. Точнее я вам сказать не могу.

    Читайте про гипертрейдинг:
    https://ru.wikipedia.org/wiki/Hyper-threading :)

    Давайте, например, посмотрим на внутреннюю структуру одного ядра процессора Ryzen:
    https://3dnews.ru/948466

    Как видите, каждое ядро содержит по 8 вычислительных блоков - четыре ALU, и по два ADD и MUL. В определенном смысле каждый из таких блоков можно сравнить с обычным калькулятором, но с ограниченным набором возможных математических операций ("кнопок"). Нам сложно загрузить сразу все эти блоки параллельной работой одновременно, поскольку обычный микропроцессор в общем-то в первую очередь адаптирован для выполнения последовательного порядка операций над числами. То есть операций, для начала которых требуются результаты предыдущих операций.

    Даже несмотря на все ухищрения, навроде спекулятивных предварительных вычислений, часть блоков все равно остается не занятой. Но мы можем запустить на этом ядре второй поток расчетов. И в те моменты, пока первый поток вычислений частично или полностью простаивает, мы можем выполнять расчеты для второго потока. Понятно, что двухкратного увеличения скорости не будет, но прибавка будет очень и очень значительной.
    Alhimik88 нравится это.
  21. EugeneZ Начинающий

    • Начинающий
    Рег.:
    23.11.2016
    Сообщения:
    4
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Спасибо! :)
    В принципе, этого хватило для моего понимания! Очень многое прояснилось простейшей ссылкой, которую я сам поленился открыть ранее. Я смотрел на это все значительно проще.

    Однако, я все еще хочу оспорить про Branching Factor. :) Возможно не так понял. Кажется, что Branching Factor (судя по статье под ссылкой, вы имеете ввиду "Effective Branching Factor", т.е. речь про "реально просмотренные продолжения") - все же важнейшая характеристика конкретной сборки движка, и не должен меняться в зависимости от мощности железа, кол-ва ядер и наличия HT (в одной и той же позиции и глубине поиска). То есть, одна и та же сборка движка за N перебранных узлов пройдет один и тот же путь по дереву независимо от мощности железа и кол-ва потоков, на котором ее запустили (но за разное время само собой). Так ведь?
  22. Rom Учаcтник

    • Участник
    Рег.:
    12.02.2012
    Сообщения:
    540
    Симпатии:
    199
    Репутация:
    21
    Оффлайн
    Чем больше потоков/ядер, тем больше BF. Каждый поток по сути запускает своё дерево перебора, практически независимое от других (потоки обмениваются данными только через хэш-таблицу). Таким образом, чем больше потоков, тем больше "деревьев", больше позиций смотрится на каждой глубине, соответственно больше BF.
  23. nh2008 Учаcтник

    • Участник
    Рег.:
    01.12.2013
    Сообщения:
    2.255
    Симпатии:
    2.499
    Репутация:
    241
    Адрес:
    Украина
    Оффлайн
    А разве нельзя координировать движки, чтобы они не рассматривали повторяющиеся позиции?
  24. Rom Учаcтник

    • Участник
    Рег.:
    12.02.2012
    Сообщения:
    540
    Симпатии:
    199
    Репутация:
    21
    Оффлайн
    Раньше так и делали. Расщепляли единое дерево перебора, раздавали каждому потоку индивидуальную ветку, на которой он работал. Только метод оказался не очень эффективным. При превышении 16-ти потоков прибавки в силе, по факту, нет. Возможно из-за того, что последние потоки получали худшие ветки, в которых вряд ли можно что-то найти (ИМХО). Кроме того, потоки часто простаивали в ожидании задания.

    Я знаю, это звучит контринтуитивно, но текущий метод лучше работает. Он демонстрирует хорошую прибавку в силе как минимум до 384-х потоков. [1] [2]
  25. crem Учаcтник

    • Участник
    Рег.:
    24.11.2016
    Сообщения:
    122
    Симпатии:
    152
    Репутация:
    12
    Оффлайн
    Насчёт hyperthreading:

    В каждом ядре процессора есть много разных модулей, которые умеют выполнять разные задачи (умножать числа, читать из памяти, выполнять битовые операции и т д.). Во время выполнения программы в всегда какие-нибудь модули простаивают.
    Идея hyperthreading в том, чтобы использовать это, запустив два потока на одном ядре. Тогда два потока могут одновременно использовать два разных модуля одного ядра. Но если нужный модуль оказывается занят, второй поток ждёт.

    Поэтому ускорение от двух потоков в рамках одного ядра зависит от характера задач. Для некоторых (очень редко) ускорение действительно может быть почти в два раза, но для большинства вычислительно сложных задач, когда все потоки делают одно и то же, ускорение относительно одного потока обычно от 0 до 30%.
    Именно для шахмат я нигде информации не читал, но думаю, что ускорение от hyperthreading небольшое.
    Последние данные очков репутации:
    Challenger Spy: 1 18 фев 2019
    Challenger Spy нравится это.
  26. Rom Учаcтник

    • Участник
    Рег.:
    12.02.2012
    Сообщения:
    540
    Симпатии:
    199
    Репутация:
    21
    Оффлайн
    Данные есть у Ипмана, например:
    Хочу так же обратить внимание, что под гипертрейдингом частота ядер может автоматически немного снижаться.

    Это типичные случаи, но есть и более экстремальные прибавки, например:
    В обычных шахматных движках потоки практически независимы друг от друга, поэтому они хорошо ускоряются от гипертрейдинга.
  27. crem Учаcтник

    • Участник
    Рег.:
    24.11.2016
    Сообщения:
    122
    Симпатии:
    152
    Репутация:
    12
    Оффлайн
    Не, надо отличать потоки ("threads") которые являются объектами операционной системы, от hyperthreads.

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

    hyperthreads — это способ выполнения нескольких потоков (threads) одновременно на одном ядре, и в этом случае случается потеря производительности дополнительная к замедлению из-за синхронизации threads.
    При этом для hyperthreads совсем не важно, зависимы потоки или нет. Важно, какие инструкции процессора они выполняют.

    Например, если на одном гиперпотоке считается например прогноз погоды, который активно работает с числами с плавающей точкой, а на другом какая-нибудь симуляция из квантовой механики, которой тоже нужны операции с плавающей точкой, то вместе работать они будут медленно (хоть данные совсем независимы, и вообще это скорее всего разные программы).
    А вот если второй процесс — это подбор паролей к какому-нибудь архиву (где требуется целочисленная арифметика и копирование больших кусков памяти например), то он может выполняться параллельно прогнозу погоды с гораздо меньшим замедлением.

    У шахмат все потоки делают одно и то же (целочисленная арифметика и битовые операции), поэтому с первого взгляда кажется, что шахматам hyperthreads не поможет.
    Но с другой стороны на современных процессорах обычно 16 или даже 32 ALU на ядро (arithmetic logic unit, модуль как раз-таки для целочисленной арифметики и битовых операций), и может одному потоку процессора не всегда удаётся занять их всех.
    Alhimik88 и Challenger Spy нравится это.
  28. Rom Учаcтник

    • Участник
    Рег.:
    12.02.2012
    Сообщения:
    540
    Симпатии:
    199
    Репутация:
    21
    Оффлайн
    Согласен со всем написанным далее. Но в любом случае движки получают большой плюс от гипертрейдинга.

    Четыре ALU на ядро:
    https://3dnews.ru/assets/external/illustrations/2017/03/02/948466/slide-1.png
    https://3dnews.ru/assets/external/illustrations/2017/07/07/955164/xa_12.png

    Вектора не в счёт. От них, по факту, всего 10 % прибавки к скорости обычных шахматных движков.
  29. Rom Учаcтник

    • Участник
    Рег.:
    12.02.2012
    Сообщения:
    540
    Симпатии:
    199
    Репутация:
    21
    Оффлайн
    Насколько я понимаю, в программах присутствует много ветвлений (Branch), есть логические операции (Bool), в битбордах есть битовый сдвиг (Shift). Конечно же есть деление (Divide). Ну и операций с плавающей точкой (FP) очень даже не мало. Так что загрузить всего 4 порта, если скажем какие-то из них не заняты целочисленной арифметикой, найдётся чем. Это не 32 Cuda-Core на один Warp в видеокарте.
    Отсюда и значительная прибавка в скорости движков на гипертрейдинге.
  30. Сергей С. Питер Учаcтник

    • Участник
    Рег.:
    31.03.2006
    Сообщения:
    1.191
    Симпатии:
    58
    Репутация:
    11
    Оффлайн
    Напрашивается аналогия, когда есть 2 бригады по решению шахматно-шашечных задач. В одну набрали по 10 мастеров шахмат и по 10 мастеров шашек. Заказчик дает задания, бригада решает. Когда дают 15 шахматных задач в час, 5 шашечных. Шашечные мастера простаивают. Когда наоборот - простаивают шахматные специалисты. А у конкурирующей бригады 20 шахматных мастеров, являющихся одновременно мастерами по шашкам. У них такой гипертрейдинг будет повышать производительность. Никто не простаивает, все 20 мастеров в работе.

Поделиться этой страницей