OpenWay|POSIX-saga|FreeBSD etc.|All Linux|Apps|POSIX-live|SiteMap
Пользовательские приложения
(C) Указанные авторы, 2004, отныне и вовек
Links|Shell|X etc.|Text|Web|Test|Hard

Комплексный тест методов оптимизации численных расчетов в среде GNU/Linux

Юрий Юревич

  1. Введение
  2. Условия эксперимента
    1. Платформа
    2. Методика измерения
  3. Результаты
    1. Производительность базовой конфигурации
    2. Фактор №1: дистрибутив
    3. Фактор №2: ядро
    4. Фактор №3: копмилятор
    5. Производительность оптимальной конфигурации
  4. Выводы

Введение

Численные научные расчеты занимают много процессорного времени, поэтому важно использовать возможности компьютера по-максимуму. И оптимизация под конкретный процессор зачастую способна серьезно снизить время расчета. Небольшой обзор используемых инструментов у знакомых мне людей, занимающихся численными расчетами, показал два подхода к этой проблеме:
  1. Использование проприеритарных инструментов (icc, compaq fortran), дающих очень высокую степень оптимизации под конкретную модель процессора.
  2. Взамен "академического" bcc:
    1. Использование свободных инструментов (gcc, g77) с установками по умолчанию;
    2. Использование проприеритарных инструментов (vc++) с установками по умолчанию.

Наиболее верный (на мой взгляд) вариант — 2.2; однако по производительности он сильно уступает варианту 1.

Данный эксперимент посвящен проблеме оптимизации численных расчетов используя исключительно свободные инструменты и свободное окружение.

Условия эксперимента

Платформа

Железная часть:

Программная часть:

В ходе теста планируется сравнить влияние на производительность численного расчета следующих факторов:

  1. Окружение (Woody или Sarge при прочих равных);
  2. Ядро (2.4 или 2.6; архитектура i386 или k7);
  3. Компилятор (gcc-2.x или gcc-3.x; флаги оптимизации).

Методика измерения

Измерения производятся одним синтетическим тестом и четырьмя реальными приложениями:

Scimark2 дает для анализа следующие параметры (единицы измерения — mflops):

Для приближения к реальным условиям, scimark2 используется с параметром -large.

Производительность реальных приложений измеряется в обратных секундах: скомпилированная программа запускается через вызов time и в качестве показателя берется real time.

Относительная производительность каждой вариации измеряется в процентах. За сто процентов берется следующая (базовая) конфигурация:

В качестве базовой намеренно бралась уже оптимизированная конфигурация, для выяснения эффективных методов более глубокой оптимизации.

Каждый из тестов для каждой вариации повторяется три раза, затем вычисляется среднее значение и погрешность измерения.

Для определения итоговой значимости вариации каждого фактора определяется среднее с учетом веса каждого теста. Используются следующие веса для тестов:

Результаты

Производительность базовой конфигурации

За точку отсчета в 100% для каждого теста взяты следующие показатели:

# Тип теста Тест Показатель Погрешность Относительная погрешность
1 real 3D 756.75 с 0.66 с 0.09%
2 FI 417.56 с 0.39 с 0.09%
3 GL 454.16 с 0.27 с 0.06%
4 PO 1372.13 с 0.04 с 0.003%
5 synthetic FFT 21.31 mflops 0.13 mflops 0.64%
6 LU 162.98 mflops 0.04 mflops 0.03%
7 MC 51.84 mflops 0.03 mflops 0.06%
8 SM 127.02 mflops 0.03 mflops 0.02%
9 SOR 323.23 mflops 0.19 mflops 0.06%

Фактор №1: дистрибутив

На графике изображен относительный прирост производительности при смене дистрибутива с Woody на Sarge


Средний прирост (с учетом веса каждого теста): (9.79 ± 1.44)%

Т.е. в большинстве случаев при смене дистрибутива с Woody на Sarge ожидается прирост производительности численных расчетов порядка 10% при прочих равных.

Фактор №2: ядро

На графике изображен относительный прирост производительности (в процентах от производительности базовой системы) при смене ядра 2.4.26-i386 на вариационное ядро.


Средний прирост (с учетом веса каждого теста):


Т.о. в большинстве случаев есть смысл менять ядро с 2.4.x на 2.6.x; при этом ожидаемый прирост будет в пределах 1-2%. А вот сборка ядра под k7-архитектуру практически ничего не дает: почти все тесты показали результаты в пределах погрешности измерений.

Фактор №3: копмилятор

На графике изображен относительный прирост производительности (в процентах от производительности базовой системы) при различных опциях сборки тестов.


Средний прирост (с учетом веса каждого теста):


По данному фактору можно сказать следующее: для большинства программ оптимальным будет использование сборки под athlon; дальнейшая оптимизация дает либо такой же (athlon-xp), либо худший результат (athlon-tbird).

Производительность оптимальной конфигурации

Ниже на графике представлен прирост производительности (в процентах от производительности базовой системы) при оптимальной конфигурации. Оптимальная не в смысле "самая быстрая для каждого из тестов", а в смысле "самая быстрая для всех тестов суммарно".


Средний прирост (с учетом веса каждого теста): (67.77 ± 1.27)%

Показатели тестов оптимальной конфигурации:

# Тип теста Тест Производительность
Базовая конфигурация Оптимальная конфигурация
1 real 3D 756.75 ± 0.66 с 699.47 ± 4.57 с
2 FI 417.56 ± 0.39 с 130.65 ± 0.23 с
3 GL 454.16 ± 0.27 с 280.53 ± 0.31 с
4 PO 1372.13 ± 0.04 с 564.40 ± 0.02 с
5 synthetic FFT 21.31 ± 0.13 mflops 22.91 ± 0.03 mflops
6 LU 162.98 ± 0.04 mflops 174.21 ± 0.02 mflops
7 MC 51.84 ± 0.03 mflops 107.37 ± 0.02 mflops
8 SM 127.02 ± 0.03 mflops 136.82 ± 0.18 mflops
9 SOR 323.23 ± 0.19 mflops 375.80 ± 0.21 mflops