Hoe bereken je geheugenbandbreedte?
GenAI toepassingen hebben een grote hoeveelheid snel werkgeheugen nodig. Grafische kaarten hebben snel werkgeheugen. Tegenwoordig zijn er ook SoCs met geïntegreerd werkgeheugen en een hoge geheugenbandbreedte. De duurdere uitvoeringen van de M-chips van Apple zijn een bekend voorbeeld. Standaard PC-werkgeheugen, op moment van schrijven is dat meestal DDR4 of DDR5-geheugen in een dual channel configuratie, is een stuk langzamer.
Om een gevoel te krijgen waar die verschillen vandaan komen, ben ik een keer de diepte in gedoken. Ik wilde begrijpen hoe zo’n bandbreedte tot stand komt, dus welke parameters er zijn, en hoe die de snelheid beïnvloeden. In deze post deel ik mijn bevindingen.
Formule
Ik kwam uit op de volgende formule om de bandbreedte van werkgeheugen te berekenen:
\[ \text{bandbreedte} = \text{kanalen} \times \text{busbreedte} \times \text{bussnelheid} \]Met daarbij de volgende definities:
- Busbreedte: Het aantal bits dat tegelijk in de bus past.
- Bussnelheid: De kloksnelheid van de bus. Met elke tik wordt de bus in de gehele breedte overgedragen. Dit wordt vaak uitgedrukt in Megatransfers per seconde (MT/s).
- Kanalen: De hoeveelheid bussen. Over het algemeen hebben al deze bussen dezelfde breedte en snelheid.
Geheugenconfiguraties
Hoe je specificaties van een apparaat moet vertalen naar de bovenstaande formule, verschilt. Onderstaand wordt dit voor enkele systeemtypes toegelicht.
PC
Consumenten-PC’s gebruiken eigenlijk altijd DDR-geheugen. Standaard DIMM- en SO-DIMM-modules die in zelfbouw-PC’s en sommige laptops worden gebruikt, hebben altijd een 64 bits geheugenbus. Tegenwoordig wordt de bussnelheid van DDR-geheugen in MT/s uitgedrukt. Als je DDR5-6000 werkgeheugen koopt, krijg je bijv. werkgeheugen met een bussnelheid van 6000MT/s.
Consumentenmoederborden hebben over het algemeen ondersteuning voor twee geheugenkanalen. Op servergebied ondersteunt AMD met de laatste generaties Epyc-processors inmiddels al twaalf kanalen.
DDR5
De marketing rondom DDR5-geheugen is soms verwarrend. DDR5 heeft intern twee 32-bits kanalen, waardoor men soms zegt dat DDR5 uit zichzelf al dual channel is. Effectief gedraagt DDR5 zich nog steeds als geheugen met een 64-bits busbreedte. De definitie van dual channel in moederborden is niet gewijzigd: om dual channel DDR5 te gebruiken, moeten nog steeds twee identieke DIMM’s in een moederbord geplaatst worden.
Voorbeeldberekening
Als voorbeeld nemen we dual channel DDR5-6000 werkgeheugen.
- Busbreedte: 64 bits
- Bussnelheid: 6000 MT/s
- Kanalen: 2
Daarmee komen we op volgende bandbreedte uit:
\[ \begin{aligned} \text{bandbreedte} & = \text{kanalen} \times \text{busbreedte} \times \text{bussnelheid} \\ & = 2~\text{kanalen} \times 64~\text{b}\ \times 6.000.000.000~\text{T/s} \\ & = 768.000.000.000~\text{b/s} \\ & = 96~\text{GB/s} \end{aligned} \]Grafische kaarten
De busbreedte bij grafische kaarten varieert flink: 128 bits bij instapmodellen, 512 bits bij de topmodellen (op moment van schrijven). De bussnelheid wordt meestal “effective memory clock” genoemd, en wordt uitgedrukt in Gbps. In de context van onze formule is 1 Gbps gelijk aan 1GT/s, oftewel 1000MT/s. Grafische kaarten hebben altijd één geheugenkanaal.
Voorbeeldberekening
- Busbreedte: 192 bits
- Bussnelheid: 15 Gbps = 15000 MT/s
- Kanalen: 1
Daarmee komen we op volgende bandbreedte uit:
\[ \begin{aligned} \text{bandbreedte} & = \text{kanalen} \times \text{busbreedte} \times \text{bussnelheid} \\ & = 1~\text{kanaal} \times 192~\text{b}\ \times 15.000.000.000~\text{T/s} \\ & = 2.880.000.000.000~\text{b/s} \\ & = 360~\text{GB/s} \end{aligned} \]Apple M1
De Apple M1 SoC is net een grafische kaart. Altijd één geheugenkanaal, variabele busbreedte. Apple gebruikt LPDDR-geheugen, waar we gemakkelijk de bussnelheid uit kunnen afleiden.
Voorbeeldberekening
- Busbreedte: 128 bits
- Bussnelheid: 4266 MT/s
- Kanalen: 1
Daarmee komen we op volgende bandbreedte uit:
\[ \begin{aligned} \text{bandbreedte} & = \text{kanalen} \times \text{busbreedte} \times \text{bussnelheid} \\ & = 1~\text{kanaal} \times 128~\text{b}\ \times 4.266.000.000~\text{T/s} \\ & = 546.048.000.000~\text{b/s} \\ & \approx 68,3~\text{GB/s} \end{aligned} \]Apple M2 en nieuwer
Apple gebruikt net als in de M1 LPDDR-geheugen waarvan de bussnelheid in MT/s wordt uitgedrukt. Vanaf de M2 gebruikt Apple “memory controllers”. Het aantal memory controllers is variabel, duurdere modellen hebben er meer dan de instapmodellen. Elke memory controller heeft een eigen 16-bits bus. Voor de berekening beschouwen we memory controllers als kanalen, elk met een 16-bits bus. Voor zover ik het begrijp, zit er technisch wel een verschil tussen kanalen en memory controllers.
Voorbeeldberekening
- Busbreedte: 16 bits
- Bussnelheid: 8533 MT/s
- Kanalen: 16
Daarmee komen we op volgende bandbreedte uit:
\[ \begin{aligned} \text{bandbreedte} & = \text{kanalen} \times \text{busbreedte} \times \text{bussnelheid} \\ & = 16~\text{kanaal} \times 16~\text{b}\ \times 8.533.000.000~\text{T/s} \\ & = 2.184.448.000.000~\text{b/s} \\ & \approx 273~\text{GB/s} \end{aligned} \]Voorbeelden
Hieronder een lijst van de snelheden van verschillende soorten configuraties, gesorteerd van snel naar langzaam.
Configuratie | Bandbreedte |
---|---|
NVIDIA GeForce RTX 5090 | 1792 GB/s |
NVIDIA GeForce RTX 3090 | 936 GB/s |
Apple M3 Ultra | 819,2 GB/s |
NVIDIA GeForce RTX 2080 | 672 GB/s |
DDR5-6400 (12 kanalen) | 614,4 GB/s |
Apple M4 Max (12-core) | 546,1 GB/s |
NVIDIA GeForce RTX 3060 | 360 GB/s |
NVIDIA GeForce RTX 4060 Ti | 288 GB/s |
Apple M4 Pro | 273,1 GB/s |
Apple M4 | 120 GB/s |
DDR5-6000 (2 kanalen) | 96 GB/s |
Apple M1 | 68,3 GB/s |
DDR4-3600 (2 kanalen) | 57,6 GB/s |
#Genai #Llm #Memory #Werkgeheugen #RAM #Bandbreedte #Busbreedte #Data Rate