Intel Core i7 vs Xeon

Мине се не мине някое време и Intel изважда от голямата си технологична шапка поредния заек. И макар повечето зайци на Intel, както и на другите “иноватори” в информационната индустрия, да са просто преродените души на умрелите динозаври, всички вкупом се втурват да правят тестове и да възхваляват новите продукти. Реших, че нямам причина да изоставам от тази всеобща треска и се захванах да проверя, става ли Core i7 за научни пресмятания, не става ли.

Вместо предисловие

Intel най-накрая осъзна, че съвременните интензивни приложения изискват все по-бърз достъп до все по-големи обеми информация, съхранявана в RAM паметта, чиято пространствена кохерентност в общия случай е недостатъчно голяма и дори 2x6 MB L2 кеш на последните поколения Xeon не са достатъчни за преодоляване на това най-тясно гърло на системата (изключвам дисковата и мрежова входно/изходни подсистеми). AMD отдавна интегрираха контролера на паметта в чипа на процесора, което в комбинация с HyperTransport шината създаде изключително производителния при обща употреба Opteron. Не случайно Cray избраха Opteron като наследник на Alpha в техните суперкомпютри (като частичната съвместимост на шините вероятно също е допринесла за решението). Най-бързият суперкомпютър към настоящия момент, RoadRunner на IBM, също използва Opteron за x86 гръбнака. Opteron се използва и в HECToR, 11328-ядреното чудовище на EPCC, на което имах удоволствието да работя по време на престоя си в Единбург в края на миналата година.

Отговорът на Intel, след години на разработки и лабораторни тестове, беше микроархитектурата Nehalem, наследникът на Core 2, известна под търговското наименование Core i7. При нея контролерът на паметта е интегриран в процесорния чип, а йерархията на кеша е усложнена с добавяне на трето ниво (L3). За разлика от Core 2, където кешът от второ ниво се споделя от две ядра, при Nehalem всяко ядро разполага със собствен кеш от второ ниво, макар и силно редуциран по обем — само 256 KiB/ядро. Следният изход от инструмента cpuinfo на Intel показва организацията на ядрата и кешовете в процесор Core i7 920 (Nehalem):

Processor     : Intel Core i7 920
Architecture  : x86_64
Hyperthreading: disabled
Packages   : 1
Cores      : 4
Processors : 4
=====  Processor identification  =====
Processor       Thread  Core    Package
0               0       0       0
1               0       1       0
2               0       2       0
3               0       3       0
=====  Processor placement  =====
Package Cores           Processors
0       0,1,2,3         0,1,2,3
=====  Cache sharing  =====
Cache   Size            Processors
L1      32 KB           no sharing
L2      256 KB          no sharing
L3      8 MB            (0,1,2,3)

За сравнение, организацията в Xeon E5420 (Core 2) е следната:

Processor     : Intel Xeon E5420
Architecture  : x86_64
Hyperthreading: disabled
Packages   : 1
Cores      : 4
Processors : 4
=====  Processor identification  =====
Processor       Thread  Core    Package
0               0       0       0
1               0       1       0
2               0       2       0
3               0       3       0
=====  Processor placement  =====
Package Cores           Processors
0       0,1,2,3         0,1,2,3
=====  Cache sharing  =====
Cache   Size            Processors
L1      32 KB           no sharing
L2      6 MB            (0,1)(2,3)

Добавянето на кеш от трето ниво ни връща в годините на RISC процесорите от типа на POWER на IBM, където подобна организция беше нещо нормално, налагащо се от факта, че суперкомпютърната индустрия дълго време отказваше да използва по-нови поколения памети, разчитайки на по-бавни, но изпитани с времето технологии.

Системите

Като площадка за тестване на Xeon E5420 е използван един от възлите на клъстера physon, а достъп до машина с Core i7 920 беше любезно предоставен от Васил Колев (a.k.a. ManiaX). Съществените в случая характеристики на системите са както следва:

Система с Xeon E5420

