Для их микроархитектуры характерен ряд общих черт, в том числе применение общего, разделяемого между всеми ядрами процессора, кэша старшего уровня и наличие встроенного контроллера оперативной памяти. Этими особенностями обладают и четырехъядерные процессоры AMD Opteron 2350 (Barcelona), исследованию производительности компьютерных систем на базе этих процессоров посвящена данная статья

Серверные микропроцессоры IBM Power6, Intel Itanium 2 и х86-совместимые процессоры от Intel, AMD являются многоядерными и имеют ряд общих черт: встроенный контроллер памяти в Power6, AMD Opteron и в будущих процессорах Intel с микроархитектурой Nehalem [1] и в четырехъядерных процессорах Itanium/Tukwilla; общий, разделяемый между ядрами процессора кэш старшего уровня. Эти особенности дают многоядерным процессорам очевидные преимущества. Так, встроенные контроллеры позволяют не только масштабировать пропускную способность оперативной памяти сервера с ростом числа процессоров, но и приводят к более низким задержкам при работе с локальной, то есть подсоединенной к контроллеру данного процессора, памятью. Такие серверы имеют архитектуру с неоднородной памятью (ссNUMA), а не SMP, поскольку доступ в удаленную, подсоединенную к контроллеру другого процессора, память требует больше времени.

Наличие разделяемого ядрами кэша старшего уровня позволяет динамически изменять емкость кэша, доступного процессу (в частном случае — нити распараллеленного приложения). Это хорошо, если в многозадачной среде выполняются различные процессы, имеющие разные требования к емкости кэша. Если же речь идет о типовом распараллеливании в модели SPMD (Single Program Multiple Data), то, грубо говоря, всем нитям требуется один и тот же размер кэша [2]. Недостатком применения общей кэш-памяти обычно является некоторое увеличение задержек выборки из кэша.

Особенности тестирования многоядерных систем

При тестировании производительности многопроцессорных серверов с многоядерными процессорами возникает целый ряд особенностей.

Конечно, традиционно интересна производительность каждого процессорного ядра, соответствующая производительности на обычных последовательных кодах (см. таблицу 1)— прежде всего потому, что большинство приложений пока вообще не распараллелены.

 Таблица 1. Результаты SPECcpu2006 для четырехъядерных процессоров х86-архитектуры

Кроме того, в соответствии с «законом Амдала», эффективность распараллеливания на N процессоров (ядер) падает с ростом N вследствие увеличения доли времени последовательных вычислений [2]. Поэтому лучше применять меньше ядер, но более быстрых. Это особенно актуально, поскольку многие коммерческие приложения плохо масштабируются на большое число процессоров. Между тем, для самых массовых х86-совместимых серверов сейчас характерен довольно скромный рост производительности ядер, в то время как число этих ядер в типовых процессорах экспоненциально возрастает со временем выпуска.

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

Кроме того, если процесс после выполнения в течение ряда квантов времени на одном ядре продолжает выполнение на другом ядре, следует перезаполненить кэш, что требует много тактов. Важно поддержание в планировщике операционной системы «сродства к процессору» (processor affinity), препятствующее такой миграции процессов. Это, как и стремление к NUMA-распределению памяти (то есть выделению процессу в первую очередь локальной памяти — подсоединенной к тому процессору, на котором выполняется процесс), характерно для планировщиков современных версий Linux 2.6, но не гарантируется.

Итак, при измерении производительности современных многоядерных многопроцессорных серверов необходимо: обращать внимание на сродство к процессору; производить измерения на распараллеленных приложениях или при мультизадачной нагрузке, что позволяет учесть разделение процессами кэша старшего уровня; учитывать NUMA-распределение памяти.

