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.