GPU-programmeren
Wat bepaalt hoofdzakelijk de prestaties wanneer op een GPU twee grote arrays elementgewijs worden opgeteld (c[i] = a[i] + b[i])?
- ADe geheugenbandbreedte (omdat per element 12 bytes worden gelezen en geschreven terwijl de berekening slechts één optelling is)
- BHet aantal rekeneenheden
- CAlleen de klokfrequentie
Antwoord en toelichting tonen
Antwoord: A. De geheugenbandbreedte (omdat per element 12 bytes worden gelezen en geschreven terwijl de berekening slechts één optelling is)
Voor één float-optelling worden a en b elk 4 bytes gelezen en wordt c 4 bytes geschreven: 12 bytes overdracht voor één berekening. Een GPU kan per seconde tientallen biljoenen berekeningen uitvoeren, maar de geheugenbandbreedte bedraagt enkele TB/s, dus deze bewerking wordt naar boven begrensd door de bandbreedte. Om zulke bewerkingen te versnellen zijn effectief: het aantal lees- en schrijfacties van data verminderen en meerdere bewerkingen fuseren zodat tussenresultaten niet naar het geheugen worden geschreven.