Încercarea numerelor cu CUDA (Partea 4: Progresul continuă în 2023, CGBN are limite, GMP valoare)

Și deci am intrat și în 2023, tot cu gândul la numere și la codul cel nou menit să le mai emancipeze descoperirile rămase. În primele zile din an am continuat dezvoltarea la codul cel nou. Când am mai mărit capacitatea de reprezentare a numerelor pe CGBN, cu acel parametru BITS care însemna puterea de 2 sub care se află ele, am observat că 1) mai scade viteza, 2) la BITS = 4096 și mai sus nu mai am rezultate (trebuia până la 8192 să urc, sau chiar 6400, ca să mă încadrez cu 10 la puterea 1910), nu mai prelucra nimic din numere, și 3) mai grav, am început să am o eroare cu Incomplete type not allowed.


Miercuri pe 4 ianuarie 2023, în zori de zi, am făcut tichet pe Github la CGBN cu problema asta, iar pe moment i-am făcut apoi și o cârpeală, dar în fapt problema de fond din codul CGBN tot nu s-a rezolvat, abia de curând am încercat eu o definiție nouă în codul local al CGBN-ului.

https://github.com/NVlabs/CGBN/issues/23

Aveam probleme cu divizibilitatea când voiam să folosesc BITS egal cu 1024. Pesemne că TPI-ul pe care îl încercam era mai mic de 32, cât este LIMBS când BITS este 1024. 32 de biți pe limb * 32 de limburi = 1024 de biți. Mai exact TPI era 4 și BITS 512. Dacă făceam TPI-ul 32, sigur scăpam temporar de eroare, dar la BITS 2048 (numere de 600 și ceva de cifre zecimale) sigur trebuia să apară iar. După ce am făcut tichetul, am găsit o soluție temporară, posibil să fi mărit TPI-ul. Nu mi s-a răspuns imediat și nici din partea staff-ului CGBN, dar mai târziu în timpul anului am văzut că „Incomplete type is not allowed” venea din cauza unei definiri incomplete - codul CGBN-ului se referea la patru structuri dlimbs_algs_t, inclusiv la cea pentru când TPI este mai mic decât LIMBS (adică LIMBS să fie multiplu de TPI), dar doar primele trei erau și instanțiate sau definite în cod, lipsea tocmai cea de Multi. Însă pe moment am trecut mai departe cu migrarea codului numeric de la GMP la CUDA cu noua algoritmizare.


Pe 6 ianuarie 2023 am reușit să prind pe stoc la PCGarage placa MSI Suprim Liquid, la aproape 13300 de lei bucata, și am comandat-o rapid, pe 12 ianuarie urma și lansarea procesorului i9-13900KS de la Intel, care însă trebuia prins și el repede, că era Limited Edition. M-am pregătit astfel pentru încă un calculator nou, care să aibă și carcasă nouă de această dată (una mai ușoară, dar cu ventilator pe spate).

La primul calculator alesesem 32 de GB de DDR5-7600 (care au devenit 64 pe timpul lui 2023), în plăcuțe single-rank de câte 16 GB, plăcile acestea de bază de la AMD și Intel cu DDR5 și mainstream suportând maxim patru DIMM-uri sau sloturi de RAM la memorie. Numai că frecvența utilizabilă depindea și de controllerul din CPU, așa că nu am fost în stare la AMD să folosesc memoria mai sus de 6200 de MHz (sau 6000 de când sunt pe 64 de GB). Mai depinde și de update-urile la BIOS, am ajuns mai târziu să dau rollback la unele pe AMD, ajungem și acolo. Mai sus de atât ori se bloca sistemul, ori pur și simplu nu punea nimic pe ecran (tot un blocaj la POST). În prima perioadă a plăcii X670E ACE, pe site chiar scria că „CPU quality is the key for reaching over 6200 MHz”.


