Changeset 8d62008 in sasmodels for sasmodels/kernelcl.py
- Timestamp:
- Apr 15, 2016 10:16:41 AM (8 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:
- 8f6817d
- Parents:
- 3599d36
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/kernelcl.py
rdd7fc12 r8d62008 60 60 # Ask OpenCL for the default context so that we know that one exists 61 61 cl.create_some_context(interactive=False) 62 except Exception as exc: 63 warnings.warn(str(exc)) 62 except Exception as ocl_exc: 63 warnings.warn(str(ocl_exc)) 64 del ocl_exc 64 65 raise RuntimeError("OpenCL not available") 65 66 … … 479 480 self.dtype = kernel.dtype 480 481 self.dim = '2d' if q_input.is_2d else '1d' 481 self.pd_stop_index = 4*max_pd-1482 482 # plus three for the normalization values 483 483 self.result = np.empty(q_input.nq+3, q_input.dtype) … … 495 495 496 496 self._need_release = [ self.result_b, self.q_input ] 497 self.real = (np.float32 if self.q_input.dtype == generate.F32 498 else np.float64 if self.q_input.dtype == generate.F64 499 else np.float16 if self.q_input.dtype == generate.F16 500 else np.float32) # will never get here, so use np.float32 497 501 498 502 def __call__(self, call_details, weights, values, cutoff): 499 503 # type: (CallDetails, np.ndarray, np.ndarray, float) -> np.ndarray 500 real = (np.float32 if self.q_input.dtype == generate.F32501 else np.float64 if self.q_input.dtype == generate.F64502 else np.float16 if self.q_input.dtype == generate.F16503 else np.float32) # will never get here, so use np.float32504 assert call_details.dtype == np.int32505 assert weights.dtype == real and values.dtype == real506 504 507 505 context = self.queue.context 506 # Arrange data transfer to card 508 507 details_b = cl.Buffer(context, mf.READ_ONLY | mf.COPY_HOST_PTR, 509 hostbuf=call_details )508 hostbuf=call_details.buffer) 510 509 weights_b = cl.Buffer(context, mf.READ_ONLY | mf.COPY_HOST_PTR, 511 510 hostbuf=weights) … … 513 512 hostbuf=values) 514 513 515 start, stop = 0, self.details[self.pd_stop_index]514 start, stop = 0, call_details.total_pd 516 515 args = [ 517 np.uint32(self.q_input.nq), np. uint32(start), np.uint32(stop),518 self.details_b, self.weights_b, self.values_b,519 self. q_input.q_b, self.result_b,real(cutoff),516 np.uint32(self.q_input.nq), np.int32(start), np.int32(stop), 517 details_b, weights_b, values_b, self.q_input.q_b, self.result_b, 518 self.real(cutoff), 520 519 ] 521 520 self.kernel(self.queue, self.q_input.global_size, None, *args) 522 521 cl.enqueue_copy(self.queue, self.result, self.result_b) 523 [v.release() for v in (details_b, weights_b, values_b)] 524 525 return self.result[:self.nq] 522 for v in (details_b, weights_b, values_b): 523 v.release() 524 525 return self.result[:self.q_input.nq] 526 526 527 527 def release(self):
Note: See TracChangeset
for help on using the changeset viewer.