Esempio n. 1
0
    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