Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

rust で並列処理

rust は並列処理が作りやすい言語である。言語レベルで完全にスレッド安全性が担保されていると言って良いだろう。
以下は0から15の値の合計を4つのスレッドを使って計算するrustのソースである。

extern crate crossbeam;

fn main() {
    let mut sum0: u64 = 0;
    let mut sum1: u64 = 0;
    let mut sum2: u64 = 0;
    let mut sum3: u64 = 0;

    let v0: Vec<u64> = (0..4).collect();
    let v1: Vec<u64> = (4..8).collect();
    let v2: Vec<u64> = (8..12).collect();
    let v3: Vec<u64> = (12..16).collect();

    let mut units = Vec::new();
    units.push((v0, &mut sum0));
    units.push((v1, &mut sum1));
    units.push((v2, &mut sum2));
    units.push((v3, &mut sum3));

    crossbeam::scope(|spawner| {
        for unit in units.into_iter() {
            spawner.spawn(move || {
                let val: u64 = unit.0[0] + unit.0[1] + unit.0[2] + unit.0[3];
                *unit.1 = val; 
                println!("unit.0: {} {} {} {}", unit.0[0], unit.0[1], unit.0[2], unit.0[3]);
                println!("unit.1: {}", unit.1);
            });
        }
    });
    println!("sum0: {}", sum0);
    println!("sum1: {}", sum1);
    println!("sum2: {}", sum2);
    println!("sum3: {}", sum3);
    let sum = sum0 + sum1 + sum2 + sum3;
    println!("sum: {}", sum);
}
unit.0: 0 1 2 3
unit.1: 6
unit.0: 4 5 6 7
unit.1: 22
unit.0: 8 9 10 11
unit.1: 38
unit.0: 12 13 14 15
unit.1: 54
sum0: 6
sum1: 22
sum2: 38
sum3: 54
sum: 120

プログラミングRust

プログラミングRust

  • 作者: Jim Blandy,Jason Orendorff,中田秀基
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2018/08/10
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る