Da malo ozivim temu,
Naleteh na interesantnu stvar vezanu za Skylake arhitekturu (@edit - izgleda problem kaci i Skylake, ne samo Skylake SP):
https://aloiskraus.wordpress.c...ntel-has-broken-existing-code/
Citat:
Why Skylake CPUs Are Sometimes 50% Slower – How Intel Has Broken Existing Code
TL;DR: Pause instrukcija na Skylake arhitekturi traje ~10x vise ciklusa!!!
Pause instrukcija se cesto koristi za tzv. "busy waiting" npr. u spinlock-ovima, gde nit koji se izvrsava ceka na nesto ali se ne zeli dati kontrola OS scheduler-u zbog latencije koja bi usledila ako bi scheduler suspendovao nit. Pause instrukcija daje nagovestaj procesoru da trenutna nit ne radi nista pametno osim cekanja, tako da procesor moze da optimizuje potrosnju energije i optimizuje izvrsavanje.
Idealno, takvi konstrukti ne bi uopste trebalo da se koriste u korisnickom kodu vec samo u kernelu i drajverima (a i tu bi trebalo da ih ima sto manje). Ovoj instrukciji je mesto samo tamo gde se vreme cekanja meri nanosekundama.
Naravno, praksa je daleko od idealnog, pa je svet pun loseg userland multithreading koda sa nitima koje koriste busy-wait zato sto programer nije umeo bolje.
Sta je ovde problem?
Problem je sto se neke implementacije oslanjaju na konkretno ponasanje pause instrukcije koja je
do Skylake arhitekture trajala nekoliko ciklusa, dok je Skylake latencija drasticno porasla:
http://www.agner.org/optimize/instruction_tables.pdf
Citat:
Sandy Bridge 11
Ivy Bridege 10
Haswell 9
Broadwell 9
SkylakeX 141
(Los) kod koji se oslanja na pretpostavku da pause instrukcija traje ~10-tak ciklusa moze imati probleme na Skylake arhitekturi koji mogu biti drasticno losije performanse (50% u primeru) pa sve do izlazenja na videlo bagova koji su bili maskirani brzinom izvrsavanja u predhodnim generacijama procesora.
Naravno, optimalno resenje je eliminacija busy-wait konstrukata iz userspace koda i kernel kod koji je optimizovan za svaku platformu.
Na zalost, realnost je drugacija i verovatno ce biti puno ovakvih primera.
[Ovu poruku je menjao Ivan Dimkovic dana 21.06.2018. u 10:15 GMT+1]
DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos:
http://www.digicortex.net/node/17 Gallery:
http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! -
https://github.com/psyq321/PowerMonkey