Regisztráció és bejelentkezés

Hatékony programcsomag fejlesztése nagy számú késleltetett differenciálegyenlet numerikus megoldására

Késleltetett differenciálegyenletek (KDE) a természettudományokban és a műszaki tudományokban is megjelennek; analitikus megoldásuk a legtöbb esetben nem létezik. Így a legtöbb késleltetett probléma csak numerikusan kezelhető, azonban jelenleg a legtöbb KDE megoldó magasabb szintű programozási nyelvben (Julia, Wolfram, Matlab) van implementálva, amelyek teljesítménye sokszor nem megfelelő paramétertanulmányok készítéséhez. Léteznek az 1990-es években Fortran vagy C nyelven íródott megoldók. Azonban ezek nem használják ki az azóta megjelent új programozási paradigmákat.

A KDE megoldók sebességét több tényező is limitálja; a minimális futási idő elérése érdekében ezen tényezők felderítése szükséges. Ezért egy általános célú megoldóhoz szükséges a releváns matematikai háttér megfelelő ismerete például a megfelelő interpoláció választása, illetve a nem folytonosságok kezelése. A modern processzor (CPU) architektúrák megfelelő ismeretével és az új utasításkészletek használatával lehetséges a program alacsony szintű optimalizációja (vektorizáció, utasítások késleltetésének elrejtése, cache használat) amely a futási időt akár nagyságrendekkel is csökkentheti. Egy másik megközelítés a professzionális videokártyák (GPU) használata és a kód adaptálása a hardver masszívan párhuzamos architektúrájára. Ebben az esetben a kihívás a munka szétosztása több ezer párhuzamosan futó szálra, és az ebből adódó hatékony memória kezelés interpolálásnál.

Ezen dolgozat egyik fő célja bemutatni a saját magam által C++ nyelven készített teljesen általános célú KDE megoldó csomagot, amely alacsony szinten optimalizált kód modern CPU-ra, így alkalmas nagy számú KDE párhuzamosított megoldására. Jelenleg a hagyományos negyed rendű Runge—Kutta módszer (fix időlépés) van implementálva Hermite interpolációval kiegészítve. Illetve az adaptív Runge—Kutta—Dormand—Prince is elérhető, amely az interpolációhoz folytonos kiegészítést használ és képes a hibát egy előírt tolerancián belül tartani. Bizonyos esetekben a futási idő jelentősen csökkenthető a GPU-k használatával, viszont a teljesítmény több esetben is limitált. A dolgozatban bemutatok néhány általam készített probléma specifikus GPU-s megoldó kódot.

A dolgozatban különböző tesztproblémákon keresztül bemutatom, hogy az általam készített megoldó hogyan teljesít az elérhető megoldókhoz és probléma specifikus programokhoz képest. A fő szempontok az előkerülő nem folytonosságok kezelése, illetve a futási idő paramétertanulmányok esetén.

szerző

  • Nagy Dániel
    Mechatronikai mérnöki alapszak (BSc)
    alapképzés (BA/BSc)

konzulens

  • Dr. Hegedűs Ferenc
    Docens, Hidrodinamikai Rendszerek Tanszék

helyezés

II. helyezett