过于夸张的提升了(

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]]
name = "tswn"
version = "0.1.2"
version = "0.1.3"
dependencies = [
"base16384",
"chrono",

View File

@ -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|
```

View File

@ -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

View File

@ -138,20 +138,33 @@ 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) };
// 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[k - 1] });
s = s.wrapping_add(if k == 0 {
0
} else {
*unsafe { name_bytes.get_unchecked(k - 1) }
*name_bytes.get_unchecked(k - 1)
});
s = s.wrapping_add(val[i]);
unsafe { val.swap_unchecked(i, s as usize) }
val.swap_unchecked(i, s as usize);
k = if k == b_name_len - 1 { 0 } else { k + 1 };
}
}
}
// simd 优化
#[cfg(feature = "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,14 +205,13 @@ 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 {
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;
}
}
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(),

View File

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