1
0
Fork 0

Tie the Scenery loader thread and the real weather fetching thread to CPU1 (if supported).

This commit is contained in:
ehofman 2005-01-09 10:27:01 +00:00
parent 9f531ff901
commit 38d327ba24
3 changed files with 19 additions and 12 deletions

View file

@ -329,7 +329,7 @@ FGMetarEnvironmentCtrl::FGMetarEnvironmentCtrl ()
{
#if defined(ENABLE_THREADS) && ENABLE_THREADS
thread = new MetarThread(this);
thread->start();
thread->start( 1 );
#endif // ENABLE_THREADS
}

View file

@ -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

View file

@ -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
}