Changeset dd7fc12 in sasmodels for sasmodels/kernelcl.py
- Timestamp:
- Apr 15, 2016 11:11:43 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:
- 3599d36
- Parents:
- b151003
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/kernelcl.py
ra5b8477 rdd7fc12 103 103 ENV = None 104 104 def environment(): 105 # type: () -> "GpuEnvironment" 105 106 """ 106 107 Returns a singleton :class:`GpuEnvironment`. … … 114 115 115 116 def has_type(device, dtype): 117 # type: (cl.Device, np.dtype) -> bool 116 118 """ 117 119 Return true if device supports the requested precision. … … 127 129 128 130 def get_warp(kernel, queue): 131 # type: (cl.Kernel, cl.CommandQueue) -> int 129 132 """ 130 133 Return the size of an execution batch for *kernel* running on *queue*. … … 135 138 136 139 def _stretch_input(vector, dtype, extra=1e-3, boundary=32): 140 # type: (np.ndarray, np.dtype, float, int) -> np.ndarray 137 141 """ 138 142 Stretch an input vector to the correct boundary. … … 157 161 158 162 def compile_model(context, source, dtype, fast=False): 163 # type: (cl.Context, str, np.dtype, bool) -> cl.Program 159 164 """ 160 165 Build a model to run on the gpu. … … 192 197 """ 193 198 def __init__(self): 199 # type: () -> None 194 200 # find gpu context 195 201 #self.context = cl.create_some_context() … … 210 216 211 217 def has_type(self, dtype): 218 # type: (np.dtype) -> bool 212 219 """ 213 220 Return True if all devices support a given type. 214 221 """ 215 dtype = generate.F32 if dtype == 'fast' else np.dtype(dtype)216 222 return any(has_type(d, dtype) 217 223 for context in self.context … … 219 225 220 226 def get_queue(self, dtype): 227 # type: (np.dtype) -> cl.CommandQueue 221 228 """ 222 229 Return a command queue for the kernels of type dtype. … … 227 234 228 235 def get_context(self, dtype): 236 # type: (np.dtype) -> cl.Context 229 237 """ 230 238 Return a OpenCL context for the kernels of type dtype. … … 235 243 236 244 def _create_some_context(self): 245 # type: () -> cl.Context 237 246 """ 238 247 Protected call to cl.create_some_context without interactivity. Use … … 248 257 249 258 def compile_program(self, name, source, dtype, fast=False): 259 # type: (str, str, np.dtype, bool) -> cl.Program 250 260 """ 251 261 Compile the program for the device in the given context. … … 261 271 262 272 def release_program(self, name): 273 # type: (str) -> None 263 274 """ 264 275 Free memory associated with the program on the device. … … 269 280 270 281 def _get_default_context(): 282 # type: () -> cl.Context 271 283 """ 272 284 Get an OpenCL context, preferring GPU over CPU, and preferring Intel … … 334 346 that the compiler is allowed to take shortcuts. 335 347 """ 336 def __init__(self, source, model_info, dtype=generate.F32): 348 def __init__(self, source, model_info, dtype=generate.F32, fast=False): 349 # type: (str, ModelInfo, np.dtype, bool) -> None 337 350 self.info = model_info 338 351 self.source = source 339 self.dtype = generate.F32 if dtype == 'fast' else np.dtype(dtype)340 self.fast = (dtype == 'fast')352 self.dtype = dtype 353 self.fast = fast 341 354 self.program = None # delay program creation 342 355 343 356 def __getstate__(self): 357 # type: () -> Tuple[ModelInfo, str, np.dtype, bool] 344 358 return self.info, self.source, self.dtype, self.fast 345 359 346 360 def __setstate__(self, state): 361 # type: (Tuple[ModelInfo, str, np.dtype, bool]) -> None 347 362 self.info, self.source, self.dtype, self.fast = state 348 363 self.program = None 349 364 350 365 def make_kernel(self, q_vectors): 366 # type: (List[np.ndarray]) -> "GpuKernel" 351 367 if self.program is None: 352 368 compiler = environment().compile_program … … 356 372 kernel_name = generate.kernel_name(self.info, is_2d) 357 373 kernel = getattr(self.program, kernel_name) 358 return GpuKernel(kernel, self.info, q_vectors , self.dtype)374 return GpuKernel(kernel, self.info, q_vectors) 359 375 360 376 def release(self): 377 # type: () -> None 361 378 """ 362 379 Free the resources associated with the model. … … 367 384 368 385 def __del__(self): 386 # type: () -> None 369 387 self.release() 370 388 … … 390 408 """ 391 409 def __init__(self, q_vectors, dtype=generate.F32): 410 # type: (List[np.ndarray], np.dtype) -> None 392 411 # TODO: do we ever need double precision q? 393 412 env = environment() … … 419 438 420 439 def release(self): 440 # type: () -> None 421 441 """ 422 442 Free the memory. … … 427 447 428 448 def __del__(self): 449 # type: () -> None 429 450 self.release() 430 451 … … 450 471 """ 451 472 def __init__(self, kernel, model_info, q_vectors): 452 # type: ( KernelModel, ModelInfo, List[np.ndarray]) -> None473 # type: (cl.Kernel, ModelInfo, List[np.ndarray]) -> None 453 474 max_pd = model_info.parameters.max_pd 454 475 npars = len(model_info.parameters.kernel_parameters)-2 … … 505 526 506 527 def release(self): 528 # type: () -> None 507 529 """ 508 530 Release resources associated with the kernel. … … 513 535 514 536 def __del__(self): 537 # type: () -> None 515 538 self.release()
Note: See TracChangeset
for help on using the changeset viewer.