Исследуем производительность компьютерных систем на базе четырехъядерных процессоров Opteron 2350 (Rev. B3, то есть с доработкой в буфере быстрой переадресации TLB). Четырехъядерные процессоры Intel Xeon 53XX и 54XX (строго говоря, это два двухъядерных процессора в одном корпусе) не имеют встроенных контроллеров памяти и отвечают SMP-архитектуре, но все особенности предложенной методики тестирования Opteron 2350 применимы для будущих серверных процессоров Nehalem.

Микроархитектура К10

С момента выпуска Opteron с микроархитектурой К8 эти процессоры по многим показателям производительности стали превосходить Intel Xeon, что было связано, в частности, с наличием в Opteron встроенных контроллеров памяти и с хорошим масштабированием производительности многопроцессорных серверов на базе Opteron. C появлением процессоров с микроархитектурой Core ситуация изменилась, хотя преимуществом микроархитектуры AMD осталась поддержка ccNUMA, а также хорошая пропускная способность памяти, но в Core возросла целочисленная производительность, а производительность с плавающей запятой в расчете на 1 ГГц возросла вдвое. Ответом на Сore стала микроархитектура К10, реализованная, в частности, в четырехъядерных серверных процессорах Opteron 23XX (Barcelona). В К10 имеются в том числе, и многие черты Core, в частности, удвоено число выдаваемых результатов операций с плавающей точкой за такт. Barcelona, после доработок в Rev.B3, стала активно поставляться на рынок весной 2008 года.

После выпуска Opteron 23XX стало ясно, что как Intel, так и AMD при увеличении числа ядер пошли по пути более частого внедрения доработок в микроархитектуру вместо более редких и более кардинальных ее изменений, как это было раньше. К10 очень близка к К8; рассмотрим внесенные изменения относительно К8.

  • C точки зрения работы с плавающей запятой, главное усиление микроархитектуры К10 (как и в Core)— это возможность выдачи четырех 64-разрядных результатов с плавающей запятой на каждом такте. Поэтому пиковая производительность Opteron 23XX в GFLOPS в четыре раза выше тактовой частоты в гигагерцах. На 32-разрядных операциях производительность еще в два раза выше. Это обеспечивается удвоением: ширины исполнительных устройств SSE (до 128 бит); длины строк в очереди планировщика с плавающей запятой (36 строк по 128 бит); пропускной способности выборки из D-кэша L1 (две загрузки по 128 бит за такт); пропускной способности выборки из кэша L2 и контроллера памяти (по 128 бит за такт). 128-разрядные SSE-команды декодируются в одну, а не в две микрооперации (внутренние RISC-подобные команды), как в K8, что увеличивает пропускную способность декодирования.

Добавились четыре SSE-команды: EXTRQ/INSRTQ, совмещающие маскирование, сдвиг и скалярную потоковую запись MOVNTSD/MOVNTSS. Эти команды образуют поднабор, именуемый SSE4a. Кроме них, в К10 поддерживаются расширения SSE, SSE2 и SSE3. В архитектуре x86-64 добавлены еще две команды для манипуляций с битами, LZCNT/POPCNT, используемые в криптографических приложениях.

Аналогично микроархитектуре Core, команды SSE MOV в K10 могут работать в конвейере записи для операций с плавающей запятой, и такая команда может выполняться в одном такте вместе с двумя арифметическими операциями SSE [3]. Что касается количества одновременно выполняемых за такт команд, то для целочисленных приложений в Core оно равно четырем против трех в K10. В сочетании с наличием трех целочисленных исполнительных устройств это дает Intel определенные преимущества в производительности.

  • Иерархия кэш-памяти в K10 стала трехуровневой: в каждом ядре — I- и D-кэши L1 (по 64 Кбайт) плюс 512 Кбайт кэша L2 плюс 2 Мбайт (для Opteron 23XX) общего для ядер кэша L3. Кэш L3 является частью интегрированного северного моста и, вообще говоря, работает на частоте, не кратной частоте ядер. D-кэши L1 и L2 являются эксклюзивными и имеют длину строки 64 байта.

