def __init__(self, slvr_cfg): """ RimeSolver Constructor Parameters: slvr_cfg : SolverConfiguration Solver Configuration variables """ # Call the parent constructor super(RimeSolver, self).__init__(slvr_cfg) self.register_default_dimensions() # Configure the dimensions of the beam cube self.register_dimension('beam_lw', slvr_cfg[Options.E_BEAM_WIDTH], description='E cube l width') self.register_dimension('beam_mh', slvr_cfg[Options.E_BEAM_HEIGHT], description='E cube m height') self.register_dimension('beam_nud', slvr_cfg[Options.E_BEAM_DEPTH], description='E cube nu depth') self.rime_e_beam = RimeEBeam() self.rime_b_sqrt = RimeBSqrt() self.rime_ekb_sqrt = RimeEKBSqrt() self.rime_sum = RimeSumCoherencies() self.rime_reduce = RimeReduction() from montblanc.impl.rime.v4.ant_pairs import monkey_patch_antenna_pairs monkey_patch_antenna_pairs(self) # Create # (1) A stream that this solver will asynchronously # operate on # (2) An event indicating when an iteration of # the kernels above have finished executing with self.context: self.stream = cuda.Stream() self.kernels_done = cuda.Event() # Create constant data for transfer to GPU self._const_data = mbu.create_rime_const_data(self) # Indicate these variables have not been set self._dev_mem_pool = None self._pinned_mem_pool = None self._pool_lock = None