Две ядерные башни

Некоторое время назад двухъядерные процессоры считались верхом мажорства и чопорности, сегодня же два ядра – это практически норма. Так как же быть простым пользователям: гнаться за новыми технологиями, или попридержать коней? Давайте разберемся.

Назад в будущее
Еще года три назад системы с двумя процессорами были излишеством для настольных ПК – производительности однопроцессорных конфигураций хватало, да и программное обеспечение, способное работать в многопроцессорных системах, стоило безумных денег (как, впрочем, и сами такие системы). Конечно, стоимость подобных решений и сейчас не слишком лояльна к рядовому пользователю, но все же приобрести двухъядерную машинку стало несколько проще. Хотя появилась другая проблема. Разработчики программного обеспечения все больше спорят, как рассчитывать стоимость своих продуктов. Одни предпочитают устанавливать стоимость лицензии в зависимости от количества разъемов на материнской плате (то есть процессоров), другие – по количеству ядер в процессоре, помноженном на количество разъемов, третьи и вовсе предлагают отталкиваться от того количества потоков, которое система может обрабатывать одновременно. Безусловно, эти расчеты более применимы для специализированного ПО с рядом специфических задач, над которыми пользователь вряд ли задумывался. Но отметим, что постепенно этот вопрос уже переходит и в пользовательский сегмент. Существующая тенденция развития микропроцессоров неуклонно поставит перед разработчиками необходимость считать, как минимум, количество физических ядер и на персональном рынке, так как в следующем году мы увидим уже четырехъядерный процессор, а предположительно в 2008—2009-ом сможем наблюдать уже целых восемь ядер на одной подложке.

От одного – к двум и более
Вы наверно знаете, что почти все современные процессоры Intel, основаные на микроархитектуре NetBurst, поддерживают технологию Hyper-Threading. Процессоры IBM снабжены аналогичной технологией, которая называется Simultaneous Multi-Threading, Вы также знаете, что для программ, использующих эти технологии, требовалась жесткая огранка. В случае отсутствия этой огранки мы могли получить отрицательный прирост производительности. Но именно эти технологии после многопроцессорных систем можно считать знамением, объявившим эпоху многоядерных процессоров. Можно сказать, происходила подготовка почвы, так как код программы, который уже оптимизирован для работы с виртуальными процессорами, требует совсем немного исправлений для поддержки двуядерности. Иными словами, те разработчики, кто ранее не ввел поддержку виртуальной многоядерности, сейчас должны будут существенно изменить код своих продуктов – иначе получится ситуация, что в процессе исполнения кода будет работать только одно ядро.

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

Немного об X2
С самых первых версий процессоров семейства K8 корпорация AMD предусмотрела возможность объединения ядер посредством архитектуры Direct Connect, использующей с этой целью System Request Queue (системный интерфейс запросов) ко Crossbar’у (коммутатору). Посредством последнего происходит обращение к контроллеру памяти, а также обеспечивается возможность залазить в “чужой” кэш. Такая организация дает неплохие дивиденды ввиду низкой нагрузки на шины. Благодаря ей получаем следующие цифры: пиковая теоретическая пропускная способность HTT составит 8 Гбайт/c, тогда как теоретическая пропускная способность памяти составит 6.4 Гбайт/c. Таким образом, суммарная ПС составит 14.4 Гбайт/c. На этом фоне показатели Pentium D кажутся смешными – пиковое теоретическое значение пропускной способности интерфейса памяти составляет всего 6.4 Гбайт/c, и это при том, что используемая микроархитектура NetBurst чувствительна к наибыстрейшему поступлению инструкций на исполнение. Впрочем, данная статья не предусматривает поднятие извечной тему AMD vs Intel, она призвана показать все прелести двуядерных процессоров.

Два лучше, чем одно!
Итак, приступим. Для тестирования мы использовали двуъядерный процессор AMD Athlon 64 X2 с рейтингом 4200+ на ядре Manchester. Данный процессор работает на частоте 2.2 ГГц и снабжен 1 Мбайт кэш-памяти второго уровня – по 512 Кбайт на каждое ядро. Целью тестирования была наглядная демонстрация изменения производительности в одно- и многопоточных приложениях, а также при одновременной работе нескольких приложений.
С результатами в числовом виде вы можете ознакомиться в таблице 1. Нам же осталось их проанализировать.

