Files
management-scripts/Fix-EnableGPUScheduling.ps1

43 lines
1.6 KiB
PowerShell

$key = "HKLM:\SYSTEM\CurrentControlSet\Control\GraphicsDrivers"
$name = "HwSchMode"
# Check to see if GPU scheduling is enabled
$HardwareGPUSchedulingEnabled = $false
If ( Test-RegistryProperty -Path $key -Name $name ) {
$setting = (Get-ItemPropertyValue -Path $key -Name $name -ErrorAction SilentlyContinue)
If ( $setting -eq 2 ) {
Write-Output "Hardware assisted GPU scheduling is already enabled"
$HardwareGPUSchedulingEnabled = $true
}
}
If ( $HardwareGPUSchedulingEnabled -eq $false ) {
Write-Output "Hardware assisted GPU scheduling is disabled"
$HardwareGPUSchedulingEnabled = $false
}
# Find a GPU in the system so we can enable GPU scheduling
If ( $HardwareGPUSchedulingEnabled -eq $false ) {
Write-Output " - Attempting to find a discrete Nvidia or AMD GPU"
$GPUs = (Get-WmiObject Win32_VideoController).Name
$FoundDiscreteGPU = $false
ForEach ( $gpu in $GPUs ) {
If ( $gpu -ilike "*NVIDIA*" ) {
$FoundDiscreteGPU = $true
}
}
# If we found a discrete GPU, enable hardware assisted GPU scheduling
If ( $FoundDiscreteGPU -eq $true ) {
Write-Output " - GPU found!"
Write-Output "Enabling hardware assisted GPU scheduling"
Try {
New-ItemProperty -Path $key -Name $name -PropertyType DWord -Value 2 -Force -ErrorAction Stop
Write-Output "A restart is required before this change will take effect"
}
Catch { Write-Error $_.Exception.Message }
} Else {
Write-Output " - No GPU was found"
Write-Output "Hardware assisted GPU scheduling will not be enabled"
}
}