Progresul hardware, episodul 16: Intercalație algoritmică

Mai jos, o listă de interdicții la rularea concomitentă a programelor pentru numere.
Așadar:

Strict interzis de rulat ERMETE (vecungul) în paralel cu VARONTE / LITUAN2. Inclusiv VARONTE și LITUAN2 trebuiesc secvențial rulate, unul după altul și monoinstanțiat*, dacă se hotărăște să fie folosite amândouă. Cauza este suprascrierea headerului comun /LITUAN2.h.

* Să NU coexiste două astfel de programe omonime .

ERMETE este un program care se ocupă de actualizarea cu numere noi a marilor fișiere GIG, cu numere din fișierele cu rezultate de căutare, care au extensia .NUM, și pe timpul rulării lui se preferă ca lista de NUM-uri să fie neschimbată.

Or, LITUAN2 este un sortator crescător de conținut numeric (ca și LITUAN simplu), folosit de PARONTE (rimă cu Caronte, de văzut mai jos) și  destinat să facă noi fișiere .NUM, iar VARONTE trebuie să șteargă fișiere .NUM, așadar folosirea lor în timpul extragerii de actualizări dfin fișierele numerice ar fi incomodă, distructivă chiar.

    Pot să ruleze în paralel ERMETE (o instanță) și vecung (una sau mai multe, dar memoria de 128GB este și ea limitativă, începe și ea să mi se pară prea mică). Așa că în practică, ori numai ERMETE, ori numai vecung, uniinstanțiat. Un singur VARONTE în paralel cu unul sau mai mulți LITUANI clasici (dacă are memoria loc), sau un singur LITUAN2 în paralel cu partea de LITUAN. *Niciodată două LITUAN2 sau VARONTE în paralel. Headerul LITUAN2.h trebuie protejat, doar o falie programatică să scrie în el într-o vreme dată.
   
    Ar putea să ruleze în paralel un vecung cu un vecungul, tot dacă are memoria loc, pe segmente diferite de depozit numeric, dacă se cere rapidizarea actualizării, dar trebuie ținut cont că modulul vecung se mișcă mai încet.
   
    De neuitat: NU ESTE VOIE CU VECUNGUL CÂND RULEAZĂ VARONTE ORI LITUAN2 (în special LITUAN2 în succesiune din linia de comandă, când se va suprascrie headerul).
   
    În schimb, vecung / PARONTE / LITUAN nu au nevoie de header comun suprascriptibil, de asemenea LITUAN2 și vecungul se află în situație specială - ele fiind nevoite să fie de fapt declanșate din alte programe, anume LITUAN1 pentru LITUAN2 și ERMETE pentru vecungul.
   
    Important la LITUAN2.h: VARONTE și LITUAN2 au nevoie de toate cele cinci câmpuri (N1, DIMM, LN, MIN și MAX), dar vecungul doar de primele două (capacitatea și dimensiunea pentru șirurile de caractere memorate în șirul de șiruri). LN este lungimea fișierului de rezultate numerice parțiale, citit curent (fără 10^1917 + 1), iar MIN și MAX numărul minim și cel maxim de cifre de acolo.

    VARONTE este o variantă programatic-cascadată a lui LITUAN2, așa cum PARONTE este pentru LITUAN. Cascadarea sortării crescătoare a fișierelor parțiale se poate face și manual, în tab la Guake Terminal, dar este mai solicitant așa; copy-paste cu mâna și mausul.
   
    Sistemul LITUAN sortează crescător numerele din fișierele rezultante, citite direct ca mepezetele, pe când LITUAN2 le sortează ca stringuri făcute din cifre și terminate (separate) prin caracterul \n, care în limbajul C înseamnă rând nou (un număr pe un rând). Așa sunt aranjate numerele și în marile fișiere numerice (GIGXY.TXT), unde XY poate să fie 52, 80, 100, 130, 160, 240, 420 ori 1910.

    Fiecare număr trebuie să apară o singură dată, și pe cât posibil fără trunchiere, care ar genera masă numerică invalidă.
   
    Partea de lituanizare** (citire de mepezetele, varianta cascadată) a funcționat mai multă vreme înăuntrul lui vecung, dar a fost scoasă de acolo și i s-a făcut și perechea de tip „vecungul”, cu numerele ca șiruri de caractere, dar afară din vecungul și în ambele variante de cascadare. Lituanizarea mepezetelistă avea deja ambele cascadări, cea singulară/manuală fiind la LITUAN. Varianta automată a fost făcută cu numele PARONTE. Pentru cea caracteristă, cascadarea manuală este LITUAN1 / LITUAN2, iar cea automată în VARONTE.


**Așa am ales eu să numesc sortarea individuală a conținutului fișierelor cu numere găsite. Acasă putem să dăm ce nume vrem.
   
    Funcțiile CBSTATIC și HSS, specifice modulului vecungul cu șirul de șiruri, au fost până la urmă și ele scoase din ACTUAL3.h (noul header de la vecungul) și trecute în TOLIL.h, unde HSS se mai folosește și la LITUAN2. Cum șirul de șiruri, variabilă globală (în ACTUAL3.h și în LITUAN2.cc), avea nevoie de doi parametri ficși pentru dimensiuni, anume N1 și DIMM, care trebuiau să fie reglabili în funcție de minimul/maximul de cifre din fișier (LITUAN2 / VARONTE) sau deja erau reglabili în funcție de intervalul de mărime numerică la actualizarea depozitelor, dar trebuia modernizare (vecungul), a apărut nevoia headerului comun LITUAN2,h, scris dinamic în timpul rulărilor de lituanizare, sau scris o dată la începutul unei runde de vecungul.
   
    Se interzice rularea de doi ERMEȚI simultani. Combinații paralele interzise:
   
    -ERMETE + LITUAN1
    -ERMETE + VARONTE
    -VARONTE + LITUAN1
    -LITUAN1 + LITUAN1
    -VARONTE + VARONTE
    -ERMETE + ERMETE
   
    ./vecungul și ./LITUAN2 nu se mai rulează manual deloc, ci trebuie numai cu ERMETE și LITUAN1.
   
    Așadar, sortatorii de tip LITUAN2 și actualizorii de tip vecungul au voie numai unul de un fel la un moment dat.

    De asemenea, de ferit de situația cu LITUAN și vecung în paralel, și în general de sortare de fișiere când un actualizor, chiar când nu este concomitență de tip LITUAN2/VECUNGUL, rulează; când se actualizează marile depozite, fișierele de rezultate trebuie să stea în pace. Se poate face căutare când se știe sigur că intervalul de mărime nu are legătură cu ce se actualizează.

Comentarii

Postări populare