SetPriority: Make GPU client run at higher priority than VMs
Posted: Thu Jun 25, 2009 10:40 pm
For the record, I did not write this program, I just found the download link online.
When running the GPU client along with some sort of CPU client in Windows, the recommendation is to set the GPU's priority to Low instead of Idle so that it can always get what CPU time it needs. But this doesn't translate when running the Linux client in a Virtual Machine, as the virtualization software will probably be running at Normal Windows priority, as opposed to the GPU client which runs at Low. GPU PPD will suffer as a result. You can manually change priorities using Task Manager, but you have to do it for each new WU since the GPU core closes when a WU finishes and reopens when the new WU is started, and Task Manager doesn't remember the altered priority once an application closes.
I found a program that can remedy this situation- SetPriority http://download.cnet.com/SetPriority/30 ... 73386.html. It's a small program that, when running, will force tasks to run at a Windows priority that you specify. This means that you can tell the GPU client to run at a higher priority than the VM(s) you're running, effectively duplicating the recommendation for the WinCPU/GPU client combination.
When you've saved the application somewhere (there's no installation, you just download the whole program) and opened it, you'll want to go to the Priority Presets tab. Here you need to enter the processes that you want to run at a specified priority, namely FahCore_11 (and FahCore_14 if you have an Nvidia card). Note that even though Task Manager reports the processes as having a ".exe" at the end, you leave them off when entering them in SetPriority. Next select a priority to force the GPU core(s) to run at- the simplest thing would be for them to run at Above Normal since VM's by default run at Normal.
One alternative is to have the VM process run at Low priority and the GPU cores run at Below Normal. I don't think this is necessary, but it better resembles the priority setup of the two Windows client. If you do this, you'll want to force the main VM thread to run lower- it's easily identifiable since under Task Manager it'll be using up almost all of your processing power. Under VMWare this is called "vmware-vmx"; I don't know what it's called under other virtualization tools.
In any case, once you have added whatever processes you want to, from now on they will open at those priorities. Even though the GPU cores shut down between WUs, the new instances will start up at the priority you specified. Note that SetPriority has to be open for this to occur; if it's not open, processes will open at their default priorities (i.e. Normal for the VM and Low for the GPU cores). There is an option to have SetPriority open when Windows starts, but I'm not sure if it always works.
One thing that I have noticed is that the Linux client might run slower if it doesn't have as high priority as the GPU client. It's up to you to decide whether the GPU gains make up for the SMP losses on your machine.
When running the GPU client along with some sort of CPU client in Windows, the recommendation is to set the GPU's priority to Low instead of Idle so that it can always get what CPU time it needs. But this doesn't translate when running the Linux client in a Virtual Machine, as the virtualization software will probably be running at Normal Windows priority, as opposed to the GPU client which runs at Low. GPU PPD will suffer as a result. You can manually change priorities using Task Manager, but you have to do it for each new WU since the GPU core closes when a WU finishes and reopens when the new WU is started, and Task Manager doesn't remember the altered priority once an application closes.
I found a program that can remedy this situation- SetPriority http://download.cnet.com/SetPriority/30 ... 73386.html. It's a small program that, when running, will force tasks to run at a Windows priority that you specify. This means that you can tell the GPU client to run at a higher priority than the VM(s) you're running, effectively duplicating the recommendation for the WinCPU/GPU client combination.
When you've saved the application somewhere (there's no installation, you just download the whole program) and opened it, you'll want to go to the Priority Presets tab. Here you need to enter the processes that you want to run at a specified priority, namely FahCore_11 (and FahCore_14 if you have an Nvidia card). Note that even though Task Manager reports the processes as having a ".exe" at the end, you leave them off when entering them in SetPriority. Next select a priority to force the GPU core(s) to run at- the simplest thing would be for them to run at Above Normal since VM's by default run at Normal.
One alternative is to have the VM process run at Low priority and the GPU cores run at Below Normal. I don't think this is necessary, but it better resembles the priority setup of the two Windows client. If you do this, you'll want to force the main VM thread to run lower- it's easily identifiable since under Task Manager it'll be using up almost all of your processing power. Under VMWare this is called "vmware-vmx"; I don't know what it's called under other virtualization tools.
In any case, once you have added whatever processes you want to, from now on they will open at those priorities. Even though the GPU cores shut down between WUs, the new instances will start up at the priority you specified. Note that SetPriority has to be open for this to occur; if it's not open, processes will open at their default priorities (i.e. Normal for the VM and Low for the GPU cores). There is an option to have SetPriority open when Windows starts, but I'm not sure if it always works.
One thing that I have noticed is that the Linux client might run slower if it doesn't have as high priority as the GPU client. It's up to you to decide whether the GPU gains make up for the SMP losses on your machine.