Данные в кэш L2 попадают только при вытеснении из кэша L1, а в кэш L3 — при вытеснении из кэша L2, хотя команды в L3 могут попадать из оперативной памяти. Кэши являются наборно-ассоциативными: кэш L1 — двухканальный, L2 — 16-канальный, L3 — 32-канальный [5]. Большее число наборов (каналов) увеличивает эффективность при работе с большим числом ядер.

Интересно, что в серверных процессорах Nehalem также предполагается трехуровневый кэш, причем емкости на уровнях L1 и L2 — вдвое меньше, чем в Barcelona, а кэш L3, очевидно, будет больше, чем в Opteron 23XX. Кэш-память в Nehalem является «инклюзивной» (в кэше старшего уровня содержатся данные кэш-памяти более низких уровней).

Усовершенствованы в К10 и буферы быстрой переадресации TLB. Обеспечена поддержка страниц емкостью 1 Гбайт. I- и D-TLB L1 являются ассоциативными и содержат 32/16 и 48/48 строк для страниц емкостью 4 Кбайт/2 Мбайт соответственно. I- и D-TLB L2 для страниц емкостью 4 Кбайт являются четырехканальными наборно-ассоциативными и имеют по 512 строк. Для страниц емкостью 2 Мбайт D-TLB L2 является двухканальным наборно-ассоциативным и содержит 128 строк. TLB увеличивает производительность при преобразовании виртуальных адресов в физические при работе с большими массивами данных. Кроме того, в TLB обеспечена поддержка «вложенных» таблиц страниц, что повышает производительность гипервизоров, поддерживающих модную ныне виртуализацию серверов.

В два раза — до 32 байт за такт — возросла пропускная способность выборки команд. Блоки предварительной выборки (prefetch) были доработаны, и в ядрах предварительная выборка идет сразу в кэш L1, а не в кэш L2, как в K8. Кроме того, в северном мосту, в контроллере памяти, имеются собственные аппаратные возможности предварительной выборки (для всех ядер) в собственный внутренний буфер емкостью примерно 20-30 строк кэша.

  • Ряд усовершенствований К10 повышает эффективность обработки команд перехода. Вдвое — до 24 строк — была увеличена емкость стека адресов возврата. Это может помочь, например, при рекурсивных вызовах функций, когда в стек упрятывается много аргументов. В строках таблицы предсказания переходов увеличилось число бит истории. Добавлена таблица адресов косвенных переходов емкостью 512 строк.

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

Стадия декодирования была усовершенствована благодаря прямому отображению некоторых новых команд х86 в одну микрооперацию, что ускоряет декодирование. Еще одно усовершенствование — ускорение целочисленного деления по аналогии с Pentium M/Dothan.

  • Одним из важнейших для производительности суперскалярных процессоров является внеочередное спекулятивное выполнение команд. В Core имеются возможности оптимизации выполнения путем переноса команды загрузки регистра ближе к началу кода, до выполнения команд записи — на основании предсказания о независимости команд этой пары друг от друга. В К10 реализована возможность переноса команды загрузки только на основании непосредственной проверки отсутствия такой взаимной зависимости. Это формально сужает возможности переноса, но в К10 имеется сразу три блока генерации адреса — больше, чем в Сore, и возрастает вероятность того, что адреса для соответствующих команд будут вычислены заранее, что может позволить перенести загрузку регистра. Длина очереди команд загрузки/записи в К10 составляет 44 строки.
  • В К10 разрядность физически адресуемой оперативной памяти увеличена до 48 бит, что позволяет адресовать до 256 Тбайт и задуматься об аппаратной реализации ccNUMA-cерверов с большим числом процессоров, подобных SGI Altix на базе Itanium 2.

