Mam kod, który wywołuje wiele_ftol2_sse, czy są szybsze opcje?
int myNumber = (int)(floatNumber);
który odbywa się w sumie około 10% mojego czasu procesora (zgodnie z profilera). O ile mogłem pozostawić go na tym, zastanawiam się, czy są szybsze opcje, więc próbowałem wyszukiwanie wokół, i natknęliśmy się na
http://devmaster.net/forums/topic/7804-fast-int-float-conversion-routines/ http://stereopsis.com/FPU.html
Próbowałem realizacji funkcji podane tam Real2Int() , ale daje złe wyniki i działa wolniej. Teraz zastanawiam się, czy istnieją szybsze implementacje wartości double/float floor do liczb całkowitych, czy też wersja SSE2 jest tak szybka, jak to tylko możliwe? Strony, które znalazłem, są trochę aktualne, więc może to być po prostu nieaktualne, a nowsze STL są szybsze.
Obecna implementacja robi:
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
Podobne pytania znalazłem:
Fast float to int conversion and floating point precision on ARM (iPhone 3GS/4)
Ponieważ oba są stare, lub są ARM, I Zastanawiam się, czy są aktualne sposoby na zrobienie tego. Zauważ, że mówi, że najlepszą konwersją jest ta, która się nie zdarza, ale muszę ją mieć, aby nie było to możliwe.
idealny, kod x64 działa znacznie szybciej! – SinisterMJ