Distributed Computing 6. rész

Ez a tartalom a sorozat része: Distributed Computing

Vigyázz az új cikkekre ebben a sorozatban.

1. Bevezetés

Interoperabilitási API

A BOINC platform számára a fejlesztők dokumentált API-kat biztosítanak az alkalmazásokhoz és webhelyekhez való interakcióhoz. Az alábbi interfészek által nyújtott szolgáltatások:

  • a BOINC ügyfél GUI helyi és távoli vezérlése;
  • az összegyűjtött kreditekről (általában a projektre, egyéni felhasználóra, csapatra vagy országra vonatkozóan);
  • Több projekt számláinak kezelése egyetlen webes felületen keresztül;
  • A több projektben résztvevő házigazdáknak, csapatoknak és felhasználóknak nyújtott hitelek teljes statisztikája;
  • olyan mechanizmusok, amelyek lehetővé teszik a helyi programok számára a BOINC ügyfél beállításainak szerkesztését.

2. Az elosztott alkalmazás legegyszerűbb példája

Az első példa, amelyet fontolóra vehetünk, megtalálható a minták / example_app könyvtár forráskódjai között. Ez a példa egy egyszerű, egyszálú BOINC alkalmazás. A program egyszerű munkát végez (például ellenőrzés), amely sikeresen vagy sikertelenül elvégezhető. Példa használható a saját alkalmazások alapjaira - csak a saját algoritmus végrehajtását kell kicserélnie a számításokhoz kapcsolódó részre.

A minta forráskódja fejlécfájlra, két kódfájlra és egy Makefile-re van felosztva a projekt építéséhez (ne számold meg a "mac" utótagot tartalmazó fájlokat):

Ezután részletesebben megvizsgáljuk a mintaprogram forráskódját. De jobb, ha a szemem előtt az eredeti forrás fájl - töredékek és nem szignifikáns céljából a tanulmány BOINC kód blokkokat, mi fog hiányozni, illetve figyelembe kell venni más sorrendben. Többek között azok a részek, amelyek a folyamatok egyetlen számítógépen belüli kölcsönhatásából és a grafika teljes kimenetéből származnak, kihagyásra kerülnek. Sem az egyik, sem a másik nem tartalmaz BOINC-hoz kapcsolódó funkciókat. A 2.3 szakaszban a programban használt API BOINC funkciók táblázata kerül bemutatásra. Ez a táblázat elérhetõ, mivel a megfelelõ funkciók a forráskódban jelennek meg (dõltek a cikk szövegében).

2.1 A UpperCase példaprogram

Programok a C / C + -tól eltérő nyelveken

Több vagy kevésbé egyszerű módja van a C ++ és C ++ BOINC alkalmazások alapvető programjainak használatára. A fejlesztők "trükköket" írnak le a következő nyelvekhez:

A fő alkalmazási kód az uc2.cpp fájlban található, a program a bemeneti fájl szövegét nagybetűvé alakítja. A BOINC képességek bemutatásához a program fejlesztői a következő parancssori paraméterek feldolgozását hajtották végre:

  • run_slow. Az alkalmazás minden egyes feldolgozott szimbólum után 1 másodpercig "elalszik";
  • cpu_time N. A feldolgozás befejezése után a program emellett a processzoridő N másodpercét is használja;
  • early_exit. a program 30 perces feldolgozását követően kényszerített befejezése;
  • early_crash. a program rendellenes megszüntetése a feldolgozás után 30 karakter;
  • early_sleep. a program 30 karakteres feldolgozás után "elalszik".

Természetesen a program forráskódja a fejléc fájlok összekapcsolásával kezdődik:

Ezután különféle platformfejléc-fájlokat csatolnak az API BOINC funkciók meghatározásaival.

A BOINC forrás könyvtárban minden megadott fejlécfájl (kivéve a C ++ szabványt) a lib és az api alkönyvtárakban található. A BOINC API egyéb funkcióinak számos definíciója (és implementációja) megtalálható.

A program három fájllal működik: a bemeneti fájl a forrásszöveggel, a kimeneti fájl, amelyre az eredményt írják, és egy segédfájl a hitelek kiszámításához. Nevét (logikai) a forráskód határozza meg:

Most menj az alkalmazás fő funkciójába.

Előkészítő szakaszként meg kell kezdeni a BOINC alrendszert. A mi esetünkben az egycsatornás programot inicializáljuk:

A BOINC platformra vonatkozó alkalmazások fejlesztésének egyik fontos eleme a fájlok feldolgozása. Amint azt korábban említettük (ld. 2. cikk „Architecture hazai HPC»), BOINC alkalmazások működjenek a logikai fájl nevét és logikai neve átalakítás fizikai használatával sajátosságai. Továbbá példánk forráskódjában a fájlokkal való munka bizonyítható.

Az olvasáshoz egy bemeneti fájl nyílik meg. A boinc_resolve_filename függvény a fizikai elérési út meghatározására szolgál az INPUT_FILENAME logikai név által megadott fájl számára:

Ezután megnyílik egy fájl a leolvasáshoz, amely a tisztított korai fizikai elérési úton található:

Ugyanaz az algoritmus használható a kimeneti és segédfájlok megnyitásához, de a program logikája további műveleteket igényel.

A segédfájl használatának szükségességét az "önkéntes számítástechnika" lényege határozza meg. A program (a BOINC kliens) befejezhető a feladat számításának vége előtt. Azonban ebben az esetben nem lenne indokolt újra elvégezni az összes munkát (különösen, ha a kitöltés több órás folyamatos számítást igényel). Az aktuális állapot visszaállításához használja a helper fájlt:

A segédfájlból a már feldolgozott karakterek számát olvassuk:

A bemeneti fájl összes feldolgozott karakterét kihagyjuk:

„Cut off” a kimeneti fájl száma feldolgozott jelek (különben vészhelyzet esetén leállítás - például, ha ki van kapcsolva, vagy „befagyasztása” az operációs rendszer - a kimeneti fájl lehet, még nem nyilvános feldolgozott jel, ami hibás eredményekhez vezetnek!):

A kimeneti fájl feldolgozásához a fejlesztők úgy vélték, hogy sokkal kényelmesebb az MFILE osztály használata (amelyik a változót tulajdonolja) - a lib / mfile.h fájlban van meghatározva.

Végül, amikor elkészül minden előkészítő munka, itt az ideje a fő programciklusnak:

Ha a paraméterek bármelyikét megadta a parancssorban (lásd fent), a program módosítja a viselkedését:

Az aktuális állapotot a BOINC API funkció boinc_time_to_checkpoint () időszakonként hívja meg. Ez a funkció, amely ellenőrzi a BOINC-ügyfél felhasználói beállításait, meghatározza, hogy van-e ideje javítani a köztes eredményeket (a do_checkpoint funkciót a programunkban hívjuk).

A do_checkpoint függvény a helper fájlban feldolgozott karakterek számát írja.

Az ügyfél tájékoztatást kap az állami megtakarítás befejezéséről (köztes eredmények) a boinc_checkpoint_completed () függvény hívásával:

Most jelentjük a feladat végrehajtásának folyamatát - az ügyfélnek átadott érték az elvégzett munka százalékában jelenik meg.

A beállítások szerint (lásd fent, ahol a parancssor paramétereiről van szó), egy kis számítógépidőt "elpazarolunk". Ne felejtsük el frissíteni az elvégzett munka százalékát!

A do_a_giga_flop függvény egy billió lebegőpontos műveletet hajt végre (Gflop).

A hozzárendelés 100% -ban teljes

Végezze el az alkalmazást BOINC

A munka befejezésekor a BOINC ügyfél függetlenül veszi fel a kapcsolatot a szerverrel, átadja neki a munka eredményeit, és új feladatot fog kérni.

2.2 A BOINC program felépítése

Most vissza a szabványos alkalmazás szerkezetéhez. A programban meghívott BOINC API első funkciója a boinc_init () inicializáló funkciója. Ennek megfelelően az alkalmazásnak a boinc_finish () függvénnyel kell végződnie. A folyamat során meg kell frissíteni az információkat mértékét a feladat (funkció boinc_fraction_done ()) és tárolja a közbenső számítások eredményei (boinc_time_to_checkpoint ínszalag () és boinc_checkpoint_completed ()).

A program kidolgozása a BOINC platform, akkor is tisztában kell lenniük a sajátosságait dolgozó fájlokat és a pontosság a redukció közbenső számítások.

2.3 A BOINC API funkciói

Ez a rész a BOINC API funkciók listáját tartalmazza, amelyek megtalálhatók a mintaprogramban.

1. táblázat: Az alkalmazott API-funkciók listája BOINC

int boinc_finish (int státusz)

A funkciót a program végén kell hívni. A nem nulla állapot hibát jelez.

3. Következtetés

Ebben a cikkben a BOINC platformon futtatott megosztott alkalmazás egyszerű példáját tekintettük meg. A példa tartalmazza a BOINC-forrás forráskódját, és bemutatja az alapvető architektúrát és funkciókat. Ez a projekt alapul szolgál az elosztott alkalmazások egyszerű algoritmikus előállításához, de nagy számítási erőforrásokat igényelnek.

Amint látja, nincs semmi nehéz olyan alkalmazások létrehozásában, amelyek a számológépek elosztott struktúráját használhatják. Az egész a legtöbb munkát vállal BOINC platform: a szerver oldalon is osztja fel a feladatokat a kliensek között, és a kliens fut a feladat elvégzésére, és beszámol a szerver (és mellesleg azt is megjeleníti, hogy a felhasználó a haladás, a munka). Mindazonáltal mind a mai napig a BOINC ügyfeleink egyetlen feladatot hajtottak végre. Hogyan készítsünk nagyszámú feladatot? A következő cikk megmondja, hogyan automatizálhatja az alkalmazáshoz szükséges feladatok generálásának folyamatát.

Források letöltése

Kapcsolódó témák

Kapcsolódó cikkek