Контроллер памяти в процессоре может работать как два независимых 64-разрядных контроллера (для нескольких ядер это может оказаться эффективным) или как один 128-разрядный. В контроллере обеспечивается не только поддержка DDR2, но и DDR3. Пиковая пропускная способность памяти контроллера составляет 25,6 Гбайт/с, и, чтобы выбрать ее всю, необходимо применять DDR3 (DDR2/667 МГц дает пиковую пропускную способность в 21,4 Гбайт/с). Это больше, чем в северных мостах MCH, работающих с четырехъядерными Xeon Harpertown для FSB/1333 МГц (20,8 Гбайт/с); лишь для новейшей шины FSB/1,6 ГГц пропускная способность равна 25,6 Гбайт/с. Кроме того, пиковая пропускная способность памяти в серверах на базе Opteron линейно увеличивается с ростом числа процессоров. По данному параметру К10 однозначно впереди. Соответственно, в HPC-приложениях, где пропускная способность памяти особенно важна, процессоры Opteron 23XX обгоняют несколько более высокочастотные четырехъядерные процессоры Xeon по производительности.

Применение DDR2 с К10 оказывается важным преимуществом по сравнению Xeon с FBDIMM c точки зрения энергопотребления, которое у DDR2 на 58% ниже [4]. Cоответственно серверы на базе K10 c большой емкостью памяти оказываются энергетически более эффективны, чем на платформе Xeon/FBDIMM.

Преимуществом FBDIMM над DDR2 с точки зрения пропускной способности памяти является возможность одновременной обработки запросов на чтение/запись в буфер. DDR2 требует переключения с обработки одного типа запросов на другой, на что теряется время. Для борьбы с такими потерями в контроллере памяти К10 реализовано объединение запросов на запись и чтение в группы. Буферизация в FBDIMM, с другой стороны, приводит к повышенным задержкам обращения в память, которые еще и возрастают с числом установленных модулей DIMM. Это дает K10 потенциальные преимущества, в частности, при работе с базами данных*.

Что касается обмена данными в серверах между разными процессорами, и с подсистемой ввода/вывода, то он осуществляется по 16-разрядным каналам HyperTransport. Версия HT 3.0, применяемая в К10**, имеет частоту 2,6 ГГц с пропускной способностью до 20,8 Гбайт/с при дуплексной передаче. Поддерживается также расщепление HT на два 8-разрядных канала [3].

Применение при производстве Opteron 23XX 65-нанометрового техпроцесса c использованием технологии «кремний на изоляторе» (всего процессор содержит 463 млн транзисторов) позволило иметь низкий уровень напряжения, так что максимальное тепловыделение (TDP = 95 Вт) не повысилось по сравнению с двухъядерными Opteron (за исключением пары старших моделей).

На уменьшение энергопотребления направлен целый ряд доработок в технологии PowerNow! и в К10. Управление электропитанием позволяет отключать как крупные блоки К10, так и более мелкие блоки внутри их. Благодаря технологии Dual Dynamic Power Management напряжения на ядра и на интегрированный северный мост подаются независимо. Можно, например, понизить частоту ненагруженных ядер, сохранив высокое напряжение и соответственно максимальную производительность работы северного моста — например, если идет интенсивная работа с памятью.

Производительность

Традиционное сопоставление производительности процессоров базируется на тестах SPECcpu2006. В таблице 1 приведены данные для наиболее распространенных серверов с двумя разъемами для х86-совместимых процессоров. Представлены результаты для старших моделей Opteron 2360, Xeon E5472 (самые быстродействующие из процессоров Intel с TDP меньше 100 Вт) и лучшие нераспараллеленные одноядерные результаты Intel (Xeon X5365).

Производительность отдельных ядер Xeon на этих тестах выше, чем у Opteron, как на целочисленных операциях, так и при работе с плавающей запятой. По данным www.anandtech.com, Xeon E5472 на большинстве тестов впереди Opteron 2360. Однако на некоторых тестах, например, при работе с СУБД mySQL, Opteron оказался быстрее.

