Яка обчислювальна вартість


26

Одне з найважливіших питань, з яким ми маємо мати справу у молекулярному моделюванні, - це розрахунок залежних від відстані сил. Якщо ми можемо обмежити сили і відстані функції, щоб мати рівні сили відстані відстані , то ми можемо просто обчислити квадрат відстані r 2 = r r і не потрібно турбуватися про r . Якщо є непарні сили, то нам потрібно мати справу з r = rr2=rrr .r=r2

Моє запитання: наскільки дорого обчислюється як реалізовано в бібліотеках загальних мов (C / C ++, Fortran, Python) тощо? Чи справді потрібно багато покращити продуктивність шляхом ручної настройки коду для конкретних архітектур?х

Відповіді:


39

Як доповнення до відповіді Майнера , на мікросхемі sqrtзазвичай є rsqrt, тобто зворотний квадратний корінь, який обчислює . Отже, якщо у вашому коді ви будете використовувати лише1/r(якщо ви працюєте з молекулярною динамікою, ви є), ви можете обчислитибезпосередньо та зберегти собі поділ. Причиною, що розраховується замість,є те, що її ітерація Ньютона не має поділів, а лише додавання та множення.а1/а1/rr = rsqrt(r2)rsqrtsqrt

Як бічне зауваження, підрозділи також обчислюються повторно і майже так само повільно, як і rsqrtв апараті. Якщо ви шукаєте ефективність, вам краще спробувати усунути зайві поділи.

Деякі більш сучасні архітектури, такі як архітектури POWER IBM, не мають rsqrtper-se, але оцінку з точністю до кількох біт, наприклад FRSQRTE . Коли користувач дзвонить rsqrt, це генерує оцінку, а потім одну чи дві (стільки, скільки потрібно) ітерацій алгоритму Ньютона чи Гольдшмідта, використовуючи регулярні множення та додавання. Перевага такого підходу полягає в тому, що етапи ітерації можуть бути конвеєрними та переплетеними з іншими інструкціями, не блокуючи ФПУ (про дуже хороший огляд цієї концепції, хоч і щодо старих архітектур, див . Кандидатську дисертацію Рольфа Стребеля ).

Щодо потенціалів взаємодії, sqrtоперації можна повністю уникнути, використовуючи поліноміальний інтерполянт функції потенціалу, але моя власна робота (реалізована mdcoreв цій галузі) показує, що, принаймні, в архітектурах типу x86, sqrtінструкція досить швидка.

Оновлення

Оскільки ця відповідь, як видається, привертає трохи уваги, я також хотів би звернутися до другої частини вашого питання, тобто чи дійсно варто спробувати покращити / усунути базові операції, такі як sqrt?

У контексті моделювання молекулярної динаміки або будь-якого моделювання на основі частинок із обмеженою взаємодією взаємодії можна багато чого отримати від кращих алгоритмів пошуку сусідів. Якщо ви використовуєте списки комірок або щось подібне, щоб знайти сусідів або створити список Verlet , ви будете обчислювати велику кількість помилкових парних відстаней. У наївному випадку лише 16% пар перевірених частинок фактично опиняться в межах відстані один від одного. Хоча взаємодія для таких пар не обчислюється, доступ до даних про частинки та обчислення хибної попарної відстані несе великі витрати.

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

Я хочу наголосити на тому, що, хоча можна отримати деякі вдосконалення від кращого знання / експлуатації базової апаратної архітектури, можливі також більші вигоди від переосмислення алгоритмів вищого рівня.


6
SSE rsqrtpsі AVX - vrsqrtpsце також оцінки, вони отримують перші 11 - 12 біт правильними, і вам слід уточнити ітерацію Ньютона або дві, якщо ви хочете отримати більшу точність. Це інструкції 5/1 та 7/1 (затримка / зворотна пропускна здатність) щодо Sandy Bridge (див. Таблиці інструкцій Intel або Agner Fog, що можна порівняти з множенням. На противагу цьому повна точність (v)sqrtps(або подвійна точність (v)sqrtpd) займає 10-43 / 10-43 (детальніше див. Таблиці інструкцій).
Джед Браун

@JedBrown: Дякую, що вказали на це! Я забув, що SSE та його розширення забезпечують це також.
Педро

16

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

Те, як воно реалізується в апаратному забезпеченні, може відрізнятися, але це, мабуть, якась ітерація з фіксованою точкою, наприклад, метод Ньютона-Рафсона, який робить певну кількість ітерацій, поки не буде обчислена необхідна кількість цифр. Ітеративні методи апаратних засобів, як правило, набагато повільніше, ніж інші операції, оскільки кілька циклів повинні бути завершені, перш ніж результат буде готовий.

Існують також деякі інструкції з потокової передачі SIMD, які можна використовувати в регістрах XMM для швидких векторних обчислень, знайдених тут . Ці регістри досить малі, але якщо у вас є відома кількість координат (скажімо, тривимірна декартова система координат), вони можуть бути дещо швидшими.

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

Це повинно бути досить простим для порівняння різних мов: Просто запишіть у файл довгу серію випадкових чисел, завантажте його за допомогою різних мов, а потім введіть квадратні корені.


0

Можливі підвищення продуктивності, але спочатку слід визначити, що обчислення зворотної функції sqrt - це шийка пляшки (а не, скажімо, завантаження позицій та економія сил).

Проект GROMACS MD виникла з ідеї використовувати деталі формату IEEE з плаваючою точкою для нанесення схеми ітерації Ньютона-Рафсона для обчислення прийнятного наближення до зворотного прямокутного кореня (див. Додаток B.3 http: / /www.gromacs.org/Documentation/Manual ), але немає процесорів HPC, які використовуються там, де GROMACS все ще використовує цю ідею.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.