Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
розділ 3(рамки, нумерація).docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
366.13 Кб
Скачать

3.4. Реалізація алгоритму sph на архітектурі Microsoft xna

При реалізації методу згладжених частинок на архітектурі Microsoft XNA для досягнення високої продуктивності потрібно враховувати особливості архітектури графічного процесора (Graphics Processing Unit, GPU).

Розглянемо основні етапи обчислень:

1. Хешування позицій частинок;

2. Формування масиву сусідів для кожної частинки;

3. Обчислення сил, діючих на частинки;

4. Обробка граничних умов.

Хешування позицій частинок

Метод згладжених часток передбачає обчислення взаємодії часток, які знаходяться ближче ніж на відстані одна від одної, тобто сусідні частинки. Щоб визначити множину сусідів частинки , можна перебирати всі частинки і визначати відстань між усіма частинками. Очевидно, що трудомісткість такого завдання дорівнює

де – кількість частинок.

З урахуванням того, що ці відстані будуть змінюватися на кожному кроці моделювання, визначення сусідів буде «вузьким місцем» обчислень.

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

де – середня кількість частинок в одній комірці,

– розмірність простору.

Значення хеш-функції позицій частинок обчислюється паралельно для кожної частки і є результатом обчислення виразів:

 

де

– одна з просторових координат ( , або ),

– позиція -ї частинки,

– мінімально можливі координати частинки,

– розмір комірки,

– цілочисельний вектор, що містить розміри хеш-таблиці по трьох осях, причому кожен його компонент  дорівнює деякому ступеню 2.

 

Формування масиву сусідів для кожної частки

Частинки, які мають загальне значення хеш-функції , групуються послідовно. Також формуються масиви, що містять для кожної комірки кількість частинок та адресу в новому масиві частинок, за якою знаходиться перша частинка з заданим значенням . Ці дані можна використовувати для перебору сусідів у кожному ядрі, але в цьому випадку доведеться для кожного сусіда перевіряти відстань до вихідної частинки. Щоб уникнути зайвих обчислень і звернень до пам'яті, сусіди для кожної частки розраховуються на початку кожного кроку моделювання після формування масивів значень хеш-функції, на цьому ж етапі перевіряється відстань до частинки та адреса сусіда записується в пам'ять GPU. Вимога перераховування сусідів пов'язана з тим, що частки постійно переміщуються, і множина сусідів буде відрізнятися на різних кроках моделювання. Сусідів можна перераховувати трохи рідше, наприклад 1 раз в 3-4 послідовних кроків, але це не дає значних переваг у швидкості обчислень, так як на етапі ітераційного обчислення тиску зростають помилки.

Через паралелізм обробки частинок на графічному процесорі важко заздалегідь сказати, скільки буде потрібно пам'яті для зберігання масиву сусідів. Проте за рахунок нестискуваності рідини і постійного розміру частинки можна приблизно оцінити максимальну кількість сусідів, яка має бути меншою ніж відношення обсягів області згладжування частинки до обсягу частинки. У нашому випадку це відношення приблизно дорівнює 88,7. Але при різкому стисканні, особливо при ударах, число сусідів може значно зрости, тому потрібно виділити додаткову пам'ять, як мінімум для зберігання 50-60 адрес сусідів. Для зниження затримок при паралельному доступі до пам'яті GPU доступ до масиву сусідніх частинок здійснюється таким чином, щоб кожен потік зчитував адресу одного -го сусіда з одного або сусідніх ділянок пам'яті, що досягається за рахунок розташування даних в пам'яті як масив, що складається з масивів з частинок. Тут – максимальне число сусідів, – число частинок. За адресою, де зберігається нульовий сусід, записується загальна кількість сусідів, потім для доступу до кожного наступного сусіда додаємо до поточного зміщення в масиві загальну кількість частинок.

Обчислення сил, діючих на частинки

Обчислення сил, діючих на частинки, густина і тиск кожної частки, виконується приблизно однаково:

1. Ініціалізація регістра або регістрів, в яких буде зберігатися результат підсумовування;

2. Отримання кількість сусідів з масиву сусідів і запуск циклу по всім сусідам;

