[squeak-dev] The Inbox: Kernel-nice.1293.mcz

Levente Uzonyi leves at caesar.elte.hu
Wed Jan 8 11:52:38 UTC 2020


On Tue, 7 Jan 2020, commits at source.squeak.org wrote:

> Nicolas Cellier uploaded a new version of Kernel to project The Inbox:
> http://source.squeak.org/inbox/Kernel-nice.1293.mcz
>
> ==================== Summary ====================
>
> Name: Kernel-nice.1293
> Author: nice
> Time: 8 January 2020, 12:56:57.717854 am
> UUID: 2a023bb6-8b85-41b9-bc59-fb247fc48658
> Ancestors: Kernel-nice.1292
>
> Connect the highBit primitive provided by new VM.
> Since the primitive is jitted, it's about 3x faster than highBitOfPositiveReceiver.
>
> [0 to: 1<<24 do: #highBit] bench.
> '7.66 per second. 131 milliseconds per run. 0 % GC time.'
> [0 to: 1<<24 do: #highBitOfPositiveReceiver] bench.
> '2.59 per second. 386 milliseconds per run. 0 % GC time.'
>
> It's even a bit faster than highBitOfByte.
>
> [0 to: 255 do: #highBit] bench.
> '472,000 per second. 2.12 microseconds per run. 0 % GC time.'
> [0 to: 255 do: #highBitOfByte] bench.
> '323,000 per second. 3.09 microseconds per run. 0 % GC time.'

Actually, the difference is even greater because if you create a block, 
the send will be properly jitted and you won't be measuring Symbol >> 
#value: and Object >> #perform:. Subtracting the loop overhead, I measued 
9.2x speedup for the first case, and 3.5x speedup for the second case.


Levente

>
> Note: this has been tested on intel x86 and x64 architecture.
> Please report the status on ARM (or mips).
>
> =============== Diff against Kernel-nice.1292 ===============
>
> Item was changed:
>  ----- Method: SmallInteger>>highBit (in category 'bit manipulation') -----
>  highBit
>  	"Answer the index of the high order bit of the receiver, or zero if the
>  	receiver is zero. Raise an error if the receiver is negative, since
>  	negative integers are defined to have an infinite number of leading 1's
>  	in 2's-complement arithmetic. Use >>highBitOfMagnitude if you want to
>  	get the highest bit of the magnitude."
> + 	<primitive: 575>
>  	self < 0 ifTrue: [^ self error: 'highBit is not defined for negative integers'].
>  	^ self highBitOfPositiveReceiver!
>
> Item was changed:
>  ----- Method: SmallInteger>>highBitOfMagnitude (in category 'bit manipulation') -----
>  highBitOfMagnitude
>  	"Answer the index of the high order bit of the receiver, or zero if the
>  	receiver is zero. This method is used for negative SmallIntegers as well,
>  	since Squeak's LargeIntegers are sign/magnitude."
> 
> + 	<primitive: 575>
> + 	self < 0 ifTrue: [^self negated highBit].
> - 	self < 0 ifTrue: [
> - 		"Beware: do not use highBitOfPositiveReceiver
> - 		because self negated is not necessarily a SmallInteger
> - 		(see SmallInteger minVal)"
> - 		^self negated highBitOfMagnitude].
> - 
> - 	"Implementation note: this method could be as well inlined here."
>  	^self highBitOfPositiveReceiver!


More information about the Squeak-dev mailing list