Стандартные тесты
Кодирование мультимедиа-контента. Для начала поясним результаты при работе со сжатием мультимедиа-данных при помощи программы VirtualDub. В процессе обработки несжатого видеофрагмента объемом 1.23 Гбайт мы произвели сжатие данных при помощи двух кодеков – DivX и Xvid. Обратите внимание на результаты. В случае, когда запущено только одно приложение, мы наблюдаем колоссальное превосходство XVid над DivX. В первую очередь это обусловлено тем, что DivX не оптимизирован под многопоточное кодирование.
Архивирование. Популярный архиватор версии WinRar 3.51, выступающий в роли тестового пакета, так же, как и DivX, не обладает нужной нам оптимизацией. Следовательно, результаты должны быть эквивалентны одноядерным решениям. Но здесь есть очень интересный момент: предположим, что у нас есть две неоптимизированные задачи или же одно однопоточное приложение и второе, способное разбивать процесс на ветки (это мы рассмотрим чуть ниже).
В тестировании участвовала подборка из 508 файлов общим объемом 350 Мбайт. Степень сжатия – максимальная, размер словаря – 4096 байт.
Математические задачи. Один из самых любимых тестов поклонников продукции Intel показал, что ни набор команд SSE3, ни тем более 2 ядра не принесли нужных результатов. Результат, полученный при вычислении числа “пи” с точностью до 8 млн. знаков, – не слишком высок, так как для данного теста, в первую очередь, критична частоте процесосра, которая у данного чипа очень низкая. Но, опять же, на второе ядро можно было “повесить” вторую активную задачу.
Второй тест, который мы решили использовать – это Sciencemark 2.0. Результаты очень даже приличные. К примеру, подтест Molecular Dinamic Benchmark с процессором Turion 64 ML-30 (1.6 ГГц, 1 Мбайт L2) выполнялся приблизительно в 3 раза дольше.
3D-моделирование. Выбранная тестовая сцена из 3D StudioMax 5.0 (Dragon Character Rig) обсчитывалась с разрешением 1024×768. SSE было включено. Также мы включили режим полноэкранного сглаживания. Результаты говорят сами за себя...
GIMP 2.2.10. Операции, проделанные с растровым редактором, уже стандартны. Мы взяли изображение, полученное от камеры 5 Мпикс, увеличили его до 10000×7500 с применением бикубической интерполяции. Затем произвели поворот изображения на 180°+179°. При каждом действии мы засекали время выполнения.
Half-Life 2. Мы рассматривали второй режим из тестирования видеокарты ATI Radeon X1900 XTX, то есть максимальный уровень фильтрации. Для смещения нагрузки с видеокарты на процессор было выставлено низкое разрешение: 1024×768.
Данное игровое приложение, как и большинство игр, еще не оптимизировано для работы с многоядерными процессорами. Мы использовали тот же самый demo-ролик для замеров производительности при увеличении числа задач (см. ниже), что позволило выявить преимущества двух ядер.
Результаты прочих игровых тестов вы можете узнать из «МБ» №13’2006 – тестирование Radeon X1900 XTX мы проводили на той же самой конфигурации тестового стенда.

Параллельное исполнение
А сейчас – несколько усложним задачу: запустим несколько ресурсоемких процессов одновременно.
XviD+WinRar. Как мы уже отметили, видеокодек XviD снабжен оптимизацией под многопоточное кодирование, тогда как используемая версия WinRar не обладала таковой. Оба приложения ресурсоемки, оперируют различными типами данных, следовательно, полученный результат вполне адекватен. Отметим, что кодек запрашивает максимум ресурсов обоих ядер, архиватор же – только одного. Таким образом происходило своего рода чередование вычислений. В один момент оба ядра работали над кодированием, в другой момент одно из ядер переключалось на архивирование. В этом случае был необходим запрос в кэш-память, ОЗУ или, что еще хуже, – к жесткому диску. Те же самые операции происходили при обратной передаче “прав”. Напрашивающийся вывод – тщательней выбирайте ПО для одновременной работы нескольких “тяжелых” задач.
DivX+WinRar. Как и в предыдущем случае WinRar был запущен в фоновом режиме. Обратите внимание, каковы изменения по отношению к предыдущему случаю. Оба приложения являются однопоточными, каждое ядро обязано заниматься своей задачей – что мы и видим. Время исполнения при параллельном исполнении задач меньше, чем суммарное время при последовательном исполнении.
Half-Life 2+WinRar. Опять же, два однопоточных приложения, WinRar в фоновом режиме. Что мы видим? С одной стороны явно выражено падение производительности, с другой – комфортный режим игры вполне обеспечивается.
Half-Life 2+WinRar+XviD. Картина еще более усугубилась. Мы предполагаем, что в данном случае роковую роль сыграла дисковая подсистема, которая не способна достаточно быстро вести считывание и запись.

Пришла пора!
Мнение скептиков годовалой давности, что, мол, двухъядерные процессоры не дадут никакого прироста производительности, так и осталось мнением – уже сегодня два ядра будут выгодно смотреться не только в профессиональном сегменте, но и в бытовом. Иными словами, если есть выбор приобретать одно- или двухъядерное решение, то советуем присмотреться именно к двухъядернику, так как с каждым днем одноядерные решения отходят на задний план. Более того, уходит в прошлое и однопоточное программное обеспечение.


Рекомендуем почитать: