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
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,
    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
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::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
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
                sgext.extend_subgradient(fidx, m).map_err(Error::OracleError)
                    .extend_subgradient(fidx, m)
                    .map_err(Error::OracleError)
            }),
        )
    }

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