FLOPS

**Ujukomatehete arv sekundis** (inglise *floating point operations per second*, lühend *FLOPs*) on mõõtühik, mida kasutatakse andmetöötluses näitamaks numbriliselt, kui palju aritmeetilisi tehteid ujukomaarvudega suudab tuum, mikroprotsessor või süsteem sekundis teostada. Seda ühikut kasutatakse tihti kõrgjõudlusega andmetöötluses (inglise *high-performance computing*, lühend *HPC*) hindamaks süsteemi teoreetilist maksimaalset jõudlust teadusarvutuslikes rakendustes.

## Mõõte arvutamine
Tavaliselt on mikroprotsessori FLOPs arvutatud järgneva valemiga:

FLOPS_{tuum}={FLOPs \over ts\ddot{u}kkel} \times {ts\ddot{u}klid \over sekund}

Mitme tuumaliste ja mitme pesaliste arhitektuuride tulekuga on valemisse juurde arvestatud ka paralleelarvutuste võimekus:

FLOPS_{s\tilde{o}lm}={FLOPs \over ts\ddot{u}kkel} \times {ts\ddot{u}klid \over sekund} \times {tuumad \over s\tilde{o}lm}

ja süsteemi jaoks:

FLOPS_{s\ddot{u}steem}={FLOPs \over ts\ddot{u}kkel} \times {ts\ddot{u}klid \over sekund} \times {tuumad \over s\tilde{o}lm} \times {s\tilde{o}lmed \over s\ddot{u}steem}

Tänapäeva mikroprotsessorid rakendavad paralleelarvutuste teostamiseks lisaks veel käsustiku laiendusi, mis lubavad ühes käsus teostada rohkem, kui ühe ujukomaarvutuse. Näiteks x86 arhitektuuri AVX (inglise *Advanced Vector Extensions*) ja ARM arhitektuuri SVE (inglise *Scalable Vector Extension*) laiendused. Võttes arvesse käsustiku laiendused saab ühe tuuma jaoks avaldada sellise valemi:

FLOPS_{tuum}={k\ddot{a}sud \over ts\ddot{u}kkel} \times {arvutused \over k\ddot{a}sk} \times {FLOPs \over arvutus} \times {ts\ddot{u}klid \over sekund}

Laiendades valemi terve süsteemi jaoks:

FLOPS_{s\ddot{u}steem}={k\ddot{a}sud \over ts\ddot{u}kkel} \times {arvutused \over k\ddot{a}sk} \times {FLOPs \over arvutus} \times {ts\ddot{u}klid \over sekund} \times {tuumad \over s\tilde{o}lm} \times {s\tilde{o}lmed \over s\ddot{u}steem}

HPC süsteemi FLOPs mõõte arvutamise jaoks on Dr. Mark R. Fernandez välja pakkunud sellise valemi, kus sektsioon sisaldab ühte või rohkem sõlme, sõlm sisaldab ühte või rohkem pesa, ühes pesas on üks protsessor ja protsessoris on üks või rohkem tuuma. Siinjuures sektsioonid on need, millest HPC süsteem koosneb:

FLOPS=sektsioone \times {s\tilde{o}lmed \over sektsioon} \times {pesad \over s\tilde{o}lm} \times {tuumad \over pesa} \times {taktsagedus \over tuum} \times {FLOPs \over ts\ddot{u}kkel}

Kusjuures sisestades taktsageduse gigahertsides on valemi tulemuseks GigaFLOPS ja megahertsides MegaFLOPS.

## Ujukoma arvude esitus
Süsteemi FLOPs mõõtme juures on oluline tähele panna, millise täpsusega ujukoma arve on arvutustes kasutatud. Väiksema täpsusega arve kasutades suudab protsessor sekundis rohkem tehteid teostada ja vastupidi. Ujukoma arvude esitus andmetöötluses on sarnane teadusliku tähistusega, kus mantiss korrutatakse kümnega, mis on omakorda astendatud eksponendiga. Kuid erinevalt teaduslikust tähistusest on kümne asemel aluseks kaks ja opereeritakse kahendsüsteemis. Kõige levinum standard ujukoma arvude esitamiseks andmetöötluses on ANSI/IEEE Std. 754-1985. Selles formaadis on defineeritud 16-bitised ehk poole täpsusega (inglise *half precision*), 32-bitised ehk ühekordse täpsusega (inglise *single precision*) ja 64-bitised ehk topelt täpsusega (inglise *double precision*) ujukoma arvud. Ühekordse täpsusega ujukoma arvus on bitid jaotatud kolme gruppi: bitid 0 kuni 22 moodustavad mantissi, bitid 23 kuni 30 moodustavad eksponendi ja 31 on märgi bit. 

Need bitid moodustavad ujukoma arvu järgneva seosega:

v=(-1)^S \times M \times 2^{E-127}

kus *v* on esitatav number, *S* on märgi biti väärtus, *M* on mantissi väärtus ja *E* on eksponendi väärtus. Poole täpsusega ja kahekordse täpsusega arvudes on bitid jaotatud samamoodi kolme gruppi, erinevad vaid mantissi ja eksponendi jaoks eraldatud bitide arv. Kahekordse täpsusega arvus on mantissi jaoks eraldatud 52 bitti ja eksponendi jaoks 11 bitti, poole täpsusega arvus vastavalt 10 bitti ja 5 bitti. Kõigis kolmes formaadis esitatavate arvude suuruse ulatus ja täpsus on toodud alljärgnevas tabelis.

## Viited