Ich habe Code, der eine Menge_ftol2_sse, gibt es schnellere Optionen?
int myNumber = (int)(floatNumber);
nennt, die insgesamt rund 10% meiner CPU-Zeit (nach Profiler) in Anspruch nimmt. Während ich es dabei belassen könnte, frage ich mich, wenn es schnelle Optionen sind, so habe ich versucht, die Suche um und stolperte über
http://devmaster.net/forums/topic/7804-fast-int-float-conversion-routines/ http://stereopsis.com/FPU.html
Ich versuchte, die Real2Int() Funktion implementiert dort gegeben , aber es gibt mir falsche Ergebnisse und läuft langsamer. Nun, ich frage mich, gibt es schnellere Implementierungen, um Double/Float-Werte auf Ganzzahlen zu setzen, oder ist die SSE2-Version so schnell wie es geht? Die Seiten, die ich gefunden habe, stammen ein wenig zurück, also könnte es einfach veraltet sein, und neuere STL sind schneller.
Die aktuelle Implementierung tut:
013B1030 call _ftol2_sse (13B19A0h)
013B19A0 cmp dword ptr [___sse2_available (13B3378h)],0
013B19A7 je _ftol2 (13B19D6h)
013B19A9 push ebp
013B19AA mov ebp,esp
013B19AC sub esp,8
013B19AF and esp,0FFFFFFF8h
013B19B2 fstp qword ptr [esp]
013B19B5 cvttsd2si eax,mmword ptr [esp]
013B19BA leave
013B19BB ret
Verwandte Fragen, die ich gefunden:
Fast float to int conversion and floating point precision on ARM (iPhone 3GS/4)
beide Da sind alt, oder sind ARM-basierte, I frage mich, ob es da ist aktuelle Möglichkeiten, dies zu tun. Beachten Sie, dass es besagt, dass die beste Konvertierung eine ist, die nicht passiert, aber ich muss sie haben, damit das nicht möglich ist.
perfekt, mit x64-Code funktioniert das viel schneller! – SinisterMJ