Tie the Scenery loader thread and the real weather fetching thread to CPU1 (if supported).
This commit is contained in:
parent
9f531ff901
commit
38d327ba24
3 changed files with 19 additions and 12 deletions
|
@ -329,7 +329,7 @@ FGMetarEnvironmentCtrl::FGMetarEnvironmentCtrl ()
|
|||
{
|
||||
#if defined(ENABLE_THREADS) && ENABLE_THREADS
|
||||
thread = new MetarThread(this);
|
||||
thread->start();
|
||||
thread->start( 1 );
|
||||
#endif // ENABLE_THREADS
|
||||
}
|
||||
|
||||
|
|
|
@ -116,18 +116,15 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
|
|||
|
||||
#if defined( sgi )
|
||||
#include <sys/fpu.h>
|
||||
#include <sys/sysmp.h>
|
||||
|
||||
/*
|
||||
set the special "flush zero" bit (FS, bit 24) in the Control Status
|
||||
Register of the FPU of R4k and beyond so that the result of any
|
||||
underflowing operation will be clamped to zero, and no exception of
|
||||
any kind will be generated on the CPU. This has no effect on an
|
||||
R3000.
|
||||
|
||||
the FS bit is inherited by processes fork()ed out of this one,
|
||||
but it is not inherited across an exec(). so anytime you exec()
|
||||
a process, you must re-set the FS bit in that process.
|
||||
*/
|
||||
* set the special "flush zero" bit (FS, bit 24) in the Control Status
|
||||
* Register of the FPU of R4k and beyond so that the result of any
|
||||
* underflowing operation will be clamped to zero, and no exception of
|
||||
* any kind will be generated on the CPU. This has no effect on an
|
||||
* R3000.
|
||||
*/
|
||||
void flush_fpe(void)
|
||||
{
|
||||
union fpc_csr f;
|
||||
|
@ -151,6 +148,16 @@ int main ( int argc, char **argv ) {
|
|||
|
||||
#if defined(sgi)
|
||||
flush_fpe();
|
||||
|
||||
// Bind all non-rendering threads to CPU1
|
||||
// This will reduce the jitter caused by them to an absolute minimum,
|
||||
// but it will only work with superuser authority.
|
||||
if ( geteuid() == 0 )
|
||||
{
|
||||
sysmp(MP_CLOCK, 0); // bind the timer only to CPU0
|
||||
sysmp(MP_ISOLATE, 1 ); // Isolate CPU1
|
||||
sysmp(MP_NONPREEMPTIVE, 1 ); // disable process time slicing on CPU1
|
||||
}
|
||||
#endif
|
||||
|
||||
// Enable floating-point exceptions for Windows
|
||||
|
|
|
@ -45,7 +45,7 @@ FGTileLoader::FGTileLoader()
|
|||
for (int i = 0; i < MAX_THREADS; ++i)
|
||||
{
|
||||
threads[i] = new LoaderThread(this);
|
||||
threads[i]->start();
|
||||
threads[i]->start( 1 );
|
||||
}
|
||||
#endif // ENABLE_THREADS
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue