过于夸张的提升了(

This commit is contained in:
shenjack-5600u 2024-04-25 23:07:44 +08:00
parent 087b318e8d
commit 529c6abcb3
Signed by: shenjack
GPG Key ID: FDF9864E11C7E79F
5 changed files with 91 additions and 43 deletions

2
Cargo.lock generated
View File

@ -1831,7 +1831,7 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
[[package]] [[package]]
name = "tswn" name = "tswn"
version = "0.1.2" version = "0.1.3"
dependencies = [ dependencies = [
"base16384", "base16384",
"chrono", "chrono",

View File

@ -2,6 +2,8 @@
## 0.1.1 ## 0.1.1
> 445E/d
```text ```text
2024-04-25T14:38:37.928073Z INFO tswn: 输出文件: "./namerena/namerena-shenjacks-2024-04-25_22-38-37.txt" 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 2024-04-25T14:38:37.928448Z INFO tswn: 开始: 0 结尾: 100000000
@ -23,6 +25,8 @@
## 0.1.2 ## 0.1.2
> 478E/d
```text ```text
2024-04-25T14:49:18.046424Z INFO tswn: 输出文件: "./namerena/namerena-shenjacks-2024-04-25_22-49-18.txt" 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 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: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| 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|
```

View File

@ -1,7 +1,7 @@
[package] [package]
name = "tswn" name = "tswn"
description = "tool shenjack work shop namerena" description = "tool shenjack work shop namerena"
version = "0.1.2" version = "0.1.3"
edition = "2021" edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

View File

@ -138,18 +138,31 @@ impl Namer {
let b_name_len = name_len + 1; let b_name_len = name_len + 1;
for _ in 0..2 { for _ in 0..2 {
let mut s = 0_u8; let mut s = 0_u8;
unsafe { val.swap_unchecked(s as usize, 0) }; // unsafe { val.swap_unchecked(s as usize, 0) };
let mut k = 0; // let mut k = 0;
for i in 0..256 { // 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 {
s = s.wrapping_add(if k == 0 { // 0
0 // } else {
} else { // *unsafe { name_bytes.get_unchecked(k - 1) }
*unsafe { name_bytes.get_unchecked(k - 1) } // });
}); // s = s.wrapping_add(val[i]);
s = s.wrapping_add(val[i]); // unsafe { val.swap_unchecked(i, s as usize) }
unsafe { val.swap_unchecked(i, s as usize) } // k = if k == b_name_len - 1 { 0 } else { k + 1 };
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 优化 // simd 优化
@ -163,17 +176,14 @@ impl Namer {
for i in (0..256).step_by(64) { for i in (0..256).step_by(64) {
// 一次性加载64个数字 // 一次性加载64个数字
// let mut x = u8x64::from_slice(&simd_val[i..]);
let mut x = u8x64::from_slice(unsafe { simd_val.get_unchecked(i..) }); let mut x = u8x64::from_slice(unsafe { simd_val.get_unchecked(i..) });
x = x * simd_181 + simd_160; x = x * simd_181 + simd_160;
// 写入到 simd_val // 写入到 simd_val
// x.copy_to_slice(&mut simd_val[i..]);
unsafe { unsafe {
x.copy_to_slice(simd_val.get_unchecked_mut(i..)); x.copy_to_slice(simd_val.get_unchecked_mut(i..));
} }
let y = x & simd_63; let y = x & simd_63;
// y.copy_to_slice(&mut simd_val_b[i..]);
unsafe { unsafe {
y.copy_to_slice(simd_val_b.get_unchecked_mut(i..)); y.copy_to_slice(simd_val_b.get_unchecked_mut(i..));
} }
@ -182,14 +192,6 @@ impl Namer {
let mut mod_count = 0; let mut mod_count = 0;
for i in 0..96 { 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 { unsafe {
if simd_val.get_unchecked(i) > &88 && simd_val.get_unchecked(i) < &217 { if simd_val.get_unchecked(i) > &88 && simd_val.get_unchecked(i) < &217 {
*name_base.get_unchecked_mut(mod_count as usize) = *name_base.get_unchecked_mut(mod_count as usize) =
@ -203,13 +205,12 @@ impl Namer {
} }
if mod_count < 31 { if mod_count < 31 {
for i in 96..256 { for i in 96..256 {
if simd_val[i] > 88 && simd_val[i] < 217 { unsafe {
// name_base[mod_count as usize] = simd_val_b[i]; if simd_val.get_unchecked(i) > &88 && simd_val.get_unchecked(i) < &217 {
unsafe {
*name_base.get_unchecked_mut(mod_count as usize) = *name_base.get_unchecked_mut(mod_count as usize) =
*simd_val_b.get_unchecked(i); *simd_val_b.get_unchecked(i);
mod_count += 1;
} }
mod_count += 1;
} }
if mod_count > 30 { if mod_count > 30 {
break; break;
@ -231,20 +232,31 @@ impl Namer {
} }
// 计算 name_prop // 计算 name_prop
let mut prop_name = name_base[0..32].to_vec(); // let mut prop_name = name_base[0..32].to_vec();
prop_name[0..10].sort_unstable(); // prop_name[0..10].sort_unstable();
name_prop[0] = 154 // name_prop[0] = 154
+ prop_name[3] as u32 // + prop_name[3] as u32
+ prop_name[4] as u32 // + prop_name[4] as u32
+ prop_name[5] as u32 // + prop_name[5] as u32
+ prop_name[6] 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[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[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[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[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[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[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; // 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 { Self {
name: name.to_string(), name: name.to_string(),

View File

@ -2,6 +2,12 @@
## tswn ## tswn
### 0.1.3
> 550E/d
夸张, 比 0.1.1 快了 100E/d
### 0.1.2 ### 0.1.2
优化了一些边界检查, 反正就是没用 优化了一些边界检查, 反正就是没用