aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsilinoron <none@none>2010-08-19 16:13:10 -0700
committersilinoron <none@none>2010-08-19 16:13:10 -0700
commitac59ff802b40f7bfd6b9a774a7cc2438fad99e2b (patch)
treeb50e32d86c27565b604c0b26331d7a913cc0db52 /src
parent21cf500cb1aae38772ff7b3b979fb5ab0a94c119 (diff)
Switch to using SIMD-oriented Fast Mersenne Twister for random number generation.
In testing, reduced random number generation time by a factor of 8-10. Drops support for processors older than Pentium 4. Drop Mersenne Twister library; use a C++ SFMT library. --HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/server/game/CMakeLists.txt2
-rw-r--r--src/server/game/Maps/Map.h16
-rw-r--r--src/server/shared/CMakeLists.txt1
-rw-r--r--src/server/shared/Utilities/Util.cpp17
-rw-r--r--src/server/worldserver/CMakeLists.txt2
5 files changed, 18 insertions, 20 deletions
diff --git a/src/server/game/CMakeLists.txt b/src/server/game/CMakeLists.txt
index afe8b61eade..e91d82384b3 100644
--- a/src/server/game/CMakeLists.txt
+++ b/src/server/game/CMakeLists.txt
@@ -98,7 +98,7 @@ set(game_STAT_SRCS
include_directories(
${CMAKE_BINARY_DIR}
- ${CMAKE_SOURCE_DIR}/dep/mersennetwister
+ ${CMAKE_SOURCE_DIR}/dep/SFMT
${CMAKE_SOURCE_DIR}/dep/zlib
${CMAKE_SOURCE_DIR}/src/server/collision
${CMAKE_SOURCE_DIR}/src/server/collision/Management
diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h
index e9ae54b9535..3933b89de89 100644
--- a/src/server/game/Maps/Map.h
+++ b/src/server/game/Maps/Map.h
@@ -32,7 +32,7 @@
#include "SharedDefines.h"
#include "GridRefManager.h"
#include "MapRefManager.h"
-#include "MersenneTwister.h"
+#include "sfmt.h"
#include <bitset>
#include <list>
@@ -427,13 +427,13 @@ class Map : public GridRefManager<NGridType>
void UpdateIteratorBack(Player *player);
#ifdef MAP_BASED_RAND_GEN
- MTRand mtRand;
- int32 irand(int32 min, int32 max) { return int32 (mtRand.randInt(max - min)) + min; }
- uint32 urand(uint32 min, uint32 max) { return mtRand.randInt(max - min) + min; }
- int32 rand32() { return mtRand.randInt(); }
- double rand_norm() { return mtRand.randExc(); }
- double rand_chance() { return mtRand.randExc(100.0); }
-#endif
+ SFMTRand sfmtRand;
+ int32 irand(int32 min, int32 max) { return int32(sfmtRand.IRandom(min, max)); }
+ uint32 urand(uint32 min, uint32 max) { return uint32(sfmtRand.URandom(min, max)); }
+ int32 rand32() { return int32(sfmtRand.BRandom()); }
+ double rand_norm() { return sfmtRand.Random(); }
+ double rand_chance() { return sfmtRand.Random() * 100.0; }
+#endif // MAP_BASED_RAND_GEN
TempSummon *SummonCreature(uint32 entry, const Position &pos, SummonPropertiesEntry const *properties = NULL, uint32 duration = 0, Unit *summoner = NULL, uint32 vehId = 0);
Creature* GetCreature(uint64 guid);
diff --git a/src/server/shared/CMakeLists.txt b/src/server/shared/CMakeLists.txt
index 7af5f3ebd83..c2a35117686 100644
--- a/src/server/shared/CMakeLists.txt
+++ b/src/server/shared/CMakeLists.txt
@@ -52,7 +52,6 @@ set(shared_STAT_SRCS
include_directories(
${CMAKE_BINARY_DIR}
- ${CMAKE_SOURCE_DIR}/dep/mersennetwister
${CMAKE_SOURCE_DIR}/dep/SFMT
${CMAKE_SOURCE_DIR}/dep/sockets/include
${CMAKE_SOURCE_DIR}/dep/utf8cpp
diff --git a/src/server/shared/Utilities/Util.cpp b/src/server/shared/Utilities/Util.cpp
index 97dfde6c92b..56922651331 100644
--- a/src/server/shared/Utilities/Util.cpp
+++ b/src/server/shared/Utilities/Util.cpp
@@ -22,36 +22,35 @@
#include "socket_include.h"
#include "utf8.h"
-//#include "SFMT.h"
-#include "MersenneTwister.h"
+#include "sfmt.h"
#include <ace/TSS_T.h>
-typedef ACE_TSS<MTRand> MTRandTSS;
-static MTRandTSS mtRand;
+typedef ACE_TSS<SFMTRand> SFMTRandTSS;
+static SFMTRandTSS sfmtRand;
int32 irand (int32 min, int32 max)
{
- return int32 (mtRand->randInt (max - min)) + min;
+ return int32(sfmtRand->IRandom(min, max));
}
uint32 urand (uint32 min, uint32 max)
{
- return mtRand->randInt (max - min) + min;
+ return sfmtRand->URandom(min, max);
}
int32 rand32 ()
{
- return mtRand->randInt ();
+ return int32(sfmtRand->BRandom());
}
double rand_norm(void)
{
- return mtRand->randExc ();
+ return sfmtRand->Random();
}
double rand_chance (void)
{
- return mtRand->randExc (100.0);
+ return sfmtRand->Random() * 100.0;
}
Tokens StrSplit(const std::string &src, const std::string &sep)
diff --git a/src/server/worldserver/CMakeLists.txt b/src/server/worldserver/CMakeLists.txt
index 7928fd79095..2fe5d3310a8 100644
--- a/src/server/worldserver/CMakeLists.txt
+++ b/src/server/worldserver/CMakeLists.txt
@@ -46,7 +46,7 @@ include_directories(
${CMAKE_BINARY_DIR}
${CMAKE_SOURCE_DIR}/dep/gsoap
${CMAKE_SOURCE_DIR}/dep/sockets/include
- ${CMAKE_SOURCE_DIR}/dep/mersennetwister
+ ${CMAKE_SOURCE_DIR}/dep/sfmt
${CMAKE_SOURCE_DIR}/src/server/collision
${CMAKE_SOURCE_DIR}/src/server/collision/Management
${CMAKE_SOURCE_DIR}/src/server/shared