Как нужно экономить электричествоПриколисты "англичане"

Про многоядерные машины

Вице-президент NVIDIA Билл Дэлли в гостевой колонке журнала «Форбс» написал, что знаменитый закон Мура больше не работает и «мертв». По его словам, современные многопроцессорные решения становятся все менее эффективными, и простое увеличение числа ядер уже не дает результата. «Это как строить самолет путем прикрепления крыльев к поезду», — говорит он.

Не согласен я. Вот, например, мне двух ядер маловато на ноутбуке. У меня работают минимум 5 основных задач и в отдельные моменты времени нужна вся процессорная мощь на КАЖДУЮ задачу.

Перечислю список этих задач:

1. Ядро системы, антивирусник.

2. Браузер, в котором может быть от 4 активных вкладок, на каждую из которых нужно много мощности для прорисовки.

3. Муз или видео-проигрыватель.

4. Разные мелкие программы - far, торрент, почтовик, чат, lastfm-клиент и другое подобное. На них можно одно ядро выделить.

5. Сервер и БД. Например, web-проекты, которые работают по таймеру, а также просто обычные проекты. Во время работы нужны ресурсы.

(6) Видеоредактор, звуковая студия, 3D-рендеринг - требуют много мощности.

В итоге получаем, что для того, чтобы ничего не тормозило и работало мгновенно, хотелось бы около 8 отдельных ядер. Лично меня бы это устроило + возможность настроить раз и навсегда нужные приложения строго на нужные ядра, чтобы это ядро использовало только данное приложение (ну или, если есть простой в течение определённого времени и требовательность в ресурсах от других приложений, то можно и использовать). Во всех остальных случаях ядра неиспользующиеся просто спят.

Не знаю, понадобятся ли большее количество ядер, но никогда много не бывает.

Будущее за браузерными приложениями, работающими на JS и другими подобными технологиями (Canvas, SVG). Через пару лет мощности процессоров позволят создать полноценный эмулятор на JS настоящих (текущих) ОС, которые будут в нём работать на хорошей скорости. Время компиляторов уходит.

Поэтому, если, например, у нас будет запущено 5 приложений в браузере (в одной вкладке Google Wave, в другой Reader, в третьей ещё что-нибудь), а нам понадобится ещё запустить, то для новой вкладки лучше всего выделять отдельное ядро (не процесс, как сейчас, а именно ядро).

Поэтому можно говорить о минимуме ядер: для системы 8 и для приложений ещё около 8. Всего 16 ядер для комфортной работы.

