Более года, с весны 2005-го, когда компаниями Intel и AMD практически одновременно были представлены первые двухъядерные процессоры, предназначенные для ПК, и до лета 2006-го, когда наконец появился Core 2, ознаменовавший отказ от тупиковой ветви развития микропроцессорной отрасли NetBurst, корпорация Intel находилась в положении аутсайдера.
Теперь, вновь оказавшись на коне, Intel спешит увеличить отрыв. Тем более что некоторые события в мире высоких технологий принято считать знаковыми. Упустив возможность первой преодолеть гигагерцевый рубеж, Intel с тех пор крайне внимательна к подобным моментам. Даже при некотором технологическом отставании от AMD в области разработки многоядерных архитектур она сумела раньше всех представить миру двухъядерный процессор для ПК. Теперь же, когда технологическое преимущество перешло на ее сторону, она спешит закрепить успех, первой предъявив публике четырехъядерный процессор архитектуры x86.
Полтора года назад, когда у AMD уже были наработки по проектированию многоядерных процессоров, Intel вырвалась вперед, объединив в одном корпусе два одноядерных процессора. Известно, что сейчас у AMD на подходе полноценная четырехъядерная архитектура. Но и здесь Intel решила обойти конкурента, применив половинчатое решение — размещение в одном корпусе двух двухъядерных процессоров Core 2 Duo E6700 2.66 GHz. С одной стороны, воспользовавшись тем, что технология Core 2 Duo обладает пониженным энергопотреблением по сравнению с предыдущими поколениями процессоров, Intel будет избавлена от серьезных проблем с тепловыделением у нового четырехголового монстра. С другой стороны, система получилась несимметричной, и, как и в случае с Pentium Extreme Edition, обладающим четырьмя логическими процессорами при двух физических, производительность нового процессора оказалась зависящей от того, как операционная система распределит ресурсоемкие потоки между четырьмя «головами» нового устройства. Хотя, в отличие от двухъядерной системы с HyperThreading, здесь ограничения связаны лишь с использованием кэш-памяти второго уровня, а потому в реальной работе такая несимметричность будет приводить к снижению производительности лишь в редких случаях.
Новый процессор получил название Intel Core 2 Quad CPU @ 2.66 GHz. Предположительно он будет позиционироваться как Core 2 Extreme и иметь индекс QX6700, но в отличие от нынешнего Core 2 Extreme X6800 некоторое время останется единственным представителем новой линейки Quad. В общем-то это вполне логично — к интенсивному использованию многопроцессорных конфигураций современная программная отрасль еще не готова.
Напомним, что с точки зрения использования собственной производительности ПК существенно отличается от мэйнфреймов, серверов или рабочих станций. В обычном режиме работы ПК практически все время (более 90—99%) находится в состоянии простоя, т.е. ожидает действий пользователя (нажатия на клавишу или изменения положения мыши). Поэтому со многими приложениями с одинаковым успехом справляются как современные компьютеры, так и морально устаревшие машины на процессорах Pentium — Pentium III с тактовой частотой 200—700 МГц.
Работа классической многозадачной операционной системы (на примере семейства Windows) выглядит так: в ОС имеется несколько запущенных процессов (примерно от 20 до 40), большая часть из которых сгенерирована самой системой и лишь некоторые — пользовательскими программами. Список этих процессов можно посмотреть, нажав ++. У каждого из них есть очередь сообщений, пополняемая за счет межпроцессных сообщений и пользовательского ввода. ОС поочередно перебирает процессы и раздает им по очередному сообщению (если очередь сообщений соответствующего процесса не пуста). Если же сообщений для обработки нет, ОС останавливает процессор командой HLT до прихода очередного аппаратного прерывания. Аппаратные прерывания, в свою очередь, поступают с внешних устройств, таких как системные часы, сетевой контроллер, мышь или клавиатура.Обычно любое элементарное действие пользователя, например нажатие на клавишу, сопровождается достаточно большим количеством генерируемых сообщений, скажем десятью. Но время обработки каждого сообщения невелико, от 50 до 500 мкс в зависимости от мощности компьютера. Понятно, что десяток таких сообщений обработается за время от 0,5 до 5 мс, что для пользователя совершенно незаметно, с его точки зрения реакция на внешнее воздействие наступила мгновенно.
Несколько иначе обстоит дело, если компьютер выполняет какую-либо ресурсоемкую задачу, например архивацию данных, антивирусную проверку или видеосжатие. ОС по очереди раздает кванты времени всем запущенным процессам, но величина кванта определяется прикладной задачей и может доходить до нескольких десятков миллисекунд. Точнее, прикладная задача, допустим то же видеосжатие, может требовать и намного больше, но в таком случае ОС принудительно ограничивает квант времени определенной величиной. При этом кванты времени выделяются поочередно обработке нажатия на клавишу и видеосжатию, но первая «берет» только 50 мкс, а второе норовит получить все 20 мс, выделяемые ОС. Поэтому на пользовательский ввод приходится лишь доля процента от производительности системы. Конечно, чтобы смягчить это соотношение, в ОС существует жесткая система приоритетов, но зачастую прикладные процессы используют вызов системных функций, которые сами по себе имеют высокий приоритет. За время обработки десяти пользовательских сообщений система успеет передать процессу архивации десяток квантов времени по 20 мс, в результате чего время запаздывания реакции на нажатие клавиши становится заметным на глаз и пользователь начинает чувствовать, как его компьютер «тормозит».
В случае же многопроцессорной системы в то время как один процессор непрерывно в течение 20 мс «борется» с ресурсоемкой задачей, второй практически свободен, и вся очередь пользовательских сообщений достаточно быстро им обрабатывается. Пользователь не замечает выполняемого в системе «тяжелого» приложения.
Первоначально появление технологии HyperThreading было обусловлено тем, что из-за сверхдлинного конвейера Pentium 4 исполнительные блоки процессора подолгу простаивали, ожидая, когда диспетчеризующее устройство даст им очередную инструкцию, пригодную для исполнения. HyperThreading означает всего лишь введение в процессор второго диспетчера, который также может нагружать исполнительные блоки. Таким образом, количество исполнительных блоков в процессоре оставалось прежним, но за счет сокращения времени их простоя производительность в многопоточном режиме увеличивалась примерно на четверть (по данным Intel, ее рост достигал 40%). Но самое главное, как оказалось, заключалось в том, что ресурсоемкая задача и пользовательский ввод могли быть разнесены по разным диспетчерам (виртуальным процессорам); на обработку ввода при этом оставалось около 25% мощности процессора вместо долей процента в классической однопроцессорной системе. Другими словами, пользователь теперь намного реже ощущал «торможение» компьютера, только когда в системе имелось одновременно не менее двух ресурсоемких потоков.
Но объективные тесты (т.е. те самые ресурсоемкие приложения), работающие в однопоточном режиме, не показывали прироста производительности, поэтому Intel настойчиво добивалась освоения программистами многопоточных технологий. Однако здесь имеется два препятствия. Первое заключается в том, что многопоточность не может быть получена автоматически либо с помощью настройки компилятора. Потоки приходится в каждой программе организовывать вручную, да к тому же предпринимать дополнительные усилия по их синхронизации, а подобную нагрузку программисты далеко не всегда считали оправданной. Кроме того, для преобладающих в настоящее время однопроцессорных систем это еще и вело к некоторому снижению производительности.
Второе препятствие гораздо более существенно: разделение на потоки требует распараллеливания вычислений, а универсальных методов для этого нет и быть не может. Конечно, есть масса задач, которые допускают широкое распараллеливание, например поиск простых чисел (можно разбить все множество чисел на несколько диапазонов и выделить каждому потоку свой диапазон), подбор паролей (перебирать пароли в каждом потоке по своему шаблону) и т.п. Но обычно это справедливо для классических математических или научных задач, где и так уже давно используются кластерные вычисления. Среди задач, традиционно выполняемых ПК, таких не очень много. По сути дела обычно на ПК выполняются только два вида ресурсоемких приложений — игры и аудиовидеосжатие (реже — связанные с интенсивным использованием файловой системы: архивация, антивирусная проверка или резервирование информации — backup).
В играх всегда, даже в однозадачной системе DOS, выделялся отдельный поток для звука. Но обычно это лишь небольшая доля нагрузки. Куда интереснее распараллелить либо расчет физики и графики, либо даже сами по себе физику и графику. Теоретически и то и другое выполнимо, но, как всегда, требует дополнительных усилий и сопряжено с побочными эффектами. Например, в классическом последовательном алгоритме блок расчета физики изменяет значения координат объектов в пространстве (включая камеру, т.е. точку расположения наблюдателя), после чего блок графики выводит объекты с измененными координатами на экран. Если попытаться просто разнести эти расчеты по потокам и выполнять одновременно, то окажется, что когда блок расчета физики уже успеет вычислить новые координаты для одних выводимых на экран объектов, то для других — еще нет. Понятно, что результат на экране получится неудовлетворительным: скажем, туловище персонажа ушло вперед, а ноги остались на старом месте. В этом случае решением может быть запоминание результатов расчета физического блока в промежуточном буфере с последующим одномоментным переносом всего массива данных в ту область памяти, которая используется для работы графического блока. Но с одной стороны, это требует удвоенного объема памяти, а с другой — графический «движок» получает данные не от текущего, а от предыдущего прохода блока физики, в результате чего увеличивается задержка между внутренним временем игры и тем, что пользователь видит на экране. В частности, замедляется реакция на изменение состояния органов управления, что также воспринимается пользователем как «торможение».
Попытка распараллелить вычисление физического блока ведет к проблемам с взаимодействием между объектами, а распараллеливание графики еще больше усложнено из-за специфики графического конвейера.
Новейший процессор Intel Core 2 Quad QX6700 2,66 ГГц |
При обработке мультимедийного материала многопоточность также используется уже сравнительно давно, но, как и в случае с играми, обычно в отдельный поток выделяется только звук, составляющий лишь очень небольшой процент обрабатываемых данных. В принципе можно было бы в разных потоках независимо сжимать различные кадры, но такой подход допустим лишь при отсутствии взаимной зависимости между кадрами. Это справедливо для формата DigitalVideo, но он имеет слишком малый коэффициент сжатия — полуторачасовой фильм займет около 20 Гбайт. Все современные алгоритмы, обладающие высокой степенью сжатия, обрабатывают не кадр целиком, а лишь отличие текущего кадра от предыдущего. Если в качестве предыдущего использовать несжатый кадр, это очень быстро приведет к снижению качества изображения за счет накопления ошибок. Использование же предыдущего кадра, подвергнутого процедуре компрессии, не позволяет начинать обработку следующего кадра до окончания обработки предыдущего, т.е. не допускает распараллеливания предложенным способом. Можно разделить кадр на несколько частей и сжимать их независимо друг от друга в разных потоках. Но если это допустимо в простых алгоритмах сжатия типа MPEG-1 или MPEG-2, которые делят картинку на блоки 8Ё8 и обрабатывают их независимо, то уже в MPEG-4 присутствует возможность динамически разделять изображение на регионы произвольной формы, что опять же, с одной стороны, позволяет уменьшить размер файла в 2—2,5 раза при том же уровне качества, но с другой — не допускает распараллеливания вычислений таким простым способом. Другими словами, применение сложных алгоритмов сжатия, обеспечивающих высокий уровень компрессии, затрудняет распараллеливание вычислений.
Таким образом получается, что при переходе от одного ядра к двум можно почувствовать повышение комфортности работы при использовании ресурсоемкого фонового процесса, а также в некоторых случаях благодаря тому, что разработчики начали понемногу вводить многопоточность (например, аудио + видео, игровая физика + игровая графика). В то же время переход от двух ядер к четырем в подавляющем большинстве случаев не будет сопровождаться заметным на глаз эффектом. Исключение могут составить отдельные специфические приложения, ради которых в принципе и имеет смысл остановить свой выбор на эксклюзивной модели Intel Extreme.
Что показали тесты
Как и следовало ожидать, во всех однопоточных приложениях производительность нового процессора такая же, как и у Intel Core 2 Duo E6700. В приложениях, использующих трехмерную графику, прирост производительности для четырехъядерного процессора заметен лишь в программах 2006 г., как это видно на примере 3DMark. Впрочем, кое-где некоторое преимущество Quad перед аналогичным по частоте Duo можно заметить и в более ранних программах, но оно существенно меньше, чем выигрыш, даваемый предыдущим Core 2 Extreme X6800 по сравнению с E6700. Примерно то же самое можно сказать и об аудиовидеосжатии: кодеки предыдущего поколения, осуществляющие сжатие лишь в два потока, демонстрируют равенство производительности при использовании XQ6700 и E6700, тогда как DivX 6.1 уже осуществляет более глубокое распараллеливание вычислений. Тем не менее выигрыш в производительности пока очень сильно отстает от пропорционального количеству ядер: при 100%-ном (с 2 до 4, т.е. вдвое) увеличении числа ядер прирост производительности составил лишь около 8%.
SiSoft Sandra же, напротив, во всех процессорных тестах показал увеличение производительности ровно вдвое по сравнению с E6700. Ну, на то и синтетические тесты, чтобы выжимать из системы все, что возможно. Набор тестов на основе реальных приложений SYSmark 2004 продемонстрировал неоднозначные результаты. Хотя по суммарному баллу выигрыш остался за Extreme предыдущей модели X6800, это оказалось возможным только за счет офисных приложений, тогда как в профессиональных программах преимущество было за новым процессором. В принципе для офисных программ производительность никогда не была определяющей, поэтому и разработчики, пишущие такие программы, никогда не обращали особого внимания на распараллеливание вычислений. Да и речь идет о программах уже двухлетней давности, хотя если посмотреть на набор «софта», установленного на среднем компьютере, то скорее всего он окажется еще более старым, чем мы используем в тестах.
В общем, можно констатировать, что Intel «отметилась» в области четырехъядерных процессоров. В то же время для массового пользователя такое устройство пока вряд ли представляет серьезный интерес. Другое дело профессионалы, которые работают с ресурсоемкими программами, по максимуму использующими все возможности аппаратного обеспечения, в частности многоядерность. Для них выбор в пользу Intel Core Extreme QX6700 наверняка окажется предпочтительным. О массовом же применении четырехъядерных архитектур, вероятно, можно будет говорить лишь после выхода Windows Vista с соответствующим ей DirectX 10.0 и драйверами, обеспечивающими поддержку многопоточного взаимодействия с графическим процессором. В соответствии с законами рынка, наверное, следует ожидать дополнения линейки Quad моделями среднего уровня.
Редакция благодарит российские представительства компаний Intel и AMD за предоставленное для проведения тестирования оборудование.
Как мы тестировали
Мы сравнили новый четырехъядерный процессор Intel с четырьмя другими: предыдущей моделью Intel Core 2 Extreme X6800; ЦП Intel Core 2 Duo E6700 (имеющим такую же частоту, как у новинки); микропроцессором предыдущего поколения Intel Pentium 4 3,6 ГГц; флагманом AMD Athlon 64 FX-62.
Тесты проводились на базе компьютерного стенда с системными платами на НМС Intel 975X и на НМС NVIDIA nForce4 SLI, двухканальным ОЗУ типа DDR2-667 общим объемом 1 Гбайт, жестким диском Western Digital WD2000JD SATA, оптическим дисководом Lite-On LTN483L и блоком питания HPU-3S525 (525 Вт).
На жесткий диск тестового стенда устанавливалась ОС Windows XP Professional SP2 (build 2600). Разрешение экрана (кроме игровых тестов) составляло 1024x768 точек при 16,7 млн. цветов. Игровые тесты, если не оговорено иное, и тесты 3DMark проводились в трех разрешениях: 640x480, 1024x768 и 1600x1200 точек. Глубина цвета во всех случаях составляла 32 разряда (16,7 млн. цветов).
Полный вариант статьи см. на «Мир ПК-диске».