diff options
| author | silinoron <none@none> | 2010-08-19 16:13:10 -0700 |
|---|---|---|
| committer | silinoron <none@none> | 2010-08-19 16:13:10 -0700 |
| commit | ac59ff802b40f7bfd6b9a774a7cc2438fad99e2b (patch) | |
| tree | b50e32d86c27565b604c0b26331d7a913cc0db52 /src | |
| parent | 21cf500cb1aae38772ff7b3b979fb5ab0a94c119 (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.txt | 2 | ||||
| -rw-r--r-- | src/server/game/Maps/Map.h | 16 | ||||
| -rw-r--r-- | src/server/shared/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/server/shared/Utilities/Util.cpp | 17 | ||||
| -rw-r--r-- | src/server/worldserver/CMakeLists.txt | 2 |
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 |
