What about multi-core CPUs, multi-threading, processor affinity, etc?
The short answer is that there's little the player can do to affect this, so don't worry too much about it. Rift divides up the required work into many threads, for separate tasks like networking, audio, animation, particle effects, and rendering. If you have a multi-core CPU, these threads will be distributed across the cores and run in parallel. In a perfect world, the work could be split into an infinite number of threads, each with an equal amount of work to do, keeping all the cores working equally. In reality, the work is not infinitely parallelizable, and one primary thread does more work than the others. The CPU core running that thread will show closer to 100% utilization, while the other cores will show less.
The primary thread is bound to a CPU for a few reasons. There are bugs with some BIOSes and CPU drivers which cause timing values to be incorrect if a thread moves between CPUs. Another issue is Windows’ tendency to move threads between CPUs to balance the overall load. If a thread is not bound to a CPU it will look like more CPUs are being utilized, and thus more things are running in parallel. This is not actually the case. The thread is still running in serial, it is just being constantly moved between CPUs. While this will make things look more parallel in task manager, it is actually somewhat slower due to the additional processing required at the OS level to do the context switching. For CPUs where each core has its own cache, this can also incur unnecessary cache misses.
We do recognize that which core this thread runs on can have a significant impact on certain systems. The core the main thread is bound to is exposed in the rift.cfg file, as MainThreadCPU. Valid values are 1…numCPUs, or 0 to specify the thread can run on any CPU.
Bookmarks