Що означає статичне, динамічне та одинарне динамічне сполучення?


9

Я використовую Intel MKL для BLAS і використовую радник по лінії зв’язку Intel MKL для довідок з параметрами командного рядка.

Радник надає варіанти для статичної, динамічної та єдиної динамічної бібліотеки. Що означають ці терміни?

З цього приводу було чимало публікацій, але всі вони були зосереджені на розробці програмного забезпечення, а не на науково-математичних кодах. ( Цей особливо корисний)

  • Наскільки ці терміни стосуються паралельних обчислень?
  • Чи один "кращий", ніж інший? (Я знаю, що краще потрібно було б визначитись точніше, але я не знаю, як зараз)
  • Що використовується частіше і чому?
  • Що потрібно врахувати програмісту при посиланні?

Як зауваження, якщо ви цього ще не бачили, нові компілятори Intel (я думаю, версії 11 і новіші) містять -mklпрапор, який повинен усунути необхідність використання радника для посилань у більшості випадків.
Езін

@Aesin, мені було цікаво. Це найоптимальніший спосіб зв’язування?
Запит

На жаль, я не знаю - я насправді не робив жодного тестування, і посібник не вникає в деталі щодо того, що він робить, або як він поєднується з іншими параметрами. Він статистично пов'язує MKL, якщо ви вказуєте -staticта динамічно посилаєтесь, якщо цього не робите. Звичайно, це набагато краще з точки зору простоти використання, в будь-якому випадку.
Езін

Відповіді:


14

Терміни статичного зв’язку та динамічного зв'язку не мають прямого відношення до паралельних обчислень, хоча вже досить давно відомо, що динамічне завантаження (на відміну від завантаження статично складеного виконуваного файлу) не дуже масштабується в мережевих файлових системах через велику кількість Навантаження метаданих, викликане динамічним завантажувачем, що шукає шляхи завантаження для цільових бібліотек.

Важко зробити загальні твердження про те, чи статичні чи динамічні бібліотеки кращі в обчисленні з високою продуктивністю. Безумовно, для більшості суперкомп'ютерних застосувань це простіше і надає перевагу статичному зв’язку. Чому це? У поточному поколінні суперкомп'ютерів зазвичай працює лише одна робота на вузол, що сильно знижує будь-які переваги зменшеного споживання пам'яті за рахунок спільних бібліотек. Крім того, наукові обчислювальні коди, як правило, не дуже складні з точки зору мовних особливостей або дизайну програми, і вони рідко використовують мовні функції, які потребують динамічного завантаження (наприклад, модулі плагінів). Динамічні бібліотеки мають додаткові труднощі бути набагато менш портативними в операційних системах, ніж статичні бібліотеки.

Як наслідок всього цього, більшість систем HPC використовують статичну компіляцію, коли вона доступна. Статичні бібліотеки розглядаються як швидші, простіші в установці та обслуговуванні і, як правило, більш надійні. Коди HPC, засновані на Python, є одним з винятків цього, але вони все ще піддаються проблемам продуктивності, пов’язаним з динамічним завантаженням (кілька користувачів на scicomp насправді працюють над цією проблемою зараз!).

Коли ви вибираєте статичне порівняно з динамічним зв’язком, вам слід врахувати, як і де буде розгорнуто ваш код, чи можуть змінитись або переміститися базові бібліотеки та характеристики продуктивності вашої мережевої файлової системи. Ви також повинні оцінити, чи потрібне вам динамічне посилання, або через бібліотечну залежність, або для взаємодії з динамічною мовою сценарію, такою як Python.

Single Dynamic Library - термін, специфічний для Intel. Це стосується упаковки їх динамічних бібліотек в єдину мета-бібліотеку для спрощення процесу зв’язування. Якщо ви будете використовувати динамічні зв'язки з бібліотеками Intel, ця форма, мабуть, є кращою, якщо ви не робите щось складне.


Відмінна відповідь! Ще одне: я розумію, що динамічне пов'язування було б непотрібним, і вибір буде статичним та єдиним динамічним. Ви кажете, що я повинен вибрати останнє, якщо я не роблю щось складне (чого я не є). Отже, я повинен зв’язуватися за допомогою Single Dynamic? [FWiW, я працюю над методами підпространства Крилова]
Запит

Вибачте! Я мав на увазі, що ви повинні використовувати статичні за замовчуванням, але віддавати перевагу одиночному динамічному над динамічним.
Арон Ахмадія

Я зробив деякий бенчмаркінг і виявив: Dynamic : 0:42.92 Static : 0:42.93 Single Dynamic : 0:42.97усереднював понад 1000 значень.
Запит

1
Варто зазначити, що в деяких системах HPC вам доводиться статично зв’язуватися - наприклад, у системах BlueGene / L це так, наприклад, оскільки скорочена ОС на обчислювальних вузлах не підтримує динамічне з'єднання.
Езін

1
Мене трохи бентежить ваше твердження: "У поточному поколінні суперкомп'ютерів зазвичай на одному вузлі працює лише одна робота, що сильно знижує будь-які переваги зменшеного споживання пам'яті за рахунок спільних бібліотек". Ви хотіли сказати, що існує лише один процес на вузол? Я не впевнений, як одна робота на вузол впливає на ситуацію. При статичному з'єднанні кожен процес зберігає повну копію виконуваного файлу, яка може бути значною мірою зростання ядер на процесор. Для динамічного посилання потрібна буде лише одна копія динамічної бібліотеки на спільний простір пам'яті.
andybauer
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.