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

View file

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

View file

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