Ticket #363: large_kernel.patch

File large_kernel.patch, 1.5 KB (added by pkienzle, 8 years ago)

possible fix, but with a 10% performance penalty

  • sasmodels/kernelcl.py

    diff --git a/sasmodels/kernelcl.py b/sasmodels/kernelcl.py
    index 24ee778..e8c1c90 100644
    a b from __future__ import print_function 
    5353import os 
    5454import warnings 
    5555import logging 
     56import time 
    5657 
    5758import numpy as np  # type: ignore 
    5859 
    class GpuKernel(Kernel): 
    556557        #print("Calling OpenCL") 
    557558        #call_details.show(values) 
    558559        # Call kernel and retrieve results 
    559         last_call = None 
    560         step = 100 
     560        in_process = None 
     561        last_nap = time.clock() 
     562        step = 50 
    561563        for start in range(0, call_details.num_eval, step): 
    562564            stop = min(start + step, call_details.num_eval) 
    563565            #print("queuing",start,stop) 
    564566            args[1:3] = [np.int32(start), np.int32(stop)] 
    565             last_call = [kernel(self.queue, self.q_input.global_size, 
    566                                 None, *args, wait_for=last_call)] 
     567            call = kernel(self.queue, self.q_input.global_size, None, 
     568                          *args, wait_for=in_process) 
     569            if stop < call_details.num_eval: 
     570                # Allow other processes to run 
     571                # TODO: maybe check time before sleep 
     572                in_process = [call] 
     573                call.wait() 
     574                current_time = time.clock() 
     575                if current_time - last_nap > 0.5: 
     576                    time.sleep(0.05) 
     577                    last_nap = current_time 
    567578        cl.enqueue_copy(self.queue, self.result, self.result_b) 
    568579        #print("result", self.result) 
    569580