Математические приложения FFTW и GNU Octave в качестве теста процессоров и ПК

Эта статья является второй в цикле, посвященном различным реальным приложениям, которые могут использоваться для тестирования процессоров, компьютеров, ноутбуков и рабочих станций и которые в дальнейшем будут положены в основу нового тестового пакета iXBT Application Benchmark 2017. Напомним, что в первой статье данного цикла мы рассматривали два специализированных приложения LAMMPS и NAMD, которые используются для решения задач молекулярной динамики. В этой статье мы уделим внимание специализированным математическим пакетам FFTW и GNU Octave. Данные приложения, как и LAMMPS и NAMD, входят в состав известного специализированного тестового пакета SPECwpc 2.0. Более того, сами расчетные задачи (workload) и команды запуска программ с соответствующими параметрами мы позаимствовали именно из пакета SPECwpc 2.0.

FFTW 3.3.5

Пакет FFTW (Fastest Fourier Transform in the West) используется для реализации такой математической операции, как быстрое преобразование Фурье (Fast Fourier Transform, FFT). Данный пакет распространяется свободно, а исходный код может быть скомпилирован под различные операционные системы. С сайта можно скачать скомпилированные библиотеки для 64-битной версии Windows. Для тестирования мы используем версию FFTW 3.3.5 (файл fftw-3.3.5-dll64.zip).

Пакет FFTW 3.3.5 не требует инсталляции, для простоты можно разархивировать файл fftw-3.3.5-dll64.zip в папку C:\FFTW. В этой папке будет содержаться файл bench.exe, который запускается из командной строки. Этот файл имеет огромное количество параметров и позволяет измерять скорость выполнения преобразования Фурье. Частичное описание параметров приводится в файле README-bench, который также расположен в папке FFTW.

При тестировании мы используем следующую команду:

bench.exe -onthreads= -v2 -y ocf33554432 -s ocf33554432

В данной команде параметр -onthreads= определяет количество ядер процессора для многопоточного режима работы теста. Параметр ocf33554432 определяет сам тип преобразования Фурье, то есть его размер (33554432), а также то, что это прямое комплексное преобразование Фурье по вычислительному алгоритму out-of-place. Отметим, что размер преобразования (33554432) должен быть степенью числа 2. Параметр -s указывает, что необходимо измерить скорость быстрого преобразования Фурье. Параметр -y — что необходимо провести проверку выполненного преобразования (ocf33554432).

Время выполнения данного теста зависит от размера преобразования Фурье, и мы подбирали размер из тех соображений, чтобы на среднем по производительности процессоре Intel Core i5-6600K тест длился не более пяти минут. Результатом теста является время выполнения указанного преобразования Фурье.

GNU Octave 4.0.3

GNU Octave — это свободно распространяемая среда программирования для широкого спектра математических вычислений. В GNU Octave используется язык программирования высокого уровня, совместимый с MatLab.

GNU Octave имеет интерфейс командной строки и графический интерфейс (GUI). Имеются версии под различные операционные системы, в том числе и под Windows.

Для тестирования мы используем версию GNU Octave 4.0.3 от 02.07.2016, которую можно скачать с сайта разработчика.

Среда GNU Octave поддерживает работу со скрипт-файлами (<имя_скрипта.m>), а для запуска скрипта используется команда:

octave-cli-4.0.3.exe <имя_скрипта.m>

(Файл octave-cli-4.0.3.exe расположен в папке C:\Octave\Octave-4.0.3\bin\ при установке пакета по умолчанию.)

Для тестирования мы используем скриптовый файл, в котором реализуются операции с циклами, вычисление интегралов, быстрое преобразование Фурье и операции с матрицами. Мы не писали этот скрипт «с нуля», а взяли его из пакета SPECwpc 2.0, в который входит тест на основе GNU Octave. Этот скрипт называется obench.m. Результатом теста является время выполнения скрипта.

Тестовый стенд и методика тестирования

