Amdahls lag gäller inte * inte * för parallella datorer; Det gäller dem, och det är avgörande för att förstå deras begränsningar. Missförståelsen härrör troligen från människor i hopp om att uppnå obegränsad hastighet med parallellisering. Amdahls lag visar att detta är omöjligt.
Amdahls lag säger att den maximala hastigheten som kan uppnås genom att parallellisera ett program begränsas av den del av programmet som * inte kan * parallella. Låt oss bryta ner det:
* seriell del: Vissa delar av ett program kräver i sig en sekventiell exekvering. Till exempel kan en enda slinga som beror på resultatet av den tidigare iterationen inte parallelliseras effektivt. Detta är bråkdelen av programmet som förblir sekventiell, ofta betecknad som 'f'.
* Parallell del: Detta är bråkdelen av programmet som * kan * parallelliseras, (1 - f).
* Antal processorer: 'n' representerar antalet processorer som används.
Amdahls lagformel:
Speedup =1 / (f + (1 - f) / n)
Varför det är relevant för parallella datorer:
Oavsett hur många processorer ('n') lägger du till, om till och med en liten del av programmet ('f') i sig är sekventiellt, kommer Speedup att begränsas. Till exempel:
* Om 10% av programmet är sekventiellt (F =0,1), även med ett oändligt antal processorer (N närmar sig oändligheten), är den maximala hastigheten bara 1 / 0,1 =10. Du får aldrig en speedup större än 10 gånger, oavsett hur mycket hårdvara du kastar på den.
Därför handlar Amdahls lag inte om parallella datorer * som inte * är föremål för dess principer; Det handlar om att lyfta fram deras inneboende begränsningar i Speedup. Effektiv parallell programmering kräver minimering av den sekventiella delen ('f') för att maximera fördelarna med parallellisering. Att ignorera Amdahls lag leder till orealistiska förväntningar om prestationsvinsten som kan uppnås genom parallell bearbetning.