CPU: 2 x Intel Xeon E5420 (2.5 GHz, 1333 MT/s FSB)
MoBo: Supermicro X7DBT-INF
Chipset: Intel 5000P
RAM: 8 x 2 GiB ECC DDR2-667

Система с Core i7 920

CPU: Intel Core i7 920 (2.66 GHz, 4.80 GT/s QPI, спрян HT)
MoBo: Intel DX58SO
Chipset: Intel X58
RAM: 3 x 2 GiB DDR3-1066 (tripple channel)

Тестовете

Науката е или физика, или колекциониране на пощенски марки.”

—Е. Ръдърфорд

Опирайки се на горното твърдение, ограничих тестовете до едно синтетично и две реални приложения за симулиране на физични процеси и свойства на вещества в наноразмерната област.

memset тест

memset тестът е елементарно многонишково приложение, всяка нишка на което многократно запълва динамично заделен блок от 512 MiB (229 байта), използвайки стандартната библиотечна функция memset(3). Приложението е компилирано с Intel C Compiler 11.0.074 с ниво на оптимизация O3 и целево множество от инструкции SSE4.1 за теста на Xeon E5420 и SSE4.2 за теста на Core i7 920, което свързва кода със силно оптимизирана реализация на memset(3).

Изпълнението с една нишка оправдава обещанията на Intel, като i7 920 постига 8863 MB/s в сравнение с 3675 MB/s при Xeon E5420. Двунишковото изпъление изяжда почти цялата налична пропускателна способност на връзката между процесор и памет, достигайки 13172 MB/s при i7 920 и 4188 MB/s при E5420. Изпълнението на 4 нишки показва, че е на лице насищане с 13416 MB/s при i7 920 и 4192 MB/s при E5420.

Чипсетът Intel 5000P предоставя независима шина до всяко процесорно гнездо. И наистина, при двунишково изпъление, когато всяка нишка работи в отделен физически процесор, общата пропускателна способност достига 5440 MB/s, като при 4 нишки (по две на физически процесор) тя е 5768 MB/s. При 8 нишки се наблюдава лек спад до 5728 MB/s.

md тест

Тестът представлява типична компютърна симулация от областта на физиката на кондензираните среди и разглежда еволюцията във времето на положенията и скоростите на атомите на моделна въглеродна нанотръба. За целта се използва методът на молекулната динамика, от където и идва наименованието на теста. Особеното на този тест е, че всички работни променливи се побират напълно в обема на последното ниво от кешовата йерархия и на двата разглеждани процесора.

Без да се впускам в подробности за организацията и работата на програмата ще кажа, че компилаторът на Intel векторизира вътрешните цикли и произвежда векторни SSEx опкодове, което позволява на програмата да използва всичката изчислителна машинария, налична във всяко процесорно ядро. За разлика от следващия тест, тук не се използват никакви външни специализирани библиотеки за математически пресмятания.

Core i7 920 постига производителност от 155.9 стъпки/s, докато при Xeon E5420 тя е 137.3 стъпки/s. Нормирани на тактовата честота на процесора, горните производителности (в единици наностъпки/такт) се редуцират до 58.6 при i7 920 срещу 54.9 при E5420, т.е. за подобен род пресмятания микроархитектурата на Core i7 е с около 7% по-ефективна спрямо Core 2 при една и съща тактова честота.

qe тест

Quantum Espresso представлява тежък код за пресмятане на квантовомеханичните свойства на кондензирани среди с методите на теорията на функционала на електронната плътност в базис от плоски вълнови функции (иначе казано PWDFT). Изисква огромно количество памет за съхранение на работните данни, върху които прилага множество матрични операции и дискретни трансформации на Фурие. Основната изчислителна работа се поема от три специализирани външни библиотеки: BLAS и LAPACK за матричните операции и FFTW за трансформациите на Фурие. Програмата е многонишкова, като всяка нишка е отделен процес, а за обмяна на данни между процесите се използва Open MPI, която среда ще разгледам в по-следващите писания за парадигмите и методите на паралелното програмиране. Използва се оптимизирана реализация на BLAS и LAPACK в Intel Math Kernel Library (IMKL), а FFTW е реализирана под формата на интерфейсен слой над IMKL.

