sfmt uses some simd now
parent
926ed2d5e1
commit
b8e5e84df3
|
@ -2,7 +2,7 @@
|
|||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors alien.c-types kernel locals math math.ranges
|
||||
math.bitwise math.vectors math.vectors.simd random
|
||||
sequences specialized-arrays ;
|
||||
sequences specialized-arrays sequences.private ;
|
||||
IN: random.sfmt
|
||||
|
||||
SIMD: uint
|
||||
|
@ -16,7 +16,8 @@ CONSTANT: state-multiplier 1812433253
|
|||
|
||||
TUPLE: sfmt
|
||||
sl1 sl2 sr1 sr2 mask parity
|
||||
{ seed integer } { n fixnum } { m fixnum }
|
||||
{ r1 uint-4 } { r2 uint-4 }
|
||||
{ seed fixnum } { n fixnum } { m fixnum }
|
||||
{ m-n fixnum } { ix fixnum } { state uint-4-array } ;
|
||||
|
||||
: init-state ( sfmt -- sfmt' )
|
||||
|
@ -51,36 +52,32 @@ sl1 sl2 sr1 sr2 mask parity
|
|||
GENERIC: generate ( sfmt -- sfmt' )
|
||||
|
||||
M:: sfmt generate ( sfmt -- sfmt' )
|
||||
sfmt n>> 2 - sfmt state>> nth :> r1!
|
||||
sfmt n>> 1 - sfmt state>> nth :> r2!
|
||||
0 :> r!
|
||||
0 :> i!
|
||||
sfmt state>> :> state
|
||||
sfmt n>> 2 - state nth-unsafe sfmt (>>r1)
|
||||
sfmt n>> 1 - state nth-unsafe sfmt (>>r2)
|
||||
sfmt m>> :> m
|
||||
sfmt n>> :> n
|
||||
sfmt m-n>> :> m-n
|
||||
sfmt mask>> :> mask
|
||||
sfmt state>> :> state
|
||||
|
||||
n m - iota [
|
||||
i!
|
||||
i state nth
|
||||
i m + state nth
|
||||
mask r1 r2 formula r!
|
||||
n m - iota [| i |
|
||||
i state nth-unsafe
|
||||
i m + state nth-unsafe
|
||||
mask sfmt r1>> sfmt r2>> formula :> r
|
||||
|
||||
r i state set-nth
|
||||
r2 r1!
|
||||
r r2!
|
||||
r i state set-nth-unsafe
|
||||
sfmt r2>> sfmt (>>r1)
|
||||
r sfmt (>>r2)
|
||||
] each
|
||||
|
||||
n m - 1 + n [a,b) [
|
||||
i!
|
||||
i state nth
|
||||
m-n i + state nth
|
||||
mask r1 r2 formula r!
|
||||
n m - 1 + n [a,b) [| i |
|
||||
i state nth-unsafe
|
||||
m-n i + state nth-unsafe
|
||||
mask sfmt r1>> sfmt r2>> formula :> r
|
||||
|
||||
r i state set-nth
|
||||
r2 r1!
|
||||
r r2!
|
||||
r i state set-nth-unsafe
|
||||
sfmt r2>> sfmt (>>r1)
|
||||
r sfmt (>>r2)
|
||||
] each
|
||||
|
||||
sfmt 0 >>ix ;
|
||||
|
|
Loading…
Reference in New Issue