Re: [Algorithms] Timing problems
Brought to you by:
vexxed72
From: Dan W. <Da...@Pi...> - 2009-01-06 20:10:46
|
We stuck the SetThreadAffinityMask code in our libraries, and our timing problems went away. However, about 6 mo later, we ended up with a weird bug: We have a converter that run as part of our build process. To speed up the build, we started running multiple instances of the converter on a multicore machine. However, the build times didn't go down, and closer examination showed that only one CPU use being used. Turns out SetThreadAffinityMask was doing exactly what it was supposed to and making all our processes run on one core. Our solution was to look at the processor identifier and skip the affinity business CPU's we know to work correctly. -D ________________________________ From: Paul at Home [mailto:pa...@ru...] Sent: Sunday, January 04, 2009 8:32 AM To: Game Development Algorithms Subject: Re: [Algorithms] Timing problems Thanks Emil, I'll give that a go first. :) Regards, Paul Johnson. ----- Original Message ----- From: Emil Persson <mailto:hu...@co...> To: 'Game Development Algorithms' <mailto:gda...@li...> Sent: Sunday, January 04, 2009 2:36 PM Subject: Re: [Algorithms] Timing problems The problem doesn't arise from threading your application, but from calling QPC from different CPUs. In a multi-core machine Windows will schedule each thread to run on any CPU as it sees fit. First time-slice for your application may run on CPU0, the next one perhaps on CPU2, and then CPU1 etc. By the time you're reading QPC you could be on any CPU and it could be different cores every frame. Unless of course you call SetThreadAffinityMask(). Something like this at the beginning of the application should do: SetThreadAffinityMask(GetCurrentThread(), 1); This will stick the thread to CPU 0. -Emil From: Paul at Home [mailto:pa...@ru...] Sent: 04 January 2009 12:44 To: Game Development Algorithms Subject: Re: [Algorithms] Timing problems I've seen this around but I'm not using any threads. Not deliberately anyway. Do you put a zero in for "me" ? Regards, Paul Johnson. ----- Original Message ----- From: Gregory Junker <mailto:gj...@da...> To: 'Game Development Algorithms' <mailto:gda...@li...> Sent: Sunday, January 04, 2009 2:07 AM Subject: Re: [Algorithms] Timing problems Hi Paul By "jump problem", do you mean this? http://support.microsoft.com/kb/274323 Either way, simply set the thread that is your time master to run on only a single core, using SetThreadAffinityMask() (on Win32, of course - not sure what the equivalent, if any, might be on Linux). http://msdn.microsoft.com/en-us/library/ms686247(VS.85).aspx Yes, it's a hack, but at present, it's what we got. ;) Greg ________________________________ From: Paul at Home [mailto:pa...@ru...] Sent: Saturday, January 03, 2009 3:06 PM To: gda...@li... Subject: [Algorithms] Timing problems I've just fallen foul of QPC not working correctly having just gone from a single processor to a quad core. I remember reading somewhere that multiple processors could cause problems in the future, but I guess the future (for me) just arrived. I do handle the well-known "jump" problem but I guess that's old news now anyway. Can anyone point me in the right direction for how to fix this please ? Regards, Paul Johnson. ________________________________ ------------------------------------------------------------------------ ------ ________________________________ _______________________________________________ GDAlgorithms-list mailing list GDA...@li... https://lists.sourceforge.net/lists/listinfo/gdalgorithms-list Archives: http://sourceforge.net/mailarchive/forum.php?forum_name=gdalgorithms-lis t ________________________________ ------------------------------------------------------------------------ ------ ________________________________ _______________________________________________ GDAlgorithms-list mailing list GDA...@li... https://lists.sourceforge.net/lists/listinfo/gdalgorithms-list Archives: http://sourceforge.net/mailarchive/forum.php?forum_name=gdalgorithms-lis t |