def internal_free_point_data(self): if SVM is None: return if SVM.point_data_cpu_copy is not None: SVM.point_data_cpu_copy = None # deallocated by the GC if SVM.point_data_gpu_copy is not None: gpu_ptr = pycasp.get_GPU_pointer(SVM.point_data_gpu_copy) if gpu_ptr == 0: # only dealloc if this memory hasn't been allocated previously self.get_asp_mod().dealloc_point_data_on_GPU() SVM.point_data_gpu_copy = None
def internal_alloc_point_data(self, X): data_ptr = X.__array_interface__['data'][0] if SVM.point_data_cpu_copy != data_ptr: if SVM.point_data_cpu_copy is not None: self.internal_free_point_data() self.get_asp_mod().alloc_point_data_on_CPU(X) SVM.point_data_cpu_copy = X.__array_interface__['data'][0] if SVM.use_cuda: gpu_ptr = pycasp.get_GPU_pointer(data_ptr) SVM.point_data_gpu_copy = X.__array_interface__['data'][0] if gpu_ptr != 0: self.get_asp_mod().alloc_point_data_on_GPU_from_ptr(gpu_ptr, X.shape[0], X.shape[1]) SVM.point_data_gpu_copy = X.__array_interface__['data'][0] else: self.get_asp_mod().alloc_point_data_on_GPU(X.shape[0], X.shape[1]) self.get_asp_mod().copy_point_data_CPU_to_GPU(X.shape[1]) SVM.point_data_gpu_copy = X.__array_interface__['data'][0]
def internal_alloc_component_data(self): if GMM.component_data_cpu_copy != self.components: if GMM.component_data_cpu_copy: self.internal_free_component_data() self.get_asp_mod().alloc_components_on_CPU(self.M, self.D,\ self.components.weights,\ self.components.means,\ self.components.covars,\ self.components.comp_probs) GMM.component_data_cpu_copy = self.components if GMM.use_cuda: # Add to PYCASP memory map means_gpu_ptr = self.get_asp_mod().alloc_components_on_GPU(self.M, self.D) means_cpu_ptr = self.components.means.__array_interface__['data'][0] if pycasp.get_GPU_pointer(means_cpu_ptr) == 0: pycasp.add_to_data_map(means_cpu_ptr, means_gpu_ptr) self.get_asp_mod().copy_component_data_CPU_to_GPU(self.M, self.D) GMM.component_data_gpu_copy = self.components