A Cupit párhuzamos nyelv mesterséges neuronok programozására

Alprogramok, modulok

Az alprogramokat többféle csoportba oszthatjuk be: eljárás, függvény, művelet. Az eljárások természetesen jellegükből fakadóan objektumok tagjai is lehetnek, míg műveleteket csak globálisan definiálhatunk. Ennek ok, hogy a definiálható műveletek fordítása a párhuzamosság minél magasabb fokú kihasználtságát kísérli meg.

Eljárás, függvény

Az alprogramok definiálása a Modula-2 programnyelvhez hasonlóan történik. Eljárás esetén a PROCEDURE kulcsszó után a név, a paraméterlista, az IS kulcsszó, majd az utasítások és az azt záró END. A paraméterlistában lehetőség van érték szerint (alapértelmezett) és cím szerint (VAR kulcsszó) átadni a paramétereket. (Pontosabban, hogy érték , vagy érték-eredmény szerinti a paraméterátadás fordító függő - ennek oka, hogy, ez a szerző szerint függhet a párhuzamos rendszertől, és így szabadságot ad, az optimalizáláshoz.)
További lehetőség a CONST kulcsszó használata, melynek hatására a paraméter értékét nem lehet megváltoztatni.
Ha az alprogram egy objektumhoz tartozik (Node, Connection, Network), akkor a ME kulcsszóval a hívó objektum elemeit lehet elérni.
Függvény esetén a visszatérési érték típusával kell kezdeni a deklarációt, melyre a rekordnál elmondottak vonatkoznak. Érdekesség, hogy, míg függvénynek is lehet VAR paramétere és így azokat megváltoztathatja, a ME kulcsszóval elérhető elemeknek csak az értékét kérdezheti le.
A CuPit, lehetőséget ad az EXTERN kulcsszó használatára, ami csak deklarálja, de nem definiálja az alprogramot. (Az eljárásnak természetesen definiáltnak kell lenni valahol később.)

Reduktion

Az alprogramok ezen fajtája bináris műveletet valósít meg. A műveletnek kommutatívnak és asszociatívnak kell lennie. Csak globálisan lehet őket deklarálni, és fő célja az adatok feldolgozása (lehetőleg) logaritmikus időben.

TypeId REDUCTION op IS body END;
Például:
Real REDUCTION sum IS RETURN (a+b) END ... REDUCTION ME.groupname[].value:sum INTO groupsum;
Ennek hatására a groupname beli csomopontok value értékei összeadódnak. (Az összeadás sorrendje nem definiált.)

Winner-takes-all (WTA)

A REDUCTION-höz hasonlóan ez is egy bináris műveletet valósit meg és szintén csak globálisan deklarálható. Tulajdonképpen összehasonlítást végez és kiválaszt egy csomópontot, élt, hálót egy csoportból. A tervezési elv, hogy tényleg véletlenszerűen, történjen ez a kiválasztás (a törzsben leírtak szerint), a párhuzamos futtatásnak megfelelően.

TypeId WTA op IS body END;

Merge

Szintén a párhuzamosságot támogató eszközök egyike. Célja, hogy újra egyesítse a replikált hálókat, háló elemeket. Bár igaz, hogy a replikálás hálókra vonatkozik, a merge segítségével ennek inverze az elemekig levihető, és azok mondják meg a tevékenységet, akikre vonatkozik.
Ha egy hálóra elvégezzük a merge eljárást, akkor az elemeire, mint egy egyszerű eljárás meghívódik. Így a cél objektum elemei a ME minősített névvel érhetők el, a forrás objektumok, amiket össze szeretnék fűzni a YOU kulcsszó segítségével CONST-ként érhetők el.
Ha egy típusra nem definiált a Merge eljárás, akkor a példányokból véletlenszerűen történik a kiválasztás.
Replikálásról később lesz szó.

MERGE IS body END