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
|
#if defined(ENABLE_THREADS) && ENABLE_THREADS
|
||||||
thread = new MetarThread(this);
|
thread = new MetarThread(this);
|
||||||
thread->start();
|
thread->start( 1 );
|
||||||
#endif // ENABLE_THREADS
|
#endif // ENABLE_THREADS
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -116,18 +116,15 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
|
||||||
|
|
||||||
#if defined( sgi )
|
#if defined( sgi )
|
||||||
#include <sys/fpu.h>
|
#include <sys/fpu.h>
|
||||||
|
#include <sys/sysmp.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
set the special "flush zero" bit (FS, bit 24) in the Control Status
|
* 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
|
* 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
|
* 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
|
* any kind will be generated on the CPU. This has no effect on an
|
||||||
R3000.
|
* 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.
|
|
||||||
*/
|
|
||||||
void flush_fpe(void)
|
void flush_fpe(void)
|
||||||
{
|
{
|
||||||
union fpc_csr f;
|
union fpc_csr f;
|
||||||
|
@ -151,6 +148,16 @@ int main ( int argc, char **argv ) {
|
||||||
|
|
||||||
#if defined(sgi)
|
#if defined(sgi)
|
||||||
flush_fpe();
|
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
|
#endif
|
||||||
|
|
||||||
// Enable floating-point exceptions for Windows
|
// Enable floating-point exceptions for Windows
|
||||||
|
|
|
@ -45,7 +45,7 @@ FGTileLoader::FGTileLoader()
|
||||||
for (int i = 0; i < MAX_THREADS; ++i)
|
for (int i = 0; i < MAX_THREADS; ++i)
|
||||||
{
|
{
|
||||||
threads[i] = new LoaderThread(this);
|
threads[i] = new LoaderThread(this);
|
||||||
threads[i]->start();
|
threads[i]->start( 1 );
|
||||||
}
|
}
|
||||||
#endif // ENABLE_THREADS
|
#endif // ENABLE_THREADS
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue