Home » Extra libraries, Code snippets, applications etc. » C++ language problems and code snippets » Time for little quiz!
Re: Time for little quiz! [message #2255 is a reply to message #2253] |
Wed, 05 April 2006 13:14  |
 |
mirek
Messages: 14265 Registered: November 2005
|
Ultimate Member |
|
|
gprentice wrote on Wed, 05 April 2006 06:23 | ok, well sorry to be dumb but ... why do you want to avoid the conditional jump. Why do you think x.colorcount += (-q >> 31) & 1; is going to be more efficient than if(q) colorcount++; (or x.colorcount += bool(q); )
|
Most likely on any CPU since Pentium I: Failed branch prediction causes pipline stall - that is at least 12 CPU cycles wasted (31 on Prescott). Also, jumps cannot be fed to more executional units - while arithmetic ops can be. It is very likely that modern CPU will be doing those colorcount ops in the same time as operations around.
BTW, shifting 31 times is 1 cycle on AMD and PIII/Core/Conroe CPUs (unfortunately, it is more pricey for Netburst, however failed branch prediction is still even more pricey there).
Quote: |
BTW - I was thinking of 64 bit machines (regarding 32 bit ints) - but compilers for 64 bit seem to have standardized on 32 bits for int still?
|
Yes, all major 64 bit CPUs today have 32bit ints. Well, to put it more straight, standard for all C compilers is to use 32 bit ints, other than that they support 8/16/32/64 integer quantities.
The reason is obvious - 32 bits is enough in most cases where integer quantity is to be used and 64 bit ints would eat much more space in data cache. BTW, AMD64 opcodes for 64 bit int operarations are 1 byte longer (they have "use 64 bits" prefix).
All that said, above jump-less technique would work with 64bit int as well.
Mirek
[Updated on: Wed, 05 April 2006 13:14] Report message to a moderator
|
|
|
 |
|
Time for little quiz!
By: mirek on Tue, 04 April 2006 14:02
|
 |
|
Re: Time for little quiz!
By: unodgs on Tue, 04 April 2006 19:12
|
 |
|
Re: Time for little quiz!
|
 |
|
Re: Time for little quiz!
By: fudadmin on Tue, 04 April 2006 20:04
|
 |
|
Re: Time for little quiz!
By: mirek on Tue, 04 April 2006 20:36
|
 |
|
Re: Time for little quiz!
By: victorb on Wed, 05 April 2006 10:21
|
 |
|
Re: Time for little quiz!
By: mirek on Wed, 05 April 2006 10:53
|
 |
|
Re: Time for little quiz!
By: mirek on Wed, 05 April 2006 10:54
|
 |
|
Re: Time for little quiz!
|
 |
|
Re: Time for little quiz!
By: mirek on Wed, 05 April 2006 12:04
|
 |
|
Re: Time for little quiz!
By: hojtsy on Wed, 05 April 2006 14:26
|
 |
|
Re: Time for little quiz!
By: victorb on Wed, 05 April 2006 14:52
|
 |
|
Re: Time for little quiz!
By: mirek on Wed, 05 April 2006 14:56
|
 |
|
Re: Time for little quiz!
By: victorb on Wed, 05 April 2006 15:04
|
 |
|
Re: Time for little quiz!
By: hojtsy on Wed, 05 April 2006 15:50
|
 |
|
Re: Time for little quiz!
By: mirek on Wed, 05 April 2006 17:42
|
 |
|
Re: Time for little quiz!
By: mirek on Wed, 05 April 2006 14:53
|
 |
|
Re: Time for little quiz!
|
 |
|
Re: Time for little quiz!
By: mirek on Thu, 06 April 2006 15:56
|
 |
|
Re: Time for little quiz!
By: victorb on Thu, 06 April 2006 16:17
|
 |
|
Re: Time for little quiz!
By: mirek on Thu, 06 April 2006 16:25
|
 |
|
Re: Time for little quiz!
By: nixnixnix on Tue, 02 September 2008 00:04
|
 |
|
Re: Time for little quiz!
By: mirek on Tue, 02 September 2008 08:56
|
 |
|
Re: Time for little quiz!
By: nixnixnix on Tue, 02 September 2008 21:54
|
 |
|
Re: Time for little quiz!
By: mirek on Wed, 03 September 2008 14:18
|
 |
|
Re: Time for little quiz!
By: nixnixnix on Wed, 03 September 2008 16:38
|
 |
|
Re: Time for little quiz!
By: mrjt on Wed, 03 September 2008 16:51
|
 |
|
Re: Time for little quiz!
By: mirek on Sun, 07 September 2008 10:12
|
 |
|
Re: Time for little quiz!
|
 |
|
Re: Time for little quiz!
By: mirek on Wed, 05 April 2006 13:14
|
Goto Forum:
Current Time: Tue Jul 08 21:39:50 CEST 2025
Total time taken to generate the page: 0.03647 seconds
|