Comments (18):

    • honeyman
    • 31.05.2010 22:36
    • Нижний Новгород / Нижегородская область
    Больше ядер не нужно. Больше ядер - это не удобство, а вынужденная мера из-за технической невозможности ускорить имеющиеся ядра (и уж тем более, слава вытесняющей многозадачности, больше ядер не нужно для эффективной одновременной работы нескольких программ, которые ещё и имеют тенденцию не всегда требовать полной загрузки процессора).

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

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

    Поэтому все эти многоядерности - это всего лишь костыли из-за внезапного завершения прогресса в процессоростроении. А использовать эти костыли мало кто умеет. Вот и ковыляют все.
    • Спасибо, но собственно я это знаю...

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

      Будет напоминать терминал.
        • honeyman
        • 31.05.2010 23:09
        • Нижний Новгород / Нижегородская область
        > нужно ставить задачи полностью на отдельное ядро.

        Угу. Шедулеры современных операционных систем делают это самостоятельно уже фиг знает сколько лет.

        А когда эта задача простаивает в ожидании IO, это ядро делает ещё что-нибудь нужное. Или ненужное, в зависимости от пользователя :)
        • Это понятно.

          Но в том то и дело, что если, например, я запускаю несколько вкладок одновременно в браузере, они долго открываются, долго работают и т.п. А если при этом
          работает видеорендеринг? Или сервер начал пахать фоново? Тормозит это всё. Поэтому нужно много ядер и чтобы каждая программа работала полностью бы независимо от других на отдельном ядре.
            • honeyman
            • 31.05.2010 23:29
            • Нижний Новгород / Нижегородская область
            > А если при этом работает видеорендеринг? Или сервер начал пахать фоново?
            > Тормозит это всё. Поэтому нужно много ядер и чтобы каждая программа
            > работала полностью бы независимо от других на отдельном ядре.

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

            И тогда мы придём к вполне очевидной мысли. На одном компьютере повышение количества ядер даёт возможность рассаживать ключевые приложения на отдельные ядра для повышения отзывчивости... но при этом они все пользуются одной и той же памятью, одним и тем же винчестером, ставят общесистемные локи... и внезапно и вполне логично получается, что задачи имеет смысл рассаживать не на отдельные ядра, а на отдельные компьютеры.
            • Хорошо сказано, да, соглашусь.

              Но всяко лучше иметь один универсальный аппарат.

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

              То есть, при работе программы будут мало требовать жд, и только сбрасывать (flash) большие блоки данных по окончанию работы в памяти.

              А уж память, например, 32 Гига планку (которая через пару лет будет точно, и размером будет маленькой), можно разделить на банки по 2 Гига, например,
              и сделать интерфейс к процессорному пулу из 16 ядер, чтобы каждый процессор работал с независимым банком памяти.

              Посмотрим, что будет, подождём (-:
                • honeyman
                • 31.05.2010 23:55
                • Нижний Новгород / Нижегородская область
                > Но всяко лучше иметь один универсальный аппарат.

                Я как раз и объясняю, что не "всяко". Эти критерии противоречат друг другу. Или мы имеем полностью независимые устройства (или имитируем их путём установки у процесса affinity mask на ядра, на 2-гигабайтовые банки памяти, ещё на что), и тогда тормоза одного совершенно никак не влияют на другое; или мы имеем одно универсальное устройство, имеющее возможность boost-а производительности одной из задач (ну, в смысле, будь у нас четыре разных компьютера с одинаковыми спецификациями, но под разные задачи, и один из которых был бы выделен под рендеринг, у нас бы на нём что-нибудь отрендерилось за час; а будь у нас один компьютер с четырёхкратно производительным процессором, на нём, если отдать ему все ресурсы, что-то отрендерится за 15 минут), и тогда у нас суммарная эффективность использования ресурсов повышается, за счёт иногда возникающих проседаний в отзывчивости.
    • ejieji
    • 31.05.2010 23:39
    • Нижний Новгород / Нижегородская область
    да вот да, я иногда 3д запускаю на 3 ядра, а одно ядро под остальные задачи — удобно
    • А что у тебя за машинка? Ноут?

      И ничего не тормозит?
        • ejieji
        • 31.05.2010 23:50
        • Нижний Новгород / Нижегородская область
        quad6600, 6gb мозгов, win7 x64
        не ноут

        теперь уже гораздо меньше торомозит, после прироста памяти и перехода на 64битную систему. я прям рад.

        ну меня задачи такие, что любые ресурсы сожру)
        • Круто, нуна будет тоже обновиться для рабочей машинки, а текущий ноут как телик использовать, подключённый к инету (-:

          От подстольных машин я ушёл, неудобно.

          зы. То есть, ты сейчас можешь задать приоритет программе на нужные ядра? Можешь показать скриншот этого пункта меню?
            • ejieji
            • 01.06.2010 00:01
            • Нижний Новгород / Нижегородская область
            так это же всегда было вроде, по крайней мере начиная с XP точно
            в диспетчере ПКМ на любой процесс, и там «задать соответствие». и галки около тех ядер, которые должны процесс обрабатывать
            • Это я знаю.

              Но.

              1. Сделал так, задал, что firefox использовать только процессор номер 1, снял галку с нулевого. Задал приоритет "ниже среднего".
              2. Закрыл firefox.
              3. Открыл заново.
              4. Вхожу в эту фиговину, всё как было, работает на двух процессорах и приоритет "средний".

              А запоминать кто будет?
                • ejieji
                • 01.06.2010 01:50
                • Нижний Новгород / Нижегородская область
                а, ну это да, есть такая пакость

                единственное что тут можно сказать: я подозреваю, что мой родной макс можно заставить делать это через скрипты
                например у меня сейчас в автостарте макса стоит скрипт, загружающий макс с пониженным приоритетом процессора. наверняка и соответствие задать можно.
                • Я думаю, этих скриптов завались, которые дополняют ОС и автоматом расставляют приоритеты и т.п.

                  А вот эту родную возможность системы вряд ли кто-то пользуется больше одного раза.

                  К тому же очень часто, как мне кажется, эти приоритеты ничего не значат и даже если, например, выставить программе которая жмёт видео, низкий приоритет, всё равно
                  система тормозит. Я лично мало разницу наблюдаю.

                  Или я не прав?
                    • ejieji
                    • 01.06.2010 02:01
                    • Нижний Новгород / Нижегородская область
                    с видео не работал, но вот рендеринг в трехмерке на нормальном приоритете порой даже мышку подвешивает, а стоит понизить, как все летает

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

                    кстати, не сказал бы что с пониженным приоритетом особо проигрыш во времени происходит. А если учитывать, что я могу еще и работать параллельно, так вообще выгодно :)
                    • Видать, мне 2 гигов маловато...