Основные преимущества Opteron по производительности связаны с масштабированием пропускной способности памяти и проявляются в конфигурациях серверов с двумя, четырьмя или восемью процессорами. Так, восьмиядерные серверы c Opteron 2360 на тесте SPECjbb2005 достигают показателя 219269 bops, а с Xeon E5472 — 103886 bops (www.specbench.org). В Таблице 1 даны результаты SPECfp_rate2006 и SPECint_rate2006 для восьми процессов на двух процессорах. Видно, что на плавающей запятой Opteron оказывается впереди.

В HPC-приложениях пропускная способность памяти часто оказывается важнее, чем для SPECfp2006, и преимущество Opteron возрастает. Для достижения равной с Opteron производительности Xeon должны иметь тактовую частоту процентов на 20 выше.

В наших измерениях применялся двухпроцессорный сервер на базе Opteron 2350/2 ГГц c набором микросхем nvidia nForce4 (материнская плата Tyan S2932) и память DDR2/667 МГц (с задержками по схеме 5-5-5) емкостью 16 Гбайт. В S2932 нет поддержки средств независимой подачи напряжения, позволяющих северному мосту процессора (включая кэш L3 и контроллер памяти) работать на максимально возможной частоте, не являющейся делителем частоты ядер. К каждому контроллеру памяти было подсоединено по 8 Гбайт оперативной памяти на четырех модулях DIMM.

Производительность этих процессоров сопоставлена, в частности, с полученными нами данными для одноядерных процессоров Opteron 246 с микроархитектурой К8, которые не только имеют ту же тактовую частоту, что и Opteron 2350, но и тот же объем кэш-памяти старшего уровня в расчете на одно процессорное ядро: 1 Мбайт кэша L2 против 512 Кбайт кэша L2 плюс 512 Кбайт кэша L3 (четверть от общей емкости 2 Мбайт) для ядер Opteron 2350. В серверах с Opteron 246, работающих под управлением 64-разрядной ОС OpenSuSE Linux 10.1, использованы материнские платы Supermicro H8DCE и оперативная память DDR/400 МГц емкостью 4 Гбайт, по 2 Гбайт на узел (термином «узел» мы обозначаем многоядерный процессор с интегрированным северным мостом).

Измерения c Opteron 2350 проводились в 64-разрядной среде OpenSuSE 10.3. Был использован широкий спектр тестов, включая приложения молекулярного моделирования (квантовохимические программные комплексы Gaussian-03 [5]); микротесты — Linpack (n=100 и n=1000) и др.; тесты оперативной памяти — как пропускной способности (stream), так и задержек памяти (lmbench); тесты HPC Challenge (в том числе High Performance Linpack) и др.

В качестве инструментальных средств применялись лучшие оптимизирующие компиляторы Fortran-9x (Pathscale v.3.2, PGI v.7.2-2, Intel ifort 10.0, gfortran 4.2.1), библиотеки BLAS и LAPACK (Atlas 3.8.2, AMD acml 4.1.0, Intel MKL 10.0, Goto 1.26), MPICH 1.2.7 и LAM 7.1.4. Gaussian-03 была откомпилирована несколько лет назад с использованием PGI для 64-разрядной платформы AMD x86-64. Для Gaussian-03 вплоть до четырех процессов применялось распараллеливание средствами OpenMP, для восьми процессов — распараллеливание средствами Linda на два процесса, каждый из которых в свою очередь был распараллелен на четыре нити OpenMP.

Полученные данные для Gaussian-03 приведены в таблицах 2 и 3.

Таблица 2. Время расчетов (в секундах) на тесте Gaussian-03

В них использованы тесты для молекул тринитротриаминобензола (test178) и валиномицина (test397). В название теста включен метод расчета (SCF, DFT, MP2, CIS).

Таблица 3. Ускорение при распараллеливании Gaussian-03 на Opteron 2350