Pentru noul calculator cu 13900KS am ales așadar 13900KS-ul, placa video Suprim Liquid, un NVME PCI-E 4 (și încă unul a mai venit mai târziu în an), tot cu viteze de top, un cooler de CPU cu ventilație de 420 mm de la Corsair parcă, placa de bază ASUS ROG Z790 MAXIMUS EXTREME, o sursă de 1600 de wați cu randament ceva mai mare decât dincolo la ACE, o carcasă Gamemax Brufen C1, în care să încapă o placă e-ATX precum cea de la ASUS, 32 de GB de Trident Z-SKill cu 8000 de MHz (tot 2*16 single rank, care chiar mergeau cu 8000 de MHz, căci la Intel merge cu frecvențe mai mari - deși de curând am văzut și pe site-ul plăcii de bază de la AMD că memoriile single-rank 2*16 ar suporta până la 8000+), care și ei s-au făcut 64 în 2023 mai târziu, dar a scăzut frecvența la 7400 sau 7200, cu update-urile de BIOS; și desigur Riser Cable PCI-E 4 la placa video, la fel ca la ACE. Și câte-un mouse nou prin ultimul an am m ai luat, posibil și o tastatură nouă, dar nu două, că puteam refolosi din casă, mai ales că SLI PLUS-ul își luase discard după fenomenul din 23 noiembrie. În noaptea de 18 ianuarie am făcut asamblarea inițială. Coolerul de la Corsair este tot lichid all-in-one, din nou nu am ținut morțiș să mai iau un hiper-sistem de cooling pentru CPU, chiar dacă 13900KS se cam încinge la lucru intens - că nu am țintit un CPU hiperdotat, ci tot partea de video. Pe la Intel există astăzi niște Xeoane cu multe nuclee, dar tot Threadripper-ul de DDR5 mai nou apărut ajunge la 192 de threaduri.

Am dat ceva mai mult de 32300 de lei în ianuarie pentru noul calculator. La ambele calculatoare se mai adaugă ce am mai pus între timp, ca să aibă câte 64 de GB de DDR5 și câte două NVME-uri PCI-E 4.


În primă fază nu am fost în stare să am video-ul funcțional la Arch Linux pe calculatorul nou cu 13900KS, mai târziu am văzut că trebuie să-l pornesc cu kernelul de linux (NU linux-zen), și am trecut pe Ubuntu ca să am video în regulă. Între timp Ubuntul s-a stricat și Arch Linuxul a rămas. Am folosit și puțin Windows 11 pe 13900KS iarna trecută, dar am renunțat până la urma urmei. Treptat, pe timpul lui 2023, pe măsură ce am mai îmbogățit RAM-ul și NVME-urile la cele două calculatoare cu DDR5, am renunțat de tot la SATA (fie HDD sau SSD) și-am rămas pe NVME-uri! PCI-E 4 deocamdată.

