--User changes

-Improve performance in the following variations: cpow2, dc_cube, julia3d, julia3dz, julian2, log_db, nblur, npolar, waffle, wavesn, xtrb.

--Code changes
 -Rand range now uses multiply + shift rather than modulo.
This commit is contained in:
Person
2019-07-24 18:29:33 -07:00
parent 1cafbb8837
commit 4a150132e1
9 changed files with 108 additions and 66 deletions

View File

@ -148,9 +148,9 @@ public:
/// </summary>
/// <param name="upper">A value one greater than the maximum value that will be returned</param>
/// <returns>A value between 0 and the value passed in minus 1</returns>
inline T Rand(T upper)
inline T Rand(size_t upper)
{
return (upper == 0) ? Rand() : Rand() % upper;
return (upper == 0) ? Rand() : T(((size_t)Rand() * upper) >> 32);
}
/// <summary>
@ -158,7 +158,7 @@ public:
/// </summary>
/// <param name="upper">A value one greater than the maximum value that will be returned</param>
/// <returns>A value between 0 and the value passed in minus 1</returns>
static inline T LockedRand(T upper)
static inline T LockedRand(size_t upper)
{
rlg l(*s_CS.get());
T t = GlobalRand->Rand(upper);
@ -420,14 +420,14 @@ protected:
{
#ifndef __ISAAC64
RngStep((a << 13), a, b, mm, m, m2, r, x, y);
RngStep((a >> 6) , a, b, mm, m, m2, r, x, y);
RngStep((a << 2) , a, b, mm, m, m2, r, x, y);
RngStep((a >> 6), a, b, mm, m, m2, r, x, y);
RngStep((a << 2), a, b, mm, m, m2, r, x, y);
RngStep((a >> 16), a, b, mm, m, m2, r, x, y);
#else // __ISAAC64
RngStep(~(a ^ (a << 21)), a, b, mm, m, m2, r, x, y);
RngStep( a ^ (a >> 5) , a, b, mm, m, m2, r, x, y);
RngStep( a ^ (a << 12) , a, b, mm, m, m2, r, x, y);
RngStep( a ^ (a >> 33) , a, b, mm, m, m2, r, x, y);
RngStep( a ^ (a >> 5), a, b, mm, m, m2, r, x, y);
RngStep( a ^ (a << 12), a, b, mm, m, m2, r, x, y);
RngStep( a ^ (a >> 33), a, b, mm, m, m2, r, x, y);
#endif // __ISAAC64
}
@ -437,14 +437,14 @@ protected:
{
#ifndef __ISAAC64
RngStep((a << 13), a, b, mm, m, m2, r, x, y);
RngStep((a >> 6) , a, b, mm, m, m2, r, x, y);
RngStep((a << 2) , a, b, mm, m, m2, r, x, y);
RngStep((a >> 6), a, b, mm, m, m2, r, x, y);
RngStep((a << 2), a, b, mm, m, m2, r, x, y);
RngStep((a >> 16), a, b, mm, m, m2, r, x, y);
#else // __ISAAC64
RngStep(~(a ^ (a << 21)), a, b, mm, m, m2, r, x, y);
RngStep( a ^ (a >> 5) , a, b, mm, m, m2, r, x, y);
RngStep( a ^ (a << 12) , a, b, mm, m, m2, r, x, y);
RngStep( a ^ (a >> 33) , a, b, mm, m, m2, r, x, y);
RngStep( a ^ (a >> 5), a, b, mm, m, m2, r, x, y);
RngStep( a ^ (a << 12), a, b, mm, m, m2, r, x, y);
RngStep( a ^ (a >> 33), a, b, mm, m, m2, r, x, y);
#endif // __ISAAC64
}