Програмата може да се изпълнява както в еднонишков (сериен), така и в многонишков (паралелен) режим. Времето за изпълнение на симулацията в сериен режим на Core i7 920 е 122 минути (11.80 сим/ден), докато при Xeon E5420 то е 143 минути (10.07 сим/ден). Ефективността, измервана в единици сим/(ден•GHz), е както следва: 4.44 за i7 920 и 4.03 за E5420. Core i7 920 е с 10% по-ефективен от Xeon E5420 при този род пресмятане.

Паралелният режим на работа позволява да се наблюдава влиянието на северния мост при Xeon, както и влиянието на споделянето на L2 кеша между ядрата. С 4 процеса Core i7 920 успява да “смели” задачата за 45.41 минути (31.71 сим/ден), докато при E5420 времето варира от 48.27 мин (29.83 сим/ден) до 60.00 мин (24.00 сим/ден) в зависимост от разпределението на процесите по ядрата на двата микрочипа. Най-лошият случай (24.00 сим/ден) се реализира, когато всички 4 процеса се изпъляват в рамките на един микрочип, а най-добрият (29.83 сим/ден) — когато всеки процес се изпълнява без да споделя L2 кеш с друг процес. Междинният случай, при който два по два процесите споделят общ L2 кеш, но двойките се изпълняват в различни микрочипове, се изпълнява за 54.26 мин (26.54 сим/ден).

Вижда се, че при 4 процеса Core i7 920 извършва пресмятането 2.69 пъти по-бързо, единичен Xeon E5420 — 2.38 пъти по-бързо, а два Xeon E5420 — 2.96 пъти по-бързо или 2.64 пъти по-бързо, в зависимост от постановката.

В страни от явното по-доброто мащабиране на програмата върху Core i7 при еднопроцесорни конфигурации, резултатите от двата Xeon процесора са много поучителни и следва да се имат предвид, както от потребителите на подобни многоядрени системи, така и от техните администратори.

Някои изводи

От направените тестове мога да заключа, че Core i7 е достоен процесор за работната станция на всеки сметач. Дори най-евтиният представител на семейството, Core i7 920, се представя по-добре от по-скъпия Xeon E5420. При многонишкова работа i7 920 се представя по-добре от E5420 в еднопроцесорния случай, като последният разгръща способностите си едва в многопроцесорни конфигурации.

Peer review FAIL

../images/84.thumbnail.jpg

ALL YOUR PEER REVIEW ARE BELONG TO US!

Най-страшното е, че аз съм автор на въпросния труд, който виси повече от година пред стаята ни във ФзФ, като никой не е забелязал подчертаното… до днес :)

HPC в icaci.info

Като малък имах детска мечта, подобно на всички малчугани, но не исках да ставам космонавт, нито да освобождавам лигави принцеси от порутени замъци, пазени от зли дракони. Поради ранното излагане на магическата сила на компютрите и естеството на литературата, с която си запълвах свободното време, исках да имам… ГОЛЯМ СУПЕРКОМПЮТЪР (от най-големите и от най-суперските). Не че знаех какво ще го правя, или пък как ще му плащам тока, но какво друго може да се очаква от едно хлапе, което намира на тавана на къщата тонове списания “Наука и техника за младежта” (издание на ЦК на ДКМС, ако някой още си спомня значението на тези съкращения) и ги изяжда от кора до кора? Е добре, в един момент осъзнах, че притежанието на такава машина не е по силите на обикновения човек, поради което мечтата ми се измести от притежаване на към достъп до въпросния ГОЛЯМ СУПЕРКОМПЮТЪР. Отново без никаква идея, какво точно ще правя с този достъп. Обаче знаех, че искам Cray, понеже в онова списание пишеше, че Cray бил най-добрият от най-големите. Така де, най-доброто или нищо.

