Changeset c85db69 in sasmodels for sasmodels/kernelcl.py
- Timestamp:
- Mar 3, 2015 4:07:28 PM (9 years ago)
- 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:
- e930946
- Parents:
- a156419
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/kernelcl.py
r664c8e7 rc85db69 32 32 context = cl.create_some_context(interactive=False) 33 33 del context 34 except Exception, exc:34 except Exception, exc: 35 35 warnings.warn(str(exc)) 36 36 raise RuntimeError("OpenCL not available") … … 39 39 40 40 from . import generate 41 from .kernelpy import Py Input, PyModel41 from .kernelpy import PyModel 42 42 43 43 F64_DEFS = """\ … … 63 63 """ 64 64 source, info = generate.make(kernel_module) 65 if callable(info.get('Iq', None)):65 if callable(info.get('Iq', None)): 66 66 return PyModel(info) 67 67 ## for debugging, save source to a .cl file, edit it, and reload as model … … 110 110 device.min_data_type_align_size//4. 111 111 """ 112 remainder = vector.size %boundary112 remainder = vector.size % boundary 113 113 if remainder != 0: 114 114 size = vector.size + (boundary - remainder) 115 vector = np.hstack((vector, [extra] *(size-vector.size)))115 vector = np.hstack((vector, [extra] * (size - vector.size))) 116 116 return np.ascontiguousarray(vector, dtype=dtype) 117 117 … … 126 126 """ 127 127 dtype = np.dtype(dtype) 128 if dtype ==generate.F64 and not all(has_double(d) for d in context.devices):128 if dtype == generate.F64 and not all(has_double(d) for d in context.devices): 129 129 raise RuntimeError("Double precision not supported for devices") 130 130 … … 135 135 if context.devices[0].type == cl.device_type.GPU: 136 136 header += "#define USE_SINCOS\n" 137 program = cl.Program(context, header+source).build()137 program = cl.Program(context, header + source).build() 138 138 return program 139 139 … … 173 173 try: 174 174 self.context = cl.create_some_context(interactive=False) 175 except Exception, exc:175 except Exception, exc: 176 176 warnings.warn(str(exc)) 177 177 warnings.warn("pyopencl.create_some_context() failed") … … 230 230 self.__dict__ = state.copy() 231 231 232 def __call__(self, input ):233 if self.dtype != input .dtype:232 def __call__(self, input_value): 233 if self.dtype != input_value.dtype: 234 234 raise TypeError("data and kernel have different types") 235 235 if self.program is None: 236 self.program = environment().compile_program(self.info['name'], self.source, self.dtype)237 kernel_name = generate.kernel_name(self.info, input .is_2D)236 self.program = environment().compile_program(self.info['name'], self.source, self.dtype) 237 kernel_name = generate.kernel_name(self.info, input_value.is_2D) 238 238 kernel = getattr(self.program, kernel_name) 239 return GpuKernel(kernel, self.info, input )239 return GpuKernel(kernel, self.info, input_value) 240 240 241 241 def release(self): … … 285 285 self.q_vectors = [_stretch_input(q, self.dtype, 32) for q in q_vectors] 286 286 self.q_buffers = [ 287 cl.Buffer(env.context, 287 cl.Buffer(env.context, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=q) 288 288 for q in self.q_vectors 289 289 ] … … 320 320 self.res = np.empty(input.nq, input.dtype) 321 321 dim = '2d' if input.is_2D else '1d' 322 self.fixed_pars = info['partype']['fixed-' +dim]323 self.pd_pars = info['partype']['pd-' +dim]322 self.fixed_pars = info['partype']['fixed-' + dim] 323 self.pd_pars = info['partype']['pd-' + dim] 324 324 325 325 # Inputs and outputs for each kernel call … … 327 327 env = environment() 328 328 self.loops_b = [cl.Buffer(env.context, mf.READ_WRITE, 329 2 *MAX_LOOPS*input.dtype.itemsize)329 2 * MAX_LOOPS * input.dtype.itemsize) 330 330 for _ in env.queues] 331 331 self.res_b = [cl.Buffer(env.context, mf.READ_WRITE, 332 input.global_size[0] *input.dtype.itemsize)332 input.global_size[0] * input.dtype.itemsize) 333 333 for _ in env.queues] 334 334 … … 344 344 cutoff = real(cutoff) 345 345 loops_N = [np.uint32(len(p[0])) for p in pd_pars] 346 loops = np.hstack(pd_pars) if pd_pars else np.empty(0, dtype=self.input.dtype)346 loops = np.hstack(pd_pars) if pd_pars else np.empty(0, dtype=self.input.dtype) 347 347 loops = np.ascontiguousarray(loops.T, self.input.dtype).flatten() 348 348 #print "loops",Nloops, loops … … 350 350 #import sys; print >>sys.stderr,"opencl eval",pars 351 351 #print "opencl eval",pars 352 if len(loops) > 2 *MAX_LOOPS:352 if len(loops) > 2 * MAX_LOOPS: 353 353 raise ValueError("too many polydispersity points") 354 354
Note: See TracChangeset
for help on using the changeset viewer.