Прямое сравнение производительности КПК и настольных систем
Современные КПК достигли внушительных характеристик. Это уже не чахленькие машинки с 8-МГц процессором и черно-белым экраном 160х160, способные только на то, что бы вести список дел и телефонную книгу. Сейчас КПК способен на большее - воспроизведение музыки и видео, 3D-игры, работа со сложными офисными приложениями, полноценный интернет и электронная почта. То есть практически все, на что способен большой десктоп. Абстрактный Топ-КПК 2005 года имеет следующие характеристики: процессор Intel PXA27X с частотой 624МГц; крупный (до 4-х дюймов) экран с разрешением 480х640; до 128 Мб оперативной памяти; видеоакселератор от фирмы ATI или Intel, 2 беспроводных интерфейса - WI-FI и Bluetooth, 2 слота расширения - Compact Flash и SD в которые суммарно можно установить до 10Гб flash памяти либо различную перфирию - GPS/GSM модули, сетевые карты, модемы, FM-тюнеры и т.д. Все это работает под управлением операционной системы Windows Mobile. Согласитесь, такими характеристиками еще лет 5 назад мог похвастаться далеко не каждый десктоп или ноутбук. При этом весь КПК собран в компактном корпусе весом менее 200 грамм, а энергопотребление, как правило, не превышает 1 Вт, что позволяет проработать устройству 7-10 часов от одного заряда аккумулятора. А цены на такие девайсы опустились ниже $600. Все это вывело уровень мобильности и удобства работы на недоступную ранее высоту.
Но возникает резонный вопрос - насколько же эти машинки реально быстры, как соотносится их скорость работы и скорость обычных х86 совместимых машин. Не поспешили ли некоторые журналисты с утверждениями, что современный КПК может полностью заменить ноутбук? Может ли КПК посоревноваться с х86-и машинами в плане быстродействия? Эта статья попробует пролить свет на данный вопрос. Собственно, то, что х86 процессора будут производительнее, ясно и так, но хотелось бы получить некоторые количественные характеристики. На сколько производительнее? В 2 раза, в 10, в 100?
Для ответа на этот вопрос, вместо теоретического анализа процессорных архитектур, воспользуемся тестовой программой - ведь нас интересуют прежде всего практические результаты. Так как процессорные архитектуры Intel StrongARM и Intel x86 несовместимы в плане бинарников, придется прибегнуть к некоторым допущениям. Так же, для простоты, ограничимся только сравнением вычислительной мощности процессоров, что, правда, неизбежно затронет и скорость подсистемы памяти. Итак, для данного сравнения я написал специальное тестовое приложение, которое выполняет различные вычисления, и, соответственно, замеряет время расчетов. Эту программу вместе с исходниками вы можете скачать здесь. Так что, при желании, можно проверить мои расчеты, модифицировать тесты и убедиться, что в программе нет "заточек" :-) Для платформы х86 программу нужно компилировать в MS Visual C++ 6.0, а для PocketPC - в MS eMbedded Visual C++ 4.0 Sp4. Так как мы сравниваем аппаратные платформы, а не компиляторы (даже не смотря на то, что оба компилятора от одного производителя и достаточно похожи), в обоих случаях в настройках проекта я отключал любую оптимизацию. Я долго думал над этим моментом, но так на мой взгляд правильнее, хотя этим мы ставим платформу PXA27X в менее выгодное положение, ведь это более новая RISC архитектура и, в отличии от x86, в ней анахронизмов и кривостей намного меньше, и соответственно возможностей для оптимизации больше (это подтвердили и мои пробные тесты). В любом случае, естественно, полностью эквивалентного кода получитьcя не может хотя бы потому, что у этих процессоров разная архитектура, разное количество регистров, не идентичный набор машинных команд и т.д. Хорошо хоть, что они оба 32-х разрядные. Вообще все мои вычисления достаточно приблизительные и оценочные, я ведь не использую многих возможностей архитектур, например Wireless MMX, MMX, SSE1-SSE3 и некоторые другие. С другой стороны, данные расширенные команды нужны только для специфических задач. В моих же задачах их эффективно использовать не удалось бы. Все-таки быстрее простого регистра общего назначения для работы с 32-х битными числами ничего нет.
Пара слов о процессорах семейства Intel PXA27X. Линейка состоит из 3-х процессоров: PXA270 - отдельный (дискретный) процессор, PXA271 - процессор вместе с 32MB Flash и 32MB низковольтной SDRAM, PXA272 - процессор вместе с 64 MB Flash. Частота внешней шины 104МГц. Внутренняя частота получается с помощью целого коэффицента. При отсутствии нагрузки, процессор может понижать свою частоту с шагом в 104МГц, путем уменьшения коэфф. умножения вплоть до 1. Максимальная частота процессоров семейства PXA27X - 624МГц (коэфф. умножения 6); минимальная - 312 (коэфф. 3)
Мой тестовый стенд состоит из следующих машин:
- НР iPAQ hx4700 (процессор Intel XScale PXA270 624МГц);
- Dell Axim x50v (процессор Intel XScale PXA270 624 МГц);
- Dell Axim x30(процессор Intel XScale PXA270 312 МГц);
- Toshiba E755 (процессор Intel XScale PXA255 400МГц);
- PentiumIII 866 (чипсет i815G);
- Ноутбук IBM ThinkPad 390X (процессор Intel PentiumIII 450);
- PentiumII 350 (чипсет 440BX);
- Celeron 1700 (чипсет i845P).
Я намеренно привожу не полные характеристики компьютеров - только те, от которых зависит результат. Как вы увидите дальше, единицы процентов не играют никакой роли и не влияют на общий результат. На время проведения тестов КПК, если у них есть такая штатная возможность, переводились в режим максимальной производительности. Каждый тест запускался по 3 раза, запоминался самый лучший результат. Так же прошу заметить, что в тестовом стенде участвуют одни из самых быстрых на данный момент КПК и достаточно устаревшие "писишки". С одной стороны, это неправильно, с другой - подчеркнет результат. Кроме того, было бы глупо сравнивать процессора, которые производитель позиционирует как решения для высокопроизводительных рабочих станций и серверов с мобильными процессорами. Хоть PXA270 и топ-процессора в линейке, но по цене они дешевле самых бюджетных процессоров архитектуры x86. Если бы мы тестировали производительность встроенной графики интегрированных чипсетов, то логичнее было бы сравнивать их с бюджетными видеокартами, а не с топовыми за $500. Если же вы не согласны с моим выбором тестового стенда, то никто вам не мешает запустить этот тест на вашей личной системе и сравнить результаты - моя методика полностью описана и максимально открыта. И вот еще один довод - это только на первый взгляд х86 и StrongARM не конкурируют между собой. На самом деле, StrongARM используется, кроме КПК, еще во множестве других устройств - в различной встраиваемой технике, банкоматах, игровых автоматах, терминалах, планшетах, промышленном оборудовании, а по слухам, даже в космических аппаратах. Для этой платформы есть хорошие операционные системы и замечательные средства разработки. PXA используются там, где нужны экономичные, дешевые и компактные решения при умеренной производительности. И именно в этой области PXA конкурирует с х86, причем не с Xeon-ами и P4XE, а скорее с VIA C3, С7 и Celeron-ами. Посмотрите, какие возможности PXA предоставляет разработчикам устройств - при использовании процессора PXA271 не нужно дополнительно думать, ни о жестком диске, ни об оперативной памяти - все встроено, а значит дешево и надежно. Так же Intel, в соответствии со своей новой идеологией, продавать не процессора, а готовые платформы, предлагает совместно с процессорами PXA семейство мультимедийных акселераторов 2700G, предназначенных для обеспечения аппаратного ускорения при отображении двумерной и трехмерной графики (интерфейсы OpenGL и JSR), воспроизведения видео с качеством DVD (форматы MPEG2, MPEG4, WMV), поддержки двух дисплеев. Конечно жаль, что на момент проведения тестов у нас не оказалось машин на процессорах от VIA. Ведь именно их сейчас все чаще используют во встраиваемой технике. Но, зная результаты для перечисленных выше х86 машин, можно приблизительно прикинуть результаты и для процессоров VIA. Кроме того, я надеюсь еще вернуться к данной теме. Как оказалось, в одной статье невозможно затронуть все аспекты. "За бортом" остались такие интересные мобильные процессора, как TI OMAP, Samsung S3C, PentiumM и т.д.
Все вычисления можно разделить на вычисления с вещественными(т.е дробными) числами и вычисления с целыми числами. Для представления вещественных чисел я выбрал тип double (8 байт), а для целых - DWORD (4 байта).
Перейдем, наконец, собственно к тестам. Начнем с вычислениями над числами с плавающей точкой.
Итак, первая задача - вычисления числа PI с помощью ряда 1 - (1/3) + (1/5) - (1/7) + ... = (PI/4). Замечу, что все вычисления в этой программе проводятся не ради результата, а исключительно ради самих вычислений. Так что, не обращайте внимание на примитивизм используемых математических методов и упрощения.
Компьютер
|
Время выполнения (сек)
|
HP iPAQ hx4700
|
52,13
|
Dell x50
|
53,49
|
Dell x30
|
104,83
|
Toshiba E755
|
81,51
|
PentiumIII 866
|
1,12
|
ThinkPad 390X
|
2,19
|
PentiumII 350
|
3,04
|
Celeron 1700
|
0,66
|
Вторая задача - вычисление интеграла функции Sin(x) при 0 <= x <= PI методом прямоугольников.
Компьютер
|
Время выполнения (сек)
|
HP iPAQ hx4700
|
122,76
|
Dell x50
|
126,05
|
Dell x30
|
247,04
|
Toshiba E755
|
192,00
|
PentiumIII 866
|
1,31
|
ThinkPad 390X
|
2,57
|
PentiumII 350
|
3,41
|
Celeron 1700
|
1,32
|
Что мы видим? Отставание платформы PXA27X на вычислениях с плавающей точкой составляет десятки раз! Впрочем, этот результат объясняется очень просто. У процессора PXA27X нет ни математического сопроцессора (FPU - Floating Point Unit), ни других средств работы с вещественными числами. Все вычисления компилятор свел к цельночисельным, в этом можно легко убедиться, если дизассемблировать код. К слову, в отсутствии мат.сопроцессора нет большой проблемы. Числа с плавающей точкой используются только в специфических задачах, которые навряд ли кто-то выполняет на КПК. Так что, отказ от мат.сопроцессора в процессоре PXA27X это скорее правильное решение инженеров Intel. За счет этого удалось уменьшить площадь ядра, энергопотребление и цену. Есть мнение, что вычисления с дробными числами нужны в 3D играх. Это так, но эти вычисления реализованы таким образом, что FPU не задействован - он слишком медленный. Пытаться использовать мат.сопроцессор в играх, где нужны значительные объёмы вычислений - безумие. В старых играх для представления дробных чисел использовались собственные типы данных с фиксированным положением точки, работа с которыми сводилась к цельночисельным операциям, ведь в играх скорость важнее точности, да и диапазон значений известен заранее. А для получения значений различных математических функций, например, тригонометрических, использовались (да и сейчас используются) заранее расчитанные таблицы. В современных же играх, для вычислений с дробными числами используются наборы команд SSE, SSE2 или средства видеокарты. Мат. сопроцессор нужен для математических вычислений, когда важна точность расчетов, время же расчетов вторично. Для этих задач технологии SSE/SSE2 подходят плохо - у них недостаточная точность представления чисел (SSE - до 32-х битов, SSE2 - до 64-х, в то время как у FPU до 80-ти.) и к тому же они не умеют вычислять тригонометрические и логарифмические функции.
Теперь перейдем к тестам с целыми числами. При этом, тесты обрабатывающие массивы данных, я буду проводить для разных размеров массивов. Ведь, как известно, скорость выполнения таких задач зависит не только от вычислительной мощности процессора, но в не меньшей мере и от размера и скорости кэша, скорости памяти, эффективности реализации всей подсистемы памяти в целом. У процессора PXA27X кэш состоит за 3-х частей: 32Кb - кэш инструкций (i-cache), 32Kb - кэш данных второго уровня (d-cache), 2Kb - кэш данных первого уровня (Mini-data cache); имеется 13 32-х битных регистров общего назначения (R0-R12), причем каждая команда машинного кода занимает ровно 4 байта (в режиме "ARM instruction set" или ровно 2 в устаревшем и почти неиспользуемом режиме "Thumb"). Сравните с убогими четырьмя регистрами EAX, EBX, ECX, EDX процессоров х86 (ладно, пускай еще ESI, EDI, EBP) и длинной команды от 1 байта до 7 и более (понятно, почему в х86 так сложно организовать оптимизацию, распараллеливание выполнения, алгоритмы предсказания переходов).
Первая задача - возведение в квадрат единичной матрицы. Что бы можно было точнее измерить время для небольших матриц, тест выполняет расчеты по несколько раз (детали реализации можно посмотреть в исходниках). Буду рассматривать 3 размерности матрицы: 700х700 (размер используемой памяти ~1,87Мб); 70х70 (~20Кб); 10х10 (400б).
Компьютер
|
Время (Big matrix)
|
Время (Med. matrix)
|
Время (Small matrix)
|
HP iPAQ hx4700
|
198,57
|
29,20
|
9,20
|
Dell x50
|
207,84
|
30,02
|
9,43
|
Dell x30
|
250,22
|
58,77
|
18,53
|
Toshiba E755
|
264,95
|
45,60
|
14,36
|
PentiumIII 866
|
13,37
|
6,72
|
2,28
|
ThinkPad 390X
|
22,38
|
13,17
|
4,49
|
PentiumII 350
|
34,32
|
18,57
|
5,93
|
Celeron 1700
|
8,79
|
4,03
|
1,50
|
Следующая задача - сортировка псевдослучайной последовательности чисел пузырьковым методом. Как и в прошлой задаче, проведу операцию для последовательностей разной длины: 50000 элементов (~200Кб); 5000 (~20Кб); 100 (~0,5Кб).
Компьютер
|
Время (Big sort)
|
Время (Med. sort)
|
Время (Small sort)
|
HP iPAQ hx4700
|
106,49
|
26,43
|
12,72
|
Dell x50
|
110,65
|
27,16
|
13,06
|
Dell x30
|
156,40
|
53,09
|
25,60
|
Toshiba E755
|
143,25
|
41,27
|
19,85
|
PentiumIII 866
|
12,23
|
5,87
|
3,31
|
ThinkPad 390X
|
24,04
|
11,52
|
6,49
|
PentiumII 350
|
39,38
|
15,89
|
8,58
|
Celeron 1700
|
6,12
|
3,02
|
2,12
|
И наконец, последняя задача - вычисление суммы всех простых чисел, меньших чем N, где N, в данном случае равно 50000. Особенность этой задачи состоит в том, что все данные умещаются в регистрах процессора. Таким образом, сравнивается исключительно производительность ядер.
Компьютер
|
Время выполнения (сек)
|
HP iPAQ hx4700
|
11,31
|
Dell x50
|
11,59
|
Dell x30
|
22,72
|
Toshiba E755
|
18,25
|
PentiumIII 866
|
5,04
|
ThinkPad 390X
|
9,88
|
PentiumII 350
|
13,06
|
Celeron 1700
|
2,54
|
Ну наконец-то нашелся хоть один тест, в котором самые мощные и дорогие КПК "сделали" старенький десктоп!
Ну и для размышлений приведу таблицу с "нормированными" значениями. То есть значения буду рассчитывать по формуле v = vt*(h/1000), где vt - время полученное в тесте, h - частота процессора. Таким образом, такое значение показывала бы данная система на частоте 1ГГц, при условии линейной зависимости производительности от частоты.
Компьютер
|
PI
|
Integr
|
M.Big
|
M.Med
|
M.Sml
|
S.Big
|
S.Med
|
S.Sml
|
Prime
|
iPAQ hx4700
|
32,53
|
76,60
|
123,91
|
18,22
|
5,74
|
66,45
|
16,49
|
7,94
|
7,06
|
Dell x50
|
33,38
|
78,66
|
129,69
|
18,73
|
5,88
|
69,05
|
16,95
|
8,15
|
7,23
|
Dell x30
|
32,71
|
77,08
|
78,07
|
18,34
|
5,78
|
48,80
|
16,56
|
7,99
|
7,09
|
Toshiba E755
|
32,60
|
76,08
|
105,98
|
18,24
|
5,74
|
57,30
|
16,51
|
7,94
|
7,30
|
PIII 866
|
0,97
|
1,13
|
11,58
|
5,82
|
1,97
|
10.59
|
5,08
|
2,87
|
4,36
|
ThinkPad390X
|
0,99
|
1,16
|
10,07
|
5,93
|
2,02
|
10,82
|
5,18
|
2,92
|
4,45
|
PII 350
|
1,06
|
1,19
|
12,01
|
6,50
|
2,08
|
13,78
|
5,56
|
3,00
|
4,57
|
Celeron1700
|
1,12
|
2,2
|
14,94
|
6,85
|
2,55
|
10,40
|
5,13
|
3,60
|
4,32
|
Из этой таблицы хорошо видно - чем меньше объем обрабатываемых данных, тем быстрее работает PXA27X, тем больше он догоняет x86. Это говорит об эффективности реализации ядра. Но у него не слишком быстрая шина памяти, да и кэша маловато. Так же стоит отметить следующий момент: когда все данные помещаются в кэш, процессора Xscale работают со скоростью пропорциональной частоте. Причем ядро PXA255 показывает такую же производительность, как и PXA27X. Но как только программа начинает использовать данные, которые не умещаются в кэши, картина сильно меняется: чем меньше коэффициент умножения процессора, тем эффективнее он работает. Так что и на этих процессорах нет смысла сильно увеличивать коэффициент умножения - для дальнейшего роста производительности нужно делать более быструю шину (и/или увеличивать кэш данных).
Теперь настало время сделать выводы. Процессора PXA27X работают значительно медленнее процессоров х86, даже работающих на меньшей частоте. Причем отставание составляет разы. Жаль, что я не смог провести тест на системах с процессорами Pentium, Pentium MMX - возможно удалось бы найти систему, которая наиболее соответствует по скорости процессорам серии PAX27X. Получается, что либо PXA27X слишком медленный, либо просто x86-е процессора слишком быстрые. Но зато они потребляют на порядки больше электричества. А ведь именно экономичность - одна из важнейших характеристик любого мобильного устройства. Кому нужен был бы КПК, если бы он мог бы работать от одной зарядки всего 2 часа? Если не считать модуля Wi-Fi, именно процессор самый большой потребитель энергии в КПК - во всяком случае, об этом говорят тесты на продолжительность работы от одного заряда аккумулятора - при полной нагрузке на процессор время работы уменьшается в разы, относительно минимальной нагрузки. Так что именно энергопотребление - основной ограничитель производительности. Ведь даже Крейг Баррет (председатель совета директоров Intel) заявлял, что нет никаких технических сложностей в изготовлении процессора для КПК с частотой 1 и даже 2ГГц, но потреблять электричества такой процессор будет столько, что никакой аккумулятор его долго не прокормит. К тому же, как известно, вся потребляемая электрическая мощность процессора преобразуется в тепло, а использовать большие куллера и радиаторы на КПК не представляется возможным. Архитектура же x86 наоборот, нацелена на бескомпромиссное увеличение производительности любой ценой. И эта цена действительно заплачена в виде огромного тепловыделения, превышающего на топ-моделях процессоров 100Вт и большущей площади ядра! В то время, как у процессоров PXA27X мощность не превышает 0.5Вт (для сравнения, по приблизительным оценкам, мощность мозга взрослого человека равна 5-8Вт). Про разницу в цене я молчу (PXA27X стоит меньше $30). Но вот если бы мы рассматривали соотношение производительность на ватт, то архитектура Intel StrongARM оказалась бы безусловным лидером. Вообще PXA27X архитектурно намного более грамотный процессор. Ведь архитектура Х86 несет в себе тяжким грузом необходимость бинарной совместимости со всем старым кодом, написанным с 70-х годов. Большая часть ядра (если не учитывать кэш) занята не исполнением кода, а транслированием из одной системы команд в другую и разными вспомогательными операциями. Даже такой маркетинговый прием как псевдо-64-х разрядность не поможет. PXA27X же первоначально разрабатывался как 32-х битный процессор на основе эффективной Superpipelined RISC технологии с 7-8 стадийным конвеером. При сравнении процессоров не стоит зацикливаться только на производительности - она не всем важна. Для меня, например, самое важное качество в компьютере - надежность. А для многих - мобильность, не зря ведь продажи ноутбуков почти догнали продажи десктопов, несмотря на более высокую цену и более низкую производительность.
Фирма Intel не была бы лидером, если бы останавливалась на достигнутом. По недавним сообщениям, Intel-у удалось разработать новый 65нм техпроцесс со сверхнизким энергопотреблением, в котором токи утечки удалось снизить на несколько порядков. Так что, в ближайшие пару лет нас ожидают интересные сверхэкономичные процессорные новинки.
|