Для тестирования с использованием приложений FFTW и GNU Octave мы собрали стенд следующей конфигурации:

  • Процессор: Intel Core i7-6950X (Broadwell-E);
  • Системная плата: Asus Rampage V Edition 10 (Intel X99);
  • Память: 4×4 ГБ DDR4-2400 (Kingston HyperX Predator HX424C12PBK4/16);
  • Видеокарта: Nvidia Quadro 600;
  • Накопитель: SSD Seagate ST480FN0021 (480 ГБ).

В ходе тестирования замерялось время выполнения тестовых задач.

Рассматривалась зависимость результатов тестирования от количества используемых ядер процессора, от частоты ядер процессора и от частоты памяти.

Зависимость результатов от количества ядер процессора

Количество используемых в ходе тестирования ядер процессора Intel Core i7-6950X регулировалось через настройки UEFI BIOS платы Asus Rampage V Edition 10. Напомним, что процессор Intel Core i7-6950X является 10-ядерным, но поддерживает технологию Hyper-Threading, поэтому операционной системой и приложениями он видится как 20-ядерный (имеет 20 логических ядер).

Мы не отключали технологию Hyper-Threading и меняли лишь количество физических ядер процессор от 1 до 10. В дальнейшем мы будем говорить о логических ядрах процессора, количество которых менялось от 2 до 20 с шагом 2.

Частота работы всех ядер процессора фиксировалась и составляла 4,0 ГГц.

Результаты тестирования следующие:

Как видим, результаты получились очень странные. Интерпретация результатов для пакета GNU Octave достаточно проста. В этом пакете скорость выполнения тестовой задачи практически не зависит от числа ядер процессора, то есть в варианте процессора Intel Core i7-6950X даже двух логических ядер вполне достаточно для выполнения тестовой задачи. При увеличении числа доступных ядер процессора задача распараллеливается, однако доля загрузки каждого ядра уменьшается пропорционально их количеству. В результате скорость выполнения тестовой задачи не меняется при увеличении числа ядер процессора.

А вот с приложением FFTW все очень странно и нелогично. При 6, 12 и 14 ядрах (логических) время выполнения тестовой задачи становится аномально большим. В остальных случаях время выполнения тестовой задачи примерно одинаковое. Результат довольно странный, однако он многократно перепроверялся.

Если посмотреть, какова загрузка процессора во время выполнения теста, то ситуация такова. Во-первых, задача распараллеливается на все ядра процессора. Во-вторых, в какие-то промежутки времени загрузка ядер процессора оказывается низкой, а в какие-то промежутки — высокой. Причем такое поведение наблюдается при любом числе ядер. И почему при определенном количестве ядер процессора время выполнения теста становится аномально большим — непонятно.

Мы провели дополнительное исследование данного странного поведения теста. Для этого мы отключили у процессора технологию Hyper-Threading и повторили тестирование в приложении FFTW, меняя количество физических ядер процессора от 1 до 10. Результаты тестирования следующие:

При отключенной технологии Hyper-Threading результат получился еще более нелогичным. При 3, 5, 6, 7 и 9 ядрах время выполнения теста было большим, а при 1, 2, 4, 8 и 10 ядрах оно оказалось небольшим. То есть получается, что эффективность распараллеливания задачи зависит от количества ядер процессора, но вовсе не в том смысле, что большее количество ядер позволяет улучшить результат. При каком-то количестве ядер задача распараллеливается хорошо, а при каком-то — плохо.

Впрочем, у нас еще оставались сомнения в правильности наших выводов, поскольку в данном случае речь шла не о реальном двух-, четырех-, шести- и так далее ядерном процессоре, а об искусственном блокировании ядер через BIOS материнской платы. Мы решили повторить тест с другим процессором — шестиядерным (12 логических ядер с учетом Hyper-Threading) Intel Core i7-5820K. Как мы видели, при 6 физических или 12 логических ядрах процессора время выполнения теста становится аномально высоким. И на процессоре Intel Core i7-5820K этот результат был подтвержден. Процессор работал на частоте 3,6 ГГц. При всех активированных ядрах с технологией Hyper-Threading (12 ядер) время выполнения тестовой задачи получается аномально большим: 1886 с. Если последовательно отключать ядра, то при 10, 8, 4 и 2 ядрах время выполнения теста составляет 200—400 с, а при 6 ядрах — 1235 с.

