Я использую Intel MKL для BLAS и использую Intel MKL Link Line Advisor для помощи с параметрами командной строки.
Советник предоставляет опции для Статической, Динамической и Единой Динамической Библиотеки. Что означают эти термины?
На SO было много сообщений об этом, но все они были сосредоточены на разработке программного обеспечения, а не научных / математических кодов. ( Этот был особенно полезен)
- Как эти термины относятся к параллельным вычислениям?
- Один "лучше", чем другой? (Я знаю, что лучше бы определить более точно, но я не знаю, как на данный момент)
- Что используется чаще и почему?
- Что нужно учитывать программисту при компоновке?
-mkl
флаг, который должен устранить необходимость использовать советник по линии связи в большинстве случаев.-static
и динамически связывает его, если вы этого не делаете. В любом случае, это намного лучше с точки зрения простоты использования.Ответы:
Термины статическое связывание и динамическое связывание не имеют прямого отношения к параллельным вычислениям, хотя уже довольно давно известно, что динамическая загрузка (в отличие от загрузки статически скомпилированного исполняемого файла) плохо масштабируется в сетевых файловых системах из-за большой нагрузки загрузка метаданных, вызванная динамическим загрузчиком, ищущим пути загрузки для целевых библиотек.
Трудно сделать общие заявления о том, лучше ли статические или динамические библиотеки в высокопроизводительных вычислениях. Конечно, для большинства суперкомпьютерных приложений проще и предпочтительнее статически связывать. Почему это? В суперкомпьютерах текущего поколения обычно выполняется только одно задание на узел, что существенно снижает любые выгоды от уменьшения потребления памяти благодаря общим библиотекам. Кроме того, научные вычислительные коды, как правило, не являются слишком сложными с точки зрения языковых функций или дизайна программы, и они редко используют языковые функции, которые требуют динамической загрузки (например, модули плагинов). Динамические библиотеки имеют дополнительную трудность, поскольку они гораздо менее переносимы между операционными системами, чем статические библиотеки.
Как следствие всего этого, большинство систем HPC используют статическую компиляцию, когда она доступна. Статические библиотеки рассматриваются как более быстрые, простые в установке и обслуживании и, как правило, более надежные. Коды HPC, основанные на Python, являются одним из исключений, но они все еще подвержены проблемам с производительностью, связанным с динамической загрузкой (несколько пользователей scicomp фактически работают над этой проблемой прямо сейчас!).
Когда вы выбираете статическое или динамическое связывание, вам необходимо подумать о том, как и где будет развернут ваш код, могут ли базовые библиотеки измениться или переместиться, а также характеристики производительности вашей сетевой файловой системы. Вы также должны оценить, нужно ли вам динамическое связывание, либо через библиотечную зависимость, либо для взаимодействия с динамическим языком сценариев, таким как Python.
Единая динамическая библиотека - это термин, специфичный для Intel. Это относится к упаковке их динамических библиотек в единую метабиблиотеку для упрощения процесса компоновки. Если вы будете использовать динамическое связывание с библиотеками Intel, эта форма, вероятно, предпочтительнее, если вы не делаете что-то сложное.
источник
Dynamic : 0:42.92
Static : 0:42.93
Single Dynamic : 0:42.97
усреднил более 1000 значений.