pub struct Color(/* private fields */);
Expand description
A color used in a communicator split
Implementations§
Source§impl Color
impl Color
Sourcepub fn undefined() -> Color
pub fn undefined() -> Color
Special color of undefined value
Examples found in repository?
examples/split.rs (line 76)
7fn main() {
8 let universe = mpi::initialize().unwrap();
9 let world = universe.world();
10
11 let odd = (0..world.size()).filter(|x| x % 2 != 0).collect::<Vec<_>>();
12 let odd_group = world.group().include(&odd[..]);
13 let even_group = world.group().difference(&odd_group);
14 assert!(
15 (world.rank() % 2 == 0 && even_group.rank().is_some() && odd_group.rank().is_none())
16 || (even_group.rank().is_none() && odd_group.rank().is_some())
17 );
18 let my_group = if odd_group.rank().is_some() {
19 &odd_group
20 } else {
21 &even_group
22 };
23 let empty_group = SystemGroup::empty();
24
25 let oddness_comm = world.split_by_subgroup_collective(my_group);
26 assert!(oddness_comm.is_some());
27 let oddness_comm = oddness_comm.unwrap();
28 assert_eq!(
29 GroupRelation::Identical,
30 oddness_comm.group().compare(my_group)
31 );
32
33 let odd_comm = if odd_group.rank().is_some() {
34 world.split_by_subgroup_collective(&odd_group)
35 } else {
36 world.split_by_subgroup_collective(&empty_group)
37 };
38 if odd_group.rank().is_some() {
39 assert!(odd_comm.is_some());
40 let odd_comm = odd_comm.unwrap();
41 assert_eq!(
42 GroupRelation::Identical,
43 odd_comm.group().compare(&odd_group)
44 );
45 } else {
46 assert!(odd_comm.is_none());
47 }
48
49 #[cfg(not(msmpi))]
50 {
51 if even_group.rank().is_some() {
52 let even_comm = world.split_by_subgroup(&even_group);
53 assert!(even_comm.is_some());
54 let even_comm = even_comm.unwrap();
55 assert_eq!(
56 GroupRelation::Identical,
57 even_comm.group().compare(&even_group)
58 );
59
60 let no_comm = world.split_by_subgroup(&odd_group);
61 assert!(no_comm.is_none());
62 }
63 }
64
65 let oddness_comm = world.split_by_color(Color::with_value(world.rank() % 2));
66 assert!(oddness_comm.is_some());
67 let oddness_comm = oddness_comm.unwrap();
68 assert_eq!(
69 GroupRelation::Identical,
70 oddness_comm.group().compare(my_group)
71 );
72
73 let odd_comm = world.split_by_color(if world.rank() % 2 != 0 {
74 Color::with_value(0)
75 } else {
76 Color::undefined()
77 });
78 if world.rank() % 2 != 0 {
79 assert!(odd_comm.is_some());
80 let odd_comm = odd_comm.unwrap();
81 assert_eq!(
82 GroupRelation::Identical,
83 odd_comm.group().compare(&odd_group)
84 );
85 } else {
86 assert!(odd_comm.is_none());
87 }
88}
Sourcepub fn with_value(value: c_int) -> Color
pub fn with_value(value: c_int) -> Color
A color of a certain value
Valid values are non-negative.
§Panics
Value of color must be non-negative.
Examples found in repository?
examples/split.rs (line 65)
7fn main() {
8 let universe = mpi::initialize().unwrap();
9 let world = universe.world();
10
11 let odd = (0..world.size()).filter(|x| x % 2 != 0).collect::<Vec<_>>();
12 let odd_group = world.group().include(&odd[..]);
13 let even_group = world.group().difference(&odd_group);
14 assert!(
15 (world.rank() % 2 == 0 && even_group.rank().is_some() && odd_group.rank().is_none())
16 || (even_group.rank().is_none() && odd_group.rank().is_some())
17 );
18 let my_group = if odd_group.rank().is_some() {
19 &odd_group
20 } else {
21 &even_group
22 };
23 let empty_group = SystemGroup::empty();
24
25 let oddness_comm = world.split_by_subgroup_collective(my_group);
26 assert!(oddness_comm.is_some());
27 let oddness_comm = oddness_comm.unwrap();
28 assert_eq!(
29 GroupRelation::Identical,
30 oddness_comm.group().compare(my_group)
31 );
32
33 let odd_comm = if odd_group.rank().is_some() {
34 world.split_by_subgroup_collective(&odd_group)
35 } else {
36 world.split_by_subgroup_collective(&empty_group)
37 };
38 if odd_group.rank().is_some() {
39 assert!(odd_comm.is_some());
40 let odd_comm = odd_comm.unwrap();
41 assert_eq!(
42 GroupRelation::Identical,
43 odd_comm.group().compare(&odd_group)
44 );
45 } else {
46 assert!(odd_comm.is_none());
47 }
48
49 #[cfg(not(msmpi))]
50 {
51 if even_group.rank().is_some() {
52 let even_comm = world.split_by_subgroup(&even_group);
53 assert!(even_comm.is_some());
54 let even_comm = even_comm.unwrap();
55 assert_eq!(
56 GroupRelation::Identical,
57 even_comm.group().compare(&even_group)
58 );
59
60 let no_comm = world.split_by_subgroup(&odd_group);
61 assert!(no_comm.is_none());
62 }
63 }
64
65 let oddness_comm = world.split_by_color(Color::with_value(world.rank() % 2));
66 assert!(oddness_comm.is_some());
67 let oddness_comm = oddness_comm.unwrap();
68 assert_eq!(
69 GroupRelation::Identical,
70 oddness_comm.group().compare(my_group)
71 );
72
73 let odd_comm = world.split_by_color(if world.rank() % 2 != 0 {
74 Color::with_value(0)
75 } else {
76 Color::undefined()
77 });
78 if world.rank() % 2 != 0 {
79 assert!(odd_comm.is_some());
80 let odd_comm = odd_comm.unwrap();
81 assert_eq!(
82 GroupRelation::Identical,
83 odd_comm.group().compare(&odd_group)
84 );
85 } else {
86 assert!(odd_comm.is_none());
87 }
88}
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Color
impl RefUnwindSafe for Color
impl Send for Color
impl Sync for Color
impl Unpin for Color
impl UnwindSafe for Color
Blanket Implementations§
Source§impl<Src, Scheme> ApproxFrom<Src, Scheme> for Srcwhere
Scheme: ApproxScheme,
impl<Src, Scheme> ApproxFrom<Src, Scheme> for Srcwhere
Scheme: ApproxScheme,
Source§fn approx_from(src: Src) -> Result<Src, <Src as ApproxFrom<Src, Scheme>>::Err>
fn approx_from(src: Src) -> Result<Src, <Src as ApproxFrom<Src, Scheme>>::Err>
Convert the given value into an approximately equivalent representation.
Source§impl<Dst, Src, Scheme> ApproxInto<Dst, Scheme> for Srcwhere
Dst: ApproxFrom<Src, Scheme>,
Scheme: ApproxScheme,
impl<Dst, Src, Scheme> ApproxInto<Dst, Scheme> for Srcwhere
Dst: ApproxFrom<Src, Scheme>,
Scheme: ApproxScheme,
Source§type Err = <Dst as ApproxFrom<Src, Scheme>>::Err
type Err = <Dst as ApproxFrom<Src, Scheme>>::Err
The error type produced by a failed conversion.
Source§fn approx_into(self) -> Result<Dst, <Src as ApproxInto<Dst, Scheme>>::Err>
fn approx_into(self) -> Result<Dst, <Src as ApproxInto<Dst, Scheme>>::Err>
Convert the subject into an approximately equivalent representation.
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, Dst> ConvAsUtil<Dst> for T
impl<T, Dst> ConvAsUtil<Dst> for T
Source§impl<T> ConvUtil for T
impl<T> ConvUtil for T
Source§fn approx_as<Dst>(self) -> Result<Dst, Self::Err>where
Self: Sized + ApproxInto<Dst>,
fn approx_as<Dst>(self) -> Result<Dst, Self::Err>where
Self: Sized + ApproxInto<Dst>,
Approximate the subject to a given type with the default scheme.
Source§fn approx_as_by<Dst, Scheme>(self) -> Result<Dst, Self::Err>
fn approx_as_by<Dst, Scheme>(self) -> Result<Dst, Self::Err>
Approximate the subject to a given type with a specific scheme.