#performance #reference #hpc #parallel-processing
#Производительность #ссылка #hpc #параллельная обработка
Вопрос:
Существует несколько способов повышения производительности приложений HPC. Одним из методов является точная настройка приложения на основе аппаратной архитектуры. Такого рода тонкая настройка в основном выполняется на многоядерной архитектуре. Чтобы использовать этот метод, нужно действительно понимать базовую аппаратную архитектуру, такую как память, количество сокетов, количество ядер на сокет, кэш L1 / L2, GFlops и т.д…
Хотя эти технические термины кажутся знакомыми, у меня все еще нет четкого понимания того, что именно это означает с точки зрения производительности приложения.
Кто-нибудь может предложить хорошее место / книгу, из которой я могу понять аппаратную архитектуру с точки зрения производительности.
Ответ №1:
Очень важно настроить код на целевую аппаратную архитектуру. Однако, если у вас нет большого количества времени и ресурсов, это невозможно сделать для широкого спектра доступных систем.
Оптимизация выполняется в соответствии с правилом 80-20. Вы получаете 80% выгоды при 20% затрачиваемых усилий. Помимо этого, ваша отдача начнет уменьшаться.
Вот процесс, которому я следую: 1) Найдите лучший компилятор для вашей целевой архитектуры. Иногда GNU может быть лучшим компилятором для определенной платформы, не удивляйтесь. 2) Прочитайте раздел «Оптимизация кода» для компилятора. 3) Определите правильные флаги для генерации наилучшего кода для целевой платформы. Однако убедитесь, что вы проверяете результаты кода при каждом уровне оптимизации, который вы пытаетесь оптимизировать. Более высокие уровни оптимизации повлияют на корректность кода. 4) Убедитесь, что все необходимые библиотеки оптимизированы для этой системы. Например, математические библиотеки, библиотеки BLAS и т.д. 5) Обратите особое внимание на аппаратные характеристики конкретной платформы, такие как SSE (SIMD), количество ядер или ускорителей. Возможно, вам потребуется изменить свой код или предоставить подсказки компилятору, чтобы лучше оптимизировать код для этих функций.
Вам придется делать это для каждой целевой платформы. К этому времени вы должны увидеть максимальную выгоду при минимальных усилиях.
Если вам нужно повысить производительность, почти всегда требуется переписать код, чтобы убедиться, что аппаратные возможности используются в полной мере.
Нет, для этого нет книг. Наиболее близким является «руководство по оптимизации», обычно предоставляемое бесплатно поставщиком (IBM redbooks, Intel, AMD, Cray).
Пример: support.amd.com/us/Processor_TechDocs/25112.PDF http://www.intel.com/products/processor/manuals / http://www.ibm.com/developerworks/wikis/download/attachments/137167333/Power6_optimization.pdf?version=1
Это наиболее подходящие ресурсы для этих платформ. Вы должны стремиться найти такие ресурсы для вашей целевой платформы.