Эти данные показывают, что без перекомпиляции приложений ядра Opteron 2350 по производительности, как правило, несколько уступают Opteron 246 (возможно, в том числе, из-за более медленного кэша L3). Наибольшее ухудшение — примерно на треть — имеет место в хорошо локализуемом в кэше методе DFT (при использовании метода FMM ядро Opteron 2350 оказалось медленнее в 1,8 раза, вероятно, из-за активной работы с кэшем L3). Сверхлинейные ускорения в методе MP2 при переходе от четырех к восьми ядрам, очевидно, связаны с NUMA-распределением памяти: при переходе к восьми ядрам подключался второй контроллер памяти во втором узле. Время расчета зависит от распределения ядер процессоров из узлов сервера, что влияет на соблюдение NUMA-политики распределения оперативной памяти. Так, в test178s на четырех ядрах время расчета может при этом измениться в 1,7 раза.

Измеренная задержка D-кэша L1 составила три такта, кэша L2 — 15 тактов (вероятно, дополнительные три такта из них занимает обратная запись строки кэша L1 в кэш L2), что соответствует сведениям AMD [5]. Данные по задержкам кэша L3, задержкам из-за промахов в TLB, и задержкам памяти в литературе отсутствуют. Задержка выборки данных из кэша L3 составляет около 47 тактов, чему может отвечать собственная задержка L3 порядка 24 тактов. В тесте с шагом 16 Кбайт проявляется, вероятно, дополнительная задержка TLB, равная примерно 30 нс.

Измеренная задержка локальной памяти составила около 98 нс. Чтобы устранить эффект предварительной выборки контроллером памяти в процессор, использовался также тест со случайным доступом в память, при этом задержка удаленной памяти оказалась всего на 20% больше, чем локальной памяти. Последний результат говорит о близости к SMP-модели памяти. Для Nehalem сообщалось, что задержка удаленной памяти в полтора раза больше локальной [1].

Характеристики пропускной способности памяти исследованы на тестах stream с распараллеливанием в OpenMP. В таблице 4 представлены данные о влиянии некоторых параметров на пропускную способность.

Таблица 4. Пропускная способность оперативной памяти (Мбайт/с) на нераспараллеленных тестах stream (pathf90)

Видно, что расслоение памяти между узлами — и тем более нарушение локальности NUMA-распределения памяти — ухудшает результаты. Результаты для компилятора pathf90 (на нем обычно достигаются наилучшие результаты для stream) на восьми ядрах (таблица 5) практически воспроизводят полученные AMD (www.cs.virginia.edu/stream/peecee/Bandwidth.html). Относительно плохое масштабирование результатов при переходе от двух к четырем ядрам связано с распределением ядер и оперативной памяти из одного узла; при этом возникают конфликты ядер при доступе к памяти на одном контроллере памяти. При «насильственном» распределении OpenMP-нитей на ядра обоих процессоров мы достигли пропускной способности 14897/14883/15185/15276 Мбайт/с для copy/scale/add/triad соответственно. На восьми нитях конкуренция за доступ в оперативную память неизбежна, поэтому рост пропускной способности при переходе от четырех к восьми нитям невелик.

В таблице 6 приведены данные для микротестов Linpack (n=100).

Таблица 6. Производительность (MFLOPS) ядер Opteron 2350 на Linpack (n=100)

При использовании одинакового двоичного кода, оптимизированного для Operon 2350, Opteron 246 существенно уступает по производительности ядрам Opteron 2350 — на 44% при использовании ifort, на 15% — при применении gfortran. Это обусловлено в первую очередь вдвое более высокой пиковой производительностью каждого ядра Opteron 2350 по сравнению с Opteron 246. ifort традиционно обеспечивает на этом тесте лучшие результаты, однако стоит отметить улучшение оптимизации в gfortran. Последнее согласуется с полученными для других микропроцессоров результатами на тестах Polyhedron.

