aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/game/CMakeLists.txt2
-rw-r--r--src/game/MapManager.cpp35
-rw-r--r--src/game/Unit.cpp1
-rw-r--r--src/game/World.cpp3
-rw-r--r--src/game/World.h2
-rw-r--r--src/shared/CMakeLists.txt2
-rw-r--r--src/shared/Util.cpp35
-rw-r--r--src/trinitycore/CMakeLists.txt1
-rw-r--r--src/trinitycore/trinitycore.conf.dist5
-rw-r--r--src/trinityrealm/CMakeLists.txt1
-rw-r--r--win/VC80/game.vcproj8
-rw-r--r--win/VC80/shared.vcproj8
-rw-r--r--win/VC90/game.vcproj8
-rw-r--r--win/VC90/shared.vcproj8
14 files changed, 90 insertions, 29 deletions
diff --git a/src/game/CMakeLists.txt b/src/game/CMakeLists.txt
index 621ce3def3e..6bd3c740af7 100644
--- a/src/game/CMakeLists.txt
+++ b/src/game/CMakeLists.txt
@@ -265,6 +265,6 @@ SET(game_STAT_SRCS
GroupReference.h
GroupRefManager.h
)
-
+add_definitions(-fopenmp)
add_library(game STATIC ${game_STAT_SRCS})
ADD_DEPENDENCIES(game revision.h)
diff --git a/src/game/MapManager.cpp b/src/game/MapManager.cpp
index 6a8cd130691..5a66ab6cea8 100644
--- a/src/game/MapManager.cpp
+++ b/src/game/MapManager.cpp
@@ -18,6 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+#include <omp.h>
#include "MapManager.h"
#include "InstanceSaveMgr.h"
#include "Policies/SingletonImp.h"
@@ -248,12 +249,25 @@ MapManager::Update(time_t diff)
ObjectAccessor::Instance().UpdatePlayers(i_timer.GetCurrent());
sWorld.RecordTimeDiff("UpdatePlayers");
-
- for(MapMapType::iterator iter=i_maps.begin(); iter != i_maps.end(); ++iter)
+ uint32 i=0;
+ MapMapType::iterator iter;
+ std::vector<Map*> update_queue(i_maps.size());
+ omp_set_num_threads(sWorld.getConfig(CONFIG_NUMTHREADS));
+ for(iter = i_maps.begin(), i=0;iter != i_maps.end(); ++iter, i++)
+ update_queue[i]=iter->second;
+/*
+ gomp in gcc <4.4 version cannot parallelise loops using random access iterators
+ so until gcc 4.4 isnt standard, we need the update_queue workaround
+*/
+
+#pragma omp parallel for schedule(dynamic) private(i) shared(update_queue)
+ for(int32 i = 0; i < i_maps.size(); ++i)
{
checkAndCorrectGridStatesArray(); // debugging code, should be deleted some day
- iter->second->Update(i_timer.GetCurrent());
- sWorld.RecordTimeDiff("UpdateMap %u", iter->second->GetId());
+ update_queue[i]->Update(i_timer.GetCurrent());
+ sWorld.RecordTimeDiff("UpdateMap %u", update_queue[i]->GetId());
+ // sLog.outError("This is thread %d out of %d threads,updating map %u",omp_get_thread_num(),omp_get_num_threads(),iter->second->GetId());
+
}
ObjectAccessor::Instance().Update(i_timer.GetCurrent());
@@ -267,8 +281,17 @@ MapManager::Update(time_t diff)
void MapManager::DoDelayedMovesAndRemoves()
{
- for(MapMapType::iterator iter=i_maps.begin(); iter != i_maps.end(); ++iter)
- iter->second->DoDelayedMovesAndRemoves();
+ int i =0;
+ std::vector<Map*> update_queue(i_maps.size());
+ MapMapType::iterator iter;
+ for(iter = i_maps.begin();iter != i_maps.end(); ++iter, i++)
+ update_queue[i] = iter->second;
+
+ omp_set_num_threads(sWorld.getConfig(CONFIG_NUMTHREADS));
+
+#pragma omp parallel for schedule(dynamic) private(i) shared(update_queue)
+ for(i=0;i<i_maps.size();i++)
+ update_queue[i]->DoDelayedMovesAndRemoves();
}
bool MapManager::ExistMapAndVMap(uint32 mapid, float x,float y)
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index e07b2aef98a..23cde7b2fc6 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -18,6 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+#include <omp.h>
#include "Common.h"
#include "Log.h"
#include "Opcodes.h"
diff --git a/src/game/World.cpp b/src/game/World.cpp
index c0f815e8888..fb8d78fe0af 100644
--- a/src/game/World.cpp
+++ b/src/game/World.cpp
@@ -1029,6 +1029,7 @@ void World::LoadConfigSettings(bool reload)
m_configs[CONFIG_SHOW_KICK_IN_WORLD] = sConfig.GetBoolDefault("ShowKickInWorld", false);
m_configs[CONFIG_INTERVAL_LOG_UPDATE] = sConfig.GetIntDefault("RecordUpdateTimeDiffInterval", 60000);
m_configs[CONFIG_MIN_LOG_UPDATE] = sConfig.GetIntDefault("MinRecordUpdateTimeDiff", 10);
+ m_configs[CONFIG_NUMTHREADS] = sConfig.GetIntDefault("MapUpdate.Threads",1);
std::string forbiddenmaps = sConfig.GetStringDefault("ForbiddenMaps", "");
char * forbiddenMaps = new char[forbiddenmaps.length() + 1];
@@ -1596,8 +1597,10 @@ void World::Update(time_t diff)
sBattleGroundMgr.Update(diff);
RecordTimeDiff("UpdateBattleGroundMgr");
+
sOutdoorPvPMgr.Update(diff);
RecordTimeDiff("UpdateOutdoorPvPMgr");
+
}
RecordTimeDiff(NULL);
diff --git a/src/game/World.h b/src/game/World.h
index 32af277c8f5..1badcb36054 100644
--- a/src/game/World.h
+++ b/src/game/World.h
@@ -208,6 +208,8 @@ enum WorldConfigs
CONFIG_ENABLE_SINFO_LOGIN,
CONFIG_PREMATURE_BG_REWARD,
CONFIG_PET_LOS,
+ CONFIG_NUMTHREADS,
+
CONFIG_VALUE_COUNT
};
diff --git a/src/shared/CMakeLists.txt b/src/shared/CMakeLists.txt
index 36d65544d3c..9205f145e48 100644
--- a/src/shared/CMakeLists.txt
+++ b/src/shared/CMakeLists.txt
@@ -24,5 +24,5 @@ SET(shared_STAT_SRCS
WorldPacket.h
SystemConfig.h
)
-
+add_definitions(-fopenmp)
add_library(shared STATIC ${shared_STAT_SRCS})
diff --git a/src/shared/Util.cpp b/src/shared/Util.cpp
index 26d2275ec2a..4624cacfde7 100644
--- a/src/shared/Util.cpp
+++ b/src/shared/Util.cpp
@@ -36,27 +36,52 @@ static MTRandTSS mtRand;
int32 irand (int32 min, int32 max)
{
- return int32 (mtRand.get ().randInt (max - min)) + min;
+ int32 result;
+#pragma omp critical (mtrand)
+{
+ result = mtRand.get ().randInt (max-min) + min;
+}
+ return result;
}
uint32 urand (uint32 min, uint32 max)
{
- return mtRand.get ().randInt (max - min) + min;
+ uint32 result;
+#pragma omp critical (mtrand)
+{
+ result = mtRand.get ().randInt (max - min) + min;
+}
+ return result;
}
int32 rand32 ()
{
- return mtRand.get ().randInt ();
+ int32 result;
+#pragma omp critical (mtrand)
+{
+ result = mtRand.get ().randInt ();
+}
+ return result;
}
double rand_norm(void)
{
- return mtRand.get ().randExc ();
+ double result;
+#pragma omp critical (mtrand)
+{
+ result = mtRand.get ().randExc ();
+}
+ return result;
}
double rand_chance (void)
{
- return mtRand.get ().randExc (100.0);
+ double result;
+#pragma omp critical (mtrand)
+{
+ result = mtRand.get ().randExc (100.0);
+}
+ return result;
}
Tokens StrSplit(const std::string &src, const std::string &sep)
diff --git a/src/trinitycore/CMakeLists.txt b/src/trinitycore/CMakeLists.txt
index 0a9801c5a19..268408fe639 100644
--- a/src/trinitycore/CMakeLists.txt
+++ b/src/trinitycore/CMakeLists.txt
@@ -45,6 +45,7 @@ vmaps
ZThread
g3dlite
readline
+gomp
${SCRIPT_LIB}
${MYSQL_LIBRARIES}
${POSTGRE_LIBS}
diff --git a/src/trinitycore/trinitycore.conf.dist b/src/trinitycore/trinitycore.conf.dist
index 66884c6d85b..cc8b3d75715 100644
--- a/src/trinitycore/trinitycore.conf.dist
+++ b/src/trinitycore/trinitycore.conf.dist
@@ -179,6 +179,10 @@ EAIErrorLevel = 2
# Default: 1 (permit addon channel)
# 0 (do not permit addon channel)
#
+# MapUpdate.Threads
+# Number of threads to update maps.
+# Default: 1
+#
###################################################################################################################
UseProcessors = 0
@@ -204,6 +208,7 @@ TargetPosRecalculateRange = 1.5
UpdateUptimeInterval = 10
MaxCoreStuckTime = 0
AddonChannel = 1
+MapUpdate.Threads = 1
###################################################################################################################
# SERVER LOGGING
diff --git a/src/trinityrealm/CMakeLists.txt b/src/trinityrealm/CMakeLists.txt
index f883259bbf5..281f7ccf947 100644
--- a/src/trinityrealm/CMakeLists.txt
+++ b/src/trinityrealm/CMakeLists.txt
@@ -38,6 +38,7 @@ trinityauth
trinityconfig
ZThread
zlib
+gomp
${SSLLIB}
${MYSQL_LIBRARIES}
${OSX_LIBS}
diff --git a/win/VC80/game.vcproj b/win/VC80/game.vcproj
index 6de6b767d7e..45789564d07 100644
--- a/win/VC80/game.vcproj
+++ b/win/VC80/game.vcproj
@@ -44,7 +44,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions="/MP"
+ AdditionalOptions="/MP /openmp"
Optimization="0"
AdditionalIncludeDirectories="..\..\dep\include;..\..\src\framework;..\..\src\shared;..\..\src\shared\vmap;..\..\dep\ACE_wrappers"
PreprocessorDefinitions="WIN32;_DEBUG;TRINITY_DEBUG;_LIB;"
@@ -126,7 +126,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions="/MP"
+ AdditionalOptions="/MP /openmp"
Optimization="0"
AdditionalIncludeDirectories="..\..\dep\include;..\..\src\framework;..\..\src\shared;..\..\src\shared\vmap;..\..\dep\ACE_wrappers"
PreprocessorDefinitions="WIN32;_DEBUG;TRINITY_DEBUG;_LIB;"
@@ -207,7 +207,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions="/MP"
+ AdditionalOptions="/MP /openmp"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\dep\include;..\..\src\framework;..\..\src\shared;..\..\src\shared\vmap;..\..\dep\ACE_wrappers"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;"
@@ -289,7 +289,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions="/MP"
+ AdditionalOptions="/MP /openmp"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\dep\include;..\..\src\framework;..\..\src\shared;..\..\src\shared\vmap;..\..\dep\ACE_wrappers"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;"
diff --git a/win/VC80/shared.vcproj b/win/VC80/shared.vcproj
index 3824e5ae494..b0bac64300b 100644
--- a/win/VC80/shared.vcproj
+++ b/win/VC80/shared.vcproj
@@ -44,7 +44,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions="/MP"
+ AdditionalOptions="/MP /openmp"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\dep\include;..\..\dep\include\g3dlite;..\..\src\framework;..\..\src\shared;..\..\dep\ACE_wrappers"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE"
@@ -127,7 +127,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions="/MP"
+ AdditionalOptions="/MP /openmp"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\dep\include;..\..\dep\include\g3dlite;..\..\src\framework;..\..\src\shared;..\..\dep\ACE_wrappers"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE"
@@ -208,7 +208,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions="/MP"
+ AdditionalOptions="/MP /openmp"
Optimization="0"
AdditionalIncludeDirectories="..\..\dep\include;..\..\dep\include\g3dlite;..\..\src\framework;..\..\src\shared;..\..\dep\ACE_wrappers"
PreprocessorDefinitions="WIN32;_DEBUG;TRINITY_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE"
@@ -289,7 +289,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions="/MP"
+ AdditionalOptions="/MP /openmp"
Optimization="0"
AdditionalIncludeDirectories="..\..\dep\include;..\..\dep\include\g3dlite;..\..\src\framework;..\..\src\shared;..\..\dep\ACE_wrappers"
PreprocessorDefinitions="WIN32;_DEBUG;TRINITY_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE"
diff --git a/win/VC90/game.vcproj b/win/VC90/game.vcproj
index b8470720af7..bf01ae8bb5f 100644
--- a/win/VC90/game.vcproj
+++ b/win/VC90/game.vcproj
@@ -45,7 +45,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions="/MP"
+ AdditionalOptions="/MP /openmp"
Optimization="0"
AdditionalIncludeDirectories="..\..\dep\include;..\..\src\framework;..\..\src\shared;..\..\src\shared\vmap;..\..\dep\ACE_wrappers"
PreprocessorDefinitions="WIN32;_DEBUG;TRINITY_DEBUG;_LIB;"
@@ -128,7 +128,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions="/MP"
+ AdditionalOptions="/MP /openmp"
Optimization="0"
AdditionalIncludeDirectories="..\..\dep\include;..\..\src\framework;..\..\src\shared;..\..\src\shared\vmap;..\..\dep\ACE_wrappers"
PreprocessorDefinitions="WIN32;_DEBUG;TRINITY_DEBUG;_LIB;"
@@ -210,7 +210,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions="/MP"
+ AdditionalOptions="/MP /openmp"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\dep\include;..\..\src\framework;..\..\src\shared;..\..\src\shared\vmap;..\..\dep\ACE_wrappers"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;"
@@ -293,7 +293,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions="/MP"
+ AdditionalOptions="/MP /openmp"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\dep\include;..\..\src\framework;..\..\src\shared;..\..\src\shared\vmap;..\..\dep\ACE_wrappers"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;"
diff --git a/win/VC90/shared.vcproj b/win/VC90/shared.vcproj
index 02452340e8b..3187dbd470a 100644
--- a/win/VC90/shared.vcproj
+++ b/win/VC90/shared.vcproj
@@ -46,7 +46,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions="/MP"
+ AdditionalOptions="/MP /openmp"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\dep\include;..\..\dep\include\g3dlite;..\..\src\framework;..\..\src\shared;..\..\dep\ACE_wrappers"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE"
@@ -130,7 +130,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions="/MP"
+ AdditionalOptions="/MP /openmp"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\dep\include;..\..\dep\include\g3dlite;..\..\src\framework;..\..\src\shared;..\..\dep\ACE_wrappers"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE"
@@ -213,7 +213,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions="/MP"
+ AdditionalOptions="/MP /openmp"
Optimization="0"
AdditionalIncludeDirectories="..\..\dep\include;..\..\dep\include\g3dlite;..\..\src\framework;..\..\src\shared;..\..\dep\ACE_wrappers"
PreprocessorDefinitions="WIN32;_DEBUG;TRINITY_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE"
@@ -295,7 +295,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions="/MP"
+ AdditionalOptions="/MP /openmp"
Optimization="0"
AdditionalIncludeDirectories="..\..\dep\include;..\..\dep\include\g3dlite;..\..\src\framework;..\..\src\shared;..\..\dep\ACE_wrappers"
PreprocessorDefinitions="WIN32;_DEBUG;TRINITY_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE"