Initial support of single GPU rendering when multiple cards with same name exists
This commit is contained in:
@@ -12,7 +12,11 @@ def isDisplayDevice(device):
|
||||
return "(Display)" in device.name
|
||||
|
||||
|
||||
def setUseRequestedDevice(context, cpref, device_type, requested_device):
|
||||
def setUseRequestedDevice(context,
|
||||
cpref,
|
||||
device_type,
|
||||
requested_device,
|
||||
device_single):
|
||||
import _cycles
|
||||
# Empty device type means we'l ltry to render on a single card,
|
||||
# preferably non-display one.
|
||||
@@ -22,7 +26,7 @@ def setUseRequestedDevice(context, cpref, device_type, requested_device):
|
||||
for device in cpref.devices:
|
||||
if isDisplayDevice(device):
|
||||
device.use = False
|
||||
elif not device_found:
|
||||
elif not device_found or not device_single:
|
||||
# Enable first non-display GPU.
|
||||
device_found = True
|
||||
device.use = True
|
||||
@@ -38,24 +42,35 @@ def setUseRequestedDevice(context, cpref, device_type, requested_device):
|
||||
for device in cpref.devices:
|
||||
device_name = device.name.replace(" (Display)", "")
|
||||
if device_name == requested_device:
|
||||
device.use = True
|
||||
device_found = True
|
||||
if not device_found or not device_single:
|
||||
device.use = True
|
||||
device_found = True
|
||||
else:
|
||||
device.use = False
|
||||
else:
|
||||
device.use = False
|
||||
return device_found
|
||||
|
||||
|
||||
def setDeviceCUDA(context, cpref, requested_device):
|
||||
def setDeviceCUDA(context, cpref, requested_device, device_single):
|
||||
cpref.compute_device_type = 'CUDA'
|
||||
return setUseRequestedDevice(context, cpref, 'CUDA', requested_device)
|
||||
return setUseRequestedDevice(context,
|
||||
cpref,
|
||||
'CUDA',
|
||||
requested_device,
|
||||
device_single)
|
||||
|
||||
|
||||
def setDeviceOpenCL(context, cpref, requested_device):
|
||||
def setDeviceOpenCL(context, cpref, requested_device, device_single):
|
||||
cpref.compute_device_type = 'OPENCL'
|
||||
return setUseRequestedDevice(context, cpref, 'OPENCL', requested_device)
|
||||
return setUseRequestedDevice(context,
|
||||
cpref,
|
||||
'OPENCL',
|
||||
requested_device,
|
||||
device_single)
|
||||
|
||||
|
||||
def setDeviceGPU(context, cpref, requested_device):
|
||||
def setDeviceGPU(context, cpref, requested_device, device_single):
|
||||
import _cycles
|
||||
has_cuda = has_opencl = False
|
||||
for device in _cycles.available_devices():
|
||||
@@ -65,9 +80,9 @@ def setDeviceGPU(context, cpref, requested_device):
|
||||
has_opencl = True
|
||||
|
||||
if has_cuda:
|
||||
return setDeviceCUDA(context, cpref, requested_device)
|
||||
return setDeviceCUDA(context, cpref, requested_device, device_single)
|
||||
if has_opencl:
|
||||
return setDeviceOpenCL(context, cpref, requested_device)
|
||||
return setDeviceOpenCL(context, cpref, requested_device, device_single)
|
||||
return False
|
||||
|
||||
|
||||
@@ -121,6 +136,10 @@ def main():
|
||||
parser.add_argument("--benchmark-device",
|
||||
help="Device to be rendered on",
|
||||
default="")
|
||||
parser.add_argument("--benchmark-device-single",
|
||||
help="Use single device when multiple are found",
|
||||
action='store_true',
|
||||
default=False)
|
||||
parser.add_argument("--benchmark-system-info",
|
||||
help="Dump whole system information",
|
||||
action='store_true',
|
||||
@@ -148,11 +167,20 @@ def main():
|
||||
if args.benchmark_device_type == 'CPU':
|
||||
device_ok = setDeviceCPU(context, cpref)
|
||||
elif args.benchmark_device_type == 'CUDA':
|
||||
device_ok = setDeviceCUDA(context, cpref, args.benchmark_device)
|
||||
device_ok = setDeviceCUDA(context,
|
||||
cpref,
|
||||
args.benchmark_device,
|
||||
args.benchmark_device_single)
|
||||
elif args.benchmark_device_type == 'OPENCL':
|
||||
device_ok = setDeviceOpenCL(context, cpref, args.benchmark_device)
|
||||
device_ok = setDeviceOpenCL(context,
|
||||
cpref,
|
||||
args.benchmark_device,
|
||||
args.benchmark_device_single)
|
||||
elif args.benchmark_device_type == 'GPU':
|
||||
device_ok = setDeviceGPU(context, cpref, args.benchmark_device)
|
||||
device_ok = setDeviceGPU(context,
|
||||
cpref,
|
||||
args.benchmark_device,
|
||||
args.benchmark_device_single)
|
||||
if not device_ok:
|
||||
sys.exit(1)
|
||||
|
||||
|
Reference in New Issue
Block a user