Changeset 9eb3632 in sasmodels for sasmodels/kernelcl.py


Ignore:
Timestamp:
Jul 22, 2016 10:54:17 PM (8 years ago)
Author:
Paul Kienzle <pkienzle@…>
Branches:
master, core_shell_microgels, costrafo411, magnetic_model, release_v0.94, release_v0.95, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
Children:
7b7da6b
Parents:
6a0d6aa
Message:

restructure kernels using fixed PD loops

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/kernelcl.py

    r32e3c9b r9eb3632  
    385385        self.program = None 
    386386 
    387     def make_kernel(self, q_vectors, magnetic=False): 
     387    def make_kernel(self, q_vectors): 
    388388        # type: (List[np.ndarray]) -> "GpuKernel" 
    389389        if self.program is None: 
     
    391391            self.program = compiler(self.info.name, self.source, 
    392392                                    self.dtype, self.fast) 
     393            names = [generate.kernel_name(self.info, variant) 
     394                     for variant in ("Iq", "Iqxy", "Imagnetic")] 
     395            self._kernels = [getattr(self.program, name) for name in names] 
    393396        is_2d = len(q_vectors) == 2 
    394         variant = "Imagnetic" if magnetic else "Iqxy" if is_2d else "Iq" 
    395         kernel_name = generate.kernel_name(self.info, variant) 
    396         kernel = getattr(self.program, kernel_name) 
     397        kernel = self._kernels[1:3] if is_2d else [self._kernels[0]]*2 
    397398        return GpuKernel(kernel, self.dtype, self.info, q_vectors) 
    398399 
     
    529530                             hostbuf=values) 
    530531 
     532        kernel = self.kernel[1 if magnetic else 0] 
     533        args = [ 
     534            np.uint32(self.q_input.nq), None, None, 
     535            details_b, values_b, self.q_input.q_b, self.result_b, 
     536            self.real(cutoff), 
     537        ] 
     538        #print("Calling OpenCL") 
     539        #print("values",values) 
    531540        # Call kernel and retrieve results 
     541        last_call = None 
    532542        step = 100 
    533         #print("calling OpenCL") 
    534543        for start in range(0, call_details.pd_prod, step): 
    535544            stop = min(start+step, call_details.pd_prod) 
    536             args = [ 
    537                 np.uint32(self.q_input.nq), np.int32(start), np.int32(stop), 
    538                 details_b, values_b, self.q_input.q_b, self.result_b, 
    539                 self.real(cutoff), 
    540             ] 
    541             self.kernel(self.queue, self.q_input.global_size, None, *args) 
     545            #print("queuing",start,stop) 
     546            args[1:3] = [np.int32(start), np.int32(stop)] 
     547            last_call = [kernel(self.queue, self.q_input.global_size, 
     548                                None, *args, wait_for=last_call)] 
    542549        cl.enqueue_copy(self.queue, self.result, self.result_b) 
    543550 
     
    546553            if v is not None: v.release() 
    547554 
    548         return self.result[:self.q_input.nq] 
     555        scale = values[0]/self.result[self.q_input.nq] 
     556        background = values[1] 
     557        #print("scale",scale,background) 
     558        return scale*self.result[:self.q_input.nq] + background 
     559        # return self.result[:self.q_input.nq] 
    549560 
    550561    def release(self): 
Note: See TracChangeset for help on using the changeset viewer.