Как видим, на процессоре Intel Core i7-5820K получается такой же странный результат, как и на процессоре Intel Core i7-6950X.

Несмотря на такую странную зависимость результатов теста FFTW от числа ядер процессора, мы решили оставить его в пакете приложений, которые будут использоваться в бенчмарке iXBT Application Benchmark 2017. Это приложение наглядно демонстрирует, что не всегда много ядер — это хорошо. Иногда бывает и по-другому.

Возможно, в окончательном варианте мы уменьшим размер самого преобразования Фурье, дабы исключить варианты, когда такой тест длится более 30 минут.

Зависимость результатов от частоты процессора

Теперь рассмотрим, как результаты тестирования в приложениях FFTW и GNU Octave зависят от частоты процессора.

Частота ядер процессора Intel Core i7-6950X менялась в настройках UEFI BIOS платы Asus Rampage V Edition 10 путем изменения коэффициента умножения. Частота работы всех ядер фиксировалась (то есть режим Turbo Boost отключался). Использовались все ядра процессора (10 физических/20 логических). Частота менялась от 3,0 ГГц до 4,2 ГГц с шагом 200 МГц. Результаты тестирования следующие:

Как видно по результатам тестирования, и в пакете FFTW, и в пакете GNU Octave время выполнения теста зависит от частоты процессора. В пакете FFTW при увеличении частоты процессора от 3 до 4,2 ГГц (увеличение на 40%) время выполнения теста уменьшается на 21%. В пакете GNU Octave аналогичное увеличение частоты процессора приводит к уменьшению времени выполнения тестовых задач на 24%.

Таким образом, зависимость результатов тестов FFTW и GNU Octave от частоты процессора вполне типичная. Тестовая задача в пакете GNU Octave чуть лучше масштабируется по частоте процессора, а задача в пакете FFTW — чуть хуже.

Зависимость результатов от частоты памяти

Теперь рассмотрим зависимость скорости выполнения тестовых задач от частоты работы памяти. Память DDR4 работала в четырехканальном режиме (по одному модулю на канал), а частота памяти менялась в настройках UEFI BIOS в диапазоне от 1600 МГц до 2800 МГц c шагом в 200 МГц. Тайминги памяти фиксировались и не менялись при изменении частоты. Все ядра процессора работали на частоте 4,0 ГГц.

Результаты тестирования следующие:

Как видим, скорость выполнения тестовых задач в пакетах GNU Octave и FFTW никак не зависит от частоты работы памяти. По крайней мере, в четырехканальном режиме работы пропускной способности памяти DDR4 вполне достаточно даже на частоте 1600 МГц, и дальнейшее увеличение частоты памяти не позволяет ускорить выполнение тестовых задач.

Это типичный для большинства приложений результат. Приложения, скорость работы которых зависит от частоты памяти — это, скорее, исключение из правил.

Заключение

Итак, во второй статье нашего нового цикла мы рассмотрели два теста на основе специализированных математических приложений FFTW и GNU Octave. На примере 10-ядерного процессора Intel Core i7-6950X было показано, что тестовые задачи в этих пакетах распараллеливаются на все ядра процессора, однако не могут загрузить их на 100%. Результат теста в приложении GNU Octave практически не зависит от числа ядер процессора, а результат теста в приложении FFTW, наоборот, сильно зависит от числа ядер процессора, однако зависимость эта очень странная. При некотором числе ядер (14, 12 и 6) время выполнения тестовой задачи становится аномально большим, а во всех остальных случаях время выполнения тестовой задачи от числа ядер зависит слабо.

Кроме того, было показано, что скорость выполнения тестовых задач в пакетах FFTW и GNU Octave линейным образом зависит от частоты ядер процессора (при изменении частоты в диапазоне от 3 до 4,2 ГГц).

Наконец, было показано, что время выполнения тестовых задач в приложениях FFTW и GNU Octave никак не зависит от частоты памяти DDR4 (в четырехканальном режиме и в диапазоне от 1600 до 2400 МГц).

