From 529c6abcb32b8bd3b01d85c36f78584fe54c3279 Mon Sep 17 00:00:00 2001 From: shenjack-5600u <3695888@qq.com> Date: Thu, 25 Apr 2024 23:07:44 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=87=E4=BA=8E=E5=A4=B8=E5=BC=A0=E7=9A=84?= =?UTF-8?q?=E6=8F=90=E5=8D=87=E4=BA=86=EF=BC=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.lock | 2 +- bench/tswn.md | 30 +++++++++++++++ miner/Cargo.toml | 2 +- miner/src/name.rs | 94 ++++++++++++++++++++++++++--------------------- news.md | 6 +++ 5 files changed, 91 insertions(+), 43 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8ce86b6..add3e59 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1831,7 +1831,7 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tswn" -version = "0.1.2" +version = "0.1.3" dependencies = [ "base16384", "chrono", diff --git a/bench/tswn.md b/bench/tswn.md index 2116712..829f6ae 100644 --- a/bench/tswn.md +++ b/bench/tswn.md @@ -2,6 +2,8 @@ ## 0.1.1 +> 445E/d + ```text 2024-04-25T14:38:37.928073Z INFO tswn: 输出文件: "./namerena/namerena-shenjacks-2024-04-25_22-38-37.txt" 2024-04-25T14:38:37.928448Z INFO tswn: 开始: 0 结尾: 100000000 @@ -23,6 +25,8 @@ ## 0.1.2 +> 478E/d + ```text 2024-04-25T14:49:18.046424Z INFO tswn: 输出文件: "./namerena/namerena-shenjacks-2024-04-25_22-49-18.txt" 2024-04-25T14:49:18.046647Z INFO tswn: 开始: 0 结尾: 100000000 @@ -44,3 +48,29 @@ 2024-04-25T14:50:47.147717Z INFO tswn::cacluate: | 1|Id: 49445420|552772.98/s 477.596E/d 10.05⬇️|0 |预计:0:1:31| 2024-04-25T14:50:57.108934Z INFO tswn::cacluate: | 1|Id: 54973140|554932.97/s 479.462E/d 9.96⬆️|0 |预计:0:1:21| ``` + +## 0.1.3 + +> 550E/d + +```text +2024-04-25T15:02:14.455532Z INFO tswn: 输出文件: "./namerena/namerena-shenjacks-2024-04-25_23-02-14.txt" +2024-04-25T15:02:14.455701Z INFO tswn: 开始: 0 结尾: 100000000 +2024-04-25T15:02:14.455757Z INFO tswn: 线程数: 1 +2024-04-25T15:02:14.455806Z INFO tswn: 八围预期: 640 +2024-04-25T15:02:14.455853Z INFO tswn: 队伍名: shenjacks +2024-04-25T15:02:14.455899Z INFO tswn: 输出文件名: "./namerena/namerena-shenjacks-2024-04-25_23-02-14.txt" +2024-04-25T15:02:14.455979Z INFO tswn: 开始计算 +2024-04-25T15:02:14.456032Z INFO tswn: 线程 thread_0 开始计算 +2024-04-25T15:02:14.471838Z INFO tswn::cacluate: | 1|Id: 10000|635833.00/s 549.360E/d 0.02⬆️|0 |预计:0:2:37| +2024-04-25T15:02:24.556257Z INFO tswn::cacluate: | 1|Id: 6368330|630517.99/s 544.768E/d 10.08⬇️|0 |预计:0:2:28| +2024-04-25T15:02:34.374117Z INFO tswn::cacluate: | 1|Id: 12673500|642224.18/s 554.882E/d 9.82⬆️|0 |预计:0:2:15| +2024-04-25T15:02:44.419013Z INFO tswn::cacluate: | 1|Id: 19095740|639400.29/s 552.442E/d 10.04⬇️|0 |预计:0:2:6| +2024-04-25T15:02:54.349142Z INFO tswn::cacluate: | 1|Id: 25489740|643910.74/s 556.339E/d 9.93⬆️|0 |预计:0:1:55| +2024-04-25T15:03:04.362691Z INFO tswn::cacluate: | 1|Id: 31928840|643051.51/s 555.597E/d 10.01⬇️|0 |预计:0:1:45| +2024-04-25T15:03:14.336906Z INFO tswn::cacluate: | 1|Id: 38359350|644727.96/s 557.045E/d 9.97⬆️|0 |预计:0:1:35| +2024-04-25T15:03:24.423038Z INFO tswn::cacluate: | 1|Id: 44806620|639233.80/s 552.298E/d 10.09⬇️|0 |预计:0:1:26| +2024-04-25T15:03:34.344623Z INFO tswn::cacluate: | 1|Id: 51198950|644297.20/s 556.673E/d 9.92⬆️|0 |预计:0:1:15| +2024-04-25T15:03:44.331352Z INFO tswn::cacluate: | 1|Id: 57641920|645164.91/s 557.422E/d 9.99⬆️|0 |预计:0:1:5| +2024-04-25T15:03:54.332496Z INFO tswn::cacluate: | 1|Id: 64093560|645118.80/s 557.383E/d 10.00⬇️|0 |预计:0:0:55| +``` \ No newline at end of file diff --git a/miner/Cargo.toml b/miner/Cargo.toml index b5d27ba..fafe736 100644 --- a/miner/Cargo.toml +++ b/miner/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "tswn" description = "tool shenjack work shop namerena" -version = "0.1.2" +version = "0.1.3" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/miner/src/name.rs b/miner/src/name.rs index cb9c0e4..18dd2e0 100644 --- a/miner/src/name.rs +++ b/miner/src/name.rs @@ -138,18 +138,31 @@ impl Namer { let b_name_len = name_len + 1; for _ in 0..2 { let mut s = 0_u8; - unsafe { val.swap_unchecked(s as usize, 0) }; - let mut k = 0; - for i in 0..256 { - // s = s.wrapping_add(if k == 0 { 0 } else { name_bytes[k - 1] }); - s = s.wrapping_add(if k == 0 { - 0 - } else { - *unsafe { name_bytes.get_unchecked(k - 1) } - }); - s = s.wrapping_add(val[i]); - unsafe { val.swap_unchecked(i, s as usize) } - k = if k == b_name_len - 1 { 0 } else { k + 1 }; + // unsafe { val.swap_unchecked(s as usize, 0) }; + // let mut k = 0; + // for i in 0..256 { + // s = s.wrapping_add(if k == 0 { + // 0 + // } else { + // *unsafe { name_bytes.get_unchecked(k - 1) } + // }); + // s = s.wrapping_add(val[i]); + // unsafe { val.swap_unchecked(i, s as usize) } + // k = if k == b_name_len - 1 { 0 } else { k + 1 }; + // } + unsafe { + val.swap_unchecked(s as usize, 0); + let mut k = 0; + for i in 0..256 { + s = s.wrapping_add(if k == 0 { + 0 + } else { + *name_bytes.get_unchecked(k - 1) + }); + s = s.wrapping_add(val[i]); + val.swap_unchecked(i, s as usize); + k = if k == b_name_len - 1 { 0 } else { k + 1 }; + } } } // simd 优化 @@ -163,17 +176,14 @@ impl Namer { for i in (0..256).step_by(64) { // 一次性加载64个数字 - // let mut x = u8x64::from_slice(&simd_val[i..]); let mut x = u8x64::from_slice(unsafe { simd_val.get_unchecked(i..) }); x = x * simd_181 + simd_160; // 写入到 simd_val - // x.copy_to_slice(&mut simd_val[i..]); unsafe { x.copy_to_slice(simd_val.get_unchecked_mut(i..)); } let y = x & simd_63; - // y.copy_to_slice(&mut simd_val_b[i..]); unsafe { y.copy_to_slice(simd_val_b.get_unchecked_mut(i..)); } @@ -182,14 +192,6 @@ impl Namer { let mut mod_count = 0; for i in 0..96 { - // if simd_val[i] > 88 && simd_val[i] < 217 { - // // name_base[mod_count as usize] = simd_val_b[i]; - // unsafe { - // *name_base.get_unchecked_mut(mod_count as usize) = - // *simd_val_b.get_unchecked(i); - // } - // mod_count += 1; - // } unsafe { if simd_val.get_unchecked(i) > &88 && simd_val.get_unchecked(i) < &217 { *name_base.get_unchecked_mut(mod_count as usize) = @@ -203,13 +205,12 @@ impl Namer { } if mod_count < 31 { for i in 96..256 { - if simd_val[i] > 88 && simd_val[i] < 217 { - // name_base[mod_count as usize] = simd_val_b[i]; - unsafe { + unsafe { + if simd_val.get_unchecked(i) > &88 && simd_val.get_unchecked(i) < &217 { *name_base.get_unchecked_mut(mod_count as usize) = *simd_val_b.get_unchecked(i); + mod_count += 1; } - mod_count += 1; } if mod_count > 30 { break; @@ -231,20 +232,31 @@ impl Namer { } // 计算 name_prop - let mut prop_name = name_base[0..32].to_vec(); - prop_name[0..10].sort_unstable(); - name_prop[0] = 154 - + prop_name[3] as u32 - + prop_name[4] as u32 - + prop_name[5] as u32 - + prop_name[6] as u32; - name_prop[1] = median(prop_name[10], prop_name[11], prop_name[12]) as u32 + 36; - name_prop[2] = median(prop_name[13], prop_name[14], prop_name[15]) as u32 + 36; - name_prop[3] = median(prop_name[16], prop_name[17], prop_name[18]) as u32 + 36; - name_prop[4] = median(prop_name[19], prop_name[20], prop_name[21]) as u32 + 36; - name_prop[5] = median(prop_name[22], prop_name[23], prop_name[24]) as u32 + 36; - name_prop[6] = median(prop_name[25], prop_name[26], prop_name[27]) as u32 + 36; - name_prop[7] = median(prop_name[28], prop_name[29], prop_name[30]) as u32 + 36; + // let mut prop_name = name_base[0..32].to_vec(); + // prop_name[0..10].sort_unstable(); + // name_prop[0] = 154 + // + prop_name[3] as u32 + // + prop_name[4] as u32 + // + prop_name[5] as u32 + // + prop_name[6] as u32; + // name_prop[1] = median(prop_name[10], prop_name[11], prop_name[12]) as u32 + 36; + // name_prop[2] = median(prop_name[13], prop_name[14], prop_name[15]) as u32 + 36; + // name_prop[3] = median(prop_name[16], prop_name[17], prop_name[18]) as u32 + 36; + // name_prop[4] = median(prop_name[19], prop_name[20], prop_name[21]) as u32 + 36; + // name_prop[5] = median(prop_name[22], prop_name[23], prop_name[24]) as u32 + 36; + // name_prop[6] = median(prop_name[25], prop_name[26], prop_name[27]) as u32 + 36; + // name_prop[7] = median(prop_name[28], prop_name[29], prop_name[30]) as u32 + 36; + // 疯狂的 unsafe 优化(确信 + unsafe { + let mut prop_name = [0_u8; 32]; + prop_name.copy_from_slice(name_base.get_unchecked(0..32)); + prop_name.get_unchecked_mut(0..10).sort_unstable(); + *name_prop.get_unchecked_mut(0) = 154 + + *prop_name.get_unchecked(3) as u32 + + *prop_name.get_unchecked(4) as u32 + + *prop_name.get_unchecked(5) as u32 + + *prop_name.get_unchecked(6) as u32 + } Self { name: name.to_string(), diff --git a/news.md b/news.md index afbf308..70fba5f 100644 --- a/news.md +++ b/news.md @@ -2,6 +2,12 @@ ## tswn +### 0.1.3 + +> 550E/d + +夸张, 比 0.1.1 快了 100E/d + ### 0.1.2 优化了一些边界检查, 反正就是没用