RsBundle  Diff

Differences From Artifact [3853b4fbb7]:

  • File src/mpi/problem.rs — part of check-in [6392633aea] at 2023-04-28 13:15:13 on branch mpi — Make `mpi::Error` serializable itself (user: fifr size: 10961) [more...]

To Artifact [f6c21570b4]:

  • File src/mpi/problem.rs — part of check-in [a7fd644048] at 2023-05-06 16:35:29 on branch mpi-cvx — Merge (user: fifr size: 11165) [more...]

13
14
15
16
17
18
19
20

21
22
23
24
25
26
27
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see  <http://www.gnu.org/licenses/>
 */

use super::msg::{ResultMsg, WorkerMsg};
use crate::problem::{
    FirstOrderProblem, ResultSender, SubgradientExtender, UpdateSendError, UpdateSender, UpdateState,

};
use crate::{DVector, Minorant, Real};

use log::{error, info};
use mpi::environment::Universe;
use mpi::topology::{Communicator, SystemCommunicator};
use mpi::Rank;







|
>







13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see  <http://www.gnu.org/licenses/>
 */

use super::msg::{ResultMsg, WorkerMsg};
use crate::problem::{
    FirstOrderProblem, ResultSender, SubgradientExtender, UpdateSendError, UpdateSender,
    UpdateState,
};
use crate::{DVector, Minorant, Real};

use log::{error, info};
use mpi::environment::Universe;
use mpi::topology::{Communicator, SystemCommunicator};
use mpi::Rank;
209
210
211
212
213
214
215
216


217


218
219
220
221
222
223
224
                            let result_tx = result_tx.unwrap();

                            // wait for response
                            loop {
                                let msg = recv_msg(&client);

                                match msg {
                                    ResultMsg::ObjectiveValue { value, .. } => result_tx.objective(value).unwrap(),


                                    ResultMsg::Minorant { minorant, .. } => result_tx.minorant(minorant).unwrap(),


                                    ResultMsg::Done { .. } => break,
                                    ResultMsg::Error { error, .. } => {
                                        result_tx.error(Error::OracleError(error)).unwrap()
                                    }
                                }
                            }
                        }







|
>
>
|
>
>







210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
                            let result_tx = result_tx.unwrap();

                            // wait for response
                            loop {
                                let msg = recv_msg(&client);

                                match msg {
                                    ResultMsg::ObjectiveValue { value, .. } => {
                                        result_tx.objective(value).unwrap()
                                    }
                                    ResultMsg::Minorant { minorant, .. } => {
                                        result_tx.minorant(minorant).unwrap()
                                    }
                                    ResultMsg::Done { .. } => break,
                                    ResultMsg::Error { error, .. } => {
                                        result_tx.error(Error::OracleError(error)).unwrap()
                                    }
                                }
                            }
                        }
322
323
324
325
326
327
328

329

330
331
332
333
334
335
336
337
        &self,
        bounds: Vec<(Real, Real)>,
        sgext: Box<dyn SubgradientExtender<P::Minorant, P::Err>>,
    ) -> Result<(), UpdateSendError> {
        self.0.add_variables(
            bounds,
            Box::new(move |fidx: usize, m: &mut P::Minorant| {

                sgext.extend_subgradient(fidx, m).map_err(Error::OracleError)

            }),
        )
    }

    fn error(&self, err: P::Err) -> Result<(), UpdateSendError> {
        self.0.error(Error::OracleError(err))
    }
}







>
|
>








327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
        &self,
        bounds: Vec<(Real, Real)>,
        sgext: Box<dyn SubgradientExtender<P::Minorant, P::Err>>,
    ) -> Result<(), UpdateSendError> {
        self.0.add_variables(
            bounds,
            Box::new(move |fidx: usize, m: &mut P::Minorant| {
                sgext
                    .extend_subgradient(fidx, m)
                    .map_err(Error::OracleError)
            }),
        )
    }

    fn error(&self, err: P::Err) -> Result<(), UpdateSendError> {
        self.0.error(Error::OracleError(err))
    }
}