Idézet: Abu85 - Dátum: 2011. 12. 05. 10:39
A Frostbite 2 motorját nem készítették fel a HyperThreadingre. Nem tudni, hogy miért. Lehet, hogy azért, mert egy célirányú kód lassított volna a nem HyperThreadinges procikon, vagy szimplán nem vették észre a fejlesztők, hogy ilyen. A lényeg, hogy a hiba jellege a HyperThreading működéséből adódik, ezért általános a probléma, csak éppen a fejlesztők figyelhetnek rá. Nem a programkóddal van a baj, mert az csak azt csinálja, amit kell, de egy magon belül két szál egymástól veszi el az erőforrásokat. Ezért kell a HyperThreadingre célirányos optimalizálás, különben minél több szálat kezel a motor, annál nagyobb bajt csinál a technológia.
Maga a jelenség egyébként régóta ismert. Konkrét optimalizációs útmutatások is vannak rá. Amikor a HyperThreadinges procin futtatsz egy programot, az is így működik. A helyzet viszont az, hogy a játék valós időben ad számodra visszajelzést, így a HyperThreading működését érzed, ha azt a fejlesztő nem tudja valami workarounddal elfedni. Amíg a program 2-4 szálat kezelt addig ennek nem volt olyan nagy szerepe, mert aránylag könnyű volt vele bánni, de 8-12 szálat kezelő motoroknál (lásd Frostbite 2) egyre erősebbel megmutatkozik a HyperThreading működésének jellege. Ezt elfedni nagyon nehéz. Láttunk már olyan motort, ahol a HyperThreading lassított. Pont azért működik így a rendszer, mert a lassítás a mellékhatása a célirányos optimalizálásnak. A legjobb megoldás az lenne, ha a HyperThreading igény szerint kikapcsolható lenne, valós időben, de ezt nyilván egyszerűbb mondani, mint megvalósítani.
Igen, ezt én is megfigyeltem, hogy ht-s processzorokon egy kernel fordítás is picivel több időbe telik, ha több szálon mehet a fordító, mint ahány fizikai mag van. PEdig azt várnánk, hogy inkább kevesebb időnek kellene lennie.
Ez azért lehet, mert a CPU átkapcsolása egyik logikai magról a másikra bizonyára nem 0 időbe telik. A ht meg csak azt használja ki pluszban, amíg az egyik logikai mag I/O-ra vár.
Így ha szerencsétlen esetben kevés az I/O, és sok a váltás a logikai magok között, akkor a váltásokkal több időt emésztenek fel, mint amit az I/O-ra várakozás elvitt volna.
Idézet: Abu85 - Dátum: 2011. 12. 05. 10:39
Az OS-en belül is komoly implementáció kell ehhez.
Az OS-en belül annyi kell, hogy a CPU-k egyik logikai magját nem használjuk, és kész.
Linuxban és a Windows szerver változataiban nem muszáj fixnek lenni a CPU-k számának: lehet akár fizikailag is kivenni/betenni CPU-t menet közben. (Persze ehhez olyan vas kell, ami ezt tudja)