From 5b8686185cc359811326bf63ec7755d244c58c18 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Sun, 29 Jul 2012 23:11:52 -0400 Subject: [PATCH] Scan: Use saner work paritition on CPUs. --- pyopencl/scan.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/pyopencl/scan.py b/pyopencl/scan.py index 6565682f..5f51fa14 100644 --- a/pyopencl/scan.py +++ b/pyopencl/scan.py @@ -956,6 +956,10 @@ class GenericScanKernel(_GenericScanKernelBase): max_scan_wg_size = min(dev.max_work_group_size for dev in self.devices) + if self.devices[0].type == cl.device_type.CPU: + # (about the widest vector a CPU can support) + max_scan_wg_size = 16 + while True: candidate_scan_info = self.build_scan_kernel( max_scan_wg_size, self.parsed_args, self.input_expr, @@ -1068,9 +1072,9 @@ class GenericScanKernel(_GenericScanKernelBase): # k_group_size should be a power of two because of in-kernel # division by that number. - if wg_size < 16: - # Hello, Apple CPU. Nice to see you. - k_group_size = 128 # FIXME: guesswork + # FIXME: guesswork + if self.devices[0].type == cl.device_type.CPU: + k_group_size = 128 else: k_group_size = 8 -- GitLab