Videomälu

Videomälu ehk pildimälu ehk VRAM (inglise keele sõnadest "video random-access memory)" on puhvermälu, mis hoiab pildi kõigi pikselite väärtusi. Videomälu kasutavad kõige sagedamini videokaardid, et salvestada iga pikseli väärtust kuvataval pildil, mida videokaart renderdab.
Videomälu eelise teiste mälutüüpide ees annab selle kahepordine omadus. Nimelt saab kahepordieslt mälult samaaegselt andmeid lugeda kui ka sellele kirjutada. Videomälu esineb vaid laienduskaartide näol, see tähendab et integreeritud graafikatehnoloogias ehk CPU-sisestel graafikaprotsessorites eraldi videomälu ei ole. Integreeritud graafika kasutab seadme operatiivmälu. Videomälu on oluliselt kiirema andmeedastusega kui operatiivmälu.
Ajalugu.
Videomälu leiutasid Frederick Dill, Daniel Ling and Richard Matick Thomas J. Watsoni uurimiskeskuses aastal 1980. Esimene kommertsarvuti, mis rakendas videomälu tehnoloogiat, oli 1986-ndal aastal avaldatud . See oli suur edasiminek arvutusgraafika tehnoloogias ning lõi aluse tänapäevastele mäluhaldustehnoloogiatele nagu GDDR ja HBM.
Arhitektuur.
Tööpõhimõte.
Sarnaselt operatiivmälule koosneb videomälu , millest igaüks hoivad endas ühte bitti infot. Kui mälurakule rakendatakse kõrge pinge, loetakse mäluraku väärtust üheks ning pinge puudumisel loetakse see nulliks. Mälurakud on paigaldatud ridadesse ja veergudesse, luues tabelilaadse moodustise. Mälurakkude arv sõltub kiibi tootja ridade ja veergude arvust, kuid üldiselt ulatub see arv mitme miljonini Nt Samsungi KM428C256 videomälu kiibil on 512 x 4096 ehk 2097152 mälurakku. Iga mälurakul on enda aadress, mille abil saab sealt lugeda või sinna kirjutada. See, mitmest bitist koosneb adresseerimisarv, sõltub mälurakkude arvust. Aadressi bitijada pikkust saab tuletada võttes alusega kaks logaritmi selle mälurakkude arvust. Eelnevalt mainitud videomälu kiibil on sellisel juhul tarvis 21-biti pikkust aadressi, et oleks võimalik iga mälurakuga suhelda.
formula_1
Lugemis- ja kirjutamisoperatsioonid.
Et GPU suudaks luua valminud kaadri, küsib see videomälult lugemisoperatsiooniga selleks andmeid. Käsk lugeda videomälult jõuab kontrolleriteni. Neid on kaks: üks lugemisoperatsioonide ning teine kirjutamisoperatsioonide jaoks. Kahe pordi tõttu saavad need operatsioonid paralleelselt toimida ning võimaldab hea kaadrisagedusega piltide renderdamise. 
Aadressi register hoiab operatsiooni vältel algaadressi, millest hakatakse mälurakkudest infot lugema või kirjutama. Aadressi lugerid seejuures suurendavad või vähendavad algaadressit, et minna edasi järgmiste rakkude juurde. Biti maskiregister ("") "katab" ebavajalikud bitid, kui on vaja väga konkreetsetesse kohtadesse lugeda või kirjutada. Ridade ja veergude dekoodrid otsivad üles aadressis kirjeldatud mäluraku lugemsieks ja kirjutamiseks. Pingete värskendaja (")" värskendab regulaarselt mälurakkude pingeid, hoides ühebitiseid rakke kõrgena ja nulliseid madalana. Vastasel juhul võivad ajapikku andmed kaduda. Mälurakke perioodiliselt loetakse üle ning kirjutatakse samad väärtused sisse, et säilitada andmete õigsus. 
GPU poolt kokku kogutud andmed saadetakse kaadripuhvrisse SAM ("Static access memory"). Seal vastab iga kuvatav piksel mingile asukohale puhvri sees. Valminud andmed edastatakse kuvarisse, mis interpreteerib need andmed vaatlejale arusaadavaks pildiks. 
VRAM ribalaius.
Videomälu üheks oluliseks parameetriks on selle ribalaius. Ribalaius iseloomustab videomälu kiipide andmeedastuskiirust. Mida suurem ribalaius on videomälul, seda parem. Ribalaius on oluline parameeter, sest võimas GPU ei saavuta oma maksimaalse efektiivsuse, kui selle pudelikaelaks on videomälu ribalaius. 
Ribalaiust iselmooustavad kolm parameetrit: taktsagedus, mälu tüüp ning andmesiini laius. Taktsagedus on mälukiipide enda sisekell. Mälu tüüp määrab, kuidas andmeid edastatakse. Vanemat sorti videomälu kasutas SDR ("single data rate") tüüpi mälu, mis edastas ühe takti jooksul ühe korra andmeid. Tänapäevased videomälud kasutavad eri põlvkondi DDR ("double data rate") tüüpi mälu, mis suudavad kaks korda andmeid edastada ühe takti jooksul. Andmesiini laius näitab, mitu bitti andmeid saab korraga edastada. Tüüpiliselt on see vahemikus 32 - 256 bitti. Ribalaiust saab arvutada korrutades taktsageduse, mälu tüüpi iseloomustava kordaja (DDR puhul 2, sest edastatakse kaks korda andmeid takti jooksul) ning andmesiini laiuse. 
formula_2
Nt Geforce RTX 4070 puhul on taktsagedus 1313 MHz, mälutüüp GDDR6X ning mälu laius 192 bitti. Sellise kaardi videomälu ribalaius on 1313 x 2 x 192 = 504,2 GB/s.
Andmesiinilt tulevad bitid jaotatakse töötlemiseks võrdselt videomälu moodulite vahel 32-bitisteks osadeks. Sellise seaduspäraga saab arvutada välja videokaardi mälumoodulite arvu. 
formula_3
Geforce RTX 4070 puhul on andmesiini laius 192 bitti. Seega on sellisel videokaardil 192 / 32 = 6 mälumoodulit.
Jõudlus.
Tekstuuri kvaliteet.
Videomängude või muudes arvutigraafika valdkondades on videomälu hulk tähtis renderdamisel. Mida kõrgem on tekstuuride detailsus, seda rohkem videomälu on tarvis, et neid kiiresti kuvada ning heal kaadrisagedusel jooksutada. 
Tihtipeale ei kuvata tekstuure kõige suurema detailsusega kui need asuvad objektidel, mis on vaatlejast kaugemal. Sellist protsessi kutsutakse ja see suurendab graafilise maailma jooksutamise sujuvust. Selle tehnoloogia kasutamiseks on aga tarvis videomälus lisaks kõige kõrgema detailsusega tekstuuride salvestamiseks hoida ka madalama lahutuse ja detailsusega koopiaid samast tekstuurist, mis kokkuvõttes suurendab ka nõutava videomälu kogust.
Kiirtejälitus (Ray tracing).
Videomälu kasutab ka kiirtejälitus. Kiirtejälitus simuleerib arvutigraafikas valguse käitumist, selle langemist ja põrkumist eri pindadelt. Sellega kaasneb rohkete primitiivide genereerimine, mida on vaja hoida videomälus.
Piirangud.
Kõige tüüpilisem probleem videomälu puhul on selle puudujääk. Kui videomälu ei ole piisavalt, peab GPU küsima kaadri kokkupanemsieks vajalikku infot operatiivmälust. Sellepärast on videomälul DRAM pordid, mis toimib tagavara mäluna. 
Operatiivmälu kasutamine aga võtab palju rohkem aega, sest see on loomult aeglasem - sellel on väiksem ribalaius ning see asub füüsiliselt kaugemal GPU-st. Sellise mälu laenamine põhjustab nt videomängudes madalamat kaadrisagedust ja kaadritõrkeid, mis võivad kesta mälu mõistes väga kaua (millisekundid kuni sekundid) ning on piisav, et vaatleja seda muutust tajuks. Samuti võib tekstuuride renderdamine olla vale või üldsegi puududa. Halvimatel juhtudel võib programm ka kokku joosta. 
Paljud videomängud pakuvad sätteid, mis vähendavad videomälu vajadust vähendades tektuuride kvaliteeti, nende lahutust, varjude kvaliteeti, peegeldusi, detailsust jne.