code: def update(self):
          
          assert self.binded and self.params_initialized and self.optimizer_initialized
  
          self._params_dirty = True
          if self._update_on_kvstore:
              _update_params_on_kvstore(self._exec_group.param_arrays,
                                        self._exec_group.grad_arrays,
                                        self._kvstore, self._exec_group.param_names)
          else:
              _update_params(self._exec_group.param_arrays,
                             self._exec_group.grad_arrays,
                             updater=self._updater,
                             num_device=len(self._context),
                             kvstore=self._kvstore,
                             param_names=self._exec_group.param_names)
docs: Updates parameters according to the installed optimizer and the gradients computed
          in the previous forward-backward batch.
  
          When KVStore is used to update parameters for multi-device or multi-machine training,
          a copy of the parameters are stored in KVStore. Note that for `row_sparse` parameters,
          this function does update the copy of parameters in KVStore, but doesn't broadcast the
          updated parameters to all devices / machines. Please call `prepare` to broadcast
          `row_sparse` parameters with the next batch of data.
  
          See Also
          ----------
          :meth:`BaseModule.update`.