Matlab-ohjelmakoodin vektorisointi ja rinnakkaistaminen Python-toteutuksena
Järvinen, Jarkko (2022-09-19)
Matlab-ohjelmakoodin vektorisointi ja rinnakkaistaminen Python-toteutuksena
Järvinen, Jarkko
(19.09.2022)
Julkaisu on tekijänoikeussäännösten alainen. Teosta voi lukea ja tulostaa henkilökohtaista käyttöä varten. Käyttö kaupallisiin tarkoituksiin on kielletty.
avoin
Julkaisun pysyvä osoite on:
https://urn.fi/URN:NBN:fi-fe2022100360952
https://urn.fi/URN:NBN:fi-fe2022100360952
Tiivistelmä
Tutkimus käsittelee Matlab-ohjelmointikielellä toteutetun konseptitoteutuksen ohjelmointikielen vaihtoprosessia Python-kielelle. Toteutuksen avulla tutkitaan maanpinnan muotoja pienessä mittakaavassa. Tavoitteena on tarjota toteutus palveluna tai yleiskäyttöisenä kirjastona helposti ylläpidettävänä kokonaisuutena, nopeampana ja skaalautuvana käyttäen vektorisointia, rinnakkaistamista ja moniydinprosessointia. Tutkimuskysymyksinä käsitellään ohjelmistokielten numeeristen ja operationaalisten erojen huomiointia toteutuksessa, rinnakkaistamisen ratkaisumalleja ja ohjelmistokielen vaihtoprosessin onnistumisen validointia.
Taustatutkimuksen aikana esitellään prosessit ja säikeet sekä niiden luomiseen liittyviä yleisiä käytänteitä, rinnakkaisuuteen liittyviä tekniikoita, haasteita ja niihin liittyviä kommunikointi- ja synkronointiratkaisumalleja, silmukoiden yleisiä vektorisointikäytäntöjä, matriisien indeksointi-, viipalointi- ja ikkunointitapoja Python-koodissa. Toteutusosiossa kuvataan ohjelmointikielen vaihtoprosessi käyttäen yksikkötestejä Matlab-toteutuksesta kerätyn testitiedon avulla, vaihtoprosessissa kohdattuja toteutushaasteita ja niissä käytettyjä ratkaisuja, ohjelmakoodin optimointikeinoja ja lopputuloksen koostamista.
Konseptitoteutuksen ohjelmointikieli vaihdettiin Python-kieleen käyttäen C/C++ -kielellä toteutettuja kirjastoja. Rinnakkaistamisella saavutettiin nopeutusta ja ratkaisuarkkitehtuuriehdotuksen mukaisesti toteutus voidaan tarjota pilvilaskentaparadigmaa hyödyntäen korkeasti saavutettavana skaalautuvana palveluna. Tutkimuksen tuloksien perusteella vektorisointi on tehokas keino saavuttaa nopeutusta. Vektorisointi edellyttää vektoritietoisuutta ja kehittäjän tulee ymmärtää käytetyt algoritmit täydellisesti, jotta vektorisoinnilla saavutetaan oikeanlainen tulos. The research will focus on the process of changing the programming language of the proof-of-concept Matlab implementation to the Python language. The software helps to study the small-scale forms of the earth’s surface. The goal is to offer the implementation as a service or a maintainable general-purpose library, also make the software faster and scalable by using vectorization, parallelization, and multi-core processing. The research questions include consideration of the numerical and operational differences of software languages in the implementation, parallelization solution models and validation of the software language exchange process.
During the research, processes and threads are presented with general creation practices. Also described parallelism-related techniques and challenges, parallelism communication and synchronization solution models, general vectorization practices for loops, matrix indexing, slicing and windowing methods with practical Python code fragments. The implementation section describes the process of changing the programming language using unit tests with the test data collected from the Matlab implementation. Including the implementation challenges encountered during the programming language exchange process and the solutions used to solve challenges. Code optimization solutions and gathering the results of the calculations will be covered.
The programming language exchange process completed successfully by using Python libraries implemented in C/C++ language. The implementation can be offered as a highly accessible and scalable service by following the solution architecture proposal utilizing the cloud computing paradigm. Based on the research results vectorization is an effective solution to achieve performance improvement. Vectorization requires vector awareness and the full understanding of the algorithms used to achieve the optimal result.
Taustatutkimuksen aikana esitellään prosessit ja säikeet sekä niiden luomiseen liittyviä yleisiä käytänteitä, rinnakkaisuuteen liittyviä tekniikoita, haasteita ja niihin liittyviä kommunikointi- ja synkronointiratkaisumalleja, silmukoiden yleisiä vektorisointikäytäntöjä, matriisien indeksointi-, viipalointi- ja ikkunointitapoja Python-koodissa. Toteutusosiossa kuvataan ohjelmointikielen vaihtoprosessi käyttäen yksikkötestejä Matlab-toteutuksesta kerätyn testitiedon avulla, vaihtoprosessissa kohdattuja toteutushaasteita ja niissä käytettyjä ratkaisuja, ohjelmakoodin optimointikeinoja ja lopputuloksen koostamista.
Konseptitoteutuksen ohjelmointikieli vaihdettiin Python-kieleen käyttäen C/C++ -kielellä toteutettuja kirjastoja. Rinnakkaistamisella saavutettiin nopeutusta ja ratkaisuarkkitehtuuriehdotuksen mukaisesti toteutus voidaan tarjota pilvilaskentaparadigmaa hyödyntäen korkeasti saavutettavana skaalautuvana palveluna. Tutkimuksen tuloksien perusteella vektorisointi on tehokas keino saavuttaa nopeutusta. Vektorisointi edellyttää vektoritietoisuutta ja kehittäjän tulee ymmärtää käytetyt algoritmit täydellisesti, jotta vektorisoinnilla saavutetaan oikeanlainen tulos.
During the research, processes and threads are presented with general creation practices. Also described parallelism-related techniques and challenges, parallelism communication and synchronization solution models, general vectorization practices for loops, matrix indexing, slicing and windowing methods with practical Python code fragments. The implementation section describes the process of changing the programming language using unit tests with the test data collected from the Matlab implementation. Including the implementation challenges encountered during the programming language exchange process and the solutions used to solve challenges. Code optimization solutions and gathering the results of the calculations will be covered.
The programming language exchange process completed successfully by using Python libraries implemented in C/C++ language. The implementation can be offered as a highly accessible and scalable service by following the solution architecture proposal utilizing the cloud computing paradigm. Based on the research results vectorization is an effective solution to achieve performance improvement. Vectorization requires vector awareness and the full understanding of the algorithms used to achieve the optimal result.