def _init_comm_bufs(self): """ Buffers for sending/receiving data from other modules. Notes ----- Must be executed after `_init_port_dicts()`. """ # Buffers (and their interfaces and MPI types) for receiving data # transmitted from source modules: self._in_buf = {} self._in_buf['gpot'] = {} self._in_buf['spike'] = {} self._in_buf_int = {} self._in_buf_int['gpot'] = {} self._in_buf_int['spike'] = {} self._in_buf_mtype = {} self._in_buf_mtype['gpot'] = {} self._in_buf_mtype['spike'] = {} for in_id in self._in_ids: self._in_buf['gpot'][in_id] = \ gpuarray.empty(len(self._in_port_dict_ids['gpot'][in_id]), self.pm['gpot'].dtype) self._in_buf_int['gpot'][in_id] = bufint(self._in_buf['gpot'][in_id]) self._in_buf_mtype['gpot'][in_id] = \ dtype_to_mpi(self._in_buf['gpot'][in_id].dtype) self._in_buf['spike'][in_id] = \ gpuarray.empty(len(self._in_port_dict_ids['spike'][in_id]), self.pm['spike'].dtype) self._in_buf_int['spike'][in_id] = bufint(self._in_buf['spike'][in_id]) self._in_buf_mtype['spike'][in_id] = \ dtype_to_mpi(self._in_buf['spike'][in_id].dtype) # Buffers (and their interfaces and MPI types) for transmitting data to # destination modules: self._out_buf = {} self._out_buf['gpot'] = {} self._out_buf['spike'] = {} self._out_buf_int = {} self._out_buf_int['gpot'] = {} self._out_buf_int['spike'] = {} self._out_buf_mtype = {} self._out_buf_mtype['gpot'] = {} self._out_buf_mtype['spike'] = {} for out_id in self._out_ids: self._out_buf['gpot'][out_id] = \ gpuarray.empty(len(self._out_port_dict_ids['gpot'][out_id]), self.pm['gpot'].dtype) self._out_buf_int['gpot'][out_id] = bufint(self._out_buf['gpot'][out_id]) self._out_buf_mtype['gpot'][out_id] = \ dtype_to_mpi(self._out_buf['gpot'][out_id].dtype) self._out_buf['spike'][out_id] = \ gpuarray.empty(len(self._out_port_dict_ids['spike'][out_id]), self.pm['spike'].dtype) self._out_buf_int['spike'][out_id] = bufint(self._out_buf['spike'][out_id]) self._out_buf_mtype['spike'][out_id] = \ dtype_to_mpi(self._out_buf['spike'][out_id].dtype)
def _init_comm_bufs(self): """ Buffers for receiving data from other modules. Notes ----- Must be executed after `_init_port_dicts()`. """ # Buffer interface to and MPI type of this module's port data array: self._data_int = {} self._data_int['gpot'] = bufint(self.data['gpot']) self._data_int['spike'] = bufint(self.data['spike']) self._data_mtype = {} self._data_mtype['gpot'] = dtype_to_mpi(self.data['gpot'].dtype) self._data_mtype['spike'] = dtype_to_mpi(self.data['spike'].dtype) # Buffers (and their interfaces and MPI types) for receiving data # transmitted from source modules: self._in_buf = {} self._in_buf['gpot'] = {} self._in_buf['spike'] = {} self._in_buf_int = {} self._in_buf_int['gpot'] = {} self._in_buf_int['spike'] = {} self._in_buf_mtype = {} self._in_buf_mtype['gpot'] = {} self._in_buf_mtype['spike'] = {} for in_id in self._in_ids: # Get interfaces of pattern connecting the current module to # source module `in_id`; `int_1` is connected to the current # module, `int_0` is connected to the other module: pat = self.routing_table[in_id, self.id]['pattern'] int_0 = self.routing_table[in_id, self.id]['int_0'] int_1 = self.routing_table[in_id, self.id]['int_1'] # The buffers must be the same size as the port data arrays of the # modules from which they received data: self._in_buf['gpot'][in_id] = \ gpuarray.empty(len(self.pm_all['gpot'][in_id]), self.pm['gpot'].dtype) self._in_buf_int['gpot'][in_id] = bufint( self._in_buf['gpot'][in_id]) self._in_buf_mtype['gpot'][in_id] = \ dtype_to_mpi(self._in_buf['gpot'][in_id]) self._in_buf['spike'][in_id] = \ gpuarray.empty(len(self.pm_all['spike'][in_id]), self.pm['spike'].dtype) self._in_buf_int['spike'][in_id] = bufint( self._in_buf['spike'][in_id]) self._in_buf_mtype['spike'][in_id] = \ dtype_to_mpi(self._in_buf['spike'][in_id])
def _init_comm_bufs(self): """ Buffers for receiving data from other modules. Notes ----- Must be executed after `_init_port_dicts()`. """ # Buffer interface to and MPI type of this module's port data array: self._data_int = {} self._data_int['gpot'] = bufint(self.data['gpot']) self._data_int['spike'] = bufint(self.data['spike']) self._data_mtype = {} self._data_mtype['gpot'] = dtype_to_mpi(self.data['gpot'].dtype) self._data_mtype['spike'] = dtype_to_mpi(self.data['spike'].dtype) # Buffers (and their interfaces and MPI types) for receiving data # transmitted from source modules: self._in_buf = {} self._in_buf['gpot'] = {} self._in_buf['spike'] = {} self._in_buf_int = {} self._in_buf_int['gpot'] = {} self._in_buf_int['spike'] = {} self._in_buf_mtype = {} self._in_buf_mtype['gpot'] = {} self._in_buf_mtype['spike'] = {} for in_id in self._in_ids: # Get interfaces of pattern connecting the current module to # source module `in_id`; `int_1` is connected to the current # module, `int_0` is connected to the other module: pat = self.routing_table[in_id, self.id]['pattern'] int_0 = self.routing_table[in_id, self.id]['int_0'] int_1 = self.routing_table[in_id, self.id]['int_1'] # The buffers must be the same size as the port data arrays of the # modules from which they received data: self._in_buf['gpot'][in_id] = \ gpuarray.empty(len(self.pm_all['gpot'][in_id]), self.pm['gpot'].dtype) self._in_buf_int['gpot'][in_id] = bufint(self._in_buf['gpot'][in_id]) self._in_buf_mtype['gpot'][in_id] = \ dtype_to_mpi(self._in_buf['gpot'][in_id]) self._in_buf['spike'][in_id] = \ gpuarray.empty(len(self.pm_all['spike'][in_id]), self.pm['spike'].dtype) self._in_buf_int['spike'][in_id] = bufint(self._in_buf['spike'][in_id]) self._in_buf_mtype['spike'][in_id] = \ dtype_to_mpi(self._in_buf['spike'][in_id])
def _init_comm_bufs(self): """ Buffers for sending/receiving data from other modules. Notes ----- Must be executed after `_init_port_dicts()`. """ # Buffers (and their interfaces and MPI types) for receiving data # transmitted from source modules: self._in_buf = {} self._in_buf['gpot'] = {} self._in_buf['spike'] = {} self._in_buf_int = {} self._in_buf_int['gpot'] = {} self._in_buf_int['spike'] = {} self._in_buf_mtype = {} self._in_buf_mtype['gpot'] = {} self._in_buf_mtype['spike'] = {} for in_id in self._in_ids: n_gpot = self._in_buf_len['gpot'][in_id] if n_gpot: self._in_buf['gpot'][in_id] = \ gpuarray.empty(n_gpot, self.pm['gpot'].dtype) self._in_buf_int['gpot'][in_id] = \ bufint(self._in_buf['gpot'][in_id]) self._in_buf_mtype['gpot'][in_id] = \ dtype_to_mpi(self._in_buf['gpot'][in_id].dtype) else: self._in_buf['gpot'][in_id] = None n_spike = self._in_buf_len['spike'][in_id] if n_spike: self._in_buf['spike'][in_id] = \ gpuarray.empty(n_spike, self.pm['spike'].dtype) self._in_buf_int['spike'][in_id] = \ bufint(self._in_buf['spike'][in_id]) self._in_buf_mtype['spike'][in_id] = \ dtype_to_mpi(self._in_buf['spike'][in_id].dtype) else: self._in_buf['spike'][in_id] = None # Buffers (and their interfaces and MPI types) for transmitting data to # destination modules: self._out_buf = {} self._out_buf['gpot'] = {} self._out_buf['spike'] = {} self._out_buf_int = {} self._out_buf_int['gpot'] = {} self._out_buf_int['spike'] = {} self._out_buf_mtype = {} self._out_buf_mtype['gpot'] = {} self._out_buf_mtype['spike'] = {} for out_id in self._out_ids: n_gpot = len(self._out_port_dict_ids['gpot'][out_id]) if n_gpot: self._out_buf['gpot'][out_id] = \ gpuarray.empty(n_gpot, self.pm['gpot'].dtype) self._out_buf_int['gpot'][out_id] = \ bufint(self._out_buf['gpot'][out_id]) self._out_buf_mtype['gpot'][out_id] = \ dtype_to_mpi(self._out_buf['gpot'][out_id].dtype) else: self._out_buf['gpot'][out_id] = None n_spike = len(self._out_port_dict_ids['spike'][out_id]) if n_spike: self._out_buf['spike'][out_id] = \ gpuarray.empty(n_spike, self.pm['spike'].dtype) self._out_buf_int['spike'][out_id] = \ bufint(self._out_buf['spike'][out_id]) self._out_buf_mtype['spike'][out_id] = \ dtype_to_mpi(self._out_buf['spike'][out_id].dtype) else: self._out_buf['spike'][out_id] = None