client: Restore scaling factor for AMD OpenCL devices on Macs with OpenCL version < 1.2

svn path=/trunk/boinc/; revision=24999
This commit is contained in:
Charlie Fenton 2012-01-06 02:45:55 +00:00
parent 57d1c580e8
commit 06af098512
2 changed files with 23 additions and 0 deletions

View File

@ -202,3 +202,10 @@ David 5 Jan 2012
lib/ lib/
gui_rpc_client_ops.cpp gui_rpc_client_ops.cpp
Rom 3 Jan 2012
- client: Restore scaling factor for AMD OpenCL devices on Macs with
OpenCL version < 1.2.
client/
coproc_detect.cpp

View File

@ -293,6 +293,21 @@ void COPROCS::get_opencl(
(strstr(prop.vendor, "Advanced Micro Devices, Inc.")) (strstr(prop.vendor, "Advanced Micro Devices, Inc."))
) { ) {
prop.device_num = (int)(ati_opencls.size()); prop.device_num = (int)(ati_opencls.size());
#ifdef __APPLE__
// Work around a bug in OpenCL which returns only
// 1/2 of total global RAM size.
// This bug applies only to ATI GPUs, not to NVIDIA
// This has already been fixed on latest Catalyst
// drivers, but Mac does not use Catalyst drivers.
// Assume this will be fixed in openCL 1.2.
// See also further workaround code for systems with
// CAL support.
if ((!strstr("1.0", prop.opencl_platform_version))
|| (!strstr("1.1", prop.opencl_platform_version))
){
prop.global_mem_size *= 2;
}
#endif
if (!ati.have_cal) { if (!ati.have_cal) {
COPROC_ATI c; COPROC_ATI c;
c.opencl_prop = prop; c.opencl_prop = prop;
@ -329,6 +344,7 @@ void COPROCS::get_opencl(
// Work around a bug in OpenCL which returns only // Work around a bug in OpenCL which returns only
// 1/2 of total global RAM size: use the value from CAL. // 1/2 of total global RAM size: use the value from CAL.
// This bug applies only to ATI GPUs, not to NVIDIA // This bug applies only to ATI GPUs, not to NVIDIA
// See also further workaround code for Macs.
// //
ati.opencl_prop.global_mem_size = ati.attribs.localRAM * MEGA; ati.opencl_prop.global_mem_size = ati.attribs.localRAM * MEGA;
} else { } else {