Remove "fast FPU" build targets
-
- Admin
- Posts: 3590
- Joined: Mon Oct 09, 2006 9:36 am
- Location: Scotland - gonnae no slag aff mah Engleesh
- Contact:
Remove "fast FPU" build targets
We currently have 3 build targets in the Visual Studio and Code::Blocks projects:
Debug
Release (precise)
Release (fast FPU)
The difference between release and release fast FPU is that the "fast" build adds flags to allow less accurate but (ostensibly) faster floating point operations.
However, the difference is (reportedly) marginal, the distinction is not clear, and maintaining these builds takes up time that could be used for other things.
I propose to remove the "fast FPU" targets from all builds, and only maintain debug and release targets. Anyone who wants a "fast" build (and who understands the issues involved) can trivially enable that locally.
Seek your say in the poll, or hereunder.
Debug
Release (precise)
Release (fast FPU)
The difference between release and release fast FPU is that the "fast" build adds flags to allow less accurate but (ostensibly) faster floating point operations.
However, the difference is (reportedly) marginal, the distinction is not clear, and maintaining these builds takes up time that could be used for other things.
I propose to remove the "fast FPU" targets from all builds, and only maintain debug and release targets. Anyone who wants a "fast" build (and who understands the issues involved) can trivially enable that locally.
Seek your say in the poll, or hereunder.
Please upload candidate patches to the tracker.
Need help now? IRC to #irrlicht on irc.freenode.net
How To Ask Questions The Smart Way
Need help now? IRC to #irrlicht on irc.freenode.net
How To Ask Questions The Smart Way
I wouldn't remove an optimization which allowed faster operation of the engine. Not obstant, if it is a source of troubles go ahead, as fas as i know, in GCC compilers is pretty easy to re-enable them if the need arises.
If you have the doubt, it must mean that it really doesn't matter at all to have it there or not, so remove it.
If you have the doubt, it must mean that it really doesn't matter at all to have it there or not, so remove it.
"There is nothing truly useless, it always serves as a bad example". Arthur A. Schmitt
You can never know which target platform would an Irrlicht application run on. It could be a 100 MHZ CPU, integrated graphic card with low mem and 64 MB RAM.Mirror wrote:i vote for removing it. we don't live in 3742BC when we had ancient hardware. there is no need to try milking a fly.
Don't you think such target platform (for example) would need that 'little' optimization?
And what if it doesn't have some cool floating point calculation device (or how ever it's called - like ALU for floating points, I think its FPU -whatever..), in such case floating point optimization would be exactly what it needs.
I guess because Irrlicht isn't just for the current high-end PCs it should not abandon such things.
Unless of course as bitplane said if those optimizations cause bugs and unexpected behaviors, it should be, in my opinion, fixed instead of removed, if possible.
-
- Admin
- Posts: 3590
- Joined: Mon Oct 09, 2006 9:36 am
- Location: Scotland - gonnae no slag aff mah Engleesh
- Contact:
The builds under discussion are Windows MSVC and Linux gcc Code::Blocks builds. What 100MHZ devices are those builds currently being run on?MasterGod wrote:You can never know which target platform would an Irrlicht application run on. It could be a 100 MHZ CPU, integrated graphic card with low mem and 64 MB RAM.
Don't you think such target platform (for example) would need that 'little' optimization?
Please upload candidate patches to the tracker.
Need help now? IRC to #irrlicht on irc.freenode.net
How To Ask Questions The Smart Way
Need help now? IRC to #irrlicht on irc.freenode.net
How To Ask Questions The Smart Way
I vote to remove them. Really, there's no reason to have them there...it's like having separate build targets for -O1, -O2, and -O3 flags: if you know the benefits of one over the other, you're going to know how to enable them
-wyrmmage
-wyrmmage
Worlds at War (Current Project) - http://www.awkward-games.com
Ganadu'r, The Eternal Sage (Other Current Project) - http://rpg.naget.com
Ganadu'r, The Eternal Sage (Other Current Project) - http://rpg.naget.com
You can remove the build target, but please keep the configuration define, there are some very interesting tweaks in there, stuff like fast sqrt, etc. (Tbh that particular example doesn't show any practical improvement, but it IS interesting.)
Also, I would recommend transferring some of the functions over, as some of them are infact faster and cause no inaccuracies, such as the fast floating point rounding which just invokes the fp rounding instruction present on all processors. (It's actually faster and more accurate to round to the nearest integer on modern cpus then to floor). Note I'm talking about cases where you need rounding, not flooring.
Cheers
PS: I voted I am currently using them before I realised you were just talking about the build target which I don't really care about personally.
Also, I would recommend transferring some of the functions over, as some of them are infact faster and cause no inaccuracies, such as the fast floating point rounding which just invokes the fp rounding instruction present on all processors. (It's actually faster and more accurate to round to the nearest integer on modern cpus then to floor). Note I'm talking about cases where you need rounding, not flooring.
Cheers
PS: I voted I am currently using them before I realised you were just talking about the build target which I don't really care about personally.
Last edited by BlindSide on Fri Dec 19, 2008 11:19 am, edited 1 time in total.
ShadowMapping for Irrlicht!: Get it here
Need help? Come on the IRC!: #irrlicht on irc://irc.freenode.net
Need help? Come on the IRC!: #irrlicht on irc://irc.freenode.net
if f = 0.999f would ever give me (int)(f) == 1, it would screw up lots of the logic behind my apps. This is a guarantee of the language, when you convert a float to int, it truncates whatever's after the dot. and floor wouldn't work either, because f = -0.999f gives you (int)(f) == 0, not -1. If I want (int) to round, I'll use the function that does it or write it myself. I don't expect my legacy c or my c++ cast to round.