From 5248c02f2e7bd4d284d84a7f8b43d79813d2f149 Mon Sep 17 00:00:00 2001 From: Youngjoon Lee <5462944+youngjoon-lee@users.noreply.github.com> Date: Sat, 17 Aug 2024 21:59:50 +0900 Subject: [PATCH] use rustc-hash --- mixnet-rs/dissemination/Cargo.toml | 1 + mixnet-rs/dissemination/src/iteration.rs | 9 +++++---- mixnet-rs/dissemination/src/node.rs | 12 ++++++------ 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/mixnet-rs/dissemination/Cargo.toml b/mixnet-rs/dissemination/Cargo.toml index 25de796..cb2cc80 100644 --- a/mixnet-rs/dissemination/Cargo.toml +++ b/mixnet-rs/dissemination/Cargo.toml @@ -8,6 +8,7 @@ chrono = "0.4.38" clap = { version = "4.5.16", features = ["derive"] } csv = "1.3.0" rand = "0.8.5" +rustc-hash = "2.0.0" strum = "0.26.3" strum_macros = "0.26.4" tokio = { version = "1.39.2", features = ["rt", "rt-multi-thread", "sync"] } diff --git a/mixnet-rs/dissemination/src/iteration.rs b/mixnet-rs/dissemination/src/iteration.rs index de6242e..b1e3291 100644 --- a/mixnet-rs/dissemination/src/iteration.rs +++ b/mixnet-rs/dissemination/src/iteration.rs @@ -1,6 +1,7 @@ -use std::{collections::HashMap, error::Error}; +use std::error::Error; use rand::{rngs::StdRng, RngCore, SeedableRng}; +use rustc_hash::FxHashMap; use crate::{ node::{MessageId, Node, NodeId}, @@ -44,7 +45,7 @@ pub fn run_iteration(paramset: ParamSet, seed: u64, out_csv_path: &str, topology let mut next_msg_id: MessageId = 0; let total_num_msgs: u32 = paramset.num_senders as u32 * paramset.num_sent_msgs as u32; // To keep track of when each message was sent and how many nodes received it - let mut message_tracker: HashMap = HashMap::new(); + let mut message_tracker: FxHashMap = FxHashMap::default(); // To keep track of how many messages have been disseminated to all nodes let mut num_disseminated_msgs = 0; @@ -104,7 +105,7 @@ fn send_messages( sender_ids: &[NodeId], nodes: &mut [Node], next_msg_id: &mut MessageId, - message_tracker: &mut HashMap, + message_tracker: &mut FxHashMap, ) { for &sender_id in sender_ids.iter() { nodes[sender_id as usize].send(*next_msg_id); @@ -116,7 +117,7 @@ fn send_messages( fn relay_messages( vtime: f32, nodes: &mut [Node], - message_tracker: &mut HashMap, + message_tracker: &mut FxHashMap, num_disseminated_msgs: &mut usize, writer: &mut csv::Writer, ) { diff --git a/mixnet-rs/dissemination/src/node.rs b/mixnet-rs/dissemination/src/node.rs index 5cfbca4..abddb4a 100644 --- a/mixnet-rs/dissemination/src/node.rs +++ b/mixnet-rs/dissemination/src/node.rs @@ -1,4 +1,4 @@ -use std::collections::{HashMap, HashSet}; +use rustc_hash::{FxHashMap, FxHashSet}; use crate::queue::{new_queue, Queue, QueueConfig}; @@ -7,13 +7,13 @@ pub type MessageId = u32; pub struct Node { queue_config: QueueConfig, - // To have the deterministic result, we use Vec instead of HashMap. + // To have the deterministic result, we use Vec instead of FxHashMap. // Building `queues` is inefficient, but it's not a problem because it's done only once at the beginning. // Instead, use `connected_peers` to build `queues` efficiently. queues: Vec<(NodeId, Box>)>, - connected_peers: HashSet, + connected_peers: FxHashSet, // A cache to avoid relaying the same message multiple times. - received_msgs: HashMap, + received_msgs: FxHashMap, peering_degree: u16, } @@ -22,8 +22,8 @@ impl Node { Node { queue_config, queues: Vec::new(), - connected_peers: HashSet::new(), - received_msgs: HashMap::new(), + connected_peers: FxHashSet::default(), + received_msgs: FxHashMap::default(), peering_degree, } }