3. Отримання для кожної частки-сусіда позиції і, якщо потрібно, швидкості з глобальної пам'яті. Обчислення відстані ;

4. Обчислення необхідної величини, наприклад, для густини і підсумовування з результатом.

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

 

Обробка граничних умов

В якості початкових умов моделювання створюється масив частинок у вигляді однорідної решітки з відстанню між частинками, рівною ,

де – радіус частинки.

При такій відстані і довжині згладжування для початкових і граничних умов забезпечується 57 сусідів у тривимірному просторі і 20 в двовимірному для кожної частки і густина 997,5 . Густина рідини , але невелике зниження густини збільшує стабільність обчислень за рахунок невеликої втрати точності. Кількість сусідів 50-60 вважається оптимальною для методу в тривимірному просторі, 20-21 – у двовимірному. При більшому числі частинок дані будуть занадто згладжені, при меншому – часто виникатиме недолік щільності частинок, що призведе до зменшення стабільності та некоректного руху частинок. Граничні умови задаються за допомогою нерухомих (віртуальних) частинок, які розташовуються у вигляді решітки з розмірністю на 1 менше, ніж розмірність простору з такою ж відстанню між частинками і в 4-5 шарів (рис. 3.8). Зафарбовані круги – частки рідини, незафарбовані – нерухомі частинки кордонів. Область кордону заштрихована. Зауважимо, що центри першого шару частинок лежать безпосередньо на границі. Цим забезпечується нульова швидкість рідини на границі.

 

Рис. 3.8 Початкові і граничні умови, задані безліччю частинок

 

Метод SPH можна ефективно реалізувати на паралельній архітектурі в тому числі за рахунок того, що всі частинки зазвичай обробляються єдиним чином. Однак у нашому випадку частинки границь чинять серйозний вплив на продуктивність в тривимірному випадку, так як заповнюють великі обсяги простору. Так, при 5-шаровій границі і радіусу частинки , потрібно більш ніж 110000 частинок рідини і більш ніж 150000 частинок границі. Виміри показують, що більшу частину часу займає формування масиву сусідів на початку кожного часового кроку і підрахунок густини частинок на кожній ітерації обчислення сили тиску. Оскільки частки границь складають більшу частину всіх частинок системи, то за рахунок граничних частинок можна збільшити продуктивність. Враховуючи, що частки границь не рухаються, а також те, що щільність цих частинок не змінюється, якщо частки рідини не впливають на них, можна модифікувати схему роботи з частинками:

1. На етапі хешуванні заповнювати також масив, що характеризує частки – реальні або віртуальні, сенсорні і тому подібні. За рахунок цього масиву на інших етапах обчислення буде ясно, якого типу частинка обробляється даними потоком;

2. На етапі пошуку сусідів для граничних часток ігнорувати інші граничні частки. Це дозволяє зменшити кількість записів в глобальну пам'ять на етапі пошуку сусідів і значно зменшити число зчитувань з глобальної пам'яті на всіх наступних етапах, що вимагають інформацію про сусідів;

3. На етапі обчислення густини до густини граничних часток додавати .

Таким чином, якщо віртуальні частинки знаходяться далеко від частинок рідини, то їх щільність дорівнюватиме , і ці частинки не вимагатимуть обчислення сили тиску. Але як тільки частка рідини наблизиться до границі, щільність в даній області зросте і буде потрібно обчислити силу тиску, яка відштовхне рідину від границі. При цьому будуть задіяні тільки ті граничні частки, які входять до числа сусідів рідини в даний момент. Решта граничних часток не вимагатимуть обчислень.

Але при такому підході збільшиться радіус дії частинок границі. Щоб не допустити такої ситуації, можна трохи відсунути граничні частки від власне границі, але тоді швидкість на границі, можливо, буде ненульовою. Тому пропонується на початку моделювання обчислити «реальну» щільність граничних часток і додавати до кожної граничної частки не , а отримане значення густини. Слід враховувати, що такий підхід буде ефективний тільки в разі, якщо межі залишаються незмінними протягом усього експерименту.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]