Forum index VCMI Project - Heroes 3: WoG recreated
Forum of the project aiming to recreate best turn-based strategy ever!

FAQFAQ  SearchSearch  MemberlistMemberlist  UsergroupsUsergroups  StatisticsStatistics
RegisterRegister  Log inLog in  AlbumAlbum  DownloadDownload

Previous topic :: Next topic
Changes to saving system (r3215)
Author Message
Tow 
Project Lead
VCMI Programmer


Joined: 01 Feb 2008
Posts: 1399
Location: Kraków, Poland
Posted: 2013-02-18, 23:46   Changes to saving system (r3215)  

So far VCMI savegame consisted of 3 files:
*vlgm1 with "common data" (gamestate, handlers and other lib stuff)
*vsgm1 with server-only data
*vcgm1 with client-only data

Now I changed it to:
*vcgm1 with commmon data + client data
*vsgm1 with common data + server data

What does that mean:
1) Desync issues won't be solved upon loading. However I added a mechanism that automatically validates if common part is the same in both saves. That allowed me to find and fix some minor desync issues. Still, other ones remain. For now ignore the warning on loading. It'll require bigger rewrite in objects.
2) It is finally possible to serialize pointers to lib stuff inside of client/server serialization procedures. That'll help in many things. Particularly, saving AI state should be now relatively straight-forward to implement. (no more AI reset on load)
_________________
VCMI is a work in progress.
VCMI is NOT an another mod.
 
     
Ivan 
VCMI programmer

Age: 23
Joined: 08 May 2009
Posts: 1304
Location: Ukraine
Posted: 2013-02-19, 01:11     

Is it possible to do something with Connection.cpp? Compiling it under gcc requires 1.5 Gb of memory - not a problem for me but for some users who compile vcmi from source (including such distros like Gentoo or Arch). Previously it was around 1 Gb but even that was much higher than any other file.

Seems to be coming from RegisterTypes instantiations.
 
     
Tow 
Project Lead
VCMI Programmer


Joined: 01 Feb 2008
Posts: 1399
Location: Kraków, Poland
Posted: 2013-02-19, 01:49     

That's awful much. MSVC doesn't seem to exceed 250 MB. It's hard for me to do something here since I don't have working GCC setup to check against.

I don't see why RegisterTypes is so heavy on memory usage. For me it looks like pretty simple template, especially when compared to other monstrosities that happen in Connection.h when passing object to serializer.

You can try this:
1. Create RegisterTypes.cpp.
2. Put there explicit template instantations for registerType against all used serializers. Make registerType DLL_LINKAGE
3. In Connection.cpp declare registerType as extern template to suppress instantiation.

If that works it should move the registerType instantiation burden from CConnection.cpp to RegisterTypes.cpp. Not sure if it'll work, or if it won't result in 1,5 GB compilation of RegisterTypes.cpp.

Some other random ideas:
* replace boost type traits with std:: type traits — they can possibly use compiler intrinsics and be lighter. (I don't know however if GCC 4.5 has that implemented — and has it better implemented than Boost)
* split it into CConnection, CFileLoader/Saver, etc
_________________
VCMI is a work in progress.
VCMI is NOT an another mod.
 
     
Ivan 
VCMI programmer

Age: 23
Joined: 08 May 2009
Posts: 1304
Location: Ukraine
Posted: 2013-02-19, 11:38     

Quote:
If that works it should move the registerType instantiation burden from CConnection.cpp to RegisterTypes.cpp. Not sure if it'll work, or if it won't result in 1,5 GB compilation of RegisterTypes.cpp.

Works but now I have 1 Gb usage in RegisterType.cpp
Quote:
* replace boost type traits with std:: type traits — they can possibly use compiler intrinsics and be lighter. (I don't know however if GCC 4.5 has that implemented — and has it better implemented than Boost)

At least with gcc 4.6 it works (will check 4.5 later). But no notable difference in memory usage
Quote:
* split it into CConnection, CFileLoader/Saver, etc

I think I'll have to do this.

Interesting - after I removed all but one template instantiations memory usage decreased but not significantly - to 0.75 Gb from 1 Gb.

UPD:

This is what I got after running fully optimized build (Connection.cpp excluded)
CGameState 1.8 Gb (can be decreased to ~ 1.0 Gb - redundant registerType templates)
IGameCallback 1.2 Gb
CPregame 1.0 Gb
GuiClasses 0.8 Gb
CGameHandler 0.8 Gb

CMusicHandler - small memory usage but takes 2 minute to compile.
 
     
Warmonger 
VCMI programmer


Age: 25
Joined: 07 Jun 2008
Posts: 1120
Location: Warsaw, Poland
Posted: 2013-02-19, 13:02     

I can see some difference in created savegames, especially in new artifacts and adventure map objects (?). Anyway, can't load any game with recent changes.
_________________
DJ Warmonger blog
beegee wrote:
Warmonger, you are the best!
 
 
     
Tow 
Project Lead
VCMI Programmer


Joined: 01 Feb 2008
Posts: 1399
Location: Kraków, Poland
Posted: 2013-02-19, 13:22     

Works with Arrogance for me.
What map causes you trouble? (Or what you need to do to trigger that?)
_________________
VCMI is a work in progress.
VCMI is NOT an another mod.
 
     
Tow 
Project Lead
VCMI Programmer


Joined: 01 Feb 2008
Posts: 1399
Location: Kraków, Poland
Posted: 2013-02-19, 13:25     

Never mind, try r3219.
_________________
VCMI is a work in progress.
VCMI is NOT an another mod.
 
     
Display posts from previous:   
Reply to topic
You cannot post new topics in this forum
You can reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum
Add this topic to your bookmarks
Printable version

Jump to:  
Quick Reply
Username: 


Expire Days
 
 
 
 
 
 
 

Powered by phpBB modified by Przemo © 2003 phpBB Group
Template Chronicles modified by Nasedo modified by Tow.
© VCMI Team
Page generated in 0.06 second. SQL queries: 25