Compare commits
5 Commits
e34b724519
...
78b9f39bea
Author | SHA1 | Date | |
---|---|---|---|
78b9f39bea | |||
af75747980 | |||
529c6abcb3 | |||
087b318e8d | |||
06ac14d33d |
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -1831,7 +1831,7 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tswn"
|
name = "tswn"
|
||||||
version = "0.1.0"
|
version = "0.1.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base16384",
|
"base16384",
|
||||||
"chrono",
|
"chrono",
|
||||||
|
76
bench/tswn.md
Normal file
76
bench/tswn.md
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
# tswn 效率记录
|
||||||
|
|
||||||
|
## 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
|
||||||
|
2024-04-25T14:38:37.928527Z INFO tswn: 线程数: 1
|
||||||
|
2024-04-25T14:38:37.928582Z INFO tswn: 八围预期: 640
|
||||||
|
2024-04-25T14:38:37.928633Z INFO tswn: 队伍名: shenjacks
|
||||||
|
2024-04-25T14:38:37.928689Z INFO tswn: 输出文件名: "./namerena/namerena-shenjacks-2024-04-25_22-38-37.txt"
|
||||||
|
2024-04-25T14:38:37.928773Z INFO tswn: 开始计算
|
||||||
|
2024-04-25T14:38:37.928857Z INFO tswn: 线程 thread_0 开始计算
|
||||||
|
2024-04-25T14:38:37.947371Z INFO tswn::cacluate: | 1|Id: 10000|542408.18/s 468.641E/d 0.02⬆️|0 |预计:0:3:4|
|
||||||
|
2024-04-25T14:38:48.111355Z INFO tswn::cacluate: | 1|Id: 5434080|533663.84/s 461.086E/d 10.16⬇️|0 |预计:0:2:57|
|
||||||
|
2024-04-25T14:38:58.566294Z INFO tswn::cacluate: | 1|Id: 10770710|510448.33/s 441.027E/d 10.45⬇️|0 |预计:0:2:54|
|
||||||
|
2024-04-25T14:39:08.419676Z INFO tswn::cacluate: | 1|Id: 15875190|518062.38/s 447.606E/d 9.85⬆️|0 |预计:0:2:42|
|
||||||
|
2024-04-25T14:39:18.371574Z INFO tswn::cacluate: | 1|Id: 21055810|520575.43/s 449.777E/d 9.95⬆️|0 |预计:0:2:31|
|
||||||
|
2024-04-25T14:39:28.277127Z INFO tswn::cacluate: | 1|Id: 26261560|525550.00/s 454.075E/d 9.91⬆️|0 |预计:0:2:20|
|
||||||
|
2024-04-25T14:39:38.073338Z INFO tswn::cacluate: | 1|Id: 31517060|536495.12/s 463.532E/d 9.80⬆️|0 |预计:0:2:7|
|
||||||
|
2024-04-25T14:39:48.224642Z INFO tswn::cacluate: | 1|Id: 36882010|528507.78/s 456.631E/d 10.15⬇️|0 |预计:0:1:59|
|
||||||
|
```
|
||||||
|
|
||||||
|
## 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
|
||||||
|
2024-04-25T14:49:18.046739Z INFO tswn: 线程数: 1
|
||||||
|
2024-04-25T14:49:18.046814Z INFO tswn: 八围预期: 640
|
||||||
|
2024-04-25T14:49:18.046888Z INFO tswn: 队伍名: shenjacks
|
||||||
|
2024-04-25T14:49:18.046961Z INFO tswn: 输出文件名: "./namerena/namerena-shenjacks-2024-04-25_22-49-18.txt"
|
||||||
|
2024-04-25T14:49:18.047072Z INFO tswn: 开始计算
|
||||||
|
2024-04-25T14:49:18.047205Z INFO tswn: 线程 thread_0 开始计算
|
||||||
|
2024-04-25T14:49:18.067274Z INFO tswn::cacluate: | 1|Id: 10000|500668.39/s 432.577E/d 0.02⬆️|0 |预计:0:3:19|
|
||||||
|
2024-04-25T14:49:26.959820Z INFO tswn::cacluate: | 1|Id: 5016680|563031.98/s 486.460E/d 8.89⬆️|0 |预计:0:2:48|
|
||||||
|
2024-04-25T14:49:37.050652Z INFO tswn::cacluate: | 1|Id: 10646990|557974.03/s 482.090E/d 10.09⬇️|0 |预计:0:2:40|
|
||||||
|
2024-04-25T14:49:47.117235Z INFO tswn::cacluate: | 1|Id: 16226730|554294.40/s 478.910E/d 10.07⬇️|0 |预计:0:2:31|
|
||||||
|
2024-04-25T14:49:57.134571Z INFO tswn::cacluate: | 1|Id: 21769670|553354.55/s 478.098E/d 10.02⬇️|0 |预计:0:2:21|
|
||||||
|
2024-04-25T14:50:07.084869Z INFO tswn::cacluate: | 1|Id: 27303210|556126.12/s 480.493E/d 9.95⬆️|0 |预计:0:2:10|
|
||||||
|
2024-04-25T14:50:17.165308Z INFO tswn::cacluate: | 1|Id: 32864470|551717.27/s 476.684E/d 10.08⬇️|0 |预计:0:2:1|
|
||||||
|
2024-04-25T14:50:27.177012Z INFO tswn::cacluate: | 1|Id: 38381640|551097.33/s 476.148E/d 10.01⬇️|0 |预计:0:1:51|
|
||||||
|
2024-04-25T14:50:37.102177Z INFO tswn::cacluate: | 1|Id: 43892610|555281.37/s 479.763E/d 9.92⬆️|0 |预计:0:1:41|
|
||||||
|
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|
|
||||||
|
```
|
@ -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.0"
|
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
|
||||||
|
@ -207,6 +207,9 @@ pub fn predict_20(name: &Namer) -> f64 {
|
|||||||
|
|
||||||
for i in 0..1034 {
|
for i in 0..1034 {
|
||||||
sum += xp[i] * xuping20::MODEL[i];
|
sum += xp[i] * xuping20::MODEL[i];
|
||||||
|
// unsafe {
|
||||||
|
// sum += xp.get_unchecked(i) * xuping20::MODEL.get_unchecked(i);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
// for i in 0..1034 {
|
// for i in 0..1034 {
|
||||||
// sum_qd += xp[i] * xuping20::MODEL_QD[i];
|
// sum_qd += xp[i] * xuping20::MODEL_QD[i];
|
||||||
|
@ -138,15 +138,17 @@ 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 { 0 } else { *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) }
|
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 };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// simd 优化
|
// simd 优化
|
||||||
#[cfg(feature = "simd")]
|
#[cfg(feature = "simd")]
|
||||||
{
|
{
|
||||||
@ -158,40 +160,40 @@ 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..) });
|
||||||
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 {
|
||||||
|
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 {
|
||||||
|
y.copy_to_slice(simd_val_b.get_unchecked_mut(i..));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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 {
|
unsafe {
|
||||||
*name_base.get_unchecked_mut(mod_count as usize) =
|
if simd_val.get_unchecked(i) > &88 && simd_val.get_unchecked(i) < &217 {
|
||||||
*simd_val_b.get_unchecked(i);
|
*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 {
|
if mod_count > 30 {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
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 {
|
|
||||||
// name_base[mod_count as usize] = simd_val_b[i];
|
|
||||||
unsafe {
|
unsafe {
|
||||||
*name_base.get_unchecked_mut(mod_count as usize) =
|
if simd_val.get_unchecked(i) > &88 && simd_val.get_unchecked(i) < &217 {
|
||||||
*simd_val_b.get_unchecked(i);
|
*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 {
|
if mod_count > 30 {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -212,20 +214,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(),
|
||||||
@ -242,7 +255,10 @@ impl Namer {
|
|||||||
pub fn update_skill(&mut self) {
|
pub fn update_skill(&mut self) {
|
||||||
let skill_id = self.skl_id.as_mut();
|
let skill_id = self.skl_id.as_mut();
|
||||||
for i in 0..40 {
|
for i in 0..40 {
|
||||||
skill_id[i] = i as u8
|
skill_id[i] = i as u8;
|
||||||
|
// unsafe {
|
||||||
|
// *skill_id.get_unchecked_mut(i) = i as u8;
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "simd")]
|
#[cfg(feature = "simd")]
|
||||||
@ -257,12 +273,18 @@ impl Namer {
|
|||||||
let simd_32 = u8x64::splat(32);
|
let simd_32 = u8x64::splat(32);
|
||||||
|
|
||||||
for i in (0..256).step_by(64) {
|
for i in (0..256).step_by(64) {
|
||||||
let mut x = u8x64::from_slice(&simd_val[i..]);
|
// let mut x = u8x64::from_slice(&simd_val[i..]);
|
||||||
let mut y = u8x64::from_slice(&simd_val_b[i..]);
|
// let mut y = u8x64::from_slice(&simd_val_b[i..]);
|
||||||
|
unsafe {
|
||||||
|
let mut x = u8x64::from_slice(simd_val.get_unchecked(i..));
|
||||||
|
let mut y = u8x64::from_slice(simd_val_b.get_unchecked(i..));
|
||||||
x = x * simd_181 + simd_199 & simd_128;
|
x = x * simd_181 + simd_199 & simd_128;
|
||||||
y = y * simd_53 & simd_63 ^ simd_32;
|
y = y * simd_53 & simd_63 ^ simd_32;
|
||||||
x.copy_to_slice(&mut simd_val[i..]);
|
x.copy_to_slice(simd_val.get_unchecked_mut(i..));
|
||||||
y.copy_to_slice(&mut simd_val_b[i..]);
|
y.copy_to_slice(simd_val_b.get_unchecked_mut(i..));
|
||||||
|
}
|
||||||
|
// x.copy_to_slice(&mut simd_val[i..]);
|
||||||
|
// y.copy_to_slice(&mut simd_val_b[i..]);
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut mod_count = 0;
|
let mut mod_count = 0;
|
||||||
@ -271,6 +293,12 @@ impl Namer {
|
|||||||
self.name_base[mod_count as usize] = simd_val_b[i];
|
self.name_base[mod_count as usize] = simd_val_b[i];
|
||||||
mod_count += 1;
|
mod_count += 1;
|
||||||
}
|
}
|
||||||
|
// unsafe {
|
||||||
|
// if simd_val.get_unchecked(i) != &0 {
|
||||||
|
// *self.name_base.get_unchecked_mut(mod_count as usize) = *simd_val_b.get_unchecked(i);
|
||||||
|
// mod_count += 1;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
// const int N = 256, M = 128, K = 64, skill_cnt = 40, max_len = 25;
|
// const int N = 256, M = 128, K = 64, skill_cnt = 40, max_len = 25;
|
||||||
let mut a: u8 = 0;
|
let mut a: u8 = 0;
|
||||||
@ -278,23 +306,35 @@ impl Namer {
|
|||||||
let mut s: u8 = 0;
|
let mut s: u8 = 0;
|
||||||
for _ in 0..2 {
|
for _ in 0..2 {
|
||||||
for i in 0..40 {
|
for i in 0..40 {
|
||||||
let rnd = {
|
let rnd = unsafe {
|
||||||
a += 1;
|
a += 1;
|
||||||
b = b.wrapping_add(self.val[a as usize]);
|
// b = b.wrapping_add(self.val[a as usize]);
|
||||||
self.val.swap(a as usize, b as usize);
|
b = b.wrapping_add(*self.val.get_unchecked(a as usize));
|
||||||
let u: u8 = self.val[((self.val[a as usize] as u16
|
// self.val.swap(a as usize, b as usize);
|
||||||
+ self.val[b as usize] as u16)
|
self.val.swap_unchecked(a as usize, b as usize);
|
||||||
& 255) as usize];
|
// let u: u8 = self.val[((self.val[a as usize] as u16 + self.val[b as usize] as u16) & 255) as usize];
|
||||||
|
let u: u8 = *self.val.get_unchecked(
|
||||||
|
((*self.val.get_unchecked(a as usize) as u16 + *self.val.get_unchecked(b as usize) as u16) & 255)
|
||||||
|
as usize,
|
||||||
|
);
|
||||||
a += 1;
|
a += 1;
|
||||||
b = b.wrapping_add(self.val[a as usize]);
|
// b = b.wrapping_add(self.val[a as usize]);
|
||||||
self.val.swap(a as usize, b as usize);
|
b = b.wrapping_add(*self.val.get_unchecked(a as usize));
|
||||||
let t = self.val[((self.val[a as usize] as u16
|
// self.val.swap(a as usize, b as usize);
|
||||||
+ self.val[b as usize] as u16)
|
self.val.swap_unchecked(a as usize, b as usize);
|
||||||
& 255) as usize];
|
// let t = self.val[((self.val[a as usize] as u16 + self.val[b as usize] as u16) & 255) as usize];
|
||||||
|
let t: u8 = *self.val.get_unchecked(
|
||||||
|
((*self.val.get_unchecked(a as usize) as u16 + *self.val.get_unchecked(b as usize) as u16) & 255)
|
||||||
|
as usize,
|
||||||
|
);
|
||||||
(((u as u32) << 8 | t as u32) % 40) as u8
|
(((u as u32) << 8 | t as u32) % 40) as u8
|
||||||
};
|
};
|
||||||
s = (s as u16 + rnd as u16 + skill_id[i] as u16) as u8 % 40;
|
// s = (s as u16 + rnd as u16 + skill_id[i] as u16) as u8 % 40;
|
||||||
skill_id.swap(i as usize, s as usize);
|
// skill_id.swap(i as usize, s as usize);
|
||||||
|
unsafe {
|
||||||
|
s = (s as u16 + rnd as u16 + *skill_id.get_unchecked(i as usize) as u16) as u8 % 40;
|
||||||
|
skill_id.swap_unchecked(i as usize, s as usize);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let mut last = -1;
|
let mut last = -1;
|
||||||
@ -319,12 +359,10 @@ impl Namer {
|
|||||||
// *= 2
|
// *= 2
|
||||||
}
|
}
|
||||||
if (self.skl_freq[14] != 0) && (last != 14) {
|
if (self.skl_freq[14] != 0) && (last != 14) {
|
||||||
self.skl_freq[14] +=
|
self.skl_freq[14] += min(min(self.name_base[60], self.name_base[61]), self.skl_freq[14]);
|
||||||
min(min(self.name_base[60], self.name_base[61]), self.skl_freq[14]);
|
|
||||||
}
|
}
|
||||||
if (self.skl_freq[15] != 0) && (last != 15) {
|
if (self.skl_freq[15] != 0) && (last != 15) {
|
||||||
self.skl_freq[15] +=
|
self.skl_freq[15] += min(min(self.name_base[62], self.name_base[63]), self.skl_freq[15]);
|
||||||
min(min(self.name_base[62], self.name_base[63]), self.skl_freq[15]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -395,10 +433,9 @@ impl Namer {
|
|||||||
let skills = {
|
let skills = {
|
||||||
let mut base = "".to_string();
|
let mut base = "".to_string();
|
||||||
let skill_names = [
|
let skill_names = [
|
||||||
"火球", "冰冻", "雷击", "地裂", "吸血", "投毒", "连击", "会心", "瘟疫", "命轮",
|
"火球", "冰冻", "雷击", "地裂", "吸血", "投毒", "连击", "会心", "瘟疫", "命轮", "狂暴", "魅惑", "加速", "减速",
|
||||||
"狂暴", "魅惑", "加速", "减速", "诅咒", "治愈", "苏生", "净化", "铁壁", "蓄力",
|
"诅咒", "治愈", "苏生", "净化", "铁壁", "蓄力", "聚气", "潜行", "血祭", "分身", "幻术", "防御", "守护", "反弹",
|
||||||
"聚气", "潜行", "血祭", "分身", "幻术", "防御", "守护", "反弹", "护符", "护盾",
|
"护符", "护盾", "反击", "吞噬", "亡灵", "垂死", "隐匿", "啧", "啧", "啧", "啧", "啧",
|
||||||
"反击", "吞噬", "亡灵", "垂死", "隐匿", "啧", "啧", "啧", "啧", "啧",
|
|
||||||
];
|
];
|
||||||
// 后处理
|
// 后处理
|
||||||
let mut skills = [0; 40];
|
let mut skills = [0; 40];
|
||||||
@ -445,20 +482,16 @@ mod test {
|
|||||||
let namer = Namer::new_from_team_namer_unchecked(&team, "x");
|
let namer = Namer::new_from_team_namer_unchecked(&team, "x");
|
||||||
|
|
||||||
let val_vec: Vec<u8> = vec![
|
let val_vec: Vec<u8> = vec![
|
||||||
225, 96, 49, 232, 20, 47, 115, 245, 234, 23, 111, 178, 231, 100, 118, 197, 42, 98, 137,
|
225, 96, 49, 232, 20, 47, 115, 245, 234, 23, 111, 178, 231, 100, 118, 197, 42, 98, 137, 196, 209, 86, 114, 184, 167,
|
||||||
196, 209, 86, 114, 184, 167, 129, 164, 239, 205, 211, 82, 173, 189, 153, 198, 67, 4, 3,
|
129, 164, 239, 205, 211, 82, 173, 189, 153, 198, 67, 4, 3, 90, 52, 128, 134, 176, 145, 85, 9, 250, 30, 63, 247, 240,
|
||||||
90, 52, 128, 134, 176, 145, 85, 9, 250, 30, 63, 247, 240, 17, 215, 200, 78, 188, 132,
|
17, 215, 200, 78, 188, 132, 117, 10, 45, 162, 79, 123, 73, 109, 91, 57, 210, 22, 175, 107, 203, 103, 32, 83, 70, 242,
|
||||||
117, 10, 45, 162, 79, 123, 73, 109, 91, 57, 210, 22, 175, 107, 203, 103, 32, 83, 70,
|
75, 220, 140, 148, 15, 138, 44, 228, 43, 105, 199, 99, 116, 97, 69, 80, 172, 230, 25, 224, 33, 31, 135, 235, 74, 193,
|
||||||
242, 75, 220, 140, 148, 15, 138, 44, 228, 43, 105, 199, 99, 116, 97, 69, 80, 172, 230,
|
238, 233, 88, 216, 204, 24, 163, 141, 6, 201, 26, 38, 21, 186, 237, 101, 206, 212, 76, 144, 219, 149, 169, 202, 110,
|
||||||
25, 224, 33, 31, 135, 235, 74, 193, 238, 233, 88, 216, 204, 24, 163, 141, 6, 201, 26,
|
41, 166, 139, 194, 168, 34, 142, 147, 187, 108, 223, 94, 5, 243, 226, 60, 40, 102, 51, 87, 61, 236, 46, 159, 64, 227,
|
||||||
38, 21, 186, 237, 101, 206, 212, 76, 144, 219, 149, 169, 202, 110, 41, 166, 139, 194,
|
113, 190, 81, 127, 65, 8, 183, 253, 150, 249, 229, 37, 156, 182, 180, 246, 124, 244, 174, 122, 89, 120, 160, 35, 143,
|
||||||
168, 34, 142, 147, 187, 108, 223, 94, 5, 243, 226, 60, 40, 102, 51, 87, 61, 236, 46,
|
11, 14, 151, 133, 27, 177, 251, 221, 207, 58, 29, 131, 119, 171, 157, 93, 185, 48, 112, 192, 191, 66, 106, 39, 59,
|
||||||
159, 64, 227, 113, 190, 81, 127, 65, 8, 183, 253, 150, 249, 229, 37, 156, 182, 180,
|
92, 19, 1, 155, 254, 84, 222, 165, 54, 121, 13, 50, 36, 130, 95, 161, 213, 170, 28, 241, 71, 53, 68, 218, 0, 252, 16,
|
||||||
246, 124, 244, 174, 122, 89, 120, 160, 35, 143, 11, 14, 151, 133, 27, 177, 251, 221,
|
136, 179, 158, 248, 2, 154, 12, 125, 126, 255, 18, 146, 104, 77, 152, 208, 214, 72, 55, 195, 62, 7, 217, 56, 181,
|
||||||
207, 58, 29, 131, 119, 171, 157, 93, 185, 48, 112, 192, 191, 66, 106, 39, 59, 92, 19,
|
|
||||||
1, 155, 254, 84, 222, 165, 54, 121, 13, 50, 36, 130, 95, 161, 213, 170, 28, 241, 71,
|
|
||||||
53, 68, 218, 0, 252, 16, 136, 179, 158, 248, 2, 154, 12, 125, 126, 255, 18, 146, 104,
|
|
||||||
77, 152, 208, 214, 72, 55, 195, 62, 7, 217, 56, 181,
|
|
||||||
];
|
];
|
||||||
assert_eq!(namer.val.to_vec(), val_vec);
|
assert_eq!(namer.val.to_vec(), val_vec);
|
||||||
}
|
}
|
||||||
@ -468,19 +501,17 @@ mod test {
|
|||||||
let team = TeamNamer::new_unchecked("x");
|
let team = TeamNamer::new_unchecked("x");
|
||||||
let mut namer = Namer::new_from_team_namer_unchecked(&team, "x");
|
let mut namer = Namer::new_from_team_namer_unchecked(&team, "x");
|
||||||
let base_name_vec: Vec<u8> = vec![
|
let base_name_vec: Vec<u8> = vec![
|
||||||
53, 0, 40, 4, 58, 61, 37, 46, 56, 51, 21, 20, 27, 17, 15, 26, 13, 30, 52, 63, 36, 30,
|
53, 0, 40, 4, 58, 61, 37, 46, 56, 51, 21, 20, 27, 17, 15, 26, 13, 30, 52, 63, 36, 30, 57, 34, 22, 37, 35, 6, 12, 25,
|
||||||
57, 34, 22, 37, 35, 6, 12, 25, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
];
|
];
|
||||||
let full_base_name_vec: Vec<u8> = vec![
|
let full_base_name_vec: Vec<u8> = vec![
|
||||||
53, 0, 40, 4, 58, 61, 37, 46, 56, 51, 21, 20, 27, 17, 15, 26, 13, 30, 52, 63, 36, 30,
|
53, 0, 40, 4, 58, 61, 37, 46, 56, 51, 21, 20, 27, 17, 15, 26, 13, 30, 52, 63, 36, 30, 57, 34, 22, 37, 35, 6, 12, 25,
|
||||||
57, 34, 22, 37, 35, 6, 12, 25, 50, 49, 59, 23, 49, 27, 51, 58, 39, 28, 60, 20, 31, 36,
|
50, 49, 59, 23, 49, 27, 51, 58, 39, 28, 60, 20, 31, 36, 41, 11, 7, 29, 24, 24, 61, 62, 57, 4, 28, 48, 55, 50, 38, 29,
|
||||||
41, 11, 7, 29, 24, 24, 61, 62, 57, 4, 28, 48, 55, 50, 38, 29, 10, 40, 42, 15, 23, 47,
|
10, 40, 42, 15, 23, 47, 42, 62, 47, 1, 60, 5, 43, 21, 1, 46, 45, 9, 9, 14, 38, 13, 56, 0, 31, 59, 39, 6, 35, 41, 55,
|
||||||
42, 62, 47, 1, 60, 5, 43, 21, 1, 46, 45, 9, 9, 14, 38, 13, 56, 0, 31, 59, 39, 6, 35,
|
5, 34, 3, 7, 33, 33, 45, 16, 16, 32, 43, 18, 44, 22, 14, 17, 10, 11, 53, 18, 44, 19, 52, 2, 32, 12, 8, 2, 54, 26, 48,
|
||||||
41, 55, 5, 34, 3, 7, 33, 33, 45, 16, 16, 32, 43, 18, 44, 22, 14, 17, 10, 11, 53, 18,
|
8, 3, 63, 54, 19, 25,
|
||||||
44, 19, 52, 2, 32, 12, 8, 2, 54, 26, 48, 8, 3, 63, 54, 19, 25,
|
|
||||||
];
|
];
|
||||||
assert_eq!(namer.name_base.to_vec(), base_name_vec);
|
assert_eq!(namer.name_base.to_vec(), base_name_vec);
|
||||||
namer.update_skill();
|
namer.update_skill();
|
||||||
@ -496,8 +527,8 @@ mod test {
|
|||||||
|
|
||||||
namer.update_skill();
|
namer.update_skill();
|
||||||
let skill_prop_vec: Vec<u8> = vec![
|
let skill_prop_vec: Vec<u8> = vec![
|
||||||
13, 0, 0, 0, 0, 0, 0, 0, 6, 8, 0, 1, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
13, 0, 0, 0, 0, 0, 0, 0, 6, 8, 0, 1, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0,
|
||||||
];
|
];
|
||||||
assert_eq!(namer.skl_freq.to_vec(), skill_prop_vec);
|
assert_eq!(namer.skl_freq.to_vec(), skill_prop_vec);
|
||||||
}
|
}
|
||||||
@ -509,8 +540,8 @@ mod test {
|
|||||||
|
|
||||||
namer.update_skill();
|
namer.update_skill();
|
||||||
let skill_id_vec: Vec<u8> = vec![
|
let skill_id_vec: Vec<u8> = vec![
|
||||||
9, 13, 12, 38, 4, 27, 26, 15, 16, 32, 24, 5, 7, 21, 18, 10, 37, 2, 6, 20, 39, 1, 14, 3,
|
9, 13, 12, 38, 4, 27, 26, 15, 16, 32, 24, 5, 7, 21, 18, 10, 37, 2, 6, 20, 39, 1, 14, 3, 11, 29, 22, 33, 19, 0, 30,
|
||||||
11, 29, 22, 33, 19, 0, 30, 31, 17, 28, 34, 35, 23, 8, 25, 36,
|
31, 17, 28, 34, 35, 23, 8, 25, 36,
|
||||||
];
|
];
|
||||||
assert_eq!(namer.skl_id.to_vec(), skill_id_vec);
|
assert_eq!(namer.skl_id.to_vec(), skill_id_vec);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
pub struct Player {
|
pub struct Player {
|
||||||
team: String,
|
team: String,
|
||||||
name: String,
|
name: String,
|
||||||
weapon: String,
|
weapon: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,20 +2,17 @@
|
|||||||
macro_rules! val {
|
macro_rules! val {
|
||||||
() => {
|
() => {
|
||||||
[
|
[
|
||||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
|
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
|
||||||
24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
|
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
|
||||||
46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
|
61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
|
||||||
68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
|
90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
|
||||||
90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
|
115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137,
|
||||||
109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
|
138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
|
||||||
126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
|
161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
|
||||||
143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
|
184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206,
|
||||||
160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176,
|
207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229,
|
||||||
177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193,
|
230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
|
||||||
194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
|
253, 254, 255,
|
||||||
211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
|
|
||||||
228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244,
|
|
||||||
245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
|
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
19
news.md
Normal file
19
news.md
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# 各种"新闻"
|
||||||
|
|
||||||
|
## tswn
|
||||||
|
|
||||||
|
### 0.1.3
|
||||||
|
|
||||||
|
> 550E/d
|
||||||
|
|
||||||
|
夸张, 比 0.1.1 快了 100E/d
|
||||||
|
|
||||||
|
### 0.1.2
|
||||||
|
|
||||||
|
优化了一些边界检查, 反正就是没用
|
||||||
|
`445E/d -> 478E/d`
|
||||||
|
参考 bench/tswn.md
|
||||||
|
|
||||||
|
### 0.1.1
|
||||||
|
|
||||||
|
随手发一版
|
32
readme.md
32
readme.md
@ -5,28 +5,34 @@
|
|||||||
## 用法
|
## 用法
|
||||||
|
|
||||||
```text
|
```text
|
||||||
Usage: namerena-rs.exe [OPTIONS] --team <TEAM>
|
Usage: tswn.exe [OPTIONS] --team <TEAM>
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
--start <START> 开始的 id [default: 0]
|
--start <START> 开始的 id [default: 0]
|
||||||
--end <END> 结束的 id [default: 18446744073709551615]
|
--end <END> 结束的 id [default: 18446744073709551615]
|
||||||
-t, --thread-count <THREAD_COUNT> 线程数 [default: 10]
|
-t, --thread-count <THREAD_COUNT> 线程数 [default: 10]
|
||||||
-p, --prop-expected <PROP_EXPECT> 八围预期值 [default: 740]
|
-p, --prop-expected <PROP_EXPECT> 八围预期值 [default: 640]
|
||||||
|
-q, --qp-expected <QP_EXPECT> qp 预期值 [default: 0]
|
||||||
--team <TEAM> 队伍名称
|
--team <TEAM> 队伍名称
|
||||||
-r, --report-interval <REPORT_INTERVAL> 预期状态输出时间间隔 (秒) [default: 10]
|
-r, --report-interval <REPORT_INTERVAL> 预期状态输出时间间隔 (秒) [default: 10]
|
||||||
-h, --help Print help
|
-h, --help Print help
|
||||||
```
|
```
|
||||||
|
|
||||||
```text
|
```text
|
||||||
2024-03-01T18:37:10.173136Z INFO namerena_rs: | 5|Id: 3739645623|469537.07/s 405.680E/d 9.82⬆️|6 |预计:1091308155:41:31|
|
2024-04-25T14:38:37.928073Z INFO tswn: 输出文件: "./namerena/namerena-shenjacks-2024-04-25_22-38-37.txt"
|
||||||
2024-03-01T18:37:10.194772Z INFO namerena_rs: | 2|Id: 3734123020|473225.72/s 408.867E/d 9.74⬆️|4 |预计:1082803227:51:0|
|
2024-04-25T14:38:37.928448Z INFO tswn: 开始: 0 结尾: 100000000
|
||||||
2024-03-01T18:37:10.231521Z INFO namerena_rs: | 8|Id: 3729376726|469175.03/s 405.367E/d 9.72⬆️|6 |预计:1092150173:10:30|
|
2024-04-25T14:38:37.928527Z INFO tswn: 线程数: 1
|
||||||
2024-03-01T18:37:10.251452Z INFO namerena_rs: | 9|Id: 3732033027|472235.53/s 408.012E/d 9.75⬆️|9 |预计:1085073231:32:47|
|
2024-04-25T14:38:37.928582Z INFO tswn: 八围预期: 640
|
||||||
2024-03-01T18:37:10.340098Z INFO namerena_rs: | 3|Id: 3725914021|468009.19/s 404.360E/d 9.70⬆️|4 |预计:1094871161:39:53|
|
2024-04-25T14:38:37.928633Z INFO tswn: 队伍名: shenjacks
|
||||||
2024-03-01T18:37:20.400566Z INFO namerena_rs: | 1|Id: 3795115419|451859.64/s 390.407E/d 10.40⬇️|6 |预计:1134003212:16:47|
|
2024-04-25T14:38:37.928689Z INFO tswn: 输出文件名: "./namerena/namerena-shenjacks-2024-04-25_22-38-37.txt"
|
||||||
2024-03-01T18:37:20.486611Z INFO namerena_rs: |10|Id: 3793752828|449366.88/s 388.253E/d 10.46⬇️|5 |预计:1140294453:44:10|
|
2024-04-25T14:38:37.928773Z INFO tswn: 开始计算
|
||||||
2024-03-01T18:37:20.496393Z INFO namerena_rs: | 6|Id: 3798215724|452784.92/s 391.206E/d 10.53⬇️|7 |预计:1131686538:10:2|
|
2024-04-25T14:38:37.928857Z INFO tswn: 线程 thread_0 开始计算
|
||||||
2024-03-01T18:37:20.541673Z INFO namerena_rs: | 7|Id: 3796865625|450432.78/s 389.174E/d 10.44⬇️|8 |预计:1137595813:34:8|
|
2024-04-25T14:38:37.947371Z INFO tswn::cacluate: | 1|Id: 10000|542408.18/s 468.641E/d 0.02⬆️|0 |预计:0:3:4|
|
||||||
2024-03-01T18:37:20.587515Z INFO namerena_rs: | 5|Id: 3786599323|450863.35/s 389.546E/d 10.41⬇️|6 |预计:1136508335:7:17|
|
2024-04-25T14:38:48.111355Z INFO tswn::cacluate: | 1|Id: 5434080|533663.84/s 461.086E/d 10.16⬇️|0 |预计:0:2:57|
|
||||||
2024-03-01T18:37:20.606505Z INFO namerena_rs: | 4|Id: 3791895222|448066.32/s 387.129E/d 10.57⬇️|7 |预计:1143602856:29:37|
|
2024-04-25T14:38:58.566294Z INFO tswn::cacluate: | 1|Id: 10770710|510448.33/s 441.027E/d 10.45⬇️|0 |预计:0:2:54|
|
||||||
|
2024-04-25T14:39:08.419676Z INFO tswn::cacluate: | 1|Id: 15875190|518062.38/s 447.606E/d 9.85⬆️|0 |预计:0:2:42|
|
||||||
|
2024-04-25T14:39:18.371574Z INFO tswn::cacluate: | 1|Id: 21055810|520575.43/s 449.777E/d 9.95⬆️|0 |预计:0:2:31|
|
||||||
|
2024-04-25T14:39:28.277127Z INFO tswn::cacluate: | 1|Id: 26261560|525550.00/s 454.075E/d 9.91⬆️|0 |预计:0:2:20|
|
||||||
|
2024-04-25T14:39:38.073338Z INFO tswn::cacluate: | 1|Id: 31517060|536495.12/s 463.532E/d 9.80⬆️|0 |预计:0:2:7|
|
||||||
|
2024-04-25T14:39:48.224642Z INFO tswn::cacluate: | 1|Id: 36882010|528507.78/s 456.631E/d 10.15⬇️|0 |预计:0:1:59|
|
||||||
```
|
```
|
||||||
|
@ -83,10 +83,7 @@ impl WebDriverRunner {
|
|||||||
|
|
||||||
done_target.wait_until().has_attribute("done", "true").await?;
|
done_target.wait_until().has_attribute("done", "true").await?;
|
||||||
|
|
||||||
let win_data = self
|
let win_data = self.driver.execute("return arguments[0].win_data", vec![done_target.to_json()?]).await?;
|
||||||
.driver
|
|
||||||
.execute("return arguments[0].win_data", vec![done_target.to_json()?])
|
|
||||||
.await?;
|
|
||||||
let win_data: WinData = serde_json::from_value(win_data.json().to_owned())?;
|
let win_data: WinData = serde_json::from_value(win_data.json().to_owned())?;
|
||||||
Ok(win_data)
|
Ok(win_data)
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
# cargo fmt config
|
# cargo fmt config
|
||||||
|
|
||||||
# 最大行长
|
# 最大行长
|
||||||
max_width = 100
|
max_width = 130
|
||||||
# 链式调用的最大长度
|
# 链式调用的最大长度
|
||||||
chain_width = 80
|
chain_width = 90
|
||||||
# 数组的最大长度
|
# 数组的最大长度
|
||||||
array_width = 70
|
array_width = 80
|
||||||
# 函数参数的最大长度
|
# 函数参数的最大长度
|
||||||
attr_fn_like_width = 60
|
attr_fn_like_width = 60
|
||||||
# 函数调用参数的最大长度
|
# 函数调用参数的最大长度
|
||||||
|
@ -69,11 +69,7 @@ async fn execute_gpu(numbers: &[u32]) -> Option<Vec<u32>> {
|
|||||||
execute_gpu_inner(&device, &queue, numbers).await
|
execute_gpu_inner(&device, &queue, numbers).await
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn execute_gpu_inner(
|
async fn execute_gpu_inner(device: &wgpu::Device, queue: &wgpu::Queue, numbers: &[u32]) -> Option<Vec<u32>> {
|
||||||
device: &wgpu::Device,
|
|
||||||
queue: &wgpu::Queue,
|
|
||||||
numbers: &[u32],
|
|
||||||
) -> Option<Vec<u32>> {
|
|
||||||
// Loads the shader from WGSL
|
// Loads the shader from WGSL
|
||||||
let cs_module = device.create_shader_module(wgpu::ShaderModuleDescriptor {
|
let cs_module = device.create_shader_module(wgpu::ShaderModuleDescriptor {
|
||||||
label: None,
|
label: None,
|
||||||
@ -135,8 +131,7 @@ async fn execute_gpu_inner(
|
|||||||
|
|
||||||
// A command encoder executes one or many pipelines.
|
// A command encoder executes one or many pipelines.
|
||||||
// It is to WebGPU what a command buffer is to Vulkan.
|
// It is to WebGPU what a command buffer is to Vulkan.
|
||||||
let mut encoder =
|
let mut encoder = device.create_command_encoder(&wgpu::CommandEncoderDescriptor { label: None });
|
||||||
device.create_command_encoder(&wgpu::CommandEncoderDescriptor { label: None });
|
|
||||||
{
|
{
|
||||||
let mut cpass = encoder.begin_compute_pass(&wgpu::ComputePassDescriptor {
|
let mut cpass = encoder.begin_compute_pass(&wgpu::ComputePassDescriptor {
|
||||||
label: None,
|
label: None,
|
||||||
|
Loading…
Reference in New Issue
Block a user