В таблице 7 представлены результаты измерений производительности на тестах Linpack (n=1000). Они характеризуют производительность соответствующих модулей Lapack.

 Таблица 7. Производительность (MFLOPS) Opteron 2350 на Linpack (n=1000)

Для acml ускорение на одном ядре относительно Opteron 246 составило около 30%. Для Atlas на одной нити Opteron 2350 достигается производительность 4215 MFLOPS.

Современная версия Atlas в процессе тонкой настройки под размер кэша использует двухуровневую модель, и поэтому трехуровневый кэш не распознает. Агрессивная предварительная выборка в D-кэш L1 для умножения матриц (dgemm) оказалась очень эффективной. Удалось достигнуть производительности dgemm (она активно используется, например, в программах квантовой химии) для матриц большой размерности на уровне 6.6 GFLOPS (Atlas 3.9.1) при пиковой производительности 8 GFLOPS. Goto дает производительность на 8% выше.

Настраиваемый параметр Atlas — эффективный размер кэша «второго уровня»— практически не влияет на производительность dgemm, поэтому разделение кэша L3 при параллельном выполнении нескольких таких процессов производительность каждого из них не уменьшает. Для других процессоров влияние этого параметра бывает сильнее, до десятков процентов, поэтому настройку Atlas лучше проводить в многонитевом варианте. Представляется, что с аналогичными целями для компиляторов можно было бы ввести специальный ключ — разрешаемый для использования размер разделяемого ядрами кэша L3.

Распределение памяти в соответствии с NUMA-политикой может осуществляться автоматически ядром Linux, или средствами разработки (которые для этого могут применять, например, библиотеку libnuma), либо «вручную» средствами командной строки при запуске на выполнение (numactl), либо, наконец, самим разработчиком приложения. Библиотека Goto, например, позволяет при инсталляции указать на использование сродства к процессору и NUMA-распределения памяти. Однако данные таблицы 7 свидетельствуют о том, что масштабирование производительности с числом ядер не всегда оказывается удовлетворительным, что связано с указанной проблемой пропускной способности памяти и с организацией эффективного распределения памяти в NUMA-архитектуре.

***

В серверах на базе Opteron 23XX в Linux-cреде может обеспечиваться эффективное масштабирование производительности с числом ядер. Для достижения существенных преимуществ в производительности ядер Opteron 23XX на приложениях с плавающей запятой их необходимо перекомпилировать, а не применять старые коды для одно- или двухъядерных Opteron. Областями преимущественного использования Opteron 23XX по сравнению с четырехъядерными процессорами Xeon 54XX могут быть, в частности, HPC-приложения, требующие большой пропускной способности памяти (в том числе задачи гидро- и аэродинамики, предсказание погоды и др.)

Литература

  1. D. Kanter, Inside Nehalem: Intel’s Future Processor and System. RealWorldTech Technologies, 04.02.2008, www.realworldtech.com.
  2. В.П. Гергель, Теория и практика параллельных вычислений. М.: Интернет-университет информационных технологий, 2007.
  3. Software Optimization Guide for AMD Family 10h Processors. Revision: 3.06. AMD, April 2008.
  4. H. Chevanne, Building Tomorrow Clusters with AMD Multi-Core Processors. Сluster-06, Barcelona, Sept. 25-28, 2006.
  5. Gaussian 03, Revision C.02, M. J. Frisch, G. W. Trucks e.a., Gaussian, Inc., Wallingford CT, 2004.

Процессоры для высокопроизводительных вычислений  http://www.osp.ru/os/2007/09/4566688

64-разрядные микропроцессоры AMD  http://www.osp.ru/os/2002/04/181300

Эволюция микроархитектуры x86-процессоров Intel  http://www.osp.ru/os/2006/08/3584541

Эволюция микроархитектуры x86-процессоров Intel  http://www.osp.ru/os/2006/08/3584541


Таблица 5. Пропускная способность оперативной памяти (Мбайт/с) на тестах stream (с OpenMP) для различных компиляторов