Есть еще одно замечание, которое можно сделать относительно приложений FFTW и GNU Octave при их использовании для тестирования. Пакет GNU Octave имеет плохую повторяемость результатов и для получения результата с низкой погрешностью желательно делать пять прогонов теста. Приложение FFTW дает более стабильные результаты, но и для этого приложения необходимо как минимум три прогона теста.

В следующей статье данного цикла мы рассмотрим три приложения, которые используются для рендеринга 3D-сцен: POV-Ray 3.7, LuxRender 1.6 и Вlender 2.77a.




7 сентября 2016 Г.

FFTW GNU Octave

FFTW GNU Octave

, , , , iXBT Application Benchmark 2017. , LAMMPS NAMD, . FFTW GNU Octave. , LAMMPS NAMD, SPECwpc 2.0. , (workload) SPECwpc 2.0.

FFTW 3.3.5

FFTW (Fastest Fourier Transform in the West) , (Fast Fourier Transform, FFT). , . 64- Windows. FFTW 3.3.5 ( fftw-3.3.5-dll64.zip).

FFTW 3.3.5 , fftw-3.3.5-dll64.zip C:\FFTW. bench.exe, . . README-bench, FFTW.

:

bench.exe -onthreads=<n> -v2 -y ocf33554432 -s ocf33554432

-onthreads=<n> . ocf33554432 , (33554432), , out-of-place. , (33554432) 2. -s , . -y — (ocf33554432).

, , Intel Core i5-6600K . .

GNU Octave 4.0.3

GNU Octave — . GNU Octave , MatLab.

GNU Octave (GUI). , Windows.

GNU Octave 4.0.3 02.07.2016, .

GNU Octave - (<_.m>), :

octave-cli-4.0.3.exe <_.m>

( octave-cli-4.0.3.exe C:\Octave\Octave-4.0.3\bin\ .)

, , , . « », SPECwpc 2.0, GNU Octave. obench.m. .

FFTW GNU Octave :

  • : Intel Core i7-6950X (Broadwell-E);
  • : Asus Rampage V Edition 10 (Intel X99);
  • : 4×4 DDR4-2400 (Kingston HyperX Predator HX424C12PBK4/16);
  • : Nvidia Quadro 600;
  • : SSD Seagate ST480FN0021 (480 ).

.

, .

Intel Core i7-6950X UEFI BIOS Asus Rampage V Edition 10. , Intel Core i7-6950X 10-, Hyper-Threading, 20- ( 20 ).

Hyper-Threading 1 10. , 2 20 2.

4,0 .

:

, . GNU Octave . , Intel Core i7-6950X . , . .

FFTW . 6, 12 14 () . . , .

, , . -, . -, - , - — . . — .

. Hyper-Threading FFTW, 1 10. :

Hyper-Threading . 3, 5, 6, 7 9 , 1, 2, 4, 8 10 . , , , . - , - — .

, , -, -, - , BIOS . — (12 Hyper-Threading) Intel Core i7-5820K. , 6 12 . Intel Core i7-5820K . 3,6 . Hyper-Threading (12 ) : 1886 . , 10, 8, 4 2 200—400 , 6 — 1235 .

, Intel Core i7-5820K , Intel Core i7-6950X.

FFTW , , iXBT Application Benchmark 2017. , — . -.

, , , 30 .

, FFTW GNU Octave .

Intel Core i7-6950X UEFI BIOS Asus Rampage V Edition 10 . ( Turbo Boost ). (10 /20 ). 3,0 4,2 200 . :

, FFTW, GNU Octave . FFTW 3 4,2 ( 40%) 21%. GNU Octave 24%.

, FFTW GNU Octave . GNU Octave , FFTW — .

. DDR4 ( ), UEFI BIOS 1600 2800 c 200 . . 4,0 .

:

, GNU Octave FFTW . , DDR4 1600 , .

. , — , , .

, FFTW GNU Octave. 10- Intel Core i7-6950X , , 100%. GNU Octave , FFTW, , , . (14, 12 6) , .

, , FFTW GNU Octave ( 3 4,2 ).

, , FFTW GNU Octave DDR4 ( 1600 2400 ).

, FFTW GNU Octave . GNU Octave . FFTW , .

, 3D-: POV-Ray 3.7, LuxRender 1.6 lender 2.77a.