Какова основная структура производительности научного кода?

11

Рассмотрим два компьютера с разными аппаратными и программными конфигурациями. При запуске одного и того же последовательного кода Навье-Стокса на каждой платформе требуется x и y время для выполнения одной итерации для компьютеров 1 и 2 соответственно. В этом случае - это разница во времени итерации между компьютером 1 и компьютером 2.Δзнак равноИкс-Y

Что может повлиять на величину ? Один очевидный кандидат - это процессор, мой главный вопрос: есть ли другие факторы, которые могут влиять на в том же порядке, что и аппаратная разница между процессорами?ΔΔΔ

Изопикнальное колебание
источник
4
Конечно, ваш - это всего лишь один образец. Вам также следует выяснить, как Δ зависит от размера и структуры проблемы. Во-вторых, я бы предложил профилировать код, пытаясь разделить x и y на сумму разных вкладов и анализируя производительность разных частей кода в отношении конфигураций hw и sw. ΔΔИксY
Стефано М
4
CACHE LINE MISSES . Это первое, что нужно учитывать. Память является узким местом для многих алгоритмов.
Охотник на оленей

Ответы:

13

Этот список еще далеко не полный, но, надеюсь, его размер даст подсказку о масштабе возможных факторов. Я предполагаю, что вы компилируете код из исходного кода на выбранной вами платформе.

Программного обеспечения

  • Стандартная производительность библиотеки
  • Лин. Alg. Производительность библиотеки (если программное обеспечение ссылается на внешние библиотеки)
  • Выбор компилятора
  • Оптимизация компилятора
  • Флаги компилятора
  • Фоновые процессы (могут значительно отличаться, если ОС разные)

аппаратные средства

ЦПУ

  • Тактовая частота
  • Архитектура (одна и та же инструкция может занимать разное количество циклов на разных архитектурах)
  • Размеры кэша
  • Латентность кэша
  • Возможность SIMD (одна инструкция, несколько данных)

объем памяти

  • Количество каналов
  • скорость

жесткий диск

  • Скорость чтения / записи (в основном важна только для записи результатов, поэтому это зависит от того, как часто вы записываете выходные данные в файл для решателя NS, но может быть важно для других программ, выполняющих такие операции, как обработка изображений)

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

Годрик Провидец
источник
Я бы добавил к процессору как количество ядер, так и его возможности SIMD.
Педро
@Pedro Я оставил ядра выключенными, так как вопрос сказал последовательный решатель, но я добавлю SIMD. Спасибо.
Годрик Провидец
1
@GodricSeer Я скомпилировал на одном компьютере, а затем запустил его. Затем, используя тот же скомпилированный исполняемый файл, я запустил его на второй машине. Из вашего объяснения кажется, что было бы лучше перекомпилировать из источника на втором компьютере. Это тот случай?
Изопикнальное колебание
1
@IsopycnalOscillation При компиляции на / для конкретной машины вы можете использовать опцию gcc / gfortran -march=nativeили опцию icc / ifort, -xHOSTкоторая будет применять оптимизации, специфичные для базовой архитектуры.
Педро
1
Ключевым моментом здесь является то, что производительность компьютера не является одномерной величиной. Относительный баланс всех факторов, которые Годрик перечислил выше, может сильно различаться даже для компьютеров с процессорными чипами одного и того же производителя (например, Intel). В результате разные тесты производительности могут показывать очень разные коэффициенты производительности для двух процессоров. На практике большинству современных машин не хватает пропускной способности памяти для поддержки научных вычислительных нагрузок, и это часто является узким местом.
Брайан Борчерс
2

Икс/YИкс-Y

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

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

Эта ссылка подробно объясняет неортодоксальный метод, который я использую.

Майк Данлавей
источник