F
It0101 schrieb:
http://www.univ-orleans.fr/lifo/Members/Sylvain.Jubertie/doc/SIMD/html/group___s_s_ecomparisonops.html
Macht das aus eurer Sicht Sinn, dort Gedanken in Alignments und co zu investieren?
Oder ist die Compiler-Interne Optimierung über die Option "-march=xy" gut genug, so dass sich weitere Aufwände für händische Optimierungen im Quellcode da im Prinzip nicht auszahlen würden?
Hi,
ich wollte dich eigentlich nur auf eine deutlich informativere Referenz für solche Intrinsics auf x86-basierten Systemen hinweisen:
https://software.intel.com/sites/landingpage/IntrinsicsGuide/#cats=Compare&techs=SSE,SSE2
Ob sich das letztendlich lohnt, kann man wohl nur nur sagen, wenn man es mal ausprobiert hat - vielleicht erstmal testweise für ein kleineres Teilproblem, bevor man zu viel Arbeit reinsteckt.
Aus dem Bauch heraus würde ich mich sebi707 anschließen und sagen, dass es sich für komplexere Berechnungen durchaus lohnt. Bei simpleren Sachen - z.B. jeweils eine einzelne Operation,
die man in einer Schleife elementweise auf zwei Arrays durchführt, würde ich davon ausgehen, dass der Compiler das durchaus hinbekommt.
Das wichtigste bei solchen "massenhafen Operationen" dürfte jedoch zunächst einmal sein, dass die Daten, die du da verwurstest, in der Verarbeitungsreihenfolge zusammenhängend im Speicher liegen,
um möglichst optimal vom CPU-Cache zu profitieren. Wenn das nicht der Fall ist, z.B. die Objekte induividuell auf dem Heap angelegt wurden, oder (bei einem zusammenhängenden Array) die Klassen-Member,
auf denen die Operation durchgeführt wird, zu weit auseinander liegen (z.B. weil sich dazwischen noch andere Member befinden, die für die Operation nicht benötigt werden) werden solche Optimierungen
wahrscheinlich keinen Unterschied machen, da die CPU dann die meiste Zeit damit beschäftigt ist, auf den Arbeitsspeicher zu warten.
(letzten Absatz bitte ignorieren, falls das bereits berücksichtigt wurde ;))
Gruss,
Finnegan