Au apărut și NVME-uri de PCI Express 5 în 2023, dar vitezele lor cele mai bune ajung la 11800 de MB pe secundă la scriere și la 12400 la citire, la Crucial T700. Generația aceasta trebuie să ajungă până la 14-15 GB  pe secundă, și fiecare dintre cele două plăci de bază are câte un loc pentru NVME de PCI-E 5 (excluzând cardurile de expansiune PCI-E 5 care ar putea apărea - dar să nu-mi ia din forța video, că numărul de lane-uri PCI-E 5 este limitat: 24 la AMD și 20 la Intel, este drept că pentru plăcile 4090 este suficient să funcționeze câteși opt în loc de 16 la sloturile de video, căci x8 PCI-E 5 este ca x16 PCI-E 4 (să ne amintim că 4090-urile NU sunt PCI-E 5, ci 4). Și deocamdată plăci video PCI-E 5 nu au apărut. Poate în iarna 2023-2024 să apară NVME-urile de 14-15 GB pe secundă, plănuiesc să iau două de câte 2 TB fiecare (la PCI-E 4 am deja patru, câte două pe calculator, cu viteze de top, unul cu 1 TB și celelalte cu 2 - cel cu 1 TB pentru Windows și restul pentru Linuxuri).

S-ar putea ca acele două NVME-uri PCI-E 5 să coste vreo 4000-5000 de lei, când va fi ca ele să fie.


Atunci când am ajuns suficient de departe cu noul cod de la CUDA pentru numere, am făcut și căutări numerice (altele decât randomizarea inițială a puterilor de factori primi, care nu era optimală), cu coeficienți de legătură îmbogățiți și numere de fond 1 drept bază de pornire. Puteam să fac căutări pe intervale numerice mai mari, ca puteri de 10 (de pildă o căutare pentru numerele între 40 și 60 de cifre), pe când atunci când eram cu fondul 2 nu era timp pentru căutat prin atât de multe numere deodată. Este adevărat că acum creștea, ca o compensare, numărul de coeficienți de legătură implicați. Am raționat că numerele de fond 1 trebuie și ele să se obțină unele din altele, cu înmulțiri și împărțiri dibace, cu acei coeficienți de legătură, și cu reducere între ei (de pildă dacă înmulțești cu 35 și împarți la 25, reduci prin 5 și este ca atunci când înmulțești cu 7 și împarți la 5 numărul mare, este mai simplu), fără nevoia de a complica lucrurile și de a întinde elasticul cu numere de manevră, care să crească mult spațiul de stocare și nevoia de memorie - mai ales că la plăcile astea noi de bază limita de memorie este de 192 de GB, nu de 1-2 TB ca la Threadripper, dar densitățile de memorie cerute pentru umplerea a 128 sau 192 de GB sunt dual-rank și frecvența de RAM ar scădea, iar eu vreau viteză și la RAM, chiar dacă nu cu calupuri de sute de GB. Când 2022 s-a terminat, aveam cele 31231 de numere de fond 1, rămase după turul de forță din octombrie 2022, ultima dată când a mai pus Achim Flammenkamp multiperfecte noi pe pagina asta:

http://wwwhomes.uni-bielefeld.de/achim/mpn.html


Prin iarnă, el a actualizat data de pe pagină cu 21 ianuarie 2023, dar nu a pus numere noi. Am făcut atunci o filtrare obișnuită a numerelor de acolo (selectasem un segment sugestiv), ca să văd ce este nou față de ce aveam eu deja, dar fișierul de noutăți era gol și-am fost surprins, că știam din octombrie că algoritmul de filtrare a noutăților de numere era bun. M-am lămurit apoi că NU erau numere noi acolo, Achim Flammenkamp doar a actualizat data din calendar, și de-atunci încoace tot așa a rămas, eu tot îl aștept să mai posteze numere noi, ca să le înmagazinez și eu și pornind de la ele să mai scotocesc după niște noutăți numerice.

Mă mai uitam și la 

http://www.numericana.com/answer/numbers.htm#multiperfect

, dar pe-acolo noutățile hemiperfecte sunt moarte de mult. Am eu câteva zeci de hemiperfecte care nu apar pe internet în liste. Dar la multiperfecte nu am reușit deocamdată să i-o iau înainte lui Achim Flammenkamp!

Pe la 11 ianuarie 2023, folosindu-mă de CUDA de data aceasta, am mai găsit câteva numere noi, 5+4, și am ajuns la cota 31240. Stăteam noaptea și mă ocupam de numere. În această etapă încă eram doar cu X670E ACE. Până s-a terminat luna ianuarie am mai găsit unsprezece numere, am ajuns la 31251. Între timp, în mod sigur am avansat și cu codul pentru GMP. După piedica temporar depășită din 4 ianuarie și celelalte probleme observate la CGBN, sigur că aveam un motiv să mai dau o șansă GMP-ului, care totuși nu avea limitări din acel fel.

Și chiar și cu viteza pe CUDA... era departe de câștigul exponențial la care mă gândisem prin 2019-2022. Nici vorbă să-mi facă numerele de o sută de ori mai repede decât pe CPU. La numerele sub 80 de cifre puteam vedea o diferență de viteză, dar până în 100% în plus. Și mai erau și numerele parazite, care tot nu aveau ce căuta la rezultate. Am mai optimizat oricum și mecanismul de înmagazinare a rezultatelor de fond 1, să meargă mult mai repede (acel vecung2), chiar și dacă fișierele generate la o căutare totalizau inițial mai mult de un milion de numere - fiind vorba despre fondul 1 (trecând peste parazitismele de la CGBN), fișierele de rezultate erau mai întâi sortate crescător și se eliminau duplicatele, apoi și la preluarea în memorie a conținutului lor se făcea o sortare cu filtrare de duplicate, și ceea ce rămânea de prelucrat efectiv pentru verificarea abundențelor era mult, muuult redus față de sutele de mii sau peste un milion de numere, așa că dura mai puțin să aflu dacă mi-au venit numere noi.

Iar cu noua schemă unde se reduceau operațiile și numerele de pornire, chiar și la numere cu mai multe cifre, vedeam că și noile procesoare (mai ales 7950X, că mai mult pe el l-am pus la treabă cu GMP - am avut totuși niște rezultate noi în iarnă și pe 13900KS cu Suprim Liquid) se descurcă bine la căutat numere, iar când dădeam o căutare la GMP cu multe programe deodată, chiar umplând cele 32 de threaduri ale lui 7950X, nici măcar nu se încingea, dar treaba tot o făcea!


A venit și luna februarie 2023, iar în noaptea de 2 spre 3 am mai tras o rundă de căutări numerice la ore târzii, inclusiv cu 13900KS. Dar în general nu stăteam să fac multe ore de lucru cu numerele, eram departe de a mai sta 24/7 la ele, nu reluasem exact comportamentul din 2015-2019. Consumul de curent electric a mai crescut, am avut vreo 2 facturi peste 100 de kilowați pe lună, dar nu mai mult de 110-120. Și nici nu mi-am format un obicei din a sta noapte de noapte nedormit cu numerele, deși opricum am stat nedormit de foarte multe ori și prin 2023 am mai luat niște măsuri să nu mai fac din noapte zi!

2/3 februarie a fost într-adevăr o noapte remarcabilă, aveam 18 numere noi la capătul ei. Am consemnat asta într-un jurnal: cota 31269. Mai dădeam bani pe mâncare, mai mult decât pe curent. După prima săptămână din februarie mai aveam încă 12 numere noi, total 31281. Adică 20 în toată luna ianuarie și alte 30 într-un sfert de februarie, de când cu cea mai nouă reformă numerică și progresul hardware recent.

Tot în februarie 2023 am aflat, după ce deja mai făcusem ce făcusem cu noul progres hardware, că industria calculatoarelor folosite de la distanță (Remote Cloud Computing) s-a dezvoltat și a devenit de domeniul prezentului, fiind loc și pentru configurații de până la șase plăci video 4090, sau (NU împreună cu video-urile) sisteme de CPU cu până la 224 de threaduri. Dar nu am regăsit site-ul cu 4090-uri. În schimb am mai văzut echipamente cu plăci video Tesla de câte 80 de GB, suportau până la opt bucăți, care toate împreună făceau cam 104000 de USD (vreo 13 mi ide dolari bucata). În viața reală, cu tot cu dotările de memorie, CPU, stocare și ce mai trebuie (și foarte probabil mai mult de 1-2 unități centrale, că o singură sursă nu duce atâtea plăci video), un astfel de echipament extrem ar ajunge pe la 120-150 de mii de dolari poate. Mai accesibile la preț cele cu șase 4090-uri (tot rost de vreo două unități centrale) sau cu 224 de threaduri de CPU (cred că Epyc server), dar sigur că nici astea foarte accesibile. În schimb, pe clusterele de remote cluod computing, dacă lucrezi 100-200 de ore și îți faci calculele care sunt de făcut (având grijă să nu pierzi timpul, că se adună la factură), pe un echipament din acela extrem poți plăti 10-15 USD pe oră, dar până în 2000 de dolari cu totul, nu 120000 sau mnai mult. Sau dacă este cu video „mai mici” ori cu 224 de CPU-uri, poți să dai cam 1000 de USD sau chiar mai puțin (câteva sute) și să fii gata, dar nu 30000 sau 50000, adică poți să economisești și 95-99 de procente din cât te-ar costa să îți faci acasă măgăoiul echivalent, mai ales dacă acesta presupune mai multe surse, unități centrale, plăci video, consum de curent (peste 3000 de wați pe oră chiar riști să fii blocat) și... să ocupe o droaie de spațiu! Remote clous computingul salvează bani și ne dă acces pragmatic la putere de calcul mare.

Acasă avem nevoie eventual de ceva decent, mai ieftin și mai mic, ca să accesăm Internetul și acele platforme de remote cloud computing. Nu înseamnă acuma că nu trebuie și acasă ceva modern, cu DDR5 sau chiar DDR6 pe viitor, când or apărea, dar nu mai este nevoie să investim fizic în ceva extrem, când putem economisi prin închirierea pe remote cloud computing. Care poate fi cu ora sau cu luna (de preferat totuși ora). Plus că nici luarea unor astfel de echipamente extrem de puternice de calcul nu se face doar de dragul luatului - trebuie să și ai un scop, precum cel cu lucrul cu numerele, iar o dată ce rezultatele dorite sunt gata, poți să închizi clusterul de remote cloud computing și gata cu banii. Pe câtă vreme dacă ți-ai făcut măgăoi acasă, rămâi cu măgăoiul!

Ori 800 de dolari pe remote cloud computing, ori 40000 pe ditamai configurația acasă! Economia este de 98%. Sugestiv!

Iar dacă nici nu vor mai fi numere pe viitor, ce nevoie de hardware extrem, fie el remote sau nu? Ajungem noi și-acolo.


Și până una-alta, până la 8 februarie 2023 era clar că la CUDA sunt anumite limite, CGBN-ul nu aduce chiar plusul mare de viteză care era de așteptat (dar măcar am încercar ca să mă lămuresc cu partea de video), însă reforma algoritmică a dat loc pentru mai multe descoperiri și, la urmă, și mai rapide! Vedem imediat la ce culme am ajuns în acele zile de februarie.

Comentarii

Postări populare