За разлика от мечтите за космонавстване или рицарстване, реализирането на моята се оказа не само реално възможна, но и напълно възможна реалност. С времето не само придобих [леееко нелегално в началото ;)] достъп до Cray (ако си им фен — цъкни тук), не само намерих как и за какво да ползвам суперкомпютрите (благодарение на милите хора от EPCC и разходките до китния Единбург), но и прескочих значително отвъд мечтата си, приземявайки се в позицията “направи си сам”.

Но не за реализираните детски мечти ще става дума тук, а за действителността на 2009 г. А тя е, че вече практически няма широкодостъпен микропроцесор, който да не е с поне две ядра. Апокрифните доскоро техники за паралелно програмиране, известни само на гурутата в академичните среди и производителите на “ентърпрайз” решения, вече придобиват практическа популярност. Съвременните версии на най-популярните средства за разработка на приложения (GCC и Visual Studio) поддържат OpenMP — един от стандартите за писане на паралелни приложения, непознат до скоро на широката публика, a Intel започна серия от популяризаторски вебинари (WEB семинари) за OpenMP и TBB (Threading Building Blocks) и разработи специални инструменти за улесняване на прехода от серийно към паралелно програмиране, след като се оказа, че повечето многонишкови програми никога не са били замисляни да работят в условия, в които нишките им се поемат от различни физически ядра, поради което рекламираните революционни 2x и 4x ускорения на работния процес така и не се получиха. Причината е проста — нишките се ползват основно за асинхронна обработка на събития и избягване на изчакваща синхронизация, а не за разпределяне на изчислителното натоварване. Това е подход, известен като паралелизъм по задачи, като различните задачи обаче са силно небалансирани по отношение на използването на процесорните ресурси, тъй като повечето от тях “проспиват” времевите си кванти в изчакване на вход/изход или друго синхронно събитие.

За пълното овладяване на мощта на новите многоядрени процесори е необходимо известна промяна в парадигмите на програмиране, като фокусът се измести от паралелизма по задачи към т.нар. паралелизъм по данни. За щастие това не е terra incognita, а добре разработена още от 80-те години на миналия век територия. За нещастие, повечето паралелни машини се използваха за решаване на научни и инженерни задачи, поради което основните парадигми и библиотеки за паралелно програмиране са FORTRAN и C центрични (OpenMP, MPI), като обаче постепенно се появяват и по-съвременни абстрактни приложни решения, като Intel Threading Building Blocks (C++ библиотека) и паралелните разширения на .NET (езиково неутрално решение). Също така повечето функционални езици с приложно значение, макар и все още възприемани като екзотика, като Erlang и Ocaml, поддържат паралелно изпълнение по най-естествен начин.

Отдавна се каня [от години, всъщност :)] да започна да списвам по нещо за високопроизводителните изчисления, наричани в англоезичната литература HPC, но все си намирах други занимания като пълнежи на свободното ми време, а и ниският интерес към курса ни по паралелно програмиране сред възпитаниците на факултетите от комплекс Лозенец на СУ поставяше под сериозно съмнение смисъла на начинанието. Придобиването обаче от ДАИТС на 8192-ядрената Blue Gene/P машина, създаването на национален суперкомпютърен център и сродните му центрове по върхови постижения, както и масовото навлизане в родината на машини с многоядрени процесори, все пак ме карат да мисля, че интересът към тази тематика тепърва ще се формира. По случая започвам рубрика HPC, първи обитател на която ще бъде сравнение на Intel Core i7 (на ManiaX) и Intel Xeon E5420 (на ФзФ) от гледна точка на няколко типични научни приложения.

Надежда

Тя: (по детски невинно) Защо?
Той: Тате, не е хубаво да се отмъщава! Той, който прави лоши неща, на себе си ги прави…

Още има надежда в тази държава.