DualSPHysicsRecon is a project mainly written in ..., it's free.
Reconnaissance of Dual SPHysics library
Co to jest SPHysics? Informatyka w służbie fizyki, czyli komputer jako maszyna obliczeniowa. Tu SPH jest skrótem od Smoothed Particle Hydrodynamics, czyli Hydrodynamiki Wygładzonych Cząsteczek. Całość ma służyć do dobrego modelowania płynów, inną niż dotychczasowe (trójkąty, poligony, itp.) metodą. Po teoretyczne podstawy i bardziej szczegółowe informacje odsyłam do bibliografii.
SPHysics był pisany w Fortranie.
Końcowy wynik SPHysics to dane, jakie można zwizualizować np. narzędziem ParaView.
Ograniczenia SPHysics. Problemem było to, że przy symulacjach płynno-stałych (dotyczących cieczy i ciał stałych) interakcje cząsteczek były nie do przeliczenia na pojedynczej maszynie. Przy problemach 3D ilość cząsteczek sięgała wielu (10^6 - 10^9) milionów.
W ten sposób rewelacyjne algorytmy i teorie (z punktu widzenia fizyki) leżące u podstaw SPH nie mogły zostać zamodelowane bez użycia cud-maszyn. Rozwiązania były dwa. Parallel SPHysics, wykorzystujący klastry maszyn (przez MPICH lub OpenMPI), oraz Dual SPHysics.
Co to jest Dual SPHysics? Najnowsza (z końca maja 2011) wersja oprogramowania SPHysics, pomyślana na wieloprocesorowe maszyny. Ma na celu zrobienie użytku z nowoczesnych architektur celem zrównoleglenia i przyspieszenia obliczeń. Napisana jest w C++ z użyciem CUDA (dla GPU). Działa w trybach: CPU i GPU. Zawiera też narzędzia odpowiedzialne za poszczególne etapy obliczeń.
Końcowy wynik Dual SPHysics to dane, jakie można zwizualizować np. narzędziem ParaView.
CPU a GPU: Tryb GPU jest lepszy, nie ma co ukrywać. Jak bardzo - odsyłam do dokumentacji Dual SPHysics (sekcja 9: Test Cases, strona 31) dotyczącej odpalania przykładów i czasów jakie się uzyskało na każdym w różnych trybach. Różnice są wielokrotne (kilkudziesięciokrotne - sic!). Tryb GPU jest też niestety jedynie dla posiadaczy szczęśliwych nVidii. Za dokumentacją: To run DualSPHysics on GPU, there is no need to install compilers or new software, only an NVIDIA CUDA-enabled GPU card is needed and the last version of the driver must be installed.
Dla chętnych lub upartych polecam emulator GPU na CPU: MCUDA.
Czym jest CUDA? Za stroną oficjalną: http://www.nvidia.pl/object/cuda_home_new_pl.html i Wikipedią: http://en.wikipedia.org/wiki/CUDA
CUDA to równoległa architektura rozwijana przez NVIDIA. Jest wspierana przez niektóre ich karty, odsyłam po więcej szczegółów do podlinkowanych stron oraz załączonych PDFów.
Wspierane karty (wg Wikipedii): http://en.wikipedia.org/wiki/CUDA#Supported_GPUs
Czym jest MCUDA? Wersją CUDA dla wielordzeniowych procesorów (ang.: "CUDA for Multicore CPUs"), napisaną przez Johna Strattona. Po więcej odsyłam do bibliografii.
Etapy obliczeń: Wszystkie przykłady mają skrypty, które wystarczy wywołać, by przejść całość obliczeń za jednym zamachem. Tworząc własną symulację nie będzie już tak prosto. Etapy są następujące (nazwy od używanych narzędzi):
Etapy dzielimy z grubsza na "pre-", "post-" i "processing". Każdy z nich jest opisany szczegółowo w swojej sekcji dokumentacji (sekcja 5: Processing, 6: Pre-processing, i 7: Post-processing).
Struktura katalogów Dual SPHysics:
Dodatkowo, w każdym katalogu jest plik txt z opisem zawartości. Szczerze polecam!
readme.txt z katalogu HELP - nieodzownego przy tworzeniu własnej symulacji: CaseTemplate.xml will help users to create their own testcases This XML file contains all the options to create all the objects, define movements and describe parameters of execution
HELP_GenCase.out includes the HELP about the execution parameters of the GenCase code
HELP_DualSPHysics.out includes the HELP about the execution parameters of the DualSPHysics code
HELP_BoundaryVTK.out includes the HELP about the execution parameters of the BoundaryVTK code
HELP_PartVTK.out includes the HELP about the execution parameters of the PartVTK code
HELP_MeasureTool.out includes the HELP about the execution parameters of the MeasureTool code
The folder XML_examples includes some XML examples of animations that can be seen at www.vimeo.com/dualsphysics:
- CaseFlap_Def.xml shows an example of sinusoidal rotation
- CaseTurbine_Def.xml shows an example of accelerated rotation and how to draw a cylinder
- CaseInitialVelocity_Def.xml shows how to impose initial velocities to volumes of fluid
- CaseSloshing_Def.xml shows how to describe a sloshing tank
Sprzęt i system: cat /proc/cpuinfo | grep [...] 4-rdzeniowy procesor Intel i5, dane modelu: M480, 2,67 GHz
arch x86_64
uname -a 2.6.32-34-generic #77-Ubuntu SMP Tue Sep 13 19:39:17 UTC 2011 x86_64 GNU/Linux
cat /proc/meminfo | grep Total
MemTotal: 3917908 kB
SwapTotal: 1956856 kB
Karta graficzna:
lshw -C video
WARNING: you should run this program as super-user.
*-display
description: VGA compatible controller
product: M92 [Mobility Radeon HD 4500 Series]
vendor: ATI Technologies Inc
physical id: 0
bus info: pci@0000:01:00.0
version: 00
width: 32 bits
clock: 33MHz
capabilities: bus_master cap_list rom
configuration: driver=radeon latency=0
resources: irq:34 memory:c0000000-dfffffff(prefetchable) ioport:2000(size=256) memory:f0300000-f030ffff memory:f0320000-f033ffff(prefetchable)
Przykłady: Wedle dokumentacji Dual SPHysics (sekcja 9: Test Cases, strona 31) generacja przykładów mierzona w minutach różni się między wersjami biblioteki, architekturą użytej maszyny oraz przy i bez wspomagania procesora graficznego.
Polecam lekturę zawartych w tej sekcji tabel - pozwala to na uniknięcie niemiłej niespodzianki jaka była moim udziałem. Przykład z pompą liczył się na mojej maszynie KILKANAŚCIE DNI non-stop (i tak o wiele lepiej niż mógł - w dokumentacji podają czas dłuższy niż - sic! - MIESIĄC).
Jeśli nie posiadacie dostępu do maszyny o lepszych osiągach niż moja mogącej długo działać bez przerwy (zatem nie lab, gdzie każdy może ją Wam wyłączyć), odradzam zlekceważenie dokumentacji i odpalanie na zasadzie "zobaczmy jak to działa". Chyba, że na przykładach 2D - są najszybsze: na Intelach i5 powinny zająć poniżej godziny obliczeń (na jeden).
Niedowiarków odsyłam do plików poniżej.
Zebrane czasy symulacji uzyskane na mojej maszynie
Wstępna konfiguracja danych: Załączniki: CasePump_Def.xml CaseDamBreak2D_Def.xml exemplary.xml + komentarze
Uruchamianie: CasePump_linux64_GPU.bat - tylko karty graficzne nVidia CasePump_linux64_CPU.bat - kilkanaście dni obliczeń
Użyte programy: Załączam (na płytce) zipy odpowiednich wersji. Osoby zamierzające pracować na innym systemie / architekturze odsyłam do stron w bibliografii.
Dokumentacja:
Wszystko w PDF, załączone na płytce. Po więcej odsyłam do bibliografii.
Bibliografia i źródła do dalszej lektury: